/* System-first typography keeps every screen fast and self-contained. */
:root{--ink:#f8f5ef;--muted:#a5a8ae;--bg:#10151b;--panel:#1b222b;--line:rgba(255,255,255,.11);--coral:#f25e49;--gold:#ffcb65;--felt:#187b59;--navy:#131923;--mono:'DM Mono',monospace;--sans:'DM Sans',ui-sans-serif,system-ui,sans-serif}
*{box-sizing:border-box}html,body{margin:0;width:100%;min-height:100%;background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased}body{min-height:100dvh;background:radial-gradient(ellipse at 85% -15%,rgba(57,77,89,.3),transparent 42%),radial-gradient(ellipse at -15% 110%,rgba(242,94,73,.1),transparent 38%),var(--bg);overscroll-behavior:none}button,input{font:inherit}button{color:inherit;cursor:pointer}button:focus-visible,input:focus-visible,a:focus-visible,canvas:focus-visible{outline:3px solid var(--gold);outline-offset:3px}button:disabled{opacity:.45;cursor:not-allowed}.app-shell{width:min(1460px,100%);min-height:100dvh;margin:auto;padding:0 5.3%;display:flex;flex-direction:column}.topbar{height:76px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid rgba(255,255,255,.075);flex:none}.brand{display:inline-flex;align-items:center;gap:11px;color:#f9f5ed;text-decoration:none;font-size:15px;font-weight:900;letter-spacing:.13em}.brand b{color:var(--coral)}.brand-mark{height:31px;width:31px;border-radius:10px;display:grid;place-items:center;background:var(--coral);color:#16191e;font-size:18px;font-weight:900;box-shadow:0 5px 18px rgba(242,94,73,.24)}.top-actions{display:flex;align-items:center;gap:10px}.icon-btn{height:39px;width:39px;border:1px solid var(--line);border-radius:12px;background:rgba(255,255,255,.035);font-size:17px;display:grid;place-items:center;transition:.18s}.icon-btn:hover,.soft-button:hover,.small-soft:hover{border-color:rgba(255,255,255,.27);background:rgba(255,255,255,.08)}#pauseButton{display:none}.room-chip{font:11px var(--mono);color:var(--gold);background:rgba(255,203,101,.1);padding:8px 11px;border:1px solid rgba(255,203,101,.25);border-radius:9px;letter-spacing:.12em}
.home-screen{flex:1;display:flex;flex-direction:column}.hero{min-height:470px;display:grid;grid-template-columns:1fr 1fr;align-items:center;position:relative}.hero-copy{padding:35px 0 24px;z-index:1}.eyebrow{margin:0 0 18px;color:#aaaeb3;font:500 10px var(--mono);letter-spacing:.19em}.eyebrow-dot{display:inline-block;width:7px;height:7px;background:var(--coral);border-radius:50%;margin:0 8px 0 1px;box-shadow:0 0 12px rgba(242,94,73,.65)}.hero h1{font-size:clamp(64px,8.2vw,116px);line-height:.88;letter-spacing:-.08em;margin:0;font-weight:900}.hero h1 span{color:var(--coral)}.hero-sub{color:#bdc0c3;max-width:355px;font-size:15px;line-height:1.7;margin:24px 0 26px}.hero-buttons{display:flex;gap:11px}.primary-button,.secondary-button{height:53px;border-radius:13px;border:0;padding:0 20px;display:flex;align-items:center;justify-content:center;gap:23px;font-size:13px;font-weight:800;transition:.18s}.primary-button{background:var(--coral);color:#17191d;box-shadow:0 10px 30px rgba(242,94,73,.23)}.primary-button:hover{background:#ff7864;transform:translateY(-2px)}.primary-button span{font-size:20px}.secondary-button{border:1px solid rgba(255,255,255,.17);background:rgba(255,255,255,.035);gap:12px}.secondary-button:hover{background:rgba(255,255,255,.09)}.online-dot{width:7px;height:7px;border-radius:100%;background:#59d69c;box-shadow:0 0 10px rgba(89,214,156,.7)}.hero-foot{margin-top:34px;font:10px var(--mono);letter-spacing:.06em;color:#81868d}.hero-foot span{font-size:14px;margin-right:8px}.hero-art{height:390px;position:relative;display:grid;place-items:center;isolation:isolate}.hero-art:before{content:"";position:absolute;z-index:-2;width:330px;height:330px;border-radius:50%;background:radial-gradient(circle,rgba(43,108,85,.29),rgba(25,55,51,.08) 61%,transparent 70%)}.orbit{position:absolute;border:1px solid rgba(237,238,221,.1);border-radius:50%;transform:rotate(-22deg)}.orbit-one{width:410px;height:170px}.orbit-two{width:355px;height:225px;transform:rotate(54deg);border-color:rgba(242,94,73,.13)}.hero-ball{position:absolute;width:105px;height:105px;border-radius:50%;display:grid;place-items:center;box-shadow:inset -14px -17px 22px rgba(0,0,0,.22),inset 8px 8px 15px rgba(255,255,255,.32),0 22px 38px rgba(0,0,0,.35);font-weight:900;color:#191c20}.hero-ball span{display:grid;place-items:center;width:36px;height:36px;border-radius:50%;background:#fffaf2;font:900 17px var(--sans);box-shadow:0 2px 8px #0004}.ball-eight{background:radial-gradient(circle at 32% 27%,#464c51,#090b0c 72%);transform:translate(4px,-40px);z-index:3}.ball-stripe{width:88px;height:88px;background:linear-gradient(#ee9748 0 32%,#fff8eb 32% 70%,#ee9748 70%);transform:translate(-119px,76px) rotate(-20deg);z-index:2}.ball-yellow{width:74px;height:74px;background:radial-gradient(circle at 33% 26%,#fff188,#efad2e 72%);transform:translate(120px,67px) rotate(15deg);z-index:1}.ball-yellow span{width:27px;height:27px;font-size:12px}.ball-stripe span{width:29px;height:29px;font-size:12px}.spark{position:absolute;color:var(--gold);font-size:23px}.spark-a{transform:translate(160px,-100px)}.spark-b{color:var(--coral);font-size:20px;transform:translate(-170px,-79px)}.art-caption{position:absolute;right:2%;bottom:8px;color:#7e8389;font:9px/1.8 var(--mono);letter-spacing:.2em;text-align:right}.mode-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;padding:18px 0 30px}.mode-cards article{padding:20px 20px 18px;border:1px solid rgba(255,255,255,.085);border-radius:16px;background:linear-gradient(130deg,rgba(255,255,255,.042),rgba(255,255,255,.015));min-height:148px}.card-icon{font-size:20px}.mode-cards h2{margin:14px 0 6px;font-size:14px}.mode-cards p{margin:0;color:#a5a8ae;font-size:12px;line-height:1.6;max-width:300px}.home-screen footer,.game-footer{margin-top:auto;padding:18px 0 21px;color:#72777e;text-align:center;font:9px var(--mono);letter-spacing:.15em}.home-screen footer span{color:var(--coral);padding:0 7px}
.game-screen{flex:1;display:flex;flex-direction:column;min-height:0}.game-screen[hidden],.home-screen[hidden]{display:none}.game-heading{display:flex;align-items:end;justify-content:space-between;padding:23px 0 17px}.game-heading .eyebrow{font-size:9px;margin:0 0 7px}.game-heading h1{font-size:26px;letter-spacing:-.055em;margin:0}.game-heading h1 span{color:var(--coral)}.game-actions{display:flex;gap:8px}.soft-button,.small-soft{border:1px solid var(--line);border-radius:10px;background:rgba(255,255,255,.035);padding:9px 12px;font-size:11px;font-weight:700;transition:.18s}.matchbar{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:20px;padding:10px 13px;border:1px solid rgba(255,255,255,.08);border-radius:14px;background:rgba(29,36,44,.65);margin-bottom:13px}.player-card{display:flex;align-items:center;gap:10px;min-width:0;padding:2px 7px;opacity:.65;transition:.2s}.player-card.active{opacity:1}.player-avatar{width:34px;height:34px;display:grid;place-items:center;border-radius:11px;color:#171a1d;font-size:13px;font-weight:900;flex:none}.avatar-coral{background:#ff907b}.avatar-blue{background:#80bce7}.player-info{min-width:0;display:grid;gap:3px}.player-info b{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.player-info small{color:#9a9fa5;font:8px var(--mono);letter-spacing:.09em}.ball-count{margin-left:auto;color:#c1c4c6;font:10px var(--mono)}.match-center{display:grid;grid-template-columns:auto auto;align-items:center;column-gap:8px;row-gap:4px;justify-content:center}.vs-pill{color:#969aa0;font:9px var(--mono);background:#2b323b;padding:4px 6px;border-radius:5px}.turn-label{font:9px var(--mono);letter-spacing:.1em;color:#f5f0e7}.status-label{grid-column:2;color:#8c9298;font:8px var(--mono);letter-spacing:.08em}.play-area{display:grid;grid-template-columns:minmax(0,1fr) 255px;gap:14px;align-items:stretch;min-height:0}.table-wrap{display:flex;align-items:center;min-width:0}.table-frame{position:relative;width:100%;aspect-ratio:1.92;background:linear-gradient(145deg,#a87345,#70452e 42%,#543622);border-radius:19px;padding:clamp(19px,3vw,31px);box-shadow:0 16px 40px #0007,inset 0 1px 2px #ffffff40,inset 0 -6px 10px #0006}.table-frame:before{content:"";position:absolute;inset:9px;border:1px solid rgba(255,221,164,.22);border-radius:14px;pointer-events:none}.table-felt{position:relative;width:100%;height:100%;overflow:hidden;border-radius:7px;background:radial-gradient(ellipse at 48% 42%,#218a61 0%,#14714f 62%,#0c5d43 100%);box-shadow:inset 0 0 22px #003b2d90,inset 0 2px 4px #ffffff20}.table-felt:after{content:"";position:absolute;inset:0;opacity:.18;pointer-events:none;background:repeating-linear-gradient(0deg,transparent 0 3px,#ffffff0d 4px,#0000000a 5px,transparent 7px);mix-blend-mode:soft-light}.table-felt:before{content:"";position:absolute;inset:7px;border:1px solid rgba(226,238,203,.16);border-radius:4px;pointer-events:none}canvas{position:absolute;inset:0;width:100%;height:100%;z-index:1;touch-action:none;user-select:none;-webkit-user-select:none}.table-callout{position:absolute;z-index:3;top:12px;left:50%;transform:translateX(-50%);background:#10151be8;border:1px solid #ffffff2b;border-radius:99px;padding:7px 12px;color:#fff4de;font-size:10px;font-weight:700;white-space:nowrap;pointer-events:none}.table-callout[hidden]{display:none}.toast{position:absolute;z-index:4;left:50%;bottom:14px;transform:translate(-50%,10px);border:1px solid rgba(255,255,255,.23);background:#151b20e8;border-radius:9px;padding:8px 13px;font-size:11px;font-weight:700;opacity:0;pointer-events:none;transition:.2s;white-space:nowrap}.toast.on{opacity:1;transform:translate(-50%,0)}.side-panel{display:flex;flex-direction:column;gap:11px}.aim-card,.mini-card{border-radius:14px;border:1px solid rgba(255,255,255,.09);background:linear-gradient(145deg,#202832,#1a2028);padding:15px}.card-heading,.power-row{display:flex;justify-content:space-between;align-items:center}.card-heading{font:9px var(--mono);letter-spacing:.13em;color:#b1b5b9}.shot-state{color:#72d8a3}.power-row{margin:19px 0 8px;color:#aeb3b9;font:9px var(--mono);letter-spacing:.12em}.power-row strong{color:var(--gold);font:700 16px var(--sans);letter-spacing:0}input[type=range]{width:100%;accent-color:var(--coral);height:18px;cursor:pointer}.power-scale{display:flex;justify-content:space-between;color:#777e85;font:7px var(--mono);margin-top:0}.shoot-button{height:43px;width:100%;margin:17px 0 8px;border:0;border-radius:10px;background:var(--coral);color:#17191d;display:flex;align-items:center;justify-content:space-between;padding:0 13px;font-size:11px;font-weight:900;box-shadow:0 7px 18px #f25e492b;transition:.16s}.shoot-button:hover{background:#ff7967;transform:translateY(-1px)}.shoot-button b{font-size:19px}.aim-hint{text-align:center;color:#838990;font-size:9px;margin:0}.mini-card{padding:14px}.mini-title{display:flex;align-items:center;gap:8px;color:#c8c8c1;font:9px var(--mono);letter-spacing:.11em;margin-bottom:11px}.mini-icon{color:var(--gold);font-size:13px}.mini-card p{font-size:10px;line-height:1.55;color:#a6abb0;margin:7px 0}.mini-card p b{color:#f1ede3}.text-button{background:none;border:0;padding:8px 0 0;color:var(--coral);font-size:10px;font-weight:800}.text-button span{padding-left:4px}.bottom-controls{display:grid;gap:7px}.small-soft{width:100%;min-height:37px}.mobile-power{display:none}.game-footer{display:flex;justify-content:space-between;padding:16px 1px 18px;font-size:8px}.game-footer i{font-style:normal;color:var(--coral);padding:0 5px}.game-footer b{color:#aeb1b4}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.modal-backdrop{position:fixed;z-index:20;inset:0;display:grid;place-items:center;padding:18px;background:rgba(5,8,11,.76);backdrop-filter:blur(8px);overflow:auto}.modal-backdrop[hidden]{display:none}.modal{position:relative;width:min(460px,100%);max-height:min(90dvh,850px);overflow:auto;border:1px solid rgba(255,255,255,.13);border-radius:20px;background:linear-gradient(145deg,#252d36,#1b2129);box-shadow:0 35px 100px #0009;padding:29px}.modal-close{position:absolute;right:15px;top:13px;width:33px;height:33px;display:grid;place-items:center;border:1px solid var(--line);border-radius:9px;background:#ffffff09;font-size:22px;color:#c3c5c6}.modal h2{font-size:24px;letter-spacing:-.05em;margin:2px 35px 7px 0}.modal h2 em{font-style:normal;color:var(--coral)}.modal .lead{font-size:12px;line-height:1.65;color:#aeb3b8;margin:0 0 18px}.form-stack{display:grid;gap:12px}.form-stack label{display:grid;gap:6px;color:#b7bbc0;font-size:10px;font-weight:700}.form-stack input{height:43px;border:1px solid rgba(255,255,255,.14);border-radius:10px;background:#11171e;color:#f7f1e7;padding:0 12px;outline:none}.form-stack input:focus{border-color:var(--coral)}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}.modal-main,.modal-secondary{min-height:43px;width:100%;border:0;border-radius:10px;background:var(--coral);color:#17191d;font-weight:900;font-size:12px;margin-top:6px}.modal-secondary{background:rgba(255,255,255,.07);color:#ece9e0;border:1px solid var(--line)}.rule-list{display:grid;gap:12px;margin:18px 0}.rule-item{display:grid;grid-template-columns:27px 1fr;gap:10px;align-items:start}.rule-num{height:25px;border-radius:8px;background:#f25e4924;color:#ff917f;display:grid;place-items:center;font:10px var(--mono)}.rule-item p{font-size:11px;line-height:1.65;color:#b7bbc0;margin:1px 0}.rule-item b{color:#f4f0e8}.modal-note{font-size:10px;line-height:1.6;color:#8e949a;padding:10px 12px;background:#ffffff08;border-radius:9px}.modal-error{font-size:11px;color:#ff8c7d;min-height:15px}.game-result{text-align:center;padding:10px 0 2px}.result-ball{width:68px;height:68px;margin:5px auto 17px;display:grid;place-items:center;border-radius:50%;background:radial-gradient(circle at 31% 25%,#fff493,#f1b638 70%);color:#222;font-weight:900;font-size:24px;box-shadow:inset -8px -9px 15px #aa641c44,0 12px 30px #0005}.game-result .winner-kicker{color:var(--gold);font:10px var(--mono);letter-spacing:.16em}.game-result h2{margin:9px 0;font-size:32px}.game-result p{color:#aeb3b8;font-size:12px;line-height:1.6}.form-label-note{font-size:9px;color:#838a91}
@media(min-width:1200px){.app-shell{padding-left:6.7%;padding-right:6.7%}.hero{min-height:510px}.table-frame{max-height:calc((100dvh - 300px)*.54)}}
@media(max-width:900px){.app-shell{padding-left:4%;padding-right:4%}.hero{min-height:420px}.hero-art{transform:scale(.84)}.hero h1{font-size:clamp(66px,10vw,90px)}.play-area{grid-template-columns:minmax(0,1fr) 225px;gap:10px}.table-frame{padding:22px}.aim-card,.mini-card{padding:12px}.matchbar{gap:8px}.mode-cards{gap:9px}.mode-cards article{padding:16px}}
@media(max-width:650px){.app-shell{padding:0 16px}.topbar{height:60px}.brand{font-size:13px}.brand-mark{width:29px;height:29px}.top-actions{gap:7px}.icon-btn{width:35px;height:35px}.hero{min-height:0;grid-template-columns:1fr;padding:25px 0 0}.hero-copy{padding:18px 0 0}.hero h1{font-size:clamp(68px,17vw,100px)}.hero-sub{font-size:13px;margin:18px 0}.hero-foot{margin-top:22px}.hero-art{position:absolute;right:-72px;top:11px;width:250px;height:245px;opacity:.63;transform:scale(.68);transform-origin:top right}.hero-art:before{width:250px;height:250px}.orbit-one{width:310px;height:140px}.orbit-two{width:290px;height:185px}.mode-cards{grid-template-columns:1fr;padding:22px 0 12px}.mode-cards article{min-height:0;padding:14px 15px}.mode-cards h2{display:inline-block;margin:0 0 4px 9px;vertical-align:middle}.card-icon{font-size:18px;vertical-align:middle}.mode-cards p{margin-top:3px}.home-screen footer{padding:18px 0 14px}.game-heading{padding:15px 0 11px;align-items:center}.game-heading h1{font-size:22px}.game-actions{gap:5px}.soft-button{padding:8px;font-size:10px}.matchbar{padding:8px 5px;gap:2px;margin-bottom:9px}.player-card{gap:6px;padding:1px}.player-avatar{width:28px;height:28px;border-radius:9px;font-size:11px}.player-info b{font-size:10px}.player-info small{font-size:7px;letter-spacing:.04em}.ball-count{font-size:8px}.match-center{column-gap:5px}.turn-label{font-size:7px;letter-spacing:.04em}.status-label{font-size:7px}.vs-pill{font-size:7px;padding:4px}.play-area{display:flex;flex-direction:column;gap:9px}.table-wrap{width:100%}.table-frame{padding:17px;border-radius:15px}.table-frame:before{inset:6px;border-radius:11px}.table-felt{border-radius:5px}.side-panel{display:grid;grid-template-columns:1fr;gap:0}.aim-card{padding:9px 12px;border-radius:12px}.card-heading{font-size:8px}.power-row{display:none}.aim-card input[type=range],.power-scale{display:none}.shoot-button{display:flex;height:38px;margin:8px 0}.aim-hint{font-size:9px}.mini-card{display:none}.bottom-controls{display:flex;gap:7px;margin-top:8px}.bottom-controls:empty{display:none}.small-soft{min-height:34px}.mobile-power{display:flex;align-items:center;gap:10px;padding:7px 11px 3px;color:#aeb3b9;font:8px var(--mono);letter-spacing:.1em}.mobile-power label{min-width:94px}.mobile-power b{display:block;color:var(--gold);font:700 13px var(--sans);letter-spacing:0;margin-top:2px}.mobile-power input{flex:1}.game-footer{padding:11px 0 12px;font-size:7px;letter-spacing:.08em}.game-footer span:last-child{display:none}.modal{padding:24px 20px}.hero-buttons{gap:8px}.primary-button,.secondary-button{padding:0 14px;gap:13px;font-size:12px}}
@media(max-width:390px){.app-shell{padding:0 11px}.matchbar{gap:0}.player-avatar{width:25px;height:25px}.player-info small{font-size:6px}.player-info b{max-width:70px}.game-heading h1{font-size:20px}.soft-button{font-size:9px}.table-frame{padding:14px}}
@media(orientation:landscape) and (max-height:560px){.app-shell{padding:0 3%}.topbar{height:48px}.game-heading{padding:9px 0 7px}.game-heading h1{font-size:19px}.game-heading .eyebrow{margin-bottom:3px}.matchbar{margin-bottom:7px;padding:5px 10px}.player-avatar{width:27px;height:27px}.play-area{grid-template-columns:minmax(0,1fr) 210px;gap:9px}.table-frame{width:auto;height:min(54vh,calc(100vw / 2.3));aspect-ratio:1.92;margin:auto}.side-panel{gap:6px}.aim-card,.mini-card{padding:9px}.power-row{margin:9px 0 5px}.shoot-button{margin-top:9px;height:34px}.mini-card p{font-size:9px;margin:5px 0}.mini-title{margin-bottom:6px}.game-footer{padding:7px 0}.mobile-power{display:none}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}
.room-share{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:13px 14px;background:#11171e;border:1px solid rgba(255,255,255,.09);border-radius:12px;margin:16px 0 10px}.room-share strong{font:700 22px var(--mono);letter-spacing:.2em;color:var(--gold)}.room-share button,.room-link-row button{border:1px solid var(--line);border-radius:8px;background:#ffffff09;padding:8px 10px;font-size:10px;font-weight:800;white-space:nowrap}.room-link-row{display:flex;gap:7px}.room-link-row input{min-width:0;flex:1;border:1px solid rgba(255,255,255,.11);border-radius:8px;background:#11171e;color:#aeb3b8;padding:0 8px;font-size:9px}.modal-note a{color:var(--gold);text-decoration:none}.modal-note a:hover{text-decoration:underline}
@media(min-width:651px){.table-frame{aspect-ratio:1.82}}
@media(max-width:650px){.table-frame{aspect-ratio:1.82;padding:14px 17px}}
@media(min-width:1200px){.table-frame{max-height:none}}
@media(orientation:landscape) and (max-height:560px){.mini-card,.bottom-controls{display:none}.side-panel{gap:5px}.aim-card{padding:9px}.game-footer{padding:4px 0}}
.room-chip.offline{color:#ff907b;border-color:rgba(255,144,123,.4);background:rgba(255,94,73,.12)}
