/* Jotos – styles. Based on the demo (docs/demo). No inline styles anywhere (strict CSP). */
:root{
  --bg:#eceee8;--surface:#ffffff;--surface2:#f5f6f2;--ink:#1a201b;--muted:#5b655c;--line:#d6dbd2;
  --green:#2f5d3a;--green-ink:#ffffff;--green-soft:#e2ece3;
  --flag:#e5631a;--flag-soft:#fdeadf;--flag-ink:#8a3608;
  --danger:#b3261e;--danger-soft:#fbe9e7;--warn:#8a5a00;--warn-soft:#fff2d1;
  --gold:#b98a00;--silver:#7b858c;--bronze:#a4622b;--flash:#fff0a8;
  --radius:10px;--font:"Segoe UI",system-ui,-apple-system,Roboto,"Helvetica Neue",Arial,sans-serif;
  color-scheme:light;
}
[data-theme="dark"]{
  --bg:#0f1410;--surface:#171e18;--surface2:#1e2720;--ink:#e8ede6;--muted:#9aa69b;--line:#2c372e;
  --green:#5fae73;--green-ink:#0b170e;--green-soft:#1d3323;
  --flag:#ff8a45;--flag-soft:#3b2214;--flag-ink:#ffc39f;
  --danger:#ff8a80;--danger-soft:#3a1715;--warn:#f0c04a;--warn-soft:#3a2d0c;
  --gold:#e6b93a;--silver:#aab4ba;--bronze:#d08a4f;--flash:#4a4413;
  color-scheme:dark;
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);font-size:16px;line-height:1.5}
:root{padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}
button,input,select{font:inherit;color:inherit}
h1,h2,h3{line-height:1.2;margin:0}
.num{font-variant-numeric:tabular-nums}
a{color:var(--green)}
:focus-visible{outline:3px solid var(--flag);outline-offset:2px}

/* Painikkeet ja kentät */
.btn{min-height:44px;padding:0 16px;border-radius:var(--radius);border:1px solid var(--line);background:var(--surface);cursor:pointer;font-weight:600;white-space:nowrap}
.btn:hover:not(:disabled){border-color:var(--muted)}
.btn:disabled{opacity:.38;cursor:not-allowed}
.btn.primary{background:var(--green);border-color:var(--green);color:var(--green-ink)}
.btn.danger{background:var(--danger);border-color:var(--danger);color:#fff}
[data-theme="dark"] .btn.danger{color:#1a0705}
.btn.ghost{background:transparent;border-color:transparent}
.btn.small{min-height:36px;padding:0 12px;font-size:14px}
input[type=text],input[type=password],input[type=time],input[type=date],input[type=number],select{min-height:44px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);padding:0 12px;width:100%}
label.f{display:block;font-size:14px;font-weight:600;margin:12px 0 4px}
.hint{font-size:14px;color:var(--muted)}
.err{color:var(--danger);font-size:14px;min-height:0}

/* Yläpalkki */
header.top{background:var(--surface);border-bottom:1px solid var(--line);position:sticky;top:env(safe-area-inset-top,0px);z-index:10}
body::before{content:"";position:fixed;inset:0 0 auto;height:env(safe-area-inset-top,0px);background:var(--surface);z-index:10}
.topin{max-width:1180px;margin:0 auto;padding:10px 16px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:18px;margin-right:auto}
.flag{width:22px;height:22px;flex:none;border:1.5px solid var(--flag);border-radius:3px;background:linear-gradient(135deg,var(--flag) 50%,#fff 50%)}
.who{font-size:14px;color:var(--muted)}
.who b{color:var(--ink)}
.demo{font-size:12px;font-weight:700;background:var(--warn-soft);color:var(--warn);padding:2px 8px;border-radius:999px}
nav.tabs{max-width:1180px;margin:0 auto;padding:0 12px;display:flex;gap:4px;overflow-x:auto}
nav.tabs a{padding:10px 12px;text-decoration:none;color:var(--muted);font-weight:600;font-size:15px;border-bottom:3px solid transparent;white-space:nowrap}
nav.tabs a.on{color:var(--ink);border-bottom-color:var(--green)}
main{max-width:1180px;margin:0 auto;padding:20px 16px 60px}
.pagehead{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.pagehead h1{font-size:26px;margin-right:auto}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:16px;margin-bottom:16px}
.notice{border-radius:var(--radius);padding:12px 14px;margin-bottom:16px;background:var(--green-soft)}
.notice.warn{background:var(--warn-soft);color:var(--warn)}
.notice.danger{background:var(--danger-soft);color:var(--danger)}
.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}

/* Taulukot */
.tablewrap{overflow-x:auto;border:1px solid var(--line);border-radius:14px;background:var(--surface)}
table{width:100%;border-collapse:collapse;font-size:15px}
th,td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:middle}
th{font-size:13px;color:var(--muted);font-weight:700;background:var(--surface2)}
tr:last-child td{border-bottom:0}
td.act{white-space:nowrap;text-align:right}
.grid th.gc,.grid td.gc{text-align:center;width:44px;padding:8px 4px}
.grid th.gday{text-align:center;border-left:1px solid var(--line)}
.grid td.gc{font-size:17px;font-weight:800}
.gc.ok,.gl.ok{color:var(--green)}
.grid td.gc.ok{background:var(--green-soft)}
.gc.wait,.gl.wait{color:var(--muted)}
.gc.no,.gl.no{color:var(--danger);opacity:.55}
.grid .gname{white-space:nowrap}
.gl{display:inline-block;width:18px;text-align:center}
.thsort{background:none;border:0;padding:4px 0;font:inherit;color:inherit;font-weight:700;cursor:pointer;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.thsort .ar{font-size:11px;color:var(--muted)}
th[aria-sort] .thsort,th[aria-sort] .thsort .ar{color:var(--ink)}
.fbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:12px}
.fbar input{max-width:280px}
.fchip{min-height:40px;padding:0 14px;border-radius:999px;border:1px solid var(--line);background:var(--surface);cursor:pointer;font-weight:600;color:var(--muted)}
.fchip[aria-pressed="true"]{background:var(--green-soft);border-color:var(--green);color:var(--green)}
.badge{display:inline-block;font-size:12px;font-weight:700;padding:2px 8px;border-radius:999px;background:var(--surface2);color:var(--muted);vertical-align:middle}
.badge.dnf{background:var(--danger-soft);color:var(--danger)}
.badge.dns{background:var(--warn-soft);color:var(--warn)}
.badge.ok{background:var(--green-soft);color:var(--green)}
.dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--muted);margin-right:6px}
.dot.live{background:#2fa34a}

/* Kirjautuminen */
.loginwrap{min-height:100vh;display:grid;place-items:center;padding:24px 16px}
.logincard{width:100%;max-width:440px;background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:28px}
.logincard h1{font-size:28px;display:flex;align-items:center;gap:12px}
.brand .mnl-logo{height:30px;width:auto;flex:none}
.logincard .mnl-logo{height:44px;width:auto;flex:none}
.mnl-text{fill:var(--ink)}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.democ{border:1px dashed var(--line);background:var(--surface2);border-radius:8px;padding:6px 10px;font-size:14px;cursor:pointer}
.democ b{font-weight:700}

/* Toimitsijan rastinäkymä */
.rasti-title{display:flex;align-items:center;gap:14px}
.rasti-title .flag{width:40px;height:40px;border-width:2px}
.rasti-title h1{font-size:30px}
.rasti-sub{color:var(--muted);font-size:15px}
.progress{height:8px;background:var(--surface2);border-radius:99px;overflow:hidden;margin-top:6px}
.progress i{display:block;height:100%;background:var(--green)}
.tlist{display:flex;flex-direction:column;gap:8px}
.trow{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:12px;display:grid;grid-template-columns:64px 56px 1fr 110px auto;gap:10px;align-items:center}
.trow.saved{border-left:6px solid var(--green)}
.trow.editing{border-left:6px solid var(--flag)}
.trow .tt{font-weight:700;font-size:18px}
.trow .tn{font-weight:800;font-size:18px;text-align:center;border:2px solid var(--ink);border-radius:8px;padding:2px 0}
.trow .nm{font-weight:700;font-size:17px;min-width:0}
.trow .nm small{display:block;font-weight:400;color:var(--muted);font-size:13px}
.trow input.pts{font-size:22px;font-weight:800;text-align:center;min-height:52px}
.trow input.pts::placeholder{font-size:16px;font-weight:600;color:var(--muted)}
.trow input.pts:disabled{background:var(--surface2);opacity:1;color:var(--ink)}
.trow .btns{display:flex;gap:6px}
.trow .btns .btn{min-height:52px}
.trow .err{grid-column:1/-1}
.trow .err:empty{display:none}
@media (max-width:760px){
  .trow{grid-template-columns:56px 52px 1fr;}
  .trow input.pts{grid-column:1/-1}
  .trow .btns{grid-column:1/-1}
  .trow .btns .btn{flex:1;padding:0 6px;min-width:0}
}

/* Tulostaulu enduro-tyyliin */
.boardhead{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.boardhead h1{font-size:28px;font-weight:800;margin-right:auto}
.boardhead .meta{font-size:14px;color:var(--muted)}
.seg{display:inline-flex;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:var(--surface)}
.seg button{border:0;background:transparent;padding:0 14px;min-height:40px;cursor:pointer;font-weight:600;color:var(--muted)}
.seg button.on{background:var(--green);color:var(--green-ink)}
.board{background:var(--surface);border:1px solid var(--line);border-radius:16px;overflow:hidden}
.brow{display:grid;grid-template-columns:54px 64px 1fr auto;gap:12px;align-items:start;padding:14px 18px;border-bottom:1px solid var(--line);transition:background 1.2s}
.brow:last-child{border-bottom:0}
.brow.p1{background:linear-gradient(90deg,color-mix(in srgb,var(--gold) 16%,transparent),transparent 45%)}
.brow.p2{background:linear-gradient(90deg,color-mix(in srgb,var(--silver) 16%,transparent),transparent 45%)}
.brow.p3{background:linear-gradient(90deg,color-mix(in srgb,var(--bronze) 16%,transparent),transparent 45%)}
.brow.flash{background:var(--flash);transition:none}
.bpos{font-size:24px;font-weight:800;padding-top:2px}
.p1 .bpos{color:var(--gold)}.p2 .bpos{color:var(--silver)}.p3 .bpos{color:var(--bronze)}
.bnum{font-size:17px;font-weight:800;text-align:center;border:2px solid var(--ink);border-radius:8px;padding:3px 0;background:var(--surface)}
.bname .n{font-size:19px;font-weight:800}
.bname .s{font-size:13px;color:var(--muted)}
.bchips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.chip{display:inline-flex;flex-direction:column;align-items:center;min-width:52px;padding:3px 8px;border-radius:7px;background:var(--surface2);border:1px solid var(--line);font-size:15px;font-weight:700;line-height:1.25}
.chip small{font-size:11px;font-weight:700;color:var(--muted)}
.chip.best{background:var(--flag-soft);border-color:var(--flag);color:var(--flag-ink)}
.chip.best small{color:var(--flag-ink)}
.chip.none{border-style:dashed;color:var(--muted);font-weight:400}
.btot{text-align:right}
.btot .t{font-size:26px;font-weight:800}
.btot .d{font-size:13px;color:var(--muted)}
.brow.out{opacity:.65}
.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:13px;color:var(--muted);margin-top:10px}
.legend .chip{min-width:0;flex-direction:row;padding:0 6px;font-size:12px}
@media (max-width:640px){
  .brow{grid-template-columns:40px 50px 1fr;padding:12px}
  .btot{grid-column:3;text-align:left;display:flex;gap:10px;align-items:baseline}
  .bpos{font-size:20px}
  .bname .n{font-size:17px}
}
body.tv main{max-width:none}
body.tv .bname .n{font-size:24px}
body.tv .btot .t{font-size:34px}
body.tv .bpos{font-size:30px}
body.tv .chip{font-size:18px;min-width:62px}

/* Lähtöjärjestys */
.order{list-style:none;margin:0;padding:0;background:var(--surface);border:1px solid var(--line);border-radius:14px}
.order li{display:grid;grid-template-columns:28px 34px 100px 52px 1fr auto;gap:10px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--line);background:var(--surface);transition:background 1.2s}
.order li:first-child{border-radius:14px 14px 0 0}
.order li:last-child{border-bottom:0;border-radius:0 0 14px 14px}
.order li.flash{background:var(--flash);transition:none}
.order li.editing{background:var(--flag-soft)}
.order li.dragging{position:relative;z-index:5;box-shadow:0 10px 28px rgba(0,0,0,.28);border-radius:10px;transition:none}
.order li.drop-top{box-shadow:inset 0 4px 0 var(--flag)}
.order li.drop-bottom{box-shadow:inset 0 -4px 0 var(--flag)}
.order .otime{font-size:17px}
.order .onum{border:2px solid var(--ink);border-radius:8px;text-align:center}
.order input[type=time]{min-height:38px;padding:0 6px}
.oact{display:flex;gap:6px;justify-content:flex-end;flex-wrap:wrap}
.handle{width:26px;height:38px;cursor:grab;touch-action:none;border-radius:6px;background-image:radial-gradient(circle,var(--muted) 1.6px,transparent 2.1px);background-size:9px 9px;background-position:4px 1px}
.handle:hover{background-color:var(--surface2)}
body.dragging-active,body.dragging-active *{user-select:none;cursor:grabbing!important}
@media (max-width:760px){
  .order li{grid-template-columns:28px 92px 48px 1fr}
  .order .opos{display:none}
  .order .oact{grid-column:1/-1;justify-content:stretch}
  .order .oact .btn{flex:1}
}

/* Modaali ja ilmoitus */
.mback{position:fixed;inset:0;background:rgba(10,14,11,.55);display:grid;place-items:center;padding:16px;z-index:50}
.mbox{background:var(--surface);border-radius:16px;max-width:460px;width:100%;padding:22px;border:1px solid var(--line);max-height:90vh;overflow:auto}
.mbox h2{font-size:21px;margin-bottom:8px}
.mbox p{margin:6px 0 0}
.mact{display:flex;gap:8px;justify-content:flex-end;margin-top:20px;flex-wrap:wrap}
#toast{position:fixed;left:50%;bottom:calc(20px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:12px 18px;border-radius:12px;font-weight:600;z-index:60;opacity:0;pointer-events:none;transition:opacity .2s;max-width:90vw}
#toast.show{opacity:1}
#print{display:none}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
@media print{
  body{background:#fff;color:#000}
  #app,#modal-root,#toast{display:none!important}
  #print{display:block;font-family:var(--font);color:#000}
  #print table{font-size:12px}
  #print th{background:#eee;color:#000}
  #print th,#print td{border-bottom:1px solid #999;padding:5px 6px}
  #print h1{font-size:20px;margin-bottom:4px}
}

/* Additions for the real application */
.hidden{display:none!important}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 12px}
.form-grid .span2{grid-column:1/-1}
@media (max-width:520px){.form-grid{grid-template-columns:1fr}}
.inline-btn{display:flex;gap:8px}
.inline-btn input{flex:1}
.field-err{color:var(--danger);font-size:14px;margin-top:4px}
.form-err{color:var(--danger);font-weight:600;margin-top:12px}
.pwshow{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:22px;font-weight:800;letter-spacing:.05em;background:var(--surface2);border:1px dashed var(--muted);border-radius:var(--radius);padding:12px;text-align:center;user-select:all;margin:12px 0}
.placeholder{text-align:center;padding:48px 16px;color:var(--muted)}
.placeholder h2{color:var(--ink);margin-bottom:8px}
.logwrap td.when{white-space:nowrap}
.logwrap td.who2{white-space:nowrap;font-weight:600}
.empty{padding:24px;text-align:center;color:var(--muted)}
.ver{font-size:12px;color:var(--muted)}
select{appearance:auto}
footer.ver{max-width:1180px;margin:0 auto;padding:0 16px 24px}

/* Phase 2: checkpoint view, connection bar, sync states */
.connbar{max-width:1180px;margin:0 auto;padding:6px 16px;font-size:14px;color:var(--muted);display:flex;align-items:center;flex-wrap:wrap;gap:2px}
.connbar.offline{color:var(--warn);background:var(--warn-soft);border-radius:0 0 var(--radius) var(--radius)}
.connbar b{color:var(--ink)}
.sync{font-weight:600}
.sync.ok{color:var(--green)}
.sync.wait{color:var(--warn)}
.sync.conflict{color:var(--danger)}
.sync.none{color:var(--muted);font-weight:400}
.rownote{grid-column:1/-1;background:var(--danger-soft);color:var(--danger);border-radius:8px;padding:8px 10px;font-weight:600;display:flex;gap:10px;align-items:center;justify-content:space-between;flex-wrap:wrap}
.trow .rownote:empty{display:none}
.trow[data-mode="locked"]{opacity:.85}
.chipbar{margin:10px 0 0}
.rasti-title h1{overflow-wrap:anywhere}
.trow .pts{width:100%}

/* Phase 3: scoreboard, public page, printing */
.boardhead .titlebox{margin-right:auto}
a.btn{display:inline-flex;align-items:center;text-decoration:none;color:var(--ink)}
.linkrow{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:10px}
.linkrow input{flex:1;min-width:220px}
.panel h2{font-size:20px;margin-bottom:6px}
.print-meta{font-size:11px;margin:0 0 10px}
.brow .btot .d{min-height:1em}
@media print{
  @page{size:A4;margin:12mm}
  #print thead{display:table-header-group}
  #print tr{break-inside:avoid}
  #print table{width:100%;border-collapse:collapse}
}

/* Phase 4: start order */
.panelhead{justify-content:space-between;margin-bottom:6px}
.actrow{margin-bottom:12px}
.order .empty{display:block;padding:16px}
.order li.empty{grid-template-columns:1fr}

/* Phase 5 */
input[type=search]{min-height:44px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);padding:0 12px;width:100%}
.dangerzone{border-color:var(--danger)}
.grid .gday{border-left:1px solid var(--line)}
.progress{margin-top:4px;max-width:160px}
