/* shoko.css — système visuel (fiche design) + composants applicatifs */
:root{
  --noir:#111111; --noir-doux:#1C1B18;
  --creme:#F3ECDC; --creme-clair:#FAF6EC; --creme-fonce:#E2D6BE; --blanc-fiche:#FFFDF6;
  --gris-trait:#B9AE99; --gris-sec:#70695C; --txt-soft:#4A453B;
  --rouge:#B11226; --rouge-sombre:#7F0E1C;
  --serif:"Libre Baskerville",Georgia,serif;
  --sans:"Inter",system-ui,-apple-system,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{font-family:var(--sans);color:var(--noir);background:#2a2824}
input,textarea,select,button{font-family:inherit}

#app{
  display:flex;flex-direction:column;height:100dvh;overflow:hidden;
  max-width:520px;margin:0 auto;background:var(--creme);position:relative;
}
.body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch}
.body::-webkit-scrollbar{width:0}
.pad{padding:16px}
.mt{margin-top:14px}.sm{margin-top:8px}
.spacer{height:24px}

/* ---------- en-têtes ---------- */
header.app{background:var(--noir);color:var(--creme);padding:14px 16px 12px;border-bottom:2px solid var(--rouge);position:sticky;top:0;z-index:5}
header.app .row{display:flex;align-items:flex-end;justify-content:space-between}
.wordmark{font-family:var(--serif);font-weight:700;font-size:24px;letter-spacing:.06em;line-height:1}
.subtitle{font-size:9.5px;letter-spacing:.22em;color:var(--gris-trait);margin-top:5px;text-transform:uppercase}
.seal{width:14px;height:14px;border-radius:50%;background:var(--rouge);margin-bottom:3px}
.proj-strip{display:flex;align-items:baseline;gap:8px;margin-top:11px;padding-top:9px;border-top:1px solid #34322c}
.proj-strip .lab{font-size:9px;letter-spacing:.2em;color:var(--gris-sec)}
.proj-strip .val{font-family:var(--serif);font-size:13px;letter-spacing:.04em}
header.sub{background:var(--noir);color:var(--creme);padding:12px 14px;border-bottom:2px solid var(--rouge);display:flex;align-items:center;gap:12px;position:sticky;top:0;z-index:5}
.back{width:32px;height:32px;border:1px solid #3a382f;background:transparent;color:var(--creme);font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}
header.sub .htitle{font-family:var(--serif);font-size:14px;letter-spacing:.05em;line-height:1.15}
header.sub .href{font-size:9px;letter-spacing:.16em;color:var(--gris-sec);margin-top:2px;text-transform:uppercase}
.hbadge{margin-left:auto}

/* ---------- grille millimétrée (peinte au fond, aucun calque) ---------- */
.grid-bg{min-height:100%;
  background-color:var(--creme);
  background-image:
    linear-gradient(rgba(199,186,164,.34) .6px,transparent .6px),
    linear-gradient(90deg,rgba(199,186,164,.34) .6px,transparent .6px),
    linear-gradient(rgba(216,204,183,.24) .4px,transparent .4px),
    linear-gradient(90deg,rgba(216,204,183,.24) .4px,transparent .4px);
  background-size:40px 40px,40px 40px,8px 8px,8px 8px;background-position:-1px -1px;
}

/* ---------- accueil ---------- */
.stats{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--gris-trait);border:1px solid var(--gris-trait);margin-bottom:16px}
.stat{background:var(--blanc-fiche);padding:11px 13px}
.stat .n{font-family:var(--serif);font-size:27px;line-height:1}
.stat .n.alert{color:var(--rouge)}
.stat .l{font-size:9px;letter-spacing:.16em;color:var(--txt-soft);margin-top:4px;text-transform:uppercase}
.menu{display:flex;flex-direction:column;gap:9px}
.tile{display:flex;align-items:center;gap:13px;background:var(--blanc-fiche);border:1.5px solid var(--noir);padding:13px 14px;cursor:pointer;text-align:left;width:100%;transition:background .12s}
.tile:active{background:var(--creme-fonce)}
.tile[disabled]{opacity:.4;pointer-events:none}
.tile .num{font-family:var(--serif);font-size:17px;width:26px;flex-shrink:0}
.tile .tx .t{font-size:13px;font-weight:600;letter-spacing:.08em;text-transform:uppercase}
.tile .tx .s{font-size:11px;color:var(--txt-soft);margin-top:2px}
.tile .chev{margin-left:auto;color:var(--gris-trait);font-size:16px}

/* ---------- catégories ---------- */
.cat{display:flex;align-items:center;gap:13px;width:100%;text-align:left;background:var(--blanc-fiche);border:1px solid var(--noir);border-left:4px solid var(--noir);padding:14px;cursor:pointer;margin-bottom:8px}
.cat:active{background:var(--creme-fonce)}
.cat .num{font-family:var(--serif);font-size:16px;width:24px;flex-shrink:0}
.cat .t{font-size:12.5px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;line-height:1.25}
.cat .chev{margin-left:auto;color:var(--gris-trait)}

/* ---------- cartouche ---------- */
.cartouche{border:2px solid var(--noir);background:var(--blanc-fiche);margin-bottom:18px}
.cartouche .ref{display:flex;justify-content:space-between;align-items:center;background:var(--noir);color:var(--creme);padding:9px 12px}
.cartouche .ref .id{font-family:var(--serif);font-size:16px;letter-spacing:.08em}
.cartouche .ref .v{font-size:9px;letter-spacing:.2em;color:var(--gris-trait)}
.cartouche .cat-name{padding:9px 12px;border-bottom:1px solid var(--gris-trait);font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}
.grid2{display:grid;grid-template-columns:1fr 1fr}

/* ---------- sections ---------- */
.sec{display:flex;align-items:center;gap:8px;margin:20px 0 11px}
.sec .n{font-family:var(--serif);font-size:13px}
.sec .t{font-size:11px;font-weight:700;letter-spacing:.13em;text-transform:uppercase}
.sec .line{flex:1;height:1px;background:var(--gris-trait)}
.addmini{width:24px;height:24px;border:1px solid var(--noir);background:var(--blanc-fiche);cursor:pointer;font-size:14px;line-height:1}

/* ---------- champs ---------- */
.cell{display:flex;flex-direction:column;border:1px solid var(--gris-trait);padding:6px 9px;background:var(--blanc-fiche);margin:-0.5px}
.cell.full{margin:0 0 8px}
.cell>span{font-size:8.5px;letter-spacing:.12em;color:var(--gris-sec);text-transform:uppercase;margin-bottom:3px}
.cell input,.cell textarea,.fld input{border:none;background:transparent;font-size:13px;color:var(--noir);width:100%;outline:none;resize:vertical}
.cell input:focus,.cell textarea:focus{outline:none}
.fld{display:flex;flex-direction:column;border:1px solid var(--gris-trait);padding:7px 10px;background:var(--blanc-fiche);margin-bottom:8px}
.fld>span{font-size:9px;letter-spacing:.1em;color:var(--gris-sec);text-transform:uppercase;margin-bottom:3px}

/* ---------- photos ---------- */
.photogrid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:10px}
.photocard{border:1.5px solid var(--noir);background:var(--noir);aspect-ratio:1.3;position:relative;overflow:hidden;cursor:pointer}
.photocard .ph{position:absolute;inset:0;background-size:cover;background-position:center}
.photocard .tag{position:absolute;top:0;left:0;background:var(--rouge);color:#fff;font-size:9px;font-weight:700;padding:2px 6px;letter-spacing:.06em}
.photocard .meta{position:absolute;bottom:0;left:0;right:0;background:rgba(17,17,17,.82);color:var(--creme);padding:4px 7px;font-size:9px;letter-spacing:.03em}
.addgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.photoadd{border:1.5px dashed var(--gris-sec);background:var(--creme-clair);padding:12px 6px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;cursor:pointer;color:var(--gris-sec)}
.photoadd .plus{font-size:18px;line-height:1}
.photoadd .pl{font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;text-align:center}

/* ---------- checklist ---------- */
.ck{border:1px solid var(--gris-trait);background:var(--blanc-fiche);margin-bottom:8px}
.ck .lbl{display:flex;gap:9px;padding:10px 12px 8px;align-items:flex-start}
.ck .lbl .cn{font-family:var(--serif);font-size:12px;color:var(--gris-sec);flex-shrink:0}
.ck .lbl .ct{font-size:12px;font-weight:500;letter-spacing:.02em;line-height:1.3;text-transform:uppercase}
.seg{display:flex;padding:0 12px 11px}
.seg button{flex:1;border:1px solid var(--noir);border-right:none;background:var(--creme-clair);color:var(--noir);font-size:11px;font-weight:600;padding:8px 0;cursor:pointer;letter-spacing:.03em}
.seg button:last-child{border-right:1px solid var(--noir)}
.seg button.on-ok{background:var(--noir);color:var(--creme)}
.seg button.on-nc{background:var(--rouge);color:var(--creme);border-color:var(--rouge)}
.seg button.on-so{background:var(--gris-trait);color:var(--noir)}
.seg button.on-nv{background:var(--creme-clair);border-style:dashed}
.nc-extra{background:#fbeceb;border-top:1px solid var(--rouge);padding:10px 12px}
.nc-extra .nct{font-size:9.5px;font-weight:700;letter-spacing:.1em;color:var(--rouge-sombre);text-transform:uppercase;margin-bottom:8px}
.nc-extra .cell{border-color:#e6b8bb;background:#fff}

/* ---------- pièces ---------- */
.piece{display:grid;grid-template-columns:1fr 1fr auto;gap:6px;margin-bottom:6px;align-items:stretch}
.piece select,.piece input{border:1px solid var(--gris-trait);background:var(--blanc-fiche);padding:8px;font-size:11.5px;color:var(--noir)}
.piece select.wait{color:var(--rouge);border-color:var(--rouge)}
.piece .pdel{border:1px solid var(--gris-trait);background:var(--creme-clair);cursor:pointer;width:34px;color:var(--gris-sec)}

/* ---------- listes (projets / contrôles) ---------- */
.row-card{display:flex;align-items:center;width:100%;text-align:left;background:var(--blanc-fiche);border:1px solid var(--noir);margin-bottom:8px;cursor:pointer}
.row-card.active{border-left:4px solid var(--rouge)}
.row-main{flex:1;padding:12px 14px;background:transparent;border:none;text-align:left;cursor:pointer}
.rm-t{font-size:12.5px;font-weight:600;letter-spacing:.03em;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.rm-s{font-size:11px;color:var(--txt-soft);margin-top:3px}
.row-edit{border:none;border-left:1px solid var(--gris-trait);background:transparent;padding:0 16px;font-size:18px;cursor:pointer;color:var(--gris-sec);align-self:stretch}
.row-card .chev{padding:0 14px;color:var(--gris-trait)}
.tagactive{font-size:8px;background:var(--rouge);color:#fff;padding:2px 5px;letter-spacing:.1em}

/* ---------- chips filtres ---------- */
.chips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
.chip{border:1px solid var(--noir);background:var(--creme-clair);font-size:10.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;padding:6px 10px;cursor:pointer}
.chip.on{background:var(--noir);color:var(--creme)}

/* ---------- badges ---------- */
.badge{font-size:8.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;padding:3px 7px;border:1px solid var(--noir);white-space:nowrap;display:inline-block}
.badge.ok{background:var(--noir);color:var(--creme)}
.badge.partial{border-style:dotted;color:var(--gris-sec)}
.badge.nc{background:var(--rouge);color:#fff;border-color:var(--rouge)}
.badge.reserve{border-color:var(--rouge);color:var(--rouge-sombre)}
.badge.wait{background:var(--creme-fonce);color:var(--gris-sec);border-color:var(--gris-trait)}
.badge.draft{border-style:dotted;color:var(--gris-trait)}
.badge.closed{background:var(--noir);color:var(--creme)}

/* ---------- synthèse ---------- */
.synth-status{border:2px solid var(--noir);background:var(--blanc-fiche);margin-bottom:16px}
.synth-status .top{background:var(--noir);color:var(--creme);padding:11px 13px;display:flex;justify-content:space-between;align-items:center}
.synth-status .top .st{font-family:var(--serif);font-size:14px}
.synth-status .top .gen{font-size:9px;letter-spacing:.16em;color:var(--gris-trait)}
.compbar{padding:13px}
.compbar .lab{display:flex;justify-content:space-between;font-size:10px;letter-spacing:.1em;color:var(--gris-sec);text-transform:uppercase;margin-bottom:7px}
.compbar .lab b{color:var(--noir);font-size:13px;font-family:var(--serif)}
.track{height:9px;background:var(--creme-fonce);border:1px solid var(--gris-trait)}
.track .fill{height:100%;background:var(--noir)}
.missing{border:1px solid var(--gris-trait);background:var(--creme-clair);padding:12px;margin-bottom:14px}
.missing .h{font-size:9.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--gris-sec);margin-bottom:8px}
.missing .item{display:flex;gap:9px;font-size:11.5px;padding:4px 0;line-height:1.35}
.missing.crit{border-color:var(--rouge);background:#fbeceb}
.missing.crit .h{color:var(--rouge-sombre)}
.missing.crit .item .dot{color:var(--rouge)}
.mention{font-size:10px;color:var(--gris-sec);line-height:1.5;margin-top:14px;white-space:pre-line;border-top:1px solid var(--gris-trait);padding-top:12px}

/* ---------- boutons ---------- */
.btn{width:100%;border:none;font-size:13px;font-weight:600;padding:15px;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:9px;margin-bottom:0}
.btn-primary{background:var(--noir);color:var(--creme)}
.btn-primary .d{width:8px;height:8px;border-radius:50%;background:var(--rouge)}
.btn-ghost{background:var(--creme-clair);color:var(--noir);border:1.5px solid var(--noir)}
.btn-crit{background:var(--rouge-sombre);color:#FFFDF6}
.btnstack{display:flex;flex-direction:column;gap:8px;margin-top:6px}

/* ---------- barre d'action ---------- */
.actionbar{flex-shrink:0;border-top:2px solid var(--noir);background:var(--creme);display:flex;z-index:6}
.actionbar button{flex:1;border:none;background:transparent;font-size:10px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;padding:11px 4px;cursor:pointer;color:var(--noir);border-right:1px solid var(--gris-trait);display:flex;flex-direction:column;align-items:center;gap:4px}
.actionbar button:last-child{border-right:none}
.actionbar button.main{background:var(--noir);color:var(--creme)}
.actionbar .ic{font-size:15px;line-height:1}
.actionbar .dotred{color:var(--rouge)}

/* ---------- divers ---------- */
.empty{text-align:center;color:var(--gris-sec);font-size:13px;padding:30px 10px;line-height:1.6}
.taglist{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}
.tagchip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--noir);background:var(--blanc-fiche);padding:5px 9px;font-size:11px}
.tagchip button{border:none;background:transparent;color:var(--gris-sec);cursor:pointer;font-size:11px}
.muted{color:var(--gris-trait);font-size:12px}
.warn{background:#fbeceb;border:1px solid var(--rouge);color:var(--rouge-sombre);font-size:11px;padding:10px;line-height:1.5;margin-bottom:12px}
.version{text-align:center;font-size:9px;letter-spacing:.16em;color:var(--gris-trait);text-transform:uppercase;margin-top:22px}
.footer-mark{padding:26px 16px 30px;text-align:center;border-top:1px solid var(--gris-trait);margin-top:24px}
.footer-mark .fm-icon{width:88px;height:88px;border-radius:20px;display:block;margin:0 auto}
.footer-mark .fm-meta{font-size:8.5px;letter-spacing:.16em;color:var(--gris-sec);margin-top:13px;text-transform:uppercase}

#toast{position:fixed;left:50%;bottom:78px;transform:translateX(-50%) translateY(20px);background:var(--noir);color:var(--creme);font-size:12px;letter-spacing:.03em;padding:11px 16px;border-left:3px solid var(--rouge);opacity:0;pointer-events:none;transition:.25s;max-width:90%;z-index:50}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

@media(prefers-reduced-motion:reduce){*{transition:none!important}}

/* ====== v1 : logo en-tête, menu, transitions, compteurs, photos rattachées ====== */
header.app .row{align-items:center}
.logo-img{height:30px;width:auto;display:block}
.menu-btn{background:transparent;border:1px solid #3a382f;color:var(--creme);width:34px;height:30px;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.proj-strip{width:100%;background:transparent;border:none;border-top:1px solid #34322c;cursor:pointer;display:flex;align-items:baseline;gap:8px;margin-top:11px;padding:9px 0 0;color:var(--creme);text-align:left}
.proj-strip .caret{margin-left:auto;color:var(--gris-trait);font-size:11px}
.htitlewrap{flex:1;min-width:0}
header.sub .htitle{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hbadge{flex-shrink:0}

/* champs select */
.cell select,.statut-cell select{border:none;background:transparent;font-size:13px;color:var(--noir);width:100%;outline:none}
.statut-cell{border-top:2px solid var(--noir)}

/* photos rattachées à un point */
.ck-joined{padding:0 12px 10px;font-size:10.5px;color:var(--gris-sec);letter-spacing:.01em;line-height:1.5}
.ck-joined b{color:var(--noir);font-weight:600}

/* menu déroulant */
.menu-overlay{position:fixed;inset:0;background:rgba(17,17,17,0);opacity:0;pointer-events:none;transition:opacity .28s ease,background .28s ease;z-index:40}
.menu-overlay.open{opacity:1;pointer-events:auto;background:rgba(17,17,17,.44);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}
.menu-panel{position:absolute;top:0;right:0;width:82%;max-width:330px;height:100%;background:var(--creme);border-left:2px solid var(--rouge);transform:translateX(100%);transition:transform .32s cubic-bezier(.22,.72,.16,1);overflow-y:auto;padding:14px;box-shadow:-10px 0 30px rgba(0,0,0,.22)}
.menu-overlay.open .menu-panel{transform:translateX(0)}
.menu-overlay.open .menu-panel>*{animation:miIn .34s cubic-bezier(.22,.72,.16,1) both}
@keyframes miIn{from{opacity:0;transform:translateX(14px)}to{opacity:1;transform:none}}
.menu-sec{font-size:9px;letter-spacing:.18em;text-transform:uppercase;color:var(--gris-sec);margin:18px 0 8px;border-bottom:1px solid var(--gris-trait);padding-bottom:5px}
.menu-sec:first-child{margin-top:4px}
.mi{display:block;width:100%;text-align:left;background:var(--blanc-fiche);border:1px solid var(--noir);padding:11px 12px;font-size:12.5px;letter-spacing:.03em;cursor:pointer;margin-bottom:6px}
.mi.cur{border-left:4px solid var(--rouge)}
.mi.sub{background:var(--creme-clair);font-size:11.5px}
.mi.subi{font-size:11px;border-style:dotted;color:var(--gris-sec);padding:8px 12px}
.mi-empty{font-size:12px;color:var(--gris-trait);padding:6px 2px}

/* transition de page directionnelle */
@keyframes pageFwd{from{opacity:0;transform:translateX(28px)}to{opacity:1;transform:none}}
@keyframes pageBack{from{opacity:0;transform:translateX(-28px)}to{opacity:1;transform:none}}
.body.page-enter{animation:pageFwd .3s cubic-bezier(.22,.72,.16,1)}
.body.page-back{animation:pageBack .3s cubic-bezier(.22,.72,.16,1)}

/* ====== v2 : tuiles 2 lignes, progression, barre d'action, béton camions ====== */
.tile .tx{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}
.tile .tx .t{font-size:13px}
.mb{margin-bottom:12px}

/* panneau de progression */
.prog{border:1.5px solid var(--noir);background:var(--blanc-fiche);padding:12px;margin-bottom:16px}
.prog-top{display:flex;justify-content:space-between;align-items:baseline;font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--gris-sec);margin-bottom:7px}
.prog-top b{font-family:var(--serif);font-size:16px;color:var(--noir)}
.prog .track{height:8px;background:var(--creme-fonce);border:1px solid var(--gris-trait)}
.prog .track .fill{height:100%;background:var(--noir)}
.prog-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px 14px;margin-top:11px}
.prog-grid span{display:flex;justify-content:space-between;align-items:baseline;font-size:10px;letter-spacing:.05em;text-transform:uppercase;color:var(--gris-sec);border-bottom:1px dotted var(--gris-trait);padding-bottom:3px}
.prog-grid span b{font-family:var(--serif);color:var(--noir);font-size:12.5px}
.prog-grid span.alert b{color:var(--rouge)}
.prog-note{margin-top:11px;font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:var(--rouge-sombre);border:1px dotted var(--rouge);padding:6px 8px;text-align:center}

/* bouton version */
.statut-cell{border-top:2px solid var(--noir)}
.vbtn{width:100%;border:1px solid var(--noir);border-top:none;background:var(--creme-clair);color:var(--gris-sec);font-size:10px;letter-spacing:.08em;text-transform:uppercase;padding:9px;cursor:pointer}

/* béton camions */
.camions{border:1px solid var(--gris-trait);background:var(--blanc-fiche);padding:10px;margin-top:8px}
.cam-head{display:flex;align-items:center;justify-content:space-between;font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--gris-sec);margin-bottom:8px}
.cam-row{display:grid;grid-template-columns:1fr 72px auto;gap:6px;margin-bottom:6px}
.cam-row input{border:1px solid var(--gris-trait);background:var(--creme-clair);padding:7px;font-size:12px}
.cam-total{font-size:11px;letter-spacing:.03em;color:var(--gris-sec);margin-top:4px}
.cam-total b{color:var(--noir);font-family:var(--serif);font-size:13px}
.cam-empty{font-size:10.5px;color:var(--gris-trait)}

/* barre d'action de la fiche */
.fiche-actions{margin-top:22px}
.act-row{display:flex;gap:8px}
.act-del{flex:0 0 16%;background:var(--rouge-sombre);color:#FFFDF6;font-size:16px;padding:15px 0;min-width:46px}
.act-save{flex:1}
.act-pdf{width:100%;margin-top:8px}
