:root{--bg: #161616;--surface: #1e1e1e;--border: #2a2a2a;--text: #ffffff;--text-secondary: #dbdbdb;--text-muted: #666666;--orange: #FF560E;--pink: #FF90B3;--page-padding: 4px;--gap: 2px}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{height:100%;-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,Helvetica Neue,Arial,sans-serif;height:100dvh;overscroll-behavior:none}#root{height:100%}.app{display:flex;flex-direction:column;align-items:center;padding:20px var(--page-padding) 20px;height:100dvh;width:100%;overflow:hidden}.header{width:100%;display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;flex-shrink:0}.logo{font-size:clamp(22px,3vw,32px);font-weight:700;letter-spacing:-1px;line-height:1}.logo sup{font-size:10px;font-weight:400}.header-center{flex:1;text-align:center}.bingo-title{font-size:clamp(22px,3vw,32px);font-weight:700;letter-spacing:-1px;color:var(--orange);line-height:1}.hamburger{display:flex;flex-direction:column;justify-content:center;gap:5px;background:transparent;border:none;cursor:pointer;padding:4px;width:36px;height:36px}.hamburger span{display:block;width:24px;height:2px;background:var(--text);border-radius:2px;transition:background .12s ease}.hamburger:active span,.hamburger:hover span{background:var(--orange)}.divider{width:100%;height:1px;background:var(--border);margin-bottom:12px;flex-shrink:0}.bingo-banner{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:flex;align-items:center;justify-content:center;background:#161616bf;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);animation:bannerFadeIn .3s ease forwards;pointer-events:none}.bingo-banner-inner{background:var(--orange);color:var(--bg);text-align:center;padding:40px 60px;animation:bannerPop .4s cubic-bezier(.34,1.56,.64,1) forwards}.bingo-banner-title{font-size:clamp(64px,15vw,120px);font-weight:700;letter-spacing:-4px;line-height:1;animation:bannerPulse .5s ease-in-out infinite alternate}.bingo-banner-sub{font-family:ui-monospace,SF Mono,Cascadia Code,Courier New,monospace;font-size:clamp(11px,2vw,16px);text-transform:uppercase;letter-spacing:.2em;margin-top:10px;opacity:.9}@keyframes bannerFadeIn{0%{opacity:0}to{opacity:1}}@keyframes bannerPop{0%{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}@keyframes bannerPulse{0%{transform:scale(1)}to{transform:scale(1.04)}}.counter-bar{width:100%;display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;flex-shrink:0}.counter-label{font-family:ui-monospace,SF Mono,Cascadia Code,Courier New,monospace;font-size:9px;text-transform:uppercase;letter-spacing:.15em;color:var(--text-muted)}.counter-value{font-size:13px;font-weight:700;color:var(--pink)}.grid{width:100%;flex:1;min-height:0;display:grid;grid-template-columns:repeat(5,1fr);grid-template-rows:repeat(5,1fr);gap:var(--gap);margin-bottom:10px}.cell{background:var(--surface);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;text-align:center;padding:4px;cursor:pointer;transition:background .12s ease,border-color .12s ease;-webkit-user-select:none;user-select:none;position:relative;overflow:hidden}.cell:active{transform:scale(.93)}.cell-text{font-size:clamp(13px,2.8vw,18px);font-weight:500;line-height:1.35;color:var(--text-secondary);word-break:break-word;-webkit-hyphens:auto;hyphens:auto}.cell--free{background:var(--pink);border-color:var(--pink);cursor:default}.cell--free:active{transform:none}.cell-free-icon{width:70%;height:70%;object-fit:contain;display:block}.cell--marked{background:var(--orange);border-color:var(--orange)}.cell--marked .cell-text{color:var(--bg);font-weight:700}.cell--bingo{border-color:var(--text);border-width:2px}.btn{width:100%;padding:14px 10px;font-family:inherit;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;border:none;cursor:pointer;transition:opacity .12s ease,transform .1s ease;min-height:44px}.btn:active{opacity:.85;transform:scale(.97)}.btn--primary{background:var(--orange);color:var(--bg)}.btn--secondary{background:var(--surface);color:var(--text);border:1px solid var(--border)}.menu-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;z-index:100;opacity:0;pointer-events:none;transition:opacity .25s ease}.menu-overlay--visible{opacity:1;pointer-events:all}.slide-menu{position:fixed;top:0;right:0;bottom:0;width:min(320px,85vw);background:var(--surface);border-left:1px solid var(--border);z-index:101;display:flex;flex-direction:column;padding:24px 20px;padding-right:calc(20px + env(safe-area-inset-right,0px));transform:translate(100%);transition:transform .28s cubic-bezier(.4,0,.2,1)}.slide-menu--open{transform:translate(0)}.menu-close{align-self:flex-end;background:transparent;border:none;color:var(--text-muted);font-size:18px;cursor:pointer;padding:4px 8px;margin-bottom:24px;transition:color .12s ease}.menu-close:hover,.menu-close:active{color:var(--orange)}.menu-section{margin-bottom:20px}.menu-label{font-family:ui-monospace,SF Mono,Cascadia Code,Courier New,monospace;font-size:8px;text-transform:uppercase;letter-spacing:.18em;color:var(--text-muted);margin-bottom:6px}.menu-game-id{font-family:ui-monospace,SF Mono,Cascadia Code,Courier New,monospace;font-size:20px;font-weight:700;letter-spacing:.15em;color:var(--orange);word-break:break-all}.menu-divider{width:100%;height:1px;background:var(--border);margin-bottom:20px}.menu-actions{display:flex;flex-direction:column;gap:10px}.footer{width:100%;display:flex;justify-content:space-between;align-items:center;flex-shrink:0;padding-top:10px;border-top:1px solid var(--border)}.footer-label,.footer-handle{font-family:ui-monospace,SF Mono,Cascadia Code,Courier New,monospace;font-size:8px;text-transform:uppercase;letter-spacing:.12em;color:#3a3a3a}@keyframes confettiFall{0%{transform:translateY(0) rotate(0);opacity:1}to{transform:translateY(110dvh) rotate(720deg);opacity:0}}@supports (padding-bottom: env(safe-area-inset-bottom)){.app{padding-bottom:calc(20px + env(safe-area-inset-bottom))}}
