/* Ήθος · Αποθήκη — Aegean Modernism για την αποθήκη. Πρώτα για το κινητό: κάτω μπάρα με τις
   τέσσερις καρτέλες κάτω από τον αντίχειρα· από 1024px πλευρικό μενού για τον υπεύθυνο στον υπολογιστή.
   Τα tokens είναι του Ήθους (public/styles.css), λέξη προς λέξη. Η μόνη διαφορά της Αποθήκης είναι η
   απόχρωση: κεφαλίδα, ενεργό μενού και κύρια κουμπιά διαβάζουν ΜΟΝΟ --hue, --hue-deep, --hue-tint, --on-hue.
   Ο χρυσός μένει το μόνο χρώμα σήματος. */

/* ===== ΑΠΟΧΡΩΣΗ ΤΗΣ ΑΠΟΘΗΚΗΣ: πρόταση 1 «Πετρόλ» (προεπιλογή ως την απόφαση του Nick) =====
   Οι τρεις προτάσεις, με αντιθέσεις, στο /hue.html. Για αλλαγή απόχρωσης αντικαθίσταται ΜΟΝΟ αυτό
   το μπλοκ με το έτοιμο μπλοκ της πρότασης από το hue.js (PROPOSALS[n].css). Όλα τα υπόλοιπα
   (φωτεινό, σκούρο, σκούρο του συστήματος) διαβάζουν αυτές τις οκτώ τιμές.
     --light-hue        κείμενο/εικονίδια απόχρωσης σε χαρτί (σύνδεσμοι, ήσυχα κουμπιά, ενεργή καρτέλα)
     --light-hue-deep   πεδίο: κεφαλίδα, πλευρικό μενού, toast, κουμπί απόχρωσης
     --light-hue-tint   απαλό γέμισμα (ετικέτες κατάστασης)
     --light-on-hue     κείμενο πάνω στο πεδίο
     --dark-*           τα ίδια για το σκούρο θέμα (εκεί το κουμπί απόχρωσης γεμίζει με --hue-tint) */
:root{
  --light-hue:#00616c; --light-hue-deep:#004750; --light-hue-tint:#d7eff2; --light-on-hue:#ffffff;
  --dark-hue:#77ced9;  --dark-hue-deep:#004750;  --dark-hue-tint:#06373e;  --dark-on-hue:#eef7f8;
}

:root{
  --ground:#f2f5f5;
  --panel:#fbfdfd;
  --panel-2:#eef3f4;
  --navy:#00396e;
  --navy-deep:#002a52;
  --navy-tint:#dce9f4;
  --on-navy:#ffffff;
  --on-navy-dim:#a8c6e0;
  --ink:#14232f;
  --muted:#54677a;
  --rule:#cfdadc;
  --rule-soft:#e2e9ea;
  --gold:#f2b705;
  --gold-ink:#7d5f00;
  --gold-soft:#fdeeca;
  --ok:#25634a;
  --ok-soft:#ddeee6;
  --danger:#a33c2f;
  --danger-soft:#f6e3df;
  --focus:#0b63a8;
  --shadow:0 1px 3px rgba(0,42,82,.10);
  --shadow-float:0 14px 40px rgba(0,42,82,.25);
  --font:'Commissioner',system-ui,-apple-system,'Segoe UI',sans-serif;
  --didot:'GFS Didot',Georgia,serif;

  /* απόχρωση της Αποθήκης: από το μπλοκ ΑΠΟΧΡΩΣΗ πιο πάνω */
  --hue:var(--light-hue);
  --hue-deep:var(--light-hue-deep);
  --hue-tint:var(--light-hue-tint);
  --on-hue:var(--light-on-hue);

  /* του WMS: μετρήσεις του κελύφους, και κόκκινο γέμισμα που κρατά λευκό κείμενο και στα δύο θέματα */
  --danger-fill:#a33c2f;
  --on-danger:#ffffff; /* κείμενο πάνω στο --danger-fill, ίδιο και στα δύο θέματα */
  --topbar-h:52px;
  --tabbar-h:64px;
  --rail-w:240px;
  --safe-b:env(safe-area-inset-bottom, 0px);
  --safe-t:env(safe-area-inset-top, 0px);
  color-scheme:light;
}
/* Σκούρο θέμα: με data-theme="dark", και ήδη από το πρώτο καρέ όταν το σύστημα είναι σκούρο
   (πριν τρέξει η JS που βάζει το data-theme), ώστε να μην αναβοσβήνει λευκό. */
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --ground:#0d1621; --panel:#152230; --panel-2:#1a2938;
    --navy:#8ec1e8; --navy-deep:#002a52; --navy-tint:#1d3350; --on-navy:#f2f6f9; --on-navy-dim:#8fb2cf;
    --ink:#e8eef3; --muted:#93a8bb; --rule:#2a3b4c; --rule-soft:#20303f;
    --gold:#f4c440; --gold-ink:#f4c440; --gold-soft:#332a12;
    --ok:#7fc9a5; --ok-soft:#173328; --danger:#e08a7d; --danger-soft:#3b201b; --focus:#7db8e8;
    --shadow:0 1px 3px rgba(0,0,0,.45); --shadow-float:0 14px 40px rgba(0,0,0,.55);
    --hue:var(--dark-hue); --hue-deep:var(--dark-hue-deep); --hue-tint:var(--dark-hue-tint); --on-hue:var(--dark-on-hue);
    color-scheme:dark;
  }
}
:root[data-theme="dark"]{
  --ground:#0d1621; --panel:#152230; --panel-2:#1a2938;
  --navy:#8ec1e8; --navy-deep:#002a52; --navy-tint:#1d3350; --on-navy:#f2f6f9; --on-navy-dim:#8fb2cf;
  --ink:#e8eef3; --muted:#93a8bb; --rule:#2a3b4c; --rule-soft:#20303f;
  --gold:#f4c440; --gold-ink:#f4c440; --gold-soft:#332a12;
  --ok:#7fc9a5; --ok-soft:#173328; --danger:#e08a7d; --danger-soft:#3b201b; --focus:#7db8e8;
  --shadow:0 1px 3px rgba(0,0,0,.45); --shadow-float:0 14px 40px rgba(0,0,0,.55);
  --hue:var(--dark-hue); --hue-deep:var(--dark-hue-deep); --hue-tint:var(--dark-hue-tint); --on-hue:var(--dark-on-hue);
  color-scheme:dark;
}

/* ===== βάση ===== */
*,*::before,*::after{box-sizing:border-box}
html{height:100%;background:var(--ground);scrollbar-color:var(--rule) var(--ground);-webkit-text-size-adjust:100%}
body{
  margin:0;min-height:100%;
  background:var(--ground);color:var(--ink);
  font-family:var(--font);font-size:15.5px;line-height:1.5;
  -webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;
}
::selection{background:var(--gold);color:#14232f}
:focus-visible{outline:2.5px solid var(--focus);outline-offset:2px;border-radius:3px}
button,input,select,textarea{font:inherit;color:inherit}
/* hidden κρύβει πάντα, ακόμη κι όταν η κλάση ορίζει display (.btn, .sheet …) */
[hidden]{display:none !important}
/* Κάθε πεδίο έχει βάση, ώστε κανένα να μην πέσει στο λευκό του browser μέσα στο σκούρο θέμα.
   16px: κάτω από αυτό το iOS μεγεθύνει τη σελίδα στην εστίαση. */
input,select,textarea{
  font-size:16px;background:var(--panel);color:var(--ink);caret-color:var(--gold-ink);
  border:1px solid var(--rule);border-radius:3px;
  transition:border-color .15s ease-out, box-shadow .15s ease-out;
}
input:hover,select:hover,textarea:hover{border-color:var(--muted)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--focus) 18%,transparent)}
::placeholder{color:var(--muted);opacity:1}
a{color:var(--hue);text-underline-offset:3px}
.num{font-variant-numeric:tabular-nums}
.ico{width:20px;height:20px;flex:none}
.noscript{margin:24px 16px;font-size:15.5px}

/* ===== κεφαλίδα (κινητό) ===== */
#app{min-height:100dvh}
.topbar{
  position:sticky;top:0;z-index:40;
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  min-height:calc(var(--topbar-h) + var(--safe-t));padding:var(--safe-t) 4px 0 16px;
  background:var(--hue-deep);color:var(--on-hue);box-shadow:var(--shadow);
}
.brand{display:inline-flex;align-items:center;gap:11px;min-width:0}
.wordmark{font-family:var(--didot);font-weight:400;font-size:22px;line-height:1;letter-spacing:.02em}
.brand-tag{
  font-size:10.5px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;line-height:1;
  padding:4px 7px 3px;border:1px solid color-mix(in srgb,currentColor 32%,transparent);border-radius:2px;
  color:color-mix(in srgb,currentColor 78%,transparent);
}
.iconbtn{
  display:inline-grid;place-items:center;width:48px;height:48px;flex:none;
  background:transparent;border:0;border-radius:3px;color:inherit;cursor:pointer;
  transition:background-color .15s ease-out;
}
.iconbtn:hover{background:color-mix(in srgb,currentColor 10%,transparent)}
.iconbtn:active{background:color-mix(in srgb,currentColor 16%,transparent)}
.topbar :focus-visible{outline-color:var(--gold)} /* σε επιφάνεια απόχρωσης το μπλε της εστίασης χάνεται */

/* ===== περιεχόμενο ===== */
#view{
  display:block;width:100%;max-width:760px;margin:0 auto;
  padding:20px 16px calc(var(--tabbar-h) + var(--safe-b) + 32px);
}
#view:focus{outline:none}
.pagehead{margin:4px 0 20px}
.pagehead h1{margin:0;font-size:23px;font-weight:800;letter-spacing:-.015em;line-height:1.2;text-wrap:balance}
.pagehead .sub{margin:6px 0 0;color:var(--muted);max-width:60ch}

.sheet{background:var(--panel);border:1px solid var(--rule);border-radius:2px;box-shadow:var(--shadow)}
.sheet.empty{display:grid;justify-items:start;gap:14px;padding:26px 20px}
.sheet.empty > .ico{width:28px;height:28px;color:var(--hue)}
.sheet.empty p{margin:0;color:var(--muted)}

/* ===== κάτω μπάρα (κινητό) ===== */
.nav{
  position:fixed;left:0;right:0;bottom:0;z-index:40;
  background:var(--panel);border-top:1px solid var(--rule);
  padding-bottom:var(--safe-b);
}
.navbrand,.navfoot{display:none}
.navlinks{display:grid;grid-template-columns:repeat(5,minmax(0,1fr))}
.navlink{
  position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;
  min-height:var(--tabbar-h);padding:6px 4px 8px;
  color:var(--muted);text-decoration:none;
  font-size:11.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;line-height:1;
  transition:color .15s ease-out, background-color .15s ease-out;
}
.navlink .ico{width:24px;height:24px}
.navlink:active{background:var(--panel-2)}
.navlink[aria-current="page"]{color:var(--hue)}
/* Το χρυσό σημάδι της ενεργής θέσης, όπως η υπογράμμιση της μπάρας του Ήθους: εδώ στην πάνω άκρη. */
.navlink[aria-current="page"]::before{
  content:"";position:absolute;top:-1px;left:24%;right:24%;height:3px;
  background:var(--gold);border-radius:0 0 2px 2px;
}
.navlabel{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
/* Στενά τηλέφωνα (360): η «Παραλαβή» θέλει 68px σε καρτέλα 72px. Λιγότερο διάστιχο γραμμάτων και πλάγιο περιθώριο. */
@media (max-width:374px){
  .navlink{padding-left:2px;padding-right:2px;letter-spacing:.01em}
}
@media (max-width:339px){ .navlink{font-size:10.5px;letter-spacing:0} }

/* ===== κουμπιά ===== */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:48px;
  border:none;border-radius:3px;cursor:pointer;
  padding:9px 18px;font-size:13.5px;font-weight:700;letter-spacing:.02em;text-decoration:none;
  transition:transform .12s ease-out, filter .18s ease-out, background-color .15s ease-out;
}
.btn:active{transform:translateY(1px)}
.btn .ico{width:18px;height:18px}
.btn-gold{background:var(--gold);color:#14232f}
.btn-gold:hover{filter:brightness(1.05)}
.btn-hue{background:var(--hue-deep);color:var(--on-hue)}
:root[data-theme="dark"] .btn-hue{background:var(--hue-tint)}
.btn-hue:hover{filter:brightness(1.15)}
.btn-quiet{background:transparent;color:var(--hue);border:1px solid var(--rule);font-weight:600}
.btn-quiet:hover{background:var(--panel-2)}
.btn-danger{background:transparent;color:var(--danger);border:1px solid var(--rule);font-weight:600}
.btn-danger:hover{background:var(--danger-soft)}
.btn[disabled]{opacity:.45;cursor:not-allowed}
.btn:active[disabled]{transform:none}
/* busy(): το κουμπί περιμένει. Λίγο σβηστό, και μια χρυσή γραμμή που τρέχει από κάτω. */
.btn[aria-busy="true"],button[aria-busy="true"]{opacity:.75;cursor:progress;position:relative;overflow:hidden}
.btn[aria-busy="true"]::after{
  content:"";position:absolute;left:0;bottom:0;height:2px;width:40%;background:var(--gold);
}
@media (prefers-reduced-motion: no-preference){
  .btn[aria-busy="true"]::after{animation:busyrun 1s cubic-bezier(.4,0,.2,1) infinite}
  @keyframes busyrun{from{transform:translateX(-100%)}to{transform:translateX(250%)}}
}

/* ===== ποσότητα − [n] + ===== */
.qty{
  display:grid;grid-template-columns:56px minmax(0,1fr) 56px;height:56px;
  background:var(--panel);border:1px solid var(--rule);border-radius:3px;overflow:hidden;
}
.qbtn{
  display:grid;place-items:center;border:0;background:var(--panel-2);color:var(--hue);cursor:pointer;
  transition:background-color .15s ease-out;
}
.qbtn .ico{width:22px;height:22px}
.qbtn:hover{background:var(--rule-soft)}
.qbtn:active{background:var(--rule)}
.qbtn[disabled]{color:var(--muted);opacity:.45;cursor:not-allowed;background:var(--panel-2)}
.qbtn:focus-visible{outline-offset:-3px}
.qinput{
  min-width:0;width:100%;height:100%;border:0;border-inline:1px solid var(--rule);border-radius:0;
  background:var(--panel);text-align:center;font-size:23px;font-weight:800;letter-spacing:-.01em;
}
.qinput:hover{border-color:var(--rule)}
.qinput:focus{border-color:var(--rule);box-shadow:inset 0 0 0 2px var(--focus)}

/* ===== toast: πάνω από την κάτω μπάρα, κάτω από τον αντίχειρα ===== */
.toast{
  position:fixed;left:50%;bottom:calc(var(--tabbar-h) + var(--safe-b) + 14px);z-index:50;
  transform:translateX(-50%);width:max-content;max-width:calc(100vw - 32px);
  display:flex;align-items:center;gap:10px;
  background:var(--hue-deep);color:var(--on-hue);padding:12px 18px;border-radius:3px;
  font-size:14px;font-weight:600;line-height:1.35;box-shadow:var(--shadow);
  border:1px solid color-mix(in srgb,var(--on-hue) 12%,transparent);
  transition:opacity .15s ease-out, transform .15s ease-out;
}
.toast .ico{width:18px;height:18px}
.toast.ok .ico{color:var(--gold)}
.toast.err{background:var(--danger-fill);color:var(--on-danger);border-color:transparent}
.toast.out{opacity:0;transform:translate(-50%,4px)}
body.is-public .toast{bottom:calc(var(--safe-b) + 24px)}
@media (prefers-reduced-motion: reduce){ .toast{transition:opacity .15s linear} .toast.out{transform:translateX(-50%)} }
@media (prefers-reduced-motion: no-preference){
  .toast{animation:toastin .25s cubic-bezier(.16,1,.3,1)}
  @keyframes toastin{from{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%,0)}}
}

/* ===== οθόνες χωρίς συνεδρία (σύνδεση, PIN, πρώτη χρήση): χωρίς μενού ===== */
/* Στο κινητό: το σήμα και ο τίτλος πάνω, σαν επικεφαλίδα εντύπου· η φόρμα κάτω, στον αντίχειρα.
   Στο PIN η φόρμα μένει αμέσως κάτω από τον τίτλο: το αριθμητικό πληκτρολόγιο πιάνει ήδη το κάτω μισό. */
body.is-public .topbar,body.is-public .nav{display:none}
body.is-public #view{max-width:440px;padding:calc(var(--safe-t) + 40px) 16px calc(var(--safe-b) + 24px)}
.gate{display:flex;flex-direction:column;min-height:calc(100dvh - var(--safe-t) - var(--safe-b) - 64px)}
.gate-mark{margin-bottom:36px}
.brand-lg{color:var(--hue);flex-direction:column;align-items:flex-start;gap:12px}
.brand-lg .wordmark{font-size:44px}
.gate h1{margin:0;font-size:23px;font-weight:800;letter-spacing:-.015em;line-height:1.2;text-wrap:balance;overflow-wrap:anywhere}
.gate .sub{margin:8px 0 0;color:var(--muted);text-wrap:pretty}
/* Ο χάρακας του Ήθους (χοντρός + λεπτός) κλείνει την επικεφαλίδα, εδώ στην απόχρωση της Αποθήκης. */
.gate-head{padding-bottom:20px;border-bottom:2.5px solid var(--hue);box-shadow:inset 0 -5px 0 -4px var(--rule)}
.gate-form{display:grid;gap:18px;margin-top:auto;padding-top:32px}
.gate-pin .gate-form{margin-top:0;padding-top:28px}
.gate-pin .pin-other{margin-top:8px}

/* ===== πεδία ===== */
.field{display:grid;gap:7px}
.field label,.pin-label{font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);line-height:1.2}
.field input{width:100%;height:52px;padding:0 14px}
.hint{margin:0;font-size:13px;color:var(--muted);line-height:1.4}
/* Κωδικός εγκατάστασης (#/welcome από μακριά): ο κωδικός και η εντολή του server σε σταθερό πλάτος. Μια λεπτή
   γραμμή τον χωρίζει από τα στοιχεία του λογαριασμού: πρώτα η άδεια από τον server, μετά ο υπεύθυνος. */
.field-setup{padding-bottom:18px;border-bottom:1px solid var(--rule-soft)}
.field-setup input{font-family:ui-monospace,'SF Mono','Cascadia Mono',Consolas,'Liberation Mono',monospace;font-size:18px;font-weight:600;letter-spacing:.14em;text-transform:uppercase}
.field-setup input::placeholder{letter-spacing:0;text-transform:none}
.hint .cmd{display:inline-block;margin-top:4px;padding:2px 7px;border-radius:2px;background:var(--panel-2);color:var(--ink);
  font-family:ui-monospace,'SF Mono','Cascadia Mono',Consolas,'Liberation Mono',monospace;font-size:12.5px;line-height:1.5;overflow-wrap:anywhere;
  user-select:all}
.pw{position:relative}
.pw input{padding-right:104px}
.pw-toggle{
  position:absolute;top:2px;right:2px;bottom:2px;min-width:96px;padding:0 14px;
  border:0;border-radius:2px;background:transparent;color:var(--hue);cursor:pointer;
  font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  transition:background-color .15s ease-out;
}
.pw-toggle:hover{background:var(--panel-2)}
.pw-toggle:focus-visible{outline-offset:-3px}
.formerr{margin:0;padding:11px 14px;background:var(--danger-soft);color:var(--danger);border-radius:3px;font-size:14px;font-weight:600;line-height:1.4}
.formerr:empty{display:none}
.btn-block{width:100%;min-height:52px;font-size:15.5px}

/* ===== PIN: ένα αόρατο <input> πάνω από έξι κουτιά ===== */
.pin{position:relative}
.pin-cells{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px}
.pin-cell{
  display:grid;place-items:center;height:60px;
  background:var(--panel);border:1px solid var(--rule);border-radius:3px;
  transition:border-color .15s ease-out, background-color .15s ease-out, opacity .15s ease-out;
}
.pin-cell.is-filled{border-color:var(--muted)}
.pin-cell.is-filled::after{content:"";width:12px;height:12px;border-radius:50%;background:var(--ink)}
.pin:focus-within .pin-cell.is-next{border-color:var(--focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--focus) 18%,transparent)}
.pin:focus-within .pin-cell.is-next::after{content:"";width:2px;height:26px;background:var(--gold-ink)}
.pin.is-error .pin-cell{border-color:var(--danger)}
.pin.is-busy .pin-cell{opacity:.6}
.pin-input{
  position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;border:0;
  opacity:0;font-size:16px;cursor:text;
}
@media (prefers-reduced-motion: no-preference){
  .pin:focus-within .pin-cell.is-next::after{animation:pincaret 1.1s steps(1) infinite}
  @keyframes pincaret{50%{opacity:0}}
  .pin.is-error .pin-cells{animation:pinshake .28s cubic-bezier(.36,.07,.19,.97)}
  @keyframes pinshake{20%{transform:translateX(-6px)}45%{transform:translateX(5px)}70%{transform:translateX(-3px)}90%{transform:translateX(1px)}}
}

/* ===== δεύτερος κωδικός (2FA) και PIN (security.js, δεύτερο βήμα του login.js) ===== */
/* Ο κωδικός 6 ψηφίων φαίνεται (τον αντιγράφει κανείς από άλλη οθόνη): ένα πεδίο, μεγάλα ίσα ψηφία με αέρα.
   Όπως στο PIN, η φόρμα μένει κάτω από τον τίτλο: το αριθμητικό πληκτρολόγιο πιάνει το κάτω μισό. */
.gate-code .gate-form,.gate-sec .gate-form{margin-top:0;padding-top:28px}
.field input.code-input{
  height:64px;padding:0 0 0 .42em;text-align:center;
  font-size:28px;font-weight:800;letter-spacing:.42em;font-variant-numeric:tabular-nums;
}
.code-input::placeholder{letter-spacing:.2em}
.code-acts{display:grid;gap:8px}
.pin-label.pin-again{color:var(--hue)}
.pin-later{margin-top:4px}

/* Δύο τρόποι, ο ένας κάτω από τον άλλο: εικονίδιο σε απαλό πεδίο, τίτλος, μία γραμμή που λέει τι σημαίνει. */
.sec-opts{display:grid;gap:10px;margin-top:28px}
.sec-opt{
  display:grid;grid-template-columns:44px minmax(0,1fr) 12px;align-items:center;gap:14px;
  min-height:80px;padding:14px 16px;text-align:left;cursor:pointer;
  background:var(--panel);color:var(--ink);border:1px solid var(--rule);border-radius:3px;box-shadow:var(--shadow);
  transition:border-color .15s ease-out, background-color .15s ease-out, transform .12s ease-out;
}
.sec-opt:hover{border-color:var(--hue);background:var(--panel-2)}
.sec-opt:active{transform:translateY(1px)}
.sec-opt[aria-busy="true"]{cursor:progress;opacity:.7}
.sec-opt:hover .hub-go{border-color:var(--hue);transform:translateX(2px) rotate(45deg)}
.sec-opt-ico,.sec-method-ico{display:grid;place-items:center;width:44px;height:44px;border-radius:3px;background:var(--hue-tint);color:var(--hue)}
.sec-opt-ico .ico,.sec-method-ico .ico{width:24px;height:24px}
.sec-opt-t{font-size:16px;font-weight:700;line-height:1.3}
.sec-foot{margin-top:auto;padding-top:28px}
.gate-sec .sec-foot:empty{display:none}
.gate-sec > .formerr{margin-top:14px}

/* Authenticator: QR σε λευκή πλάκα (το λευκό είναι μέσα στο SVG: ο σαρωτής το θέλει και στο σκούρο θέμα). */
.sec-pair{display:grid;gap:14px;margin-top:24px}
.sec-h{margin:0;font-size:15.5px;font-weight:700;line-height:1.35}
.sec-qrrow{display:grid;grid-template-columns:176px minmax(0,1fr);align-items:center;gap:16px}
.qr{width:176px;aspect-ratio:1;border:1px solid var(--rule);border-radius:3px;overflow:hidden;line-height:0;box-shadow:var(--shadow)}
.qr img{display:block;width:100%;height:100%}
.sec-open{display:grid;gap:6px}
/* Το otpauth:// ανοίγει την εφαρμογή μόνο στο ίδιο κινητό· σε υπολογιστή με ποντίκι δεν έχει νόημα. */
@media (hover:hover) and (pointer:fine) and (min-width:1024px){ .sec-open{display:none} }
.sec-key{display:grid;gap:8px;padding:14px 16px;background:var(--panel-2);border:1px solid var(--rule-soft);border-radius:3px}
.sec-key .field-k{margin:0}
.sec-key-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px}
.totp-secret{
  font-family:ui-monospace,'SF Mono','Cascadia Mono',Consolas,'Liberation Mono',monospace;font-size:15px;font-weight:600;
  letter-spacing:.06em;line-height:1.55;color:var(--ink);overflow-wrap:anywhere;user-select:all;
}
.sec-copy{padding:0 14px;background:var(--panel)}

/* #/security: ο τρόπος του 2FA σαν γραμμή καταλόγου, το PIN σαν φόρμα. */
.sec-method{display:grid;grid-template-columns:44px minmax(0,1fr);align-items:center;gap:14px}
.sec-method-ico{background:var(--danger-soft);color:var(--danger)}
.sec-method-ico.is-on{background:var(--hue-tint);color:var(--hue)}
.sec-enable{justify-self:start}
.sec-pin-foot{display:flex;justify-content:flex-end}
.tag.is-ok{background:var(--ok-soft);color:var(--ok)}

/* Χρήστες: ο δεύτερος κωδικός και ο μηδενισμός του. */
.mfa-state{margin:0;font-weight:600}
.mfa-slot{margin-top:4px}
.mfa-slot:empty{display:none}
.mfa-confirm .hint{color:var(--ink)}

/* ===== υπολογιστής: πλευρικό μενού ===== */
@media (min-width:1024px){
  #app{display:grid;grid-template-columns:var(--rail-w) minmax(0,1fr)}
  .topbar{display:none}
  #view{grid-column:2;grid-row:1;max-width:1200px;margin:0;padding:32px 40px 56px}
  .nav{
    grid-column:1;grid-row:1;position:sticky;top:0;height:100dvh;
    display:flex;flex-direction:column;
    background:var(--hue-deep);color:var(--on-hue);border-top:0;padding:0;
  }
  .navbrand{
    display:flex;align-items:center;min-height:64px;padding:0 22px;color:inherit;text-decoration:none;
    border-bottom:1px solid color-mix(in srgb,var(--on-hue) 14%,transparent);
  }
  .navbrand .wordmark{font-size:25px}
  .nav :focus-visible{outline-color:var(--gold);outline-offset:-3px}
  .navlinks{display:flex;flex-direction:column;gap:2px;padding:14px 0}
  .navlink{
    flex-direction:row;justify-content:flex-start;gap:14px;min-height:48px;padding:0 22px;
    color:color-mix(in srgb,var(--on-hue) 72%,var(--hue-deep));
    font-size:12px;font-weight:600;letter-spacing:.1em;
  }
  .navlink .ico{width:20px;height:20px}
  .navlink:hover{color:var(--on-hue);background:color-mix(in srgb,var(--on-hue) 6%,transparent)}
  .navlink:active{background:color-mix(in srgb,var(--on-hue) 10%,transparent)}
  .navlink[aria-current="page"]{color:var(--on-hue);font-weight:700;background:color-mix(in srgb,var(--on-hue) 9%,transparent)}
  .navlink[aria-current="page"]::before{top:9px;bottom:9px;left:0;right:auto;width:3px;height:auto;border-radius:0 2px 2px 0}
  .navfoot{
    display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:auto;
    padding:12px 8px 14px 22px;border-top:1px solid color-mix(in srgb,var(--on-hue) 14%,transparent);
  }
  .navwho{display:flex;flex-direction:column;gap:3px;min-width:0}
  .navname{font-size:13.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .navrole{font-size:10.5px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:color-mix(in srgb,var(--on-hue) 72%,var(--hue-deep))}
  .toast{left:calc(50% + var(--rail-w) / 2);bottom:28px}
  body.is-public #app{display:block}
  body.is-public .toast{left:50%}
  body.is-public #view{margin:0 auto;padding-top:calc(var(--safe-t) + 12dvh)}
  /* στον υπολογιστή δεν υπάρχει αντίχειρας: η φόρμα ακολουθεί τον τίτλο */
  .gate{min-height:0}
  .gate-form{margin-top:0}
}

/* ===== Σάρωση (Task 5): #/scan, #/loc/:id, #/item/:id ===== */
/* Στο κινητό η σελίδα γεμίζει το ύψος ως την κάτω μπάρα: το πεδίο και η κάμερα κάθονται κάτω, στον αντίχειρα. */
.scanpage{
  display:flex;flex-direction:column;gap:16px;
  min-height:calc(100dvh - var(--topbar-h) - var(--safe-t) - var(--tabbar-h) - var(--safe-b) - 52px);
}
.scanpage .pagehead{margin-bottom:0}
/* Το σκόπευτρο: πεδίο απόχρωσης (όπως η κεφαλίδα), που γίνεται η εικόνα της κάμερας. */
.scan-stage{
  position:relative;overflow:hidden;display:grid;place-items:center;
  width:100%;aspect-ratio:16/10;max-height:38dvh;min-height:180px;
  background:var(--hue-deep);color:var(--on-hue);border-radius:2px;box-shadow:var(--shadow);
}
.scan-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:none;background:var(--hue-deep)}
.scan-stage.is-live .scan-video{display:block}
.scan-stage.is-live .scan-idle{display:none}
/* γωνίες πλαισίου: πού μπαίνει η ετικέτα */
.scan-reticle{
  --c:color-mix(in srgb,var(--on-hue) 70%,transparent);--l:22px;--w:2.5px;
  position:absolute;inset:16% 9%;pointer-events:none;
  background:
    linear-gradient(var(--c),var(--c)) top left/var(--l) var(--w),
    linear-gradient(var(--c),var(--c)) top left/var(--w) var(--l),
    linear-gradient(var(--c),var(--c)) top right/var(--l) var(--w),
    linear-gradient(var(--c),var(--c)) top right/var(--w) var(--l),
    linear-gradient(var(--c),var(--c)) bottom left/var(--l) var(--w),
    linear-gradient(var(--c),var(--c)) bottom left/var(--w) var(--l),
    linear-gradient(var(--c),var(--c)) bottom right/var(--l) var(--w),
    linear-gradient(var(--c),var(--c)) bottom right/var(--w) var(--l);
  background-repeat:no-repeat;
}
.scan-stage.is-live .scan-reticle{--c:var(--on-hue)}
/* η χρυσή γραμμή ανάγνωσης: εκεί διαβάζει ο αναγνώστης (οριζόντια, γύρω από το κέντρο) */
.scan-line{position:absolute;left:6%;right:6%;top:50%;height:2px;margin-top:-1px;background:var(--gold);opacity:0;transition:opacity .2s ease-out}
.scan-stage.is-live .scan-line{opacity:.9}
.scan-idle{position:relative;display:grid;justify-items:center;gap:6px;padding:0 15%;text-align:center}
.scan-idle .ico{width:30px;height:30px;color:color-mix(in srgb,var(--on-hue) 82%,transparent);margin-bottom:4px}
.scan-idle-t{margin:0;font-size:15.5px;font-weight:700;letter-spacing:.01em}
.scan-idle-s{margin:0;font-size:13px;line-height:1.4;color:color-mix(in srgb,var(--on-hue) 76%,var(--hue-deep));text-wrap:pretty}
@media (prefers-reduced-motion: no-preference){
  .scan-stage.is-starting .scan-idle .ico{animation:camwait 1.2s ease-in-out infinite}
  @keyframes camwait{50%{opacity:.35}}
}
.scan-notice{margin:0;padding:11px 14px;background:var(--danger-soft);color:var(--danger);border-radius:3px;font-size:14px;font-weight:600;line-height:1.4}
.scan-notice:empty{display:none}
.scan-notice-code{display:block;margin-top:3px;font-weight:800;color:var(--ink);overflow-wrap:anywhere}
.scan-dock{margin-top:auto;display:grid;gap:14px}
.scan-entry-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}
.scan-entry-row input{width:100%;height:52px;padding:0 14px;font-weight:600;letter-spacing:.03em}
.scan-entry-row .btn{min-height:52px;padding:9px 20px}

/* ---- θέση / είδος ---- */
.backlink{
  display:inline-flex;align-items:center;gap:4px;min-height:48px;margin:-14px 0 2px -10px;padding:0 12px 0 6px;
  color:var(--hue);text-decoration:none;border-radius:3px;
  font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  transition:background-color .15s ease-out;
}
.backlink:hover{background:var(--panel-2)}
.backlink .ico{width:18px;height:18px}
.resview{display:block}
.res-main{display:grid;gap:18px;min-width:0}
.reshead{display:grid;gap:8px;min-width:0}
.reshead h1{margin:0;font-size:23px;font-weight:800;letter-spacing:-.015em;line-height:1.2;text-wrap:balance;overflow-wrap:anywhere}
.reshead h1.loc-code{font-size:28px;letter-spacing:-.02em;line-height:1.1}
/* Οι κωδικοί θέσεων και ειδών δεν σπάνε στην παύλα («A-\n02-3»). */
.loc-code,.tmpl-code,.code-nowrap{white-space:nowrap}
.tags{display:flex;flex-wrap:wrap;gap:6px}
.tag{
  display:inline-flex;align-items:center;padding:3px 9px;border-radius:4px;white-space:nowrap;
  font-size:10.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;line-height:1.5;
  background:var(--panel-2);color:var(--muted);
}
.tag.is-count{background:var(--hue-tint);color:var(--hue)}
.tag.is-off{background:var(--danger-soft);color:var(--danger)}
/* Διάδρομος · Ράφι · Επίπεδο · Θέση: σαν δρομολόγιο */
.locparts{display:flex;margin:6px 0 0;padding:10px 0 0;border-top:1px solid var(--rule)}
.locparts > div{display:grid;gap:2px;padding:0 16px;border-left:1px solid var(--rule-soft)}
.locparts > div:first-child{padding-left:0;border-left:0}
.locparts dt{font-size:10.5px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}
.locparts dd{margin:0;font-size:19px;font-weight:800;letter-spacing:-.01em}
.item-variant{margin:0;font-size:15.5px;font-weight:700;color:var(--hue)}
.item-meta{margin:0;font-size:13px;color:var(--muted);overflow-wrap:anywhere}
.figure{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px 12px;margin-top:6px;padding-top:10px;border-top:1px solid var(--rule)}
.figure-k{font-size:10.5px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);flex-basis:100%}
.figure-n{font-size:28px;font-weight:800;letter-spacing:-.02em;color:var(--ink)}
.res-note{margin:0;padding:11px 14px;background:var(--hue-tint);color:var(--ink);border-radius:3px;font-size:14px;line-height:1.45}
.res-hint{margin:0;font-size:13px;color:var(--muted)}
.res-sheet{overflow:hidden}
/* ο χάρακας του Ήθους (χοντρός + λεπτός) κλείνει κάθε κεφαλή πίνακα */
.sheet-head{
  display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:13px 16px 11px;
  border-bottom:2.5px solid var(--hue);box-shadow:inset 0 -5px 0 -4px var(--rule);
}
.sheet-head h2{margin:0;font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--ink)}
.sheet-aside{font-size:13px;color:var(--muted);white-space:nowrap}
.rows{list-style:none;margin:0;padding:0}
.row{
  display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;
  min-height:64px;padding:10px 16px;border-bottom:1px solid var(--rule-soft);
  color:inherit;text-decoration:none;transition:background-color .15s ease-out;
}
.rows > li:last-child .row{border-bottom:0}
a.row:hover{background:var(--panel-2)}
a.row:active{background:var(--rule-soft)}
a.row:focus-visible{outline-offset:-3px}
.row-main{display:grid;gap:2px;min-width:0}
.row-title{font-weight:600;line-height:1.35;overflow-wrap:anywhere}
.row-code{font-size:19px;font-weight:800;letter-spacing:-.01em;line-height:1.2;white-space:nowrap}
.row-sub{font-size:13px;color:var(--muted);overflow-wrap:anywhere}
.qty-cell{white-space:nowrap;text-align:right}
.qty-n{font-size:19px;font-weight:800;letter-spacing:-.01em}
.qty-u{margin-left:4px;font-size:12px;font-weight:600;color:var(--muted)}
/* «σε μέτρηση» στη θέση του αριθμού (ο αποθηκάριος δεν βλέπει ποσότητα υπό μέτρηση, ποτέ 0) */
.qty-blind{white-space:nowrap;text-align:right;font-size:13.5px;font-weight:700;color:var(--hue)}
.figure-blind{font-size:19px;font-weight:800;letter-spacing:-.01em}
.res-empty{margin:0;padding:18px 16px;color:var(--muted);font-size:14px}
/* σκελετός όσο φορτώνει */
.skel{display:block;height:14px;border-radius:2px;background:var(--rule-soft)}
.reshead .skel:first-child{height:28px}
.skel-rows{display:grid;gap:18px;padding:22px 16px}
@media (prefers-reduced-motion: no-preference){
  .skel{background:linear-gradient(90deg,var(--rule-soft) 30%,var(--panel-2) 50%,var(--rule-soft) 70%) 0 0/300% 100%;animation:skel 1.2s linear infinite}
  @keyframes skel{from{background-position:100% 0}to{background-position:0 0}}
}

/* Ενέργειες: στο κινητό κολλημένες πάνω από την κάτω μπάρα, η Ανάληψη σε όλο το πλάτος. */
.dock{
  position:sticky;bottom:calc(var(--tabbar-h) + var(--safe-b));z-index:30;
  margin:18px -16px 0;padding:12px 16px;background:var(--ground);border-top:1px solid var(--rule);
}
.dock-title{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;margin:0}
.actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.actions .btn{min-height:48px;padding:8px 10px;text-align:center;line-height:1.25}
.actions .btn-quiet{background:var(--panel)}
.actions .btn-quiet:hover{background:var(--panel-2)}
.actions .act-wide{grid-column:1/-1;min-height:52px;font-size:15.5px}
.actions .act-warn{color:var(--danger)}
.actions .act-warn:hover{background:var(--danger-soft)}

@media (min-width:1024px){
  .scanpage{min-height:0;max-width:600px}
  .scan-stage{max-height:none}
  .scan-dock{margin-top:4px}
  .backlink{margin-top:-18px}
  .resview{display:grid;grid-template-columns:minmax(0,1fr) 288px;gap:32px;align-items:start}
  .dock{
    position:sticky;top:32px;bottom:auto;margin:0;padding:16px;
    background:var(--panel);border:1px solid var(--rule);border-radius:2px;box-shadow:var(--shadow);
  }
  .dock-title{position:static;width:auto;height:auto;overflow:visible;clip-path:none;margin:0 0 12px;
    font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--ink);
    padding-bottom:9px;border-bottom:2.5px solid var(--hue);box-shadow:inset 0 -5px 0 -4px var(--rule)}
  .actions{grid-template-columns:1fr}
  .actions .btn-quiet{background:transparent}
  .reshead h1.loc-code{font-size:28px}
}

/* ===== Κινήσεις και μετρήσεις (Task 6): #/move/*, #/counts, #/count/:id, #/approvals ===== */
/* Μία στήλη βημάτων (Είδος · Από · Ποσότητα · Σκοπός · Προς), η ενέργεια στο dock κάτω από τον αντίχειρα. */
.res-main > .pagehead{margin:0}
.flow{display:grid;gap:22px}
.step{display:grid;gap:9px;min-width:0}
.step-k{margin:0;font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);line-height:1.2}

/* επιλεγμένο είδος / θέση: μία γραμμή με «Αλλαγή» */
/* δεσμευμένα για παραγγελία (R22): στο ράφι, αλλά όχι για μετακίνηση */
.qty-held{display:grid;gap:4px;margin-top:10px;padding:12px 14px;background:var(--gold-soft);border:1px solid color-mix(in srgb,var(--gold) 40%,var(--rule));border-radius:3px}
.qty-held-t{margin:0;font-size:15px;font-weight:700;line-height:1.4;color:var(--ink)}
.qty-held .hint{color:var(--ink)}
.picked{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;min-height:64px;padding:8px 8px 8px 16px}
.picked-change{min-width:92px}

/* «Σαρώστε …»: εικονίδιο, οδηγία και πεδίο κωδικού για όποιον δεν έχει σαρωτή */
.prompt{display:grid;gap:14px;padding:16px}
.prompt-head{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;align-items:start}
.prompt-head > .ico{width:26px;height:26px;color:var(--hue);margin-top:1px}
.prompt-t{font-size:15.5px;font-weight:700;line-height:1.3}
.prompt .scan-entry-row .btn{min-width:96px}

/* επιλογή από λίστα: όλη η γραμμή πατιέται· η επιλογή φαίνεται με τον κύκλο δεξιά και το απαλό γέμισμα */
button.row{width:100%;border:0;border-bottom:1px solid var(--rule-soft);background:transparent;font:inherit;text-align:left;cursor:pointer}
.rows > li:last-child button.row{border-bottom:0}
button.row:hover{background:var(--panel-2)}
button.row:active{background:var(--rule-soft)}
button.row:focus-visible{outline-offset:-3px}
.row.opt[role="radio"]{grid-template-columns:minmax(0,1fr) auto 22px}
.opt-mark{width:22px;height:22px;border-radius:50%;border:2px solid var(--rule);background:var(--panel);transition:border-color .15s ease-out, box-shadow .15s ease-out}
.row.opt[aria-checked="true"]{background:var(--hue-tint)}
.row.opt[aria-checked="true"] .opt-mark{border-color:var(--hue);box-shadow:inset 0 0 0 4px var(--panel), inset 0 0 0 11px var(--hue)}

/* σκοπός ανάληψης: τρία κουμπιά σε μία γραμμή */
.seg{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;padding:4px;background:var(--panel-2);border:1px solid var(--rule);border-radius:3px}
.seg-b{min-height:52px;border:0;border-radius:2px;background:transparent;color:var(--muted);font-size:14px;font-weight:700;cursor:pointer;transition:background-color .15s ease-out, color .15s ease-out}
.seg-b:hover{color:var(--ink)}
.seg-b[aria-checked="true"]{background:var(--hue-deep);color:var(--on-hue);box-shadow:var(--shadow)}
:root[data-theme="dark"] .seg-b[aria-checked="true"]{background:var(--hue-tint)}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .seg-b[aria-checked="true"]{background:var(--hue-tint)} }
.seg-b:focus-visible{outline-offset:-2px}

/* άλλη θέση από την πρόταση: ερώτηση, όχι παράθυρο */
.confirm{display:grid;gap:12px;padding:14px 16px;background:var(--gold-soft);border:1px solid color-mix(in srgb,var(--gold) 55%,var(--rule));border-radius:3px}
.nowrap{white-space:nowrap}
.confirm-q{margin:0;font-size:15.5px;font-weight:700;line-height:1.4;color:var(--ink)}
.confirm-acts{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.confirm-acts .btn-quiet{background:var(--panel)}

/* dock των κινήσεων: λάθος πάνω από το κουμπί, ώστε να το διαβάζει ο αντίχειρας πριν ξαναπατήσει */
.move-dock{display:grid;gap:10px}
.move-dock .btn-block{min-height:56px;font-size:16px}
.move-dock .btn-quiet{background:var(--panel)}
.dock-hint{text-align:center}

/* «Έγινε» */
.done{display:grid;gap:8px;padding:18px 16px 16px}
.done-head{display:flex;align-items:center;gap:12px;margin-bottom:4px}
.done-head h2{margin:0;font-size:22px;font-weight:800;letter-spacing:-.015em;line-height:1.25;text-wrap:balance}
.done-mark{display:grid;place-items:center;width:36px;height:36px;flex:none;border-radius:50%;background:var(--ok-soft);color:var(--ok)}
.done-mark .ico{width:20px;height:20px}
.done-what{margin:0;font-size:15.5px;line-height:1.45}
.done-what strong{font-weight:800}
.done-path{margin:0;color:var(--muted);font-size:14px;line-height:1.45}
.done-undo{display:flex;align-items:center;flex-wrap:wrap;gap:6px 14px;margin-top:8px;padding-top:12px;border-top:1px solid var(--rule-soft)}
.done-undo .btn{min-width:132px}
@media (prefers-reduced-motion: no-preference){
  .done{animation:donein .32s cubic-bezier(.16,1,.3,1)}
  .done-mark{animation:donemark .42s cubic-bezier(.16,1,.3,1)}
  @keyframes donein{from{opacity:.4;transform:translateY(6px)}to{opacity:1;transform:none}}
  @keyframes donemark{from{transform:scale(.6)}to{transform:none}}
}

/* επανέλεγχος μετά την κίνηση */
.recheck{display:grid;gap:12px;padding:16px}
.recheck-q{margin:0;font-size:17px;font-weight:700;line-height:1.35}
.recheck .hint{margin-top:-6px}
.recheck-acts{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.recheck-acts .btn{line-height:1.25}
.recheck-result{display:flex;align-items:flex-start;gap:10px;margin:0;font-size:15px;line-height:1.45}
.recheck-result .ico{color:var(--ok);margin-top:1px}

/* #/counts */
.counts-page{display:grid;gap:18px}
.tasks .tag,.due .row .btn{justify-self:end}
.due .row .btn{min-width:96px}
.due-more{padding:0 16px 14px}
.note-link{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;min-height:52px;text-decoration:none;font-weight:600;transition:filter .15s ease-out}
.note-link .ico{color:var(--hue)}
.note-link:hover{filter:brightness(.97)}
.note-go{font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--hue)}

/* #/count/:id: είδος αριστερά, ποσότητα δεξιά */
.cline{display:grid;grid-template-columns:minmax(0,1fr) 176px;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid var(--rule-soft)}
.rows > li.cline:last-child{border-bottom:0}
@media (max-width:359px){ .cline{grid-template-columns:1fr} }
@media (prefers-reduced-motion: no-preference){
  .cline.is-bumped{animation:bump .6s cubic-bezier(.16,1,.3,1)}
  @keyframes bump{from{background:var(--gold-soft)}to{background:transparent}}
}

/* #/approvals */
.approvals{display:grid;gap:18px}
.sheet-head h2.approval-code{font-size:19px;font-weight:800;letter-spacing:-.01em;text-transform:none;white-space:nowrap}
.aline{display:grid;gap:10px;padding:12px 16px;border-bottom:1px solid var(--rule-soft)}
.afigs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.afig{display:grid;gap:2px}
.afig-k{font-size:10.5px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}
.afig-v{font-size:19px;font-weight:800;letter-spacing:-.01em}
.afig.is-down .afig-v{color:var(--danger)}
.afig.is-up .afig-v{color:var(--ok)}
.approval-acts{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:12px 16px 16px;border-top:1px solid var(--rule)}
.approval-done{grid-column:1/-1;display:flex;align-items:center;gap:8px;margin:0;min-height:48px;font-weight:600}
.approval-done .ico{color:var(--ok)}
.approval.is-decided .rows{opacity:.6}

@media (min-width:1024px){
  .move-dock{gap:12px}
  .flow{max-width:640px}
  .counts-page,.approvals{max-width:860px}
  .aline{grid-template-columns:minmax(0,1fr) 380px;align-items:center}
  .approval-acts{grid-template-columns:auto auto;justify-content:end}
  .approval-acts .btn{min-width:140px}
}

/* κάμερα στις κινήσεις και στις μετρήσεις: η εικόνα στο περιεχόμενο, το κουμπί στο dock */
.cam-stage{max-height:34dvh}
.cam-row{display:grid;gap:12px}
.move-dock .cam-btn{min-height:52px;font-size:15px}

/* ===== Κατάλογος (Task 7): #/items, #/item/new, #/item/:id/edit, #/labels ===== */
/* Φόρμες σε τυπωμένα φύλλα: κάθε ενότητα έχει τον χάρακα του Ήθους στην κεφαλή· η αποθήκευση στο dock. */
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.items-search{display:grid;gap:12px}
.items-search input[type="search"],.add-form input[type="search"]{width:100%;height:52px;padding:0 14px}
.seg.seg-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.skel-li{padding:25px 16px;border-bottom:1px solid var(--rule-soft)}
.more-row{padding:0 16px 14px}
.more-row .btn{width:100%}
.more-row:has(> .btn[hidden]){display:none}

.form-grid{display:grid;gap:16px;padding:16px}
.form-stack{display:grid;gap:18px;padding:16px}
.form-grid > *,.form-stack > *{min-width:0}
.field select{width:100%;height:52px;padding:0 40px 0 14px;appearance:none;cursor:pointer;background-color:var(--panel);
  background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);
  background-size:6px 6px;background-repeat:no-repeat;background-position:calc(100% - 21px) 50%,calc(100% - 15px) 50%}
[aria-invalid="true"]{border-color:var(--danger) !important;box-shadow:0 0 0 3px var(--danger-soft) !important}
.sheet-hint{padding:0 16px 14px}

/* χρώματα / νούμερα: ετικέτες που φεύγουν με ένα πάτημα */
.token-field .scan-entry-row .btn{min-height:52px}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 0;padding:0;list-style:none}
.chip{display:inline-flex;align-items:center;gap:8px;min-height:48px;padding:0 12px 0 14px;
  border:1px solid var(--rule);border-radius:3px;background:var(--panel-2);color:var(--ink);
  font-weight:600;cursor:pointer;transition:background-color .15s ease-out,border-color .15s ease-out,color .15s ease-out}
.chip .ico{width:16px;height:16px;color:var(--muted);transition:color .15s ease-out}
@media (hover:hover){
  .chip:hover{border-color:var(--danger);background:var(--danger-soft)}
  .chip:hover .ico{color:var(--danger)}
}
.chip:active{transform:translateY(1px)}
.presets{display:flex;flex-wrap:wrap;gap:8px}
.combo-sum{margin:0;padding:12px 14px;background:var(--panel-2);border-radius:3px;font-size:14px;line-height:1.45}
.combo-sum strong{font-size:15.5px;font-weight:800}
.combo-sum.is-over{background:var(--danger-soft)}
.combo-over{color:var(--danger);font-weight:700}

/* πλέγμα χρώμα × νούμερο: το χρώμα μένει στη θέση του όταν τα νούμερα κυλούν οριζόντια */
.vgrid-wrap{overflow-x:auto;overscroll-behavior-x:contain}
.vgrid-wrap:focus-visible{outline-offset:-3px}
.vgrid{border-collapse:separate;border-spacing:0;width:100%}
.vgrid th{font-size:10.5px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);text-align:center;padding:10px 6px}
.vgrid thead th{border-bottom:1px solid var(--rule)}
.vgrid .vg-corner,.vgrid .vg-color{position:sticky;left:0;z-index:1;background:var(--panel);text-align:left;padding-left:16px}
.vgrid .vg-color{font-size:14px;letter-spacing:0;text-transform:none;color:var(--ink);font-weight:600;white-space:nowrap;border-right:1px solid var(--rule-soft)}
.vgrid td{padding:6px;text-align:center;border-bottom:1px solid var(--rule-soft)}
.vgrid tbody tr:last-child > *{border-bottom:0}
.vg-in{width:64px;height:48px;padding:0 6px;text-align:center;font-size:16px;font-weight:700}
.vg-in:disabled{background:var(--panel-2);color:var(--muted)}
.vgrid td.is-archived .vg-in{border-style:dashed;color:var(--muted)}
.vg-none{background:repeating-linear-gradient(-45deg,transparent 0 6px,var(--rule-soft) 6px 7px)}
.swatch{display:inline-block;width:14px;height:14px;margin-right:8px;vertical-align:-2px;border-radius:2px;border:1px solid var(--rule)}

/* κωδικοί συνδυασμών: μία γραμμή ανά συνδυασμό, ανοίγει για αλλαγή */
.vrow{border-bottom:1px solid var(--rule-soft)}
.rows > li:last-child .vrow{border-bottom:0}
.vrow > summary{display:grid;grid-template-columns:minmax(0,1fr) auto 20px;align-items:center;gap:12px;min-height:64px;padding:10px 16px;cursor:pointer;list-style:none;transition:background-color .15s ease-out}
.vrow > summary::-webkit-details-marker{display:none}
.vrow > summary::after{content:"";width:8px;height:8px;margin-left:4px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg) translateY(-3px);transition:transform .15s ease-out}
.vrow[open] > summary::after{transform:rotate(225deg) translateY(-1px)}
.vrow > summary:hover{background:var(--panel-2)}
.vrow > summary:focus-visible{outline-offset:-3px}
.vrow[open] > summary{background:var(--panel-2)}
.vrow-body{padding-top:14px}
.codes-fold > summary{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:56px;padding:0 16px;cursor:pointer;list-style:none;font-weight:600;color:var(--hue);transition:background-color .15s ease-out}
.codes-fold > summary::-webkit-details-marker{display:none}
.codes-fold > summary::after{content:"";width:8px;height:8px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg) translateY(-3px);transition:transform .15s ease-out}
.codes-fold[open] > summary{border-bottom:1px solid var(--rule)}
.codes-fold[open] > summary::after{transform:rotate(225deg) translateY(-1px)}
.codes-fold > summary:hover{background:var(--panel-2)}
.codes-fold > summary:focus-visible{outline-offset:-3px}
.size-row{border-top:1px solid var(--rule)}
.check{display:grid;grid-template-columns:22px minmax(0,1fr);gap:12px;align-items:start;min-height:48px;padding:6px 0;cursor:pointer}
.check input{width:22px;height:22px;margin:2px 0 0;accent-color:var(--hue)}
.check > span{display:grid;gap:2px}

/* θέση συλλογής */
.slot-qty{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.slot-now{margin:0;font-size:14px;color:var(--muted)}
.slot-now strong{color:var(--ink);font-weight:800}
.new-vendor{padding:14px;background:var(--panel-2);border:1px solid var(--rule-soft);border-radius:3px}
.new-vendor-acts{display:grid;gap:10px}
.new-vendor-acts .btn{justify-self:start}
@media (max-width:359px){ .slot-qty{grid-template-columns:1fr} }

/* σύνδεσμοι στην κεφαλή του είδους: Επεξεργασία (υπεύθυνος), Ετικέτα */
.head-links{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
.head-links .btn{flex:1 1 140px;background:var(--panel)}
.head-links .btn:hover{background:var(--panel-2)}

/* #/labels */
.picks:empty{display:none}
.picks,.picker{border-top:1px solid var(--rule-soft)}
.picker-head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;padding:14px 16px;background:var(--hue-tint)}
.picker button.row .ico,.picks button.row .ico{color:var(--hue)}
.lline{display:grid;grid-template-columns:minmax(0,1fr) 48px;grid-template-areas:"main rm" "qty qty";align-items:center;gap:10px 12px;padding:12px 8px 14px 16px;border-bottom:1px solid var(--rule-soft)}
.lline:last-child{border-bottom:0}
.lline > .row-main{grid-area:main}
.lline > .qty{grid-area:qty;margin-right:8px}
.lline > .line-rm{grid-area:rm;width:48px;height:48px;color:var(--muted)}
.lline > .line-rm:hover{color:var(--danger);background:var(--danger-soft)}
.labels-list .res-empty[hidden]{display:none}
a.btn[aria-disabled="true"]{opacity:.45;cursor:not-allowed;pointer-events:none}
@media (prefers-reduced-motion: no-preference){
  .lline.is-bumped{animation:bump .6s cubic-bezier(.16,1,.3,1)}
}

@media (min-width:640px){
  .form-grid{grid-template-columns:1fr 1fr;column-gap:14px}
  .form-grid > .span-2{grid-column:1/-1}
  .lline{grid-template-columns:minmax(0,1fr) 176px 48px;grid-template-areas:"main qty rm"}
  .lline > .qty{margin-right:0}
}
@media (min-width:1024px){
  .head-links .btn{flex:0 0 auto;min-width:140px}
}

/* ===== Εργασίες, λίστες, αναφορές (Task 8): #/tasks, #/lists, #/lists/*, #/reports ===== */
.work-page,.low-page,.rep-page,.admin-page{display:grid;gap:18px}
/* γραμμή κόμβου: τίτλος και εξήγηση, ο αριθμός δεξιά, βελάκι */
.row.hub-row{grid-template-columns:minmax(0,1fr) auto 12px}
.hub-n{min-width:2ch;text-align:right;font-size:19px;font-weight:800;letter-spacing:-.01em;color:var(--muted)}
.hub-n.is-on{color:var(--ink)}
.hub-go{width:8px;height:8px;border-right:2px solid var(--muted);border-top:2px solid var(--muted);transform:rotate(45deg);justify-self:end;transition:transform .15s ease-out,border-color .15s ease-out}
a.row:hover .hub-go{transform:translateX(2px) rotate(45deg);border-color:var(--hue)}
.work-counts .row{grid-template-columns:minmax(0,1fr) 12px}
.work-counts .more-row{padding-top:12px;border-top:1px solid var(--rule-soft)}

/* αναπλήρωση: όσα λείπουν, με το + της μεταφοράς */
.repl-need .qty-n{color:var(--hue)}
.repl-from strong{color:var(--ink);font-weight:800}
.repl-none{color:var(--danger)}
.repl-need.is-blocked .qty-n{color:var(--muted)}
/* είδος που δεν φορτώθηκε: το λέμε, με «Ξανά» */
.load-fail{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.load-fail-t{margin:0;font-size:14px;font-weight:600;color:var(--muted)}
.load-fail .btn{min-width:96px;background:var(--panel)}
.repl-failed .row{grid-template-columns:minmax(0,1fr) auto}
.repl-failed .load-fail-t{display:none}
.repl-failed .row-title{color:var(--muted)}

/* χαμηλό απόθεμα: η ερώτηση της ροής 9 σε κάθε γραμμή */
.low-line{display:grid;gap:10px;padding:14px 16px 16px;border-bottom:1px solid var(--rule-soft)}
.rows > li.low-line:last-child{border-bottom:0}
.low-head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:12px}
.low-fig{white-space:nowrap;text-align:right}
.low-min{font-size:12.5px;font-weight:600;color:var(--muted)}
.low-q{margin:0;font-size:15.5px;font-weight:600;line-height:1.45;text-wrap:pretty}
.low-q strong{font-weight:800}
.low-q.is-none{font-weight:400;color:var(--muted);font-size:14px}
.low-more{margin-top:-4px}
.low-acts{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.low-acts .btn{min-height:52px;background:var(--panel)}
.low-acts .low-yes .ico{color:var(--ok)}
.low-acts .low-no{color:var(--danger)}
.low-acts .low-no:hover{background:var(--danger-soft)}
.low-ok{grid-column:1/-1;display:flex;align-items:center;gap:8px;margin:0;min-height:52px;font-weight:600}
.low-ok .ico{color:var(--ok)}
.low-line{transition:background-color .3s ease-out}
.low-line.is-confirmed{background:var(--ok-soft)}

/* αναφορές */
.rep-period{display:grid;gap:8px}
.rep-range{padding-left:2px}
.rep-grid{display:grid;gap:18px}
.rep-body{display:grid;gap:8px;justify-items:start;padding:16px 16px 18px}
.rep-body > .formerr{justify-self:stretch}
.rep-fig{margin:0;font-size:34px;font-weight:800;letter-spacing:-.02em;line-height:1.1;color:var(--ink)}
.rep-text{margin:0;max-width:52ch;line-height:1.5}

/* ===== Διαχείριση (Task 8): #/menu, #/admin/* ===== */
.field-k{font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);line-height:1.2}
.linkbtn{display:inline;min-height:0;padding:0;border:0;background:none;color:var(--hue);font:inherit;font-weight:600;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.linkbtn:hover{color:var(--ink)}
/* από / ως σε μία γραμμή */
.range{display:grid;grid-template-columns:auto minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:8px 10px}
.range input{width:100%;height:52px;padding:0 12px;text-align:center;font-weight:700}
.field .range-l{font-size:13px;font-weight:600;color:var(--muted);letter-spacing:0;text-transform:none}

/* πρότυπο θέσεων: η προεπισκόπηση ακριβώς πάνω από το κουμπί */
.tmpl-foot{display:grid;gap:12px;padding:0 16px 16px}
.tmpl-preview{display:grid;gap:6px;padding:14px 16px;background:var(--hue-tint);border-radius:3px;min-height:72px}
.tmpl-preview.is-error{background:var(--danger-soft)}
.tmpl-count{margin:0;font-size:19px;font-weight:800;letter-spacing:-.01em;color:var(--ink)}
.tmpl-preview.is-idle{background:var(--panel-2)}
.tmpl-preview.is-idle .tmpl-count{font-size:14px;font-weight:400;color:var(--muted);letter-spacing:0}
.tmpl-preview.is-error .tmpl-count{font-size:14px;font-weight:600;color:var(--danger);letter-spacing:0}
.tmpl-codes{margin:0;font-size:14px;font-weight:600;color:var(--hue);word-spacing:.35em;overflow-wrap:anywhere}
.tmpl-codes:empty,.tmpl-note:empty{display:none}

/* λίστα θέσεων και χρηστών: <details> ανά γραμμή (όπως οι συνδυασμοί) */
.list-search{padding:14px 16px;border-bottom:1px solid var(--rule)}
.list-search input{width:100%;height:52px;padding:0 14px}
.vrow > summary .tags{justify-content:flex-end}
.loc-row.row{grid-template-columns:minmax(0,1fr) auto}
.loc-save{display:grid;gap:10px;justify-items:start}
.loc-save .formerr{justify-self:stretch}
.loc-save .btn{min-width:160px}
.loc-more{padding:12px 16px;border-top:1px solid var(--rule-soft)}
.loclab-opts{display:grid;gap:16px}
.loclab-scope{padding:0 16px 14px}
.loclab-scope .linkbtn{margin-left:4px}
.me-mark{font-weight:400;color:var(--muted)}
.add-user{border-top:1px solid var(--rule)}
.add-user > summary .ico{color:var(--hue)}
.nu-foot{display:grid;gap:10px;justify-items:start}
.nu-foot .formerr{justify-self:stretch}
.nu-foot .btn{min-width:180px}
.menu-head .sub strong{color:var(--ink);font-weight:700}
.menu-out{display:grid;gap:10px;margin-top:6px}
.menu-logout{background:var(--panel)}

@media (max-width:359px){ .range{grid-template-columns:auto minmax(0,1fr)} }
@media (min-width:1024px){
  .work-page,.low-page{max-width:860px}
  .rep-page{max-width:980px}
  .rep-grid{grid-template-columns:1fr 1fr;align-items:start}
  .rep-period{grid-template-columns:420px auto;align-items:center;gap:16px}
  .admin-narrow{max-width:720px}
  /* θέσεις: η λίστα σε πλάτος, οι ετικέτες σε στήλη δίπλα */
  .admin-cols{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:24px;align-items:start}
  .loclab-sheet{position:sticky;top:32px}
  .tmpl-foot{grid-template-columns:minmax(0,1fr) 280px;align-items:end;column-gap:16px}
  .tmpl-foot .formerr{grid-column:1/-1;grid-row:1}
  .tmpl-foot .tmpl-go{min-height:72px}
  .low-acts{grid-template-columns:repeat(2,minmax(0,200px))}
}

/* ===== Οδηγός πρώτης χρήσης (Task 8): #/setup ===== */
.wiz{display:grid;gap:18px}
.wiz-steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin:0;padding:0;list-style:none}
.wiz-step{position:relative;display:grid;justify-items:center;gap:6px;width:100%;min-height:64px;padding:12px 4px 8px;
  --wiz-bar:var(--rule);border:0;box-shadow:inset 0 3px 0 var(--wiz-bar);border-radius:0;background:transparent;color:var(--muted);cursor:pointer;
  font-size:11px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;line-height:1.1;transition:color .15s ease-out,box-shadow .15s ease-out}
.wiz-step:hover{color:var(--ink)}
.wiz-step:focus-visible{outline-offset:-2px}
.wiz-step-n{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;border:2px solid currentColor;font-size:13px;letter-spacing:0}
.wiz-step-n .ico{width:15px;height:15px}
.wiz-step-t{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wiz-li.is-past .wiz-step,.wiz-step.is-done{--wiz-bar:var(--hue)}
.wiz-step.is-done{color:var(--hue)}
.wiz-step.is-done .wiz-step-n{background:var(--hue);border-color:var(--hue);color:var(--on-hue)}
:root[data-theme="dark"] .wiz-step.is-done .wiz-step-n{color:var(--ground)}
.wiz-step[aria-current="step"]{color:var(--ink);--wiz-bar:var(--gold)}
.wiz-step[aria-current="step"] .wiz-step-n{border-color:var(--ink)}
.wiz-step[aria-current="step"].is-done .wiz-step-n{border-color:var(--hue)}
.wiz-body{display:grid;gap:18px;padding:16px 16px 18px}
.wiz-body > .tmpl .form-grid{padding:0}
.wiz-body > .tmpl .tmpl-foot{padding:0;margin-top:16px}
.wiz-lead{margin:0;line-height:1.5;max-width:62ch}
.wiz-sub{display:flex;align-items:center;gap:8px;margin:0;font-size:15.5px;font-weight:800;letter-spacing:-.005em}
.wiz-sub .ico{color:var(--ok)}
.wiz-sub-pad{margin-top:6px}
.wiz-more{margin-top:-4px}
.wiz-labels{display:grid;gap:10px}
.wiz-labels:empty{display:none}
.wiz-labels .form-stack{padding:0}
.wiz-note{margin-top:4px}
.wiz-users:empty{display:none}
.wiz-users{border:1px solid var(--rule-soft);border-radius:2px}
.wiz-body .nu-form{padding:0}
.wiz-or{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;color:var(--muted);font-size:13px}
.wiz-or::before,.wiz-or::after{content:"";height:1px;background:var(--rule)}
.wiz-dock{display:flex;gap:8px}
.wiz-dock .btn{flex:1 1 0;min-height:52px;font-size:15px}
.wiz-dock .wiz-back{flex:0 0 auto;padding:9px 14px;background:var(--panel)}
.wiz-dock .wiz-later{background:var(--panel)}

/* κατάλογος: το αρχείο */
.imp{display:grid;gap:14px}
.imp-pick{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:14px;min-height:72px;padding:14px 16px;
  border:1.5px dashed var(--muted);border-radius:3px;background:var(--panel-2);cursor:pointer;transition:border-color .15s ease-out,background-color .15s ease-out}
.imp-pick:hover{border-color:var(--hue);background:var(--hue-tint)}
.imp-pick .ico{width:24px;height:24px;color:var(--hue)}
#imp-file:focus-visible + .imp-pick{outline:2.5px solid var(--focus);outline-offset:2px}
.imp-name{font-weight:700;overflow-wrap:anywhere}
.imp-result{display:grid;gap:12px}
.imp-result:empty{display:none}
.imp-sum{display:grid;gap:6px;margin:0;padding:12px 14px;list-style:none;background:var(--hue-tint);border-radius:3px;font-size:14px;line-height:1.45}
.imp-sum.is-applied{background:var(--ok-soft)}
.imp-sum .is-main{font-size:17px;font-weight:800;letter-spacing:-.01em}
.imp-sum .is-err{color:var(--danger);font-weight:600}

/* πρώτη απογραφή */
.op-figs{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--rule);border-radius:2px}
.op-fig{display:grid;gap:2px;padding:12px 16px}
.op-fig + .op-fig{border-left:1px solid var(--rule)}
.op-n{font-size:28px;font-weight:800;letter-spacing:-.02em;line-height:1.1}
.op-unplaced .op-n{color:var(--hue)}
.op-unplaced.is-zero .op-n{color:var(--ok)}
.op-k{font-size:10.5px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}
.op-flow{gap:16px}
.op-actions{display:grid;gap:10px}
.op-actions .btn-block{min-height:56px;font-size:16px}
.op-actions .cam-btn{background:var(--panel)}
.op-log-sheet .row{min-height:56px}

@media (min-width:1024px){
  .wiz{max-width:860px}
  .wiz-steps{gap:10px}
  .wiz-step{grid-template-columns:auto auto;justify-content:start;align-items:center;gap:10px;padding:14px 8px 10px 2px;font-size:12px;letter-spacing:.08em}
  .wiz-dock{position:sticky;bottom:0;top:auto;max-width:860px;margin:18px 0 0;padding:14px 0 18px;background:var(--ground);border:0;border-top:1px solid var(--rule);border-radius:0;box-shadow:none}
  .wiz-dock .btn{flex:0 0 auto;min-width:160px}
  .wiz-dock .wiz-back{min-width:0}
  .wiz-dock > :last-child{margin-left:auto}
  .op-actions{grid-template-columns:minmax(0,1fr) auto;align-items:start}
  .op-actions .formerr{grid-column:1/-1}
}

/* ===== Παραλαβή (Task 10): #/receive, #/receive/new, #/receive/:id ===== */
/* Το παραστατικό ως τυπωμένο φύλλο: κάθε γραμμή του λέει τι γράφει, σε ποιο είδος πάει και πόσα ήρθαν. */
.rcv-page{max-width:860px}
.rcv-tags{margin-top:5px}
.short-n{white-space:nowrap;text-align:right;font-size:13.5px;font-weight:700;color:var(--danger)}
.short-li{border-bottom:1px solid var(--rule-soft)}
.short-li:last-child{border-bottom:0}
.short-li .row{border-bottom:0}
.short-acts{display:flex;justify-content:flex-end;padding:0 16px 12px}
.short-confirm{margin:0 16px 14px}
.short-confirm .field input{background:var(--panel)}

/* νέα παραλαβή: η πηγή (XML · Επικόλληση · Με το χέρι), ο προμηθευτής, οι γραμμές */
.rcv-new-main .step{gap:10px}
.src-box{display:grid;gap:12px}
.src-panel{display:grid;gap:12px;min-width:0}
.filepick{
  position:relative;display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:14px;
  min-height:88px;padding:16px;cursor:pointer;
  background:var(--panel);border:1.5px dashed color-mix(in srgb,var(--hue) 45%,var(--rule));border-radius:3px;
  transition:border-color .15s ease-out, background-color .15s ease-out;
}
.filepick > .ico{width:30px;height:30px;color:var(--hue)}
.filepick:hover{border-color:var(--hue);background:var(--hue-tint)}
.filepick:focus-within{outline:2px solid var(--focus);outline-offset:2px}
.filepick input[type="file"]{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}
#rcv-paste{width:100%;min-height:132px;padding:12px 14px;resize:vertical;font-size:14px;line-height:1.5}
.dline.is-zero .qinput{border-color:var(--danger)}
/* QR / ΜΑΡΚ μέσω Ήθους (σχέδιο 4, Task 8): τέσσερις καρτέλες στο ίδιο πλάτος· το παραστατικό της ΑΑΔΕ ως έχει */
.seg.seg-4{grid-template-columns:repeat(4,minmax(0,1fr));gap:4px}
.seg-4 .seg-b{font-size:13.5px;padding:0 4px;line-height:1.2}
.rcv-qr-form .cam-btn{min-height:52px}
.rcv-qr-form .field{display:grid;gap:6px}
.rcv-qr-form .scan-entry-row input{letter-spacing:0;font-weight:500}
.rcv-qr-nocam{color:var(--muted)}
.rcv-doc{display:grid;gap:8px;justify-items:start}
.rcv-doc-note{display:flex;align-items:flex-start;gap:8px;width:100%}
.rcv-doc-note .ico{flex:none;width:18px;height:18px;margin-top:1px;color:var(--hue)}
.rcv-doc-note strong{font-variant-numeric:tabular-nums}
.rcv-doc-other{min-height:48px;font-size:14px}
.aline{grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:12px}
.aline .row-main{gap:3px}
.aline-qty{white-space:nowrap;font-size:15px;font-weight:700;padding-top:1px}
.rcv-aade-lock{margin:0}
.rcv-new-main input[readonly]{background:var(--panel-2);color:var(--ink)}
.rcv-cost.is-warn{background:var(--gold-soft)}
.rcv-dup{gap:8px}
.rcv-dup .hint{color:var(--ink)}
.rcv-dup .btn{justify-self:start;background:var(--panel)}

/* καταμέτρηση: η γραμμή του παραστατικού αριστερά, πόσα ήρθαν δεξιά */
/* στο κινητό: η γραμμή πάνω, το «πόσα ήρθαν» από κάτω σε όλο το πλάτος (μεγάλοι στόχοι, χωρίς στενή στήλη) */
.rline{grid-template-columns:minmax(0,1fr);align-items:start;gap:10px}
.rline > .rline-done{justify-content:flex-start;min-height:0}
.rline .row-main{gap:3px}
.rline-item{display:flex;align-items:center;gap:6px;font-size:13.5px;font-weight:700;color:var(--hue);overflow-wrap:anywhere}
.rline-item .ico{flex:none;width:15px;height:15px}
.rline-item.is-none{color:var(--danger)}
.rline-via{font-size:12.5px;line-height:1.4;color:var(--muted)}
.rline-fig{font-size:13px;color:var(--muted)}
.rline-change{justify-self:start;font-size:13px}
.rline-match{width:100%}
.rline-done{display:flex;align-items:center;justify-content:flex-end;gap:6px;min-height:48px;font-size:13.5px;font-weight:700;color:var(--ok)}
.rline-done .ico{width:18px;height:18px}
.rline.is-done .row-title{color:var(--muted)}
@media (prefers-reduced-motion: no-preference){
  .rline.is-bumped{animation:bump .6s cubic-bezier(.16,1,.3,1)}
}
.rcv-matcher .picked{border-bottom:1px solid var(--rule-soft)}
.matcher-acts{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:0 16px 16px}
.matcher-acts > :only-child{grid-column:1/-1}
.rcv-matcher .form-stack + .picks:empty{display:none}
.rcv-changed{background:var(--gold-soft)}
.rcv-over .confirm{gap:10px}
.rcv-over .hint{color:var(--ink)}
.rcv-missing{color:var(--danger);font-weight:600}

/* #/tasks: η θέση των παραλαβών */
.slot-k{margin:0;padding:12px 16px 4px;font-size:10.5px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);border-top:1px solid var(--rule-soft)}
.slot-acts{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding-top:12px}

.dock-row{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.dock-row > [hidden]{display:none}
.dock-row > :only-child,.dock-row:has(> [hidden]) > :not([hidden]){grid-column:1/-1}
.move-dock .dock-row .btn-block{min-height:52px;font-size:15px}
@media (min-width:640px){
  .rline{grid-template-columns:minmax(0,1fr) 200px}
  .rline > .qty,.rline > .rline-match{margin-top:2px}
  .rline > .rline-done{justify-content:flex-end;min-height:48px}
}
@media (min-width:1024px){
  .rcv-new-main{max-width:720px}
  .dock-row{grid-template-columns:1fr}
}

/* ===== Καταστήματα και αντιστοίχιση (σχέδιο 3, Task 6): #/admin/shops, #/admin/mapping ===== */
/* Τα κλειδιά: ένα φύλλο που φαίνεται μία φορά. Ο χρυσός είναι το σήμα «προσοχή, τώρα» του Ήθους· τα κλειδιά σε
   γραμματοσειρά σταθερού πλάτους, γιατί είναι δεδομένα που αντιγράφονται χαρακτήρα προς χαρακτήρα. */
.shops-page,.map-page{display:grid;gap:18px}
.reveal-slot:empty{display:none}
.keys-reveal{border-color:color-mix(in srgb,var(--gold) 60%,var(--rule));box-shadow:var(--shadow-float)}
.keys-reveal .sheet-head{border-bottom-color:var(--gold)}
.keys-reveal:focus{outline:none}
.keys-warn{display:flex;align-items:flex-start;gap:10px;margin:0;padding:12px 14px;background:var(--gold-soft);border-radius:3px;color:var(--ink);line-height:1.4}
.keys-warn .ico{color:var(--gold-ink);margin-top:1px}
.keys-warn strong{font-weight:800}
.key-row{display:grid;grid-template-columns:minmax(0,1fr);gap:8px}
.key-val{display:block;width:100%;min-height:52px;padding:12px;resize:none;line-height:1.45;word-break:break-all;font-family:ui-monospace,'SF Mono','Cascadia Mono',Consolas,'Liberation Mono',monospace;font-size:14.5px;letter-spacing:.01em;background:var(--panel-2)}
.key-copy{min-height:48px;background:var(--panel)}
.key-copy.is-done{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 45%,var(--rule))}
.keys-foot{display:flex;justify-content:flex-end}
.keys-foot .btn{min-width:180px}
@media (min-width:480px){ .key-row{grid-template-columns:minmax(0,1fr) auto} }
@media (prefers-reduced-motion: no-preference){
  .keys-reveal{animation:keys-in .42s cubic-bezier(.16,1,.3,1)}
  @keyframes keys-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
}

.shop-seen{font-variant-numeric:tabular-nums}
.shop-seen.is-never{font-style:italic}
.deduct{border:1px solid var(--rule);border-radius:3px;overflow:hidden}
.deduct .row{width:100%;text-align:left;background:var(--panel);border:0;border-bottom:1px solid var(--rule-soft);font:inherit;color:inherit;cursor:pointer}
.deduct .row:last-child{border-bottom:0}
.key-wrap{padding-top:14px;border-top:1px solid var(--rule-soft)}
.key-box{display:grid;gap:12px}
.key-box > .btn{justify-self:start;min-width:160px}
.key-now{display:grid;gap:4px}
.key-prefix{font-family:ui-monospace,'SF Mono','Cascadia Mono',Consolas,'Liberation Mono',monospace;font-size:15px;font-weight:600}
.confirm-acts{display:flex;flex-wrap:wrap;gap:8px}
.confirm-acts .btn{flex:1 1 140px}
.rotate-confirm .hint{color:var(--ink)}
.plugin-dl .dl-go{font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--hue)}
.plugins-none{padding:16px}
.sheet-pad{padding:12px 16px 16px;border-top:1px solid var(--rule-soft)}

/* αντιστοίχιση: πλοήγηση στις ενότητες, με τον αριθμό της καθεμιάς */
.map-jump{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.jump-b{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:48px;padding:0 12px 0 14px;
  border:1px solid var(--rule);border-radius:3px;background:var(--panel);color:var(--ink);font-size:13.5px;font-weight:600;cursor:pointer;text-align:left;
  transition:background-color .15s ease-out,border-color .15s ease-out}
.jump-b:hover{background:var(--panel-2)}
.jump-n{min-width:2ch;text-align:right;font-size:15px;font-weight:800;font-variant-numeric:tabular-nums;color:var(--muted)}
.jump-b.is-alert{border-color:color-mix(in srgb,var(--gold) 65%,var(--rule));background:var(--gold-soft)}
.jump-b.is-alert .jump-n{color:var(--gold-ink)}
.map-cols,.map-col{display:grid;gap:18px;align-content:start;min-width:0}
.res-sheet h2[tabindex]:focus{outline:none}

/* «Χωρίς αντιστοίχιση»: ο κωδικός του καταστήματος είναι ο τίτλος· όσα κρατούν παραγγελίες, με χρυσή ετικέτα */
.um-sku{font-size:17px;font-weight:800;letter-spacing:-.005em;line-height:1.25;overflow-wrap:anywhere}
.um-name{font-weight:500;color:var(--ink)}
.tag.is-wait{background:var(--gold-soft);color:var(--gold-ink)}
.um-body{display:grid;gap:14px;padding:14px 16px 16px}
.um-why{background:var(--panel-2)}
.um-foot{display:grid;gap:10px;justify-items:start}
.um-foot .formerr{justify-self:stretch}
.um-foot .btn{min-width:200px}
.um-clear{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;align-items:start;padding:18px 16px}
.um-clear .ico{color:var(--ok)}
.um-clear p{margin:0;color:var(--muted)}

/* είδος + συνδυασμός + ποσότητα */
.comps-ed{display:grid;gap:10px}
.comps{border:1px solid var(--rule);border-radius:3px}
.comps .lline{padding-left:14px}
.comp-var{color:var(--hue);font-weight:700}
.comp-slot:empty{display:none}
.picker-box{border:1px solid var(--rule);border-radius:3px;background:var(--panel)}
.picker-body > .field{padding:14px 14px 12px}
.picker-body > .field input{width:100%;height:52px;padding:0 14px}
.picker-body .picked{padding:12px 14px;border-bottom:1px solid var(--rule-soft)}
.picker-acts{display:flex;justify-content:flex-end;padding:10px 14px 14px;border-top:1px solid var(--rule-soft)}
.picker-acts .btn{min-width:120px}
.comp-more-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}
.comp-more-row .btn{background:var(--panel)}

/* ζωντανή δοκιμή: το αποτέλεσμα κάτω από το πεδίο, στον χάρακα της απόχρωσης όταν βρεθεί */
.map-test{display:grid;gap:12px;padding:16px;border-bottom:1px solid var(--rule)}
.mt-fields{display:grid;gap:12px}
.map-test-result{display:grid;gap:3px;min-height:76px;padding:12px 14px;border-radius:3px;background:var(--panel-2);align-content:center}
.map-test-result p{margin:0}
.map-test-result.is-hit{background:var(--hue-tint)}
.map-test-result.is-miss{background:var(--danger-soft)}
.mt-head{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.mt-head .ico{width:16px;height:16px}
.is-hit .mt-head{color:var(--hue)}
.is-miss .mt-head{color:var(--danger)}
.mt-item{font-weight:600;line-height:1.35}
.mt-var{font-size:22px;font-weight:800;letter-spacing:-.015em;line-height:1.2;color:var(--hue)}
.mt-extra{font-size:14px;color:var(--ink)}
.mt-why{font-size:14px;color:var(--ink);line-height:1.45}

/* κανόνες και βάσεις: μία γραμμή ανά κανόνα, οι ρόλοι ως κομμάτια του κωδικού */
.rule-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;min-height:64px;padding:12px 16px;border-bottom:1px solid var(--rule-soft)}
.rows > li:last-child .rule-row{border-bottom:0}
.role-chips{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.role-chip{display:inline-flex;align-items:center;min-height:30px;padding:0 10px;border-radius:3px;background:var(--hue-tint);color:var(--hue);font-size:13.5px;font-weight:700}
.role-chip.is-ignore{background:var(--panel-2);color:var(--muted);font-weight:600}
.rule-sep{min-width:12px;text-align:center;color:var(--muted);font-weight:700}
.del-btn{min-height:48px;padding:8px 12px;font-size:13px;color:var(--danger);background:var(--panel)}
.del-btn:hover{background:var(--danger-soft)}
.del-btn.is-armed{background:var(--danger-fill);color:var(--on-danger);border-color:var(--danger-fill)}
.base-match{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.base-kind{font-size:10.5px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}
.base-val{font-size:17px;font-weight:800;overflow-wrap:anywhere}
.base-item{color:var(--hue)}
.seg.seg-5{grid-template-columns:repeat(5,minmax(0,1fr));gap:4px}
.seg-5 .seg-b{font-size:13.5px;padding:0 2px}
.seg-list{display:grid;gap:8px;margin:0;padding:0;list-style:none}
.seg-li{display:grid;grid-template-columns:36px minmax(0,1fr);align-items:center;gap:10px}
.field .seg-n{font-size:14px;font-weight:800;letter-spacing:0;text-transform:none;color:var(--muted);text-align:right}
.seg-acts{display:flex;gap:8px}
.seg-acts .btn{flex:1 1 0;background:var(--panel)}
.rule-preview:empty{display:none}
.rule-preview{display:grid;gap:8px}
.seg-chips{display:flex;flex-wrap:wrap;gap:6px}
.seg-chip{display:grid;gap:1px;min-width:56px;padding:6px 10px 7px;border:1px solid var(--rule);border-radius:3px;background:var(--panel-2)}
.seg-part{font-size:16px;font-weight:800;overflow-wrap:anywhere}
.seg-role{font-size:10.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--hue)}
.seg-chip.is-extra{border-style:dashed}
.seg-chip.is-extra .seg-role{color:var(--danger)}
.rule-mismatch{color:var(--danger);font-weight:600}
.nb-item{display:grid;gap:7px}
.nb-item .picked{border:1px solid var(--rule);border-radius:3px;padding:12px 14px}

/* κωδικοί χρωμάτων / νούμερων: όνομα αριστερά, κωδικός δεξιά, αποθήκευση μόλις φύγει η εστίαση */
.ac-body{display:grid;gap:16px;padding:14px 16px 16px}
.ac-group{display:grid;gap:6px}
.ac-h{margin:0;font-size:10.5px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}
.ac-list{margin:0;padding:0;list-style:none;border:1px solid var(--rule);border-radius:3px}
.ac-row{display:grid;grid-template-columns:minmax(0,1fr) 112px 28px;align-items:center;gap:10px;min-height:60px;padding:6px 8px 6px 14px;border-bottom:1px solid var(--rule-soft);transition:background-color .2s ease-out}
.ac-row:last-child{border-bottom:0}
.ac-name{display:flex;align-items:center;font-weight:600;overflow-wrap:anywhere;cursor:pointer}
.ac-in{width:100%;height:48px;padding:0 10px;text-align:center;font-weight:700;font-variant-numeric:tabular-nums}
.ac-state{display:grid;place-items:center;color:var(--ok)}
.ac-state .ico{width:18px;height:18px}
.ac-row.is-saved{background:color-mix(in srgb,var(--ok-soft) 55%,transparent)}
.ac-row.is-busy .ac-in{opacity:.6}
.ac-row.is-error{grid-template-columns:minmax(0,1fr) 112px;row-gap:4px}
.ac-row.is-error .ac-in{border-color:var(--danger)}
.ac-row.is-error .ac-state{grid-column:1/-1;place-items:start;padding-bottom:6px}
.ac-err{font-size:13px;font-weight:600;color:var(--danger);line-height:1.35}

@media (min-width:640px){
  .map-jump{grid-template-columns:repeat(4,minmax(0,1fr))}
  .mt-fields:not(.is-one){grid-template-columns:200px minmax(0,1fr)}
}
@media (min-width:1024px){
  .shops-page{max-width:1080px}
  .shops-page .admin-cols{grid-template-columns:minmax(0,1fr) 340px}
  .shops-page .plugins-sheet{position:sticky;top:32px}
  .keys-reveal{max-width:720px}
  .map-page{max-width:1180px}
  .map-cols{grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:24px;align-items:start}
}

/* ===== Παραγγελίες e-shop, συλλογή, επιστροφές (σχέδιο 3, Task 7): #/orders, #/pick/:id, #/returns ===== */
/* Στον διάδρομο, με το ένα χέρι: η θέση είναι ο τίτλος κάθε γραμμής, το μήνυμα και οι ενέργειες στο dock κάτω από
   τον αντίχειρα. Η μία «στιγμή» της οθόνης: η πλάκα της θέσης γίνεται πετρόλ μόλις σαρωθεί η ετικέτα. */
.ord-tabs{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.ord-tab{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:52px;padding:0 12px 0 14px;
  border:1px solid var(--rule);border-radius:3px;background:var(--panel);color:var(--ink);text-decoration:none;font-size:13.5px;font-weight:700;
  transition:background-color .15s ease-out,border-color .15s ease-out,color .15s ease-out}
.ord-tab:hover{background:var(--panel-2)}
.ord-tab:focus-visible{outline-offset:-2px}
.ord-tab-n{min-width:2ch;text-align:right;font-size:15px;font-weight:800;font-variant-numeric:tabular-nums;color:var(--muted)}
.ord-tab.is-alert{border-color:color-mix(in srgb,var(--gold) 65%,var(--rule));background:var(--gold-soft)}
.ord-tab.is-alert .ord-tab-n{color:var(--gold-ink)}
.ord-tab[aria-current="page"]{background:var(--hue-deep);border-color:var(--hue-deep);color:var(--on-hue);box-shadow:var(--shadow)}
.ord-tab[aria-current="page"] .ord-tab-n{color:var(--on-hue)}
:root[data-theme="dark"] .ord-tab[aria-current="page"]{background:var(--hue-tint);border-color:var(--hue-tint)}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .ord-tab[aria-current="page"]{background:var(--hue-tint);border-color:var(--hue-tint)} }
.ord-head-r{display:flex;align-items:baseline;gap:14px}
.ord-all{min-height:48px;margin:-14px -6px -12px 0;padding:0 6px;font-size:13.5px}
.ord-li{display:grid;grid-template-columns:minmax(0,1fr);border-bottom:1px solid var(--rule-soft)}
.ord-li.has-check{grid-template-columns:52px minmax(0,1fr)}
.rows > li.ord-li:last-child{border-bottom:0}
.ord-li .row{border-bottom:0}
.ord-check{display:grid;place-items:center;min-height:64px;padding-left:6px;cursor:pointer;transition:background-color .15s ease-out}
.ord-check:hover{background:var(--panel-2)}
.ord-cb{width:22px;height:22px;margin:0;accent-color:var(--hue);cursor:pointer}
.ord-li:has(.ord-cb:checked){background:var(--hue-tint)}
.ord-li.has-check .ord-row{padding-left:6px}
.row.ord-row{grid-template-columns:minmax(0,1fr) auto 12px}
.ord-no{font-size:19px;font-weight:800;letter-spacing:-.01em;line-height:1.2;overflow-wrap:anywhere}
.ord-row .tags{margin-top:4px}
.ord-when{font-size:13px;font-weight:600;color:var(--muted);white-space:nowrap;text-align:right}
.slip-go[aria-disabled="true"]{opacity:.5;cursor:not-allowed}
.slip-go .ico{width:20px;height:20px}

/* ζώνη μηνύματος της συλλογής/επιστροφής: τι έγινε με την τελευταία σάρωση */
.pick-say{display:flex;align-items:flex-start;gap:10px;margin:0;padding:11px 14px;border-radius:3px;font-size:14.5px;font-weight:600;line-height:1.4;background:var(--panel-2);color:var(--ink)}
.pick-say:empty{display:none}
.pick-say .ico{width:20px;height:20px;flex:none;margin-top:-1px}
.pick-say.is-ok{background:var(--ok-soft);color:var(--ok)}
.pick-say.is-err{background:var(--danger-soft);color:var(--danger)}
@media (prefers-reduced-motion: no-preference){
  .pick-say:not(:empty){animation:sayin .22s cubic-bezier(.16,1,.3,1)}
  @keyframes sayin{from{opacity:.3;transform:translateY(4px)}to{opacity:1;transform:none}}
}
.manual-code > summary{display:flex;align-items:center;min-height:48px;padding:0 2px;cursor:pointer;list-style:none;font-size:13.5px;font-weight:600;color:var(--hue)}
.manual-code > summary::-webkit-details-marker{display:none}
.manual-code > summary::after{content:"";width:7px;height:7px;margin-left:10px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg) translateY(-3px);transition:transform .15s ease-out}
.manual-code[open] > summary::after{transform:rotate(225deg) translateY(-1px)}
.manual-code .scan-entry-row input{height:48px}
.manual-code .scan-entry-row .btn{min-height:48px;background:var(--panel)}

/* κεφαλή: αριθμός παραγγελίας, και πόσα μαζεύτηκαν (ένα σημάδι ανά γραμμή) */
.pick-head h1{font-size:26px}
.pick-of{margin-left:2px;font-size:15px;font-weight:700;color:var(--muted)}
.pick-ticks{display:flex;flex-wrap:wrap;gap:4px;align-self:center;margin-left:auto}
.pick-tick{width:16px;height:5px;border-radius:2px;background:var(--rule)}
.pick-tick.is-part{background:color-mix(in srgb,var(--hue) 45%,var(--rule))}
.pick-tick.is-done{background:var(--hue)}

/* η πλάκα της θέσης: χαρτί όσο περιμένει, πετρόλ μόλις σαρωθεί */
.pick-here{overflow:hidden}
.pick-here-in{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:14px;min-height:72px;padding:12px 16px;
  transition:background-color .25s ease-out,color .25s ease-out}
.pick-here-in > .ico{width:26px;height:26px;color:var(--hue)}
.pick-here-t{font-size:15px;font-weight:600;line-height:1.35}
.pick-here-code{font-size:28px;font-weight:800;letter-spacing:-.02em;line-height:1.05}
.pick-here-in.is-set{background:var(--hue-deep);color:var(--on-hue)}
.pick-here-in.is-set > .ico,.pick-here-in.is-set .field-k{color:color-mix(in srgb,var(--on-hue) 78%,var(--hue-deep))}
:root[data-theme="dark"] .pick-here-in.is-set{background:var(--hue-tint)}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .pick-here-in.is-set{background:var(--hue-tint)} }
@media (prefers-reduced-motion: no-preference){
  .pick-here-in.is-set .pick-here-code{animation:herein .32s cubic-bezier(.16,1,.3,1)}
  @keyframes herein{from{opacity:.2;transform:translateX(-6px)}to{opacity:1;transform:none}}
}

/* γραμμή συλλογής: θέση | είδος (ο συνδυασμός πρώτος, μεγάλος) | μαζεμένα/ζητούμενα */
.pline{display:grid;grid-template-columns:88px minmax(0,1fr) auto;align-items:start;gap:12px;min-height:72px;padding:12px 16px;border-bottom:1px solid var(--rule-soft);transition:background-color .15s ease-out,opacity .2s ease-out}
.rows > li.pline:last-child{border-bottom:0}
.pl-loc{display:grid;gap:2px;justify-items:start;min-width:0}
.pl-code{font-size:19px;font-weight:800;letter-spacing:-.01em;line-height:1.2}
.pl-code.is-here{color:var(--hue)}
.pl-locq{font-size:13px;font-weight:700;color:var(--muted)}
.pl-loc .qty-blind{font-size:12px;text-align:left;white-space:normal;line-height:1.25}
.pl-none{font-size:13px;font-weight:700;color:var(--danger)}
.pl-mark{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;background:var(--ok-soft);color:var(--ok)}
.pl-mark .ico{width:18px;height:18px}
.pl-var{font-size:17px;font-weight:800;letter-spacing:-.01em;line-height:1.25;color:var(--hue);overflow-wrap:anywhere}
.pl-fig{white-space:nowrap;text-align:right;line-height:1.2}
.pl-n{font-size:22px;font-weight:800;letter-spacing:-.02em}
.pl-of{font-size:15px;font-weight:700;color:var(--muted)}
.pline.is-active{background:var(--hue-tint)}
.pline.is-done{opacity:.55}
.pline.is-done .pl-var{color:var(--ink)}
@media (prefers-reduced-motion: no-preference){
  .pline.is-bumped .pl-n{animation:plbump .5s cubic-bezier(.16,1,.3,1)}
  @keyframes plbump{from{color:var(--ok);transform:scale(1.25)}to{transform:none}}
}
.res-sheet.is-void .pline{opacity:.5}
.res-sheet.is-void .pline.is-active{background:transparent}

.pick-acts{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.pick-acts .btn{min-height:52px;background:var(--panel)}
.pick-dock .act-warn{color:var(--danger)}
.pick-dock .act-warn:hover{background:var(--danger-soft)}
.pick-nf-slot:empty{display:none}
.pick-rest{min-height:52px}

/* ακύρωση στη μέση: μόνιμο, όχι toast */
.pick-banner{display:grid;gap:10px;padding:16px;border-radius:3px;background:var(--danger-fill);color:var(--on-danger);box-shadow:var(--shadow)}
.pick-banner:focus{outline:none}
.pick-banner-h{display:flex;align-items:center;gap:10px}
.pick-banner-h .ico{width:24px;height:24px;flex:none}
.pick-banner h2{margin:0;font-size:22px;font-weight:800;letter-spacing:-.01em;line-height:1.25}
.pick-banner p{margin:0;font-size:15px;line-height:1.45}
.pick-banner-go{justify-self:start;background:transparent;color:var(--on-danger);border:1.5px solid var(--on-danger)}
.pick-banner-go:hover{background:color-mix(in srgb,var(--on-danger) 14%,transparent)}
.pick-banner-go:focus-visible{outline-color:var(--on-danger)}
@media (prefers-reduced-motion: no-preference){
  .pick-banner{animation:keys-in .36s cubic-bezier(.16,1,.3,1)}
}
.pick-banner-slot:empty{display:none}

/* επιστροφή στο ράφι */
.ret-row{min-height:72px}
.ret-form{display:grid;gap:10px}
.ret-form[hidden]{display:none}
.ret-loc{display:grid;gap:2px;min-height:48px;align-content:center}
.ret-loc-t,.ret-pick{margin:0;font-size:15px;font-weight:600;line-height:1.35}
.ret-act{display:grid;grid-template-columns:minmax(0,176px) minmax(0,1fr);gap:8px}
.ret-go{min-height:56px;font-size:16px}

@media (min-width:640px){ .ord-tabs{grid-template-columns:repeat(4,minmax(0,1fr))} }
@media (min-width:1024px){
  .resview.is-single{display:block;max-width:860px}
  .pline{grid-template-columns:104px minmax(0,1fr) auto}
  .ret-act{grid-template-columns:1fr}
  .pick-acts{grid-template-columns:1fr}
}

/* ===== Σύνδεση με το Ήθος (σχέδιο 4, Task 6): #/admin/ethos ===== */
/* Φύλλα όπως στα Καταστήματα. Το ζευγάρωμα είναι η δουλειά της οθόνης: κάθε είδος του Ήθους μια γραμμή με τις τρεις
   αποφάσεις από κάτω, όλες ήσυχες και ίδιου βάρους (η οθόνη δεν σπρώχνει καμία· σε μεγάλη λίστα μια γεμάτη ανά γραμμή
   γίνεται τοίχος). Στο κινητό «Νέο από το Ήθος» πιάνει όλο το πλάτος, πάνω από τις άλλες δύο. */
.ethos-cols{gap:18px}
.ethos-main,.ethos-side{display:grid;gap:18px;align-content:start;min-width:0}
.ethos-status-body{gap:10px}
.ethos-who{margin:0;font-size:15.5px;line-height:1.45;text-wrap:pretty}
.ethos-when{margin:0;font-size:14px;color:var(--muted);font-variant-numeric:tabular-nums}
.ethos-when strong{color:var(--ink);font-weight:700}
.ethos-err{display:block}
.ethos-err-at{font-weight:400;font-variant-numeric:tabular-nums}
.ethos-acts{display:flex;flex-wrap:wrap;gap:8px;padding-top:4px}
.ethos-acts .btn{flex:1 1 160px}
.key-input{font-family:ui-monospace,'SF Mono','Cascadia Mono',Consolas,'Liberation Mono',monospace;font-size:14.5px;letter-spacing:.01em}
.eth-foot{display:flex;justify-content:flex-end}
.eth-foot .btn{min-width:200px}
.eth-confirm-slot:empty,.eth-opening-slot:empty{display:none}
.eth-note{margin:0;font-size:14.5px;font-weight:600;line-height:1.45;color:var(--ink);text-wrap:pretty}
.eth-out{padding:0 16px 16px}
.eth-off-box > .btn{min-width:160px}
.pair-lead{padding:14px 16px 4px;text-wrap:pretty}
.pair-li{display:grid;gap:12px;padding:14px 16px 16px;border-bottom:1px solid var(--rule-soft)}
.pair-li:last-child{border-bottom:0}
.pair-main{display:grid;gap:3px;min-width:0}
.pair-acts{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.pair-acts .pair-new{grid-column:1/-1;order:-1}
.pair-acts > .same-box{grid-column:1/-1}
.pair-li .formerr:empty{display:none}
.same-box{display:grid;gap:10px;padding:12px;background:var(--panel-2);border:1px solid var(--rule-soft);border-radius:3px}
.same-box .field input{background:var(--panel)}
.same-list:empty{display:none}
.same-list{border:1px solid var(--rule-soft);border-radius:3px;background:var(--panel);overflow:hidden}
.same-pick .same-go{font-size:13px;font-weight:700;color:var(--hue)}
.same-box .formerr:empty{display:none}
.same-foot{display:flex;justify-content:flex-end}
.same-cancel{min-height:48px;padding:0 4px}
.pair-foot{display:grid;gap:10px;padding:14px 16px 16px;border-top:1px solid var(--rule-soft)}
.pair-foot .pair-rest-btn{justify-self:start;min-width:220px}
.pair-rest[hidden]{display:none}
.pair-outside{margin:0 16px 16px}
.pair-outside .pair-li{padding-left:0;padding-right:0}
.ethos-opening .res-note{display:flex;align-items:center;gap:6px}
.eth-opening-body{gap:12px}
.eth-opening-body > .form-stack{padding:0;gap:10px}
.eth-opening{justify-self:start;min-width:220px}
@media (min-width:640px){
  .pair-acts{grid-template-columns:auto auto auto;justify-content:start}
  .pair-acts .pair-new{grid-column:auto;order:0}
}
@media (min-width:1024px){
  .ethos-cols{grid-template-columns:minmax(0,1fr) 380px;gap:24px}
  .ethos-side{position:sticky;top:32px}
}
@media (prefers-reduced-motion: no-preference){
  .pair-li{transition:opacity .18s cubic-bezier(.16,1,.3,1),transform .18s cubic-bezier(.16,1,.3,1)}
  .pair-li.is-gone{opacity:0;transform:translateX(12px)}
}

/* Είδος από το Ήθος: τα πεδία του Ήθους διαβάζονται, δεν γράφονται. */
.from-ethos input[readonly]{background:var(--panel-2);color:var(--ink);border-style:dashed;cursor:default}
.from-ethos input[readonly]:hover{border-color:var(--rule)}
.ethos-note{display:flex;align-items:flex-start;gap:8px}
.ethos-note .ico{flex:none;margin-top:1px;color:var(--hue)}
.wiz-links{display:grid;gap:10px}
.wiz-conn{border:1px solid var(--rule);border-radius:2px;background:var(--panel)}
.wiz-links .wiz-more{margin-top:0}
.ethos-new .btn{min-width:200px}

/* Διορθώσεις T6: λόγος αναμονής, συνδυασμοί που δεν ταιριάζουν, κωδικοί που δεν γράφτηκαν. */
.pair-why{display:flex;align-items:flex-start;gap:8px;margin:0;padding:10px 12px;background:var(--gold-soft);border-radius:3px;font-size:14px;line-height:1.45;color:var(--ink)}
.pair-why .ico{flex:none;margin-top:1px;color:var(--gold-ink)}
.vm-box{display:grid;gap:10px;padding:12px;background:var(--panel-2);border:1px solid var(--rule-soft);border-radius:3px}
.vm-q{margin:0;font-size:15.5px;font-weight:700;color:var(--ink)}
.vm-list{display:grid;gap:12px}
.vm-li .field select{width:100%;min-height:52px;background:var(--panel)}
.vm-box .formerr:empty{display:none}
.vm-foot{display:flex;justify-content:flex-end}
.vm-foot .btn{min-width:200px}
.ethos-err-code{display:block;margin-top:4px;font-weight:400;font-size:12.5px;font-family:ui-monospace,'SF Mono','Cascadia Mono',Consolas,'Liberation Mono',monospace;opacity:.85}
.ethos-conflicts .hint{padding:0 0 8px}
.ethos-conflicts .rows{border:1px solid var(--rule-soft);border-radius:3px;background:var(--panel)}

/* ===== μπάρα της σύνδεσης με το Ήθος (σχέδιο 4, Task 7): μόνο ο υπεύθυνος =====
   Μια λωρίδα κάτω από την κεφαλίδα, όχι ειδοποίηση που κρύβει τη δουλειά: «δεν απαντά» με το μέλι της αναμονής,
   «κλειδί» με το κόκκινο της ενέργειας. Όλη η λωρίδα πάει στο #/admin/ethos. */
.linkbar[hidden],body.is-public .linkbar{display:none}
.linkbar{border-bottom:1px solid var(--rule)}
.linkbar.is-down{background:var(--gold-soft);color:var(--gold-ink)}
.linkbar.is-key{background:var(--danger-soft);color:var(--danger)}
.linkbar-link{
  display:flex;align-items:center;gap:10px;min-height:48px;max-width:760px;margin:0 auto;padding:8px 16px;
  color:inherit;text-decoration:none;font-size:14.5px;font-weight:600;line-height:1.35;
}
.linkbar-text{flex:1;min-width:0;color:var(--ink);text-wrap:pretty}
.linkbar-go{display:inline-flex;align-items:center;gap:2px;font-size:13px;font-weight:700;white-space:nowrap}
.linkbar-go .ico{width:16px;height:16px;transform:rotate(180deg)}
.linkbar-link:hover .linkbar-go{text-decoration:underline;text-underline-offset:3px}
.linkbar-link:focus-visible{outline-offset:-3px}
@media (min-width:1024px){
  #app{grid-template-rows:auto 1fr}
  .nav{grid-row:1 / span 2}
  .linkbar{grid-column:2;grid-row:1}
  #view{grid-row:2}
  .linkbar-link{max-width:1200px;margin:0;padding:10px 40px}
}

/* #/admin/ethos: απόθεμα προς το Ήθος */
.ethos-stock{margin:0;font-size:14px;color:var(--muted);font-variant-numeric:tabular-nums}
.ethos-stock strong{color:var(--ink);font-weight:700}
.eth-opening-acts{display:flex;flex-wrap:wrap;gap:8px}
.eth-opening-acts .btn{flex:1 1 200px}

/* σχέδιο 4, Task 9 — «+ Χρώμα / Νούμερο» στην αλλαγή είδους */
.add-wrap{padding:16px}
.add-wrap .add-body{padding:0}
.add-open .ico{width:18px;height:18px}
.add-list{display:flex;flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none}
.add-list li{padding:6px 10px;background:var(--panel);border:1px solid var(--rule);border-radius:3px;font-size:14px;font-weight:600;line-height:1.3;overflow-wrap:anywhere}
.add-list li.add-more{background:none;border-color:transparent;color:var(--ink);font-weight:500}

/* «Απόθεμα χωρίς συνδυασμό»: σημείωση στα Είδη και η λίστα */
.stray-note{display:grid;grid-template-columns:20px minmax(0,1fr) 18px;align-items:center;gap:12px;min-height:56px;
  background:var(--gold-soft);border:1px solid color-mix(in srgb,var(--gold) 40%,var(--rule));color:var(--ink);text-decoration:none;
  transition:background-color .15s ease-out}
.stray-note .ico{width:20px;height:20px;color:var(--gold-ink)}
.stray-note > .ico:last-child{width:18px;height:18px;transform:rotate(180deg);color:var(--ink)}
.stray-note:hover{background:color-mix(in srgb,var(--gold-soft) 70%,var(--gold) 12%)}
.stray-note:focus-visible{outline-offset:2px}
.stray-list{display:grid;gap:16px}
.stray-done:empty{display:none}
.stray-row .form-stack{border-top:1px solid var(--rule-soft)}
.stray-row .qty{max-width:260px}
/* το όνομα του είδους είναι περιεχόμενο, όχι ετικέτα: χωρίς κεφαλαία */
.stray-item .sheet-head h2{font-size:16px;font-weight:700;letter-spacing:0;text-transform:none;line-height:1.35;overflow-wrap:anywhere}
