:root{--ink: #16202e;--ink-soft: #5b6573;--paper: #f4f1ea;--card: #ffffff;--navy: #0f1b2d;--gold: #e9b949;--line: #e2ddd2;font-family:Noto Sans TC,PingFang TC,Heiti TC,Microsoft JhengHei,system-ui,sans-serif;color:var(--ink);background:var(--paper);-webkit-text-size-adjust:100%}*{box-sizing:border-box}body{margin:0;min-height:100dvh;background:var(--paper)}img{display:block}button{font:inherit;color:inherit}.app{max-width:480px;margin:0 auto;padding-bottom:calc(32px + env(safe-area-inset-bottom))}.hero{position:relative;display:flex;flex-direction:column;align-items:center;padding:calc(28px + env(safe-area-inset-top)) 20px 32px;text-align:center;color:#fff;background:linear-gradient(180deg,#0f1b2d8c,#0f1b2deb),url(/assets/scenes/stadium-atmosphere.webp) center / cover;border-radius:0 0 24px 24px}.hero-logo{width:168px;height:auto;filter:drop-shadow(0 6px 18px rgba(0,0,0,.35))}.hero-title{margin:12px 0 4px;font-size:26px;letter-spacing:.08em}.hero-tagline{margin:0;font-size:15px;opacity:.88}.hero-status{margin-top:16px;padding:6px 14px;font-size:13px;font-weight:600;color:var(--navy);background:var(--gold);border-radius:999px}.content{padding:24px 16px 0}.section-title{margin:0 0 12px;font-size:18px}.team-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0;padding:0;list-style:none}.team-card{display:flex;flex-direction:column;align-items:center;width:100%;min-height:148px;padding:14px 10px 12px;text-align:center;background:var(--card);border:1px solid var(--line);border-top:4px solid var(--team-color);border-radius:14px;cursor:pointer;transition:transform .12s ease}.team-card:active{transform:scale(.97)}.team-card img{width:56px;height:56px}.team-name{margin-top:8px;font-size:16px;font-weight:700}.team-slogan{margin-top:4px;font-size:12px;line-height:1.4;color:var(--ink-soft)}.sheet-backdrop{position:fixed;inset:0;display:flex;align-items:flex-end;justify-content:center;background:#0f1b2d8c}.sheet{width:100%;max-width:480px;max-height:90dvh;overflow-y:auto;padding:20px 20px calc(20px + env(safe-area-inset-bottom));text-align:center;background:var(--card);border-top:6px solid var(--team-color);border-radius:20px 20px 0 0}.sheet-logo{width:200px;height:200px;margin:0 auto}.sheet-name{margin:8px 0 0;font-size:24px}.sheet-english{margin:2px 0 0;font-size:13px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-soft)}.sheet-slogan{margin:12px 0 0;font-size:16px;font-weight:600}.sheet-description{margin:12px 0 0;font-size:15px;line-height:1.7;text-align:left}.sheet-facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:16px 0 0}.sheet-facts div{padding:10px 6px;background:var(--paper);border-radius:10px}.sheet-facts dt{font-size:12px;color:var(--ink-soft)}.sheet-facts dd{margin:4px 0 0;font-size:14px;font-weight:600}.sheet-close{width:100%;margin-top:18px;padding:12px;font-weight:600;color:#fff;background:var(--navy);border:0;border-radius:12px;cursor:pointer}.account-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px 12px;margin:14px 0 0;font-size:14px}.account-muted{opacity:.7}.account-email{max-width:100%;overflow-wrap:anywhere;opacity:.92}.account-button{min-width:96px;padding:9px 20px;font-weight:700;color:var(--navy);background:#fff;border:0;border-radius:999px;cursor:pointer}.account-button-ghost{min-width:0;padding:6px 14px;font-weight:600;color:#fff;background:transparent;border:1px solid rgba(255,255,255,.6)}.login-sheet{--team-color: var(--gold)}.login-form{display:flex;flex-direction:column;gap:12px;margin-top:12px}.login-hint{margin:0;font-size:15px;line-height:1.6;text-align:left;color:var(--ink-soft)}.login-input{width:100%;padding:14px;font-size:17px;color:var(--ink);background:var(--paper);border:1px solid var(--line);border-radius:12px}.login-code{font-size:24px;letter-spacing:.3em;text-align:center}.login-form .sheet-close{margin-top:0}.login-form .sheet-close:disabled{opacity:.6}.login-links{display:flex;justify-content:space-between}.link-button{padding:6px 2px;font-size:14px;color:var(--ink-soft);text-decoration:underline;background:none;border:0;cursor:pointer}.login-error{margin:12px 0 0;padding:10px 12px;font-size:14px;color:#8c2428;background:#fbeceb;border-radius:10px;text-align:left}.demo-entry{display:flex;flex-direction:column;gap:4px;width:100%;margin-bottom:24px;padding:16px 18px;text-align:left;color:#fff;background:linear-gradient(135deg,var(--navy),#24406b);border:0;border-radius:14px;cursor:pointer}.demo-entry strong{font-size:17px}.demo-entry span{font-size:13px;opacity:.8}.demo-top{display:flex;align-items:center;justify-content:space-between;padding:calc(10px + env(safe-area-inset-top)) 16px 6px}.demo-back{font-size:15px;text-decoration:none;color:var(--ink)}.demo-tag{font-size:12px;color:var(--ink-soft)}.scoreboard{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px;margin:6px 16px 0;padding:16px 10px;color:#fff;background:var(--navy);border-radius:16px}.team-score{display:grid;justify-items:center;gap:4px;opacity:.72}.team-score.win{opacity:1}.team-score img{width:52px;height:52px;padding:4px;background:#fff;border-radius:50%}.team-score-name{font-size:15px;font-weight:700}.team-score-name small{margin-right:4px;font-size:11px;font-weight:400;opacity:.7}.team-score-runs{font-size:40px;font-weight:800;line-height:1;font-variant-numeric:tabular-nums}.scoreboard-mid{display:grid;justify-items:center;gap:2px;font-size:12px}.scoreboard-final{padding:3px 10px;font-weight:700;color:var(--navy);background:var(--gold);border-radius:999px}.scoreboard-innings{opacity:.7}.linescore{margin:10px 16px 0;overflow-x:auto;background:var(--card);border:1px solid var(--line);border-radius:12px}.linescore table,.box table{width:100%;border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums}.linescore th,.linescore td{min-width:24px;padding:7px 4px;text-align:center}.linescore th[scope=row]{padding-left:10px;text-align:left;white-space:nowrap}.linescore .total{font-weight:700;background:var(--paper)}.demo-actions{display:grid;gap:6px;margin:12px 16px 0}.demo-actions .sheet-close{margin-top:0}.demo-seed{font-size:12px;color:var(--ink-soft);text-align:center}.demo-tabs{position:sticky;top:0;z-index:1;display:grid;grid-template-columns:repeat(3,1fr);margin:16px 16px 0;padding:4px;background:#e7e2d6;border-radius:12px}.demo-tab{padding:9px 4px;font-size:14px;font-weight:600;color:var(--ink-soft);background:none;border:0;border-radius:9px;cursor:pointer}.demo-tab.active{color:var(--ink);background:var(--card);box-shadow:0 1px 3px #0000001f}.demo-content{padding-top:14px}.half-inning{margin-bottom:14px;background:var(--card);border:1px solid var(--line);border-left:4px solid var(--team-color);border-radius:12px}.half-inning h3{margin:0;padding:10px 12px 6px;font-size:14px}.half-inning>ol{margin:0;padding:0 0 6px;list-style:none}.play{border-top:1px solid var(--line)}.play.scored{background:#fff8e6}.play.big{background:#fdeccd}.play summary{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;padding:9px 12px;font-size:14px;list-style:none;cursor:pointer}.play summary::-webkit-details-marker{display:none}.play-batter{font-weight:700}.play-result{flex:1 1 auto}.play-pitches{display:flex;flex-wrap:wrap;gap:2px;width:100%}.chip{display:inline-grid;place-items:center;width:20px;height:20px;font-size:11px;font-style:normal;border-radius:50%}.chip.ball{color:#1d6b35;background:#dcf1e2}.chip.strike{color:#8c2428;background:#fbe0de}.chip.foul{color:#7a5b12;background:#f6ecd0}.chip.play{color:#fff;background:var(--navy)}.play-runs{width:100%;font-size:13px;font-weight:700;color:#9a5b00}.play-outs{font-size:12px;color:var(--ink-soft)}.play-note{padding:8px 12px;font-size:13px;color:var(--ink-soft);border-top:1px solid var(--line)}.play-detail{padding:0 12px 10px 24px;font-size:13px;color:var(--ink-soft)}.play-detail p{margin:4px 0}.play-detail ol{margin:4px 0;padding-left:18px}.box{margin-bottom:16px;overflow-x:auto;background:var(--card);border:1px solid var(--line);border-radius:12px}.box h3{margin:0;padding:10px 12px 4px;font-size:15px}.box th,.box td{padding:6px 4px;text-align:center;white-space:nowrap}.box th{font-size:11px;font-weight:600;color:var(--ink-soft)}.box .left{padding-left:12px;text-align:left}.box tbody tr:nth-child(odd){background:#faf8f3}.box small{color:var(--ink-soft)}.broadcast{padding:0 12px}.scorebug{display:grid;grid-template-columns:1fr auto;gap:6px 10px;padding:10px 12px;color:#fff;background:var(--navy);border-radius:14px}.scorebug-teams{display:grid;gap:4px}.bug-team{display:flex;align-items:center;gap:8px;padding:2px 6px 2px 2px;border-left:4px solid transparent;border-radius:6px}.bug-team.batting{background:#ffffff1a;border-left-color:var(--gold)}.bug-team img{width:28px;height:28px;padding:2px;background:#fff;border-radius:50%}.bug-name{flex:1;font-size:15px;font-weight:700}.bug-score{font-size:24px;font-weight:800;font-variant-numeric:tabular-nums}.bug-state{display:grid;grid-template-columns:auto auto;align-items:center;justify-items:center;gap:2px 8px}.bug-inning{font-size:16px;font-weight:800}.bug-count{font-size:16px;font-weight:700;font-variant-numeric:tabular-nums}.bug-outs{display:flex;gap:4px}.bug-outs i{width:10px;height:10px;border:2px solid rgba(255,255,255,.6);border-radius:50%}.bug-outs i.on{background:var(--gold);border-color:var(--gold)}.mini-diamond{width:34px;height:25px}.mini-diamond rect{fill:none;stroke:#ffffffb3;stroke-width:1.5}.mini-diamond rect.on{fill:var(--gold);stroke:var(--gold)}.bug-line{grid-column:1 / -1;display:flex;justify-content:space-between;padding-top:6px;font-size:11px;border-top:1px solid rgba(255,255,255,.15);font-variant-numeric:tabular-nums}.bug-line span{display:grid;justify-items:center;min-width:18px}.bug-line b{font-weight:400;opacity:.55}.bug-line em{min-height:14px;font-style:normal;font-weight:700}.stage{position:relative;margin-top:10px;overflow:hidden;background:#2f6b3c;border-radius:14px}.field{display:block;width:100%;height:auto}.field .grass{fill:#3f8a4e;stroke:#e9e2cf;stroke-width:2}.field .dirt{fill:#b98a5a}.field .infield{fill:#4a9a5a;stroke:#f4efe2;stroke-width:1.5}.field .base{fill:#fff}.field .fielder{stroke:#fff;stroke-width:1.5}.field .runner{stroke:var(--gold);stroke-width:2.5;transition:opacity .3s}.field .runner.out{opacity:.25}.field .ball{fill:#fff;stroke:#c33;stroke-width:.8}.field .ball-shadow{fill:#00000059}.banner{position:absolute;right:10px;bottom:10px;left:10px;padding:10px 12px;font-size:15px;font-weight:700;text-align:center;color:#fff;background:#0f1b2de0;border-left:5px solid var(--team-color);border-radius:10px;animation:banner-in .25s ease-out}.banner.score{color:var(--navy);background:#e9b949f2}.banner.big{font-size:18px;color:var(--navy);background:#ffd666f7;animation:banner-pop .5s ease-out}@keyframes banner-in{0%{opacity:0;transform:translateY(8px)}}@keyframes banner-pop{0%{transform:scale(.6);opacity:0}60%{transform:scale(1.08)}}.matchup{display:grid;grid-template-columns:1fr 112px 1fr;align-items:center;gap:8px;margin-top:10px}.matchup-side{display:grid;gap:2px;min-width:0}.matchup-side.right{text-align:right}.matchup-side small{font-size:11px;color:var(--ink-soft)}.matchup-side strong{font-size:16px;overflow-wrap:anywhere}.pitch-count{font-size:12px;color:var(--ink-soft)}.zone{width:112px;height:112px;background:var(--card);border:1px solid var(--line);border-radius:10px}.zone-box{fill:#f6f2e8;stroke:var(--ink);stroke-width:1.5}.zone-grid{stroke:#c8c0ae;stroke-width:.8;fill:none}.zone-pitch circle{stroke:#fff;stroke-width:1}.zone-pitch text{font-size:8px;font-weight:700;text-anchor:middle;fill:#fff}.zone-pitch.ball circle{fill:#2e8b57}.zone-pitch.strike circle{fill:#c0392b}.zone-pitch.foul circle{fill:#c98a12}.zone-pitch.play circle{fill:var(--navy)}.zone-pitch{opacity:.55}.zone-pitch.latest{opacity:1;transform-box:fill-box;transform-origin:center;animation:pitch-in .3s ease-out}@keyframes pitch-in{0%{transform:scale(2.2);opacity:0}}.last-pitch{min-height:20px;margin:8px 0 0;font-size:13px;text-align:center;color:var(--ink-soft)}.controls{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}.control,.speed button{padding:11px 8px;font-size:14px;font-weight:600;background:var(--card);border:1px solid var(--line);border-radius:10px;cursor:pointer}.control.main{color:#fff;background:var(--navy);border-color:var(--navy)}.control.ghost{grid-column:1 / -1;color:var(--ink-soft);background:none}.speed{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.speed button{padding:11px 0}.speed button.active{color:var(--navy);background:var(--gold);border-color:var(--gold)}.half-log{margin:14px 0 24px;background:var(--card);border:1px solid var(--line);border-radius:12px}.half-log h3{margin:0;padding:10px 12px 4px;font-size:14px}.half-log ol{margin:0;padding:0 12px 8px;list-style:none}.half-log li{padding:6px 0;font-size:14px;border-top:1px solid var(--line)}.log-runs{font-weight:700;color:#9a5b00}
