*,:after,:before{box-sizing:border-box;margin:0;padding:0}:root{--galvora-teal:#0c7ea4;--galvora-teal-mid:#0a6d8c;--galvora-teal-deep:#074a60;--galvora-ink:#0c1929;--galvora-ink-soft:#334155;--galvora-mist:#e8f4f8;--galvora-sand:#f4f7f9;--galvora-white:#ffffff;--bg:var(--galvora-sand);--bg-card:var(--galvora-white);--text:var(--galvora-ink);--text-muted:var(--galvora-ink-soft);--primary:var(--galvora-teal);--primary-dark:var(--galvora-teal-deep);--primary-mid:var(--galvora-teal-mid);--primary-light:var(--galvora-mist);--accent:#d97706;--success:#059669;--danger:#dc2626;--border:color-mix(in srgb,var(--galvora-teal-deep) 12%,#e2e8f0);--radius:0.875rem;--shadow:0 1px 2px rgb(7 74 96/0.06),0 8px 24px rgb(7 74 96/0.08);--safe-top:env(safe-area-inset-top,0px);--safe-right:env(safe-area-inset-right,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--safe-left:env(safe-area-inset-left,0px);line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:root,body{font-family:var(--font-dm-sans),"DM Sans",system-ui,-apple-system,sans-serif;color:var(--text);background:radial-gradient(ellipse 80% 55% at 8% -5%,rgb(12 126 164/.14),transparent 55%),radial-gradient(ellipse 70% 45% at 95% 100%,rgb(7 74 96/.1),transparent 50%),var(--galvora-sand)}#root,.app,body{min-height:100dvh}.app{display:flex;flex-direction:column}.app-header{justify-content:space-between;gap:.5rem;padding:calc(.75rem + var(--safe-top)) calc(1rem + var(--safe-right)) .75rem calc(1rem + var(--safe-left));color:var(--galvora-white);background:linear-gradient(125deg,var(--galvora-teal-deep) 0,var(--galvora-teal-mid) 48%,var(--galvora-teal) 100%),url(/landing/court-motif.svg);background-blend-mode:normal,soft-light;box-shadow:0 8px 28px rgb(7 74 96/.22);position:sticky;top:0;z-index:10}.app-header,.header-left{display:flex;align-items:center}.header-left{gap:.75rem}.install-btn{display:flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border:1px solid rgba(255,255,255,.35);border-radius:8px;background:rgba(255,255,255,.12);color:white;cursor:pointer;flex-shrink:0}.install-btn:hover{background:rgba(255,255,255,.22)}.install-hint-backdrop{position:fixed;inset:0;z-index:200;background:rgba(12,25,41,.7);display:flex;align-items:flex-end;justify-content:center;padding:var(--safe-top) calc(1rem + var(--safe-right)) calc(1rem + var(--safe-bottom)) calc(1rem + var(--safe-left))}.install-hint{background:#fff;border-radius:14px;padding:1.25rem;width:100%;max-width:360px}.install-hint-title{font-weight:700;font-family:var(--font-display),var(--font-dm-sans),sans-serif;color:var(--galvora-teal-deep);margin-bottom:.75rem}.install-hint ol{margin:0 0 1rem 1.1rem;color:var(--galvora-ink-soft);font-size:.95rem;line-height:1.5}.tournament-header{gap:.5rem}.tournament-header .install-btn{margin-left:.25rem}.logo{display:block;width:2.1rem;height:2.1rem;flex-shrink:0;border-radius:.65rem;-o-object-fit:contain;object-fit:contain;background:var(--galvora-white);box-shadow:0 2px 8px rgb(7 74 96/.25)}.app-title{font-family:var(--font-display),var(--font-dm-sans),sans-serif;font-weight:700;font-size:1.05rem;letter-spacing:.02em;display:block}.app-subtitle{font-size:.8rem;opacity:.88}.app-main{flex:1;padding:1rem calc(1.25rem + var(--safe-right)) calc(2rem + var(--safe-bottom)) calc(1.25rem + var(--safe-left));max-width:640px;margin:0 auto;width:100%}.card{background:var(--bg-card);border-radius:var(--radius);border:1px solid var(--border);box-shadow:var(--shadow);padding:1.5rem}.setup-card h1{font-family:var(--font-display),var(--font-dm-sans),sans-serif;font-size:1.5rem;margin:.75rem 0 .5rem;color:var(--primary-dark)}.subtitle{color:var(--text-muted);font-size:.95rem;margin-bottom:1.25rem}.format-badge{display:inline-block;background:var(--primary-light);color:var(--primary);font-size:.75rem;font-weight:600;padding:.25rem .75rem;border-radius:999px;text-transform:uppercase;letter-spacing:.03em}.mode-toggle{display:grid;grid-template-columns:1fr 1fr;gap:.5rem;margin-bottom:1.25rem}.mode-btn{border:1.5px solid var(--border,#d0dce3);background:var(--bg,#fff);color:var(--text-muted,#5a6b75);border-radius:10px;padding:.65rem .75rem;font-weight:600;font-size:.9rem;cursor:pointer}.mode-btn.active{border-color:var(--primary);background:var(--primary-light);color:var(--primary)}.format-info{display:grid;grid-template-columns:repeat(3,1fr);gap:.75rem;margin-bottom:.75rem}.format-stat{background:var(--bg);border-radius:8px;padding:.75rem;text-align:center}.format-stat-value{display:block;font-size:1.5rem;font-weight:700;color:var(--primary)}.format-stat-label{font-size:.75rem;color:var(--text-muted)}.format-desc{font-size:.85rem;color:var(--text-muted);margin-bottom:1.5rem;text-align:center}.preset-hint{margin:-.35rem 0 1rem;font-size:.8rem;color:var(--text-muted)}.input-label{display:block;font-weight:600;font-size:.9rem;margin-bottom:.5rem}.arena-input+.input-label,.input-label+.input-label{margin-top:1rem}.arena-input{width:100%;padding:.875rem 1rem;border:2px solid var(--border);border-radius:var(--radius);font-family:inherit;font-size:1rem;background:white}.arena-input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}.players-input{width:100%;padding:.875rem 1rem;border:2px solid var(--border);border-radius:var(--radius);font-family:inherit;font-size:1rem;resize:vertical;min-height:120px;transition:border-color .15s;background:white}.players-input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}.player-count{text-align:right;font-size:.85rem;color:var(--text-muted);margin:.5rem 0 1rem}.player-count.ready{color:var(--success);font-weight:600}.player-count.over{color:var(--danger);font-weight:600}.error-msg{color:var(--danger);font-size:.9rem;margin-bottom:1rem;padding:.75rem;background:#fef2f2;border-radius:8px}.btn-primary{width:100%;padding:.875rem 1.5rem;background:var(--primary);color:white;border:none;border-radius:var(--radius);font-family:inherit;font-size:1rem;font-weight:600;cursor:pointer;transition:background .15s,transform .1s}.btn-primary:hover:not(:disabled){background:var(--primary-mid)}.btn-primary:active:not(:disabled){transform:scale(.98)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.btn-ghost{background:rgba(255,255,255,.15);color:white;border:1px solid rgba(255,255,255,.3);padding:.5rem .875rem;border-radius:8px;font-family:inherit;font-size:.85rem;font-weight:500;cursor:pointer}.btn-ghost:hover{background:rgba(255,255,255,.25)}.rules-details{margin-top:1.5rem;font-size:.85rem;color:var(--text-muted)}.rules-details summary{cursor:pointer;font-weight:600;color:var(--primary)}.rules-details ul{margin-top:.75rem;padding-left:1.25rem}.rules-details li{margin-bottom:.35rem}.tab-nav{display:flex;gap:.5rem;padding:.75rem calc(1rem + var(--safe-right)) .75rem calc(1rem + var(--safe-left));background:color-mix(in srgb,var(--galvora-white) 88%,transparent);backdrop-filter:blur(10px);border-bottom:1px solid var(--border);position:sticky;top:calc(3.35rem + var(--safe-top));z-index:9}.tournament-header~.tab-nav{top:calc(4.25rem + var(--safe-top))}.tab-btn{flex:1;display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.625rem 1rem;border:none;background:var(--bg);border-radius:8px;font-family:inherit;font-size:.9rem;font-weight:600;color:var(--text-muted);cursor:pointer;transition:all .15s}.tab-btn.active{background:var(--primary);color:white}.tab-badge{font-size:.75rem;background:rgba(0,0,0,.1);padding:.125rem .5rem;border-radius:999px}.tab-btn.active .tab-badge{background:rgba(255,255,255,.2)}.draw-actions,.draw-btn{margin-top:1.25rem}.draw-actions{display:flex;flex-direction:row;align-items:stretch;gap:.5rem}.draw-btn-inline{flex:1;width:auto}.court-count-input{width:3.25rem;padding:.5rem;text-align:center;border:2px solid var(--border);border-radius:var(--radius);font-family:inherit;font-size:1.1rem;font-weight:700;-moz-appearance:textfield}.court-count-input::-webkit-inner-spin-button,.court-count-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.court-count-input:focus{outline:none;border-color:var(--primary)}.empty-msg,.hint-msg{font-size:.85rem;color:var(--text-muted);margin-top:.75rem;text-align:center}.empty-msg{margin-bottom:.5rem}.schedule-section h2{font-family:var(--font-display),var(--font-dm-sans),sans-serif;font-size:1.25rem;margin-bottom:1rem;color:var(--primary-dark)}.round-group{margin-bottom:1.5rem}.round-title{font-size:.9rem;font-weight:600;color:var(--text-muted);margin-bottom:.75rem;text-transform:uppercase;letter-spacing:.05em}.matches-grid{display:flex;flex-direction:column;gap:.75rem}.match-card{background:var(--bg-card);border-radius:var(--radius);box-shadow:var(--shadow);padding:1rem;border:1px solid var(--border);transition:border-color .15s,box-shadow .15s}.match-card.played{border-color:color-mix(in srgb,var(--success) 40%,transparent)}.match-card.tie{border-color:var(--accent)}.match-round{font-size:.75rem;font-weight:600;color:var(--primary);margin-bottom:.75rem}.match-team{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.5rem 0}.match-team.winner{background:color-mix(in srgb,var(--success) 8%,transparent);border-radius:6px;padding:.5rem;margin:0 -.5rem}.team-names{font-size:.9rem;font-weight:500;flex:1;line-height:1.3}.match-vs{text-align:center;color:var(--text-muted);font-size:.8rem;padding:.25rem 0}.score-input{width:3.5rem;padding:.5rem;text-align:center;border:2px solid var(--border);border-radius:8px;font-family:inherit;font-size:1.1rem;font-weight:700;-moz-appearance:textfield}.score-input::-webkit-inner-spin-button,.score-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.score-input:focus{outline:none;border-color:var(--primary)}.score-readonly{display:inline-flex;align-items:center;justify-content:center;border-color:transparent;background:var(--bg);color:var(--primary-dark)}.tie-warning{font-size:.8rem;color:var(--accent);text-align:center;margin-top:.5rem;font-weight:500}.leaderboard-card h2{font-family:var(--font-display),var(--font-dm-sans),sans-serif;font-size:1.25rem;color:var(--primary-dark)}.leaderboard-card{position:relative;padding-top:2.75rem}.leaderboard-capture{width:100%;padding:1.5rem;background:#ffffff;border-radius:var(--radius)}.leaderboard-capture h2{color:#074a60}.leaderboard-capture .progress-badge{background:#e8f4f8;color:#0c7ea4}.leaderboard-capture .lb-header{color:#334155}.leaderboard-capture .lb-row:not(.lb-header){background:#f4f7f9}.leaderboard-capture .lb-row.top-1{background:#fef3c7}.leaderboard-capture .lb-row.top-2{background:#f1f5f9}.leaderboard-capture .lb-row.top-3{background:#fff7ed}.leaderboard-capture .lb-diff,.leaderboard-capture .lb-games,.leaderboard-capture .lb-rank,.leaderboard-capture .lb-record{color:#334155}.leaderboard-capture .lb-name{color:#0c1929}.leaderboard-capture .lb-diff.positive,.leaderboard-capture .lb-net.positive{color:#059669}.leaderboard-capture .lb-diff.negative,.leaderboard-capture .lb-net.negative{color:#dc2626}.leaderboard-capture .lb-legend{color:#334155}.is-capturing .victory-banner{animation:none;background:#fef3c7;border:2px solid #d4af37;box-shadow:none}.is-capturing .trophy-anim{animation:none;filter:none;transform:none}.is-capturing .victory-title,.is-capturing .victory-winner,.is-capturing .victory-winner strong{color:#78350f;opacity:1}.is-capturing .victory-winner strong{color:#92400e}.share-btn-float{position:absolute;top:1rem;right:1rem;z-index:2}.leaderboard-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1rem;gap:.75rem}.progress-badge{font-size:.8rem;background:var(--primary-light);color:var(--primary);padding:.25rem .75rem;border-radius:999px;font-weight:600}.leaderboard-table{display:flex;flex-direction:column;gap:2px}.lb-row{display:grid;grid-template-columns:2rem 1fr 2.5rem 2.5rem 2.5rem 2.5rem;gap:.25rem;align-items:center;padding:.625rem .75rem;border-radius:6px;font-size:.85rem}.lb-header{font-size:.7rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.03em;padding-bottom:.5rem}.lb-row:not(.lb-header){background:var(--bg)}.lb-row.top-1{background:linear-gradient(90deg,#fef3c7,var(--bg))}.lb-row.top-2{background:linear-gradient(90deg,#f1f5f9,var(--bg))}.lb-row.top-3{background:linear-gradient(90deg,#fff7ed,var(--bg))}.lb-rank{font-weight:700;color:var(--text-muted)}.lb-name{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lb-net{font-weight:700;text-align:center}.lb-diff.positive,.lb-net.positive{color:var(--success)}.lb-diff.negative,.lb-net.negative{color:var(--danger)}.lb-diff,.lb-games,.lb-record{text-align:center;color:var(--text-muted)}.lb-legend{margin-top:1rem;font-size:.75rem;color:var(--text-muted);line-height:1.4}.victory-banner{text-align:center;padding:1.5rem 1.25rem;margin-top:1rem;border-radius:var(--radius);background:linear-gradient(160deg,#fffbeb,#fef3c7 42%,color-mix(in srgb,#d4af37 22%,#fde68a));border:2px solid color-mix(in srgb,#d4af37 55%,#f59e0b);box-shadow:0 4px 14px rgb(212 175 55/.28);animation:victory-pop .5s ease forwards;opacity:1}.victory-banner--ranking{margin-top:0;margin-bottom:1.25rem}.trophy-anim{font-size:3.5rem;line-height:1;animation:trophy-bounce 1.2s ease-in-out infinite;filter:drop-shadow(0 4px 10px rgb(180 120 20/.35))}.victory-title{font-family:var(--font-display),var(--font-dm-sans),sans-serif;font-size:1.25rem;font-weight:700;color:#78350f;margin:.5rem 0 .25rem}.victory-winner{font-size:1rem;color:#92400e;margin-bottom:0}.victory-winner strong{color:#78350f;font-weight:700}.victory-btn{max-width:240px;margin:0 auto}.leaderboard-actions{display:flex;align-items:center;gap:.5rem}.share-btn{display:flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border:none;border-radius:8px;background:var(--primary-light);color:var(--primary);cursor:pointer;flex-shrink:0}.share-btn:hover:not(:disabled){background:var(--primary);color:white}.share-btn:disabled{opacity:.5}.share-sheet-backdrop{position:fixed;inset:0;z-index:100;background:rgba(12,25,41,.75);display:flex;align-items:flex-end;justify-content:center;padding:var(--safe-top) calc(1rem + var(--safe-right)) calc(1rem + var(--safe-bottom)) calc(1rem + var(--safe-left))}.share-sheet{background:#fff;border-radius:16px 16px 12px 12px;padding:1.25rem;width:100%;max-width:400px;max-height:90vh;overflow-y:auto}.share-sheet-hint{text-align:center;font-size:.95rem;color:var(--text-muted);margin-bottom:1rem}.share-sheet-img{display:block;width:100%;border-radius:8px;margin-bottom:1rem;-webkit-touch-callout:default;-webkit-user-select:auto;-moz-user-select:auto;user-select:auto}.share-sheet-actions{display:flex;flex-direction:column;gap:.5rem}.btn-ghost-dark{width:100%;padding:.75rem;border:none;background:var(--bg);color:var(--text-muted);border-radius:var(--radius);font-family:inherit;font-size:.95rem;cursor:pointer}@keyframes trophy-bounce{0%,to{transform:translateY(0) rotate(-5deg)}50%{transform:translateY(-14px) rotate(5deg) scale(1.08)}}@keyframes victory-pop{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}@media (min-width:480px){.app-main{padding:1.5rem 2rem 3rem}.card{padding:2rem}}.home-screen{display:flex;flex-direction:column;gap:1.25rem}.home-hero h1{font-family:var(--font-display),var(--font-dm-sans),sans-serif;font-size:1.5rem;color:var(--primary-dark);margin-bottom:.35rem}.modality-grid{gap:1rem}.modality-card,.modality-grid{display:flex;flex-direction:column}.modality-card{align-items:flex-start;text-align:left;width:100%;padding:1.25rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-card);box-shadow:var(--shadow);cursor:pointer;font-family:inherit;color:inherit;transition:border-color .15s,transform .15s,box-shadow .15s}.modality-card:hover{border-color:color-mix(in srgb,var(--primary) 45%,var(--border));box-shadow:0 4px 18px rgb(12 126 164/.14);transform:translateY(-1px)}.modality-card:active{transform:translateY(0)}.modality-icon{font-size:2rem;line-height:1;margin-bottom:.5rem}.modality-title{font-family:var(--font-display),var(--font-dm-sans),sans-serif;font-size:1.15rem;font-weight:700;color:var(--primary-dark)}.modality-subtitle{font-size:.85rem;color:var(--primary);font-weight:600;margin-bottom:.5rem}.modality-desc{font-size:.9rem;color:var(--text-muted);margin-bottom:.75rem;line-height:1.45}.modality-stats{display:flex;gap:1.25rem;width:100%;padding-top:.75rem;border-top:1px solid var(--border)}.modality-stat{display:flex;flex-direction:column;gap:.1rem}.modality-stat-value{font-weight:700;color:var(--primary-dark);font-size:1rem}.modality-stat-label{font-size:.7rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.btn-back{display:inline-flex;align-items:center;gap:.25rem;margin-bottom:.75rem;padding:.35rem 0;border:none;background:none;color:var(--primary);font-family:inherit;font-size:.9rem;font-weight:600;cursor:pointer}.btn-back:hover{color:var(--primary-dark)}.group-preview{margin:1rem 0;padding:.75rem;background:var(--bg);border-radius:8px;border:1px solid var(--border)}.group-preview-row{display:flex;flex-direction:column;gap:.15rem;font-size:.85rem;color:var(--text-muted);padding:.35rem 0}.group-preview-row+.group-preview-row{border-top:1px solid var(--border);margin-top:.35rem;padding-top:.5rem}.group-preview-row strong{color:var(--primary-dark);font-size:.8rem}.saved-tournaments{margin-top:.5rem;display:flex;flex-direction:column;gap:.75rem}.saved-tournaments-title{font-family:var(--font-display),var(--font-dm-sans),sans-serif;font-size:1.15rem;font-weight:700;color:var(--primary-dark);margin:0}.saved-tournaments-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.75rem}.saved-tournament-item{display:flex;flex-direction:column;gap:.75rem;padding:1rem 1.1rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-card);box-shadow:var(--shadow)}.saved-tournament-meta{display:flex;flex-direction:column;gap:.2rem}.saved-tournament-name{font-family:var(--font-display),var(--font-dm-sans),sans-serif;font-size:1.05rem;font-weight:700;color:var(--primary-dark)}.saved-tournament-modality{font-size:.85rem;font-weight:600;color:var(--primary)}.saved-tournament-info{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem .75rem;margin-top:.35rem;font-size:.8rem;color:var(--text-muted)}.saved-tournament-status{font-weight:600;letter-spacing:.02em}.saved-tournament-status.is-in-progress{color:var(--primary)}.saved-tournament-status.is-finished{color:#0f766e}.saved-tournament-actions{display:flex;flex-wrap:wrap;gap:.5rem}.btn-saved-danger,.btn-saved-primary,.btn-saved-secondary{flex:1 1 auto;min-width:6.5rem;padding:.55rem .75rem;border-radius:8px;font-family:inherit;font-size:.85rem;font-weight:600;cursor:pointer}.btn-saved-primary{background:var(--primary);color:white;border:none}.btn-saved-primary:hover{background:var(--primary-mid)}.btn-saved-secondary{background:transparent;color:var(--primary-dark);border:1px solid var(--border)}.btn-saved-secondary:hover{border-color:color-mix(in srgb,var(--primary) 45%,var(--border));background:color-mix(in srgb,var(--primary) 6%,transparent)}.btn-saved-danger{background:transparent;color:#b91c1c;border:1px solid color-mix(in srgb,#b91c1c 35%,var(--border))}.btn-saved-danger:hover{background:color-mix(in srgb,#b91c1c 8%,transparent)}.confirm-dialog-backdrop{position:fixed;inset:0;z-index:100;background:rgba(12,25,41,.75);display:flex;align-items:center;justify-content:center;padding:1.25rem}.confirm-dialog{background:#fff;border-radius:16px;padding:1.25rem;width:100%;max-width:360px;box-shadow:0 12px 40px rgb(12 25 41/.25)}.confirm-dialog-title{font-family:var(--font-display),var(--font-dm-sans),sans-serif;font-size:1.1rem;font-weight:700;color:var(--primary-dark);margin:0 0 .35rem}.confirm-dialog-text{font-size:.9rem;color:var(--text-muted);margin:0 0 1.1rem;line-height:1.45}.confirm-dialog-actions{display:flex;gap:.5rem}.confirm-dialog-actions .btn-confirm-danger,.confirm-dialog-actions .btn-ghost-dark{flex:1;padding:.7rem .85rem;border-radius:8px;font-family:inherit;font-size:.9rem;font-weight:600;cursor:pointer}.btn-confirm-danger{background:#b91c1c;color:white;border:none}.btn-confirm-danger:hover{background:#991b1b}