:root{--cream:#fffaf0;--paper:#fff;--ink:#2b2d42;--ink-2:#5b5e78;--line:#2b2d42;--orange:#ff9f43;--blue:#4aa3ff;--purple:#a78bfa;--green:#34d399;--pink:#f472b6;--yellow:#facc15;--red:#ef4444;--shadow:0 5px 0 var(--ink);--radius:22px;--font:"Fredoka", "Baloo 2", system-ui, -apple-system, "Segoe UI", sans-serif;--safe-b:env(safe-area-inset-bottom,0px);--safe-t:env(safe-area-inset-top,0px)}*{box-sizing:border-box}html,body{height:100%;font-family:var(--font);color:var(--ink);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overscroll-behavior:none;background:#9fd3f5;margin:0;overflow:hidden}#scene{touch-action:none;outline:none;width:100%;height:100%;display:block;position:fixed;inset:0}#labels{pointer-events:none;position:fixed;inset:0;overflow:hidden}#ui{pointer-events:none;position:fixed;inset:0}#ui>*{pointer-events:auto}button{color:inherit;cursor:pointer;font-family:inherit}a{color:inherit}.hidden{display:none!important}.noscript{background:var(--cream);max-width:40rem;margin:auto;padding:2rem}.btn{--c:var(--paper);border:3px solid var(--line);background:var(--c);box-shadow:0 4px 0 var(--ink);white-space:nowrap;-webkit-user-select:none;user-select:none;border-radius:999px;justify-content:center;align-items:center;gap:.5em;padding:.8em 1.25em;font-size:1rem;font-weight:600;line-height:1;text-decoration:none;transition:transform 80ms,box-shadow 80ms,filter .15s;display:inline-flex;transform:translateY(0)}.btn:hover{filter:brightness(1.05);box-shadow:0 5px 0 var(--ink);transform:translateY(-1px)}.btn:active{box-shadow:0 1px 0 var(--ink);transform:translateY(3px)}.btn:focus-visible,.icon-btn:focus-visible,.chip-btn:focus-visible{outline:3px solid var(--blue);outline-offset:3px}.btn.primary{--c:var(--orange);color:#fff;text-shadow:0 2px #0000002e}.btn.blue{--c:var(--blue);color:#fff;text-shadow:0 2px #0000002e}.btn.green{--c:var(--green);color:#0b3b2c}.btn.purple{--c:var(--purple);color:#fff;text-shadow:0 2px #0000002e}.btn.small{box-shadow:0 3px 0 var(--ink);border-width:2.5px;padding:.6em 1em;font-size:.88rem}.btn.big{padding:.9em 1.6em;font-size:1.25rem}.icon-btn{border:3px solid var(--line);background:var(--paper);width:48px;height:48px;box-shadow:0 4px 0 var(--ink);border-radius:16px;place-items:center;font-size:22px;transition:transform 80ms,box-shadow 80ms;display:grid;position:relative}.icon-btn:active{box-shadow:0 1px 0 var(--ink);transform:translateY(3px)}.icon-btn .kbd{background:var(--ink);color:#fff;border-radius:6px;padding:2px 5px;font-size:10px;font-weight:700;position:absolute;bottom:-8px;right:-8px}.icon-btn.off{opacity:.55}.kbd-inline{border:2px solid var(--ink);text-align:center;background:#fff;border-bottom-width:4px;border-radius:7px;min-width:1.6em;padding:.1em .4em;font-size:.85em;font-weight:700;display:inline-block}#title{text-align:center;padding:24px 16px calc(24px + var(--safe-b));background:radial-gradient(at 50% 45%,#fffaf033,#14284659 90%);flex-direction:column;justify-content:center;align-items:center;transition:opacity .8s,transform .8s;display:flex;position:fixed;inset:0}#title.leaving{opacity:0;pointer-events:none;transform:scale(1.06)}.status-pill{background:var(--paper);border:3px solid var(--ink);box-shadow:0 3px 0 var(--ink);border-radius:999px;align-items:center;gap:.5em;padding:.4em .9em;font-size:.9rem;font-weight:600;display:inline-flex}.status-pill:before{content:"";background:#22c55e;border-radius:50%;width:10px;height:10px;animation:1.6s infinite pulse;box-shadow:0 0 0 3px #bbf7d0}@keyframes pulse{50%{box-shadow:0 0 0 6px #bbf7d04d}}.logo{letter-spacing:.01em;flex-wrap:wrap;justify-content:center;margin:.25em 0 .05em;font-size:clamp(3rem,11vw,7.5rem);font-weight:700;line-height:.95;display:flex}.logo span{color:var(--c);-webkit-text-stroke:3px var(--ink);paint-order:stroke fill;text-shadow:0 7px 0 var(--ink);animation:2.4s ease-in-out infinite bob;animation-delay:calc(var(--i) * 90ms);display:inline-block}@keyframes bob{0%,to{transform:translateY(0)rotate(0)}50%{transform:translateY(-10px) rotate(calc(var(--r) * 1deg))}}.subtitle{color:#fff;text-shadow:0 3px 0 var(--ink), 0 0 20px #00000040;-webkit-text-stroke:1px var(--ink);paint-order:stroke fill;font-size:clamp(1.1rem,3.3vw,1.7rem);font-weight:700}.title-card{background:var(--cream);border:3px solid var(--ink);box-shadow:0 8px 0 var(--ink);border-radius:28px;width:min(520px,100%);margin-top:18px;padding:20px 22px 22px}.title-card p{color:var(--ink-2);margin:0 0 14px;font-size:1.05rem;line-height:1.4}.title-actions{flex-wrap:wrap;justify-content:center;gap:12px;display:flex}.hoodie-pick{color:var(--ink-2);flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;margin-top:16px;font-size:.95rem;font-weight:600;display:flex}.swatch{border:3px solid var(--ink);background:var(--c);width:30px;height:30px;box-shadow:0 2px 0 var(--ink);border-radius:50%;padding:0}.swatch[aria-pressed=true]{outline:3px solid var(--ink);outline-offset:2px;transform:scale(1.1)}.loadbar{border:2.5px solid var(--ink);background:#fff;border-radius:99px;height:10px;margin-top:14px;overflow:hidden}.loadbar i{background:linear-gradient(90deg, var(--orange), var(--pink), var(--purple), var(--blue));width:0;height:100%;transition:width .3s;display:block}.title-foot{color:#fff;text-shadow:0 2px 0 var(--ink);margin-top:16px;font-size:.9rem;font-weight:600}.title-foot a{color:#fff}.hud-tl{top:calc(14px + var(--safe-t));flex-direction:column;align-items:flex-start;gap:8px;display:flex;position:fixed;left:14px}.brand{background:var(--cream);border:3px solid var(--ink);box-shadow:0 4px 0 var(--ink);cursor:pointer;border-radius:18px;align-items:center;gap:10px;padding:6px 14px 6px 6px;font-size:1.05rem;font-weight:700;display:flex}.brand .avatar{border:2.5px solid var(--ink);background:url(../media/lonnie.webp) 50%/cover;border-radius:12px;width:38px;height:38px}.brand small{color:var(--ink-2);margin-top:1px;font-size:.78rem;font-weight:500;display:block}.zone-chip{background:var(--ink);color:#fff;border-radius:999px;align-items:center;gap:6px;padding:6px 12px 6px 10px;font-size:.9rem;font-weight:600;display:flex;box-shadow:0 3px #00000040}.zone-chip i{background:var(--zc,var(--orange));border-radius:50%;width:10px;height:10px}.hud-tr{top:calc(14px + var(--safe-t));align-items:center;gap:10px;display:flex;position:fixed;right:14px}.smile-count{background:var(--yellow);border:3px solid var(--ink);box-shadow:0 4px 0 var(--ink);border-radius:16px;align-items:center;gap:6px;height:48px;padding:0 12px;font-size:1.1rem;font-weight:700;display:flex}.smile-count.bump{animation:.45s bump}@keyframes bump{30%{transform:scale(1.25)rotate(-6deg)}60%{transform:scale(.95)}}.portfolio-btn{height:48px}.prompt{left:50%;bottom:calc(26px + var(--safe-b));opacity:0;background:var(--cream);border:3px solid var(--ink);box-shadow:0 5px 0 var(--ink);pointer-events:none;white-space:nowrap;border-radius:999px;align-items:center;gap:10px;max-width:calc(100vw - 32px);padding:8px 18px 8px 8px;font-size:1.05rem;font-weight:600;transition:opacity .2s,transform .2s;display:flex;position:fixed;transform:translate(-50%)translateY(20px)}.prompt.show{opacity:1;pointer-events:auto;cursor:pointer;transform:translate(-50%)translateY(0)}.prompt .key{background:var(--orange);color:#fff;border:2.5px solid var(--ink);border-radius:12px;place-items:center;min-width:36px;height:36px;font-weight:700;display:grid}.prompt .sub{color:var(--ink-2);text-overflow:ellipsis;font-size:.9rem;font-weight:500;overflow:hidden}.controls-hint{left:14px;bottom:calc(14px + var(--safe-b));border:3px solid var(--ink);box-shadow:0 4px 0 var(--ink);background:#fffaf0ed;border-radius:18px;padding:10px 14px;font-size:.88rem;line-height:1.75;transition:opacity .6s;position:fixed}.controls-hint b{font-weight:600}.controls-hint{padding-right:34px}.controls-hint .close{background:0 0;border:0;font-size:1.1rem;position:absolute;top:4px;right:8px}.minimap-wrap{right:14px;bottom:calc(14px + var(--safe-b));width:170px;height:170px;position:fixed}.minimap{border:4px solid var(--ink);width:100%;height:100%;box-shadow:0 5px 0 var(--ink);cursor:pointer;background:#3f9be0;border-radius:50%;display:block}.compass{background:var(--red);color:#fff;border:2.5px solid var(--ink);pointer-events:none;transform-origin:50% 91px;border-radius:50%;place-items:center;width:26px;height:26px;font-size:.75rem;font-weight:700;display:grid;position:absolute;top:-6px;left:50%;transform:translate(-50%)}.toasts{top:calc(80px + var(--safe-t));pointer-events:none;flex-direction:column;align-items:flex-end;gap:10px;display:flex;position:fixed;right:14px}.toast{background:var(--cream);border:3px solid var(--ink);box-shadow:0 5px 0 var(--ink);border-radius:18px;align-items:center;gap:12px;max-width:340px;padding:10px 16px 10px 10px;animation:.45s cubic-bezier(.2,1.4,.4,1) toastIn;display:flex}.toast.out{animation:.35s forwards toastOut}.toast .ti{background:var(--yellow);border:2.5px solid var(--ink);border-radius:14px;flex:none;place-items:center;width:46px;height:46px;font-size:24px;display:grid}.toast .tt{font-weight:700}.toast .tk{color:var(--orange);text-transform:uppercase;letter-spacing:.06em;font-size:.75rem;font-weight:700}.toast .td{color:var(--ink-2);font-size:.88rem}@keyframes toastIn{0%{opacity:0;transform:translate(120%)scale(.8)}}@keyframes toastOut{to{opacity:0;transform:translate(120%)}}.zone-banner{text-align:center;pointer-events:none;opacity:0;position:fixed;top:22%;left:50%;transform:translate(-50%)}.zone-banner.show{animation:3.2s forwards zone}.zone-banner .zn{color:#fff;-webkit-text-stroke:2.5px var(--ink);paint-order:stroke fill;text-shadow:0 5px 0 var(--ink);white-space:nowrap;font-size:clamp(2rem,6vw,3.6rem);font-weight:700}.zone-banner .zs{color:var(--ink);background:var(--zc);border:3px solid var(--ink);border-radius:999px;margin-top:6px;padding:4px 14px;font-size:1.15rem;font-weight:600;display:inline-block}@keyframes zone{0%{opacity:0;transform:translate(-50%)translateY(20px)scale(.9)}12%,75%{opacity:1;transform:translate(-50%)translateY(0)scale(1)}to{opacity:0;transform:translate(-50%)translateY(-10px)}}.wlabel{text-align:center;white-space:nowrap;will-change:transform, opacity;transition:opacity .25s;position:absolute;top:0;left:0;transform:translate(-50%,-100%)}.wlabel .n{background:var(--cream);border:2.5px solid var(--ink);box-shadow:0 3px 0 var(--ink);border-radius:999px;padding:3px 11px;font-size:.92rem;font-weight:700;display:inline-block}.wlabel .n:before{content:"";background:var(--lc);vertical-align:1px;border:1.5px solid var(--ink);border-radius:50%;width:9px;height:9px;margin-right:6px;display:inline-block}.wlabel .s{color:#fff;text-shadow:0 1px 2px #0009,0 0 1px #000;margin-top:3px;font-size:.75rem;font-weight:600;display:block}.wlabel.near .n{background:var(--lc);color:#fff;text-shadow:0 1px #0000004d;transform:scale(1.08)}.wlabel.near .n:before{background:#fff}.wlabel .new{background:var(--red);color:#fff;vertical-align:2px;border:1.5px solid var(--ink);border-radius:6px;margin-left:6px;padding:1px 5px;font-size:.65rem;font-weight:700;display:inline-block}.modal-back{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#1e1e3773;justify-content:center;align-items:center;height:100dvh;padding:16px;animation:.2s fadeIn;display:flex;position:fixed;inset:0}.modal-back.out{animation:.2s forwards fadeOut}@keyframes fadeIn{0%{opacity:0}}@keyframes fadeOut{to{opacity:0}}.panel{background:var(--cream);border:4px solid var(--ink);box-shadow:0 10px 0 var(--ink);border-radius:30px;flex-direction:column;width:min(980px,100%);max-height:min(88dvh,820px);animation:.38s cubic-bezier(.2,1.35,.4,1) pop;display:flex;position:relative;overflow:hidden}.panel.narrow{width:min(620px,100%)}.modal-back.out .panel{animation:.2s forwards popOut}@keyframes pop{0%{opacity:0;transform:scale(.85)translateY(30px)}}@keyframes popOut{to{opacity:0;transform:scale(.92)translateY(20px)}}.panel-head{border-bottom:3px dashed #2b2d422e;align-items:center;gap:12px;padding:16px 18px 12px 22px;display:flex}.panel-head h2{flex:1;margin:0;font-size:1.55rem;line-height:1.1}.panel-head .kicker{text-transform:uppercase;letter-spacing:.08em;color:var(--ink-2);margin-bottom:2px;font-size:.78rem;font-weight:600;display:block}.close-x{border:3px solid var(--ink);background:var(--paper);width:44px;height:44px;box-shadow:0 3px 0 var(--ink);border-radius:14px;flex:none;font-size:1.3rem;font-weight:700}.close-x:active{box-shadow:0 1px 0 var(--ink);transform:translateY(2px)}.panel-body{-webkit-overflow-scrolling:touch;padding:20px 22px 24px;overflow:auto}.panel-foot{border-top:3px dashed #2b2d422e;flex-wrap:wrap;justify-content:space-between;gap:10px;padding:12px 18px;display:flex}.proj{grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:24px;display:grid}.gallery{flex-direction:column;gap:10px;min-width:0;display:flex}.stage{border:3px solid var(--ink);aspect-ratio:16/11;background:#1c1b2e;border-radius:20px;position:relative;overflow:hidden}.stage .bg{filter:blur(18px)brightness(.8);background-position:50%;background-size:cover;position:absolute;inset:-20px}.stage img{object-fit:contain;width:100%;height:100%;position:absolute;inset:0}.stage .nav{border:3px solid var(--ink);background:var(--cream);width:42px;height:42px;box-shadow:0 3px 0 var(--ink);border-radius:50%;font-size:1.1rem;font-weight:700;position:absolute;top:50%;transform:translateY(-50%)}.stage .nav.l{left:10px}.stage .nav.r{right:10px}.stage .counter{color:#fff;background:#0000008c;border-radius:99px;padding:3px 9px;font-size:.78rem;font-weight:600;position:absolute;bottom:10px;right:10px}.thumbs{gap:8px;padding-bottom:4px;display:flex;overflow-x:auto}.thumbs button{border:2.5px solid var(--ink);opacity:.6;background-position:50%;background-size:cover;border-radius:10px;flex:none;width:64px;height:48px;padding:0}.thumbs button[aria-current=true]{opacity:1;outline:3px solid var(--orange);outline-offset:1px}.meta-row{flex-wrap:wrap;gap:8px;margin-bottom:10px;display:flex}.chip{border:2px solid var(--ink);background:var(--paper);border-radius:99px;align-items:center;gap:5px;padding:4px 10px;font-size:.8rem;font-weight:600;display:inline-flex}.chip.cat{background:var(--cc);color:#fff;text-shadow:0 1px #00000040}.proj h3{margin:0 0 6px;font-size:1.35rem;line-height:1.25}.proj p{color:#3a3d57;margin:0 0 12px;line-height:1.5}.hl{gap:6px;margin:0 0 14px;padding:0;list-style:none;display:grid}.hl li{padding-left:26px;font-weight:500;position:relative}.hl li:before{content:"✦";color:var(--orange);position:absolute;left:4px}.contrib{border:2.5px dashed var(--orange);background:#fff7e6;border-radius:14px;margin-bottom:14px;padding:10px 12px;font-size:.95rem}.tags{flex-wrap:wrap;gap:6px;margin-bottom:16px;display:flex}.tags span{color:#3730a3;background:#eef2ff;border:2px solid #c7d2fe;border-radius:8px;padding:3px 8px;font-size:.8rem;font-weight:600}.links{flex-wrap:wrap;gap:10px;display:flex}.demo-cta{margin-bottom:14px}.app-icon{border:3px solid var(--ink);object-fit:cover;background:#fff;border-radius:16px;flex:none;width:58px;height:58px}.about{grid-template-columns:180px 1fr;gap:24px;display:grid}.about .photo{aspect-ratio:1;border:4px solid var(--ink);width:100%;box-shadow:0 6px 0 var(--ink);background:url(../media/lonnie.webp) 50%/cover;border-radius:24px;transform:rotate(-3deg)}.about p{color:#3a3d57;margin:0 0 12px;line-height:1.55}.about .fuel{text-align:center;color:var(--ink-2);margin-top:18px;font-weight:600}.about .fuel b{color:var(--ink);font-size:1.1rem;display:block}.why{gap:8px;margin:8px 0 0;padding:0;list-style:none;display:grid}.why li{border:2.5px solid var(--ink);background:#fff;border-radius:14px;padding:8px 12px 8px 38px;font-weight:500;position:relative}.why li:before{content:"✓";background:var(--green);color:#fff;border:2px solid var(--ink);border-radius:50%;place-items:center;width:20px;height:20px;font-size:.8rem;font-weight:700;display:grid;position:absolute;top:50%;left:10px;transform:translateY(-50%)}.section-title{margin:18px 0 8px;font-size:1.1rem}.skills-grid{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px;display:grid}.skill{border:3px solid var(--ink);box-shadow:0 4px 0 var(--ink);background:#fff;border-radius:18px;padding:12px 14px}.skill b{align-items:center;gap:8px;font-size:1.05rem;display:flex}.skill b:before{content:"";background:var(--sc);border:2px solid var(--ink);border-radius:3px;width:14px;height:14px;transform:rotate(45deg)}.skill span{color:var(--ink-2);margin-top:4px;font-size:.9rem;line-height:1.35;display:block}.philo{text-align:center;padding:10px 6px}.philo .glyph{border:3px solid var(--ink);width:86px;height:86px;box-shadow:0 5px 0 var(--ink);background:#ccfbf1;border-radius:26px;place-items:center;margin:0 auto 10px;font-size:3rem;display:grid}.philo p{max-width:30rem;margin:0 auto;font-size:1.15rem;line-height:1.5}.philo .dots{color:var(--ink-2);margin-top:16px;font-weight:600}.contact-grid{grid-template-columns:1.2fr 1fr;gap:22px;display:grid}.field{flex-direction:column;gap:6px;margin-bottom:12px;font-weight:600;display:flex}.field input,.field select,.field textarea{font:inherit;border:3px solid var(--ink);color:var(--ink);background:#fff;border-radius:14px;padding:10px 12px;font-weight:500}.field textarea{resize:vertical;min-height:110px}.field input:focus,.field select:focus,.field textarea:focus{outline:3px solid var(--blue);outline-offset:1px}.socials{gap:10px;display:grid}.socials a{border:3px solid var(--ink);box-shadow:0 3px 0 var(--ink);background:#fff;border-radius:14px;align-items:center;gap:10px;padding:10px 12px;font-weight:600;text-decoration:none;display:flex}.socials a i{background:var(--sc);border:2px solid var(--ink);border-radius:50%;width:14px;height:14px}.socials a:active{box-shadow:0 1px 0 var(--ink);transform:translateY(2px)}.email-big{word-break:break-all;font-size:1.1rem;font-weight:700}.note{color:var(--ink-2);font-size:.85rem}.contact-main{min-width:0;position:relative}.sent{text-align:center;background:var(--cream);background:linear-gradient(var(--cream), var(--cream)) padding-box, repeating-linear-gradient(-45deg, var(--red) 0 12px, #fff 12px 20px, var(--blue) 20px 32px, #fff 32px 40px) border-box;border:8px solid #0000;border-radius:18px;flex-direction:column;justify-content:center;align-items:center;padding:20px 18px;display:flex;position:relative;overflow:hidden}.sent[hidden]{display:none}.sent h3{outline:none;margin:6px 0 4px;font-size:1.7rem}.sent p{color:var(--ink-2);max-width:30ch;margin:0 0 16px;line-height:1.5}.sent-to{color:var(--ink);word-break:break-all}.sent-stage{place-items:center;width:100%;height:120px;display:grid;position:relative}.sent-env{opacity:0;grid-area:1/1;font-size:3.6rem;line-height:1}.sent-stamp{letter-spacing:.08em;text-transform:uppercase;color:var(--green);opacity:0;filter:saturate(1.3)brightness(.85);background:#fff;border:4px solid;border-radius:12px;grid-area:1/1;padding:4px 14px;font-size:1.5rem;font-weight:700;transform:rotate(-10deg);box-shadow:0 0 0 3px #fff,0 0 0 6px}.sent-stage i{border-radius:calc(var(--w) * 50%);background:var(--c);border:2px solid var(--ink);opacity:0;width:9px;height:14px;margin:-7px 0 0 -4px;position:absolute;top:50%;left:50%}.sent.go .sent-env{animation:1.3s cubic-bezier(.5,0,.3,1) forwards envFly}.sent.go .sent-stamp{animation:.45s cubic-bezier(.3,1.6,.5,1) 1.05s forwards stamp}.sent.go .sent-stage i{animation:1.1s cubic-bezier(.1,.8,.3,1) 1.1s forwards confetti}.sent.go h3,.sent.go p,.sent.go .sent-again{animation:.4s 1.3s both pop}@keyframes envFly{0%{opacity:0;transform:scale(.2)}20%{opacity:1;transform:scale(1.15)}30%,45%{transform:scale(1)rotate(-8deg)}38%{transform:scale(1)rotate(8deg)}60%{opacity:1;transform:translate(-10px,8px)rotate(-14deg)scale(.95)}to{opacity:0;transform:translate(220px,-140px)rotate(25deg)scale(.4)}}@keyframes stamp{0%{opacity:0;transform:scale(2.4)rotate(-25deg)}to{opacity:1;transform:scale(1)rotate(-10deg)}}@keyframes confetti{0%{opacity:1;transform:rotate(var(--a)) translateY(0) rotate(0)}80%{opacity:1}to{opacity:0;transform:rotate(var(--a)) translateY(calc(var(--d) * -1)) rotate(540deg)}}.tabs{gap:8px;display:flex}.tab{border:3px solid var(--ink);box-shadow:0 3px 0 var(--ink);background:#fff;border-radius:999px;padding:6px 14px;font-weight:600}.tab[aria-selected=true]{background:var(--ink);color:#fff}.jlist{gap:18px;display:grid}.jgroup h4{align-items:center;gap:8px;margin:0 0 8px;display:flex}.jgroup h4 i{background:var(--gc);border:2px solid var(--ink);border-radius:50%;width:12px;height:12px}.jitems{grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px;display:grid}.jitem{border:3px solid var(--ink);box-shadow:0 3px 0 var(--ink);background:#fff;border-radius:16px;align-items:center;gap:10px;padding:8px;display:flex}.jitem img,.jitem .ph{border:2px solid var(--ink);object-fit:cover;background:#e5e7eb;border-radius:12px;flex:none;place-items:center;width:52px;height:52px;font-size:22px;display:grid}.jitem .t{flex:1;min-width:0}.jitem .t b{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.jitem .t small{color:var(--ink-2);text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.jitem .seen{color:#15803d;font-size:.7rem;font-weight:700}.jitem .unseen{color:var(--red);font-size:.7rem;font-weight:700}.jitem .acts{flex-direction:column;gap:5px;display:flex}.ach-grid{grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px;display:grid}.ach{border:3px solid var(--ink);background:#fff;border-radius:16px;align-items:center;gap:10px;padding:10px;display:flex}.ach .ai{border:2.5px solid var(--ink);background:var(--yellow);border-radius:14px;flex:none;place-items:center;width:46px;height:46px;font-size:26px;display:grid}.ach.locked{opacity:.55}.ach.locked .ai{filter:grayscale();background:#e5e7eb}.ach b{display:block}.ach small{color:var(--ink-2)}.progress-line{flex-wrap:wrap;gap:16px;margin-bottom:14px;font-weight:600;display:flex}.progress-line span{border:2.5px solid var(--ink);background:#fff;border-radius:12px;padding:5px 10px}.map-wrap{aspect-ratio:1;width:min(88dvh - 190px,100%);min-width:min(300px,100%);margin:0 auto;position:relative}.map-wrap canvas{border:4px solid var(--ink);border-radius:24px;width:100%;height:100%;display:block}.map-pin{z-index:2;border:3px solid var(--ink);background:var(--pc);color:#fff;box-shadow:0 3px 0 var(--ink);white-space:nowrap;text-shadow:0 1px #0000004d;border-radius:999px;padding:4px 10px;font-size:.85rem;font-weight:700;position:absolute;transform:translate(-50%,-50%)}.map-pin:hover{transform:translate(-50%,-50%)scale(1.08)}.map-pin.proj{z-index:1;background:var(--pc);border-width:2.5px;width:18px;height:18px;padding:0;font-size:0}.map-pin.proj:after{content:attr(data-t);background:var(--ink);color:#fff;white-space:nowrap;opacity:0;pointer-events:none;border-radius:8px;padding:3px 7px;font-size:.72rem;transition:opacity .15s;position:absolute;bottom:130%;left:50%;transform:translate(-50%)}.map-pin.proj:hover:after,.map-pin.proj:focus-visible:after{opacity:1}.map-you{pointer-events:none;width:22px;height:22px;filter:drop-shadow(0 2px 0 var(--ink));font-size:22px;line-height:1;position:absolute;transform:translate(-50%,-50%)}.map-hint{text-align:center;color:var(--ink-2);margin-top:10px;font-weight:500}.dialogue{left:50%;bottom:calc(22px + var(--safe-b));background:var(--cream);border:4px solid var(--ink);width:min(720px,100vw - 24px);box-shadow:0 8px 0 var(--ink);border-radius:26px;padding:18px 20px 16px;animation:.35s cubic-bezier(.2,1.35,.4,1) pop;position:fixed;transform:translate(-50%)}.dialogue .who{background:var(--dc,var(--green));color:#fff;border:3px solid var(--ink);text-shadow:0 1px #00000040;border-radius:999px;padding:3px 14px;font-weight:700;position:absolute;top:-18px;left:22px}.dialogue .line{min-height:3em;font-size:1.12rem;line-height:1.5}.dialogue .choices{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.dialogue .next{color:var(--ink-2);font-size:.8rem;font-weight:600;animation:1s infinite blink;position:absolute;bottom:10px;right:18px}@keyframes blink{50%{opacity:.3}}.joy{left:22px;bottom:calc(26px + var(--safe-b));touch-action:none;background:#fffaf059;border:3px solid #2b2d4280;border-radius:50%;width:128px;height:128px;position:fixed}.joy .knob{background:var(--cream);border:3px solid var(--ink);width:56px;height:56px;box-shadow:0 3px 0 var(--ink);border-radius:50%;margin:-28px 0 0 -28px;position:absolute;top:50%;left:50%}.mbtns{right:20px;bottom:calc(200px + var(--safe-b));flex-direction:column;gap:12px;display:flex;position:fixed}.mbtn{border:3px solid var(--ink);background:var(--cream);width:62px;height:62px;box-shadow:0 4px 0 var(--ink);touch-action:manipulation;border-radius:50%;font-size:1.4rem;font-weight:700}.mbtn.use{background:var(--orange);color:#fff}.arcade-back{background:#0c0a1ed1;justify-content:center;align-items:center;padding:12px;animation:.25s fadeIn;display:flex;position:fixed;inset:0}.arcade{border:4px solid var(--ink);color:#fff;background:#1d1740;border-radius:26px;flex-direction:column;width:min(1100px,100%);height:min(88dvh,760px);animation:.38s cubic-bezier(.2,1.35,.4,1) pop;display:flex;position:relative;overflow:hidden;box-shadow:0 10px #000,inset 0 0 0 6px #7c3aed}.arcade-head{align-items:center;gap:10px;padding:10px 12px 10px 18px;display:flex}.arcade-head h3{flex:1;margin:0;font-size:1.15rem}.arcade-head .close-x{color:var(--ink);background:#fff}.arcade-body{background:#000;border-radius:16px;flex:1;min-height:0;margin:0 12px 12px;position:relative;overflow:hidden}.arcade-body iframe,.arcade-body canvas{border:0;width:100%;height:100%;display:block}.arcade-body.browser{background:#fff;flex-direction:column;display:flex}.arcade-body.browser iframe{flex:1;min-height:0}.urlbar{color:var(--ink);background:#efe9f7;border-bottom:2px solid #d9d0ea;align-items:center;gap:10px;padding:8px 10px;display:flex}.urlbar .dots{gap:6px;display:flex}.urlbar .dots i{background:#ef4444;border-radius:50%;width:11px;height:11px}.urlbar .dots i:nth-child(2){background:#facc15}.urlbar .dots i:nth-child(3){background:#22c55e}.urlbar .url{text-overflow:ellipsis;white-space:nowrap;background:#fff;border-radius:99px;flex:1;min-width:0;padding:5px 12px;font-size:.88rem;font-weight:500;overflow:hidden}.arcade-body.light{color:var(--ink);background:#fffaf0;overflow:auto}.folio-page{background:var(--cream);-webkit-overflow-scrolling:touch;animation:.25s fadeIn;position:fixed;inset:0;overflow:auto}.folio-inner{max-width:1100px;padding:calc(20px + var(--safe-t)) 20px 60px;margin:0 auto}.folio-top{z-index:2;background:var(--cream);border-bottom:3px dashed #2b2d4226;align-items:center;gap:12px;padding:10px 0;display:flex;position:sticky;top:0}.folio-top .brand{box-shadow:none}.folio-top nav{flex-wrap:wrap;gap:14px;margin-left:auto;font-weight:600;display:flex}.folio-top nav a{text-decoration:none}.folio-hero{grid-template-columns:1fr 260px;align-items:center;gap:30px;padding:40px 0 20px;display:grid}.folio-hero h1{margin:12px 0;font-size:clamp(2.2rem,6vw,3.8rem);line-height:1.02}.folio-hero h1 em{background:linear-gradient(90deg, var(--blue), var(--purple), var(--pink));color:#0000;-webkit-background-clip:text;background-clip:text;font-style:normal}.folio-hero p{color:var(--ink-2);margin:0 0 18px;font-size:1.2rem;line-height:1.5}.folio-hero .photo{aspect-ratio:1;border:4px solid var(--ink);box-shadow:0 8px 0 var(--ink);background:url(../media/lonnie.webp) 50%/cover;border-radius:32px;transform:rotate(3deg)}.folio-page h2{margin:44px 0 6px;font-size:1.8rem}.folio-page .lead{color:var(--ink-2);margin:0 0 18px}.cards{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:18px;display:grid}.card{border:3px solid var(--ink);box-shadow:0 5px 0 var(--ink);background:#fff;border-radius:22px;flex-direction:column;display:flex;overflow:hidden}.folio-contact{border:3px solid var(--ink);box-shadow:0 5px 0 var(--ink);background:#fff;border-radius:22px;padding:22px;position:relative}.card .cimg{aspect-ratio:16/9;border-bottom:3px solid var(--ink);background-color:#e5e7eb;background-position:50%;background-size:cover;position:relative}.card .cimg .role{position:absolute;top:10px;left:10px}.card .cb{flex-direction:column;flex:1;gap:8px;padding:14px 16px 16px;display:flex}.card h3{margin:0;font-size:1.2rem}.card .chip.soon{align-self:flex-start}.card p{color:var(--ink-2);flex:1;margin:0;font-size:.95rem;line-height:1.45}.card .links{margin-top:6px}.folio-foot{text-align:center;color:var(--ink-2);margin-top:50px;font-size:.9rem}.mg-wrap{justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.mg-center{text-align:center;padding:20px}.scout-grid{perspective:800px;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;width:min(560px,100%,110dvh - 287.5px);margin:0 auto;display:grid}.scard{aspect-ratio:5/4;transform-style:preserve-3d;cursor:pointer;background:0 0;border:0;padding:0;transition:transform .45s;position:relative}.scard.up{transform:rotateY(180deg)}.scard .f,.scard .b{backface-visibility:hidden;border:3px solid var(--ink);text-align:center;border-radius:12px;place-items:center;padding:6px;font-size:clamp(.7rem,2.2vw,1rem);font-weight:700;display:grid;position:absolute;inset:0}.scard .b{background:#f6b73c;font-size:1.8rem}.scard .f{color:#365314;background:#fffaf0;transform:rotateY(180deg)}.scard.done .f{background:#bbf7d0}.wordy-board{justify-content:center;gap:6px;margin:10px auto;display:grid}.wordy-row{grid-template-columns:repeat(5,52px);gap:6px;display:grid}.wordy-cell{text-transform:uppercase;background:#fff;border:3px solid #d4d4d8;border-radius:10px;place-items:center;width:52px;height:52px;font-size:1.6rem;font-weight:700;display:grid}.wordy-cell.g{color:#fff;background:#6aaa64;border-color:#6aaa64}.wordy-cell.y{color:#fff;background:#c9b458;border-color:#c9b458}.wordy-cell.x{color:#fff;background:#787c7e;border-color:#787c7e}.wordy-cell.f{border-color:var(--ink)}.kb{gap:6px;margin-top:12px;display:grid}.kb div{justify-content:center;gap:5px;display:flex}.kb button{border:2px solid var(--ink);text-transform:uppercase;background:#fff;border-radius:8px;min-width:34px;height:44px;padding:0 6px;font-weight:700}.kb button.g{color:#fff;background:#6aaa64}.kb button.y{color:#fff;background:#c9b458}.kb button.x{color:#fff;background:#787c7e}@media (width<=760px){.proj,.about,.contact-grid,.folio-hero{grid-template-columns:1fr}.about .photo{width:140px;margin:0 auto}.folio-hero .photo{order:-1;width:180px;margin:0 auto}.panel{border-radius:24px;max-height:calc(100dvh - 20px)}.modal-back{align-items:flex-end;padding:10px}.panel-body{padding:16px}.minimap-wrap{width:118px;height:118px;top:calc(74px + var(--safe-t));bottom:auto;right:12px}.compass{transform-origin:50% 65px;width:22px;height:22px;font-size:.65rem}.hud-tr{gap:6px;right:10px}.icon-btn{border-radius:13px;width:42px;height:42px;font-size:19px}.smile-count{height:42px;padding:0 9px;font-size:1rem}.portfolio-btn{height:42px;padding:0 .9em}.portfolio-btn .lbl{display:none}.brand{padding:4px}.brand .txt{display:none}.hud-tl{left:10px}.toasts{top:auto;bottom:calc(180px + var(--safe-b));align-items:center;left:10px;right:10px}.prompt{bottom:calc(170px + var(--safe-b))}.wordy-row{grid-template-columns:repeat(5,44px)}.wordy-cell{width:44px;height:44px;font-size:1.3rem}.kb button{min-width:26px;height:40px;padding:0 3px;font-size:.85rem}.arcade{height:calc(100dvh - 20px)}.folio-top{flex-wrap:wrap;row-gap:10px;padding:8px 0 10px}.folio-top .brand{font-size:.95rem}.folio-top .back{margin-left:auto}.folio-top nav{flex-wrap:nowrap;order:3;gap:6px;width:100%;margin-left:0}.folio-top nav a{text-align:center;border:2.5px solid var(--ink);box-shadow:0 2px 0 var(--ink);background:#fff;border-radius:999px;flex:1;padding:6px 0;font-size:.88rem}}@media (width<=420px){.hud-tr .icon-btn.optional{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
