/* ---- v103 bundle: style.css (do not edit — generated from public/style.css) ---- */
:root{--ink:#112b28;--green:#2d6653;--paper:#f5f3ea;--line:#dcded2;--lime:#ddf478;--muted:#69766c}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:Arial,Helvetica,sans-serif;font-size:15px}button,input,textarea,select{font:inherit}button,a,input,textarea,select{-webkit-tap-highlight-color:transparent}button{cursor:pointer;border:1px solid var(--line);border-radius:10px;background:white;color:var(--ink);padding:13px 17px;font-weight:700;min-height:46px}button:hover{border-color:var(--green);background:#f0f5e7}button:disabled{opacity:.4;cursor:default}button:focus-visible,a:focus-visible{outline:3px solid #86b342;outline-offset:3px}.primary{background:var(--ink);color:white;border-color:var(--ink)}.primary:hover{background:var(--green);color:white}.accent{background:var(--lime);border-color:var(--lime)}.quiet{background:transparent}header{height:90px;border-bottom:1px solid var(--line);padding:0 5vw;display:flex;align-items:center;justify-content:space-between}.brand{display:flex;align-items:center;gap:12px;color:var(--ink);text-decoration:none;font-weight:900;letter-spacing:2px}.logo{font-family:Georgia,serif;font-size:36px;letter-spacing:-8px;margin-right:12px}.logo span{font-size:24px;color:var(--green)}.tag{font-size:9px;letter-spacing:1.4px;border-left:1px solid var(--line);padding-left:16px;margin-left:10px}.live{font-size:10px;letter-spacing:1.5px;color:var(--green)}main{max-width:1280px;margin:auto;padding:36px 34px 60px}h1,h2,h3,p{margin-top:0}h1{font-family:Georgia,serif;font-size:clamp(40px,5vw,68px);font-weight:400;letter-spacing:-2px;line-height:1.05;margin-bottom:20px}h2{font-size:26px;letter-spacing:-.7px}h3{font-size:17px}p{line-height:1.6;color:var(--muted)}.eyebrow{font-size:10px;font-weight:800;letter-spacing:2px;color:var(--green);margin-bottom:14px}.intro{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:center;padding:30px 0}.intro p{max-width:400px}.rule{border-top:1px solid var(--line);margin-top:30px;padding-top:20px;display:flex;gap:30px;font-size:12px;color:var(--muted)}.card{background:#fffef9;border:1px solid var(--line);border-radius:17px;padding:26px}.setup{display:grid;gap:17px}.fields{display:grid;grid-template-columns:1fr 1fr;gap:15px}label{display:block;font-size:12px;font-weight:700;margin-bottom:7px}input,textarea,select{width:100%;border:1px solid var(--line);border-radius:8px;background:white;color:var(--ink);padding:12px;min-height:44px}textarea{height:140px;resize:vertical;line-height:1.5}.help{font-size:12px;color:var(--muted);line-height:1.6}.actions{display:flex;gap:9px;align-items:center;flex-wrap:wrap}.topline{display:flex;justify-content:space-between;gap:16px;align-items:center;margin-bottom:24px}.topline h2{margin:5px 0}.badge{display:inline-block;padding:6px 9px;background:#e8eddd;color:var(--green);font-size:10px;font-weight:800;letter-spacing:1px;border-radius:5px}.scoreboard{background:var(--ink);border-radius:15px;color:#fff;padding:23px 27px;margin-bottom:25px;display:flex;gap:30px;align-items:center;justify-content:space-between}.scoreboard table{border-collapse:collapse;text-align:center;min-width:70%}.scoreboard td,.scoreboard th{padding:8px 11px;font-variant-numeric:tabular-nums}.scoreboard th{font-size:10px;font-weight:400;color:#b8c8bf}.scoreboard td:first-child{text-align:left;font-weight:700}.scoreboard td:last-child{font-weight:900;font-size:23px;color:var(--lime)}.inning{font-size:23px;font-weight:800;white-space:nowrap}.inning small{display:block;font-size:10px;color:#b8c8bf;font-weight:400;letter-spacing:1px;margin-top:10px}.layout{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(270px,1fr);gap:25px}.batter{display:flex;align-items:center;justify-content:space-between}.batter h2{font-size:32px;margin:6px 0}.number{font-family:Georgia,serif;font-size:52px;color:#b0b9a5}.outs{display:flex;gap:7px;align-items:center;font-size:10px;letter-spacing:1px;color:var(--muted)}.dot{width:9px;height:9px;border:1px solid #94a28d;border-radius:50%;display:inline-block}.dot.on{background:var(--green)}.field{height:280px;position:relative;max-width:440px;margin:12px auto 0}.field svg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.base{position:absolute;transform:translate(-50%,-50%);width:105px;font-size:11px;min-height:47px;padding:8px;background:#fffef9;box-shadow:0 4px 15px #112b2810}/* v103 item 5a: the global button:active{transform:translateY(1px)} in modern.css (0,1,1) beats .base (0,1,0) and REPLACES its translate(-50%,-50%) centering while pressed, so the button jumped ~53px right / ~26px down out from under the finger: the tap landed on the field, and fieldTap measured the shifted rect (87.9px > 75px) and forwarded nothing. Keep the centering while pressed so the button stays under the tap. */.base:active{transform:translate(-50%,-50%)}
.base,.score-action,.book-diamond,.learn{touch-action:manipulation}.base strong{display:block;margin-bottom:4px}.base.occupied{background:var(--lime);border-color:#bace66}.b1{left:80%;top:50%}.b2{left:50%;top:13%}.b3{left:20%;top:50%}.home{left:50%;top:87%}.fieldhint{text-align:center;font-size:11px;color:var(--muted);margin:5px 0 24px}.buttons{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}.buttons button{text-align:left;padding:12px}.buttons strong{font-size:19px;display:block;margin-bottom:5px}.buttons small{font-size:10px;color:var(--muted);font-weight:400}.buttons .hit{background:#ecf2db}.buttons .out{background:#f7eee7}.section-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:17px}.section-title h3{margin:0}.roster{display:grid;gap:2px}.player{display:flex;gap:12px;align-items:center;padding:13px 4px;border-bottom:1px solid var(--line);font-size:13px}.player.active{background:#edf3dd;border-radius:7px;padding-left:10px;border-color:transparent}.player .pos{color:var(--muted);width:20px;font-size:11px}.player .meta{margin-left:auto;color:var(--muted);font-size:10px}.next{padding-top:16px;font-size:12px;color:var(--muted)}.log{margin-top:24px}.event{border-top:1px solid var(--line);padding:14px 0;display:flex;gap:15px;align-items:flex-start;font-size:12px}.event .badge{min-width:44px;text-align:center}.event p{font-size:12px;margin:5px 0 0}.empty{padding:25px 0;color:var(--muted);font-size:13px}.tabs{display:flex;gap:6px;margin-bottom:20px}.tabs button.active{background:var(--ink);color:white}.scroll{overflow:auto}.book{width:100%;border-collapse:collapse;white-space:nowrap}.book td,.book th{padding:13px 12px;text-align:center;border-bottom:1px solid var(--line);font-size:12px}.book th{color:var(--muted)}.book td:first-child,.book th:first-child{text-align:left}.book td small{display:block;margin-top:4px;color:var(--muted)}dialog{border:0;border-radius:17px;padding:27px;width:min(540px,calc(100% - 24px));color:var(--ink);background:var(--paper);max-height:90dvh;overflow:auto;overscroll-behavior:contain}dialog::backdrop{background:#071f1bd0}
body.hide-book-hints .fieldhint,body.hide-book-hints .score-tip,body.hide-book-hints .learn,body.hide-book-hints .go-back-label,body.hide-book-hints .book-hint,body.hide-book-hints .notation-panel .help,body.hide-book-hints .intro.rule{display:none!important}.dialoghead{display:flex;justify-content:space-between;align-items:center;gap:15px}.dialoghead h2{margin:0}.close{padding:8px 13px}.runner{display:grid;grid-template-columns:1fr 150px;gap:15px;align-items:center;padding:12px 0;border-bottom:1px solid var(--line)}.runner small{display:block;color:var(--muted);margin-top:5px}.dialogbody{margin:20px 0}.error{color:#a13224;font-size:13px;line-height:1.5;margin:10px 0}.check{display:flex;gap:10px;align-items:flex-start;font-size:12px;line-height:1.6}.check input{width:18px;min-height:18px;margin-top:3px}.savedrow{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:15px 0;border-top:1px solid var(--line)}#toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:var(--ink);color:white;padding:12px 20px;border-radius:8px;display:none;font-size:13px;z-index:20}footer{margin-top:25px;font-size:11px;color:var(--muted);display:flex;justify-content:space-between;gap:15px}.mini{min-height:36px;font-size:11px;padding:8px 12px}@media(max-width:800px){header{height:70px;padding:0 20px}.tag,.live{display:none}main{padding:22px 16px 40px}.intro{grid-template-columns:1fr;gap:25px;padding:12px 0}.intro h1{max-width:400px}.intro p{margin-bottom:14px}.rule{margin-top:20px}.layout{grid-template-columns:1fr}.card{padding:20px}.scoreboard{overflow:auto;padding:18px 12px;gap:20px}.scoreboard table{min-width:400px}.scoreboard td,.scoreboard th{padding:7px}.inning{font-size:18px}.topline{align-items:flex-start}.topline .actions{justify-content:flex-end}.topline h2{font-size:22px}.buttons{grid-template-columns:repeat(4,1fr)}.buttons button{padding:10px 8px}.buttons strong{font-size:17px}.batter h2{font-size:28px}.field{height:260px}.fields{gap:10px}.runner{grid-template-columns:1fr 125px}}
.game-tools{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-bottom:18px;flex-wrap:wrap}.game-tools .help{font-size:11px}#gameClock{font:700 27px monospace;color:var(--green)}#gameClock.expired{color:#a13224}.correction{display:flex;justify-content:space-between;align-items:center;gap:14px;background:#e7efcf;border:1px solid #b8cc88;border-radius:10px;padding:10px 15px;margin-bottom:18px;font-size:13px}.runner-taps{padding:14px 0;border-bottom:1px solid var(--line)}.runner-taps small{display:block;color:var(--muted);font-size:11px;margin-top:4px}.destinations{display:grid;grid-template-columns:repeat(5,1fr);gap:7px;margin-top:10px}.destinations button{padding:10px 7px}.destinations .selected{background:var(--ink);color:white;border-color:var(--ink)}.switch-icon{text-align:center;font-size:80px;color:var(--green);margin:20px 0}.celebration{text-align:center;position:relative;overflow:hidden;padding:30px 0}.celebration>*:not(.fireworks){position:relative;z-index:1}.celebration h2{font-family:Georgia,serif;font-size:38px;margin:20px 0}.trophy{font-size:70px;line-height:1.2}.final-score{display:flex;align-items:center;justify-content:center;gap:25px;margin:30px 0}.final-score div{flex:1;min-width:0}.final-score span{font-size:12px;display:block;overflow-wrap:anywhere}.final-score strong{display:block;font-size:58px;margin-top:12px}.fireworks{position:absolute;inset:0;pointer-events:none}.fireworks i{position:absolute;left:var(--x);top:var(--y);width:7px;height:7px;border-radius:50%;background:var(--c);animation:burst 2s ease-out infinite;animation-delay:calc(var(--i)*-.17s);box-shadow:18px 0 var(--c),-18px 0 var(--c),0 18px var(--c),0 -18px var(--c),13px 13px var(--c),-13px -13px var(--c),13px -13px var(--c),-13px 13px var(--c)}@keyframes burst{0%{transform:scale(.1);opacity:0}30%{opacity:1}100%{transform:scale(2.8);opacity:0}}@media(prefers-reduced-motion:reduce){.fireworks i{animation:none;opacity:.5}}@media(max-width:600px){.game-tools .actions{gap:6px}.game-tools .mini{padding:8px 10px}.correction{font-size:11px;padding:9px}.destinations{gap:5px}.destinations button{padding:10px 4px}.celebration h2{font-size:30px}}
.gender-row{display:grid;grid-template-columns:1fr 145px;gap:15px;align-items:center;border-bottom:1px solid var(--line);padding:8px 0}.gender-row label{margin:0;font-size:13px}.section-title{flex-wrap:wrap;gap:8px}.section-title h3{overflow-wrap:anywhere}.section-title .help{margin-top:6px}
.score-option{position:relative;min-width:0}.score-action{width:100%;height:100%;padding-right:26px!important}.buttons .learn{position:absolute;right:3px;top:3px;min-height:25px;height:25px;width:25px;padding:0;font-size:15px;border:0;background:transparent;color:var(--green);text-align:center}.score-tip{display:none;position:absolute;z-index:5;bottom:calc(100% + 6px);left:0;width:230px;max-width:65vw;background:var(--ink);color:white;padding:12px;border-radius:8px;font-size:12px;line-height:1.5;box-shadow:0 3px 15px #0002;pointer-events:none}.score-option:hover .score-tip,.score-option:focus-within .score-tip{display:block}.gender-picks,.inline-gender{display:inline-flex;gap:5px;align-items:center}.inline-gender{margin-left:8px}.inline-gender .mini,.gender-picks .mini{padding:6px 10px;min-width:35px;min-height:34px}.setup-gender{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:12px;margin-top:7px}.end-links{justify-content:center}.buttons .score-option:nth-child(4n) .score-tip{left:auto;right:0}
.notation-panel{margin-bottom:15px;border:1px solid var(--line);border-radius:10px;background:#f7f7ef;padding:12px}.notation-panel summary{cursor:pointer;font-weight:700;font-size:13px;min-height:25px;padding:4px}.notation-panel .help{font-weight:400}.fielder-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin:12px 0}.fielder-grid button{padding:8px 3px;font-size:18px}.fielder-grid small{display:block;font-size:9px;color:var(--muted);font-weight:400;margin-top:4px}.notation-presets{display:flex;gap:6px;flex-wrap:wrap;margin:12px 0}.notation-presets .mini{min-height:35px;padding:7px 10px}.fielder-guide{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:20px 0;font-size:13px}.notation-guide p{font-size:13px;line-height:1.9;margin-top:20px}.book .book-diamond{padding:1px;border:0;background:none;width:90px;min-height:88px;display:inline-block;vertical-align:top;border-radius:7px}.book-diamond:hover{background:#eef3e2}.book-diamond svg{width:86px;height:84px;display:block}.book .book-diamond small{font-size:10px;margin:0 0 5px}.notation-edit{padding:0 5px;min-height:25px;font-size:12px;vertical-align:middle}.book td{min-width:90px}.book td:first-child{min-width:130px}
:root{--tint:#ecf2db;--surface:#fffef9;--input:white}[data-theme=ocean]{--ink:#112d46;--green:#226b99;--paper:#f0f5f8;--line:#d4dfe8;--lime:#99d9f4;--muted:#647889;--tint:#e1f1fb;--surface:#fbfdff}[data-theme=plum]{--ink:#35213f;--green:#805094;--paper:#f7f0f8;--line:#e0d2e4;--lime:#dfbbf3;--muted:#816b87;--tint:#f0e3f7;--surface:#fffbff}[data-theme=sunset]{--ink:#4c291e;--green:#ae5236;--paper:#fff4e9;--line:#ead6c8;--lime:#ffbd7a;--muted:#8f7464;--tint:#ffead4;--surface:#fffaf4}[data-theme=midnight]{--ink:#e1eaf3;--green:#88bbdc;--paper:#111a25;--line:#344253;--lime:#4752a6;--muted:#a1b2c6;--tint:#22364b;--surface:#182534;--input:#1d2d40;color-scheme:dark}.card{background:var(--surface)}input,textarea,select,button{background:var(--input,white)}.buttons .hit,.correction,.player.active,.badge{background:var(--tint)}.primary{background:var(--ink);color:var(--paper)}.primary:hover{background:var(--green);color:var(--paper)}.accent{background:var(--lime)}.scoreboard{background:var(--ink);color:var(--paper)}[data-theme=midnight] .scoreboard{background:#1f3044;color:#e1eaf3}[data-theme=midnight] .scoreboard td:last-child{color:#c6ceff}[data-theme=midnight] .buttons .out{background:#45302d}[data-theme=midnight] .notation-panel{background:#172638}[data-theme=midnight] .destinations .selected{background:#7586a4;color:#111a25}dialog{background:var(--paper)}.themes{display:flex;gap:9px;flex-wrap:wrap}.theme-choice{display:grid;gap:8px;justify-items:center;min-width:85px;font-size:12px;padding:12px}.theme-choice i{width:28px;height:28px;border-radius:50%;background:#2d6653}.theme-choice[data-color=ocean] i{background:#226b99}.theme-choice[data-color=plum] i{background:#805094}.theme-choice[data-color=sunset] i{background:#ae5236}.theme-choice[data-color=midnight] i{background:#182534}.theme-choice.chosen{outline:2px solid var(--green)}.signin{display:inline-block;background:var(--ink);color:var(--paper);text-decoration:none;padding:16px 22px;border-radius:10px;margin:15px 0}.login{max-width:720px;margin:40px auto}.share-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:20px 0}#shareOutput{margin-top:15px;font-size:13px;line-height:1.6}#shareOutput input{margin:7px 0}#profileButton{max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.live{display:none}.book-diamond svg text{fill:var(--ink)}.book-diamond svg polyline{stroke:var(--green)}.book-diamond svg polygon[fill="#ddf478"]{fill:var(--lime)}@media(max-width:600px){.share-grid{grid-template-columns:1fr}.theme-choice{min-width:70px}.brand .tag{display:none}#profileButton{max-width:140px;font-size:11px}}
[data-theme=midnight]{--field-turf:#274c40;--field-infield:#496b5f;--field-lines:#e0f1e7;--field-mound:#e4d9b9}[data-theme=midnight] .field-turf{fill:var(--field-turf)}[data-theme=midnight] .field-infield{fill:var(--field-infield);stroke:var(--field-lines)}[data-theme=midnight] .field-baseline,[data-theme=midnight] .field-foul-lines{stroke:var(--field-lines);stroke-width:2.5}[data-theme=midnight] .field-mound{fill:var(--field-mound)}[data-theme=midnight] .base{background:#25394c;color:#f1f6ff;border-color:#8197ad;box-shadow:0 4px 16px #0007}[data-theme=midnight] .base.occupied{background:#9bafff;color:#0c1a2f;border-color:#d4ddff}[data-theme=midnight] button:hover:not(.primary){background:#354e64;color:#f1f6ff}[data-theme=midnight] .base.occupied:hover{background:#bcc9ff;color:#0c1a2f}[data-theme=midnight] .tabs button.active{background:#88bbdc;color:#111a25}
.sub-positions{display:grid;grid-template-columns:1fr 1fr;gap:7px}.sub-positions button{text-align:left;padding:10px}.sub-positions strong{display:block;font-size:12px}.sub-positions small{display:block;color:var(--muted);font-size:11px;margin-top:6px}.defense-slot{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--line);font-size:12px}.defense-slot span{color:var(--muted)}.defense-log{margin-top:25px}.defense-log h3{margin-top:20px}

.lineup-fields{grid-template-columns:repeat(2,minmax(260px,1fr));gap:24px;overflow-x:auto;align-items:start;padding-bottom:8px}.lineup-fields>div{min-width:0}.lineup-edit-row{display:grid;grid-template-columns:22px 58px minmax(0,1fr) auto;align-items:center;gap:9px;padding:13px 0;border-bottom:1px solid var(--line)}.lineup-edit-row>strong{grid-column:3 / -1;min-width:0;overflow-wrap:break-word;word-break:normal;font-size:14px;line-height:1.4}.lineup-edit-row .drag-handle{grid-column:1;grid-row:1 / span 2;align-self:center;cursor:grab;font-size:16px;color:var(--muted);padding:4px 2px;line-height:1;touch-action:none}.lineup-edit-row .drag-handle:active{cursor:grabbing}.lineup-edit-row .order-number{grid-column:2;grid-row:1;width:58px;padding:9px 6px;text-align:center}.lineup-edit-row .gender-picks{grid-column:3;grid-row:2;display:flex;justify-self:start}.lineup-edit-row .remove-player{grid-column:4;grid-row:2;justify-self:end;color:var(--muted)}.lineup-edit-row .mini{padding:8px}.lineup-add{display:flex;gap:8px;margin-top:12px}.lineup-add input{min-width:0;flex:1}.bulk-lineup{margin:8px 0 12px}.bulk-lineup summary{cursor:pointer;color:var(--muted);font-size:12px}.bulk-lineup textarea{margin-top:10px}

.intro{grid-template-columns:minmax(0,.65fr) minmax(0,1.65fr);gap:32px}.intro>.card,.intro .setup{min-width:0}@media(max-width:1000px){.intro{grid-template-columns:minmax(0,1fr);gap:25px}}

.matchup-setup .intro{grid-template-columns:minmax(0,1fr)}.matchup-setup .intro>section:first-child,.matchup-setup #savedGames,.matchup-setup #savedGames+.actions,.matchup-setup footer{display:none}.fixture-notice>button{margin-bottom:12px}

.league-schedule{margin-bottom:28px}.schedule-filters{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px;margin:20px 0}.schedule-filters>div{min-width:0}.schedule-results .savedrow{gap:18px}.schedule-results .savedrow>div{min-width:0}.schedule-results .eyebrow{letter-spacing:1px;margin-bottom:7px}.schedule-results a.mini{display:inline-block;flex-shrink:0}.schedule-results .savedrow>button{flex-shrink:0}.schedule-results .empty p{margin:10px 0}@media(max-width:650px){.schedule-results .savedrow{align-items:flex-start;flex-wrap:wrap}}

.score-tip,#toast{color:var(--paper)}.matchup-home{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:28px}.matchup-home h2{margin-bottom:8px}.matchup-home p{margin-bottom:0}.matchup-home>button{flex-shrink:0}@media(max-width:600px){.matchup-home{align-items:flex-start;flex-direction:column}}

.tournament-focus{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:24px 0}.history-players{display:flex;flex-wrap:wrap;gap:8px;margin:20px 0}.spectator{max-width:900px;margin:auto;text-align:center}.spectator h1{font-size:clamp(28px,6vw,52px)}.spectator-score{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:32px 0}.spectator-score>div{border:1px solid var(--line);padding:24px;border-radius:16px}.spectator-score strong{font-size:clamp(56px,14vw,100px)}.spectator-score span{font-size:12px;letter-spacing:2px}.spectator-score h2{overflow-wrap:anywhere}

.history-average{text-align:center;padding:24px 12px;margin:18px 0;border:1px solid var(--line);border-radius:14px}.history-average>span{display:block}.history-average>strong{display:block;font-size:52px;line-height:1.2;margin:8px}.history-average p{margin:8px 0 0}.history-stat-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.history-stat-grid>div{padding:12px;background:var(--paper);border:1px solid var(--line);border-radius:10px}.history-stat-grid span{display:block;font-size:12px;overflow-wrap:anywhere}.history-stat-grid strong{display:block;font-size:22px;margin-top:5px}#historyTeam,#historySeason{width:100%;min-width:0;text-overflow:ellipsis}#historyStats{min-width:0}.spectator-lobby{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));gap:20px}.live-game-card{display:block;text-decoration:none;color:var(--ink)}.live-game-card h2{overflow-wrap:anywhere}.live-game-score{font-size:56px;font-weight:700;margin:20px 0}.spectator-link{display:inline-block;text-decoration:none;color:var(--ink)}@media(max-width:480px){.history-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.history-stat-grid>div{padding:10px}.tournament-focus{flex-wrap:wrap}}

.home-heading{margin:32px 0}.matchup-home{padding:36px;border:2px solid var(--green);margin:24px 0}.matchup-home h2{font-size:clamp(30px,5vw,48px)}.matchup-home .primary{font-size:18px;padding:18px 26px}.home-secondary{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:16px;margin-bottom:32px}.custom-game-choice{text-align:left;display:flex;flex-direction:column;gap:10px;width:100%;font:inherit;cursor:pointer}.custom-game-choice strong{font-size:22px}.custom-game-choice span{color:var(--muted)}

.stat-share-card{aspect-ratio:4/5;background:#112b28;color:white;padding:28px;border-radius:16px;display:flex;flex-direction:column;justify-content:center;text-align:center}.stat-share-avg{font-size:clamp(60px,12vw,110px);color:#ddf478}.stat-share-card .history-stat-grid{color:white}#rosterSearch0,#rosterSearch1{max-height:200px;overflow:auto}

.player-profile-photo{width:112px;height:112px;object-fit:cover;border-radius:50%;display:block;margin:12px 0 20px}

.notification-bell{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:5px}.notification-count{border-radius:20px;background:var(--accent,#d8f16d);color:#172821;font-size:11px;font-weight:800;min-width:18px;padding:2px 4px}
.settings-content{margin:20px 0}.settings-link{display:flex;align-items:center;justify-content:space-between;text-align:left;width:100%;border:0;border-bottom:1px solid var(--line,#8b938944);border-radius:0;padding:18px 4px;background:transparent;color:var(--ink);gap:12px}.settings-link small{display:block;margin-top:5px;font-weight:400;color:var(--muted)}.identity-summary input[readonly]{opacity:.8;cursor:default}.season-archive{margin:18px 0;padding:16px;border:1px solid var(--line,#8b938944);border-radius:14px}.season-archive>summary{cursor:pointer;font-weight:700}.championships{padding:14px 0}.score-week summary{cursor:pointer;padding:14px 0}.winner-name{font-weight:800}

.stat-share-card .player-profile-photo{width:96px;height:96px;object-fit:cover;border-radius:50%;align-self:center;margin:12px auto;flex-shrink:0}
.park-report{padding:22px 0;border-bottom:1px solid var(--line)}.park-report:last-child{border-bottom:0}.park-report p{overflow-wrap:anywhere}#parkForm input,#parkForm select{width:100%}#parkForm label{display:block;margin:16px 0}.winner-name{font-weight:800}

.stat-share-card .history-stat-grid>div,.stat-share-card .history-stat-grid strong{color:#112b28}

#accountNavigation{display:flex;align-items:center;gap:9px;margin-left:auto}.quick-navigation{position:relative}.quick-navigation summary{list-style:none;cursor:pointer;display:flex;gap:14px;align-items:center;border:1px solid var(--line);border-radius:10px;background:var(--paper);padding:10px 13px;font-size:12px;font-weight:700;min-height:38px}.quick-navigation summary::-webkit-details-marker{display:none}.quick-navigation summary:focus-visible{outline:3px solid var(--green);outline-offset:3px}.quick-navigation nav{position:absolute;right:0;top:calc(100% + 10px);width:220px;max-width:85vw;z-index:80;padding:8px;background:var(--paper);border:1px solid var(--line);border-radius:13px;box-shadow:0 12px 35px #0002;display:grid;gap:4px}.quick-navigation nav button{text-align:left;background:transparent;border-color:transparent}.quick-navigation nav button:hover{border-color:var(--green)}.home-field-action{margin-top:20px}.field-shortcut{display:flex;align-items:center;gap:22px;background:transparent;text-align:left}.field-shortcut span{color:var(--muted);font-weight:400;font-size:12px}@media(max-width:600px){header{height:auto;min-height:70px;flex-wrap:wrap;gap:12px;padding-top:12px;padding-bottom:12px}#accountNavigation{justify-content:flex-end;flex-wrap:wrap}.field-shortcut{width:100%;flex-direction:column;align-items:flex-start;gap:7px}}
.standings-hero{position:relative;overflow:hidden;border:1px solid var(--line);border-radius:24px;padding:36px;margin:18px 0 24px;background:var(--ink);color:var(--paper)}
.standings-hero h2{font-size:clamp(30px,5vw,48px);margin:12px 0}.standings-hero p{max-width:480px;position:relative;z-index:1;color:inherit;opacity:.85}.standings-hero .eyebrow{color:var(--lime)}.standings-diamond{position:absolute;right:30px;top:-50px;font-size:250px;opacity:.12;transform:rotate(12deg)}
.standings-table{overflow-x:auto;margin-top:20px}.standings-table table{width:100%;border-collapse:collapse}.standings-table td,.standings-table th{padding:16px 12px;text-align:left;border-bottom:1px solid var(--line)}.standings-table td:first-child{min-width:180px}.rank-number{display:inline-block;min-width:30px;margin-right:8px;opacity:.65;font-variant-numeric:tabular-nums}.standings-leader{background:color-mix(in srgb,var(--lime) 12%,transparent)}.standings-leader .rank-number{font-weight:800;opacity:1}.permission-row{padding:18px 0;border-bottom:1px solid var(--line)}.permission-row h4{margin:0 0 8px}.park-location-choices{display:grid;gap:10px}.results-card label{max-width:460px}
.personal-matchups{margin-bottom:24px}.my-team-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:12px;margin:20px 0 28px}.my-team{border:1px solid var(--line);border-radius:14px;padding:20px;background:color-mix(in srgb,var(--lime) 8%,transparent)}.my-team h3{margin-bottom:10px}.my-team p:last-child{margin-bottom:0}

.mvp-awards{display:flex;flex-wrap:wrap;gap:10px 16px;margin:12px 0 16px}.mvp-award{display:inline-flex;align-items:center;gap:6px}.mvp-label{display:inline-block;border-radius:9px;padding:6px 9px;color:#fff!important;font-family:Arial,Helvetica,sans-serif;font-size:14px;font-weight:600;line-height:1.2;letter-spacing:0;white-space:nowrap}.mvp-week{background:#30369e}.mvp-league{background:#e83e20}.mvp-medal{font-size:21px;line-height:1}.stat-share-card .mvp-awards{justify-content:center}

#leagueBrowser[hidden],#personalMatchups[hidden]{display:none!important}
.assigned-city{margin-top:28px}#bookRequestBrowser>label{display:block;max-width:440px}#bookRequestNotice{margin-top:18px}
.header-search{display:flex;align-items:center;border:1px solid var(--line);border-radius:10px;background:var(--paper);overflow:hidden}.header-search input{width:160px;min-height:38px;border:0;background:transparent;padding:8px 10px;font-size:12px}.header-search button{border:0;border-left:1px solid var(--line);min-height:38px;padding:5px 10px;background:transparent;font-size:22px}.global-search>input{font-size:18px;margin:8px 0 18px}.search-categories{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}.search-categories .active{background:var(--ink);color:var(--paper)}.search-result{display:flex;align-items:center;justify-content:space-between;width:100%;text-align:left;background:transparent;border:0;border-top:1px solid var(--line);border-radius:0;padding:18px 2px;gap:18px}.search-result>span:first-child{display:grid;gap:6px;min-width:0}.search-result strong,.search-result .help{overflow-wrap:anywhere}.search-result small{font-size:10px;text-transform:uppercase;letter-spacing:1px;color:var(--muted)}.search-result strong{font-size:17px}.search-result .help{font-weight:400;margin:0}.search-score{display:grid;gap:15px;margin:22px 0}.search-score>div{display:flex;justify-content:space-between;gap:20px}.search-score b{font-size:30px}@media(max-width:1100px){header>.live{display:none}}@media(max-width:600px){.header-search input{width:120px}#accountNavigation{gap:6px}.global-search{padding:18px}}
@media(max-width:600px){#accountNavigation{width:100%;display:flex;justify-content:flex-end}.header-search{flex:1 0 100%;width:100%}.header-search input{flex:1;min-width:0;width:auto}.header-search button{flex:none}}
.icon-search{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;min-height:40px;padding:8px;background:var(--paper)}.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.search-suggestions{display:flex;flex-wrap:wrap;gap:7px;margin:0 0 14px}.search-suggestions:empty{display:none}.search-suggestions button{font-size:13px;padding:8px 12px;min-height:36px;background:var(--paper)}.search-suggestions button[aria-selected=true]{background:var(--ink);color:var(--paper)}#teamResponseBanner{max-width:1212px;margin:18px auto 0;padding:14px 20px;border:1px solid var(--green);border-radius:12px;display:flex;justify-content:space-between;gap:15px;align-items:center;background:color-mix(in srgb,var(--lime) 16%,var(--paper))}.team-inbox-item{padding:20px 0;border-bottom:1px solid var(--line)}.team-inbox-item h3{margin-bottom:8px}#captainCheckinForm label{display:block;margin:16px 0 7px}@media(max-width:600px){#teamResponseBanner{margin:12px 16px 0;flex-wrap:wrap}}
#checkinDeadline[hidden]{display:none!important}

/* Keep the selected batting lineup full-width on every screen. */
.lineup-fields{grid-template-columns:minmax(0,1fr);overflow-x:visible}.lineup-fields>[hidden]{display:none}.lineup-edit-row{grid-template-columns:22px 76px minmax(0,1fr) auto}.lineup-edit-row select.order-number{width:76px;padding:9px 20px 9px 6px}

.lineup-edit-row{grid-template-columns:22px 96px minmax(0,1fr) auto}.lineup-edit-row select.order-number{width:96px}
/* Fixed primary navigation, including the iPhone home-indicator inset. */
body.has-bottom-nav{padding-bottom:calc(92px + env(safe-area-inset-bottom))}body.has-bottom-nav header #accountNavigation,body.has-bottom-nav header #profileButton,body.has-bottom-nav header #notificationBell{display:none!important}
#bottomNavigation{position:fixed;bottom:0;left:0;right:0;z-index:50;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));padding:8px max(12px,calc((100vw - 760px)/2)) calc(8px + env(safe-area-inset-bottom));background:var(--paper,#fff);color:var(--ink,#112b28);border-top:1px solid var(--line,#ccc);box-shadow:0 -3px 16px #0001}
#bottomNavigation button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;border:0;background:transparent;color:inherit;padding:5px;min-height:60px;font-size:11px;position:relative}#bottomNavigation svg,#bottomNavigation .nav-avatar{width:27px;height:27px}#bottomNavigation .nav-avatar{border-radius:50%;object-fit:cover}#bottomNavigation .avatar-symbol{font-size:25px;line-height:27px}#bottomNavigation button:hover{background:var(--line)}#bottomAlertDot{position:absolute;top:3px;right:calc(50% - 19px);width:8px;height:8px;border-radius:50%;background:#e64a32}#bottomAlertDot[hidden]{display:none}.avatar-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:20px 0}.avatar-options button{display:grid;gap:8px;justify-items:center}.avatar-options [aria-pressed=true]{outline:2px solid currentColor}.avatar-options .avatar-symbol{font-size:32px}.explore-links{display:grid;gap:10px;margin-top:18px}

/* v81 — Demo Access and Player Movement Fix */
/* Sticky dialog actions (item 11): the Save button in a long confirmation
   dialog stays reachable instead of sitting below the fold. Only the last
   actions row in a dialog sticks, so mid-content buttons are untouched. */
dialog .actions:last-child{position:sticky;bottom:0;background:var(--paper);padding:12px 0 4px;margin-top:12px;z-index:1}
/* Blocked-but-clickable score and base buttons (item 5): dimmed so the state
   reads, still clickable so the handler can explain why. */
button.blocked{opacity:.55}
.drag-handle{cursor:grab;color:var(--muted);touch-action:none}
.drag-handle:active{cursor:grabbing}
/* Visible selection in the team lineup (item 3). */
.team-order li.selected{background:var(--tint);border-radius:8px;outline:2px solid var(--green)}
.lineup-diamond button.placing{outline:2px dashed var(--green);outline-offset:2px}
/* v97: one compact line per batter (handle · slot # · name · position ·
•••) — the old rows were ~211px tall on a phone, about one row visible.
Secondary actions live in the ••• menu below the row. */
#teamLineupPanel .team-order li{display:grid;grid-template-columns:22px 26px minmax(0,1fr) auto auto;align-items:center;gap:4px 8px;padding:10px 2px}
#teamLineupPanel .team-order li .order-slot{color:var(--muted);font-weight:800;text-align:center;font-variant-numeric:tabular-nums}
#teamLineupPanel .team-order li .order-name{min-width:0;overflow-wrap:break-word}
#teamLineupPanel .team-order li .row-menu-btn{padding:8px 10px}
#teamLineupPanel .team-order li .row-menu{grid-column:1/-1;display:grid;gap:6px;padding:8px 0 2px;border-top:1px dashed var(--line)}
#teamLineupPanel .team-order li .row-menu button{text-align:left;justify-content:flex-start}
#teamLineupPanel .team-order li .row-menu label{display:flex;align-items:center;gap:8px}
/* Bookkeeper correction flag on the shared lineup (item 7). */
.correction-flag{background:#fdf3d7;border:1px solid #e3c878;border-radius:10px;padding:12px 15px;margin-bottom:16px;font-size:13px;line-height:1.6}
.correction-flag strong{display:block;margin-bottom:4px}
/* Coed convention note (item 27, LASN Co-Ed Rule 12). */
.coed-note{background:var(--tint);border-radius:8px;padding:10px 12px}
/* v85 (item 42): stats tables fit narrow screens; long help text wraps. */
.help{overflow-wrap:anywhere}
@media(max-width:800px){.standings-table td,.standings-table th{padding:7px 6px;font-size:12px}}

// v98: play-entry dialog — runner destination dropdowns, Show-details switch, notation Insert dropdown.
.runner-taps{display:flex;align-items:center;justify-content:space-between;gap:12px}.runner-taps select{min-width:130px;max-width:170px;flex:none}
.play-details-toggle{display:flex;align-items:center;justify-content:space-between;gap:12px;font-weight:700;font-size:14px;padding:2px 0 12px;cursor:pointer}.play-details-toggle input{appearance:none;-webkit-appearance:none;width:46px;height:26px;border-radius:13px;background:#c8d1c0;position:relative;cursor:pointer;flex:none;margin:0;padding:0;border:0}.play-details-toggle input:checked{background:var(--green)}.play-details-toggle input::after{content:'';position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:white;transition:left .15s ease}.play-details-toggle input:checked::after{left:23px}
.play-dialog.hide-details .play-detail{display:none}
#notationInsert{margin-top:8px;width:100%}

/* ---- v103 bundle: modern.css (do not edit — generated from public/modern.css) ---- */
/* The Books: modern softball club visual system. */
:root{--ink:#102f29;--green:#146647;--paper:#eef2ec;--surface:#fff;--input:#fff;--line:#d7e2d9;--lime:#c8f449;--muted:#52665b;--tint:#e7f3d8;--hero:#102f29;--hero-ink:#f5ffe8;--shadow:0 8px 30px #102f2909}
[data-theme=ocean]{--ink:#102e49;--green:#126aa5;--paper:#edf3f8;--surface:#fff;--line:#d1e0ec;--lime:#70dcff;--muted:#4e687e;--tint:#ddf3fc;--hero:#102e49;--hero-ink:#effaff}
[data-theme=plum]{--ink:#32203e;--green:#7c3d9c;--paper:#f3eef7;--surface:#fffcff;--line:#e1d4e9;--lime:#dca6ff;--muted:#725d7e;--tint:#eee1f6;--hero:#32203e;--hero-ink:#fcf4ff}
[data-theme=sunset]{--ink:#48251b;--green:#a74122;--paper:#fbf1e9;--surface:#fffcf8;--line:#ebd7c9;--lime:#ffb469;--muted:#7c5c4e;--tint:#ffe7d0;--hero:#48251b;--hero-ink:#fff5e8}
[data-theme=midnight]{--ink:#edf3ff;--green:#a9bcff;--paper:#0d1421;--surface:#172234;--input:#1b2940;--line:#32425b;--lime:#b5cdff;--muted:#afbed4;--tint:#253854;--hero:#1b2e49;--hero-ink:#f1f6ff;--shadow:0 12px 36px #0002}
body{font-family:'Public Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',Arial,sans-serif;font-size:15px;letter-spacing:-.15px;background:radial-gradient(ellipse at 10% 0%,color-mix(in srgb,var(--lime) 12%,transparent),transparent 42%),var(--paper);-webkit-font-smoothing:antialiased}
header{height:80px;padding:0 max(24px,calc((100vw - 1212px)/2));background:var(--surface);border-color:var(--line)}.brand{font-size:19px;letter-spacing:-.7px;font-weight:900}.brand .logo{font-family:inherit;font-size:32px}.brand .tag{font-weight:700;letter-spacing:1.1px;color:var(--muted)}header .live{font-weight:800;font-size:9px;letter-spacing:1.3px}
main{padding-top:32px}h1,h2,h3{font-family:inherit;font-weight:850;letter-spacing:-1.1px}h1{font-size:clamp(36px,5.8vw,68px);line-height:1.02;letter-spacing:-2.7px}h2{font-size:27px;line-height:1.15}h3{font-size:18px;letter-spacing:-.4px}.eyebrow{font-size:10px;font-weight:850;letter-spacing:2px;color:var(--green)}.help{line-height:1.6}.home-heading{margin:16px 0 32px;max-width:800px}.home-heading h1{margin:16px 0 18px}.home-heading p{font-size:17px;max-width:540px}
.card{border:1px solid var(--line);border-radius:22px;box-shadow:var(--shadow);padding:28px}.matchup-home{position:relative;isolation:isolate;overflow:hidden;padding:34px;border:0;border-radius:24px;background:var(--hero);color:var(--hero-ink);box-shadow:0 14px 32px color-mix(in srgb,var(--hero) 16%,transparent)}.matchup-home:after{content:'';position:absolute;z-index:-1;right:-75px;top:-95px;width:320px;height:320px;border:38px solid color-mix(in srgb,var(--lime) 12%,transparent);transform:rotate(45deg);pointer-events:none}.matchup-home .eyebrow{color:var(--lime)}.matchup-home h2{font-size:clamp(30px,4vw,46px);letter-spacing:-1.5px}.matchup-home p,.matchup-home .help{color:var(--hero-ink);opacity:.8}.matchup-home button,.matchup-home a.mini{background:transparent;color:var(--hero-ink);border-color:color-mix(in srgb,var(--hero-ink) 30%,transparent)}.matchup-home .primary{background:var(--lime);color:var(--hero);border-color:var(--lime);box-shadow:0 5px 16px #0001}
button,.mini,a.mini{border-radius:12px;font-weight:750;letter-spacing:-.2px;transition:background .16s ease,border-color .16s ease,box-shadow .16s ease}button:active{transform:translateY(1px)}button:hover{background:var(--tint);border-color:var(--green)}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid var(--green);outline-offset:3px}.primary{background:var(--ink);color:var(--paper);box-shadow:0 4px 12px #0001}.accent{color:var(--hero);font-weight:850}.tabs{gap:8px}.tabs button{border-radius:11px}.tabs button.active{background:var(--ink);color:var(--paper)}
input,textarea,select{border-radius:12px;border:1px solid var(--line);color:var(--ink);background:var(--input);font-weight:550}label{font-weight:750}.savedrow{padding:20px 4px;gap:16px}.savedrow strong{font-size:16px;font-weight:800}.badge{font-size:10px;letter-spacing:.5px;font-weight:800;border-radius:7px;padding:6px 9px}.my-team,.team-inbox-item{border-radius:16px}.standings-hero{background:var(--hero);color:var(--hero-ink);border:0;border-radius:24px}.standings-hero h2{font-weight:900}.scoreboard{border-radius:20px;box-shadow:var(--shadow)}.scoreboard td:last-child{font-weight:900}.score-action{font-size:16px;font-weight:850}.history-stat-grid>div{border-radius:14px}.history-stat-grid strong{font-weight:850;font-variant-numeric:tabular-nums}
dialog{border:1px solid var(--line);border-radius:24px;box-shadow:0 28px 90px #0004}dialog::backdrop{background:#071c22a8;backdrop-filter:blur(5px)}.settings-link{padding:19px 16px;border-radius:12px;font-size:16px;font-weight:750}.settings-link:hover{background:var(--tint)}.settings-content{gap:8px}.avatar-options button{border-radius:16px;background:var(--surface)}
#bottomNavigation{background:color-mix(in srgb,var(--surface) 94%,transparent);backdrop-filter:blur(20px);border-top-color:var(--line);box-shadow:0 -8px 30px #0000000a}#bottomNavigation button{border-radius:14px;font-weight:800;color:var(--muted)}#bottomNavigation button[aria-current=page]{color:var(--ink);background:var(--tint)}#bottomNavigation button[aria-current=page] svg{stroke-width:2.3}#bottomNavigation .nav-avatar{outline:2px solid var(--line);outline-offset:2px}#bottomNavigation button:hover{background:var(--tint)}
@media(max-width:600px){header{height:68px;padding:0 20px}main{padding:24px 16px 36px}.brand{font-size:17px}.brand .tag{display:none}h1{font-size:40px;letter-spacing:-1.7px}.home-heading{margin:6px 0 26px}.home-heading p{font-size:15px}.card{padding:22px 18px;border-radius:19px}.matchup-home{padding:27px 22px}.matchup-home .actions{width:100%;gap:10px}.matchup-home .primary{width:100%;font-size:16px;padding:16px 20px}.topline{gap:14px}.topline h1{font-size:34px}.savedrow{flex-wrap:wrap}.settings-link{padding:17px 14px}dialog{border-radius:21px;max-width:calc(100vw - 24px)}#bottomNavigation button{min-height:57px;font-size:10px}#bottomNavigation{gap:5px}}
@media(prefers-reduced-motion:reduce){button,a{transition:none!important}button:active{transform:none}}
body,button,input,textarea,select,h1,h2,h3{font-family:'Public Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}.avatar-symbol svg{width:32px;height:32px}#bottomNavigation .avatar-symbol svg{width:27px;height:27px}.books-entry{margin:24px 0}.books-entry button{min-width:160px}.custom-game-choice>span{display:none}

.matchup-home .matchup-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));width:100%;gap:12px;margin-top:20px}.matchup-home .matchup-actions>button,.matchup-home .matchup-actions>a{display:flex;align-items:center;justify-content:center;min-height:56px;padding:16px 20px;margin:0;border:1px solid color-mix(in srgb,var(--hero-ink) 30%,transparent);border-radius:14px;font-size:16px;font-weight:700;text-align:center;text-decoration:none;background:color-mix(in srgb,var(--hero-ink) 8%,transparent);color:var(--hero-ink)}.matchup-home .matchup-actions>*:hover{background:var(--lime);color:var(--hero);border-color:var(--lime)}
:root{--safe-bottom:env(safe-area-inset-bottom,0px)}body.has-bottom-nav dialog{max-height:calc(100dvh - 120px - var(--safe-bottom));margin-top:24px;margin-bottom:calc(100px + var(--safe-bottom));overflow:auto}dialog #bottomNavigation{position:fixed;inset:auto 0 0;width:100%;box-sizing:border-box}

.held-book-notice{position:fixed;z-index:51;bottom:calc(86px + env(safe-area-inset-bottom));left:16px;right:16px;width:calc(100% - 32px);max-width:728px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 18px;border:1px solid var(--line);border-radius:16px;background:var(--hero);color:var(--hero-ink);box-shadow:0 6px 24px #0003;text-align:left}.held-book-notice>span:first-child{min-width:0}.held-book-notice small{display:block;font-size:10px;letter-spacing:1.3px;color:var(--lime);margin-bottom:5px}.held-book-notice strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.held-book-clock{font-variant-numeric:tabular-nums;font-size:20px;font-weight:800;white-space:nowrap;color:var(--lime)}body.has-held-book{padding-bottom:calc(210px + env(safe-area-inset-bottom))}body.has-held-book dialog{max-height:calc(100dvh - 240px - var(--safe-bottom));margin-bottom:calc(220px + var(--safe-bottom))}

@font-face{font-family:'Public Sans';src:url('/fonts/public-sans.ttf') format('truetype');font-style:normal;font-weight:100 900;font-display:swap}
body,button,input,textarea,select,h1,h2,h3,.logo{font-family:'Public Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}.avatar-options{grid-template-columns:repeat(2,minmax(0,1fr))}.avatar-options img{width:64px;height:64px;object-fit:cover;border-radius:50%}.profile-menu-links{display:grid;gap:8px}

.team-order { padding-inline-start: 1.65rem; }
.team-order li { padding: .5rem .25rem; border-bottom: 1px solid var(--line); }
.team-order select { width: auto; }
.lineup-roster { padding-block: .45rem; }
.lineup-roster input[type="checkbox"] { width: auto; }
.lineup-diamond { position: relative; min-height: 320px; max-width: 640px; margin: 1rem auto; /* v97: clearance below the diamond so its lowest spots (P, at 88%) can scroll clear of the fixed bottom nav on a phone — margin, not padding, because padding would stretch the absolutely-positioned svg and buttons and distort the diamond. */ margin-bottom: calc(96px + env(safe-area-inset-bottom)); }
.lineup-diamond svg { position: absolute; width: 100%; height: 100%; pointer-events: none; }
.lineup-diamond button { position: absolute; transform: translate(-50%,-50%); max-width: 28%; text-align: center; padding: .3rem .45rem; touch-action: manipulation; }
.lineup-diamond span { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ---- v103 bundle: themes.css (do not edit — generated from public/themes.css) ---- */
/* v80 — The Books Design Lab themes.
 *
 * Five full designs, not palette swaps. Each theme sets its own variables
 * AND its own structure: typefaces, heading sizes, card radius and shadow,
 * button radius, navigation treatment, scoreboard and field colors.
 * Only behavior and functionality stay the same across themes.
 *
 * Golden Hour is the default. Floodlights is the dark night-game design.
 * The diamond and the live book stay readable in every theme — the field
 * and book-diamond colors are defined per theme below.
 *
 * Fonts are self-hosted variable fonts in /fonts (OFL, from Google Fonts);
 * no runtime font CDN is needed. */

/* --- Self-hosted typefaces (variable fonts; weight ranges below) --- */
@font-face{font-family:'DM Sans';font-style:normal;font-weight:100 1000;font-display:swap;src:url('/fonts/dm-sans-400.woff2') format('woff2')}
@font-face{font-family:'Bricolage Grotesque';font-style:normal;font-weight:200 800;font-display:swap;src:url('/fonts/bricolage-grotesque-700.woff2') format('woff2')}
@font-face{font-family:'Archivo';font-style:normal;font-weight:100 900;font-display:swap;src:url('/fonts/archivo-700.woff2') format('woff2')}
@font-face{font-family:'Libre Franklin';font-style:normal;font-weight:100 900;font-display:swap;src:url('/fonts/libre-franklin-700.woff2') format('woff2')}

/* --- Golden Hour (default): warm SoCal, easiest to read in the sun --- */
[data-theme=golden]{
 --bg:#FFF1DC;--paper:#FFF1DC;--surface:#FFFDF8;--card:#FFF4E0;--input:#FFFFFF;
 --ink:#1C1917;--muted:#78716C;--line:rgba(28,25,23,.09);
 --accent:#FF4D24;--accent-2:#0F766E;--accent-text:#FFFFFF;--accent-2-text:#FFFFFF;
 --green:#0F766E;--lime:#DDF478;--tint:#FFE8D6;
 --orange:#EA580C;--gold:#F5C542;--teal:#0F766E;--red:#A13224;
 --hero:#1C1917;--hero-ink:#FFF7ED;--hero-muted:#D6CFC4;
 --radius:22px;--btn-radius:14px;
 --body-font:'DM Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
 --display-font:'Bricolage Grotesque','DM Sans',sans-serif;
 --field-turf:#EAE3CC;--field-infield:#D8D0B2;--field-lines:#FFFEF9;--field-mound:#F5F3EA;
}

/* --- Floodlights: dark, sporty, best for night games --- */
[data-theme=floodlights]{
 --bg:#0B1020;--paper:#0B1020;--surface:#141A33;--card:#1B2342;--input:#141A33;
 --ink:#F8FAFC;--muted:#9AA8C3;--line:rgba(255,255,255,.10);
 --accent:#C6F135;--accent-2:#38BDF8;--accent-text:#111827;--accent-2-text:#0B1020;
 --green:#C6F135;--lime:#C6F135;--tint:#232C4D;
 --orange:#F59E0B;--gold:#F5C542;--teal:#38BDF8;--red:#F87171;
 --hero:#141A33;--hero-ink:#F8FAFC;--hero-muted:#9AA8C3;
 --radius:20px;--btn-radius:12px;
 --body-font:'DM Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
 --display-font:'Archivo','DM Sans',sans-serif;
 --field-turf:#16213A;--field-infield:#24304F;--field-lines:#C6F135;--field-mound:#3B4A6B;
 color-scheme:dark;
}

/* --- Pro Book: clean, minimal, safest --- */
[data-theme=probook]{
 --bg:#E8ECF1;--paper:#E8ECF1;--surface:#FFFFFF;--card:#F3F4F6;--input:#FFFFFF;
 --ink:#111827;--muted:#6B7280;--line:rgba(17,24,39,.10);
 --accent:#E63946;--accent-2:#1D3557;--accent-text:#FFFFFF;--accent-2-text:#FFFFFF;
 --green:#1D3557;--lime:#F5C542;--tint:#E8ECF1;
 --orange:#EA580C;--gold:#F5C542;--teal:#1D3557;--red:#DC2626;
 --hero:#1D3557;--hero-ink:#FFFFFF;--hero-muted:#B9C4D6;
 --radius:14px;--btn-radius:8px;
 --body-font:'DM Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
 --display-font:'Libre Franklin','DM Sans',sans-serif;
 --field-turf:#E5E7EB;--field-infield:#D1D5DB;--field-lines:#FFFFFF;--field-mound:#F9FAFB;
}

/* --- Varsity: retro scorebook, most unique --- */
[data-theme=varsity]{
 --bg:#EFE6D0;--paper:#EFE6D0;--surface:#FFFEF7;--card:#F6F1E6;--input:#FFFEF7;
 --ink:#1A2E1F;--muted:#6B7C6E;--line:rgba(26,71,42,.16);
 --accent:#1A472A;--accent-2:#DD6B20;--accent-text:#FFFFFF;--accent-2-text:#FFFFFF;
 --green:#1A472A;--lime:#F5C542;--tint:#EFE6D0;
 --orange:#DD6B20;--gold:#DD6B20;--teal:#1A472A;--red:#B91C1C;
 --hero:#1A472A;--hero-ink:#FFFEF7;--hero-muted:#B7C4B2;
 --radius:16px;--btn-radius:10px;
 --body-font:'DM Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
 --display-font:'Archivo','DM Sans',sans-serif;
 --field-turf:#E3D9BE;--field-infield:#CFC39E;--field-lines:#FFFEF7;--field-mound:#F5EFE0;
}

/* --- Electric Diamond: bold color-block, loudest --- */
[data-theme=electric]{
 --bg:#FFD60A;--paper:#FFD60A;--surface:#FFFFFF;--card:#FFF7CC;--input:#FFFFFF;
 --ink:#111111;--muted:#555555;--line:rgba(0,0,0,.12);
 --accent:#FF2E7A;--accent-2:#0EC5B6;--accent-text:#FFFFFF;--accent-2-text:#111111;
 --green:#0A7A70;--lime:#FFD60A;--tint:#FFF3A3;
 --orange:#FF6B35;--gold:#FFD60A;--teal:#0EC5B6;--red:#C2255C;
 --hero:#111111;--hero-ink:#FFFFFF;--hero-muted:#B3B3B3;
 --radius:24px;--btn-radius:16px;
 --body-font:'DM Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
 --display-font:'Bricolage Grotesque','DM Sans',sans-serif;
 --field-turf:#FFF3A3;--field-infield:#FFE45C;--field-lines:#111111;--field-mound:#FFFFFF;
}

/* --- Shared theme plumbing: every theme re-skins the whole app --- */
[data-theme] body,[data-theme] button,[data-theme] input,[data-theme] textarea,[data-theme] select{font-family:var(--body-font)}
[data-theme] h1,[data-theme] h2{font-family:var(--display-font)}
[data-theme] .logo{font-family:var(--display-font)}
[data-theme] dialog{border-radius:var(--radius)}
[data-theme] .card{border-radius:var(--radius)}
[data-theme] button{border-radius:var(--btn-radius)}
[data-theme] .primary{background:var(--accent);color:var(--accent-text);border-color:transparent}
[data-theme] .primary:hover{background:var(--accent);color:var(--accent-text);filter:brightness(.93)}
[data-theme] .accent{background:var(--accent-2);color:var(--accent-2-text);border-color:transparent}
[data-theme] .tabs button.active{background:var(--accent);color:var(--accent-text)}
[data-theme] .matchup-home .primary{background:var(--lime);color:var(--hero);border-color:var(--lime)}
[data-theme] #bottomNavigation button[aria-current=page]{color:var(--accent)}
[data-theme] .theme-choice[data-color=golden] i{background:#FF4D24}
[data-theme] .theme-choice[data-color=floodlights] i{background:#C6F135}
[data-theme] .theme-choice[data-color=probook] i{background:#E63946}
[data-theme] .theme-choice[data-color=varsity] i{background:#1A472A}
[data-theme] .theme-choice[data-color=electric] i{background:#FF2E7A}

/* Scoreboard: hero colors, never the page ink on the page paper. */
[data-theme] .scoreboard{background:var(--hero);color:var(--hero-ink)}
[data-theme] .scoreboard th{color:var(--hero-muted)}
[data-theme] .scoreboard td:last-child{color:var(--lime)}
[data-theme] .scoreboard .inning small{color:var(--hero-muted)}

/* The diamond: field colors come from the theme, so the live book stays
 * readable at night (Floodlights) and on yellow (Electric Diamond). */
[data-theme] .field-turf{fill:var(--field-turf)}
[data-theme] .field-infield{fill:var(--field-infield);stroke:var(--field-lines)}
[data-theme] .field-baseline,[data-theme] .field-foul-lines{stroke:var(--field-lines);stroke-width:2}
[data-theme] .field-mound{fill:var(--field-mound)}
[data-theme] .base.occupied{background:var(--accent);color:var(--accent-text);border-color:transparent}
[data-theme] .book-diamond svg text[fill="#a13224"]{fill:var(--red)}
[data-theme] .book-diamond svg text[fill="#2d6653"]{fill:var(--green)}

/* --- Golden Hour: soft, warm, rounded --- */
[data-theme=golden] h1{font-size:clamp(36px,5vw,58px);letter-spacing:-.02em;font-weight:700}
[data-theme=golden] h2{font-size:27px;letter-spacing:-.02em;font-weight:700}
[data-theme=golden] .card{box-shadow:0 10px 30px rgba(28,25,23,.08)}
[data-theme=golden] .eyebrow{color:var(--accent)}

/* --- Floodlights: dark surfaces, lime accents, dark field --- */
[data-theme=floodlights] h1{font-size:clamp(36px,5vw,58px);letter-spacing:-.01em;font-weight:800}
[data-theme=floodlights] h2{font-size:27px;letter-spacing:-.01em;font-weight:800}
[data-theme=floodlights] .card{box-shadow:none}
[data-theme=floodlights] .base{background:#1B2342;color:#F8FAFC;border-color:#38BDF8;box-shadow:0 4px 16px rgba(0,0,0,.45)}
[data-theme=floodlights] .base.occupied{box-shadow:0 4px 16px rgba(0,0,0,.45)}
[data-theme=floodlights] button:hover:not(.primary){background:#232C4D;color:#F8FAFC}
[data-theme=floodlights] .buttons .hit{background:#1E2A45}
[data-theme=floodlights] .buttons .out{background:#33242E}
[data-theme=floodlights] .notation-panel{background:#141A33}
[data-theme=floodlights] .eyebrow{color:var(--accent)}

/* --- Pro Book: tight, minimal, thin borders, small headings --- */
[data-theme=probook] h1{font-size:clamp(30px,4vw,44px);letter-spacing:-.01em;font-weight:700}
[data-theme=probook] h2{font-size:24px;letter-spacing:-.01em;font-weight:700}
[data-theme=probook] h3{font-size:17px}
[data-theme=probook] .card{box-shadow:none}
[data-theme=probook] .eyebrow{letter-spacing:2.5px}
[data-theme=probook] .matchup-home{border-radius:14px}
[data-theme=probook] .standings-hero{border-radius:14px}

/* --- Varsity: heavy display type, paper feel --- */
[data-theme=varsity] h1{font-size:clamp(36px,5vw,56px);letter-spacing:-.01em;font-weight:900}
[data-theme=varsity] h2{font-size:27px;letter-spacing:-.01em;font-weight:900}
[data-theme=varsity] .card{box-shadow:0 2px 0 rgba(26,71,42,.12)}
[data-theme=varsity] .eyebrow{color:var(--accent)}

/* --- Electric Diamond: big type, thick borders, hard shadows --- */
[data-theme=electric] h1{font-size:clamp(38px,5.5vw,62px);letter-spacing:-.02em;font-weight:800}
[data-theme=electric] h2{font-size:29px;letter-spacing:-.02em;font-weight:800}
[data-theme=electric] .card{box-shadow:6px 6px 0 rgba(17,17,17,.12)}
[data-theme=electric] .base{background:#FFFFFF;color:#111111;border:2px solid #111111}
[data-theme=electric] .base.occupied{border-color:transparent}
[data-theme=electric] .eyebrow{color:var(--accent)}

/* Bottom nav labels (v80) */
#bottomNavigation .nav-label{font-size:10px;font-weight:700;line-height:1;letter-spacing:.02em}
#bottomNavigation button[aria-current=page] .nav-label{color:var(--accent)}
/* --- Skeletons (v80): loading states that hold the layout instead of a
 * spinner. Used by the schedule, search, alerts, standings and spectator. */
.skeleton{display:block;border-radius:8px;background:linear-gradient(90deg,var(--line) 25%,var(--tint,#eee) 50%,var(--line) 75%);background-size:200% 100%;animation:skeleton-shimmer 1.2s ease-in-out infinite;min-height:16px}
@keyframes skeleton-shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}
.skeleton-row{display:grid;gap:10px;padding:16px 0;border-top:1px solid var(--line)}
.skeleton-row .skeleton:first-child{width:62%;min-height:20px}
.skeleton-row .skeleton:last-child{width:88%;min-height:14px}
@media (prefers-reduced-motion:reduce){.skeleton{animation:none}}

/* --- Pull to refresh (v80): the indicator that appears while pulling --- */
.pull-refresh-indicator{text-align:center;font-size:12px;color:var(--muted);padding:10px 0;min-height:34px}
.pull-refresh-indicator.pulling{color:var(--ink);font-weight:700}

/* --- Native shell (v84): safe areas + PWA install hidden ---
 * The shell WebView extends under the status bar and home indicator
 * (viewport-fit=cover), so the top inset pads the header down and the toast
 * clears the home indicator. The bottom nav already pads for the bottom
 * inset (style.css). PWA install buttons are hidden in the shell — the
 * store build IS the install. */
html[data-native="1"] body{padding-top:env(safe-area-inset-top)}
html[data-native="1"] #toast{bottom:calc(22px + env(safe-area-inset-bottom))}
html[data-native="1"] button[onclick*="showInstallPrompt"]{display:none}

/* ---- v103 bundle: clean-v88.css (do not edit — generated from public/clean-v88.css) ---- */
.clean-settings { display: grid; gap: 18px; }
.clean-profile { display: flex; align-items: center; gap: 14px; padding: 4px 0; min-width: 0; }
.clean-profile > div { min-width: 0; overflow-wrap: anywhere; }
.clean-profile strong { display: block; font-family: var(--display-font); font-size: 1.35rem; }
.clean-profile small, .clean-install small, .clean-toggle small, .home-card-list small { display: block; color: var(--muted); margin-top: 3px; }
.clean-initials { display: grid; place-items: center; flex: 0 0 56px; height: 56px; border-radius: 50%; background: var(--accent); color: var(--accent-text); font-weight: 800; }
button.clean-install { display: grid; gap: 4px; width: 100%; text-align: left; padding: 18px; border: 0; border-radius: var(--radius); background: var(--hero); color: var(--hero-ink); }
.clean-install small { color: var(--hero-muted); }
.clean-settings-group h3 { color: var(--muted); font: 750 .75rem var(--body-font); text-transform: uppercase; letter-spacing: .09em; margin: 0 0 7px; }
.clean-settings-group > div { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); overflow: hidden; }
.clean-settings-group .settings-link, .clean-toggle { width: 100%; margin: 0; padding: 13px 14px; border: 0; border-bottom: 1px solid var(--line); border-radius: 0; background: var(--surface); color: var(--ink); text-align: left; }
.clean-settings-group .settings-link { display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 2px 10px; }
.clean-settings-group .settings-link small { grid-column: 1; grid-row: 2; color: var(--muted); }
.clean-settings-group .settings-link::after { content: '›'; color: var(--muted); grid-column: 2; grid-row: 1 / span 2; align-self: center; }
.clean-toggle { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.clean-toggle input { appearance: none; display: grid; align-items: center; width: 44px; height: 26px; min-height: 0; margin: 0; box-sizing: border-box; padding: 3px; border: 1px solid var(--line); border-radius: 999px; background: var(--card); flex: 0 0 44px; cursor: pointer; }
.clean-toggle input::before { content: ''; width: 18px; height: 18px; border-radius: 50%; background: var(--muted); }
.clean-toggle input:checked { background: var(--accent); border-color: var(--accent); }
.clean-toggle input:checked::before { background: var(--accent-text); transform: translateX(17px); }
.clean-toggle input:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
#cleanSettingsTeams:empty { display: none; }
#nextGameHero { border-radius: var(--radius); }
.home-secondary { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 12px; }
.home-secondary .card { min-width: 0; margin: 0; }
.home-card-list { list-style: none; padding: 0; }
.home-card-list li + li { border-top: 1px solid var(--line); padding-top: 6px; margin-top: 6px; }
.home-stat-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 8px; }
.home-stat-grid dd { margin: 0; font-weight: 800; }
.home-stat-grid dt { font-size: .8rem; color: var(--muted); }
.schedule-pills button { border-radius: 999px; min-height: 42px; }
.clean-schedule-filters { gap: 10px; }
.clean-schedule-game { margin-block: 7px; border: 1px solid var(--line); border-radius: var(--btn-radius); padding: 12px; background: var(--surface); cursor: pointer; }
.clean-schedule-game h3 { margin: 0 0 5px; }
#teamLineupPanel .tabs { display: flex; flex-wrap: wrap; gap: 8px; }
#teamLineupPanel .tabs button { border-radius: var(--btn-radius); }
#teamLineupPanel .team-order li { overflow-wrap: anywhere; }
dialog:has(.clean-estimate)::backdrop { backdrop-filter: none; background: color-mix(in srgb,var(--ink) 30%,transparent); }
dialog:has(.clean-estimate), dialog:has(.clean-settings) { border-radius: var(--radius); background: var(--bg); color: var(--ink); }
.clean-estimate { padding: 10px 4px; }
#bottomNavigation button[aria-current="page"] { color: var(--accent); }
@media (max-width: 480px) {
  .home-secondary { grid-template-columns: minmax(0,1fr); }
  dialog:has(.clean-settings), dialog:has(.clean-estimate) { width: calc(100% - 24px); max-height: calc(100dvh - 24px); }
  #teamLineupPanel .lineup-edit-row { flex-wrap: wrap; }
}

/* v89: nav loading slot — the bottom nav renders a disabled placeholder in
   the second tab until auth resolves (see bottom-nav.js navAuthResolved),
   so it never flashes the wrong tab. Dimmed, non-interactive, same size. */
#bottomNavigation button.nav-loading{opacity:.55;pointer-events:none}
#bottomNavigation .nav-skeleton{display:block;width:27px;height:27px;border-radius:8px;background:var(--line)}

/* v94: phone-width full bleed. The tournament home (and every screen) must
   fill the viewport on a phone: no container may be narrower than the
   viewport or left-aligned with dead space on the right. These guards make
   the in-flow containers explicitly viewport-wide at phone widths, so a
   stale or partial stylesheet can never leave a narrow left column. */
@media (max-width: 800px) {
  html, body { width: 100%; min-width: 0; }
  header, main { width: 100%; max-width: none; }
  main { padding-left: 16px; padding-right: 16px; }
}

/* v96: chat perfection — compact messages with a timestamp and a ••• menu
   instead of inline actions under every message, sender grouping, and a
   single-line composer that grows with the text. */
.chat-message { position: relative; padding: 8px 10px; border-bottom: 1px solid var(--line); overflow-wrap: anywhere; }
.chat-message.grouped { padding-top: 2px; border-top: none; }
.chat-message p { margin: 4px 0 0; }
.chat-message-head { display: flex; align-items: baseline; gap: 8px; }
.chat-message-head strong { font-size: 14px; }
.chat-time { color: var(--muted); font-size: 12px; }
.chat-menu-btn { margin-left: auto; padding: 2px 8px; line-height: 1.2; }
.chat-menu { display: none; position: absolute; right: 8px; top: 32px; z-index: 5; min-width: 180px; padding: 4px; border: 1px solid var(--line); border-radius: 12px; background: var(--surface); box-shadow: 0 8px 24px color-mix(in srgb, var(--ink) 18%, transparent); }
.chat-menu.open { display: block; }
.chat-menu button { display: block; width: 100%; text-align: left; padding: 8px 10px; }
.chat-composer { display: flex; gap: 8px; align-items: flex-end; margin-top: 18px; }
.chat-composer textarea { flex: 1; min-height: 42px; max-height: 132px; resize: none; padding: 10px 12px; border: 1px solid var(--line); border-radius: 14px; background: var(--surface); color: var(--ink); font: inherit; line-height: 1.4; }
.chat-composer button { flex-shrink: 0; }
