:root{--ink:#ece7dc;--paper:#0a0a0a;--red:#b31212;--red-soft:#b312128c;--tape:#ece7d638;font-family:Special Elite,Courier New,monospace}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{background:var(--paper);height:100%;color:var(--ink);overflow:hidden}button{cursor:pointer;font-family:inherit}.app{flex-direction:column;height:100%;display:flex}.topnav{z-index:20;background:#060606eb;border-bottom:1px dashed #ece7d640;justify-content:space-between;align-items:center;padding:.65rem 1.4rem;display:flex;position:relative}.brand{color:var(--ink);letter-spacing:.35em;background:0 0;border:none;align-items:center;gap:.6rem;font-size:.85rem;display:flex}.brand img{object-fit:contain;filter:drop-shadow(0 0 8px #b31212b3);background:#000;border-radius:6px;width:38px;height:38px}.tabs{gap:.4rem;display:flex}.tab{color:#ece7d699;letter-spacing:.12em;background:0 0;border:1px solid #0000;padding:.45rem .9rem;font-size:.8rem;transition:all .18s;transform:rotate(-.5deg)}.tab:nth-child(2){transform:rotate(.7deg)}.tab:hover{color:var(--ink);border-color:#ece7d64d}.tab.active{color:var(--ink);background:var(--red);border-color:var(--red);transform:rotate(-1.2deg);box-shadow:3px 3px #ece7d62e}.stage{flex:1;min-height:0;position:relative}.cover{background:radial-gradient(at 30% 20%,#b3121229,#0000 55%),radial-gradient(at 75% 80%,#b312121a,#0000 50%),#070707;justify-content:center;align-items:center;height:100%;display:flex;position:relative;overflow:hidden}.cover-grain{pointer-events:none;opacity:.5;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='0.16'/%3E%3C/svg%3E");position:absolute;inset:0}.cover-inner{z-index:2;text-align:center;max-width:640px;padding:2rem;position:relative}.cover-logo{object-fit:contain;filter:drop-shadow(0 0 26px #b312128c);width:220px;height:220px;margin-bottom:.5rem;animation:6s ease-in-out infinite floaty}@keyframes floaty{0%,to{transform:translateY(0)rotate(-1deg)}50%{transform:translateY(-10px)rotate(1deg)}}.cover-eyebrow{color:#ece7d6bf;font-family:Caveat,cursive;font-size:1.5rem}.cover-title{text-shadow:4px 4px #b3121273;margin:.4rem 0 1rem;font-family:Permanent Marker,cursive;font-size:clamp(1.8rem,4.5vw,3.2rem);line-height:1.15}.cover-sub{color:#ece7d6b3;margin-bottom:1.8rem;font-size:.95rem;line-height:1.7}.cover-cta{color:var(--ink);background:var(--red);border:none;padding:.85rem 2.1rem;font-family:Permanent Marker,cursive;font-size:1.15rem;transition:transform .15s,box-shadow .15s;transform:rotate(-1.5deg);box-shadow:5px 5px #ece7d633}.cover-cta:hover{transform:rotate(.5deg)scale(1.05);box-shadow:7px 7px #ece7d640}.cover-footer{letter-spacing:.3em;color:#ece7d680;justify-content:center;gap:1.2rem;font-size:.7rem;display:flex;position:absolute;bottom:1.2rem;left:0;right:0}.cover-x{color:var(--red)}.cover-scraps .scrap{z-index:1;pointer-events:none;position:absolute}.tape{background:var(--tape);-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);width:130px;height:34px}.tape-1{top:8%;left:6%;transform:rotate(-24deg)}.tape-2{bottom:14%;right:7%;transform:rotate(18deg)}.doodle{color:#ece7d673;font-family:Caveat,cursive}.doodle-star{color:var(--red-soft);font-size:3rem;top:18%;right:12%;transform:rotate(12deg)}.doodle-heart{color:var(--red-soft);font-size:2.4rem;bottom:22%;left:10%;transform:rotate(-10deg)}.doodle-note{max-width:150px;font-size:1.35rem;top:34%;left:4%;transform:rotate(-8deg)}.doodle-frame{letter-spacing:.1em;font-size:1rem;bottom:32%;right:4%;transform:rotate(6deg)}.wall-stage{position:absolute;inset:0}.wall-stage canvas{touch-action:none}.wall-hint{text-align:center;letter-spacing:.08em;color:#ece7d6d9;pointer-events:none;font-size:.85rem;line-height:1.7;transition:opacity .3s;position:absolute;bottom:2rem;left:50%;transform:translate(-50%)}.hint-arrow{color:var(--red);animation:1.6s ease-in-out infinite bounce;display:block}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(6px)}}.wall-caption{text-align:center;opacity:0;pointer-events:none;position:absolute;top:14%;left:50%;transform:translate(-50%)rotate(-2deg)}.caption-script{text-shadow:0 0 30px #000c;font-family:Permanent Marker,cursive;font-size:clamp(2rem,6vw,4rem);display:block}.caption-sub{letter-spacing:.3em;color:#ece7d6cc;margin-top:.4rem;font-size:.85rem;display:block}.customize-toggle{z-index:5;color:var(--ink);background:#0a0a0ad9;border:1px solid #ece7d659;padding:.5rem 1rem;font-family:Permanent Marker,cursive;font-size:.95rem;position:absolute;top:1.1rem;right:1.2rem;transform:rotate(1.5deg)}.customize-toggle.open,.customize-toggle:hover{background:var(--red);border-color:var(--red)}.customize-panel{z-index:5;background:#080808f0;border:1px dashed #ece7d666;width:300px;max-height:calc(100% - 6rem);padding:1.1rem 1.2rem 1.4rem;position:absolute;top:4.4rem;right:1.2rem;overflow-y:auto;transform:rotate(-.4deg);box-shadow:8px 8px #b3121240}.panel-title{color:var(--red);margin-bottom:.3rem;font-family:Permanent Marker,cursive;font-size:1.2rem}.panel-blurb{color:#ece7d6b3;margin-bottom:.9rem;font-family:Caveat,cursive;font-size:1.05rem;line-height:1.35}.panel-label{letter-spacing:.18em;text-transform:uppercase;color:#ece7d6a6;justify-content:space-between;margin:.85rem 0 .35rem;font-size:.7rem;display:flex}.panel-label span{color:var(--ink)}.customize-panel input[type=range]{width:100%;accent-color:var(--red)}.customize-panel input[type=color]{background:0 0;border:1px solid #ece7d64d;width:100%;height:34px;padding:2px}.panel-row{align-items:flex-end;gap:.5rem;display:flex}.panel-col{flex:1;min-width:0}.panel-btn{background:var(--red);color:var(--ink);letter-spacing:.08em;border:none;flex:1;padding:.55rem .6rem;font-size:.78rem}.panel-btn.ghost{color:#ece7d6d9;background:0 0;border:1px solid #ece7d659;width:100%}.panel-btn.reset{width:100%;color:var(--red);background:0 0;border:1px dashed #b31212cc;margin-top:1.1rem}.panel-btn:hover{filter:brightness(1.2)}.panel-text{width:100%;color:var(--ink);background:#ece7d614;border:1px solid #ece7d64d;padding:.5rem .6rem;font-family:inherit;font-size:.85rem}.yearbook{background:radial-gradient(at 70% 10%,#b312121f,#0000 50%),#0b0a09;height:100%;padding:3rem 1.6rem 4rem;overflow-y:auto}.yb-header{text-align:center;max-width:620px;margin:0 auto 2.6rem}.yb-title{text-shadow:3px 3px #b3121273;margin-bottom:.6rem;font-family:Permanent Marker,cursive;font-size:clamp(1.7rem,4vw,2.6rem)}.yb-sub{color:#ece7d6b3;font-family:Caveat,cursive;font-size:1.3rem;line-height:1.4}.yb-grid{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:1.6rem;max-width:1100px;margin:0 auto;display:grid}.yb-card{color:#1c1a17;transform:rotate(var(--tilt));background:#f2eee2;padding:1.1rem 1.1rem 1.4rem;transition:transform .2s;position:relative;box-shadow:6px 8px 18px #0000008c}.yb-card:hover{transform:rotate(0)translateY(-6px)}.yb-card.placeholder{color:var(--ink);background:#f2eee214;border:1px dashed #ece7d673}.yb-tape{background:#b3121273;width:90px;height:24px;position:absolute;top:-12px;left:50%;transform:translate(-50%)rotate(-3deg)}.yb-photo{background:#14100e;justify-content:center;align-items:center;height:130px;margin-bottom:.8rem;display:flex}.yb-card.placeholder .yb-photo{background:#14100e99}.yb-photo-initial{color:var(--red);font-family:Permanent Marker,cursive;font-size:3rem}.yb-photo-plus{color:#ece7d680;font-size:3rem}.yb-name{font-family:Permanent Marker,cursive;font-size:1.15rem}.yb-role{letter-spacing:.25em;text-transform:uppercase;background:var(--red);color:var(--ink);margin:.35rem 0 .6rem;padding:.15rem .5rem;font-size:.65rem;display:inline-block;transform:rotate(-1deg)}.yb-superlative{font-family:Caveat,cursive;font-size:1.25rem;line-height:1.2}.yb-note{opacity:.75;margin-top:.45rem;font-size:.8rem;line-height:1.55}.yb-footer{text-align:center;color:#ece7d699;letter-spacing:.15em;margin-top:3.5rem;font-size:.8rem}.yb-logo{object-fit:contain;filter:drop-shadow(0 0 14px #b3121299);width:90px;height:90px;margin-bottom:.6rem}@media (width<=640px){.topnav{flex-direction:column;gap:.5rem}.customize-panel{width:calc(100% - 2.4rem)}}
