.offline-banner{position:fixed;bottom:0;left:0;right:0;background:linear-gradient(180deg,#b42828eb,#8c1818f5);color:#fff;font-size:clamp(13px,1.4vw,22px);font-weight:700;text-align:center;padding:clamp(8px,1vh,16px) clamp(16px,2vw,32px);letter-spacing:1.2px;text-transform:uppercase;z-index:200;transform:translateY(100%);transition:transform .3s ease;box-shadow:0 -4px 18px #00000080}.offline-banner.show{transform:translateY(0)}.offline-banner .ob-dot{display:inline-block;width:clamp(8px,1vw,14px);height:clamp(8px,1vw,14px);border-radius:50%;background:#ff8080;margin-right:10px;vertical-align:middle;animation:offline-pulse 1.5s ease-in-out infinite}@keyframes offline-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.85)}}@media (prefers-reduced-motion: reduce){.offline-banner .ob-dot{animation:none}.offline-banner{transition:opacity .25s}}.match-toast{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%) translateY(-20px);opacity:0;pointer-events:none;display:flex;align-items:center;gap:clamp(10px,1.4vw,20px);padding:clamp(14px,1.8vw,28px) clamp(24px,3vw,48px);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:3px solid var(--accent);border-radius:clamp(10px,1.2vw,20px);z-index:150;transition:opacity .25s ease,transform .25s ease;white-space:nowrap}.match-toast.show{opacity:1;transform:translate(-50%,-50%)}.match-toast.variant-side{background:#00140cd9;border-color:var(--accent);box-shadow:0 10px 40px #00000080,0 0 0 4px #00d68f1f;color:var(--text)}.match-toast.variant-gold{background:#191400e0;border-color:var(--gold);box-shadow:0 10px 40px #00000080,0 0 0 4px #ffd2341f;color:var(--gold);text-shadow:0 0 12px rgba(255,210,52,.35)}.match-toast.variant-info{background:#081220e0;border-color:#4db8ff;box-shadow:0 10px 40px #00000080,0 0 0 4px #4db8ff1f;color:var(--text)}.match-toast.variant-status{background:#141418e0;border-color:#8a93a0;box-shadow:0 10px 40px #0006;color:var(--muted)}.match-toast .mt-icon{font-size:clamp(28px,3vw,56px);line-height:1;animation:mt-spin 2s linear infinite}.match-toast .mt-text{font-size:clamp(18px,2.4vw,44px);font-weight:900;letter-spacing:clamp(2px,.2vw,4px);text-transform:uppercase}@keyframes mt-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.match-toast{transition:opacity .2s}.match-toast.show{transform:translate(-50%,-50%)}.match-toast .mt-icon{animation:none}}.ad-image{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;opacity:0;transition:opacity .6s ease-in-out;pointer-events:none}.ad-image.active{opacity:1}@media (prefers-reduced-motion: reduce){.ad-image{transition:opacity .2s}}.ad-empty-hint{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:clamp(14px,1.8vh,22px);font-weight:600;letter-spacing:1.5px;text-transform:uppercase;padding:0 clamp(16px,2vw,32px);text-align:center;pointer-events:none}.ad-text-band{position:absolute;bottom:0;left:0;right:0;height:30%;display:flex;align-items:center;justify-content:center;padding:0 clamp(12px,1.5vw,24px);background:linear-gradient(to top,#000000c7,#0000008c 60%,#0000);color:#fff;font-size:clamp(13px,2vh,24px);font-weight:700;letter-spacing:.3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none;text-shadow:0 1px 3px rgba(0,0,0,.85)}.ad-text-band--solo{inset:0;height:100%;background:#00000073;letter-spacing:.5px}.ctrl-menu-wrap{position:relative;display:inline-block}.ctrl-menu-btn{background:transparent;border:1px solid rgba(255,255,255,.15);color:var(--text);font-size:clamp(18px,2.4vh,28px);width:clamp(32px,4.5vh,44px);height:clamp(32px,4.5vh,44px);border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-weight:700;transition:background .15s ease;padding:0;line-height:1}.ctrl-menu-btn:hover{background:#ffffff14}.ctrl-menu-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.ctrl-menu-popup{position:absolute;top:calc(100% + 6px);right:0;min-width:220px;background:#081220f7;border:1px solid rgba(255,255,255,.12);border-radius:8px;box-shadow:0 8px 24px #00000080;padding:4px;z-index:180;display:flex;flex-direction:column;gap:2px}.ctrl-menu-item{display:flex;align-items:center;gap:8px;padding:10px 14px;background:transparent;border:none;color:var(--text);text-align:left;font-size:clamp(13px,1.6vh,16px);cursor:pointer;border-radius:5px;font-weight:500;transition:background .1s ease;font-family:inherit}.ctrl-menu-item:hover{background:#ffffff14}.ctrl-menu-item.danger{color:#ff8080}.ctrl-menu-item.danger:hover{background:#ff64641f}.ctrl-menu-sep{height:1px;background:#ffffff14;margin:4px 0}.history-panel{display:flex;flex-direction:column;width:18%;min-width:180px;background:var(--surface);border-left:1px solid rgba(255,255,255,.08);flex-shrink:0;overflow:hidden}.history-header{padding:clamp(8px,1vh,14px) clamp(10px,1vw,16px);background:#ffffff08;border-bottom:1px solid rgba(255,255,255,.06);display:flex;align-items:center;gap:clamp(4px,.5vw,10px);flex-shrink:0}.history-header span{font-size:clamp(12px,1.4vh,18px);font-weight:800;text-transform:uppercase;letter-spacing:1.5px;color:var(--muted);flex:1}.hist-close-btn{background:transparent;border:none;color:var(--muted);font-size:clamp(14px,1.7vh,20px);cursor:pointer;padding:4px 8px;border-radius:4px;line-height:1}.hist-close-btn:hover{background:#ffffff14;color:var(--text)}.history-body{flex:1;overflow-y:auto;overflow-x:hidden;display:flex;flex-direction:column}.history-body::-webkit-scrollbar{width:4px}.history-body::-webkit-scrollbar-track{background:transparent}.history-body::-webkit-scrollbar-thumb{background:#ffffff1f;border-radius:2px}.hist-empty{padding:24px 16px;text-align:center;color:var(--muted);font-size:clamp(11px,1.4vh,14px);font-style:italic}.hist-set-header{padding:8px 12px;background:#ffffff0a;border-bottom:1px solid rgba(255,255,255,.06);border-top:1px solid rgba(255,255,255,.06);font-size:clamp(10px,1.2vh,14px);font-weight:800;text-transform:uppercase;letter-spacing:1.5px;color:#ffffff80;display:flex;justify-content:space-between;flex-shrink:0}.hist-set-header .set-result{font-size:clamp(11px,1.3vh,16px);font-weight:900;color:var(--text)}.hist-game-row{display:flex;flex-direction:column;padding:6px 12px;border-bottom:1px solid rgba(255,255,255,.04);gap:4px;flex-shrink:0}.hist-game-row:hover{background:#ffffff08}.hist-game-top{display:flex;align-items:baseline;gap:8px;font-size:clamp(11px,1.4vh,16px);color:var(--text)}.hist-game-num{color:var(--muted);font-weight:700}.hist-game-label{font-weight:600}.hist-points-trail{display:flex;flex-wrap:wrap;gap:3px}.hist-pt{width:clamp(8px,1vh,14px);height:clamp(8px,1vh,14px);border-radius:50%;display:inline-block;flex-shrink:0}.hist-pt.t0{background:#ffffffd9}.hist-pt.t1{background:#ffffff59}.hist-event-row{padding:6px 12px;font-size:clamp(11px,1.3vh,14px);color:var(--muted);border-bottom:1px solid rgba(255,255,255,.04);flex-shrink:0}.hist-event-row.match-end{background:#ffd23414;color:var(--gold);font-weight:700}.hist-event-row.hist-admin-action{background:#ffffff08;color:var(--text);font-weight:600;border-left:3px solid var(--accent);padding-left:9px}:root{--serve: #ffd234;--t0-bg: transparent;--t1-bg: transparent;--t0-hover: rgba(0, 214, 143, .08);--t1-hover: rgba(0, 214, 143, .08);--divider-bg: rgba(255, 255, 255, .06);--game-box-color: var(--text);--game-box-bg: transparent}.score-content{display:flex;flex-direction:column;height:100%;width:100%;background:var(--bg);position:relative}.tv-topbar{display:flex;align-items:center;justify-content:space-between;padding:clamp(8px,1.2vh,18px) clamp(16px,2vw,32px);border-bottom:1px solid rgba(255,255,255,.06);flex-shrink:0}.tv-topbar-left,.tv-topbar-right{display:flex;align-items:center;gap:clamp(10px,1.4vw,24px);min-width:12vw}.tv-topbar-right{justify-content:flex-end}.tv-topbar-center{display:flex;align-items:center;justify-content:center;flex:1;min-width:0;padding:0 clamp(12px,1.5vw,24px)}.topbar-timer{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:clamp(16px,2.4vh,32px);font-weight:700;color:var(--text);font-variant-numeric:tabular-nums}.tv-topbar-title{display:inline-flex;align-items:baseline;font-size:clamp(14px,1.9vh,24px);font-weight:700;color:#ffffffd9;letter-spacing:clamp(1px,.15vw,2.5px);text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.tv-topbar-sep{margin:0 clamp(8px,1vw,18px);color:#fff6;font-weight:400}.score-body{display:flex;flex-direction:column;flex:1;min-height:0}.score-body.history-open{flex-direction:row}.score-body.history-open .tv-teams{flex:1;min-width:0}.score-body.history-open .tr-set{font-size:clamp(28px,min(28vh,11.5vw),350px)}.score-body.history-open .tr-game-inner{font-size:clamp(20px,min(28vh,11.5vw),410px)}.tv-teams{display:flex;flex-direction:column;flex:1;min-height:0}.set-headers{display:grid;grid-template-columns:var(--score-grid-cols);align-items:center;padding:clamp(4px,.5vh,10px) clamp(16px,2vw,32px);border-bottom:1px solid var(--divider-bg);flex-shrink:0;background:#ffffff05}.sh-cell{font-size:clamp(11px,1.4vh,18px);color:var(--muted);text-align:center;letter-spacing:1.5px;text-transform:uppercase;font-weight:600}.sh-name{text-align:left}.team-row{display:grid;grid-template-columns:var(--score-grid-cols);align-items:center;padding:0 clamp(16px,2vw,32px) 0 clamp(8px,1vw,16px);flex:1;min-height:0;cursor:pointer;user-select:none;transition:background .15s ease}.team-row.t0{background:var(--t0-bg)}.team-row.t1{background:var(--t1-bg)}.team-row.t0:hover{background:var(--t0-hover)}.team-row.t1:hover{background:var(--t1-hover)}.tr-name{container-type:inline-size;display:flex;align-items:center;gap:clamp(8px,1vw,16px);padding:0 clamp(6px,1.8vw,28px) 0 0;min-width:0;border-right:1px solid rgba(255,255,255,.06)}.tr-team-name{font-size:clamp(10px,18cqi,175px);font-weight:900;letter-spacing:-.5px;line-height:1.12;color:#fff;min-width:0;width:100%;overflow:hidden;display:flex;flex-direction:column;justify-content:center}@supports not (container-type: inline-size){.tr-team-name{font-size:clamp(10px,min(15vh,8.8vw),175px)}}.tr-player{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tr-player-2{margin-top:.08em}.tr-serve-ball{width:clamp(14px,2vw,32px);height:clamp(14px,2vw,32px);border-radius:50%;background:var(--serve);box-shadow:0 0 .4vw var(--serve),0 0 0 clamp(2px,.3vw,5px) #ffd23440;flex-shrink:0;opacity:0;transition:opacity .3s}.team-row.serving .tr-serve-ball{opacity:1;animation:serve-pulse 1.8s ease-in-out infinite}@keyframes serve-pulse{0%,to{transform:scale(1);box-shadow:0 0 .4vw var(--serve),0 0 0 clamp(2px,.3vw,5px) #ffd23440}50%{transform:scale(1.12);box-shadow:0 0 .8vw var(--serve),0 0 0 clamp(4px,.5vw,8px) #ffd23459}}.tr-set{display:flex;align-items:center;justify-content:center;font-size:clamp(28px,min(34vh,14vw),430px);font-weight:500;color:#ffffff29;font-variant-numeric:tabular-nums;transition:color .3s,font-weight .3s}.tr-set.active{color:#ffffffc7;font-weight:700}.team-row.t0 .tr-set.won-0{color:#fffffff2;font-weight:900}.team-row.t0 .tr-set.won-1{color:#ffffff2e}.team-row.t1 .tr-set.won-1{color:#fffffff2;font-weight:900}.team-row.t1 .tr-set.won-0{color:#ffffff2e}.tr-game{display:flex;align-items:center;justify-content:center;background:var(--game-box-bg);margin:8% 6%;border-radius:clamp(6px,.8vw,14px);overflow:hidden;box-sizing:border-box;transition:border-color .25s ease;border:1px solid rgba(255,255,255,.06);padding:clamp(4px,.6vw,14px) clamp(20px,2.5vw,60px)}.tr-game.scored{border:clamp(5px,.6vw,12px) solid var(--accent)}.tr-game-inner{font-size:clamp(20px,min(28vh,11vw),280px);font-weight:900;letter-spacing:0;color:var(--game-box-color);text-align:center;line-height:1;font-variant-numeric:tabular-nums;will-change:transform}@keyframes pop-score{0%{transform:scale(1.07)}to{transform:scale(1)}}.tr-game-inner.pop{animation:pop-score .18s cubic-bezier(.34,1.56,.64,1);transform-origin:center center}.team-row-divider{height:1px;background:var(--divider-bg);flex-shrink:0;position:relative}.score-content .match-toast{position:absolute;top:50%;left:50%}.score-content.match-paused:after{content:"⏸ PAUSADO";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:#0000008c;backdrop-filter:blur(4px);color:var(--gold);font-size:clamp(48px,10vw,160px);font-weight:900;letter-spacing:clamp(4px,.8vw,16px);text-shadow:0 4px 24px rgba(0,0,0,.8),0 0 40px rgba(255,210,52,.3);z-index:140;pointer-events:none;animation:paused-pulse 2.5s ease-in-out infinite}@keyframes paused-pulse{0%,to{opacity:.92}50%{opacity:.72}}.bottom-strip{display:flex;align-items:stretch;height:clamp(80px,13vh,140px);background:var(--surface);border-top:1px solid var(--divider-bg);flex-shrink:0;position:relative}.bottom-strip-logo{flex-shrink:0;height:100%;display:flex;align-items:center}.bottom-strip-logo img{height:100%;width:auto;object-fit:contain;display:block}.bottom-strip-ads{flex:1 1 0;min-width:0;position:relative;overflow:hidden}.bottom-strip-qr{aspect-ratio:1;height:100%;flex-shrink:0;background:#fff;border-radius:0;padding:0;margin:0;border-left:1px solid var(--divider-bg);box-sizing:border-box}.bottom-strip-qr img{width:100%;height:100%;object-fit:contain;display:block}@media (prefers-reduced-motion: reduce){.team-row.serving .tr-serve-ball,.tr-game-inner.pop{animation:none}.score-content.match-paused:after{animation:none;opacity:.85}}.scoreboard-libre-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;background:var(--bg);color:var(--text);gap:24px;text-align:center;padding:32px}.scoreboard-libre-placeholder h1{font-size:clamp(40px,6vw,96px);letter-spacing:4px;text-transform:uppercase;color:var(--accent)}.scoreboard-libre-placeholder p{color:var(--muted);font-size:clamp(16px,2vw,28px)}.libre-screen{display:flex;flex-direction:column;height:100%;width:100%;background:var(--bg);color:var(--text);position:relative;overflow:hidden}.libre-top{display:flex;align-items:center;justify-content:center;padding:clamp(16px,2.5vh,36px) clamp(20px,3vw,48px);flex-shrink:0}.libre-client-logo{max-height:clamp(48px,8vh,96px);max-width:40vw;object-fit:contain}.libre-brand-logo{height:clamp(36px,5vh,60px);opacity:.7}.libre-body{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;min-height:0;gap:clamp(12px,2.4vh,32px);padding:clamp(20px,3vw,48px);text-align:center}.libre-title{font-size:clamp(40px,8vh,140px);font-weight:900;letter-spacing:clamp(4px,.6vw,12px);text-transform:uppercase;color:var(--accent);margin:0;text-shadow:0 0 30px rgba(0,214,143,.25)}.libre-court-name{font-size:clamp(20px,3.5vh,56px);font-weight:700;color:#ffffffe6;margin:0;letter-spacing:1px}.libre-welcome{font-size:clamp(16px,2.4vh,32px);color:#ffffffb3;font-weight:400;max-width:75ch;line-height:1.4;margin:0;font-style:italic}.libre-qr-wrap{display:flex;flex-direction:column;align-items:center;gap:clamp(8px,1.2vh,16px);margin-top:clamp(8px,1.2vh,24px)}.libre-qr{width:clamp(180px,32vh,360px);height:clamp(180px,32vh,360px);background:#fff;padding:clamp(8px,1.2vh,16px);border-radius:clamp(8px,1.2vh,18px);box-shadow:0 8px 24px #0006}.libre-qr-hint{font-size:clamp(12px,1.6vh,18px);color:var(--muted);letter-spacing:1px;text-transform:uppercase;font-weight:600;margin:0}.libre-preload-card{display:flex;flex-direction:column;align-items:center;gap:6px;padding:clamp(10px,1.6vh,20px) clamp(20px,2.5vw,36px);border:2px solid var(--gold);border-radius:clamp(6px,1vh,14px);background:#ffd2340d;box-shadow:0 4px 16px #ffd2341f;margin-top:clamp(8px,1.5vh,20px)}.libre-preload-label{font-size:clamp(11px,1.4vh,16px);color:var(--gold);letter-spacing:2px;text-transform:uppercase;font-weight:700}.libre-preload-teams{font-size:clamp(16px,2.4vh,30px);font-weight:800;color:var(--text);letter-spacing:.5px}.libre-elapsed{position:absolute;bottom:clamp(12px,2vh,24px);right:clamp(12px,2vw,24px);font-size:clamp(11px,1.3vh,16px);color:#fff6;font-weight:500;letter-spacing:.5px;margin:0;font-family:ui-monospace,SFMono-Regular,monospace}.winner-overlay{position:fixed;inset:0;display:none;flex-direction:column;align-items:center;justify-content:center;background:#04091af2;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);z-index:250;padding:clamp(24px,4vh,64px);gap:clamp(12px,2vh,32px);text-align:center;overflow:hidden}.winner-overlay.show{display:flex;animation:winner-fade-in .4s ease-out}@keyframes winner-fade-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}.w-trophy{font-size:clamp(60px,10vh,140px);line-height:1;filter:drop-shadow(0 0 30px rgba(255,210,52,.4));animation:trophy-bounce 1.6s ease-in-out infinite}@keyframes trophy-bounce{0%,to{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-12px) rotate(3deg)}}.w-title{font-size:clamp(16px,2vh,24px);letter-spacing:clamp(3px,.5vw,8px);text-transform:uppercase;color:var(--gold);font-weight:700}.w-name{font-size:clamp(36px,8vh,96px);font-weight:900;color:#fff;letter-spacing:1px;line-height:1.1;max-width:90vw;word-break:break-word}.w-sets{font-size:clamp(20px,3.2vh,44px);color:#ffffffb3;font-weight:700;letter-spacing:4px;font-variant-numeric:tabular-nums}.w-stats{display:flex;gap:clamp(16px,3vw,48px);flex-wrap:wrap;justify-content:center;margin-top:clamp(8px,1.5vh,16px)}.w-stat{display:flex;flex-direction:column;align-items:center;gap:4px;min-width:80px}.w-stat-value{font-size:clamp(20px,3vh,36px);font-weight:800;color:var(--accent);font-variant-numeric:tabular-nums}.w-stat-label{font-size:clamp(10px,1.2vh,14px);color:var(--muted);letter-spacing:1px;text-transform:uppercase;font-weight:600}.w-preload{display:flex;flex-direction:column;gap:6px;padding:clamp(8px,1.4vh,16px) clamp(20px,2.5vw,36px);border:2px solid var(--gold);border-radius:clamp(6px,1vh,14px);background:#ffd2340d;margin-top:clamp(8px,1.5vh,20px)}.w-preload-label{font-size:clamp(10px,1.4vh,14px);color:var(--gold);letter-spacing:2px;text-transform:uppercase;font-weight:700}.w-preload-teams{font-size:clamp(14px,2.2vh,24px);font-weight:800;color:var(--text)}.w-close{position:absolute;top:clamp(12px,2vh,24px);right:clamp(12px,2vw,24px);background:#ffffff14;border:1px solid rgba(255,255,255,.15);color:var(--text);font-size:clamp(16px,2vh,22px);width:clamp(32px,5vh,48px);height:clamp(32px,5vh,48px);border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .15s ease;font-weight:700;line-height:1}.w-close:hover{background:#ffffff24}.w-confetti{position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .4s ease-in;overflow:hidden}.winner-overlay.show .w-confetti{opacity:1}.w-confetti-piece{position:absolute;top:-20px;animation-name:confetti-fall;animation-timing-function:linear;animation-iteration-count:infinite;will-change:transform,opacity}@keyframes confetti-fall{0%{transform:translate3d(0,-20px,0) rotate(0);opacity:1}to{transform:translate3d(calc(-50px + 100px * var(--drift, 1)),100vh,0) rotate(720deg);opacity:.6}}@media (prefers-reduced-motion: reduce){.winner-overlay.show,.w-trophy{animation:none}.w-confetti{display:none!important}}:root{--bg: #04091a;--surface: #0b1e3a;--text: #e8eef5;--muted: rgba(232, 238, 245, .5);--accent: #00d68f;--gold: #ffd234}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%;width:100%;background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}body{overflow:hidden}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}code{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Monaco,monospace;background:#ffffff14;padding:2px 8px;border-radius:4px;font-size:.95em}
