:root{color-scheme:light;--ink:#111827;--muted:#697181;--accent:#ff621f;--orange:#c2470d;--navy:#11192c;--line:#e7e9ef;--soft:#f4f5f9}
body{background:var(--soft);color:var(--ink);font-family:Inter,"Segoe UI",Arial,sans-serif}.top{background:var(--navy);box-shadow:0 2px 12px #10172a14}.brand span{color:#ff864d}.top nav a{color:#edf0f7}.top button{background:#283249;color:#fff}.hero{background:linear-gradient(115deg,#fff1e8,#eef0f6);border:1px solid var(--line)}.muted{color:var(--muted)}.card{background:#fff;border-color:var(--line);box-shadow:0 4px 16px #151c2b04}.tag{background:#e9ecf2;color:#626b7c}.tag.live,.enabled-court{background:#e0f1e9;color:#287259}.btn,button{background:var(--orange);color:#fff}.btn.secondary,button.secondary{background:#eceef4;color:var(--navy)}.btn.danger,button.danger{background:#ad3547;color:#fff}.notice{background:#fff0e5;color:#8f3f15}.form-error{color:#a42c41}input,select,textarea{background:#fff;color:var(--ink);border-color:#c7ccd5}label{color:#50596b}.match{background:#f3f4f8}.team-score-number,.scoreboard .big{font-variant-numeric:tabular-nums}.scoreboard .sets,.winner,.court-live-score{color:var(--orange)}.event-tabs a,.event-tabs button{background:#e9ecf3;color:#434f64}.event-tabs .active{background:var(--navy);color:#fff}summary{color:#505a6e}.court-match{border-color:var(--line)}.court-match a,.card a:not(.btn),.wrap>p>a{color:#a94112}.stream-card{background:linear-gradient(115deg,#fff2e8,#f4f5fa);border-color:#edddcf}.current-team-score strong{color:var(--navy)}td,th,.recent-actions li{border-color:var(--line)}.bracket-match{background:#fff;border-color:#d3d9e4}.bracket-round>h3{color:var(--muted)}.bracket-winner{color:var(--orange)}dialog{background:#fff;color:var(--ink);border-color:#e1e4ec;max-height:calc(100dvh - 32px);overflow:auto;border-radius:24px;box-shadow:0 24px 70px #12192c26}button:focus-visible,a:focus-visible,summary:focus-visible{outline-color:#bb430b}footer{color:#737b89}button:disabled{cursor:not-allowed}
.scorer-page .top,.scorer-page footer{display:none}.scorer-page .wrap{max-width:760px;margin:0 auto;padding:24px 24px max(24px,env(safe-area-inset-bottom))}.scorer-shell{position:relative}.match-header{display:grid;grid-template-columns:44px minmax(0,1fr) 44px;gap:12px;align-items:start;margin-bottom:20px}.match-back{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border:0;padding:0!important;border-radius:12px;background:transparent!important;color:var(--navy)!important;font-size:38px;font-weight:400;text-decoration:none}.match-header .court-navigation{margin:0}.match-heading{text-align:center;min-width:0}.match-heading h1{font-size:18px;line-height:1.4;margin:0 0 4px;font-weight:800;overflow-wrap:anywhere}.match-heading p{margin:0;color:#697181;font-size:13px;line-height:1.4}.match-menu{position:relative;z-index:20}.match-menu>summary{display:flex;align-items:center;justify-content:center;list-style:none;width:44px;height:44px;padding:0;color:var(--navy);font-size:25px;letter-spacing:2px}.match-menu>summary::-webkit-details-marker{display:none}.match-menu-content{position:absolute;right:0;top:48px;width:min(360px,calc(100vw - 32px));max-height:calc(100dvh - 100px);overflow:auto;padding:20px;background:#fff;border:1px solid var(--line);border-radius:20px;box-shadow:0 20px 70px #11192c30;text-align:left}.match-menu-content h2{font-size:18px;margin:0 0 14px}.match-menu-content .controls{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0}.match-menu-content .controls button{font-size:12px;min-width:0;min-height:44px;padding:9px}.match-menu-content .score-toolbar{margin:0 0 12px}.match-menu-content .score-toolbar button{flex:1;font-size:12px}.match-menu-content .muted{font-size:12px}.operator-board{background:transparent;border:0;box-shadow:none;padding:0!important;text-align:center;overflow:visible}.scorer-page .team-score-grid{position:relative;max-width:none;margin:0 0 6px;gap:28px}.scorer-page .team-score-grid:after{content:':';position:absolute;left:50%;top:57%;transform:translate(-50%,-50%);font-size:48px;font-weight:700;color:#72798a}.scorer-page .score-team-name{font-size:22px;line-height:1.35;margin:0 0 2px!important;font-weight:800}.scorer-page .team-score-column[data-team=B] .score-team-name{color:#667080}.scorer-page .team-score-number{font-size:clamp(86px,17vw,142px);line-height:1.1;font-weight:850;letter-spacing:-6px;color:var(--navy)}.match-meta{display:flex;justify-content:center;align-items:center;gap:10px;flex-wrap:wrap;font-size:11px;margin:8px 0}.operator-board .match-meta .sets{font-size:11px;margin:0;color:#747b89}.match-meta #serve{font-size:11px;margin:0}.set-scores{font-size:11px;line-height:1.5;margin:4px auto 8px}.set-scores summary{font-size:11px;padding:2px 0;color:#747b89}.scorer-page #connection{font-size:11px;color:#7b8290;margin:12px 0 0}.operator-board .tag{font-size:9px;padding:3px 7px}.scorer-page .winner{font-size:16px}.score-toolbar{display:flex;justify-content:center;gap:8px;flex-wrap:wrap;margin:10px 0}.score-toolbar button{min-height:44px}#shareMessage:empty{display:none}.viewer-links{display:flex;justify-content:center;flex-wrap:wrap;gap:8px;margin:12px 0}.viewer-links .btn{font-size:12px;min-height:42px}#scoreQrGraphic{max-width:260px;margin:auto}#scoreQrGraphic svg{display:block;width:100%;height:auto}#scoreQrUrl{overflow-wrap:anywhere;font-size:12px}
.court-panel{margin:16px 0 0;padding:0;text-align:left}.court-panel-heading{display:flex;align-items:center;justify-content:space-between;margin:0 0 8px;font-size:10px;color:#7a8190}.court-set-label{font-weight:700;letter-spacing:.5px;text-transform:uppercase}.serve-pill{font-size:8px;letter-spacing:.4px;padding:3px 5px;border:1px solid currentColor;border-radius:7px;flex-shrink:0}.volleyball-court{padding:12px;background:var(--navy);border-radius:24px}.court-playing-surface{position:relative;aspect-ratio:1.95;min-height:160px;max-height:310px;background:linear-gradient(90deg,#f8d6bb 50%,#dce1eb 50%);border:2px solid #fff;border-radius:12px;overflow:hidden}.court-playing-surface:before{content:'';position:absolute;left:33.333%;right:33.333%;top:0;bottom:0;border-left:2px solid #ffffffba;border-right:2px solid #ffffffba;pointer-events:none}.full-court-teams{height:100%;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px;position:absolute;inset:0}.court-half{min-width:0;position:relative}.half-positions{height:100%;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:repeat(3,1fr);justify-items:center;align-items:center;padding:6px 12px;gap:4px}.court-position{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;width:clamp(44px,6vw,52px);height:clamp(44px,6vw,52px);padding:0;border:2px solid #dc6e39;background:#fff7ef;color:#9f3b0c;border-radius:50%;box-shadow:0 3px 6px #59240c12;z-index:1}.court-position strong{font-size:clamp(14px,2.7vw,23px);line-height:1;font-weight:800;font-variant-numeric:tabular-nums}.position-label{font-size:7px;color:inherit;opacity:.65;line-height:1.1;margin-top:2px}.team-b .court-position{background:#17223b;border-color:#17223b;color:#fff}.court-position.current-server{box-shadow:0 0 0 3px #fff,0 0 0 5px #ff621f}.position-note{position:absolute;top:-7px;right:-7px;width:16px;height:16px;border-radius:6px;background:#d04a10;color:#fff;display:flex;align-items:center;justify-content:center;font-size:9px;font-weight:800;border:1px solid #fff}.barred-player{background:#fee2e6!important;border-color:#b82f47!important;color:#a81f38!important}.court-center-net{position:absolute;left:calc(50% - 2px);top:0;bottom:0;width:4px;background:repeating-linear-gradient(0deg,#fff 0px,#fff 7px,#8b94a6 7px,#8b94a6 10px);box-shadow:0 0 0 1px #fff7;z-index:2;pointer-events:none}.court-center-net span{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-90deg);font-size:8px;font-weight:800;letter-spacing:2px;color:#fff;background:var(--navy);padding:4px 7px;border-radius:4px}.court-timeout-summary{font-size:10px;color:#747c8c;text-align:center;line-height:1.5;margin:10px 0 14px;overflow-wrap:anywhere}
.court-team-labels,.court-team-actions {
 display:grid;
 grid-template-columns:minmax(0,1fr) minmax(0,1fr);
}
.court-team-labels {gap:8px;margin-bottom:10px}
.court-team-label {
 display:flex;align-items:center;justify-content:center;gap:6px;
 padding:9px 6px;min-width:0;min-height:38px;border-radius:12px;
 background:#ffebe0;color:#a64010;font-size:14px;font-weight:750;
 overflow-wrap:anywhere;text-align:center;
}
.court-team-label.team-b {background:#e6e9f1;color:var(--navy)}
.court-team-header {min-width:0}
.court-serve-order {
 display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:3px;
 max-width:230px;margin:6px auto 0;text-align:center;
}
.court-serve-order span {
 padding:4px 0;border-radius:6px;background:#e9ebf1;color:#596274;
 font-size:clamp(8px,2.4vw,11px);font-weight:700;
}
.court-serve-order .serving {background:#bd4611;color:white}
.court-panel[data-swapped="1"] .court-playing-surface {background:linear-gradient(90deg,#dce1eb 50%,#f8d6bb 50%)}
.court-team-actions {position:relative;margin-top:12px}
.court-team-actions::before {
 content:'';position:absolute;top:0;bottom:0;left:50%;width:1px;
 background:#b8c1d1;pointer-events:none;
}
.court-action-group {
 display:grid;grid-template-columns:repeat(6,minmax(0,1fr));
 gap:7px;padding-inline:10px;min-width:0;
}
.court-action-group:first-child {padding-left:0}
.court-action-group:last-child {padding-right:0}
.court-action-group .court-action-tile {
 grid-column:span 2;min-height:62px;border-radius:12px;overflow-wrap:anywhere;
}
.court-action-group .court-action-tile:nth-child(n+4) {grid-column:span 3;min-height:44px}
.court-action-group .court-action-tile svg {width:19px;height:19px;margin:0}
.court-action-group .court-action-tile strong {font-size:clamp(11px,2vw,14px)}
.court-action-group .court-action-tile small {font-size:10px}
.court-position:disabled {opacity:1;cursor:default}
button.court-position:focus-visible,.court-action-tile:focus-visible {outline:3px solid #af3a09;outline-offset:2px}
@media(max-width:420px) {
 .court-action-group {gap:4px;padding-inline:6px}
 .court-action-group .court-action-tile {padding:6px 2px}
 .court-action-group .court-action-tile small {font-size:9px}
 .court-team-label {font-size:12px}
}

.court-action-tile{background:#fff;color:var(--navy);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;min-width:0;min-height:94px;padding:10px 4px;border:1px solid #eceef4;border-radius:18px;box-shadow:0 3px 4px #12192c05}.court-action-tile svg{width:25px;height:25px;margin-bottom:2px}.court-action-tile strong{font-size:15px;font-weight:750;line-height:1.3}.court-action-tile small{font-size:10px;color:#747c8b;font-weight:600;line-height:1.2}.court-extra-options,.court-history-details{font-size:12px}.court-history-details summary{padding:9px 0;font-size:11px;color:#6f7787}.court-history{font-size:12px;padding-left:20px;margin:8px 0}.court-history li{padding:5px 0;overflow-wrap:anywhere}#courtEditorDialog{width:460px}#courtEditorNote{font-size:13px}#courtEditorFields input{margin-bottom:12px}.latest-action{display:flex;align-items:center;gap:12px;justify-content:space-between;background:var(--navy);color:#fff;padding:10px 12px 10px 16px;border-radius:18px;min-height:64px;margin:18px 0 12px;text-align:left}.latest-action>span{font-size:13px;font-weight:650;overflow-wrap:anywhere;min-width:0}.latest-action>span:before{content:'✓';display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border:2px solid #7bd1ab;border-radius:50%;color:#7bd1ab;margin-right:10px;font-size:11px}.latest-action button.secondary{background:#293249;color:#ff9b70;min-height:44px;padding:10px 16px;border-radius:13px;font-size:14px;flex-shrink:0}.recent-actions li{padding:6px 0}.availability-toggle{display:flex;align-items:center;gap:10px;padding:12px 0;font-size:16px}.availability-toggle input[type=checkbox]{width:22px;height:22px;margin:0;flex-shrink:0}
@media(max-width:600px){.scorer-page .wrap{padding:16px 16px max(20px,env(safe-area-inset-bottom))}.match-header{gap:4px;margin-bottom:18px}.match-heading h1{font-size:15px}.match-heading p{font-size:11px}.scorer-page .team-score-grid{gap:20px;margin-top:0}.scorer-page .score-team-name{font-size:17px}.scorer-page .team-score-number{font-size:clamp(76px,24vw,124px);letter-spacing:-4px}.scorer-page .team-score-grid:after{font-size:38px;top:59%}.match-meta{font-size:10px;gap:8px}.serve-pill{font-size:7px}.volleyball-court{padding:9px;border-radius:20px}.court-playing-surface{min-height:162px;aspect-ratio:1.85}.half-positions{padding:5px 6px;gap:3px}.court-position strong{font-size:14px}.position-label{font-size:6px}.position-note{width:13px;height:13px;font-size:7px;top:-6px;right:-6px}.full-court-teams{gap:8px}.court-action-tile{min-height:80px;border-radius:15px}.court-action-tile strong{font-size:12px}.court-action-tile svg{width:22px;height:22px}.court-action-tile small{font-size:9px}.court-timeout-summary{font-size:9px}.latest-action{border-radius:16px;min-height:60px;margin-top:14px}.latest-action>span{font-size:11px}.latest-action>span:before{margin-right:7px}.latest-action button.secondary{font-size:12px;padding:8px 12px}}
@media(max-height:520px) and (orientation:landscape){.scorer-page .wrap{max-width:820px;padding-top:12px}.match-header{margin-bottom:8px}.scorer-page .team-score-number{font-size:90px}.court-playing-surface{max-height:225px}}
@media(prefers-reduced-motion:no-preference){button,.btn{transition:background-color .15s ease,opacity .15s ease}}
.court-playing-surface{width:100%}.scorer-page .team-score-number[data-digits="3"]{font-size:clamp(64px,18vw,112px);letter-spacing:-3px}.scorer-page .team-score-number[data-digits="4"]{font-size:clamp(46px,14vw,84px);letter-spacing:-2px}.scorer-page .team-score-number[data-digits="5"]{font-size:clamp(34px,11vw,66px);letter-spacing:-1px}
html{scrollbar-gutter:stable}

.scorer-page .team-score-grid:after{top:38%}.score-point-controls.controls{display:block;margin:8px 0 0}.score-point-controls.controls .score-point-button{display:block;width:100%;min-width:0;height:76px;min-height:0;padding:4px 10px;background:#ff621f;color:#fff;border-radius:16px;font-size:48px;line-height:1;font-weight:400}.score-point-controls.controls .score-point-button.team-b{background:var(--navy)}@media(max-width:600px){.score-point-controls.controls .score-point-button{height:60px;font-size:42px;border-radius:14px}}@media(max-height:520px) and (orientation:landscape){.score-point-controls.controls .score-point-button{height:54px;font-size:38px}}

/* Scorer colour accents only. */
.scorer-page {--accent:#ff3c00;--orange:#a72b05}
.scorer-page .score-point-controls.controls .score-point-button:not(.team-b) {background:var(--accent)}
.scorer-page button:not(.secondary):not(.danger):not(.court-action-tile):not(.court-position):not(.score-point-button) {background:var(--accent);color:#190b07}
.scorer-page .court-playing-surface {background:linear-gradient(90deg,#ffd8cc 50%,#dce1eb 50%)}
.scorer-page .court-panel[data-swapped="1"] .court-playing-surface {background:linear-gradient(90deg,#dce1eb 50%,#ffd8cc 50%)}
.scorer-page .court-half.team-a .court-position {border-color:var(--accent);color:#a72b05}
.scorer-page .court-position.current-server {box-shadow:0 0 0 3px #fff,0 0 0 5px var(--accent)}
.scorer-page .position-note,.scorer-page .court-serve-order .serving {background:var(--accent);color:#190b07}
.scorer-page .court-team-label.team-a {color:#a72b05}
.scorer-page .latest-action button.secondary {color:#ff9373}
.scorer-page :is(button.court-position,.court-action-tile):focus-visible {outline-color:var(--accent)}
