/* Défi Calcul · tableau de score de stade : chrono géant, scène lisible du fond de la classe, jauge collective. */
:root{
  --paper:#F3F6FB; --card:#FFFFFF; --ink:#14223B; --muted:#56627C; --line:#D5DCE9;
  --signal:#F2611D; --go:#178F5A; --stop:#CC3333; --gold:#E9A800;
  --p1:#0C8C99; --p2:#2F63E0; --p3:#8A44D6; --p4:#D2621C; --p5:#14223B;
  --tile:#EAF0F9; --tile-open:#E3F5EC;
  --qa:#2F63E0; --qb:#D2621C; --qc:#178F5A; --qd:#8A44D6;
  --f-display:"Archivo","Arial Black",system-ui,sans-serif;
  --f-body:"Atkinson Hyperlegible","Segoe UI",system-ui,sans-serif;
  color-scheme:light;
}
@media (prefers-color-scheme:dark){:root{
  --paper:#0E1525; --card:#172137; --ink:#EDF2FB; --muted:#9BA7C0; --line:#2A3756;
  --signal:#FF8247; --go:#3CC98A; --stop:#FF6E6E; --gold:#FFD04A;
  --p1:#2FC1CF; --p2:#6E94FF; --p3:#B884FF; --p4:#FF9550; --p5:#EDF2FB;
  --tile:#1D2942; --tile-open:#173A2C; color-scheme:dark}}
*{box-sizing:border-box}
html,body{margin:0;min-height:100%}
body{background:var(--paper);color:var(--ink);font-family:var(--f-body);font-size:clamp(15px,1.2vw,21px);line-height:1.45}
[hidden]{display:none!important}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible{outline:3px solid var(--signal);outline-offset:2px}
a{color:var(--p2)}
h1,h2,h3{text-wrap:balance;margin:0}
.disp{font-family:var(--f-display);font-stretch:125%;font-weight:850;letter-spacing:-.01em}
.num{font-variant-numeric:tabular-nums}
.eyebrow{font-family:var(--f-display);font-stretch:110%;font-weight:700;font-size:.72em;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.small{font-size:.85em;color:var(--muted)}
.wrap{padding-inline:max(16px,3vw);padding-block:20px 60px;max-width:1500px;margin:0 auto}
.up{color:var(--go)} .down{color:var(--stop)}

/* boutons, champs */
.btn{background:var(--ink);color:var(--paper);border:0;border-radius:12px;padding:11px 18px;font-weight:700;display:inline-flex;align-items:center;gap:8px;text-decoration:none}
.btn.ghost{background:transparent;color:var(--ink);border:2px solid var(--line)}
.btn.go{background:var(--go);color:#fff}
.btn.warn{background:var(--stop);color:#fff}
.btn.gold{background:var(--gold);color:#1a1a1a}
.btn.sm{padding:6px 12px;font-size:.85em;border-radius:9px}
.btn:disabled{opacity:.35;cursor:default}
.row{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.field{display:flex;flex-direction:column;gap:4px;font-size:.9em}
.field input,.field select,.field textarea,input.in,select.in,textarea.in{padding:9px 11px;border:1.5px solid var(--line);border-radius:10px;background:var(--card);min-width:0}
textarea.in{width:100%;min-height:160px;font-family:ui-monospace,Consolas,monospace;font-size:.9em}
.msg{min-height:1.4em;font-weight:700}
.msg.err{color:var(--stop)} .msg.ok{color:var(--go)}
.panel{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px clamp(14px,2vw,24px)}

/* barre du haut (prof) */
.appbar{position:sticky;top:0;z-index:10;background:var(--card);border-bottom:1px solid var(--line);display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;padding:10px max(16px,2vw)}
.appbar .brand{font-family:var(--f-display);font-stretch:125%;font-weight:900;font-size:1.25em;text-decoration:none;color:var(--ink);margin-right:auto}
.appbar nav{display:flex;flex-wrap:wrap;gap:6px}
.appbar nav a{padding:6px 12px;border-radius:9px;text-decoration:none;color:var(--ink);font-weight:700;font-size:.9em}
.appbar nav a.on{background:var(--tile)}

/* login */
.login{max-width:420px;margin:10vh auto;display:grid;gap:14px}
.login h1{font-size:2.6em}

/* accueil */
.classes{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));gap:16px;margin-top:18px}
.ccard{text-align:left;background:var(--card);border:1px solid var(--line);border-radius:18px;padding:18px 20px;display:grid;gap:10px;transition:transform .15s,border-color .15s}
.ccard:hover{transform:translateY(-2px);border-color:var(--signal)}
.ccard .nm{font-family:var(--f-display);font-stretch:125%;font-weight:900;font-size:1.8em;line-height:1}
.ccard .lv{font-size:.8em;color:var(--muted)}
.mini{height:12px;border-radius:6px;background:var(--tile);overflow:hidden}
.mini i{display:block;height:100%;background:var(--gold)}
.rank{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.rank li{display:grid;grid-template-columns:2em 1fr auto;gap:10px;align-items:center;padding:8px 12px;border-radius:10px;background:var(--tile);font-variant-numeric:tabular-nums}
.rank li b:first-child{font-family:var(--f-display);font-weight:900;color:var(--signal)}

/* jauge */
.gauge{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:22px clamp(16px,2vw,28px);margin:18px 0 22px}
.gauge-top{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px 20px}
.gauge-total{font-size:clamp(2.4rem,6vw,5rem);line-height:.9}
.gauge-total small{font-size:.32em;color:var(--muted);font-family:var(--f-body);font-weight:400;font-stretch:100%}
.bar{position:relative;height:46px;border-radius:12px;background:var(--tile);margin:22px 0 30px}
.bar-fill{position:absolute;inset:0 auto 0 0;border-radius:12px;background:repeating-linear-gradient(135deg,var(--gold) 0 18px,color-mix(in srgb,var(--gold) 82%,var(--signal)) 18px 36px);transition:width .8s cubic-bezier(.2,.8,.2,1)}
.mark{position:absolute;top:-6px;bottom:-6px;width:3px;background:var(--ink);border-radius:2px}
.mark span{position:absolute;top:calc(100% + 6px);left:50%;transform:translateX(-50%);white-space:nowrap;font-size:.78em;font-weight:700}
.mark.reached span{color:var(--go)}

/* onglets */
.tabs{display:flex;flex-wrap:wrap;gap:6px;border-bottom:2px solid var(--line);margin-bottom:18px}
.tabs button{background:none;border:0;padding:10px 14px;font-weight:700;color:var(--muted);border-bottom:3px solid transparent;margin-bottom:-2px}
.tabs button.on{color:var(--ink);border-color:var(--signal)}

/* séances */
.paliers{display:grid;gap:18px}
.palier{display:grid;grid-template-columns:minmax(150px,220px) 1fr;gap:14px;align-items:start}
.palier-name{padding-top:8px}
.palier-name b{display:block;font-family:var(--f-display);font-stretch:115%;font-size:1.1em}
.palier-name span{color:var(--muted);font-size:.85em}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px}
.scard{text-align:left;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 16px 14px 18px;display:grid;grid-template-columns:auto 1fr auto;gap:4px 14px;align-items:center;transition:transform .15s,border-color .15s}
.scard:hover{transform:translateY(-2px);border-color:var(--c)}
.scard .n{grid-row:span 2;font-family:var(--f-display);font-stretch:125%;font-weight:900;font-size:2.2em;color:var(--c);line-height:1}
.scard .t{font-weight:700;line-height:1.2}
.scard .m{font-size:.8em;color:var(--muted)}
.scard .pts{grid-row:span 2;font-family:var(--f-display);font-weight:800;font-size:.95em;color:var(--go);text-align:right}
.scard .pts.none{color:var(--line)}
.phone-chip{display:inline-block;font-size:.72em;font-weight:700;color:var(--signal);border:1.5px solid currentColor;border-radius:999px;padding:0 7px;margin-left:4px}
@media (max-width:700px){.palier{grid-template-columns:1fr}}

/* tableaux */
.tw{overflow-x:auto;margin:1em 0}
table.data{border-collapse:collapse;width:100%;font-variant-numeric:tabular-nums;background:var(--card);border-radius:12px;overflow:hidden}
table.data th,table.data td{padding:9px 12px;border-bottom:1px solid var(--line);text-align:right;white-space:nowrap}
table.data th:first-child,table.data td:first-child{text-align:left}
table.data thead th{background:var(--ink);color:var(--paper);font-weight:700;font-size:.85em}
table.data tr.tot td{font-weight:700;background:var(--tile)}
table.edit td{text-align:left;white-space:normal;vertical-align:top}
.cell{display:inline-block;min-width:3.2em;padding:3px 8px;border-radius:8px;font-weight:700;text-align:center}
.cell.g{background:color-mix(in srgb,var(--go) 18%,transparent);color:var(--go)}
.cell.m{background:color-mix(in srgb,var(--gold) 22%,transparent)}
.cell.b{background:color-mix(in srgb,var(--stop) 15%,transparent);color:var(--stop)}
.pin{font-family:ui-monospace,Consolas,monospace;font-weight:700;letter-spacing:.15em}

/* séance TNI */
.top{position:sticky;top:0;z-index:5;background:var(--card);border-bottom:1px solid var(--line);display:flex;flex-wrap:wrap;align-items:center;gap:10px 18px;padding:10px max(16px,2vw)}
.back{border:1px solid var(--line);background:var(--paper);border-radius:10px;padding:8px 14px;font-weight:700}
.stitle{flex:1 1 260px;min-width:0}
.stitle .disp{font-size:clamp(1.1rem,2vw,1.8rem);line-height:1.05}
.badge{display:inline-flex;align-items:center;gap:6px;font-size:.78em;font-weight:700;padding:4px 10px;border-radius:999px;border:1.5px solid currentColor}
.badge.no{color:var(--stop)} .badge.yes{color:var(--go)} .badge.half{color:var(--signal)}
.timer{display:flex;align-items:center;gap:8px;background:var(--ink);color:var(--paper);border-radius:14px;padding:6px 8px 6px 18px}
.timer .clock{font-family:var(--f-display);font-stretch:125%;font-weight:900;font-size:clamp(2rem,4.2vw,3.6rem);line-height:1;min-width:3.9ch;text-align:center}
.timer.warn .clock{color:var(--signal)}
.timer.done{animation:flash .5s steps(2) 6}
@keyframes flash{50%{background:var(--stop)}}
.tbtn{background:transparent;border:1.5px solid color-mix(in srgb,var(--paper) 40%,transparent);color:var(--paper);border-radius:10px;width:44px;height:44px;font-size:1.1em;display:grid;place-items:center}
.tlabel{font-size:.65em;opacity:.7;writing-mode:vertical-rl;transform:rotate(180deg);letter-spacing:.08em;text-transform:uppercase}
.stage{padding:clamp(16px,2.6vw,40px) max(16px,3vw) 110px;max-width:1500px;margin:0 auto}
.stage h2{font-family:var(--f-display);font-stretch:118%;font-weight:850;font-size:clamp(1.5rem,3.2vw,2.8rem);line-height:1.05;margin-bottom:.5em}
.lead{font-size:1.15em;max-width:62ch}
.rules{display:grid;gap:10px;padding:0;margin:1em 0;list-style:none;counter-reset:r;max-width:75ch}
.rules li{counter-increment:r;display:grid;grid-template-columns:2.2em 1fr;gap:10px;font-size:1.08em}
.rules li::before{content:counter(r);font-family:var(--f-display);font-weight:900;background:var(--ink);color:var(--paper);border-radius:8px;height:1.8em;display:grid;place-items:center}
.note{border-left:4px solid var(--gold);background:color-mix(in srgb,var(--gold) 12%,var(--card));padding:10px 14px;border-radius:0 10px 10px 0;max-width:75ch;margin:1em 0}
.grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr))}
.grid.g3{grid-template-columns:repeat(auto-fill,minmax(min(100%,360px),1fr))}
.grid.one{grid-template-columns:1fr}
.tile{position:relative;text-align:left;background:var(--tile);border:2px solid transparent;border-radius:16px;padding:16px 18px;display:flex;flex-direction:column;gap:8px;min-height:110px;transition:background .2s,border-color .2s}
.tile:hover{border-color:var(--line)}
.tile .tag{font-size:.7em;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}
.tile .q{font-size:1.2em;font-weight:700;line-height:1.25}
.tile .a{display:none;font-family:var(--f-display);font-stretch:112%;font-weight:850;font-size:1.45em;color:var(--go);line-height:1.1}
.tile .w{display:none;font-size:.9em;color:var(--muted)}
.tile .hint{font-size:.78em;color:var(--muted);margin-top:auto}
.tile.open{background:var(--tile-open);border-color:var(--go)}
.tile.open .a,.tile.open .w{display:block}
.tile.open .hint{display:none}
.formula{font-family:var(--f-display);font-stretch:110%;font-weight:800;font-size:clamp(1.15rem,2.3vw,1.9rem);background:var(--card);border:2px dashed var(--line);border-radius:14px;padding:14px 20px;display:inline-block;margin:.3em 0 1em;line-height:1.35}
.formula.small-f{font-size:clamp(1rem,1.7vw,1.35rem)}
.hidden-ans{filter:blur(9px);transition:filter .3s}
.show .hidden-ans{filter:none}
.cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr));gap:24px;align-items:start}
.tricks{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,230px),1fr));gap:12px;margin:1em 0}
.trick{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 16px}
.trick b{font-family:var(--f-display);font-stretch:125%;font-weight:900;font-size:1.9em;display:block;color:var(--p2);line-height:1.05}
.trick span{font-size:1.1em;font-weight:700}
.bingo-now{background:var(--card);border:2px solid var(--line);border-radius:22px;padding:28px;text-align:center;margin:12px 0 20px}
.bingo-now .big{font-family:var(--f-display);font-stretch:125%;font-weight:900;font-size:clamp(2.4rem,7vw,6rem);line-height:1}
.bingo-now .ans{font-family:var(--f-display);font-weight:850;font-size:clamp(1.4rem,3vw,2.4rem);color:var(--go);min-height:1.3em;margin-top:10px}
.hist{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.hist span{background:var(--tile);border-radius:8px;padding:5px 10px;font-size:.85em}
.hist span b{color:var(--go)}
.qv{display:grid;grid-template-columns:1fr minmax(170px,230px);gap:22px}
@media (max-width:820px){.qv{grid-template-columns:1fr}}
.qv-q{background:var(--ink);color:var(--paper);border-radius:20px;padding:22px 26px;font-size:1.35em;font-weight:700;line-height:1.3}
.qv-ans{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:12px;margin-top:14px}
.qv-ans button{text-align:left;background:var(--card);border:2px solid var(--line);border-radius:999px;padding:14px 22px;font-size:1.15em;font-weight:700}
.qv-ans button b{color:var(--signal);margin-right:10px;font-family:var(--f-display)}
.qv-ans button.ok{background:var(--go);border-color:var(--go);color:#fff}
.qv-ans button.ok b{color:#fff}
.qv-ans button.ko{background:var(--stop);border-color:var(--stop);color:#fff}
.qv-ans button.gone{visibility:hidden}
.ladder{list-style:none;margin:0;padding:0;display:flex;flex-direction:column-reverse;gap:4px}
.ladder li{display:flex;justify-content:space-between;padding:5px 12px;border-radius:8px;font-variant-numeric:tabular-nums;font-size:.9em;color:var(--muted)}
.ladder li.cur{background:var(--signal);color:#fff;font-weight:700}
.ladder li.win{color:var(--go);font-weight:700}
.ladder li.lose{color:var(--stop);text-decoration:line-through}
.jokers{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.jokers button{border:2px solid var(--signal);color:var(--signal);background:transparent;border-radius:999px;padding:6px 14px;font-weight:700;font-size:.85em}
.jokers button:disabled{border-color:var(--line);color:var(--line);text-decoration:line-through;cursor:default}
.qv-expl{margin-top:14px;min-height:1.5em;font-size:1.05em}
.lock{display:flex;flex-wrap:wrap;gap:22px;align-items:center;background:var(--card);border:2px solid var(--line);border-radius:20px;padding:20px 24px;margin-top:18px}
.lock svg{width:84px;height:100px;flex:none}
.lock .digits{display:flex;gap:10px}
.lock input{width:1.6em;height:1.9em;font-family:var(--f-display);font-stretch:125%;font-weight:900;font-size:clamp(2rem,4vw,3rem);text-align:center;border:3px solid var(--ink);border-radius:12px;background:var(--paper)}
.lock .lmsg{font-weight:700;font-size:1.1em}
.lock.ok{border-color:var(--go)} .lock.ok .lmsg{color:var(--go)}
.lock.shake{animation:shake .4s}
@keyframes shake{25%{transform:translateX(-8px)}75%{transform:translateX(8px)}}
.shackle{transition:transform .5s}
.lock.ok .shackle{transform:translateY(-16px) rotate(-18deg);transform-origin:70% 100%}
.pts-box{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,380px),1fr));gap:22px;align-items:start}
.bareme{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:18px 22px}
.bareme ul{margin:.4em 0 0;padding-left:1.1em}
.bareme li{margin:.35em 0}
.pts-in{background:var(--ink);color:var(--paper);border-radius:16px;padding:20px 22px}
.pts-in input{width:4.2em;font-family:var(--f-display);font-weight:900;font-size:2.4em;text-align:center;border-radius:12px;border:0;padding:4px;background:var(--paper);color:var(--ink)}
.saved{color:var(--gold);font-weight:700;min-height:1.4em}
.nav{position:fixed;left:0;right:0;bottom:0;z-index:5;padding:10px max(16px,2vw) calc(10px + env(safe-area-inset-bottom,0px));background:color-mix(in srgb,var(--card) 94%,transparent);backdrop-filter:blur(6px);border-top:1px solid var(--line);display:flex;align-items:center;justify-content:center;gap:16px}
.nav .btn{min-width:130px}
.dots{display:flex;gap:6px}
.dots i{width:12px;height:12px;border-radius:50%;background:var(--line)}
.dots i.on{background:var(--signal)}

/* quiz en direct (TNI) */
.lobby{display:grid;grid-template-columns:minmax(260px,420px) 1fr;gap:28px;align-items:start}
@media (max-width:860px){.lobby{grid-template-columns:1fr}}
.qr{background:#fff;border-radius:20px;padding:16px;border:1px solid var(--line)}
.qr svg{display:block;width:100%;height:auto}
.joincode{font-family:var(--f-display);font-stretch:125%;font-weight:900;font-size:clamp(2.2rem,5vw,4rem);letter-spacing:.08em;color:var(--signal)}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.chips span{background:var(--tile);border-radius:999px;padding:5px 12px;font-weight:700;font-size:.9em;animation:pop .3s}
@keyframes pop{from{transform:scale(.6);opacity:0}}
.livebar{display:flex;flex-wrap:wrap;gap:12px 24px;align-items:center;justify-content:space-between;margin-bottom:16px}
.bigclock{font-family:var(--f-display);font-stretch:125%;font-weight:900;font-size:clamp(2.4rem,6vw,5rem);line-height:1}
.bigclock.warn{color:var(--signal)}
.liveq{font-family:var(--f-display);font-stretch:108%;font-weight:800;font-size:clamp(1.6rem,3.6vw,3.2rem);line-height:1.15;max-width:32ch}
.lopts{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));gap:12px;margin-top:22px}
.lopt{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:14px;border-radius:16px;padding:14px 18px;background:var(--tile);font-size:1.25em;font-weight:700;position:relative;overflow:hidden}
.lopt .k{font-family:var(--f-display);font-weight:900;color:#fff;width:1.8em;height:1.8em;border-radius:9px;display:grid;place-items:center}
.lopt .fill{position:absolute;inset:0 auto 0 0;background:color-mix(in srgb,var(--go) 16%,transparent);z-index:0;transition:width .6s}
.lopt>*{position:relative;z-index:1}
.lopt.ok{outline:3px solid var(--go)}
.lopt.dim{opacity:.55}
.k0{background:var(--qa)} .k1{background:var(--qb)} .k2{background:var(--qc)} .k3{background:var(--qd)}
.answered{font-family:var(--f-display);font-weight:900;font-size:clamp(1.6rem,3vw,2.6rem)}
.revealbox{margin-top:22px;display:flex;flex-wrap:wrap;gap:18px;align-items:center;background:var(--tile-open);border:2px solid var(--go);border-radius:18px;padding:18px 22px}
.revealbox .ans{font-family:var(--f-display);font-stretch:118%;font-weight:900;font-size:clamp(1.8rem,4vw,3.2rem);color:var(--go)}
.pctq{display:flex;align-items:flex-end;gap:6px;height:120px;margin-top:10px}
.pctq div{flex:1;background:var(--gold);border-radius:6px 6px 0 0;min-height:3px;position:relative}
.pctq div span{position:absolute;bottom:-1.5em;left:0;right:0;text-align:center;font-size:.75em;color:var(--muted)}

/* élève (téléphone) */
.phone{max-width:560px;margin:0 auto;padding:18px 16px 40px;min-height:100vh;display:flex;flex-direction:column;gap:16px}
.phone header{display:flex;justify-content:space-between;align-items:center;gap:10px}
.phone .brand{font-family:var(--f-display);font-stretch:125%;font-weight:900;font-size:1.2em}
.roster{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.roster button{background:var(--card);border:2px solid var(--line);border-radius:12px;padding:14px 10px;font-weight:700;font-size:1.05em}
.roster button.sel{border-color:var(--signal);background:color-mix(in srgb,var(--signal) 10%,var(--card))}
.pinshow{display:flex;justify-content:center;gap:12px;margin:8px 0}
.pinshow i{width:52px;height:62px;border-radius:12px;border:3px solid var(--ink);display:grid;place-items:center;font-style:normal;font-family:var(--f-display);font-weight:900;font-size:2em}
.pad{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.pad button{background:var(--card);border:1.5px solid var(--line);border-radius:14px;padding:16px 0;font-family:var(--f-display);font-weight:900;font-size:1.6em}
.pq{font-size:1.35em;font-weight:700;line-height:1.3}
.pclock{font-family:var(--f-display);font-weight:900;font-size:2.2em;line-height:1}
.pclock.warn{color:var(--signal)}
.pbar{height:8px;background:var(--tile);border-radius:4px;overflow:hidden}
.pbar i{display:block;height:100%;background:var(--signal);transition:width .25s linear}
.popts{display:grid;gap:10px}
.popts button{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:center;text-align:left;border:0;border-radius:16px;padding:16px;font-size:1.15em;font-weight:700;color:#fff}
.popts button .k{font-family:var(--f-display);font-weight:900;background:rgba(255,255,255,.25);width:1.8em;height:1.8em;border-radius:8px;display:grid;place-items:center}
.popts button.p0{background:var(--qa)} .popts button.p1{background:var(--qb)} .popts button.p2{background:var(--qc)} .popts button.p3{background:var(--qd)}
.popts button:disabled{opacity:.4} .popts button.mine{opacity:1;outline:4px solid var(--ink)}
.numin{display:flex;gap:8px}
.numin input{flex:1;min-width:0;font-family:var(--f-display);font-weight:900;font-size:2em;padding:10px 14px;border:3px solid var(--ink);border-radius:14px;background:var(--card)}
.numin .unit{align-self:center;font-weight:700;font-size:1.3em}
.sign{width:64px;border:3px solid var(--ink);border-radius:14px;background:var(--card);font-family:var(--f-display);font-weight:900;font-size:1.6em}
.result{border-radius:18px;padding:18px;text-align:center;font-weight:700}
.result.ok{background:var(--go);color:#fff}
.result.ko{background:var(--stop);color:#fff}
.result .big{font-family:var(--f-display);font-weight:900;font-size:2em;display:block}
.feel{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.feel button{background:var(--card);border:2px solid var(--line);border-radius:12px;padding:12px 0;font-family:var(--f-display);font-weight:900;font-size:1.4em}
.feel button.on{background:var(--signal);border-color:var(--signal);color:#fff}
.carnet{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.carnet li{display:grid;grid-template-columns:2em 1fr auto;gap:10px;align-items:center;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px 12px}
.carnet li b{font-family:var(--f-display);font-weight:900;color:var(--signal)}
.wait{text-align:center;padding:30px 10px}
.wait .dotz{font-size:2.5em;letter-spacing:.2em;animation:blink 1.4s infinite}
@keyframes blink{50%{opacity:.3}}

/* impression des codes */
.labels{display:grid;grid-template-columns:repeat(3,1fr);gap:0}
.labels div{border:1px dashed #999;padding:10px 12px;font-size:12pt}
.labels b{font-size:15pt}
@media print{
  body{background:#fff;color:#000}
  .appbar,.noprint{display:none!important}
  .wrap{padding:0}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
body.tni .appbar{display:none}
#print{display:none}
@media print{ body>*:not(#print){display:none!important} #print{display:block!important} }
