/* Tournament Platform — oletustyylit.
   Ulkoasun saa ylikirjoitettua koodia muuttamatta tiputtamalla oman
   tyylitiedoston: data/custom.css (ladataan tämän jälkeen). */

:root { --fg:#1a1a1a; --mut:#666; --line:#e2e2e2; --accent:#1f6feb; --bg:#fafafa; }
* { box-sizing:border-box; }
body { font:15px/1.5 system-ui,Segoe UI,Roboto,sans-serif; color:var(--fg);
       margin:0; background:var(--bg); }
.wrap { max-width:980px; margin:0 auto; padding:24px 20px 64px; }
a { color:var(--accent); text-decoration:none; } a:hover { text-decoration:underline; }
h1 { font-size:24px; margin:0 0 4px; } h2 { font-size:18px; margin:28px 0 10px; }
.crumbs { font-size:13px; color:var(--mut); margin-bottom:18px; }
.card { background:#fff; border:1px solid var(--line); border-radius:10px;
        padding:16px 18px; margin:14px 0; }
table { border-collapse:collapse; width:100%; font-size:14px; }
th,td { text-align:left; padding:7px 10px; border-bottom:1px solid var(--line); }
th { color:var(--mut); font-weight:600; }
form.inline { display:inline; }
input,select,button { font:inherit; padding:7px 9px; border:1px solid #ccc;
        border-radius:7px; background:#fff; }
button { background:var(--accent); color:#fff; border-color:var(--accent);
        cursor:pointer; } button:hover { filter:brightness(1.08); }
button.ghost { background:#fff; color:var(--fg); border-color:#ccc; }
.row { display:flex; gap:8px; flex-wrap:wrap; align-items:end; }
.row > div { display:flex; flex-direction:column; gap:3px; }
label { font-size:12px; color:var(--mut); }
.pill { font-size:12px; padding:2px 8px; border-radius:999px; background:#eef;
        color:#334; } .mut { color:var(--mut); }
.err { background:#fde8e8; border:1px solid #f5b5b5; color:#9b1c1c;
        padding:12px 14px; border-radius:8px; }
.ok { background:#e7f6ec; border:1px solid #9bd3ad; color:#16643a;
        padding:12px 14px; border-radius:8px; margin:14px 0; }
.score { width:54px; text-align:center; }
.slot { font-size:12px; border:1px solid var(--line); border-radius:5px;
        padding:3px 5px; margin:2px 0; background:#f4f7ff; }

/* Jaettu yläpalkki — kiinteät hookit (.site-top/.site-brand/.site-nav/
   .site-actions). custom.css saa tyylitellä uudelleen. */
.site-top { background:#fff; border-bottom:1px solid var(--line);
        position:sticky; top:0; z-index:50; }
.site-top-inner { max-width:980px; margin:0 auto; padding:10px 20px;
        display:flex; align-items:center; gap:18px; }
.site-brand { font-weight:700; color:var(--fg); font-size:16px; }
.site-brand:hover { text-decoration:none; }
.site-nav { display:flex; gap:14px; flex-wrap:wrap; }
.site-nav a { color:var(--mut); font-size:14px; }
.site-nav a:hover { color:var(--accent); }
.site-actions { margin-left:auto; display:flex; gap:10px; align-items:center; }
.site-actions form { display:inline; }
@media (max-width:560px) {
  .site-top-inner { flex-wrap:wrap; gap:8px 14px; }
  .site-actions { margin-left:0; }
}

/* ChatGPTn DOM-sopimus v2 — jaetut hookit (custom.css tyylittelee). */
.site-main { display:block; }
.page-actions { display:flex; flex-wrap:wrap; gap:10px 16px;
        align-items:center; margin:10px 0 4px; }
.page-actions form.inline { margin:0; }
.metric-grid { display:flex; flex-wrap:wrap; gap:12px; margin:14px 0; }
.metric { flex:1 1 130px; background:#fff; border:1px solid var(--line);
        border-radius:10px; padding:12px 14px; }
.metric-value { display:block; font-size:22px; font-weight:700;
        color:var(--fg); line-height:1.1; }
.metric-label { display:block; font-size:12px; color:var(--mut);
        margin-top:2px; }
.public-hero { margin:6px 0 18px; }
.public-hero h1 { font-size:30px; }
.match-list { display:block; }
.match-card { background:#fff; border:1px solid var(--line);
        border-radius:10px; padding:12px 14px; margin:10px 0; }
.site-foot { max-width:980px; margin:40px auto 0; padding:18px 20px 40px;
        border-top:1px solid var(--line); font-size:13px;
        color:var(--mut); }

/* Semanttiset luokat (ChatGPT tyylittelee tarkasti) */
.page-header { margin:0 0 10px; }
.page-header h1 { margin-bottom:2px; }
.standings-table td:first-child, .standings-table th:first-child { width:2.2em; }
.admin-table { font-size:13px; }
/* Statuspillerit — neutraalit oletukset, värit semantiikan mukaan */
.pill.status-open, .pill.status-confirmed, .pill.status-paid {
        background:#e7f6ec; color:#16643a; }
.pill.status-pending, .pill.status-sent, .pill.status-draft {
        background:#fff4d3; color:#7a5300; }
.pill.status-rejected, .pill.status-overdue, .pill.status-cancelled {
        background:#fde8e8; color:#9b1c1c; }
.pill.status-closed, .pill.status-finished { background:#eef; color:#334; }
.pill.status-live { background:#0f6848; color:#fff; }
.pill.status-waitlist { background:#e6eefc; color:#1e3a8a; }
/* Jonotuslista (waitlist) — neutraalit oletukset */
.waitlist-card { border-left:3px solid #1e3a8a; }
.waitlist-banner { background:#e6eefc; color:#1e3a8a; border-radius:8px;
        padding:12px 14px; margin:12px 0; }
.waitlist-banner b { color:#16306e; }
/* Ottelukortit (mobiili edellä) */
.series-switch { display:flex; flex-wrap:wrap; gap:8px; margin:14px 0; }
.series-switch a { font-size:13px; border:1px solid var(--line);
        border-radius:999px; padding:5px 12px; color:var(--fg); }
.series-switch a:hover { border-color:var(--accent); text-decoration:none; }
.hero-next { margin:14px 0 6px; }
.match-group { margin:10px 0; }
.match-group h3 { margin:10px 0 6px; font-size:15px; }
.match-cards { display:grid; gap:10px;
        grid-template-columns:repeat(auto-fill,minmax(260px,1fr)); }
.match-card { background:#fff; border:1px solid var(--line);
        border-left:4px solid var(--accent); border-radius:10px;
        padding:12px 14px; display:grid; gap:4px; }
.match-card.status-finished { border-left-color:var(--mut); }
.match-card.status-tbd { border-left-color:var(--line); }
.mc-context { font-size:12px; color:var(--mut); }
.mc-time { font-size:13px; color:var(--mut); }
.mc-teams { font-weight:600; }
.mc-vs { color:var(--mut); font-weight:400; }
.mc-result { font-size:15px; }
.mc-meta { font-size:12px; color:var(--mut); }

/* Admin-layout-hookit (TorneoPal-tyyppinen IA; ChatGPT tekee ilmeen) */
.admin-shell { display:block; }
.side-nav { margin:0 0 16px; padding:12px 0; border-bottom:1px solid var(--line); }
.side-nav-title { font-size:12px; font-weight:700; color:var(--mut);
        text-transform:uppercase; letter-spacing:.04em; margin-bottom:6px; }
.side-nav-list { display:flex; flex-wrap:wrap; gap:4px 14px; }
.side-nav-link { font-size:14px; color:var(--mut); }
.side-nav-link.is-active { color:var(--accent); font-weight:600; }
.side-nav-link:hover { color:var(--accent); }
.module-tabs { display:flex; flex-wrap:wrap; gap:4px; margin:0 0 16px;
        border-bottom:1px solid var(--line); }
.module-tab { font-size:14px; padding:8px 14px; color:var(--mut);
        border-bottom:2px solid transparent; }
.module-tab.is-active { color:var(--fg); border-bottom-color:var(--accent);
        font-weight:600; }
.module-tab:hover { color:var(--accent); text-decoration:none; }
.tournament-switcher { margin-top:14px; padding-top:12px;
        border-top:1px solid var(--line); }
.tournament-switcher nav { display:flex; flex-direction:column; gap:4px;
        margin-top:6px; }
.ts-item { font-size:13px; color:var(--mut); }
.ts-item.is-active { color:var(--accent); font-weight:600; }
.settings-grid { display:grid; gap:14px;
        grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); margin:14px 0; }
.settings-card { background:#fff; border:1px solid var(--line);
        border-radius:10px; padding:16px 18px; }
.settings-card h2 { margin-top:0; }
.field-help { display:block; font-size:12px; color:var(--mut); margin:2px 0 8px; }
.publish-list { list-style:none; margin:0; padding:0;
        display:flex; flex-direction:column; gap:10px; }
.publish-item { display:flex; flex-direction:column; gap:2px; }
.copyable-url { display:flex; flex-wrap:wrap; align-items:center; gap:8px;
        margin:6px 0; }
.copyable-url .cu-text { word-break:break-all; }
.qr-action { font-size:13px; border:1px solid var(--line);
        border-radius:7px; padding:5px 12px; }
.qr-action:hover { border-color:var(--accent); text-decoration:none; }
.user-dock { display:flex; align-items:center; gap:10px; }

/* Tuomarin livesovellus */
.mc-actions { margin-top:6px; }
.live-link { display:inline-block; font-size:13px; font-weight:600;
        border:1px solid var(--accent); border-radius:7px; padding:5px 12px; }
.live-link:hover { background:var(--accent); color:#fff; text-decoration:none; }
.live-clock { font-size:46px; font-weight:800; font-variant-numeric:tabular-nums;
        letter-spacing:.02em; margin:6px 0; }
.live-score { font-size:24px; }
.live-score b { font-size:30px; }
.live-controls form { margin-right:6px; }
.event-log { list-style:none; margin:0; padding:0; }
.live-event { display:flex; flex-wrap:wrap; align-items:center; gap:10px;
        padding:8px 0; border-bottom:1px solid var(--line); font-size:14px; }
.le-min { min-width:36px; font-weight:700; color:var(--mut); }
.le-type { min-width:80px; font-weight:600; }
.le-team { color:var(--mut); }
.le-who { flex:1 1 120px; }
body.live-fulltime { background:#fff4d3; }
body.live-fulltime .live-clock { color:#9b1c1c; }
.live-event-actions { display:flex; gap:6px; }
.live-undo { margin:8px 0; }

/* Julkinen ilmoittautuminen + jaetut lomakehookit (ChatGPT-toive) */
.registration-panel { border:1px solid var(--line); border-radius:10px;
        padding:12px 14px; background:#fff; }
.registration-status { font-size:13px; font-weight:600; }
.scheduler-inputs .si-list { margin:6px 0 12px; padding-left:20px;
        font-size:13px; line-height:1.6; }
.scheduler-inputs .si-warn { color:#b00020; font-weight:600; }
.scheduler-inputs.is-warning { border-left:3px solid #b00020; }
.scheduler-inputs.is-blocked { border-left:3px solid var(--mut); }
.scheduler-inputs.is-ready { border-left:3px solid #16643a; }
.schedule-promise-row.is-warning td { color:#b00020; }
.schedule-promise-row.is-empty td { color:var(--mut); }
/* Onboarding setup-card — neutraalit oletukset (custom.css viimeistelee). */
.setup-card .setup-head { display:flex; justify-content:space-between;
        align-items:center; gap:12px; flex-wrap:wrap; }
.setup-card.is-blocked { border-left:3px solid #b00020; }
.setup-card.is-todo { border-left:3px solid var(--mut); }
.setup-card.is-ready { border-left:3px solid #16643a; }
.setup-progress { display:flex; align-items:center; gap:8px; }
.setup-progress-bar { width:160px; height:8px; border-radius:6px;
        background:#e7e7e7; overflow:hidden; }
.setup-progress-fill { height:100%; background:#16643a; }
.setup-progress-label { font-size:12px; color:var(--mut); font-weight:600; }
.setup-checklist { list-style:none; margin:10px 0 0; padding:0; }
.setup-step { display:flex; gap:10px; align-items:baseline;
        padding:6px 0; border-top:1px solid var(--line); }
.setup-step-mark { width:1.2em; text-align:center; color:var(--mut); }
.setup-step.is-done .setup-step-mark { color:#16643a; }
.setup-step.is-blocked .setup-step-mark { color:#b00020; font-weight:800; }
.setup-step.is-current { font-weight:600; }
.setup-step-body { flex:1; display:flex; flex-direction:column; gap:2px; }
.setup-step-copy { font-size:12px; font-weight:400; }
.setup-step.is-done .setup-step-title { color:var(--mut); }
.setup-step.is-optional .setup-step-title { font-weight:400; }
.setup-step-cta { white-space:nowrap; font-size:13px; }
.empty-state { text-align:center; padding:20px; color:var(--mut); }
.empty-state-title { font-weight:700; color:var(--fg); margin-bottom:4px; }
.empty-state-actions { margin-top:10px; }
/* Julkinen ilmoittautuminen — neutraalit oletukset (custom.css viimeistelee) */
.public-register-cta { text-align:center; }
.public-register-actions { display:flex; gap:10px; justify-content:center;
        flex-wrap:wrap; margin-top:8px; }
.series-list-compact { display:flex; flex-direction:column; gap:6px;
        margin:10px 0 16px; }
.series-row { display:flex; gap:12px; align-items:center; flex-wrap:wrap;
        padding:10px 12px; border:1px solid var(--line); border-radius:8px;
        background:#fff; }
.series-row-main { flex:1; min-width:160px; }
.series-row.is-full { border-left:3px solid #b06a00; }
.series-row.is-closed { opacity:.7; }
.series-row.is-open { border-left:3px solid #16643a; }
.series-fee, .series-capacity, .series-status { font-size:13px;
        color:var(--mut); }
.series-register-link { white-space:nowrap; font-weight:600; }
.register-shell { max-width:680px; margin:0 auto; }
.register-hero { margin:8px 0 16px; }
.register-series-picker { display:flex; gap:8px; flex-wrap:wrap;
        margin:10px 0; }
.register-series-option { padding:6px 10px; border:1px solid var(--line);
        border-radius:999px; font-size:13px; }
.register-series-option.is-selected { border-color:#16643a;
        font-weight:700; }
.register-summary { margin:12px 0 4px; }
.register-status { padding:10px 12px; border-radius:8px; font-size:13px;
        margin:8px 0 14px; background:#f4f4f4; }
.register-status.is-open { background:#e8f3ec; }
.register-status.is-waitlist { background:#fbf0df; }
.register-status.is-closed { background:#f1f1f1; }
.register-form-grid { display:grid;
        grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:10px; }
.register-consent { margin:12px 0; }
.register-submit-row { display:flex; gap:10px; align-items:center;
        flex-wrap:wrap; margin-top:6px; }
.register-help { font-size:12px; color:var(--mut); margin:6px 0; }
/* Ajastamatta jääneet (P1.3) — neutraalit oletukset */
.unscheduled-reasons { border-left:3px solid #b06a00; }
.unscheduled-reasons .ur-summary { list-style:none; margin:6px 0 10px;
        padding:0; display:flex; flex-direction:column; gap:2px;
        font-size:13px; }
.unscheduled-reasons .ur-reason b { color:#b06a00; }
/* Testaajan palaute (TESTAAJAN-PALAUTE-SPEC) — neutraalit oletukset */
.feedback-link { font-size:13px; }
.public-feedback { text-align:center; margin:14px 0 4px; }
.feedback-form .feedback-field { margin:8px 0; }
.feedback-form textarea { width:100%; }
.feedback-success { margin:10px 0; }
.feedback-list .feedback-item.is-blocker td { font-weight:600; }
.feedback-list .feedback-item.is-blocker { border-left:3px solid #b00020; }
.feedback-list .feedback-meta { font-size:12px; color:var(--mut);
        white-space:nowrap; }
/* AutoSchedule P1 esikatselu/diff — neutraalit oletukset */
.schedule-preview.is-clean { border-left:3px solid #16643a; }
.schedule-preview.is-warning { border-left:3px solid #b06a00; }
.schedule-preview.is-blocked { border-left:3px solid #b00020; }
.schedule-preview-stats { display:flex; gap:14px; flex-wrap:wrap;
        font-size:13px; margin:8px 0 12px; }
.schedule-preview-stat.is-ok b { color:#16643a; }
.schedule-preview-stat.is-warning b { color:#b06a00; }
.schedule-preview-stat.is-blocked b { color:#b00020; }
.schedule-preview-actions { display:flex; gap:10px; align-items:center;
        flex-wrap:wrap; margin-top:10px; }
.schedule-diff-table { width:100%; font-size:13px; }
.schedule-diff-row.is-violation td,
.schedule-diff-row.is-unscheduled td { color:#b00020; }
.schedule-diff-row.is-moved td { color:#b06a00; }
.schedule-diff-row.is-new td { color:#16643a; }
.schedule-diff-row.is-unchanged td { color:var(--mut); }
.schedule-diff-row.is-locked td { color:#5a3da0; }
.autoschedule-preview-button { font-weight:600; }
/* Lukitut ottelut (P1.2) — neutraalit oletukset */
.match-lock-toggle.is-locked { color:#5a3da0; font-weight:600; }
.match-lock-toggle.is-disabled { color:var(--mut); }
.locked-match-badge { font-size:12px; color:#5a3da0; font-weight:600; }
tr.match-row.is-locked td { background:#f4f1fb; }
.lock-bulk-actions { display:flex; gap:10px; flex-wrap:wrap;
        font-size:13px; margin:6px 0; }
.autoschedule-mode { display:flex; gap:8px; flex-wrap:wrap; margin:6px 0; }
.autoschedule-mode-option.is-selected { font-weight:700; }
.autoschedule-mode-option.is-pro { color:var(--mut); }
/* Infra-kapasiteetti (A) — neutraalit oletukset */
.capacity-budget.is-blocked { border-left:3px solid #b00020; }
.capacity-budget.is-warning { border-left:3px solid #b06a00; }
.capacity-budget.is-ok { border-left:3px solid #16643a; }
.capacity-budget .cb-line { margin:4px 0; }
.capacity-budget .cb-list { margin:4px 0 0 0; padding-left:20px;
        font-size:13px; color:var(--mut); }
.capacity-budget .cb-msg { font-weight:600; margin-top:6px; }
.capacity-budget.is-blocked .cb-msg { color:#b00020; }
.capacity-budget.is-warning .cb-msg { color:#b06a00; }
/* Kentät: osoite + seuran kenttäkirjasto (C) */
.venue-list { list-style:none; margin:0; padding:0; }
.venue-list li { padding:6px 0; border-top:1px solid var(--line); }
.venue-address { font-size:13px; color:var(--mut); margin:2px 0; }
.venue-addr-form { margin-top:4px; }
.venue-registry-list { list-style:none; margin:8px 0 0; padding:0; }
.venue-registry-list li { padding:6px 0; border-top:1px solid var(--line);
        display:flex; gap:8px; align-items:baseline; flex-wrap:wrap; }
/* Turnauksen säännöt — säilytä rivinvaihdot/kappaleet (neutraali oletus) */
.public-rules .rules-body { white-space:pre-wrap; font-size:14px;
        line-height:1.55; }
.register-rules-link { margin-top:6px; font-weight:600; }
.checkbox-line { display:flex; flex-direction:row; gap:8px;
        align-items:center; font-size:13px; }
.checkbox-line input { width:auto; min-height:0; }
.input-short { width:80px; } .input-medium { width:140px; }
.form-submit-row { margin-top:12px; }
.table-scroll, .plan-grid-scroll { overflow:auto; }

/* Julkinen mikrosivusto (ChatGPTn tapahtumasivu-hookit) */
.public-shell { display:block; }
.public-brand { display:block; }
.public-hero-media { margin:0 0 14px; border-radius:12px; overflow:hidden; }
.public-hero-media img { display:block; width:100%; height:auto;
        max-height:340px; object-fit:cover; }
.public-hero .hero-text { font-size:18px; color:var(--mut); margin:4px 0 8px;
        max-width:60ch; }
.hero-cta { display:flex; flex-wrap:wrap; gap:10px; margin:12px 0; }
.hero-btn { display:inline-block; padding:9px 18px; border-radius:8px;
        background:var(--accent); color:#fff; font-weight:600; }
.hero-btn:hover { filter:brightness(1.08); text-decoration:none; }
.hero-btn.ghost { background:#fff; color:var(--fg);
        border:1px solid var(--line); }
.public-nav { display:flex; flex-wrap:wrap; gap:6px; margin:0 0 16px;
        position:sticky; top:0; background:var(--bg); padding:8px 0; z-index:40; }
.public-nav a { font-size:14px; padding:6px 14px; border-radius:999px;
        border:1px solid var(--line); color:var(--fg); }
.public-nav a:hover { border-color:var(--accent); color:var(--accent);
        text-decoration:none; }
.public-intro { font-size:16px; }
.series-section, .info-section, .venue-section { margin:18px 0; }
.info-grid, .venue-grid { display:grid; gap:14px;
        grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); margin:10px 0; }
.info-card, .venue-card { background:#fff; border:1px solid var(--line);
        border-radius:10px; padding:14px 16px; }
.info-card h3, .venue-card h3 { margin:0 0 6px; font-size:15px; }
.sponsor-strip { display:flex; flex-wrap:wrap; gap:16px; align-items:center;
        margin:18px 0; }
.sponsor-item { opacity:.85; }
.sponsor-item img { max-height:46px; width:auto; }

/* Turnauspäivän komentokeskus (ops) */
.ops-grid { display:grid; gap:14px;
        grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); margin:14px 0; }
.ops-card { background:#fff; border:1px solid var(--line);
        border-radius:10px; padding:14px 16px; }
.ops-card h2 { margin-top:0; font-size:16px; }
.ops-match { padding:8px 0; border-bottom:1px solid var(--line);
        font-size:14px; display:flex; gap:10px; align-items:baseline; }
.ops-match:last-child { border-bottom:0; }
.ops-match.status-overdue { color:#9b1c1c; }
.ops-clock { font-weight:800; font-variant-numeric:tabular-nums;
        min-width:54px; }
.ops-venue-grid { display:grid; gap:10px;
        grid-template-columns:repeat(auto-fit,minmax(160px,1fr)); }
.ops-venue { border:1px solid var(--line); border-radius:8px; padding:10px; }
.ops-venue h3 { margin:0 0 6px; font-size:14px; }
.ops-ref-list { list-style:none; margin:0; padding:0; }
.ops-ref { padding:6px 0; border-bottom:1px solid var(--line); font-size:14px; }
.ops-alert { margin:14px 0; padding:12px 16px; border-radius:10px; }
.ops-alert.ok { background:var(--ok-soft,#e7f6ec); }
.ops-alert.err { background:#fde8e8; border:1px solid #f5b5b5; }
.ops-alert ul { margin:6px 0 0; padding-left:20px; }

/* Julkaisuvalmius-mittari */
.readiness-list { list-style:none; margin:8px 0 0; padding:0;
        display:grid; gap:6px;
        grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); }
.readiness-item { display:flex; gap:8px; align-items:baseline;
        font-size:14px; }
.readiness-item.is-ok .ri-mark { color:#16643a; font-weight:800; }
.readiness-item.is-todo .ri-mark { color:var(--mut); }
.readiness-item.is-todo .ri-label { color:var(--mut); }
.ri-hint { font-size:12px; }

/* Joukkueen "Seuraava ottelu" -hero */
.next-match { background:var(--accent); color:#fff; border-radius:12px;
        padding:16px 18px; margin:12px 0; }
.next-match.nm-empty { background:#fff; color:var(--fg);
        border:1px solid var(--line); }
.nm-label { font-size:12px; text-transform:uppercase; letter-spacing:.05em;
        opacity:.85; }
.nm-opponent { font-size:24px; font-weight:800; margin:4px 0; }
.nm-meta { font-size:15px; opacity:.95; }
.nm-cal { display:inline-block; margin-top:10px; background:#fff;
        color:var(--accent); padding:7px 14px; border-radius:8px;
        font-weight:600; }
.nm-cal:hover { text-decoration:none; filter:brightness(1.05); }

/* Julkisen sarjakortin tiivistys (Mikael-palaute: sivu oli sekava) */
.series-summary h2 { margin:0 0 2px; }
.series-next { list-style:none; margin:8px 0; padding:0;
        display:grid; gap:4px; }
.series-next li { font-size:14px; padding:6px 10px; border:1px solid var(--line);
        border-radius:7px; background:#fff; }
.sn-time { font-weight:700; font-variant-numeric:tabular-nums;
        margin-right:6px; }
.series-details { margin:8px 0; border-top:1px solid var(--line);
        padding-top:6px; }
.series-details > summary { cursor:pointer; font-weight:600; font-size:14px;
        padding:6px 0; list-style:none; }
.series-details > summary::-webkit-details-marker { display:none; }
.series-details > summary::before { content:'▸ '; color:var(--mut); }
.series-details[open] > summary::before { content:'▾ '; }
.series-details[open] > summary { color:var(--accent); }
.team-chips { list-style:none; display:flex; flex-wrap:wrap; gap:6px;
        margin:6px 0 0; padding:0; }
.team-chips li { font-size:13px; padding:4px 10px; border-radius:999px;
        background:var(--bg); border:1px solid var(--line); }

/* Alustan pääkäyttäjänäkymä (/admin) */
.ud-admin { font-weight:600; padding:4px 10px; border-radius:7px;
        border:1px solid var(--accent); color:var(--accent); }
.ud-admin:hover { background:var(--accent); color:#fff; text-decoration:none; }
.sysadmin-list { display:grid; gap:14px; }
.sysadmin-org h2 { margin:0 0 2px; font-size:17px; }
.sysadmin-org .admin-table { margin-top:8px; }
.admin-list { list-style:none; margin:8px 0; padding:0; display:grid;
        gap:6px; }
.admin-list li { display:flex; flex-wrap:wrap; align-items:center; gap:8px;
        font-size:14px; padding:6px 0; border-bottom:1px solid var(--line); }

/* Julkisen sivun lisäsisällöt (ChatGPT-spec; custom.css hienosäätää) */
.news-section, .faq-section, .arrival-section, .sponsor-section {
        margin:18px 0; }
.news-list { display:grid; gap:12px;
        grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); }
.news-card { background:#fff; border:1px solid var(--line);
        border-radius:10px; padding:14px 16px; }
.news-card time { font-size:12px; color:var(--mut); }
.news-card h3 { margin:4px 0 6px; font-size:15px; }
.faq-list { display:grid; gap:6px; }
.faq-item { background:#fff; border:1px solid var(--line);
        border-radius:8px; padding:4px 12px; }
.faq-item > summary { cursor:pointer; font-weight:600; padding:8px 0;
        list-style:none; }
.faq-item > summary::-webkit-details-marker { display:none; }
.faq-item > summary::before { content:'▸ '; color:var(--mut); }
.faq-item[open] > summary::before { content:'▾ '; }
.arrival-grid { display:grid; gap:12px;
        grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); }
.arrival-card { background:#fff; border:1px solid var(--line);
        border-radius:10px; padding:14px 16px; }
.arrival-card h3 { margin:0 0 6px; font-size:15px; }
@media (min-width:900px) {
  .admin-shell { display:grid; grid-template-columns:200px 1fr; gap:28px;
        align-items:start; }
  .side-nav { position:sticky; top:64px; margin:0; padding:0; border:0; }
  .side-nav-list { flex-direction:column; gap:6px; }
}

/* Suunnitteluruudukko: klikattava kenttä + KO-paikanvaraajat */
.grid-venue-link { color:var(--fg); text-decoration:none;
        border-bottom:1px dotted var(--line); }
.grid-venue-link:hover { color:var(--accent); }
.slot { font-size:12px; }
.slot-stage { color:#555; font-size:11px; }
.slot-ko { border-left:2px solid var(--accent); padding-left:4px; }
/* Kenttä-/joukkuekohtainen otteluohjelma */
.venue-title { font-size:20px; }
.venue-schedule table, .team-schedule table { width:100%; }
.public-team { max-width:760px; margin:0 auto; padding:16px; }
.team-chip-link { color:var(--fg); text-decoration:none; }
.team-chip-link:hover { color:var(--accent); text-decoration:underline; }
/* Pelaajalistat (roster) */
.roster-grid { display:grid; gap:14px;
        grid-template-columns:repeat(auto-fill,minmax(220px,1fr)); }
.roster-team h3 { margin:0 0 6px; font-size:14px; }
.roster-players { margin:0; padding-left:20px; font-size:13px; }
.roster-series { break-inside:avoid; }
@media print {
  .site-top, .side-nav, .module-tabs, .crumbs, .user-dock { display:none; }
  .admin-shell { display:block; }
  .roster-series { box-shadow:none; border:1px solid #ccc; }
}

/* Audit-loki — neutraalit oletukset */
.audit-log table { width:100%; font-size:13px; }
.audit-when { white-space:nowrap; color:#555; font-variant-numeric:tabular-nums; }
.audit-actor { color:#334; }
.audit-action { font-weight:600; }
.audit-detail { color:#555; }
/* Ilmoitusjono — neutraalit oletukset */
.notif-log table { width:100%; font-size:13px; }
.notif-when { white-space:nowrap; color:#555; font-variant-numeric:tabular-nums; }
.notif-to { color:#334; }
.notif-detail { color:#777; }
.notif-row.notif-failed .notif-status { font-weight:600; }
/* Rooli-UI (ROOLI-UI-JA-OIKEUSRAJAT-SPEC) — neutraalit oletukset.
   Turva on palvelimen RBAC:lla; nämä vain selittävät. ChatGPT:n
   custom.css päättää piilotus/gate-ilmeen (esim. body.role-organizer
   .requires-admin { display:none }). EI sokkopiiloteta tässä. */
.role-readonly-banner { background:#e6eefc; color:#1e3a8a;
        border-radius:8px; padding:8px 12px; margin:0 0 12px;
        font-size:13px; }
.role-readonly-banner.is-support { background:#fdf2d6; color:#7a5300; }
.role-gate { border:1px dashed var(--line); border-radius:8px;
        padding:12px 14px; margin:8px 0; color:#555; }
.role-gate-note { font-size:13px; color:#777; }
.action-restricted { opacity:.55; }
/* Paketointi / feature-gate (PAKETOINTI-SPEC) — neutraalit oletukset */
.plan-matrix { display:grid; gap:14px; margin:14px 0;
        grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); }
.plan-card { border:1px solid var(--line); border-radius:10px;
        padding:16px; background:#fff; }
.plan-card.is-current { border-color:var(--accent); }
.plan-card.is-featured { box-shadow:0 0 0 2px var(--accent) inset; }
.plan-name { font-size:18px; font-weight:700; }
.plan-price { color:#555; margin:2px 0 8px; }
.plan-promise { font-size:13px; color:#334; margin-bottom:8px; }
.plan-features { margin:0; padding-left:18px; font-size:13px; }
.plan-cta { margin-top:10px; font-size:13px; color:#555; }
.feature-gate { margin:12px 0; }
.feature-gate.is-hard .upgrade-card { border-style:solid; }
.upgrade-card { border:1px dashed var(--line); border-radius:10px;
        padding:14px 16px; background:#f8f9fc; }
.feature-lock { font-size:18px; }
.upgrade-title { font-weight:700; margin:4px 0; }
.upgrade-copy { font-size:13px; color:#555; margin:0 0 8px; }
.upgrade-actions .plan-cta { display:inline-block; font-weight:600;
        color:var(--accent); }
.quota-meter { height:8px; background:#eef; border-radius:999px;
        overflow:hidden; }
.quota-meter-fill { height:100%; background:var(--accent); }
.quota-label { font-size:12px; color:#555; }
.plan-calc table { width:100%; font-size:13px; }
/* Julkisen sivun vapaatekstilohkot — omat hookit (C2-QA-pyyntö), jotta
   ChatGPT:n custom.css voi järjestää/tyylitellä ilman geneeristä
   lapsiselektoria. Neutraali oletus; varsinainen ilme custom.css:ssä. */
.public-list-text { color:#444; }
.public-footer-text { font-size:13px; }
/* PRO Display / TV (PRO-DISPLAY-TV-SPEC) — neutraali toiminnallinen oletus.
   ChatGPT tekee varsinaisen tumman/iso-fonttisen TV-teeman custom.css:ssä. */
body.page-display .site-top, body.page-display .site-foot { display:none; }
body.page-display .site-main { max-width:none; padding:16px; }
.display-shell { display:flex; flex-direction:column; gap:14px; }
.display-topbar { display:flex; align-items:baseline; gap:18px;
        flex-wrap:wrap; border-bottom:2px solid var(--line);
        padding-bottom:8px; }
.display-brand { font-size:24px; font-weight:800; flex:1; }
.display-clock { font-size:28px; font-weight:800;
        font-variant-numeric:tabular-nums; }
.display-updated { font-size:13px; color:#555; }
.display-grid { display:grid; gap:16px;
        grid-template-columns:repeat(auto-fit,minmax(260px,1fr)); }
.display-panel { border:1px solid var(--line); border-radius:10px;
        padding:12px 14px; }
.display-panel-title { font-size:13px; text-transform:uppercase;
        letter-spacing:.06em; color:#555; margin-bottom:8px; }
.display-match { display:grid; grid-template-columns:1fr auto 1fr;
        gap:8px; align-items:center; padding:8px 0;
        border-bottom:1px solid var(--line); }
.display-match:last-child { border-bottom:0; }
.display-match .display-meta { grid-column:1 / -1; font-size:12px;
        color:#666; }
.display-team { font-weight:700; }
.display-score { font-weight:800; font-variant-numeric:tabular-nums; }
.display-match.is-live { border-left:3px solid #0f6848; padding-left:6px; }
.display-match.is-next { opacity:.9; }
.display-empty { color:#777; }
.display-field-strip { display:flex; flex-wrap:wrap; gap:10px;
        font-size:13px; }
.display-field { border:1px solid var(--line); border-radius:8px;
        padding:6px 10px; }
.display-sponsor-rail { display:flex; flex-wrap:wrap; gap:18px;
        align-items:center; padding:10px 0; }
.display-sponsor img { max-height:42px; }
.display-qr { font-size:14px; color:#334; }
.display-ticker { font-size:12px; color:#777;
        border-top:1px solid var(--line); padding-top:6px; }
.display-locked { text-align:center; padding:40px 16px; }
/* Konfliktikeskus (PRO-KONFLIKTIKESKUS-SPEC) — neutraalit oletukset */
.conflict-header { display:flex; flex-wrap:wrap; align-items:baseline;
        gap:12px; }
.conflict-summary { display:flex; gap:8px; flex-wrap:wrap; }
.conflict-stat { font-size:12px; padding:2px 8px; border-radius:999px;
        background:#eef; }
.conflict-stat.severity-critical { background:#fde8e8; color:#9b1c1c; }
.conflict-stat.severity-warning { background:#fff4d3; color:#7a5300; }
.conflict-stat.severity-info { background:#e6eefc; color:#1e3a8a; }
.conflict-readiness .is-ok { color:#16643a; font-weight:600; }
.conflict-readiness .is-blocked { color:#9b1c1c; font-weight:600; }
.conflict-list { display:flex; flex-direction:column; gap:10px;
        margin-top:10px; }
.conflict-card { border:1px solid var(--line); border-left:4px solid #ccc;
        border-radius:8px; padding:10px 12px; }
.conflict-card.severity-critical { border-left-color:#9b1c1c; }
.conflict-card.severity-warning { border-left-color:#b8860b; }
.conflict-card.severity-info { border-left-color:#1e3a8a; }
.conflict-severity { font-size:11px; text-transform:uppercase;
        letter-spacing:.05em; color:#666; }
.conflict-title { font-weight:700; }
.conflict-description { margin:4px 0; }
.conflict-meta, .conflict-suggestion { font-size:13px; color:#555; }
.conflict-suggestion { font-style:italic; }
.conflict-actions { margin-top:6px; font-size:13px; }
.conflict-empty { color:#16643a; }
.conflict-basic { list-style:none; padding:0; }
.conflict-check.is-ok { color:#16643a; }
.conflict-check.is-todo { color:#9b1c1c; }
