/* app.css — CSS της εφαρμογής, μεταφερμένο αυτούσιο από τα inline <style> του index.html (χωρίς αλλαγή σε κανόνα, σειρά ή τιμή). */

/* από index.html, μπλοκ 1 */
*{box-sizing:border-box;margin:0;padding:0}
/* μπλοκάρει pinch/double-tap zoom όταν ο browser αγνοεί το user-scalable=no (Android Chrome με “Αναγκαστική ενεργοποίηση ζουμ”) */
html{touch-action:pan-x pan-y}
:root{
  --bg:#f5f5f5;--surface:#ffffff;--surface2:#f0f0f0;
  --border:#dde0e8;--text:#1a1d27;--muted:#7b82a8;
  /* Λίστα ραντεβού (γραμμή): κείμενο σε τρία επίπεδα + προειδοποίηση, και τα δύο χρώματα της στήλης «Εργασία» */
  --text-primary:var(--text);--text-secondary:#6B7280;--text-muted:#9CA3AF;--text-warning:#854F0B;
  --task-pickup:#3B6D11;--task-delivery:#A32D2D;--border-strong:#9CA3AF;
  /* Ραντεβού + Ημερολόγιο: κουκκίδα σκοπού δίπλα στο όνομα πελάτη (Παράδοση κόκκινη, Παραλαβή ζωντανό λεμονοπράσινο,
     κάθε άλλος σκοπός ουδέτερη γκρι) + μόνιμο φόντο «στάλθηκε» της γραμμής (ίδιο με της τικαρισμένης, ανά breakpoint) */
  --dot-delivery:#A32D2D;--dot-pickup:#84CC16;--dot-other:#9CA3AF;--row-sent-bg:#F5F9FF;
  --brand-primary:#0d0d0d;--brand-secondary:#2ecc71;--brand-primary-rgb:13,13,13;--brand-secondary-rgb:46,204,113;--accent:var(--brand-primary);--blue:#3d9be9;--green:var(--brand-primary);
  --red:#c0396b;--orange:#c0396b;--purple:#9b59b6;--amber:#c8891f;
  --radius:14px;
  /* Chrome (sidebar + topbar) — marine navy palette. Platform identity layer,
     NOT tenant-configurable (chrome stays brand-neutral; tenant brand-primary
     drives content surfaces only). Refs: docs/recon/NAVBAR_SIDEBAR_REFRESH_RECON.md */
  --chrome-bg: #0A2647;
  --chrome-bg-active: rgba(151,196,89,0.18);
  --chrome-border: rgba(255,255,255,0.12);
  --chrome-text: #FFFFFF;
  --chrome-text-secondary: #B5D4F4;
  --chrome-text-muted: #85B7EB;
  --chrome-accent: #97C459;
  --chrome-lime: #A6D63E;
  --chrome-accent-text: #C0DD97;
  --chrome-avatar-text: #173404;
  --chrome-badge-bg: rgba(151,196,89,0.22);
  --chrome-badge-text: #C0DD97;
  --chrome-danger-bg: rgba(240,149,149,0.2);
  --chrome-danger-text: #F7C1C1;
}
body{font-family:'DM Sans',sans-serif;background:var(--cfx-page-bg, var(--bg));color:var(--text);min-height:100vh;overflow-x:hidden;font-size:13px}

/* NAV — chrome surface (marine navy) */
.nav{background:var(--chrome-bg);border-bottom:1px solid var(--chrome-border);display:flex;align-items:center;padding:0 16px;gap:4px;overflow-x:auto;position:sticky;top:0;z-index:200}
.nav-logo{font-family:Syne;font-weight:800;color:var(--chrome-accent);font-size:1.1rem;padding:14px 10px;white-space:nowrap;margin-right:8px}
/* Σβούρα ανανέωσης δεδομένων: ίδιο κουτί με το ☰ (.cfx-sb-hamburger), ορατή σε όλα τα πλάτη. */
.cfx-refresh-btn{display:flex;align-items:center;justify-content:center;flex:none;width:40px;height:40px;padding:8px;border:0;border-radius:6px;background:transparent;color:var(--chrome-text);cursor:pointer;transition:background 0.15s ease}
.cfx-refresh-btn:hover{background:rgba(255,255,255,0.08)}
.cfx-refresh-btn:focus-visible{outline:2px solid var(--chrome-accent);outline-offset:2px}
.cfx-refresh-btn .cfx-refresh-ok{display:none}
.cfx-refresh-btn.is-loading .cfx-refresh-ic{animation:cfx-refresh-spin 0.9s linear infinite}
.cfx-refresh-btn.is-done{background:#2E6B3A}
.cfx-refresh-btn.is-done .cfx-refresh-ic{display:none}
.cfx-refresh-btn.is-done .cfx-refresh-ok{display:block}
.cfx-refresh-btn.is-offline{background:#8A5A12}
.cfx-refresh-btn.is-error{background:#8A5A12}
@keyframes cfx-refresh-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
@media (max-width:600px){.nav{padding-left:10px;padding-right:10px}.nav-logo{gap:6px !important}}
.tab{background:none;border:none;color:var(--chrome-text-secondary);font-family:'DM Sans',sans-serif;font-size:0.8rem;padding:10px 8px;cursor:pointer;white-space:nowrap;border-bottom:2px solid transparent;transition:all 0.2s}
.tab:hover{color:var(--chrome-text)}
.tab.active{color:var(--chrome-text);border-bottom-color:var(--chrome-accent)}

/* Chrome utility classes — inline-styled navbar children moved here per
   recon report Section 1 (refactor first, color second). Applied σε
   buttons sidebar του logo (Έξοδος, Scan, CFX, Σταθμός, bell). */
.chrome-pill{background:var(--chrome-accent);color:var(--chrome-avatar-text);border:none;padding:4px 10px;border-radius:8px;font-size:0.8rem;font-weight:700;display:inline-flex;align-items:center;gap:6px;cursor:pointer;transition:background 0.15s ease}
.chrome-pill:hover{background:#C0DD97}
/* «Παραγωγή» (πάνω μπάρα): μικρότερο + μπλε — η «Αναζήτηση» κρατά πράσινο/μέγεθος. */
.chrome-pill-danger{background:#E24B4A;color:#FFFFFF;border:none;padding:4px 10px;border-radius:8px;font-size:0.8rem;font-weight:700;display:inline-flex;align-items:center;gap:6px;cursor:pointer;transition:background 0.15s ease}
.chrome-pill-danger:hover{background:#C0392B}
.chrome-status-pill{background:var(--chrome-badge-bg);border:1px solid var(--chrome-border);border-radius:8px;padding:4px 8px;display:inline-flex;align-items:center;gap:6px}
.chrome-status-pill > span{color:var(--chrome-badge-text);font-size:0.7rem;font-weight:700}
.chrome-badge-counter{background:#FFFFFF;color:#E24B4A;border:2px solid var(--chrome-bg);border-radius:50%;width:18px;height:18px;font-size:10px;font-weight:500;display:flex;align-items:center;justify-content:center;position:absolute;top:-6px;right:-6px}

/* PAGES */
.page{display:none;padding:20px;max-width:900px;margin:0 auto}
.page.active{display:block}
@media(min-width:1024px){.page{max-width:1400px}}

/* BUTTONS */
.btn{border:none;cursor:pointer;font-family:'DM Sans',sans-serif;font-weight:500;border-radius:8px;padding:8px 14px;font-size:0.88rem;transition:all 0.2s}
.btn-primary{background:var(--accent);color:#fff}
.btn-primary:hover{background:#e6b800}
.btn-success{background:var(--green);color:#fff}
.btn-info{background:var(--blue);color:#fff}
.btn-danger{background:var(--red);color:#fff}
.btn-ghost{background:var(--surface2);color:var(--text);border:1px solid var(--border)}
.btn-cancel{background:var(--surface2);color:var(--muted)}
.btn-sms{background:var(--purple);color:#fff}
.btn-sm{padding:5px 10px;font-size:0.82rem;border-radius:6px}
.btn-nav{background:rgba(52,152,219,0.15);color:#2980b9;border:1px solid rgba(52,152,219,0.35);font-weight:500}
.btn-edit{background:rgba(106,176,76,0.15);color:#4a8a2f;border:1px solid rgba(106,176,76,0.35);font-weight:500}

/* CARDS */
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:14px;overflow:hidden}
.card-header{padding:14px 18px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border);cursor:pointer}
.card-name{font-family:Syne;font-weight:700;font-size:1.15rem}
.card-sub{font-size:0.9rem;color:var(--muted);margin-top:2px}
.card-body{padding:10px 18px}
.card-footer{padding:10px 18px;background:var(--surface2);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px}

/* BADGES */
.badge{display:inline-block;padding:4px 10px;border-radius:20px;font-size:0.85rem;font-weight:600}
.badge-pending{background:rgba(243,156,18,0.15);color:var(--orange)}
.badge-sorting{background:rgba(155,89,182,0.15);color:#9b59b6}
.badge-washing{background:rgba(61,155,233,0.15);color:var(--blue)}
.badge-drying{background:rgba(230,126,34,0.15);color:#e67e22}
.badge-quality{background:rgba(var(--brand-secondary-rgb),0.15);color:var(--green)}
.badge-stored{background:rgba(52,73,94,0.15);color:#34495e}
.badge-ready{background:rgba(var(--brand-secondary-rgb),0.15);color:var(--green)}
.badge-delivered{background:rgba(127,140,141,0.15);color:#7f8c8d}

/* CARPET ITEM */
.carpet-num{background:var(--accent);color:#fff;font-family:Syne;font-weight:800;padding:4px 10px;border-radius:6px;font-size:1rem}
.carpet-title{font-weight:600;font-size:1.05rem}
.carpet-sub{font-size:0.88rem;color:var(--muted);margin-top:1px}

/* SERVICES BAR */
.services-bar{display:grid;grid-template-columns:1fr 1fr;border-top:2px solid var(--border)}
.svc-cell{padding:14px 12px;border-right:1px solid var(--border)}
.svc-cell:last-child{border-right:none}
.svc-label{color:var(--text);font-size:0.78rem;font-weight:700;margin-bottom:8px;display:flex;align-items:center;gap:4px;text-transform:uppercase;letter-spacing:0.3px}
.svc-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap}

@media print { .no-print { display:none !important; } #print-overlay > div:first-child button { display:none !important; } }

/* DETAIL PAGE */
.detail-header{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px 20px;margin-bottom:16px;display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}
.detail-title{font-family:Syne;font-weight:800;font-size:1.5rem}
.detail-sub{font-size:0.95rem;color:var(--muted);margin-top:4px}
.detail-actions{display:flex;gap:8px;flex-wrap:wrap}

/* PELATALOGION */
.alpha-bar{display:flex;flex-wrap:wrap;gap:3px;margin-bottom:16px}
.alpha-btn{background:var(--surface);border:1px solid var(--border);color:var(--muted);border-radius:6px;padding:4px 8px;font-size:0.78rem;cursor:pointer;font-family:Syne;font-weight:700}
.alpha-btn.has{background:rgba(245,200,66,0.12);border-color:rgba(245,200,66,0.3);color:var(--accent)}
.alpha-section{margin-bottom:16px}
.alpha-title{font-family:Syne;font-weight:800;font-size:1.1rem;color:var(--accent);margin-bottom:8px;padding:4px 0;border-bottom:1px solid var(--border)}
/* PELATALOGION — ανασχεδιασμός (redesign PR): μία γραμμή/πελάτη, accordion αντί
   για navigation, real σελιδοποίηση. Grid-based ώστε τα ΙΔΙΑ elements να αλλάζουν
   θέση mobile↔desktop χωρίς διπλό markup (εκτός phone/addr/sub — βλ. σχόλιο εκεί). */
.pel-stats{margin-bottom:12px}
.pel-stats-body{border:1px solid var(--border);border-top:none;border-radius:0 0 10px 10px;padding:12px;background:var(--surface2)}
.pel-stats-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px;font-size:0.85rem}
.pel-year-nav{display:flex;align-items:center;gap:8px}
.pel-year-btn{width:26px;height:26px;border-radius:6px;border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;font-size:0.9rem;line-height:1}
.pel-year-btn:disabled{opacity:0.3;cursor:default}
.pel-seg{display:flex;gap:6px;margin:8px 0}
.pel-seg-btn{border:1px solid var(--border);border-radius:999px;padding:5px 12px;font-size:0.76rem;cursor:pointer;background:transparent;color:var(--text);font-family:'DM Sans',sans-serif}
.pel-seg-btn.on{background:var(--accent);border-color:var(--accent);color:#fff}
.pel-months{display:grid;grid-template-columns:repeat(12,1fr);gap:4px;margin-top:8px}
.pel-month-cell{text-align:center;border:1px solid var(--border);border-radius:8px;padding:6px 2px;background:var(--surface)}
.pel-month-label{font-size:0.62rem;color:var(--muted)}
.pel-month-val{font-size:0.85rem;font-weight:700;font-family:Syne;color:var(--text)}
.pel-month-val.zero,.pel-month-val.future{color:var(--muted)}
@media (max-width:600px){.pel-months{grid-template-columns:repeat(2,1fr)}}

.pel-loading,.pel-error{text-align:center;color:var(--muted);padding:20px;font-size:0.85rem}
/* perf 20/09: η λίστα δεν καταρρέει στη φόρτωση — οι γραμμές μένουν (θαμπές) με «Φόρτωση…» ως επικάλυψη· το pager κρατά το ύψος του (60px = 2×14 padding + 32 κουμπί) */
#pelatalogion-list{contain:layout paint;position:relative}
#pelatalogion-list.pel-busy>*{opacity:.5;pointer-events:none}
#pelatalogion-list.pel-busy::before{content:'Φόρτωση πελατών…';position:absolute;top:8px;left:0;right:0;z-index:2;text-align:center;color:var(--muted);font-size:0.85rem}
#pel-pager{min-height:60px}
#detail-body{contain:layout paint}
.pel-error{color:var(--red)}
.pel-retry-btn{margin-left:6px;background:var(--surface2);border:1px solid var(--border);border-radius:6px;padding:3px 9px;font-size:0.75rem;cursor:pointer;color:var(--text);font-family:'DM Sans',sans-serif}

/* Mobile-first: ΔΥΟ σειρές, ΤΙΠΟΤΑ άλλο — όνομα+πλακίδιο, μετά στίγμα+διεύθυνση.
   Τηλέφωνο/2ο τηλέφωνο/κωδικός/βελάκι ΔΕΝ εμφανίζονται στη γραμμή σε mobile —
   μπαίνουν στο πτυσσόμενο (_pelAccContactHtml). Desktop τα ξαναφέρνει (εκτός
   κωδικού, που μένει έξω από τη γραμμή και στα δύο breakpoints). */
.pel-row{position:relative;display:grid;grid-template-columns:1fr 68px;grid-template-areas:"name pill" "sub pill";column-gap:8px;row-gap:3px;align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:10px 12px;margin-bottom:6px;cursor:pointer;transition:border-color 0.15s}
.pel-row:hover{border-color:var(--accent)}
.pel-phone,.pel-actioncell,.pel-chev,.pel-row>.pel-addr{display:none}
.pel-name-cell{grid-area:name;display:flex;align-items:center;gap:5px;flex-wrap:wrap;min-width:0}
.pel-name{font-weight:700;font-size:0.88rem;min-width:0;flex-shrink:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-decoration:underline dashed var(--muted);text-underline-offset:3px}
.pel-ready-badge{font-size:0.68rem;font-weight:700;color:var(--green);white-space:nowrap;flex-shrink:0}
.pel-barcode-badge{font-size:0.68rem;font-weight:700;color:var(--amber);white-space:nowrap;flex-shrink:0}
.pel-stigma-ico{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}
/* Στίγμα δίπλα στη διεύθυνση (ΟΧΙ πια ξεχωριστή στήλη): ΣΤΑΘΕΡΑ hex, ΟΧΙ var(--green) —
   εκείνο είναι το κύριο χρώμα της διαχείρισης (μαύρο #0d0d0d).
   Με στίγμα: πράσινο #16A34A + υπογράμμιση (το .pel-live). Χωρίς στίγμα: γκρι #64748B, χωρίς υπογράμμιση. */
.pel-stigma-has{color:#16A34A}
.pel-stigma-missing{color:#64748B}
.pel-addr-row{display:inline-flex;align-items:center;max-width:100%;min-width:0;vertical-align:middle}
.pel-addr-main{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pel-addr-main .pel-stigma-ico{vertical-align:-3px;margin-right:4px}
.pel-addr-main.pel-stigma-missing .pel-live{text-decoration:none}
.pel-stigma-note{flex-shrink:0;margin-left:4px;font-size:12px;white-space:nowrap;text-decoration:none}
.pel-chev{grid-area:chev;color:var(--muted);font-size:0.95rem;transition:transform 0.15s;justify-self:end}
.pel-row.open .pel-chev{transform:rotate(90deg)}
/* Flex (ΟΧΙ πια text-level ellipsis στο container): το εικονίδιο στίγματος
   μένει σταθερού μεγέθους (flex-shrink:0 πάνω), η διεύθυνση (.pel-addr) κόβεται
   ανεξάρτητα μέσα στον υπόλοιπο χώρο. */
.pel-sub{grid-area:sub;display:flex;align-items:center;gap:6px;min-width:0}
/* CodeRabbit-class bug (βρέθηκε στο MOCKUP_pelatologio.html): ένα σκέτο <span>
   είναι inline — δεν σέβεται width/overflow, άρα το text-overflow:ellipsis δεν
   έπιανε ποτέ και η μεγάλη διεύθυνση περνούσε κάτω από στίγμα/πλακίδιο/κουμπί.
   Σε mobile ήταν αόρατο κατά τύχη (flex item ⇒ blockified αυτόματα) — desktop
   το αποκάλυπτε. display:block το διορθώνει και στα δύο breakpoints. Μέγεθος
   0.78rem = ΙΔΙΟ με το πρώην .pel-sub (mobile) — desktop το μεγαλώνει σε
   0.82rem παρακάτω, ΙΔΙΟ με πριν εκεί.*/
.pel-addr{display:block;font-size:0.78rem;color:var(--text);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-decoration:underline solid currentColor;text-underline-offset:2px}
.pel-live{color:inherit;text-decoration:underline solid currentColor;text-underline-offset:2px}
.pel-muted{color:var(--muted)}
/* «Τελευταία καρτέλα» πλακίδιο — πλάτος 68px = μετρημένο πλάτος του «Εκκρεμεί»
   (η μεγαλύτερη λέξη κατάστασης, canvas.measureText στα 13px/500 'DM Sans',
   MOCKUP_pelatologio.html) + 8px αριστερά/δεξιά, ΙΔΙΟ και στις 3 καταστάσεις.
   Ύψος 38px mobile / 40px desktop (override παρακάτω). border-radius 6px =
   ΙΔΙΟ με .btn-sm (η κλάση του «+ Καρτέλα»). Κείμενο μικραίνει (max-width:52px
   στην κάτω γραμμή) — ΠΟΤΕ το πλακίδιο. grid-area:pill spanning και τις 2
   σειρές σε mobile μέσω του "name pill"/"sub pill" template πάνω.*/
.pel-lastorder{grid-area:pill;align-self:center;justify-self:center;width:68px;height:38px;border:none;border-radius:6px;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:4px 0;box-sizing:border-box;color:#fff;font-family:'DM Sans',sans-serif}
.pel-lastorder-top{font-size:10px;font-weight:600;line-height:1.3;opacity:0.85}
.pel-lastorder-bottom{font-size:13px;font-weight:500;line-height:1.3;max-width:52px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* fix 13/09 (δέσμη Α): «Εκκρεμεί»=πράσινο/«Καμία»=μπλε παραπλανούσε — το
   πράσινο σημαίνει «έτοιμο/εντάξει» παντού αλλού στην εφαρμογή. Εκκρεμεί →
   κεχριμπάρι (ουδέτερη προειδοποίηση), Καμία → ουδέτερο γκρι (καμία
   πληροφορία, ΟΧΙ αρνητικό). Το -closed (Εξοφ/κε) ΔΕΝ αγγίζεται — εκτός
   scope αυτού του fix. */
.pel-lastorder-pending{background:#854F0B}
.pel-lastorder-closed{background:#E24B4A}
.pel-lastorder-none{background:#5F5E5A}
.pel-lastorder-unknown{background:#9A9A94}
@media (min-width:601px){
  /* Κωδικός ΕΞΩ από τη γραμμή και στα δύο breakpoints (πάει στο πτυσσόμενο).
     Ο χώρος του (64px) πάει ΑΠΟΚΛΕΙΣΤΙΚΑ στο όνομα: 140px→204px (140+64),
     η διεύθυνση μένει 1.9fr. Πλακίδιο 68px (ίδιο με mobile, ΟΧΙ πια 96px). */
  .pel-row{grid-template-columns:18px minmax(204px,1.5fr) minmax(110px,1fr) minmax(160px,1.9fr) 68px 190px;grid-template-areas:"chev name phone addr pill action";row-gap:0}
  .pel-chev{display:block;justify-self:start}
  .pel-phone{display:block;grid-area:phone;font-size:0.82rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
  .pel-row>.pel-addr{display:block;grid-area:addr;font-size:0.82rem}
  .pel-actioncell{display:flex;align-items:center;gap:8px;justify-self:end;grid-area:action}
  .pel-sub{display:none}
  .pel-lastorder{height:40px}
  /* fix 13/09 (δέσμη Α): desktop δείχνει ήδη τηλέφωνο/2ο στο .pel-phone της
     γραμμής (πάνω) — η αντιγραφή στο πτυσσόμενο (_pelAccContactHtml) κρύβεται
     ΜΟΝΟ εδώ. Mobile (χωρίς αυτό το media query) κρατά τη ΜΟΝΗ του εμφάνιση. */
  .pel-acc-phone-only{display:none}
}

/* Πελατολόγιο — ενέργειες γραμμής μινιμαλιστικές (ύφος docs/design/fason/): εικονίδιο + λέξη, ΧΩΡΙΣ φόντο/περίγραμμα.
   Tokens: κείμενο #0F172A · δευτερεύον #64748B · περίγραμμα #E2E8F0 · μπλε #1D6FD8 · πράσινο #16A34A ·
   «Εκκρεμεί» #B45309 (η ΜΟΝΗ εξαίρεση εκτός fason). Οι παλιοί κανόνες παραπάνω μένουν· αυτοί υπερισχύουν με ειδικότητα. */
.pel-head{display:none}
.pel-row .pel-lastorder,.pel-row .pel-actioncell .cfx-qa-open,.pel-row .pel-actioncell .pel-act-add,.ccp-header-right .pel-lastorder,.ccp-header-right .cfx-qa-open,.ccp-header-right .pel-act-add{background:none;border:none;box-shadow:none;border-radius:8px;padding:6px 4px;color:#64748B;font-family:'DM Sans',sans-serif;font-size:13px;font-weight:500;line-height:1.3;white-space:nowrap;display:inline-flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:4px;box-sizing:border-box;cursor:pointer}
.pel-act-ico{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}
.pel-row .pel-lastorder-pending,.ccp-header-right .pel-lastorder-pending{color:#B45309}
.pel-row .pel-lastorder-closed,.ccp-header-right .pel-lastorder-closed{color:#16A34A}
.pel-row .pel-lastorder-none,.ccp-header-right .pel-lastorder-none{font-weight:400}
.pel-row .pel-actioncell .cfx-qa-open,.ccp-header-right .cfx-qa-open{color:#1D6FD8}
.pel-row .pel-actioncell .pel-act-add,.ccp-header-right .pel-act-add{color:#16A34A}
.pel-row .pel-lastorder:hover,.pel-row .pel-actioncell .cfx-qa-open:hover,.pel-row .pel-actioncell .pel-act-add:hover,.ccp-header-right .pel-lastorder:hover,.ccp-header-right .cfx-qa-open:hover,.ccp-header-right .pel-act-add:hover{background:#F1F5F9}
.pel-row .pel-lastorder-bottom,.ccp-header-right .pel-lastorder-bottom{max-width:none}
@media (min-width:601px){
  /* Στήλες: ...· Καρτέλα 96px · [Ραντεβού 80px + 8px + Νέα καρτέλα 92px = 180px]. Η επικεφαλίδα έχει ΙΔΙΟ grid
     (padding 0 13px = border 1px + padding 12px της γραμμής) ώστε να στοιχίζεται κάθετα. */
  .pel-row,.pel-head{grid-template-columns:18px minmax(204px,1.5fr) minmax(110px,1fr) minmax(160px,1.9fr) 96px 180px;column-gap:8px}
  .pel-head{display:grid;align-items:end;padding:0 13px 4px;font-size:12px;font-weight:500;line-height:1.3;color:#64748B;white-space:nowrap}
  .pel-head-c{padding-left:4px}
  .pel-head-act{display:flex;gap:8px;justify-self:end}
  .pel-head-appt,.pel-head-add{padding-left:4px;box-sizing:border-box}
  .pel-head-appt{width:80px}
  .pel-head-add{width:92px}
  .pel-row .pel-lastorder{width:96px;height:auto;justify-self:start}
  .pel-row .pel-actioncell{gap:8px}
  .pel-row .pel-actioncell .cfx-qa-open{width:80px;flex:none}
  .pel-row .pel-actioncell .pel-act-add{width:92px;flex:none}
}
@media (max-width:600px){
  /* Κινητό: εικονίδιο ΠΑΝΩ από τη λέξη, ελάχιστη περιοχή πατήματος 72×44px. Καμία επικεφαλίδα. */
  .pel-row{grid-template-columns:1fr 72px}
  .pel-row .pel-lastorder{width:72px;height:44px;flex-direction:column;justify-content:center;justify-self:center;gap:2px;padding:4px 0;line-height:1.2}
}

/* Πελατολόγιο — συμπαγές πτυσσόμενο (ύφος docs/design/fason/): λευκό πάνελ κολλημένο στη γραμμή πελάτη.
   Ανοιχτό: η γραμμή στρογγυλεύει μόνο πάνω (12px), το πάνελ μόνο κάτω, λεπτή διαχωριστική #EEF2F6 (το κάτω
   περίγραμμα της γραμμής). Desktop = ΜΙΑ σειρά ~40px· κινητό = 3 σειρές 24px + σειρά ενεργειών. */
.pel-row.open{border-radius:12px 12px 0 0;border-bottom-color:#EEF2F6;margin-bottom:0}
.pel-acc{border:1px solid #E2E8F0;border-top:0;border-radius:0 0 12px 12px;margin:0 0 6px;background:#FFF;color:#0F172A;font-family:'DM Sans',sans-serif;font-size:13px}
.pel-acc-in{padding:6px 12px 8px}
.pel-acc-contact,.pel-acc-notes,.pel-pickups-body{line-height:24px}
.pel-acc-lbl{color:#64748B;font-weight:400}
.pel-acc-val{color:#0F172A;font-weight:600}
.pel-acc-phone-only a{text-decoration:underline}
.pel-acc-notes{color:var(--orange);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pel-acc-dot{display:none;color:#CBD5E1}
.pel-acc-actions{display:flex;flex-wrap:nowrap;align-items:center;gap:8px;margin-top:6px;padding-top:6px;border-top:1px solid #EEF2F6}
.pel-acc .pel-acc-opencust{flex:none;height:40px;padding:0 10px;border:1px solid #1D6FD8;border-radius:10px;background:#FFF;color:#1D6FD8;font:600 13px/1 'DM Sans',sans-serif;white-space:nowrap;cursor:pointer}
.pel-acc .pel-acc-actions .cfx-qa-open,.pel-acc .pel-acc-add{flex:1 1 0;min-width:0;height:40px;min-height:40px;margin:0;padding:0 4px;border:none;border-radius:10px;background:none;box-shadow:none;display:inline-flex;align-items:center;justify-content:center;gap:4px;white-space:nowrap;font:500 13px/1 'DM Sans',sans-serif;cursor:pointer}
.pel-acc .pel-acc-actions .cfx-qa-open{color:#1D6FD8}
.pel-acc .pel-acc-add{color:#16A34A}
.pel-acc .pel-acc-actions .cfx-qa-open:hover,.pel-acc .pel-acc-add:hover{background:#F1F5F9}
@media (min-width:601px){
  .pel-acc-in{display:flex;align-items:center;gap:10px;min-height:40px;padding:0 12px 0 38px}
  .pel-acc-contact{display:contents}
  .pel-acc-code,.pel-pickups-body{flex:none;white-space:nowrap}
  .pel-acc-dot{display:inline;flex:none}
  .pel-acc-notes{flex:0 1 auto;min-width:0}
  .pel-acc-actions{flex:none;margin:0 0 0 auto;padding:0;border-top:0}
  .pel-acc .pel-acc-actions .cfx-qa-open,.pel-acc .pel-acc-add{display:none}
}

.pel-pager{display:flex;align-items:center;justify-content:center;gap:12px;padding:14px 0;font-size:0.8rem;color:var(--muted)}
.pel-pager-btn{width:32px;height:32px;border-radius:8px;border:1px solid var(--border);background:var(--surface);color:var(--text);font-size:1rem;cursor:pointer}
.pel-pager-btn:disabled{opacity:0.35;cursor:default}
.pel-pager-info b{color:var(--text)}

/* CUSTOMER CARD PROFILE — feat/customer-card-minimal: κεφαλίδα + 3 πτυσσόμενα
   πεδία (Στοιχεία και διαχείριση / Παραστατικά / Ιστορικό καρτελών), όλα
   κλειστά εξ ορισμού. Χρώμα με σημασία: μπλε=στοιχεία, πράσινο=τίτλοι
   πεδίων, κόκκινο=διαγραφή/οφειλή. Χωρίς emoji, εικονίδια μόνο γραμμικά. */
.ccp-header{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:14px 16px;margin-bottom:14px}
.ccp-header-top{display:flex;align-items:center;margin-bottom:14px}
.ccp-header-main{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap}
.ccp-header-left{flex:1;min-width:200px}
.ccp-header-right{flex-shrink:0;display:flex;align-items:center;flex-wrap:nowrap;gap:8px}
/* Ενέργειες κεφαλίδας καρτέλας πελάτη = ΙΔΙΕΣ κλάσεις με τη γραμμή Πελατολογίου (.pel-lastorder / .cfx-qa-open / .pel-act-add, παραπάνω). Εδώ μόνο διάταξη. */
.ccp-header-right .pel-lastorder{width:auto;height:auto}
@media (max-width:600px){
  .ccp-header-right{flex:0 0 100%;width:100%;box-sizing:border-box;gap:0;border-top:1px solid #E2E8F0;padding-top:6px}
  .ccp-header-right .pel-lastorder,.ccp-header-right .cfx-qa-open,.ccp-header-right .pel-act-add{flex:1 1 0;min-width:0;min-height:44px;justify-content:center}
  .ccp-header-right .pel-lastorder-bottom{overflow:hidden;text-overflow:ellipsis}
}
/* feat/customer-quick-appointment: κουμπί «Ραντεβού» (γραμμή Πελατολογίου, κεφαλίδα πελάτη, mobile accordion) —
   μπλε, ΧΩΡΙΣ στρογγυλές γωνίες. Το πάνελ (saas_customer_appointment.js) φέρνει τα δικά του στυλ. */
.cfx-qa-open{background:#185FA5;color:#fff;border:1px solid #185FA5;border-radius:0}
.cfx-qa-open:hover{background:#0C447C}
.cfx-qa-acc{display:block;width:100%;margin-top:8px}
@media (min-width:601px){.cfx-qa-acc{display:none}}
.ccp-name{font-family:Syne;font-weight:800;font-size:1.25rem;color:var(--blue);margin-bottom:6px}
.ccp-addr-line{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:0.85rem;margin-bottom:6px}
.ccp-addr-text{color:var(--text);text-decoration:none}
a.ccp-addr-text:hover{text-decoration:underline}
.ccp-pin-ico{width:15px;height:15px;flex-shrink:0;fill:none;stroke:var(--blue);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.ccp-geo-link{color:var(--red);text-decoration:underline;text-underline-offset:2px;font-weight:600}
.ccp-geo-missing{color:var(--muted)}
.ccp-id-line{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ccp-code{font-size:0.8rem;color:var(--muted);font-weight:600}
/* §3: πράσινα κουτιά τηλεφώνου/μηνύματος — ΣΤΑΘΕΡΟ πράσινο (rgba(39,174,96,..)),
   ΟΧΙ var(--green)/var(--accent) (κύριο χρώμα διαχείρισης, μαύρο #0d0d0d, βλ.
   σχόλιο γρ. ~1924 πιο κάτω στο ίδιο αρχείο — σε tenant με σκούρα μάρκα θα έβγαινε μαύρο). */
.ccp-phone-link{display:inline-flex;align-items:center;gap:6px;padding:9px 16px;border-radius:10px;background:rgba(39,174,96,0.12);color:#1e8449;border:1px solid rgba(39,174,96,0.3);text-decoration:none;font-weight:600;font-size:0.85rem}
.ccp-phone-link svg{width:14px;height:14px;flex-shrink:0;fill:none;stroke:#1e8449;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
#cust-profile-message{display:inline-flex;align-items:center;gap:6px;padding:9px 16px;border-radius:10px;background:rgba(39,174,96,0.12);color:#1e8449;border:1px solid rgba(39,174,96,0.3);font-size:0.85rem;font-weight:600;cursor:pointer;font-family:'DM Sans',sans-serif}
#cust-profile-message svg{width:14px;height:14px;flex-shrink:0;fill:none;stroke:#1e8449;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

.ccp-field{background:var(--surface);border:1px solid var(--border);border-radius:12px;margin-bottom:10px;overflow:hidden}
.ccp-field-header{width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;background:none;border:none;padding:14px 16px;cursor:pointer;text-align:left;font-family:'DM Sans',sans-serif}
/* §2: τίτλος πεδίου — ΣΤΑΘΕΡΟ πράσινο #16a34a (ίδια λογική/τιμή με .erg-btn-in
   πιο κάτω), ΟΧΙ var(--green) — εκείνο είναι πια το σταθερό μαύρο #0d0d0d
   της διαχείρισης και θα έβγαινε μαύρο (live 25/07). */
.ccp-field-title{font-family:Syne;font-weight:700;font-size:0.92rem;color:#16a34a}
.ccp-count{margin-left:6px;color:var(--muted);font-weight:600;font-size:0.82rem}
.ccp-chev{color:var(--muted);transition:transform 0.15s;flex-shrink:0}
.ccp-field-header.open .ccp-chev{transform:rotate(90deg)}
.ccp-field-body{padding:0 16px 16px}

.ccp-metrics{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.ccp-metric{flex:0 0 auto;border:1px solid var(--border);border-radius:10px;background:var(--surface2);padding:6px 12px;text-align:left}
.ccp-metric-label{font-size:0.72rem;color:var(--muted)}
.ccp-metric-val{font-family:Syne;font-weight:800;font-size:1rem;color:var(--blue);margin-top:2px}
.ccp-metric-val.money{color:var(--blue)}
.ccp-manage-actions{display:flex;gap:8px;flex-wrap:wrap}
.ccp-btn-ico{width:14px;height:14px;flex-shrink:0;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vertical-align:-2px;margin-right:5px}
#cust-profile-edit{background:var(--surface);color:var(--blue);border:1px solid var(--blue)}
#cust-profile-delete{background:var(--surface);border:1px solid var(--red);color:var(--red)}

.ccp-hist-item{background:var(--surface2);border:1px solid var(--border);border-radius:10px;padding:10px 12px;margin-bottom:8px;cursor:pointer;display:flex;align-items:flex-start;gap:10px}
.ccp-hist-line1{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:0.85rem}
.ccp-hist-line2{font-size:0.75rem;color:var(--muted);margin-top:4px}
.ccp-hist-status{border-radius:6px;padding:2px 7px;font-size:0.72rem;font-weight:700}
.ccp-hist-status.st-progress{background:rgba(192,57,107,0.1);color:var(--red);border:1px solid rgba(192,57,107,0.3)}
.ccp-hist-status.st-ready{background:rgba(var(--brand-secondary-rgb),0.1);color:var(--green);border:1px solid rgba(var(--brand-secondary-rgb),0.3)}
.ccp-hist-status.st-delivered{background:rgba(24,95,165,0.1);color:#185FA5;border:1px solid rgba(24,95,165,0.3)}
.ccp-hist-status.st-partial{background:#FBE7D2;color:#8A4B00;border:1px solid #E9B872}
.ccp-hist-right{text-align:right;flex-shrink:0}
.ccp-hist-amount{font-family:Syne;font-weight:800;color:var(--accent);font-size:1rem}
.ccp-hist-open{font-size:0.72rem;color:var(--muted);margin-top:4px}

/* MODAL */
/* backdrop-filter αφαιρέθηκε 20/09: ξαναθόλωνε ΟΛΗ τη σελίδα σε κάθε πλήκτρο/κλικ (300-440 ms παρουσίασης, INP 504) και δεν φαινόταν κάτω από 80% μαύρο */
.modal-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,0.8);z-index:500;align-items:flex-start;justify-content:center;padding:16px;overflow-y:auto;-webkit-overflow-scrolling:touch;contain:layout paint style;overscroll-behavior:contain}
.modal-overlay.open{display:flex}
/* Άνοιγμα παραθύρου: ΜΟΝΟ opacity 0→1 + translateY(-10px)→0, 200ms ease-out — μόνο στο παράθυρο, όχι στο φόντο.
   Δικό του keyframe (το nSlide του .notif-mini-notif μένει ως έχει) και το translateY γράφεται με τη ΞΕΧΩΡΙΣΤΗ ιδιότητα `translate`:
   δεν πειράζει το `transform` του παιδιού (κεντράρισμα/scale), ΚΑΙ δεν έχει scale — ίδιο ύψος/πλάτος σε κάθε καρέ, τίποτα δεν βγαίνει από την οθόνη. */
@keyframes modalIn{from{opacity:0;translate:0 -10px}to{opacity:1;translate:0 0}}
.modal-overlay.open > *{animation:modalIn 200ms ease-out}
/* Κινητό: ό,τι παιδί ανοίγει μέσα σε overlay μένει ΜΕΣΑ στο πλάτος της οθόνης (min-width:0 = να μη φουσκώνει από το περιεχόμενό του). */
@media (max-width: 480px){.modal-overlay > *{max-width:100%;min-width:0;box-sizing:border-box}}
@media (prefers-reduced-motion: reduce){.modal-overlay.open > *{animation:none}}
/* Sub-modals που ανοίγουν από parent modal context (purpose-picker,
   onsite-services, estimation-reason). Πάνω από base modals (500),
   κάτω από per-modal stacking ladder (10000+). */
.modal-overlay.modal-sub{z-index:600}
/* Confirmation dialogs που μπορεί να καλεστούν από inside άλλο modal
   (π.χ. αναίρεση προκαταβολής, διαγραφή ετικέτας από compact-edit).
   z-index 10200: πάνω από όλα τα per-modal stacking (max 10100 lightbox),
   κάτω από toast (100000). */
.modal-overlay.modal-confirm-dialog{z-index:10200}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.6}}
@keyframes pinShake{0%,100%{transform:translateX(0)}20%{transform:translateX(-8px)}40%{transform:translateX(8px)}60%{transform:translateX(-6px)}80%{transform:translateX(6px)}}
.modal-box{background:var(--surface);border:1px solid var(--border);border-radius:18px;padding:20px;width:100%;max-width:500px;margin:auto}
/* fix/ergani-refresh-and-modal-scroll: overflow-x:hidden ρητά — χωρίς αυτό ο
   browser επέβαλλε σιωπηλά και οριζόντια κύλιση (κανόνας CSS: μία εκ των δύο
   overflow-x/overflow-y='visible' με την άλλη 'auto' αναγκάζει ΚΑΙ τις δύο σε
   'auto'). Ελέγχθηκε: κανένα modal στην εφαρμογή δεν στηρίζεται σε αυτή την
   πλάγια συμπεριφορά — πλατύ περιεχόμενο (π.χ. index.html:30509, γράφημα
   dashboard) έχει ΗΔΗ δικό του ρητό overflow-x:auto wrapper, ίδιο μοτίβο
   παντού (.nav, #cal-grid, .dfin-chart-svg) — αυτό συνεχίζει να δουλεύει
   ανεπηρέαστο, μόνο το ΑΤΥΧΗΜΑ στο ίδιο το .modal φεύγει. */
.modal{background:var(--surface);border:1px solid var(--border);border-radius:18px;padding:24px;width:100%;max-width:500px;max-height:90vh;overflow-y:auto;overflow-x:hidden;contain:layout paint style}
.modal h2{font-family:Syne;font-weight:800;font-size:1.1rem;margin-bottom:18px}
.form-group{margin-bottom:12px}
.form-group label{font-size:0.78rem;color:var(--muted);display:block;margin-bottom:4px}
.form-group input,.form-group select,.form-group textarea{width:100%;background:var(--surface2);border:1px solid var(--border);border-radius:9px;padding:9px 12px;color:var(--text);font-family:'DM Sans',sans-serif;font-size:0.9rem;outline:none}
.form-group input:focus,.form-group select:focus,.form-group textarea:focus{border-color:var(--accent)}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
/* New Customer modal (#modal-new-customer): ΕΝΑ μονόστηλο πλέγμα με ενότητες η μία κάτω από την άλλη.
   Κοινή παλέτα με τον wizard παραλαβής: τίτλος πράσινο #3B6D11, ετικέτες 11px κεφαλαία #185FA5, πεδία #F4F7FA χωρίς
   περίγραμμα με γράμματα #0C447C, περίγραμμα modal 1.5px #97C459. Οι ids των πεδίων (nc-*) μένουν ΑΜΕΤΑΒΛΗΤΟΙ: τα
   διαβάζουν η φωνητική καταχώρηση, το conflict panel κινητού και ο έλεγχος «τουλάχιστον ένα τηλέφωνο». */
#modal-new-customer .nc-modal{border:1.5px solid #97C459;max-width:520px}
#modal-new-customer .nc-title{color:#3B6D11;font-family:Syne;font-weight:800;font-size:1.15rem;margin-bottom:16px}
.nc-grid{display:grid;gap:14px;grid-template-columns:1fr}
#modal-new-customer .nc-grid .form-group{margin-bottom:0;min-width:0}
#modal-new-customer .nc-grid label{font-family:Syne;font-size:11px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:#185FA5;margin-bottom:6px;display:block}
#modal-new-customer .nc-opt{text-transform:none;letter-spacing:0;font-weight:500}
#modal-new-customer .nc-grid input,#modal-new-customer .nc-grid select,#modal-new-customer .nc-grid textarea{width:100%;background:#F4F7FA;border:none;border-radius:10px;padding:11px 12px;color:#0C447C;font-family:'DM Sans',sans-serif;font-size:0.95rem;outline:none;box-sizing:border-box}
#modal-new-customer .nc-grid input:focus,#modal-new-customer .nc-grid select:focus,#modal-new-customer .nc-grid textarea:focus{box-shadow:inset 0 0 0 1.5px #378ADD}
.nc-name-row{display:flex;align-items:center;gap:8px}
.nc-name-row input{flex:1;min-width:0}
.nc-badge-wrap{display:inline-flex;align-items:center;flex-shrink:0}
.nc-badge-wrap .cfx-mk-badge{margin-right:0}
.nc-phones-row{display:grid;grid-template-columns:1fr 36px 1fr;gap:8px;align-items:end}
.nc-phones-row2{display:grid;grid-template-columns:1fr 36px 1fr;gap:8px;margin-top:8px}
.nc-swap-row{display:grid;grid-template-columns:1fr 36px 1fr;gap:8px;margin-top:6px}
.nc-swap-row .nc-swap,.ec-swap-row .nc-swap{justify-self:center;height:30px;min-width:36px;width:36px}
.nc-phone-cell{min-width:0}
.nc-sublabel{display:block;white-space:nowrap;font-size:11px;color:#185FA5;margin-bottom:4px;font-weight:600}
.nc-swap{height:42px;min-width:36px;width:36px;border:none;border-radius:10px;background:#E6F1FB;color:#0C447C;font-size:1.1rem;font-weight:800;cursor:pointer}
.nc-extra-row{display:flex;gap:8px;align-items:center;margin-top:8px}
.nc-extra-row input{flex:1;min-width:0}
.nc-extra-del{height:42px;min-width:42px;border:none;border-radius:10px;background:#E6F1FB;color:#0C447C;font-size:1.2rem;cursor:pointer}
.nc-link{background:none;border:none;color:#3B6D11;font-family:Syne;font-weight:700;font-size:0.9rem;cursor:pointer;padding:10px 0 0;text-align:left}
.nc-hint{font-size:0.8rem;color:#185FA5;padding:0 2px}
.nc-addr-field{display:flex;align-items:center;gap:0}
.nc-addr-field input{flex:1;min-width:0}
.nc-parking-wrap{display:inline-flex;align-items:center;flex-shrink:0;margin-left:2px}
.nc-address-row{display:grid;gap:12px;grid-template-columns:1fr 1.4fr 90px}
@media (max-width:600px){
  .nc-address-row{grid-template-columns:1fr 90px;grid-template-areas:"area area" "address floor"}
  .nc-address-row > :nth-child(1){grid-area:area}
  .nc-address-row > :nth-child(2){grid-area:address}
  .nc-address-row > :nth-child(3){grid-area:floor}
}
#modal-new-customer .modal-actions{display:flex;gap:10px}
#modal-new-customer .modal-actions .btn{flex:1;min-height:44px;border:none;font-family:Syne;font-weight:700}
#modal-new-customer .modal-actions .btn-cancel{background:#E6F1FB;color:#0C447C}
#modal-new-customer .modal-actions .btn-primary{background:#0C447C;color:#fff}
/* Edit Customer modal — single grid container με grid-template-areas.
   Nested containers: .ec-phones-row (phones 50/50 always, no mobile stack),
   .ec-address-row (flex desktop, grid mobile). Desktop swap: Περιοχή+Κατηγορία
   pair (area 67% / badge 33% μέσω "area area badge"), Σημειώσεις standalone full. */
.ec-grid{display:grid;gap:10px;grid-template-columns:90px 1.4fr 1fr;grid-template-areas:"banner banner banner" "code lastname firstname" "phones phones phones" "hint hint hint" "address-row address-row address-row" "area area badge" "billing billing billing" "pin pin pin" "notes notes notes"}
.ec-grid > [data-area="banner"]{grid-area:banner}
.ec-grid > [data-area="code"]{grid-area:code}
.ec-grid > [data-area="lastname"]{grid-area:lastname}
.ec-grid > [data-area="firstname"]{grid-area:firstname}
.ec-grid > [data-area="phones"]{grid-area:phones}
.ec-grid > [data-area="hint"]{grid-area:hint}
.ec-grid > [data-area="address-row"]{grid-area:address-row}
.ec-grid > [data-area="area"]{grid-area:area}
.ec-grid > [data-area="badge"]{grid-area:badge}
.ec-grid > [data-area="billing"]{grid-area:billing}
.ec-grid > [data-area="pin"]{grid-area:pin}
.ec-grid > [data-area="notes"]{grid-area:notes}
/* Compound selector `.form-row.ec-phones-row` (specificity 20) νικάει το
   `.form-row{grid-template-columns:1fr}` mobile override (specificity 10)
   ώστε τα phones να παραμένουν 50/50 pair και σε mobile. Το markup έχει
   ΚΑΙ τις 2 classes ώστε το saas_customer_conflict.js::_insertPanelAfter
   (που ψάχνει `.closest('.form-row')`) να τοποθετεί warning panels ΚΑΤΩ
   από τη phones row, όχι μέσα σε cell. */
.form-row.ec-phones-row{grid-template-columns:1fr 36px 1fr}
.ec-phones-row > .nc-swap{align-self:end}
.ec-address-row{display:flex;gap:12px}
.ec-address-row > :nth-child(1){flex:1}
.ec-address-row > :nth-child(2){flex:0 0 80px}
/* Progressive enhancement: collapse banner row όταν hidden (:has support Chrome 105+/Safari 15.4+/FF 121+).
   PIN section (rare, bottom) — accepts 10px ghost gap όταν hidden. Cosmetic only. */
.ec-grid:has([data-area="banner"][style*="display: none"]),.ec-grid:has([data-area="banner"][style*="display:none"]){grid-template-areas:"code lastname firstname" "phones phones phones" "hint hint hint" "address-row address-row address-row" "area area badge" "billing billing billing" "pin pin pin" "notes notes notes"}
@media (max-width:600px){
  .ec-grid{grid-template-columns:100px 1fr;grid-template-areas:"banner banner" "code badge" "lastname lastname" "firstname firstname" "phones phones" "hint hint" "area area" "address-row address-row" "billing billing" "pin pin" "notes notes"}
  .ec-grid:has([data-area="banner"][style*="display: none"]),.ec-grid:has([data-area="banner"][style*="display:none"]){grid-template-areas:"code badge" "lastname lastname" "firstname firstname" "phones phones" "hint hint" "area area" "address-row address-row" "billing billing" "pin pin" "notes notes"}
  .ec-address-row{display:grid;grid-template-columns:1fr 85px;gap:8px}
  .ec-address-row > :nth-child(1){flex:initial}
  .ec-address-row > :nth-child(2){flex:initial}
}
.modal-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end;margin-top:18px}

/* ========== ΕΡΓΑΝΗ Ρυθμίσεις: μοτίβο βοήθειας ==========
   Ακριβώς 3 χρήσεις σήμερα, μόνο μέσα στο #modal-ergani-settings (Κωδικοί
   ΕΡΓΑΝΗ / Παράρτημα / Καθεστώς δήλωσης ωραρίων). Κλειστό by default, μία
   φούσκα ανοιχτή τη φορά, σπρώχνει το περιεχόμενο (όχι overlay). Πρώτο
   άνοιγμα ποτέ της οθόνης: μία φούσκα ανοίγει μόνη της (localStorage flag,
   βλ. erganiOpenSettings). Wiring: saas_ergani_card.js (targeting μέσω
   attribute [data-erg-q], όχι class — ίδιο wiring και για τις δύο μορφές).

   Δύο μορφές:
   - .erg-htrig — η ετικέτα ΕΙΝΑΙ το πατούμενο στοιχείο, διακεκομμένη
     υπογράμμιση, καμία σχηματική ένδειξη (κύκλος/σύμβολο/χρώμα). Default
     όταν η ετικέτα δεν ανήκει ήδη σε δικό της χειριστήριο.
   - .erg-hicon — λεπτός κύκλος «i», ΜΟΝΟ όταν η ετικέτα ανήκει ήδη σε
     checkbox/διακόπτη/κουμπί (εκεί η υπογράμμιση θα συγκρουόταν με το
     πάτημα του ίδιου του χειριστηρίου). Τοποθέτησέ το στην άκρη δεξιά της
     γραμμής, μακριά από την περιοχή πατήματος του χειριστηρίου (π.χ.
     justify-content:space-between στο container). Καμία χρήση σήμερα —
     ορισμένο για συνέπεια όταν χρειαστεί.
   Και τα δύο: σβηστός τόνος (var(--muted)) που σκουραίνει (var(--text)) σε
   hover/focus, padding+αρνητικό margin για περιοχή πατήματος ~44px χωρίς
   να ανοίγουν αισθητά τα κενά γύρω τους. */
.erg-htrig{
  display:block;width:100%;text-align:left;background:none;border:none;
  padding:15px 4px;margin:-11px -4px;
  font-family:inherit;color:var(--muted);cursor:pointer;
  text-decoration:underline;text-decoration-style:dashed;text-underline-offset:3px
}
.erg-htrig:hover,.erg-htrig:focus-visible{color:var(--text)}
.erg-hicon{
  width:16px;height:16px;border-radius:50%;border:1px solid var(--muted);background:none;
  color:var(--muted);font-size:0.62rem;font-style:normal;font-weight:700;line-height:1;
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0;
  padding:14px;margin:-14px
}
.erg-hicon:hover,.erg-hicon:focus-visible{color:var(--text);border-color:var(--text)}
.erg-qbubble{
  display:none;background:var(--surface2);border:1px solid var(--border);border-radius:10px;
  padding:10px 12px;font-size:0.78rem;line-height:1.55;color:var(--text);margin-top:6px;
  position:relative
}
.erg-qbubble.open{display:block}
.erg-qbubble .erg-qclose{
  position:absolute;top:6px;right:8px;background:none;border:none;color:var(--muted);
  font-size:1rem;cursor:pointer;padding:2px 6px;line-height:1
}
.erg-qbubble .erg-qclose:hover{color:var(--text)}
.erg-qbubble-body{padding-right:18px}

/* ========== PR-B: Appointment Purpose Feature ========== */
/* Header row: τίτλος αριστερά + chip ημερομηνίας δεξιά */
#modal-new-appoint .ap-header-row {
  display:flex; justify-content:space-between; align-items:center;
  gap:10px; margin-bottom:18px;
}
#modal-new-appoint .ap-header-row h2 { margin:0; }
#modal-new-appoint .ap-date-chip {
  background:var(--surface2); border:1px solid var(--border);
  border-radius:20px; padding:7px 14px; color:var(--text);
  font-size:0.85rem; font-weight:700; width:auto; outline:none; cursor:pointer;
  font-family:'DM Sans', sans-serif;
}

/* Sticky bottom stack — wraps purpose bar + modal-actions σε ένα κοινό
   sticky block. Καθαρότερο από το να γίνεται κάθε child sticky με
   υπολογισμένα `bottom` offsets (που ήταν fragile σε αλλαγές button height). */
#modal-new-appoint .ap-bottom-stack {
  position:sticky;
  bottom:-24px;  /* counters .modal padding-bottom 24px */
  background:var(--surface);
  margin:18px -24px -24px;
  padding:14px 24px 24px;
  z-index:2;
  border-top:1px solid var(--border);
}
/* ============================================================
   feat/appointment-form-redesign — φόρμα «Νέο ραντεβού»
   ============================================================
   Λευκές επιφάνειες, περιγράμματα 0.5px, πεζά, δύο βάρη γραμματοσειράς.
   ΟΛΟΙ οι κανόνες είναι scoped σε #modal-new-appoint ώστε να μην αγγίξουν
   την επεξεργασία ραντεβού ή οποιαδήποτε άλλη οθόνη του admin. */
#modal-new-appoint .ap-title { color: var(--blue, #185FA5); font-weight: 700; }

#modal-new-appoint .ap-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 20px; }
#modal-new-appoint .ap-col { min-width: 0; }
@media (max-width: 780px) { #modal-new-appoint .ap-grid { grid-template-columns: 1fr; gap: 0; } }

/* Το ΠΡΑΣΙΝΟ είναι το σήμα του υποχρεωτικού — γιαυτό έφυγαν οι αστερίσκοι. */
#modal-new-appoint .ap-lbl-req { color: #639922; font-size: 13px; font-weight: 500; }

#modal-new-appoint .ap-field,
#modal-new-appoint .ap-input,
#modal-new-appoint .ap-select {
  width: 100%; box-sizing: border-box; min-height: 42px;
  background: var(--surface); border: 0.5px solid var(--border); border-radius: 9px;
  padding: 9px 12px; color: var(--text); font-size: 0.9rem; outline: none;
}
#modal-new-appoint .ap-field {
  display: flex; align-items: center; justify-content: space-between;
  gap: 8px; cursor: pointer;
}
#modal-new-appoint .ap-field-ph { color: var(--muted); }
#modal-new-appoint .ap-field-val { color: var(--text); font-weight: 500; }
#modal-new-appoint .ap-caret { color: var(--muted); font-size: 0.8rem; flex-shrink: 0; }

#modal-new-appoint .ap-hint { font-size: 12px; color: var(--muted); margin-top: 4px; }
#modal-new-appoint .ap-err { font-size: 13px; color: #A32D2D; margin-top: 4px; }
/* Κόκκινο ΜΟΝΟ στο πεδίο, ΜΟΝΟ μετά από αφή — βλ. _apTouch / _apRefreshErrors. */
#modal-new-appoint .ap-invalid { border-color: #A32D2D !important; }

/* Ώρα — τρία στάδια, το καθένα γεννιέται από το προηγούμενο. */
#modal-new-appoint .ap-time-panel {
  margin-top: 6px; padding: 10px; background: var(--surface);
  border: 0.5px solid var(--border); border-radius: 10px;
}
/* Προτεραιότητα στη ΜΙΑ ΓΡΑΜΜΗ: auto-fit με ελάχιστο πλάτος που χωράει
   άνετα το «08:00 – 09:00». Λιγότερες στήλες αν χρειαστεί — ποτέ σπάσιμο. */
#modal-new-appoint .ap-tiles {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(118px, 1fr)); gap: 6px;
}
#modal-new-appoint .ap-tiles button {
  display: flex; align-items: center; justify-content: center; gap: 6px;
  min-height: 38px; padding: 6px 8px; cursor: pointer;
  background: var(--surface); border: 0.5px solid var(--border); border-radius: 8px;
  color: var(--text); font-size: 0.85rem; font-weight: 500;
  white-space: nowrap;
}
#modal-new-appoint .ap-tiles button.sel { border-color: #639922; background: #F2F8EA; }

/* Το «αλλαγή» μέσα στο πεδίο, στη θέση του βελακιού. */
#modal-new-appoint .ap-field-change {
  background: transparent; border: 0; color: #185FA5;
  font-size: 13px; font-weight: 500; cursor: pointer; padding: 2px 0; flex-shrink: 0;
}

/* Κάθε στάδιο = δική του ζώνη με απαλό φόντο και ετικέτα 12px στο χρώμα του.
   Οι τιμές είναι τα --purple / --amber της παλέτας· τα απαλά φόντα γράφονται
   ρητά ως rgba των ίδιων χρωμάτων (η παλέτα δεν κρατά αποχρώσεις). */
#modal-new-appoint .ap-stage { margin-top: 8px; padding: 9px 10px; border-radius: 9px; }
#modal-new-appoint .ap-stage-lbl { font-size: 12px; font-weight: 500; margin-bottom: 7px; }
#modal-new-appoint .ap-stage-half { background: rgba(155, 89, 182, 0.07); }
#modal-new-appoint .ap-stage-half .ap-stage-lbl { color: var(--purple); }
#modal-new-appoint .ap-stage-min { background: rgba(200, 137, 31, 0.09); }
#modal-new-appoint .ap-stage-min .ap-stage-lbl { color: var(--amber); }

/* ΦΘΙΝΟΝ ΜΕΓΕΘΟΣ: το κάθε στάδιο είναι υποδιαίρεση του προηγούμενου,
   όχι νέα λίστα ισότιμων επιλογών. */
#modal-new-appoint .ap-stage-half .ap-tiles button {
  min-height: 34px; font-size: 0.8rem;
  border-color: var(--purple); color: var(--purple);
}
#modal-new-appoint .ap-stage-half .ap-tiles button.sel {
  background: var(--purple); border-color: var(--purple); color: #fff;
}
#modal-new-appoint .ap-stage-min .ap-tiles { grid-template-columns: repeat(auto-fit, minmax(64px, 1fr)); }
#modal-new-appoint .ap-stage-min .ap-tiles button {
  min-height: 30px; font-size: 0.75rem;
  border-color: var(--amber); color: var(--amber);
}
#modal-new-appoint .ap-stage-min .ap-tiles button.sel {
  background: var(--amber); border-color: var(--amber); color: #fff;
}
/* Σκέτο πλήθος: χωρίς όριο, χωρίς παρονομαστή, χωρίς χρώμα, χωρίς πλαίσιο. */
#modal-new-appoint .ap-tile-count { font-size: 12px; color: var(--muted); font-weight: 400; }

/* Σκοπός — τέσσερα πλακίδια, πλέγμα 2x2, εικονίδια γραμμής. */
#modal-new-appoint .ap-purpose-tiles { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
#modal-new-appoint .ap-tile {
  display: flex; align-items: center; gap: 9px; min-height: 52px; padding: 10px 12px;
  background: var(--surface); border: 0.5px solid var(--border); border-radius: 10px;
  color: var(--text); font-size: 0.9rem; font-weight: 500; cursor: pointer; text-align: left;
}
#modal-new-appoint .ap-tile.sel { border-color: #639922; background: #F2F8EA; }
#modal-new-appoint .ap-tile-ico {
  width: 20px; height: 20px; flex-shrink: 0; fill: none;
  stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round;
}
/* Desktop: πλέγμα inline. Κινητό: πεδίο που ανοίγει φύλλο από κάτω. */
#modal-new-appoint #ap-purpose-mobile { display: none; }
@media (max-width: 780px) {
  #modal-new-appoint #ap-purpose-grid { display: none; }
  #modal-new-appoint #ap-purpose-mobile { display: flex; }
}

/* Φύλλο σκοπού (κινητό) — πλακίδια κάθετα: εικονίδιο πάνω, λέξη κάτω. */
#ap-purpose-sheet { position: fixed; inset: 0; z-index: 1200; display: none; }
#ap-purpose-sheet.open { display: block; }
#ap-purpose-sheet .ap-sheet-scrim { position: absolute; inset: 0; background: rgba(0,0,0,0.35); }
#ap-purpose-sheet .ap-sheet-body {
  position: absolute; left: 0; right: 0; bottom: 0;
  background: var(--surface); border-radius: 16px 16px 0 0; padding: 18px 16px 22px;
}
#ap-purpose-sheet .ap-sheet-title { font-size: 0.95rem; font-weight: 700; margin-bottom: 12px; }
#ap-purpose-sheet .ap-sheet-tiles { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
#ap-purpose-sheet .ap-sheet-tiles button {
  display: flex; flex-direction: column; align-items: center; gap: 7px;
  padding: 14px 6px; background: var(--surface); border: 0.5px solid var(--border);
  border-radius: 12px; color: var(--text); font-size: 0.8rem; font-weight: 500; cursor: pointer;
}
#ap-purpose-sheet .ap-sheet-tiles button.sel { border-color: #639922; background: #F2F8EA; }
#ap-purpose-sheet .ap-sheet-tiles .ap-tile-ico { width: 24px; height: 24px; }
#ap-purpose-sheet .ap-sheet-actions { display: flex; gap: 10px; margin-top: 16px; }
#ap-purpose-sheet .ap-sheet-actions button { flex: 1; min-height: 46px; border-radius: 10px; font-size: 0.92rem; font-weight: 600; cursor: pointer; }
#ap-purpose-sheet .ap-sheet-cancel { background: var(--surface2); border: 0.5px solid var(--border); color: var(--text); }
#ap-purpose-sheet .ap-sheet-ok { background: #639922; border: 0; color: #fff; }

/* Πελάτης — μία γραμμή. */
#modal-new-appoint .ap-cust-list {
  max-height: 190px; overflow-y: auto; margin-top: 4px;
  border: 0.5px solid var(--border); border-radius: 9px; background: var(--surface);
}
#modal-new-appoint .ap-cust-list:empty { display: none; }
#modal-new-appoint .ap-cust-item {
  padding: 9px 12px; cursor: pointer; font-size: 0.88rem;
  border-bottom: 0.5px solid var(--border);
}
#modal-new-appoint .ap-cust-item:last-child { border-bottom: 0; }
#modal-new-appoint .ap-cust-item:hover { background: var(--surface2); }
#modal-new-appoint .ap-newcust-btn {
  width: 100%; min-height: 42px; box-sizing: border-box; cursor: pointer;
  background: var(--surface2); border: 0.5px solid var(--border); border-radius: 9px;
  color: #185FA5; font-size: 0.88rem; font-weight: 600;
}
#modal-new-appoint .ap-chosen {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  margin-top: 6px; padding: 9px 12px; background: var(--surface);
  border: 0.5px solid var(--border); border-radius: 9px; font-size: 0.88rem; font-weight: 500;
}
#modal-new-appoint .ap-chosen button {
  background: transparent; border: 0; color: var(--muted);
  font-size: 1.05rem; line-height: 1; cursor: pointer; padding: 2px 4px;
}
/* Σημειώσεις + μικρόφωνο ΜΕΣΑ στο πεδίο. */
#modal-new-appoint .ap-notes-wrap { position: relative; }
#modal-new-appoint .ap-notes-wrap textarea { width: 100%; box-sizing: border-box; padding-right: 44px; }
#modal-new-appoint .ap-mic {
  position: absolute; top: 8px; right: 8px; width: 30px; height: 30px;
  display: flex; align-items: center; justify-content: center;
  background: var(--surface2); border: 0.5px solid var(--border); border-radius: 8px;
  color: var(--muted); cursor: pointer; padding: 0;
}
#modal-new-appoint .ap-mic svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; }
#modal-new-appoint .ap-mic.vi-btn-rec { color: #A32D2D; border-color: #A32D2D; }

/* Υπόμνηση «Λείπουν: …» — ΓΚΡΙΖΑ, δεν είναι σφάλμα. */
#modal-new-appoint .ap-actions { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
#modal-new-appoint .ap-missing { font-size: 13px; color: var(--muted); flex: 1; min-width: 0; }
#modal-new-appoint .ap-missing:empty { display: none; }
@media (max-width: 780px) {
  #modal-new-appoint .ap-actions { flex-direction: column-reverse; align-items: stretch; }
  #modal-new-appoint .ap-missing { text-align: center; }
}

/* Disabled save button (purpose missing) */
#modal-new-appoint .modal-actions .btn-primary[disabled] {
  opacity:0.45; cursor:not-allowed; pointer-events:none;
}
/* Override global .modal-actions margin-top:18px για tighter look μέσα στο stack */
#modal-new-appoint .ap-bottom-stack .modal-actions {
  margin-top:14px;
}

/* ============================================================
   Οπτικά ευρήματα 04/10 (#7/#8/#9) — «Νέο ραντεβού»: ΜΙΑ σειρά ανά πεδίο,
   τίτλος αριστερά / τιμή δεξιά (μοτίβο παραθύρου χαλιού). ΜΟΝΟ όψη — ίδια
   πεδία/ids/σειρά/κανόνες· scoped στο #modal-new-appoint.
   Πράσινο #639922 = τίτλος · μπλε #185FA5 διακεκομμένη = πατιέται ·
   σκούρο #0F172A = τιμή που μπήκε · γκρι #64748B = δευτερεύον ·
   πορτοκαλί #B45309 (το «Εκκρεμεί» της εφαρμογής) = λείπει/εκκρεμεί.
   Το γκριζομώβ (--muted #7b82a8, --purple, --amber) φεύγει από το παράθυρο.
   ============================================================ */
#modal-new-appoint { --muted: #64748B; --text-secondary: #64748B; --text-muted: #64748B; }

#modal-new-appoint .ap-row {
  display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: 12px;
  align-items: center; margin-bottom: 0; padding: 10px 0; border-bottom: 1px solid #E2E8F0;
}
#modal-new-appoint .ap-row > .ap-lbl-req { grid-column: 1; grid-row: 1; margin: 0; font-size: 0.9rem; color: #639922; }
#modal-new-appoint .ap-row > .ap-field,
#modal-new-appoint .ap-row > .ap-select,
#modal-new-appoint .ap-row > .ap-input,
#modal-new-appoint .ap-row > .ap-chosen { grid-column: 2; grid-row: 1; }
#modal-new-appoint .ap-row > .ap-hint,
#modal-new-appoint .ap-row > .ap-time-panel,
#modal-new-appoint .ap-row > .ap-err,
#modal-new-appoint .ap-row > .ap-cust-list { grid-column: 1 / -1; }
#modal-new-appoint .ap-row .ap-field,
#modal-new-appoint .ap-row .ap-input,
#modal-new-appoint .ap-row .ap-select {
  min-height: 0; width: auto; max-width: 100%; justify-self: end; box-sizing: border-box;
  background: transparent; border: 0; border-radius: 0; padding: 0; box-shadow: none;
  color: #0F172A; font-size: 0.9rem; text-align: right;
}
#modal-new-appoint .ap-row .ap-input { width: 100%; }
#modal-new-appoint .ap-row .ap-input::placeholder { color: #64748B; opacity: 1; }
#modal-new-appoint .ap-row .ap-caret { display: none; }
/* Κενό = πορτοκαλί, συμπληρωμένο = σκούρο με μπλε διακεκομμένη. */
#modal-new-appoint .ap-field-ph { color: #B45309; }
#modal-new-appoint .ap-field-val { color: #0F172A; border-bottom: 1px dashed #185FA5; padding-bottom: 2px; }
#modal-new-appoint .ap-row .ap-select {
  -webkit-appearance: none; appearance: none; cursor: pointer; text-align-last: right;
  border-bottom: 1px dashed #185FA5; padding-bottom: 2px; background-image: none;
}
#modal-new-appoint .ap-row .ap-select option { color: #0F172A; }
#modal-new-appoint .ap-row .ap-select:has(option[value=""]:checked) { color: #B45309; border-bottom-color: transparent; }
#modal-new-appoint .ap-row .ap-chosen {
  margin-top: 0; padding: 0; background: transparent; border: 0; border-radius: 0;
  justify-content: flex-end; min-width: 0; font-size: 0.9rem; font-weight: 500; text-align: right; overflow-wrap: anywhere;
}
/* Κινητό: το global input,select{font-size:1rem!important} (iOS zoom) ισχύει για Ζώνη/Πελάτη — τα υπόλοιπα ίδιο μέγεθος. */
@media (max-width: 600px) {
  #modal-new-appoint .ap-row .ap-field,
  #modal-new-appoint .ap-row .ap-chosen,
  #modal-new-appoint .cfx-pm-line-val,
  #modal-new-appoint .ap-dline-val,
  #modal-new-appoint .ap-di-check,
  #modal-new-appoint #ap-newcust-open-btn { font-size: 1rem; }
}
#modal-new-appoint .ap-cs-name { color: #0F172A; border-bottom: 1px dashed #185FA5; padding-bottom: 2px; }
#modal-new-appoint .ap-cs-ph { color: #64748B; font-weight: 400; }

/* Ώρα — τα στάδια ανοίγουν από κάτω όπως πριν, χωρίς μωβ/κεχριμπαρί. */
#modal-new-appoint .ap-time-panel { margin: 8px 0 0; background: #fff; border: 1px solid #E2E8F0; }
#modal-new-appoint .ap-tiles button,
#modal-new-appoint .ap-stage-half .ap-tiles button,
#modal-new-appoint .ap-stage-min .ap-tiles button { background: #fff; border: 1px solid #E2E8F0; color: #0F172A; }
#modal-new-appoint .ap-tiles button.sel,
#modal-new-appoint .ap-stage-half .ap-tiles button.sel,
#modal-new-appoint .ap-stage-min .ap-tiles button.sel { background: #fff; border: 1px dashed #185FA5; color: #0F172A; }
#modal-new-appoint .ap-stage-half,
#modal-new-appoint .ap-stage-min { background: #F8FAFC; }
#modal-new-appoint .ap-stage-half .ap-stage-lbl,
#modal-new-appoint .ap-stage-min .ap-stage-lbl { color: #64748B; }

/* Σκοπός — desktop: τίτλος πάνω, πλακίδια κάτω· κινητό: σειρά τίτλος/τιμή. */
#modal-new-appoint .ap-row-purpose { display: block; }
#modal-new-appoint .ap-row-purpose > .ap-lbl-req { display: block; margin-bottom: 8px; }
#modal-new-appoint .ap-tile { background: #fff; border: 1px solid #E2E8F0; color: #185FA5; }
#modal-new-appoint .ap-tile.sel { background: #fff; border-color: #E2E8F0; color: #0F172A; }
#modal-new-appoint .ap-tile.sel span { border-bottom: 1px dashed #185FA5; padding-bottom: 1px; }
@media (max-width: 780px) {
  #modal-new-appoint .ap-row-purpose { display: grid; }
  #modal-new-appoint .ap-row-purpose > .ap-lbl-req { display: inline; margin: 0; }
}

/* Τρόπος πληρωμής (γραμμή του saas_pay_method_picker.js) — ίδιο textContent, spans για χρώμα. */
#modal-new-appoint #ap-payment-method-mount { margin-bottom: 0; padding: 10px 0; border-bottom: 1px solid #E2E8F0; }
#modal-new-appoint .cfx-pm-line {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  width: 100%; box-sizing: border-box; border-bottom: 0; padding-bottom: 0; font-size: 0.9rem;
}
#modal-new-appoint .cfx-pm-line-tt { color: #639922; font-weight: 500; }
#modal-new-appoint .cfx-pm-line-sep,
#modal-new-appoint .cfx-pm-line-car { display: none; }
#modal-new-appoint .cfx-pm-line-val { margin-left: auto; color: #0F172A; border-bottom: 1px dashed #185FA5; padding-bottom: 2px; text-align: right; }
#modal-new-appoint .cfx-pm-line-val.ph { color: #B45309; border-bottom-color: transparent; }
#modal-new-appoint .cfx-pm-line-locked { color: #0F172A; }

/* Για τον οδηγό + Σημειώσεις — κλειστές σειρές· τα τικ ΜΙΑ σειρά (κουτάκι αριστερά, κείμενο δίπλα).
   Η αιτία της στοίβας ήταν το global .form-group label{display:block} / .form-group input{width:100%}. */
#modal-new-appoint #ap-driver-note-group,
#modal-new-appoint #ap-notes-group { margin-bottom: 0; padding: 10px 0; border-bottom: 1px solid #E2E8F0; }
#modal-new-appoint .ap-dline { border-bottom: 0; padding-bottom: 0; font-size: 0.9rem; }
#modal-new-appoint .ap-dline > span:first-child,
#modal-new-appoint .ap-dline > label { color: #639922; font-weight: 500; display: inline; margin: 0; font-size: 0.9rem; }
#modal-new-appoint .ap-dline-val {
  color: #185FA5; font-weight: 500; border-bottom: 1px dashed #185FA5; padding-bottom: 2px;
  max-width: 62%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
#modal-new-appoint .ap-dline-val.has { color: #0F172A; }
#modal-new-appoint .ap-dline[aria-expanded="true"] #ap-notes-summary { visibility: hidden; }
#modal-new-appoint #ap-notes-wrap { margin-top: 8px; }
#modal-new-appoint .ap-di-check { display: flex; align-items: center; gap: 8px; width: 100%; margin: 0 0 8px; font-size: 0.9rem; color: #0F172A; cursor: pointer; }
#modal-new-appoint .ap-di-check input[type="checkbox"] { width: auto; flex: 0 0 auto; margin: 0; padding: 0; }
#modal-new-appoint .ap-di-phone { color: #64748B; font-size: 0.9rem; }

/* «Νέος πελάτης» — λέξη, όχι μεγάλο κουμπί. */
#modal-new-appoint #ap-newcust-open-btn {
  display: block; width: auto; min-height: 0; margin: 10px 0 0 auto; padding: 0 0 2px;
  background: transparent; border: 0; border-bottom: 1px dashed #185FA5; border-radius: 0;
  color: #185FA5; font-size: 0.9rem; font-weight: 500;
}

/* Καρτέλες προς παράδοση (saas_appt_cards.js) — μόνο μέσα σε αυτό το παράθυρο. */
#modal-new-appoint .cfx-ac-title { color: #639922; font-size: 0.9rem; font-weight: 500; margin: 10px 0 6px; }
#modal-new-appoint .cfx-ac-card,
#modal-new-appoint .cfx-ac-card.off { background: transparent; border: 0; border-bottom: 1px solid #E2E8F0; margin-bottom: 0; }
#modal-new-appoint .cfx-ac-code { color: #0F172A; }
#modal-new-appoint .cfx-ac-pval { color: #0F172A; }
#modal-new-appoint .cfx-ac-pval.none { color: #B45309; }
#modal-new-appoint .cfx-ac-docline { color: #0F172A; }
#modal-new-appoint .cfx-ac-docline.warn,
#modal-new-appoint .cfx-ac-docline.muted { color: #B45309; }
#modal-new-appoint .cfx-ac-actbtn,
#modal-new-appoint .cfx-ac-actbtn.on {
  min-height: 0; padding: 0 0 2px; background: transparent; border: 0; border-radius: 0;
  border-bottom: 1px dashed #185FA5; color: #185FA5; font-weight: 500;
}
#modal-new-appoint .cfx-ac-chev { border: 0; }
#modal-new-appoint .cfx-ac-sum { background: transparent; padding: 8px 0; font-weight: 500; color: #64748B; }
#modal-new-appoint .cfx-ac-sum .amt { color: #0F172A; font-weight: 600; }

/* Κάτω γραμμή: «Λείπουν: …» πορτοκαλί, «Ακύρωση» μπλε διακεκομμένη, «Αποθήκευση» γεμάτη όπως πριν. */
#modal-new-appoint .ap-missing { color: #B45309; }
#modal-new-appoint .modal-actions .btn-cancel {
  background: transparent; border: 0; border-bottom: 1px dashed #185FA5; border-radius: 0;
  color: #185FA5; font-weight: 500; padding-left: 4px; padding-right: 4px; flex: 0 0 auto;
}
/* Toggle switch — ίδιο DOM idiom με checkbox (input κρυφό, span οπτικός δείκτης). */
.ip-switch { position: relative; display: inline-block; width: 40px; height: 24px; flex-shrink: 0; cursor: pointer; }
.ip-switch input { position: absolute; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; }
.ip-switch-track {
  position: absolute; inset: 0; background: var(--border); border-radius: 999px; transition: background 0.15s;
}
.ip-switch-thumb {
  position: absolute; top: 2px; left: 2px; width: 20px; height: 20px; background: #fff;
  border-radius: 50%; transition: transform 0.15s; box-shadow: 0 1px 2px rgba(0,0,0,0.25);
}
.ip-switch input:checked + .ip-switch-track { background: #185FA5; }
.ip-switch input:checked + .ip-switch-track .ip-switch-thumb { transform: translateX(16px); }
/* Purpose bar — inline single-row layout. Empty state has #FFF6E8 cue background.
   Selected state colors set inline από updateStickyBar() μέσω
   _apTypeMeta(purpose).paleBg/badgeBg/paleText. Chevron είναι μέρος του value
   span — δεν υπάρχει πλέον ξεχωριστό button. */
.ap-purpose-sticky {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 12px;
  border: 1px solid;
  border-radius: 8px;
  font-size: 0.9rem;
  cursor: pointer;
  transition: background 0.18s, color 0.18s, border-color 0.18s;
}
.ap-purpose-sticky.empty {
  background: #FFF6E8;
  border-color: #F0D000;
  color: #854F0B;
  padding: 8px 12px;  /* override global .empty placeholder padding (40px 20px) — ίση specificity, κερδίζει αυτό λόγω 0,2,0 */
}
.ap-purpose-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  gap: 10px;
}
.ap-purpose-info {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-shrink: 0;
}
.ap-purpose-label {
  font-size: 0.9rem;
  font-weight: 700;
}
.ap-purpose-value {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 0.9rem;
  font-weight: 700;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  flex: 1;
  justify-content: flex-end;
  min-width: 0;
}
.ap-purpose-btn {
  display: none;  /* legacy — chevron γίνεται μέρος του value */
}


/* ===== Νέο Ραντεβού modal — πλατύτερο (picker καρτελών + πεδία) ===== */
#modal-new-appoint .modal { max-width:640px; }

/* ===== Purpose Picker Modal (4 buttons grid 2x2) ===== */
#modal-purpose-picker .modal { max-width:380px; }
#modal-purpose-picker .ap-purpose-grid {
  display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-bottom:6px;
}
#modal-purpose-picker .ap-purpose-grid button {
  background:var(--surface2); border:2px solid var(--border);
  border-radius:14px; padding:22px 12px;
  font-family:Syne; font-weight:800; font-size:0.92rem; color:var(--text);
  cursor:pointer; display:flex; flex-direction:column; align-items:center; gap:8px;
  transition:all 0.12s;
}
#modal-purpose-picker .ap-purpose-grid button:hover {
  border-color:#1D9E75; background:var(--surface); transform:translateY(-1px);
}
#modal-purpose-picker .ap-purpose-grid .ap-purpose-icon { font-size:1.8rem; }

/* 26/09/2026 (2.5): το κάτω μισό του ραντεβού ΠΟΤΕ πλατύτερο από την οθόνη — box-sizing, max-width:100%, min-width:0 στα παιδιά
   grid/flex, καμία σταθερή πλάτη, overflow-x hidden στο σώμα του modal. Το πάνω μισό δεν αγγίζεται. */
#modal-new-appoint .modal,
#modal-edit-appoint .modal { box-sizing:border-box; overflow-x:hidden; }   /* το max-width το δίνουν οι υπάρχοντες κανόνες (640px)· ο overlay έχει padding 16px ⇒ ποτέ πλατύτερο από την οθόνη */
#ap-delivery-picker,
#ea-delivery-picker { box-sizing:border-box; max-width:100%; min-width:0; overflow-x:hidden; }
#ap-dp-mount,
#ea-dp-mount { box-sizing:border-box; max-width:100%; min-width:0; }

/* ===== Onsite Services Sub-Modal (multi-select από τιμοκατάλογο) ===== */
#modal-onsite-services .modal { max-width:460px; }
#modal-onsite-services .ap-onsite-list {
  max-height:360px; overflow-y:auto;
  border:1px solid var(--border); border-radius:10px;
  background:var(--bg); margin-bottom:14px;
}
#modal-onsite-services .ap-onsite-row {
  display:flex; align-items:center; gap:10px;
  padding:10px 12px; border-bottom:1px solid var(--border);
  cursor:pointer; transition:background 0.1s;
}
#modal-onsite-services .ap-onsite-row:last-child { border-bottom:none; }
#modal-onsite-services .ap-onsite-row:hover { background:var(--surface2); }
#modal-onsite-services .ap-onsite-row input[type="checkbox"] {
  width:16px; height:16px; accent-color:#1D9E75; flex-shrink:0; cursor:pointer;
}
#modal-onsite-services .ap-onsite-name {
  flex:1; font-weight:600; font-size:0.9rem;
}
#modal-onsite-services .ap-onsite-price {
  font-family:Syne; font-weight:800; color:#1D9E75; font-size:0.92rem; flex-shrink:0;
}
#modal-onsite-services .ap-onsite-empty,
#modal-onsite-services .ap-onsite-loading {
  padding:24px; text-align:center; color:var(--muted); font-size:0.88rem;
}

/* ===== Estimation Reason Sub-Modal ===== */
#modal-estimation-reason .modal { max-width:440px; }
#modal-estimation-reason textarea {
  width:100%; min-height:120px;
  background:var(--surface2); border:1px solid var(--border);
  border-radius:10px; padding:12px; color:var(--text);
  font-size:0.9rem; font-family:'DM Sans', sans-serif;
  resize:vertical; outline:none; margin-bottom:14px;
}
#modal-estimation-reason textarea:focus { border-color:#1D9E75; }
/* ========== END PR-B ========== */

/* TOTALS */
.totals-box{background:var(--surface);border:1px solid var(--border);border-radius:11px;padding:14px 18px;margin-top:12px}
.total-row{display:flex;justify-content:space-between;font-size:0.87rem;padding:3px 0}
.total-row.grand{font-family:Syne;font-weight:800;font-size:1.1rem;color:var(--accent);border-top:1px solid var(--border);margin-top:6px;padding-top:8px}

/* SEARCH */
.search-box{width:100%;background:var(--surface);border:1px solid var(--border);border-radius:11px;padding:10px 14px;color:var(--text);font-family:'DM Sans',sans-serif;font-size:0.9rem;outline:none;margin-bottom:14px}
.search-box:focus{border-color:var(--accent)}

/* STATS */
.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:20px}
.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;text-align:center}
.stat-num{font-family:Syne;font-weight:800;font-size:2rem;color:var(--accent)}
.stat-label{font-size:0.75rem;color:var(--muted);margin-top:4px}

/* DASHBOARD READY LIST */
.ready-item{background:var(--surface);border:1px solid rgba(var(--brand-secondary-rgb),0.25);border-left:3px solid var(--green);border-radius:11px;padding:12px 16px;margin-bottom:8px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}

/* TOAST */
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(12px);opacity:0;transition:opacity 200ms ease-out,transform 200ms ease-out;background:var(--surface2);border:1px solid var(--border);color:var(--text);padding:10px 20px;border-radius:30px;font-size:0.87rem;display:none;z-index:100000;box-shadow:0 4px 20px rgba(0,0,0,0.4)}
/* Κίνηση toast (toast(), saas_app_shell.js): fade + translateY(12px)→0, 200ms ease-out, συμμετρικά μπες/βγες· χωρίς scale/αναπήδηση. */
.toast.toast-in{opacity:1;transform:translateX(-50%) translateY(0)}
@media (prefers-reduced-motion: reduce){.toast{transition:none}}

/* EXPRESS */
.badge-express{background:rgba(231,76,60,0.18);color:var(--red);border:1px solid rgba(231,76,60,0.4);font-size:0.78rem;font-weight:700;padding:3px 10px;border-radius:20px;display:inline-flex;align-items:center;gap:4px}
.express-item{background:var(--surface);border:1px solid rgba(231,76,60,0.35);border-left:3px solid var(--red);border-radius:11px;padding:12px 16px;margin-bottom:8px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.express-section{background:rgba(231,76,60,0.04);border:1px solid rgba(231,76,60,0.2);border-radius:var(--radius);padding:14px 16px;margin-bottom:16px}
.express-title{font-family:Syne;font-weight:800;color:var(--red);font-size:1rem;margin-bottom:10px;display:flex;align-items:center;gap:8px}

/* PR-B-S3/C3: Unified payment + delivery row — 3-button flat layout.
   Pending πράσινο tones (#EAF3DE / #3B6D11 / #C0DD97).
   Done κόκκινο tones (#FCEBEB / #791F1F / #F7C1C1) με inline ↩ icon. */
.prb-row{display:flex;align-items:center;gap:8px;height:48px;padding:0 12px;background:var(--surface);border:1px solid var(--border);border-radius:11px;margin-top:10px}
.prb-row-action{flex:1;display:flex;align-items:center;justify-content:center;min-width:0;font-size:0.88rem;font-weight:700;font-family:'DM Sans',sans-serif}
.prb-btn-pending,.prb-btn-done,.prb-btn-pay-pending{width:100%;height:36px;padding:0 12px;border-radius:8px;font-family:inherit;font-size:0.85rem;font-weight:700;cursor:pointer;transition:background 0.15s;display:inline-flex;align-items:center;justify-content:center;gap:4px;line-height:1.1}
.prb-btn-pending{background:#EAF3DE;color:#3B6D11;border:1px solid #C0DD97}
.prb-btn-pending:hover{background:#DCE9CB}
.prb-btn-pay-pending{background:#FCEBEB;color:#791F1F;border:1px solid #F7C1C1}
.prb-btn-pay-pending:hover{background:#F7DCDC}
.prb-btn-done{background:#FCEBEB;color:#791F1F;border:1px solid #F7C1C1;font-size:0.78rem}
.prb-btn-done:hover{background:#F7DCDC}
.prb-btn-pending.prb-btn-disabled,.prb-btn-done.prb-btn-disabled,.prb-btn-pay-pending.prb-btn-disabled{opacity:0.5;cursor:not-allowed}
.prb-btn-pending.prb-btn-disabled:hover{background:#EAF3DE}
.prb-btn-pay-pending.prb-btn-disabled:hover{background:#FCEBEB}
.prb-btn-done.prb-btn-disabled:hover{background:#FCEBEB}
.prb-reverse-inline{display:inline-flex;align-items:center;font-size:1rem;margin-left:6px;opacity:0.85}
.prb-method-dropdown{width:160px;flex-shrink:0;height:36px;padding:0 10px;background:var(--surface2);border:1px solid var(--border);border-radius:8px;color:var(--text);font-size:0.85rem;font-weight:600;cursor:pointer;outline:none;font-family:'DM Sans',sans-serif}
.prb-method-dropdown:hover{border-color:var(--accent)}
@media (max-width:600px){.prb-row{flex-wrap:wrap;height:auto;padding:8px 12px}.prb-method-dropdown{width:100%;order:-2}.prb-row-action[data-prb="complete"]{flex:0 0 100%;order:-1}.prb-row-action[data-prb="deliver"],.prb-row-action[data-prb="pay"]{flex:1;order:0}}

/* APPOINTMENT CARD HEADER — responsive stacking (κινητό ≤600px: στοίβα full-width) */
.apx-hdr{display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap}
.apx-time{min-width:90px}
.apx-mid{flex:1;min-width:0}
.apx-right{min-width:96px;text-align:right}
@media (max-width:600px){.apx-hdr{flex-direction:column}.apx-time,.apx-mid,.apx-right{width:100%;min-width:0}.apx-right{text-align:left}}

/* APPOINTMENT DISPATCH — PR-3 (τικ, μπάρα αποστολής, tabs, chip «Πού είναι») */
.apx-check{width:18px;height:18px;cursor:pointer;flex-shrink:0;accent-color:#1E3A6E}
.apx-selectall-wrap{display:none;align-items:center;gap:6px;font-size:0.85rem;color:var(--muted);cursor:pointer;user-select:none}
.apx-tab{background:var(--surface);border:1px solid var(--border);border-radius:4px;padding:8px 14px;font-size:0.83rem;cursor:pointer;color:var(--text);font-family:inherit}
.apx-tab.active{border-color:var(--accent);font-weight:700}
.apx-tab .apx-tab-count{font-weight:800}
.apx-execute-icon{background:none;border:none;cursor:pointer;color:#1D9E75;font-weight:500;font-size:12px;padding:2px 4px;line-height:1;font-family:inherit;white-space:nowrap}
.apx-execute-icon:disabled{opacity:0.35;cursor:not-allowed}

/* ============================================================
   ΣΕΛΙΔΑ ΡΑΝΤΕΒΟΥ — εγκεκριμένη όψη (style-only, μηδέν αλλαγή λογικής)
   Desktop ≥700px: ΜΙΑ γραμμή ανά ραντεβού (fix/appt-row-one-line, 27/09,
   mockup εγκεκριμένο — ήταν ≥1024px). Κινητό <700px: κάρτες. ΙΔΙΟ DOM ανά
   ραντεβού (.apx-row + grid-template-areas ανά breakpoint) — καμία διπλή
   απόδοση, άρα κανένα διπλό id (π.χ. apx-pay-*, apx-det-*) στο DOM.
   ============================================================ */
.apx-page-title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}
.apx-page-title2{font-size:22px;font-weight:500;color:var(--text);line-height:1.3;font-family:inherit}
.apx-page-subtitle{font-size:12px;color:#6B7280;margin-top:2px}
.apx-btn-new{background:#2563EB;color:#fff;border:none;border-radius:4px;padding:8px 18px;font-size:13px;font-weight:500;cursor:pointer;font-family:inherit}
.apx-datebar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;background:#fff;border:1px solid #E5E7EB;border-radius:4px;padding:8px 12px;margin-top:12px}
.apx-outline-btn{background:#fff;border:1px solid #D1D5DB;border-radius:4px;padding:0 12px;height:32px;font-size:12px;color:var(--text);cursor:pointer;font-family:inherit;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.apx-outline-btn:hover{border-color:#9CA3AF}
.apx-date-pick{position:relative;display:inline-flex;align-items:center}
.apx-date-display{font-size:13px;font-weight:500;color:var(--text);cursor:pointer;padding:0 4px;user-select:none}
.apx-date-native{position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;cursor:pointer;border:none;padding:0}
.apx-datebar-tail{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}
.apx-list-frame{background:#fff;border:1px solid #E5E7EB;border-radius:4px;margin-top:14px;overflow:hidden}
.apx-toolbar-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;border-bottom:1px solid #E5E7EB;flex-wrap:wrap}
.apx-tabs2{display:flex;gap:18px;flex-wrap:wrap}
.apx-tab2{background:none;border:none;padding:6px 0;font-size:13px;color:#4B5563;cursor:pointer;font-family:inherit;border-bottom:2px solid transparent}
.apx-tab2.active{color:#2563EB;font-weight:500;border-bottom-color:#2563EB}
.apx-tab2.apx-tab2-warn{color:#B45309}
.apx-search2{width:240px;max-width:100%;border:1px solid #D1D5DB;border-radius:4px;padding:6px 10px;font-size:12px;outline:none;font-family:inherit}
.apx-search-wrap{position:relative}
.apx-search-hint{font-size:12px;color:#6B7280;margin-top:2px}
.apx-search-results{position:absolute;top:100%;left:0;right:0;z-index:40;background:#fff;border:1px solid #E5E7EB;border-radius:4px;max-height:280px;overflow-y:auto;box-shadow:0 4px 10px rgba(0,0,0,0.08)}
.apx-search-row{padding:8px 10px;border-bottom:1px solid #E5E7EB;cursor:pointer;font-size:13px}
.apx-search-row:last-child{border-bottom:none}
.apx-search-row:hover{background:#F3F4F6}
.apx-search-row-name{font-weight:500;color:var(--text)}
.apx-search-row-sub{font-size:12px;color:#6B7280;margin-top:2px}
.apx-thead{display:none}
.apx-list-footer{padding:8px 14px;font-size:11px;color:#6B7280}
.apx-row{display:grid;grid-template-columns:18px auto 1fr;grid-template-areas:"check time cust" "addr addr addr" "task task where" "actions actions actions";gap:6px 8px;padding:12px 14px;border:1px solid #E5E7EB;border-radius:6px;margin:10px;font-size:13px;align-items:start}
.apx-row.apx-card-selected{border-color:#1E3A6E;background:#F5F9FF}
/* «Στάλθηκε» (Αναθέσεις / Δρομολόγιο ημέρας / οδηγός): ΜΟΝΙΜΟ θαλασσί φόντο — ΜΟΝΟ φόντο, χωρίς το σκούρο περίγραμμα της επιλογής,
   ώστε τικαρισμένο+σταλμένο να φαίνεται ακόμη (το κουτάκι ξετικάρεται μετά την αποστολή, το φόντο μένει). Ίδια απόχρωση με selected. */
.apx-row.apx-row-sent{background:var(--row-sent-bg)}
/* Κουκκίδα σκοπού (cfxPurposeDot, saas_app_shell.js) — σελίδα Ραντεβού ΚΑΙ Ημερολόγιο */
.cfx-pdot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px;vertical-align:middle;flex:none;background:var(--dot-other)}
.cfx-pdot-delivery{background:var(--dot-delivery)}
.cfx-pdot-pickup{background:var(--dot-pickup)}
.apx-c-time{grid-area:time;font-weight:500;font-size:13px;padding-right:10px;white-space:nowrap}
/* fix/appt-list-single-line (27/09): κύκλος αριθμού στάσης δίπλα στην ώρα —
   άδειο ίδιου πλάτους (apx-stop-badge-empty) όταν δεν υπάρχει αριθμός, ώστε
   να στοιχίζονται οι ώρες κάθετα. */
.apx-stop-badge{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;min-width:20px;border-radius:50%;background:#0C447C;color:#fff;font-size:11px;font-weight:500;margin-right:8px;vertical-align:middle}
.apx-stop-badge-empty{background:transparent;color:transparent}
.apx-c-cust{grid-area:cust;min-width:0}
.apx-c-cust .apx-cust-name{font-size:14px;font-weight:500}
.apx-c-cust .apx-cust-sub{font-size:12px;margin-left:8px}
/* Σήμα σημείωσης + τηλέφωνο: ΕΝΑ ανάλογο στοιχείο (nowrap) — ποτέ σε ξεχωριστές γραμμές. Η σημείωση ραντεβού σε δική της γραμμή (κινητό), χωρίς «·». */
.apx-c-cust .apx-cust-meta{display:inline-flex;align-items:baseline;gap:6px;white-space:nowrap;margin-left:8px}
.apx-c-cust .apx-cust-meta .apx-cust-sub{margin-left:0}
.apx-c-cust .apx-cust-note{display:block}
/* Κενό ανάμεσα στο τετράγωνο τικ και στην ώρα */
.apx-check-hit{margin-right:6px}
.apx-c-addr a{color:#1D9E75;text-decoration:underline dotted;text-underline-offset:3px}
.apx-cust-sub a{color:#2563EB;text-decoration:underline dotted;text-underline-offset:3px}
.apx-c-addr{grid-area:addr;padding-left:40px;min-width:0;font-size:12px;color:#6B7280}
.apx-c-task{grid-area:task;padding-left:40px}
.apx-c-where{grid-area:where;text-align:right}
.apx-c-actions{grid-area:actions;display:flex;align-items:center;justify-content:flex-end;gap:6px;margin-top:6px}
.apx-c-actions>*{flex:0 0 auto;text-align:left}
.apx-c-detail{grid-column:1/-1}
.apx-task{display:inline-block;font-size:14px;font-weight:500;color:var(--text-primary)}
.apx-task-pickup{color:var(--task-pickup)}
.apx-task-delivery{color:var(--task-delivery)}
.apx-where-pay{line-height:1.3}
.apx-where-amt{font-size:17px;font-weight:500;color:var(--text-primary)}
.apx-where-pm{font-size:13px;color:var(--text-secondary)}
.apx-where-time{color:var(--text-muted)}
.apx-where-warn{color:var(--text-warning)}
.apx-act-icon{color:#2563EB;text-decoration:none;font-size:12px;padding:2px 4px;display:inline-flex;align-items:center;gap:3px;cursor:pointer;background:none;border:none;font-family:inherit;white-space:nowrap}
.apx-chev{display:inline-block;width:10px;text-align:center}
.apx-outline-act{display:inline-block;background:#fff;border:1px solid #D1D5DB;border-radius:4px;padding:5px 10px;font-size:12px;color:var(--text);cursor:pointer;font-family:inherit;text-decoration:none;line-height:1.2}
.apx-outline-act:hover{border-color:#9CA3AF}
.apx-outline-danger{color:#A32D2D;border-color:#F09595}
/* fix/appt-list-single-line (27/09): «Εκτέλεση» ως μπλε κύριο κουμπί μέσα
   στο πάνελ «Περισσότερα» (ήταν στη γραμμή, .apx-execute-icon). */
.apx-outline-act.apx-act-primary{background:#185FA5;color:#fff;border-color:#185FA5}
/* fix/appt-list-measured (27/09): «Πού είναι: …» πλέον ΠΑΝΤΑ μέσα στο πάνελ
   «Περισσότερα» (.apx-where-full-line, ΟΧΙ πια δική του στήλη στη γραμμή) —
   ο σύνδεσμος ποσού/κατάστασης πρέπει να ρέει σε ΜΙΑ γραμμή κειμένου εκεί,
   γι' αυτό global (ΟΧΙ πια περιορισμένο σε breakpoint). */
.apx-where-full-line>div{display:inline}
/* style/appointments-ciel-green-outline — σιελ φόντο σελίδας + πράσινο περίγραμμα (var(--chrome-accent) = το 1.5px πράσινο της οθόνης παράδοσης οδηγού). Όλοι οι κανόνες με πρόθεμα #page-appointments. */
#page-appointments.apm{background:var(--cfx-page-bg, #DBEAFE)}
#page-appointments .apx-search2{background:#FFF;border:1.5px solid var(--chrome-accent)}
@media (min-width:601px) and (max-width:1239px){
  #page-appointments .apx-row:not(.apx-card-selected){border:1.5px solid var(--chrome-accent)}
}
@media (min-width:1240px){
  #page-appointments .apx-list-frame{border:1.5px solid var(--chrome-accent)}
}
/* feat/appointments-mobile-look — ΝΕΑ ΟΨΗ ΚΙΝΗΤΟΥ της σελίδας Ραντεβού. ΟΛΟ μέσα σε @media (max-width:600px), ΟΛΑ με πρόθεμα
   τον περιέκτη της σελίδας (#page-appointments) ώστε να μην πιάνει καμία άλλη οθόνη. Το markup (JS) αποδίδεται μόνο ≤600px. */
@media (max-width:600px){
  #page-appointments.apm{padding:14px 12px;color:#0F172A}
  #page-appointments .apm-hd{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}
  #page-appointments .apm-tt{font-size:20px;font-weight:500;margin:0}
  #page-appointments .apm-st{font-size:13px;color:#64748B;margin:2px 0 0}
  #page-appointments .apm-b{height:40px;border:1px solid #E2E8F0;border-radius:10px;font-size:14px;display:flex;align-items:center;justify-content:center;gap:6px;color:#0F172A;background:#FFF;padding:0 12px}
  #page-appointments .apm-bp{background:#1D6FD8;border-color:#1D6FD8;color:#FFF}
  #page-appointments .apm-sq{width:40px;padding:0;flex:none}
  #page-appointments .apm-day{display:flex;align-items:center;gap:8px;margin-bottom:8px}
  #page-appointments .apm-date{flex:1;text-align:center;font-size:15px;font-weight:500}
  #page-appointments .apm-row{display:flex;gap:8px}
  #page-appointments .apm-row>.apm-b{flex:1}
  #page-appointments .apm-tabs{display:flex;gap:14px;border-bottom:1px solid #E2E8F0;font-size:14px;margin:12px 0;overflow-x:auto;white-space:nowrap}
  #page-appointments .apm-tab{padding:8px 0;color:#64748B}
  #page-appointments .apm-tab.on{color:#1D6FD8;border-bottom:2px solid #1D6FD8}
  #page-appointments .apm-tab.warn{color:#B45309}
  #page-appointments .apm-search{height:44px;border:1.5px solid var(--chrome-accent);border-radius:10px;background:#FFF;font-size:15px;padding:0 12px;width:100%}
  #page-appointments .apm-hint{font-size:12px;color:#64748B;margin:4px 2px 12px}
  #page-appointments .apm-card{background:#FFF;border:1.5px solid var(--chrome-accent);border-radius:12px;padding:12px 14px;margin-bottom:10px}
  #page-appointments .apm-card.sel{border-color:#1D6FD8}
  #page-appointments .apm-r1{display:flex;align-items:center;gap:8px}
  #page-appointments .apm-n{width:24px;height:24px;border-radius:50%;background:#0F172A;color:#FFF;font-size:13px;display:flex;align-items:center;justify-content:center;flex:none}
  #page-appointments .apm-time{font-size:15px;font-weight:500}
  #page-appointments .apm-deliv{background:#DBEAFE;color:#1E40AF;border:1px solid #93C5FD}
  #page-appointments .apm-pick{background:#DCFCE7;color:#166534}
  #page-appointments .apm-warn{background:#FEF3C7;color:#92400E}
  #page-appointments .apm-out{border:1px solid #E2E8F0;color:#0F172A;background:#FFF}
  #page-appointments .apm-tick{margin-left:auto;width:22px;height:22px;flex:none}
  #page-appointments .apm-nr{display:flex;align-items:center;gap:8px;margin:10px 0 2px}
  #page-appointments .apm-cat{width:18px;height:18px;border-radius:50%;flex:none;border:1.5px solid #94A3B8;background:transparent;padding:0}
  #page-appointments .apm-name{font-size:17px;font-weight:500;margin:0;overflow-wrap:anywhere}
  #page-appointments .apm-code{font-size:13px;font-weight:400;color:#64748B}
  #page-appointments .apm-addr{font-size:14px;margin:0}
  #page-appointments .apm-addr2{font-size:13px;color:#64748B;margin:2px 0 0}
  #page-appointments .apm-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
  #page-appointments .apm-p{width:16px;height:16px;border-radius:4px;font-size:11px;display:inline-flex;align-items:center;justify-content:center;color:#FFF;background:#94A3B8}
  #page-appointments .apm-p.easy{background:#16A34A}
  #page-appointments .apm-p.mid{background:#EA580C}
  #page-appointments .apm-p.hard{background:#DC2626}
  #page-appointments .apm-acts{display:flex;gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid var(--chrome-accent)}
  #page-appointments .apm-acts .grow{flex:1}
  #page-appointments .apm-lb{font-size:12px;color:#64748B;margin:14px 0 6px}
  #page-appointments .apm-box{border:1px solid #E2E8F0;border-radius:10px;padding:10px 12px;margin-bottom:8px}
  #page-appointments .apm-kv{display:flex;justify-content:space-between;gap:12px;font-size:14px;padding:5px 0}
  #page-appointments .apm-kv>span:first-child{color:#64748B;flex:none}
  #page-appointments .apm-kv>span:last-child{text-align:right}
  #page-appointments .apm-kv.total{font-weight:500}
  #page-appointments .apm-kv.total>span:first-child{color:#0F172A}
  #page-appointments .apm-hr{border-top:1px solid #E2E8F0;margin:6px 0}
  #page-appointments .apm-note{font-size:12px;color:#64748B;margin:6px 0 0}
  #page-appointments .apm-menu{border:1px solid #E2E8F0;border-radius:10px;margin-top:8px;overflow:hidden}
  #page-appointments .apm-mi{display:flex;align-items:center;height:44px;padding:0 14px;font-size:15px;border:0;border-top:1px solid #E2E8F0;background:#FFF;width:100%;text-align:left;color:#0F172A}
  #page-appointments .apm-mi:first-child{border-top:0}
  #page-appointments .apm-mi.danger{color:#DC2626}

  /* Ουδετεροποίηση παλιών κλάσεων του στατικού κελύφους (οι ίδιες όψεις του ≤600px: χωρίς λευκά πλαίσια, ίδια στοιχεία) */
  #page-appointments button,#page-appointments select,#page-appointments input{font-family:inherit}
  #page-appointments a.apm-b,#page-appointments a.apm-mi{text-decoration:none}
  #page-appointments .apm-hd{flex-wrap:nowrap}
  #page-appointments .apm-hd>div{min-width:0}
  #page-appointments .apm-hd>.apm-b{flex:none}
  #page-appointments .apm-day{flex-wrap:wrap;background:transparent;border:0;border-radius:0;padding:0;margin-top:0}
  #page-appointments .apm-day>.apm-row{flex:0 0 100%;margin-left:0}
  #page-appointments .apm-date{display:flex;justify-content:center;position:relative;min-width:0}
  #page-appointments .apm-date .apx-date-display{font-size:inherit;font-weight:inherit;padding:0}
  #page-appointments .apx-list-frame{background:transparent;border:0;border-radius:0;margin-top:0;overflow:visible}
  #page-appointments .apx-toolbar-row{display:block;padding:0;border:0}
  #page-appointments .apx-search-wrap{width:100%}
  #page-appointments .apm-tabs{flex-wrap:nowrap}
  #page-appointments button.apm-tab{background:none;border:0;border-bottom:2px solid transparent;font-size:inherit;flex:none}
  #page-appointments .apx-list-footer{padding:4px 2px;font-size:13px;color:#64748B}
  #page-appointments .apx-issue-panel-row{margin:0 0 10px}
  #page-appointments .apm-card.apx-card-selected{border-color:#1D6FD8}
  #page-appointments .apm-nr .apm-name{flex:1;min-width:0}
  #page-appointments .apm-nr button[data-cfx-mark="badge"]{width:18px!important;height:18px!important;margin:0!important;padding:0!important;box-shadow:none!important;border-radius:50%!important;flex:none;cursor:pointer}
  #page-appointments .apm-nr button.cfx-mk-badge{border:1.5px solid #94A3B8!important}
  #page-appointments .apm-nr button.cfx-mk-badge:not(.cfx-mk-none){border:0!important}
  #page-appointments .apm-kv .apx-where-time{color:inherit}
  #page-appointments .apm-kv .apx-where-amt{font-size:inherit;font-weight:inherit;color:inherit}
  #page-appointments .apm-kv .apx-where-pm{font-size:inherit;color:inherit}
  #page-appointments .apm-box .apm-box{margin-bottom:0}
}
@media (min-width:1240px){
  /* fix/appt-list-measured (27/09): αντικαθιστά τα σταθερά ποσοστά (fr) με
     ΕΝΑ subgrid πλέγμα (.apx-list-frame ορίζει τις 5 στήλες, .apx-thead ΚΑΙ
     #appoint-list/.apx-row τις κληρονομούν) — τα πλάτη Πελάτη/Εργασίας
     μετρώνται από το ΠΕΡΙΕΧΟΜΕΝΟ όλων των γραμμών μαζί (fit-content), όχι
     από σταθερό ποσοστό. Η στήλη «Πού είναι» ΔΕΝ υπάρχει πια (έφυγε στο
     πάνελ) — 5 στήλες: Ώρα/Πελάτης/Διεύθυνση/Εργασία/Ενέργειες. Breakpoint
     = μετρημένο ελάχιστο (harness, ψεύτικα δεδομένα δοκιμής) στρογγυλεμένο
     στα 20px — βλ. PR body/αναφορά για τον υπολογισμό. */
  .apx-list-frame{overflow-x:visible;display:grid;grid-template-columns:176px fit-content(520px) minmax(160px,1fr) fit-content(320px) max-content;column-gap:16px}
  .apx-toolbar-row,#appoint-dispatch-bar,.apx-list-footer{grid-column:1/-1}
  .apx-thead{display:grid;grid-template-columns:subgrid;grid-column:1/-1;align-items:center;padding:0;border-bottom:1px solid #E5E7EB;font-size:11px;font-weight:500;color:#4B5563;background:#fff}
  .apx-thead>*{padding:10px 16px;min-width:0;overflow:hidden}
  .apx-thead>:first-child{display:flex;align-items:center;gap:0}
  #appoint-list{display:grid;grid-template-columns:subgrid;grid-column:1/-1}
  .apx-issue-panel-row{grid-column:1/-1}
  .apx-row{grid-column:1/-1;display:grid;grid-template-columns:subgrid;grid-template-areas:"time cust addr task actions";gap:0;margin:0;border:none;border-radius:0;border-bottom:1px solid #EEF0F3;padding:0;align-items:center}
  .apx-row:last-of-type{border-bottom:none}
  .apx-row>*{padding:10px 16px;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
  .apx-c-time{padding-right:8px;display:flex;align-items:center}
  .apx-check-hit{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;flex:none;margin-left:-7px}
  .apx-check-hit-empty{visibility:hidden}
  .apx-check-hit .apx-check{width:18px;height:18px;margin:0;cursor:pointer}
  .apx-c-cust{display:flex;align-items:baseline;gap:6px}
  .apx-c-cust>*{flex:none}
  .apx-c-cust .apx-cust-name{flex:1 1 0%;min-width:0;overflow:hidden;text-overflow:ellipsis}
  .apx-c-cust .apx-cust-sub{margin-left:0}
  .apx-c-cust .apx-cust-meta{margin-left:0}
  .apx-c-cust .apx-cust-note{display:inline}
  .apx-c-cust .apx-cust-note::before{content:"· "}
  .apx-c-detail{padding:0}
  .apx-c-actions{margin-top:0;flex-shrink:0;white-space:nowrap}
  .apx-row.apx-card-selected{background:#EFF6FF;border-color:transparent}
  .apx-row{--row-sent-bg:#EFF6FF}
}
/* style/appointments-dispatch-colors — χρώμα ΟΛΗΣ της κάρτας (κινητό) / ΜΟΝΟ φόντο γραμμής (υπολογιστής, χωρίς έγχρωμο περίγραμμα) ανά dispatchState: route=γαλάζιο, pool=μοβ,
   driver+seen=πράσινο (κλάση apx-ds-* από το _apDsClass του saas_appointments_calendar.js). none/returned/ολοκληρωμένα: καμία κλάση ⇒ όπως πριν.
   Το περίγραμμα του τικαρισμένου υπερισχύει ΜΟΝΟ στο περίγραμμα, ποτέ στο φόντο. Όλοι οι κανόνες με πρόθεμα #page-appointments. */
#page-appointments .apx-ds-route{--ds-bg:#E6F0FD;--ds-line:#3B82F6;--ds-chip:#1D6FD8}
#page-appointments .apx-ds-pool{--ds-bg:#F1EBFC;--ds-line:#8B5CF6;--ds-chip:#7C3AED}
#page-appointments .apx-ds-driver{--ds-bg:#E6F6EA;--ds-line:#22A55A;--ds-chip:#15803D}
#page-appointments .apx-row[class*="apx-ds-"]{background:var(--ds-bg)}
#page-appointments .apm-card[class*="apx-ds-"]{background:var(--ds-bg);border-color:var(--ds-line)}
#page-appointments .apm-card[class*="apx-ds-"].sel,#page-appointments .apm-card[class*="apx-ds-"].apx-card-selected{border-color:#1D6FD8}
#page-appointments .apx-row[class*="apx-ds-"] .apx-where-full-line .apx-where-time{color:inherit}
@media (min-width:601px) and (max-width:1239px){
  #page-appointments .apx-row[class*="apx-ds-"].apx-card-selected{border-color:#1E3A6E}
}
@media (min-width:1240px){
  #page-appointments .apx-row[class*="apx-ds-"].apx-card-selected{box-shadow:inset 0 0 0 2px #1D6FD8}
}
/* fix/appt-inline-issue-layout (27/09): πάνελ έκδοσης — ΔΙΚΗ ΤΟΥ γραμμή
   πλήρους πλάτους, sibling του .apx-row (ΟΧΙ μέσα στα 92px της στήλης
   «Εργασία», desktop grid-area:task). #1517 follow-up, mockup εγκεκριμένο.
   Breakpoint 700px (fix/appt-row-one-line, 27/09) — ΙΔΙΟ με το .apx-row. */
.apx-issue-panel-row{margin:0 10px 10px}
.apx-issue-panel-row:empty{margin:0}
@media (min-width:700px){
  .apx-issue-panel-row:not(:empty){margin:0;padding:10px 14px;border-bottom:1px solid #EEF0F3}
}
.ap-issue-panel{padding:12px 14px;background:#F7F8FA;border:1px solid #E5E7EB;border-radius:8px;font-size:13px}
.ap-issue-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.ap-issue-title{font-weight:700;color:#1a1d27}
.ap-issue-doctype{margin-bottom:8px}
.ap-issue-dn-note{margin-bottom:8px;color:#4B5563;font-weight:600;font-size:12px}
.ap-issue-loading{font-size:12px;color:#6B7280}
.ap-issue-cols{display:flex;gap:20px}
.ap-issue-col-cards{flex:1;min-width:0}
.ap-issue-col-pm{flex:1;min-width:0}
.ap-issue-col-title{font-weight:700;font-size:12px;color:#4B5563;margin-bottom:6px}
.ap-issue-row{display:flex;justify-content:space-between;gap:8px;padding:3px 0;font-size:13px}
.ap-issue-total-row{margin-top:4px;padding-top:6px;border-top:1px solid #E5E7EB;font-weight:700}
.ap-issue-error{margin-top:8px;font-size:12px;color:#B91C1C}
.ap-issue-footer{margin-top:12px;display:flex;justify-content:flex-end;gap:8px}
.ap-issue-btn-cancel{font-size:13px;padding:6px 12px;border:1px solid #D1D5DB;border-radius:6px;background:#fff;cursor:pointer}
.ap-issue-btn-confirm{font-size:13px;padding:6px 14px;border:none;border-radius:6px;background:#185FA5;color:#fff;cursor:pointer}
.ap-issue-btn-confirm[disabled]{cursor:not-allowed;opacity:.6}
@media (max-width:768px){
  /* flex-direction:column αλλάζει τον main axis σε κάθετο — το flex:1 στα
     παιδιά δεν εγγυάται πια πλήρες πλάτος. Ρητό width:100%. Σειρά DOM ήδη
     τίτλος→τύπος→καρτέλες→Σύνολο→τρόπος πληρωμής→κουμπιά (καμία αλλαγή). */
  .ap-issue-cols{flex-direction:column;gap:12px}
  .ap-issue-col-cards,.ap-issue-col-pm{flex:none;width:100%}
  /* «Άκυρο»/«Έκδοση ΑΠΥ» μοιράζονται το πλάτος στην ίδια σειρά. */
  .ap-issue-footer{gap:8px}
  .ap-issue-btn-cancel{flex:0 0 auto}
  .ap-issue-btn-confirm{flex:1;text-align:center}
  /* fix/appt-row-one-line (27/09): η παλιά fixup .apx-row{grid-template-columns:
     18px minmax(72px,1fr) auto} που ζούσε εδώ ΑΦΑΙΡΕΘΗΚΕ — έλυνε ένα squeeze
     του task/where συγκεκριμένο στην ΠΑΛΙΑ κατανομή στηλών (18px 1fr auto,
     όπου η auto στήλη 3 «έτρωγε» χώρο από την 1fr στήλη 2). Η νέα βάση
     (18px auto 1fr, βλ. .apx-row πιο πάνω) αντιστρέφει τους ρόλους — η
     στήλη 2 (task/time) είναι πλέον auto στο δικό της περιεχόμενο, η 3
     (where/cust) 1fr — δεν αναπαράγεται πια το ίδιο πρόβλημα. Θα χρειαστεί
     αν ξαναφανεί σε πολύ στενές οθόνες (mockup δεν το κάλυπτε ρητά).
     Παρέμεινε εδώ ΜΟΝΟ αν χρειαστεί επαναφορά, ΟΧΙ ενεργό πια. */
}

/* ΗΜΕΡΟΛΟΓΙΟ (Calendar V2, ημερήσια όψη) — λιτή γραμμή ραντεβού: ΜΙΑ σειρά, χωρίς φόντο/emoji/πλακίδια.
   Μπάρα 3px αριστερά + όνομα με το χρώμα του σκοπού (μεταβλητές --task-*, ίδιες με τη σελίδα Ραντεβού).
   Μόνο η σημείωση πελάτη κόβεται (ellipsis) και ανοίγει με κλικ (.is-open)· ΚΑΝΕΝΑ άλλο στοιχείο δεν κόβεται. */
.cal-row{display:flex;align-items:center;gap:8px;min-width:0;padding:5px 10px 5px 14px;margin:2px 0 2px 48px;border-left:3px solid var(--border-strong);border-radius:0;background:transparent;cursor:grab;font-size:13px;color:var(--text-secondary);transition:opacity 0.15s}
.cal-row-pickup{border-left-color:var(--task-pickup)}
.cal-row-delivery{border-left-color:var(--task-delivery)}
.cal-row-time{flex:0 0 auto;width:44px;font-size:13px;color:var(--text-secondary);white-space:nowrap}
.cal-row-name{flex:0 0 auto;font-size:14px;font-weight:500;color:var(--text-primary);white-space:nowrap}
.cal-row-pickup .cal-row-name{color:var(--task-pickup)}
.cal-row-delivery .cal-row-name{color:var(--task-delivery)}
.cal-row-addr,.cal-row-items{flex:0 0 auto;font-size:13px;color:var(--text-secondary);white-space:nowrap}
/* Παραστατικό της καρτέλας στη γραμμή (γκρι, ίδιο μέγεθος/χρώμα με διεύθυνση/είδη) — ΧΩΡΙΣΤΟΣ κανόνας, ο παραπάνω είναι καρφωμένος από φύλακα */
.cal-row-doc{flex:0 0 auto;font-size:13px;color:var(--text-secondary);white-space:nowrap}
/* fix/calendar-day-rows-mobile: wrapper γύρω από διεύθυνση/είδη/παραστατικό/σημείωση/ποσό — ΙΔΙΟ flex layout
   με πριν (gap:8px, note flex:1 1 0 σπρώχνει το ποσό δεξιά)· απλά nested, ώστε το @media(max-width:600px)
   να μπορεί να το ρίξει σε δική του γραμμή χωρίς να αγγίξει τη σειρά ώρα/όνομα. */
.cal-row-details{display:flex;align-items:center;gap:8px;flex:1 1 auto;min-width:0}
.cal-row-note{flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;color:var(--text-secondary)}
.cal-row-note[data-has-note]{cursor:pointer}
.cal-row-note.is-open{white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere}
.cal-row-amt{flex:0 0 auto;min-width:76px;text-align:right;font-size:14px;font-weight:500;color:var(--text-primary);white-space:nowrap;font-variant-numeric:tabular-nums}

/* SIZE BUTTONS */
.size-btn{background:var(--surface2);border:1px solid var(--border);color:var(--muted);border-radius:8px;padding:7px 13px;font-family:'DM Sans',sans-serif;font-size:0.83rem;cursor:pointer;transition:all 0.18s}
.size-btn:hover{border-color:var(--accent);color:var(--text)}
.size-btn.selected{background:rgba(245,200,66,0.15);border-color:var(--accent);color:var(--accent);font-weight:700}

/* EMPTY */
.empty{text-align:center;padding:40px 20px;color:var(--muted);font-size:0.9rem}
.empty-icon{font-size:3rem;margin-bottom:10px}

/* PAGE HEADER */
.page-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;flex-wrap:wrap;gap:10px}
.page-title{font-family:Syne;font-weight:800;font-size:1.2rem}

/* MONEY */
.money-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.money-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px}
.money-title{font-family:Syne;font-weight:700;font-size:0.9rem;color:var(--muted);margin-bottom:12px}
.money-amount{font-family:Syne;font-weight:800;font-size:2rem;color:var(--accent)}
.debt-row{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--border);font-size:0.85rem}

.filter-btn{background:var(--surface2);border:1px solid var(--border);border-radius:20px;padding:5px 12px;color:var(--muted);font-size:0.78rem;cursor:pointer;font-family:inherit;transition:all .2s}
.filter-btn.active{background:var(--accent);border-color:var(--accent);color:#000;font-weight:700}

/* CALENDAR */
#cal-grid { overflow-x:auto; }
.cal-table { border-collapse:collapse; min-width:100%; }
.cal-table th { background:var(--surface2); padding:8px 4px; text-align:center; font-family:Syne; font-weight:800; font-size:0.78rem; border:1px solid var(--border); position:sticky; top:0; z-index:2; min-width:62px; }
.cal-table th.time-col { min-width:44px; }
.cal-table td { border:1px solid var(--border); vertical-align:top; padding:2px; min-width:62px; height:22px; }
.cal-table td.has-ap { height:auto; min-height:22px; }
.cal-table td.time-cell { background:var(--surface2); font-size:0.72rem; color:var(--muted); font-weight:700; text-align:right; padding:2px 6px; white-space:nowrap; width:44px; }
.cal-table td.today-col { background:rgba(245,200,66,0.07); }

@media print {
  #print-overlay > div:first-child { display:none!important; }
  #print-overlay { position:static!important; overflow:visible!important; }
  body > *:not(#print-overlay) { display:none!important; }
}

@media(max-width:600px){
  .stats-grid{grid-template-columns:1fr 1fr}
  .form-row{grid-template-columns:1fr}
  .money-grid{grid-template-columns:1fr}
  body{font-size:16px}
  .btn{font-size:1rem;padding:10px 16px}
  .btn-sm{font-size:0.9rem;padding:7px 12px}
  .tab{font-size:0.92rem;padding:12px 10px}
  .badge{font-size:0.95rem}
  .form-group label{font-size:0.92rem}
  .form-group input,.form-group select,.form-group textarea{font-size:1rem;padding:11px 13px}
  .search-box{font-size:1rem}
  .total-row{font-size:0.95rem}
  .card-sub{font-size:0.95rem}
  .detail-sub{font-size:1rem}
  .empty{font-size:1rem}
  .money-title{font-size:1rem}
  .debt-row{font-size:0.95rem}
  .stat-label{font-size:0.88rem}
  .carpet-sub{font-size:0.95rem}
  .svc-label{font-size:0.88rem}
  .filter-btn{font-size:0.9rem;padding:7px 14px}
  .toast{font-size:1rem}
  input,select,textarea{font-size:1rem !important}

  /* fix/calendar-day-rows-mobile: η γραμμή ραντεβού Ημερολογίου (Ημέρα) χωρίζεται σε 2 γραμμές
     αντί να σέρνεται οριζόντια — ΜΟΝΟ ≤600px, desktop αμετάβλητο (βλ. base .cal-row* πιο πάνω).
     Γραμμή 1: ώρα+όνομα (ποτέ κομμένο, αναδιπλώνεται)· Γραμμή 2 (.cal-row-details): διεύθυνση/
     είδη/παραστατικό/ποσό — flex-basis:100% τη ρίχνει ΠΑΝΤΑ σε νέα γραμμή, αναδιπλώνεται εσωτερικά. */
  .cal-row{flex-wrap:wrap}
  .cal-row-name{white-space:normal;overflow-wrap:break-word;flex:1 1 auto;min-width:0}
  .cal-row-details{flex:1 1 100%;flex-wrap:wrap;min-width:0}
  .cal-row-addr,.cal-row-items,.cal-row-doc,.cal-row-amt{white-space:normal;overflow-wrap:break-word;min-width:0}
}

/* ═══ NOTIFICATION SETTINGS ═══ */
.notif-master{display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid var(--border);margin-bottom:16px}
.notif-master-label{font-family:Syne;font-weight:700;font-size:0.95rem}
.notif-master-sub{font-size:0.78rem;color:var(--muted);margin-top:2px}
.notif-toggle{position:relative;width:44px;height:24px;flex-shrink:0}
.notif-toggle input{opacity:0;width:100%;height:100%;position:absolute;cursor:pointer;z-index:1;margin:0}
.notif-toggle .nt-track{position:absolute;inset:0;background:var(--border);border-radius:12px;transition:background 0.25s}
.notif-toggle input:checked+.nt-track{background:var(--accent)}
.notif-toggle .nt-knob{position:absolute;top:3px;left:3px;width:18px;height:18px;background:#fff;border-radius:50%;transition:transform 0.25s;pointer-events:none;box-shadow:0 1px 3px rgba(0,0,0,0.15)}
.notif-toggle input:checked~.nt-knob{transform:translateX(20px)}
.nstage-row{display:flex;align-items:flex-start;gap:12px;padding:12px 0;border-bottom:1px solid rgba(0,0,0,0.04)}
.nstage-row:last-child{border-bottom:none}
.nstage-icon{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:1.1rem;flex-shrink:0;background:var(--surface2);border:1px solid var(--border)}
.nstage-row.ns-active .nstage-icon{background:rgba(var(--brand-primary-rgb),0.1);border-color:rgba(var(--brand-primary-rgb),0.3)}
.nstage-info{flex:1;min-width:0}
.nstage-name{font-weight:600;font-size:0.9rem;display:flex;align-items:center;gap:8px}
.nstage-tag{font-size:0.68rem;color:var(--muted);background:var(--surface2);border:1px solid var(--border);padding:1px 7px;border-radius:12px;font-weight:500}
.nstage-tag.ns-on{background:rgba(var(--brand-primary-rgb),0.1);border-color:rgba(var(--brand-primary-rgb),0.25);color:var(--accent)}
.nstage-msg textarea{width:100%;background:var(--surface2);border:1px solid var(--border);border-radius:8px;padding:8px 10px;color:var(--text);font-family:'DM Sans',sans-serif;font-size:0.82rem;outline:none;resize:none;line-height:1.5;transition:border-color 0.2s;box-sizing:border-box;margin-top:6px}
.nstage-msg textarea:focus{border-color:var(--accent)}
.nstage-msg textarea:disabled{opacity:0.4;cursor:not-allowed}
.notif-test{margin-top:16px;padding-top:16px;border-top:1px solid var(--border)}
.notif-preview{margin-top:16px;padding-top:16px;border-top:1px solid var(--border)}
.notif-mini-phone{width:200px;background:#111;border-radius:22px;padding:8px;margin:12px auto 0}
.notif-mini-screen{background:linear-gradient(170deg,#1a1a2e,#16213e);border-radius:16px;min-height:200px;overflow:hidden;padding:10px}
.notif-mini-notif{background:rgba(255,255,255,0.92);border-radius:10px;padding:8px 10px;margin-bottom:6px;animation:nSlide 0.4s cubic-bezier(0.34,1.56,0.64,1)}
@keyframes nSlide{from{opacity:0;transform:translateY(-10px) scale(0.96)}to{opacity:1;transform:translateY(0) scale(1)}}
.notif-save-bar{display:flex;gap:10px;align-items:center;margin-top:16px;padding-top:14px;border-top:1px solid var(--border)}
@media(max-width:600px){
  .nstage-name{font-size:1rem}
  .nstage-msg textarea{font-size:0.95rem}
  .notif-master-label{font-size:1.05rem}
  .notif-master-sub{font-size:0.88rem}

  /* ── Route Builder: fullscreen + scrollable on mobile ── */
  #modal-route-builder .modal {
    max-width:100% !important;
    max-height:100vh !important;
    height:100vh !important;
    border-radius:0 !important;
    margin:0 !important;
    overflow-y:auto !important;
    overflow-x:hidden !important;
    display:block !important;
  }
  #modal-route-builder { padding:0 !important; }

  /* Header controls: stack vertically */
  #modal-route-builder .modal > div:first-child > div:last-child {
    flex-direction:column !important;
    align-items:stretch !important;
    gap:8px !important;
  }
  #modal-route-builder .modal > div:first-child > div:last-child input[type="date"],
  #modal-route-builder .modal > div:first-child > div:last-child input[type="text"] {
    width:100% !important;
    min-width:unset !important;
    font-size:1rem !important;
    padding:10px 14px !important;
  }

  /* Grid: single column, NO overflow hidden */
  #rb-grid {
    grid-template-columns:1fr !important;
    overflow:visible !important;
    display:block !important;
  }
  #rb-grid > div:first-child {
    border-right:none !important;
    border-bottom:2px solid var(--border);
    max-height:none !important;
    min-height:auto !important;
    overflow:visible !important;
  }
  #rb-grid > div:last-child {
    max-height:none !important;
    min-height:auto !important;
    overflow:visible !important;
  }
  /* Let inner lists show all items (no internal scroll) */
  #rb-available, #rb-route-list {
    overflow:visible !important;
    flex:none !important;
  }

  /* Stop cards: bigger touch targets */
  #rb-route-list [data-rb-idx] button,
  #rb-available button {
    min-width:36px !important;
    min-height:36px !important;
    font-size:1.1rem !important;
  }
  #rb-route-list [data-rb-idx] > div > div:last-child {
    gap:4px !important;
  }
  #rb-route-list [data-rb-idx] > div > div:last-child button,
  #rb-route-list [data-rb-idx] > div > div:last-child span {
    padding:6px 8px !important;
    font-size:1.1rem !important;
  }

  /* Footer: sticky bottom */
  #modal-route-builder .modal > div:last-child {
    position:sticky !important;
    bottom:0 !important;
    z-index:10 !important;
    flex-direction:column !important;
    gap:8px !important;
    padding:12px 16px !important;
  }
  #modal-route-builder .modal > div:last-child .btn {
    width:100% !important;
    padding:12px !important;
    font-size:0.95rem !important;
  }

}

/* Desktop sidebar-on: hide only the legacy top-nav tabs that have a
   sidebar equivalent (marked .sidebar-linked). Role-specific single-mode
   tabs without a sidebar entry (tab-washer, tab-driver) stay visible so
   those roles can navigate back to their workstation on desktop.
   .tab elements remain in DOM so applyRoleUI + syncSidebarVisibility
   continue to drive role-based visibility via inline style.display.
   Mobile keeps the top tabs since the sidebar is off-canvas there. */
@media (min-width: 769px) {
  body.cfx-sidebar-on .nav .tab.sidebar-linked {
    display: none !important;
  }
}

/* ========== END CFX SIDEBAR ========== */

/* ========== PHASE 2L PR 2 — Dashboard redesign ========== */
.p2l-dash-top { display:grid; grid-template-columns: 1fr 260px; gap:16px; margin-bottom:20px; align-items:start; }
@media (max-width:768px) { .p2l-dash-top { grid-template-columns: 1fr; } }
.p2l-dash-greeting { display:flex; flex-direction:column; gap:4px; padding:16px 2px 4px; }
.p2l-dash-hello { font-family:Syne; font-weight:800; font-size:1.35rem; color:var(--text); line-height:1.2; }
.p2l-dash-date { color:var(--muted); font-size:0.92rem; }

.p2l-memos { background:var(--surface); border:1px solid var(--border); border-radius:14px; padding:12px 14px; display:flex; flex-direction:column; gap:10px; max-height:360px; overflow-y:auto; }

/* ── 🪪 Κάρτα χτυπήματος ΕΡΓΑΝΗ (ΕΡΓΑΝΗ ΙΙ, PR-2) ──
   Το κέλυφος είναι ΤΙΜΗ-ΠΡΟΣ-ΤΙΜΗ ίδιο με το .p2l-memos παραπάνω, μετρημένο
   στη ζωντανή Κεντρική (getBoundingClientRect + getComputedStyle, 25/07/2026):
   πλάτος στήλης 260px, padding 12px 14px, border 1px, radius 14px, gap 10px,
   ετικέτα 0.72rem/700/ls 0.5px/uppercase/--muted, box-sizing border-box.
   Αν αλλάξει το .p2l-memos, ΑΛΛΑΞΕ ΚΑΙ ΕΔΩ — οι δύο κάρτες στέκονται δίπλα-δίπλα
   και κάθε απόκλιση φαίνεται αμέσως ως μη-ευθυγραμμισμένη άκρη. */
.erg-card { background:var(--surface); border:1px solid var(--border); border-radius:14px; padding:12px 14px;
  display:flex; flex-direction:column; gap:10px; box-sizing:border-box; }
.erg-header { display:flex; align-items:center; justify-content:space-between; font-size:0.72rem;
  letter-spacing:0.5px; font-weight:700; color:var(--muted); text-transform:uppercase; flex:0 0 auto; }
.erg-header-link { cursor:pointer; }
.erg-header-link:hover { color:var(--text); }
.erg-header-link:focus-visible { outline:2px solid var(--accent); outline-offset:2px; border-radius:3px; }
/* Ο πυρήνας κεντράρεται στον ΥΠΟΛΟΙΠΟ χώρο κάτω από την ετικέτα. Χωρίς αυτό,
   όταν το ΘΥΜΗΣΟΥ είναι γεμάτο (max-height 360) και η σειρά ψηλώνει, μετρήθηκε
   τρύπα 264.66px πάνω από το κουμπί — άκρες ευθυγραμμισμένες, κάρτα σπασμένη. */
.erg-core { flex:1 1 auto; display:flex; flex-direction:column; justify-content:center; gap:10px; min-height:0; }
.erg-status { font-size:0.86rem; line-height:1.4; color:var(--text); }
.erg-btn { width:100%; border:none; border-radius:10px; padding:11px 12px; font:inherit; font-size:0.92rem;
  font-weight:700; color:#fff; cursor:pointer; }
/* 🚨 ΣΤΑΘΕΡΟ πράσινο, ΟΧΙ var(--brand-primary)/var(--green).
   Το --brand-primary είναι σταθερό μαύρο #0d0d0d (παλιά το άλλαζε runtime το
   χρώμα μάρκας του tenant), και το --green ορίζεται ως var(--brand-primary)
   — άρα ΚΑΙ τα δύο είναι tenant-βαμμένα. Σε tenant με σκούρα μάρκα το κουμπί
   βγήκε ΜΑΥΡΟ (live 25/07)· σε tenant με κόκκινη μάρκα η «Προσέλευση» θα γινόταν
   κόκκινη ΔΙΠΛΑ στην κόκκινη «Αποχώρηση» — δύο αντίθετες νομικές ενέργειες με ίδιο
   χρώμα. Τα σημασιολογικά χρώματα κατάστασης ΔΕΝ δένονται σε token μάρκας. */
.erg-btn-in { background:#16a34a; color:#fff; }
/* Το --red ορίζεται στο :root και ΔΕΝ το αγγίζει κανένα χρώμα επιχείρησης,
   οπότε μένει σταθερό σε όλους τους tenants. */
.erg-btn-out { background:var(--red); }
.erg-btn:disabled { opacity:0.55; cursor:default; }
.erg-privacy { font-size:0.68rem; color:var(--muted); line-height:1.35; }

/* Φάση 1β — κάρτα «Υπενθυμίσεις χτυπήματος». Ίδιο section (erg-card) με το
   χτύπημα, χωρισμένο με λεπτή γραμμή σαν το erg-log. Πράσινη λωρίδα = ίδια
   παλέτα .ewto-zone-ok (ενημέρωση θετική)· κίτρινη λωρίδα = ίδια παλέτα με το
   erg-geo-strip παραπάνω (ενημέρωση, όχι σφάλμα — φραγμένο ΑΠΟ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ,
   δεν χάλασε τίποτα δικό μας). */
.erg-push-card { border-top:0.5px solid var(--border); padding-top:8px;
  display:flex; flex-direction:column; gap:6px; }
.erg-push-title { font-size:0.72rem; font-weight:700; letter-spacing:0.3px;
  color:var(--muted); text-transform:uppercase; }
.erg-push-text { font-size:0.76rem; line-height:1.4; color:var(--muted); }
.erg-push-steps { margin:0; padding-left:18px; font-size:0.78rem; line-height:1.5; color:var(--text); }
.erg-push-strip { border-radius:9px; padding:7px 8px; font-size:0.76rem;
  line-height:1.35; font-weight:600; }
.erg-push-strip-ok { background:#DCFCE7; color:#166534; }
.erg-push-strip-warn { background:#FEF3C7; color:#92400E; }
.erg-push-actions { display:flex; gap:8px; }
.erg-push-btn { border:none; border-radius:10px; padding:9px 10px; font:inherit;
  font-size:0.82rem; font-weight:700; cursor:pointer; }
.erg-push-btn-primary { width:100%; background:#16a34a; color:#fff; }
.erg-push-btn-secondary { flex:1; background:var(--surface2); color:var(--text);
  border:1px solid var(--border); }
.erg-push-btn:disabled { opacity:0.55; cursor:default; }

/* ΣΤ2 — λωρίδα υπενθύμισης γεωεντοπισμού. Κίτρινη (warning), ίδια παλέτα με
   .ewto-pending-banner: καθαρή ενημέρωση, ΟΧΙ σφάλμα (κόκκινο θα υπονοούσε ότι
   κάτι απέτυχε — δεν απέτυχε τίποτα, το χτύπημα δουλεύει κανονικά χωρίς GPS). */
.erg-geo-strip { display:flex; align-items:flex-start; gap:7px; background:#FEF3C7; color:#92400E;
  border-radius:9px; padding:7px 8px; font-size:0.74rem; line-height:1.35; }
.erg-geo-strip-icon { flex-shrink:0; }
.erg-geo-strip-body { flex:1; min-width:0; display:flex; flex-direction:column; gap:2px; }
.erg-geo-strip-text { flex:1; min-width:0; }
.erg-geo-strip-subtext { font-size:0.66rem; line-height:1.3; opacity:0.85; }
.erg-geo-strip-close { flex-shrink:0; border:none; background:transparent; color:#92400E; cursor:pointer;
  font-size:0.82rem; line-height:1; padding:2px 4px; }
.erg-geo-strip-close:hover { opacity:0.7; }

/* Ματαιωμένο χτύπημα (αλλαγή ταυτότητας ενώ εκκρεμούσε GPS) — κόκκινη, ΟΧΙ
   κίτρινη σαν τη λωρίδα γεωεντοπισμού: εδώ κάτι ΠΡΑΓΜΑΤΙΚΑ απέτυχε (το
   χτύπημα δεν καταγράφηκε) και απαιτεί ενέργεια, ίδια παλέτα με .erg-btn-out
   background πιο ανοιχτό. */
.erg-aborted-notice { background:#FEE2E2; color:#991B1B; border-radius:9px;
  padding:7px 8px; font-size:0.74rem; line-height:1.35; }

/* ── Μονά («ορφανά») χτυπήματα — ΑΥΣΤΗΡΑ ΕΝΗΜΕΡΩΤΙΚΗ γραμμή ──────────────
   ΟΧΙ λωρίδα, ΟΧΙ κουτί, ΟΧΙ κουμπί: μία διακριτική γραμμή κάτω από το κουμπί
   σήμανσης. Η εγκύκλιος λέει ότι ο εργαζόμενος που έχει ήδη φύγει από τον χώρο
   ΔΕΝ κάνει τίποτα — άρα η ένδειξη είναι πληροφορία, όχι προτροπή, και δεν
   επιτρέπεται να αποκτήσει ποτέ ενέργεια.
   Τρία επίπεδα έμφασης, ίδια παλέτα με τις υπόλοιπες λωρίδες της κάρτας:
     κάτω από 3 → ουδέτερο (var(--muted)), απλή πληροφορία
     ακριβώς 3 → προειδοποιητικό (#92400E, ίδιο με .erg-geo-strip)
     πάνω από 3 → κόκκινο (#991B1B, ίδιο με .erg-aborted-notice) */
.erg-orphan { border-top:0.5px solid var(--border); padding-top:8px; font-size:0.72rem;
  line-height:1.35; color:var(--muted); display:flex; align-items:flex-start; gap:6px; }
.erg-orphan-warn { color:#92400E; }
.erg-orphan-bad { color:#991B1B; font-weight:600; }
.erg-orphan-icon { flex-shrink:0; }
.erg-orphan-text { flex:1; min-width:0; }
.erg-orphan-more { color:var(--muted); }

/* ── Οθόνη «Ορφανά χτυπήματα» (hub ΕΡΓΑΝΗ) ─────────────────────────────────
   ΙΔΙΑ χρωματική λογική με τη γραμμή της κάρτας παραπάνω: 3/3 προειδοποιητικό,
   πάνω από 3 κόκκινο. Το «Χωρίς ενεργή Κάρτα» ΔΕΝ παίρνει αριθμό — «δεν
   κρίνεται» δεν επιτρέπεται να μοιάζει με «μηδέν παραλείψεις». */
.erg-op-staff { border:1px solid var(--border); border-radius:10px; padding:10px 12px; }
.erg-op-head { display:flex; align-items:baseline; justify-content:space-between; gap:8px; }
.erg-op-name { font-weight:700; font-size:0.9rem; color:var(--text); }
.erg-op-score { font-size:0.82rem; color:var(--muted); font-variant-numeric:tabular-nums; flex-shrink:0; }
.erg-op-score-warn { color:#92400E; font-weight:700; }
.erg-op-score-bad { color:#991B1B; font-weight:700; }
.erg-op-nocard { font-size:0.78rem; color:var(--muted); flex-shrink:0; }
.erg-op-warning { margin-top:6px; font-size:0.72rem; line-height:1.4; color:#991B1B; background:#FEE2E2;
  border-radius:8px; padding:6px 8px; }
.erg-op-month { margin-top:8px; }
.erg-op-month-title { font-size:0.72rem; color:var(--muted); font-weight:700; }
.erg-op-day { font-size:0.74rem; color:var(--text); line-height:1.45; }
.erg-op-empty { font-size:0.78rem; color:var(--muted); }

/* ── Λίστα χτυπημάτων της ημέρας μέσα στην κάρτα (πολλαπλές βάρδιες) ──
   Με σπαστό ωράριο η κάρτα δεν έχει ΜΙΑ κατάσταση αλλά ιστορικό. Οι γραμμές
   είναι διακριτικές (0.74rem): το κουμπί μένει το οπτικό κέντρο. */
/* max-height + scroll: μια ημέρα με πολλές βάρδιες δεν επιτρέπεται να ψηλώσει
   την κάρτα — στέκεται δίπλα-δίπλα με το ΘΥΜΗΣΟΥ σε κοινό ύψος σειράς και θα
   έσπαγε η ευθυγράμμιση (βλ. σχόλιο .erg-card παραπάνω). */
.erg-log { border-top:0.5px solid var(--border); padding-top:8px; display:flex; flex-direction:column; gap:3px;
  max-height:132px; overflow-y:auto; flex:0 1 auto; }
.erg-log-row { display:flex; align-items:center; gap:7px; font-size:0.74rem; color:var(--text); }
.erg-log-time { font-variant-numeric:tabular-nums; font-weight:700; flex-shrink:0; }
.erg-log-dir { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.erg-log-erg { flex-shrink:0; color:var(--muted); font-size:0.68rem; }
.erg-log-total { margin-top:5px; font-size:0.74rem; color:var(--muted); }

/* ── ✅ Οθόνη επιβεβαίωσης χτυπήματος ──
   Σκόπιμα ΑΡΑΙΗ: τι / ώρα / ποιος / πότε, και δύο κουμπιά. Ο εργαζόμενος τη
   διαβάζει σε δευτερόλεπτα με το κινητό στο χέρι, συχνά στην αποθήκη. */
.erg-cf-what { font-size:1.35rem; font-weight:700; color:var(--text); text-align:center; margin-bottom:2px; }
.erg-cf-time { font-size:2.6rem; font-weight:700; font-variant-numeric:tabular-nums; color:var(--text);
  text-align:center; line-height:1.1; margin-bottom:10px; }
.erg-cf-who { font-size:1rem; color:var(--text); text-align:center; }
.erg-cf-date { font-size:0.85rem; color:var(--muted); text-align:center; margin-bottom:16px; }
/* Ράβδος λήξης 60΄΄ — ΟΠΤΙΚΗ ένδειξη, κανένα κείμενο να διαβαστεί. Το πλάτος
   κινείται από JS (_cfStartBar) με CSS transition, χωρίς tick ανά δευτερόλεπτο. */
.erg-cf-bar { height:3px; border-radius:999px; background:var(--border); overflow:hidden; margin-bottom:4px; }
.erg-cf-bar-fill { height:100%; width:100%; background:var(--muted); border-radius:999px; }

/* Κοινό ύψος σειράς ΜΟΝΟ στις δύο κάρτες — align-items:stretch στο grid θα
   τράβαγε και τον χαιρετισμό. Η 3η στήλη μπαίνει μόνο με .has-ergani ώστε όταν
   η κάρτα κρύβεται (προβολή ως ρόλος) το layout να επιστρέφει ακριβώς όπως ήταν
   αντί να μένει κενή στήλη 260px. */
.p2l-dash-top.has-ergani { grid-template-columns: 1fr 260px 260px; }
.p2l-dash-top > .erg-card, .p2l-dash-top > .p2l-memos { align-self:stretch; }
@media (max-width:768px) { .p2l-dash-top.has-ergani { grid-template-columns: 1fr; } }

/* Οθόνη οδηγού: χαιρετισμός + κάρτα. Δεν υπάρχει δεύτερη κάρτα στη σειρά, άρα
   φυσικό ύψος (align-self:start) — καμία τρύπα να κεντραριστεί. */
.drv-top { display:grid; grid-template-columns:1fr; column-gap:16px; row-gap:12px; margin-bottom:14px;
  align-items:start; }
.drv-top.has-ergani { grid-template-columns:1fr 260px; }
@media (max-width:768px) { .drv-top.has-ergani { grid-template-columns:1fr; } }
.p2l-memos-header { display:flex; align-items:center; justify-content:space-between; font-size:0.72rem; letter-spacing:0.5px; font-weight:700; color:var(--muted); text-transform:uppercase; }
.p2l-memos-add { background:transparent; border:1px dashed var(--border); border-radius:999px; padding:4px 10px; color:var(--accent); cursor:pointer; font-size:0.72rem; font-weight:700; }
.p2l-memos-add:hover { background:rgba(var(--brand-primary-rgb),0.08); }
.p2l-memos-list { display:flex; flex-direction:column; gap:8px; }
/* Phase 2L PR 3: avatar αριστερά + content/meta δεξιά (flex row). Το
   badge «από/προς X» είναι inline-block αμέσως μετά το text, ώστε σε
   short memos να κάνει fit στην ίδια γραμμή και σε long memos να πέφτει
   φυσικά στην επόμενη. */
.p2l-memo { border:none; width:100%; font:inherit; text-align:left; border-radius:10px; padding:10px 12px; cursor:pointer; transition:transform 0.08s; display:flex; align-items:flex-start; gap:10px; }
.p2l-memo:hover { transform:translateY(-1px); }
.p2l-memo:focus-visible { outline:2px solid var(--accent); outline-offset:2px; }
/* Outbox ταιριάζει με own — ίδιο κίτρινο tone. Incoming σκούρο κίτρινο
   για να ξεχωρίζει «κάτι με ενδιαφέρει» με μια ματιά. */
.p2l-memo-own      { background:#FAEEDA; color:#633806; }
.p2l-memo-outbox   { background:#FAEEDA; color:#633806; }
.p2l-memo-incoming { background:#F8D98A; color:#412402; }
.p2l-memo-avatar { width:28px; height:28px; border-radius:50%; display:flex; align-items:center; justify-content:center; color:#fff; font-size:12px; font-weight:500; flex-shrink:0; font-family:inherit; }
.p2l-memo-avatar-self { background:var(--surface-muted, #E5E5E0); color:var(--muted, #5F5E5A); border:0.5px solid var(--border, rgba(0,0,0,0.15)); }
.p2l-memo-body { flex:1; min-width:0; }
/* Playpen Sans ΜΟΝΟ εδώ — το σώμα του σημειώματος. Τα .p2l-memo-meta /
   -badge / -avatar μένουν στη γραμματοσειρά της εφαρμογής. */
.p2l-memo-text { display:inline; font-family:'Playpen Sans', cursive; font-size:0.82rem; line-height:1.35; white-space:pre-wrap; word-break:break-word; }
/* «✓ το είδε» στο outbox του αποστολέα (memos.dismissed_at, v169). */
.p2l-memo-seen-label { font-weight:700; color:#1D9E75; }
.p2l-memo-meta { display:flex; align-items:center; margin-top:6px; gap:6px; font-size:0.68rem; opacity:0.75; }
.p2l-memo-time { margin-left:auto; }
.p2l-memo-self-label { font-weight:700; }
.p2l-memo-badge { display:inline-block; margin-left:6px; white-space:nowrap; vertical-align:middle; font-size:10px; font-weight:500; color:#fff; padding:2px 8px; border-radius:8px; }
.p2l-memos-empty { color:var(--muted); font-size:0.82rem; padding:8px 2px; }

/* ── Σημειώματα ΘΥΜΗΣΟΥ στη σελίδα Δρομολογίου (v169) ──
   Post-it κάρτες με τα εκκρεμή (μη-dismissed) incoming του συνδεδεμένου
   PIN-staff. Ολόκληρο το #driver-memos κρύβεται όταν δεν υπάρχει κανένα
   — μηδέν κενός χώρος πάνω από τα tabs περιοχών. */
.drv-memos { display:flex; flex-direction:column; gap:8px; margin-bottom:14px; }
.drv-memo { display:flex; align-items:flex-start; gap:10px; background:#FDF6DC; border:1px solid #EFE0A8; border-radius:12px; padding:11px 12px; box-shadow:0 1px 2px rgba(0,0,0,0.05); }
.drv-memo-urgent { background:#FBE9D8; border-color:#EEC49B; }
.drv-memo-avatar { width:30px; height:30px; border-radius:50%; flex-shrink:0; display:flex; align-items:center; justify-content:center; color:#fff; font-size:13px; font-weight:600; }
.drv-memo-body { flex:1; min-width:0; }
/* Playpen Sans ΜΟΝΟ στο σώμα — το -meta μένει στη γραμματοσειρά της εφαρμογής. */
.drv-memo-text { font-family:'Playpen Sans', cursive; font-size:0.92rem; line-height:1.45; color:#5A4207; white-space:pre-wrap; word-break:break-word; }
.drv-memo-meta { margin-top:7px; font-size:0.7rem; color:#8A7A4E; font-weight:500; }
.drv-memo-seen { margin-top:9px; background:#fff; border:1px solid #E0CF93; color:#6B5410; border-radius:8px; padding:5px 11px; font-family:inherit; font-size:0.76rem; font-weight:700; cursor:pointer; }
.drv-memo-seen:hover { background:#FFFCF2; }
.drv-memo-seen:disabled { opacity:0.55; cursor:default; }

.p2l-section { margin-bottom:20px; }
.p2l-section-title { font-family:Syne; font-weight:800; font-size:0.82rem; letter-spacing:1px; color:var(--muted); text-transform:uppercase; margin-bottom:10px; }
.p2l-metrics-grid { display:grid; gap:10px; }
.p2l-metrics-4 { grid-template-columns: repeat(4, 1fr); }
.p2l-metrics-3 { grid-template-columns: repeat(3, 1fr); }
@media (max-width:768px) { .p2l-metrics-4, .p2l-metrics-3 { grid-template-columns: repeat(2, 1fr); } }
.p2l-metric-card { background:var(--surface); border:1px solid var(--border); border-radius:12px; padding:14px 16px; }
.p2l-metric-num { font-family:Syne; font-weight:800; font-size:1.7rem; color:var(--text); line-height:1.1; }
.p2l-metric-label { color:var(--muted); font-size:0.8rem; margin-top:4px; }

/* Phase 2L PR 3: semantic backgrounds per time slot (ΣΗΜΕΡΑ κίτρινο / ΧΘΕΣ
   πράσινο / ΕΠΟΜΕΝΕΣ μπλε). Scoping μέσω του parent grid class ώστε να μη
   χρειαστούν νέα modifier classes στα ίδια τα cards. */
.p2l-metrics-4 .p2l-metric-card  { background:#FAEEDA; border:0.5px solid #EF9F27; }
.p2l-metrics-4 .p2l-metric-num   { color:#412402; }
.p2l-metrics-4 .p2l-metric-label { color:#854F0B; }
.p2l-metrics-3 .p2l-metric-card  { background:#EAF3DE; border:0.5px solid #97C459; }
.p2l-metrics-3 .p2l-metric-num   { color:#173404; }
.p2l-metrics-3 .p2l-metric-label { color:#3B6D11; }

/* ── feat/dashboard-financial-overview — οικονομική εικόνα Κεντρικής ──
   Ύφος λιτό/«υπηρεσιακό»: λευκή επιφάνεια, λεπτό περίγραμμα, radius 8, χωρίς
   εικονίδια/χρωματιστά φόντα στα νούμερα, tabular-nums. */
.dfin-today { display:flex; flex-wrap:wrap; align-items:center; gap:10px 22px; background:var(--surface);
  border:0.5px solid var(--border); border-radius:8px; padding:10px 16px; margin-bottom:20px; }
.dfin-today-label { font-size:11px; text-transform:uppercase; letter-spacing:0.8px; color:var(--muted); font-weight:700; }
.dfin-today-field { display:inline-flex; align-items:baseline; gap:7px; }
.dfin-today-k { font-size:13px; color:var(--muted); }
.dfin-today-v { font-size:13px; font-weight:500; color:var(--text); font-variant-numeric:tabular-nums; }

.dfin-cards { display:grid; grid-template-columns:repeat(auto-fit, minmax(140px, 1fr)); gap:10px; margin-bottom:12px; }
.dfin-card { background:var(--surface); border:0.5px solid var(--border); border-radius:8px; padding:14px 16px; }
.dfin-card-label { font-size:12px; color:var(--muted); }
.dfin-card-value { font-size:22px; font-weight:500; color:var(--text); line-height:1.15; margin:4px 0 2px; font-variant-numeric:tabular-nums; }
.dfin-card-sub { font-size:12px; color:var(--muted); font-variant-numeric:tabular-nums; }
.dfin-up { color:#2f9e44; font-weight:600; }
.dfin-down { color:#c0491f; font-weight:600; }

.dfin-chart { margin-top:2px; }
.dfin-legend { display:flex; flex-wrap:wrap; gap:14px; margin-bottom:6px; }
.dfin-leg-item { display:inline-flex; align-items:center; gap:6px; font-size:12px; color:var(--muted); }
.dfin-leg-box { width:10px; height:10px; border-radius:2px; display:inline-block; }
.dfin-leg-line { width:12px; height:2px; display:inline-block; }
.dfin-chart-svg { width:100%; overflow-x:auto; }
.dfin-chart-empty { color:var(--muted); font-size:0.85rem; padding:20px 0; text-align:center; }

.dfin-tiles { display:grid; grid-template-columns:repeat(auto-fit, minmax(160px, 1fr)); gap:10px; }
.dfin-tile { background:var(--surface); border:0.5px solid var(--border); border-radius:8px; padding:14px 16px; }
.dfin-tile-head { display:flex; align-items:center; gap:8px; color:var(--muted); margin-bottom:6px; }
.dfin-tile-head svg { flex-shrink:0; }
.dfin-tile-label { font-size:12px; }
.dfin-tile-value { font-size:22px; font-weight:500; color:var(--text); line-height:1.15; font-variant-numeric:tabular-nums; }
.dfin-tile-sub { font-size:12px; color:var(--muted); margin-top:2px; display:flex; align-items:center; gap:5px; }
/* Πλακίδιο με ΛΙΣΤΑ ΟΝΟΜΑΤΩΝ αντί για ένα ποσό («Ορφανά χτυπήματα»): ΙΔΙΟ
   κέλυφος .dfin-tile/.dfin-tile-value — μόνο το μέγεθος πέφτει, γιατί τρία
   ονόματα στα 22px του ποσού θα έσπαγαν σε πέντε γραμμές και θα ψήλωναν όλη
   τη σειρά. Καμία χρωματική διαφορά: το πλακίδιο μένει ουδέτερο. */
.dfin-tile-names { font-size:14px; font-weight:500; line-height:1.35; display:block; }
.dfin-skeleton { color:var(--muted); }
.dfin-error { color:var(--muted); font-size:0.85rem; padding:10px 0; }

.p2l-upcoming-header { display:flex; align-items:center; justify-content:space-between; margin-bottom:10px; gap:10px; flex-wrap:wrap; }
.p2l-upcoming-link { background:transparent; border:none; color:var(--accent); cursor:pointer; font-size:0.82rem; font-weight:600; padding:4px 6px; }
.p2l-upcoming-link:hover { text-decoration:underline; }

/* fix/home-presences-card: τίτλος-κουμπί «Εργαζόμενοι · Παρουσίες» — η
   διακεκομμένη υπογράμμιση είναι η ένδειξη «πατιέται» (affordance), το
   ▸/▾ δείχνει την τρέχουσα κατάσταση. Reset σε plain <button> ώστε να μη
   μοιάζει με link/CTA — ίδιο οπτικό βάρος με το p2l-section-title. */
.emp-toggle {
  display:flex; align-items:center; gap:6px; background:transparent; border:none;
  border-bottom:1px dashed var(--border); padding:0 0 2px; margin:0; cursor:pointer;
  font:inherit; color:inherit; text-align:left;
}
.emp-chevron { font-size:0.7rem; color:var(--muted); line-height:1; }
.emp-row {
  display:flex; align-items:center; gap:8px; min-height:34px; padding:5px 2px;
  border-bottom:0.5px solid var(--border);
}
.emp-name {
  flex:0 0 150px; width:150px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  font-weight:600; font-size:0.86rem; color:var(--text);
}
.emp-pairs { flex:1 1 auto; min-width:0; display:flex; flex-wrap:wrap; align-items:center; gap:4px; }
.emp-total {
  flex:0 0 auto; font-variant-numeric:tabular-nums; font-weight:700; font-size:0.86rem;
  color:var(--text); white-space:nowrap;
}
.emp-tile {
  display:inline-flex; align-items:center; gap:3px; font-variant-numeric:tabular-nums;
  font-size:0.76rem; font-weight:600; background:var(--surface2); border-radius:6px;
  padding:3px 5px; white-space:nowrap; flex-shrink:0;
}
.emp-tile.emp-tile-open { background:#FEF3C7; }
.emp-empty-note { font-style:italic; color:var(--muted); font-size:0.82rem; }
@media (max-width:360px) {
  .emp-name { flex-basis:110px; width:110px; }
  .emp-tile { font-size:0.72rem; padding:3px 4px; }
  .emp-total { font-size:0.8rem; }
}
.p2l-upcoming-list { display:flex; flex-direction:column; gap:6px; }
/* Phase 2L PR 3: μπλε tint για ΕΠΟΜΕΝΕΣ ΥΠΟΧΡΕΩΣΕΙΣ rows. Τα red/amber pills
   διατηρούν τα δικά τους urgency χρώματα — κοντρά καθαρά με το μπλε bg. */
.p2l-upcoming-row { background:#E6F1FB; border:0.5px solid #378ADD; border-radius:10px; padding:10px 14px; display:flex; align-items:center; gap:12px; flex-wrap:wrap; }
.p2l-upcoming-title { flex:1; font-weight:600; font-size:0.92rem; color:#042C53; }
.p2l-upcoming-date { color:#185FA5; font-size:0.82rem; }
.p2l-pill { padding:3px 10px; border-radius:999px; font-size:0.72rem; font-weight:700; white-space:nowrap; }
.p2l-pill-red   { background:#FCEBEB; color:#791F1F; }
.p2l-pill-amber { background:#FAEEDA; color:#854F0B; }
/* Phase 2L PR 3: μπλε pill λίγο πιο σκούρο από το row bg (#E6F1FB) για κοντράστ. */
.p2l-pill-blue  { background:#B5D4F4; color:#185FA5; }
.p2l-upcoming-empty { color:var(--muted); font-size:0.88rem; padding:8px 2px; text-align:center; }

.p2l-modal-backdrop { position:fixed; inset:0; background:rgba(0,0,0,0.5); display:flex; align-items:center; justify-content:center; z-index:2000; padding:20px; }
.p2l-modal { background:var(--surface); border:1px solid var(--border); border-radius:14px; padding:20px 22px; max-width:420px; width:100%; display:flex; flex-direction:column; gap:10px; }
.p2l-modal-title { font-family:Syne; font-weight:800; font-size:1.1rem; color:var(--text); margin-bottom:6px; }
.p2l-modal-label { font-size:0.72rem; font-weight:700; color:var(--muted); text-transform:uppercase; letter-spacing:0.3px; margin-top:4px; }
.p2l-modal-input { background:var(--surface2); border:1px solid var(--border); border-radius:9px; padding:8px 10px; color:var(--text); font-size:0.92rem; outline:none; font-family:inherit; }
.p2l-modal-input:focus { border-color:var(--accent); }
.p2l-modal-help { color:var(--muted); font-size:0.76rem; margin-top:2px; }
.p2l-modal-actions { display:flex; justify-content:flex-end; gap:8px; margin-top:10px; }
.p2l-btn-primary { background:var(--accent); color:#fff; border:none; border-radius:8px; padding:8px 16px; font-weight:700; font-size:0.88rem; cursor:pointer; }
.p2l-btn-primary:hover { filter:brightness(1.08); }
.p2l-btn-primary:disabled { opacity:0.6; cursor:not-allowed; }
.p2l-btn-ghost { background:transparent; border:1px solid var(--border); border-radius:8px; padding:8px 16px; font-weight:600; font-size:0.88rem; cursor:pointer; color:var(--text); }
.p2l-btn-ghost:hover { background:var(--surface2); }
.p2l-btn-danger { background:transparent; border:1px solid transparent; border-radius:8px; padding:8px 16px; font-weight:600; font-size:0.88rem; cursor:pointer; color:#c0396b; }
.p2l-btn-danger:hover { background:rgba(192,57,107,0.08); }

/* Sidebar badge για νέα features */

/* Page header */
.p2l-obl-header { display:flex; align-items:flex-end; justify-content:space-between; gap:12px; flex-wrap:wrap; margin-bottom:14px; }
.p2l-obl-title-wrap { display:flex; flex-direction:column; gap:2px; }
.p2l-obl-title { font-family:Syne; font-weight:800; font-size:1.25rem; color:var(--text); text-transform:capitalize; }
.p2l-obl-subtitle { color:var(--muted); font-size:0.82rem; }
.p2l-obl-nav { display:flex; gap:6px; align-items:center; flex-wrap:wrap; }
.p2l-obl-nav-btn { padding:6px 10px; min-width:auto; }
/* feat/dashboard-fason-look — όψη fason στην Αρχική του διαχειριστή: ΜΟΝΟ χρώματα και γράμματα. ΟΛΑ με πρόθεμα #page-dashboard
   (η Αρχική του οδηγού μοιράζεται τις κλάσεις .p2l-dash-* / .p2l-section-title και ΔΕΝ πρέπει να αλλάξει). Σιελ + πράσινο = #1708/#1710. */
#page-dashboard{background:var(--cfx-page-bg, #F1F6FC)}
/* feat/home-customers-look — Πελατολόγιο: ίδιο σιελ φόντο με την Αρχική (κινητό #DBEAFE, desktop #EFF6FF)· οι κάρτες .pel-row μένουν ως έχουν. */
#page-pelatalogion{background:var(--cfx-page-bg, #DBEAFE)}
@media (min-width:601px){#page-pelatalogion{background:var(--cfx-page-bg, #EFF6FF)}}
#page-dashboard .p2l-dash-hello{font-family:inherit;font-size:24px;font-weight:600;color:#0F172A}
#page-dashboard .p2l-dash-date{color:#64748B}
#page-dashboard .p2l-section-title{font-family:inherit;font-size:16px;font-weight:600;letter-spacing:0;text-transform:none;color:#0F172A}
#page-dashboard .p2l-memos,
#page-dashboard .erg-card,
#page-dashboard .dfin-today-panel,
#page-dashboard .dfin-card,
#page-dashboard .dfin-tile,
#page-dashboard .dfin-chart,
#page-dashboard .emp-row,
#page-dashboard .p2l-upcoming-empty{background:#FFF;border:1px solid var(--border);border-radius:12px}
#page-dashboard .dfin-chart{padding:12px 14px}
#page-dashboard .emp-row{padding:5px 10px;margin-bottom:6px}
#page-dashboard .p2l-upcoming-empty{padding:14px 16px}
#page-dashboard .p2l-memos-header{font-size:13px;font-weight:600;letter-spacing:0;text-transform:none;color:#64748B}
#page-dashboard .p2l-memos-add{border:1px solid #1D6FD8;color:#1D6FD8;border-radius:999px}
#page-dashboard .p2l-memos-empty,
#page-dashboard .dfin-today-label,
#page-dashboard .dfin-today-k,
#page-dashboard .dfin-card-label,
#page-dashboard .dfin-card-sub,
#page-dashboard .dfin-tile-head,
#page-dashboard .dfin-tile-sub,
#page-dashboard .dfin-leg-item,
#page-dashboard .dfin-chart-empty,
#page-dashboard .dfin-error,
#page-dashboard .emp-chevron,
#page-dashboard .emp-empty-note{color:#64748B}
#page-dashboard .dfin-today-v,
#page-dashboard .dfin-card-value,
#page-dashboard .dfin-tile-value{color:#0F172A}
#page-dashboard .p2l-upcoming-link{color:#1D6FD8}
/* feat/home-dashboard-layout — νέα διάταξη κάτω από την πάνω ζώνη (ΜΟΝΟ θέση/όψη· φόντο #F1F6FC από τον κανόνα #page-dashboard πιο πάνω).
   Κάρτες #FFF, 1px #E2E8F0, radius 12, χωρίς σκιές. ≥1100 υπολογιστής · 601-1099 ενδιάμεσο · ≤600 κινητό (μία στήλη). */
#dh-body{min-width:0}
#page-dashboard .dh-card{box-sizing:border-box;min-width:0;background:#FFF;border:1px solid #E2E8F0;border-radius:12px;padding:12px 14px;display:flex;flex-direction:column}
#page-dashboard .dh-card .dfin-chart{flex:1 1 auto;display:flex;flex-direction:column;justify-content:center;min-width:0;background:none;border:0;border-radius:0;padding:0;margin:0}
#page-dashboard .dh-card-title{font-size:14px;font-weight:600;color:#0F172A;margin-bottom:6px}
#page-dashboard .dh-fin-grid{display:grid;gap:16px;grid-template-columns:minmax(0,1fr)}
#page-dashboard .dh-col1{display:flex;flex-direction:column;gap:12px;min-width:0}
#page-dashboard .dh-bal-grid{display:grid;gap:16px;grid-template-columns:minmax(0,1fr)}
#page-dashboard .dh-bal-items{display:contents}
#page-dashboard .dh-open{box-sizing:border-box;min-width:0;display:flex;align-items:center;gap:16px;background:#FFF;border:1px solid #E2E8F0;border-radius:12px;padding:14px 16px}
#page-dashboard .dh-ring{flex:0 0 96px;width:96px;height:96px}
#page-dashboard .dh-open-col{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:12px}
#page-dashboard .dh-open .dfin-tile{background:none;border:0;border-radius:0;padding:0}
#page-dashboard .dh-bank-wrap,#page-dashboard .dh-wide{min-width:0;display:flex;flex-direction:column}
#page-dashboard .dh-bank-wrap>.dfin-tile{flex:1 1 auto}
#page-dashboard .dh-wide{grid-column:1/-1;order:9}
#page-dashboard .dh-upcoming{min-width:0}
#page-dashboard .dh-upcoming .p2l-section-title{margin-bottom:8px}
#page-dashboard .dh-upcoming .p2l-upcoming-empty{background:none;border:0;border-radius:0;padding:8px 2px}
#page-dashboard .dh-upcoming .p2l-upcoming-link{align-self:flex-start;margin-top:8px;padding:4px 0}
@media (min-width:1100px){
  #page-dashboard .dh-fin-grid{grid-template-columns:260px minmax(0,1fr) 340px}
  #page-dashboard .dfin-cards{grid-template-columns:repeat(5,minmax(0,1fr))}
  #page-dashboard .dh-bal-grid{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr) minmax(0,1.2fr)}
  #page-dashboard .dh-bal-grid.dh-nobank{grid-template-columns:minmax(0,1.5fr) minmax(0,1.2fr)}
}
@media (min-width:601px) and (max-width:1099px){
  #page-dashboard .dh-fin-grid{grid-template-columns:260px minmax(0,1fr)}
  #page-dashboard .dh-chart-carpets{grid-column:1/-1}
  #page-dashboard .dfin-cards{grid-template-columns:repeat(6,minmax(0,1fr))}
  #page-dashboard .dfin-cards>.dfin-card{grid-column:span 2}
  #page-dashboard .dfin-cards>.dfin-card:nth-child(n+4){grid-column:span 3}
}
@media (max-width:600px){
  #dh-body{display:flex;flex-direction:column;gap:12px}
  #page-dashboard #dfin-section-month,#page-dashboard .dh-fin-grid{display:contents}
  #page-dashboard #dfin-month-title{order:0;margin-bottom:-4px}
  #page-dashboard .dh-col1{order:1;gap:0}
  #page-dashboard .dh-chart12{order:2}
  #page-dashboard #dfin-section-yoy{order:3;margin-bottom:0}
  #page-dashboard .dh-chart-carpets{order:4}
  #page-dashboard #dfin-section-balances{order:5;margin-bottom:0}
  #page-dashboard .dfin-cards{grid-template-columns:repeat(2,minmax(0,1fr))}
  #page-dashboard .dfin-cards>.dfin-card:nth-child(5){grid-column:1/-1;display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:8px;align-items:baseline}
  #page-dashboard .dfin-cards>.dfin-card:nth-child(5) .dfin-card-value{margin:0}
  #page-dashboard .dfin-cards>.dfin-card:nth-child(5) .dfin-card-sub{grid-column:1/-1}
  #page-dashboard .dh-bank-wrap>.dfin-tile{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:8px}
  #page-dashboard .dh-bank-wrap>.dfin-tile .dfin-tile-head{margin-bottom:0}
  #page-dashboard .dh-bank-wrap>.dfin-tile .dfin-tile-sub{grid-column:1/-1}
}
#dfin-section-employees .p2l-obl-nav-btn{background:transparent;border:none}
/* feat/home-top-row-compact — πάνω ζώνη της Αρχικής: χαιρετισμός σε ΜΙΑ γραμμή + ΜΙΑ σειρά πέντε πεδίων ίδιου ύψους
   [κάρτα ΕΡΓΑΝΗ] [Θυμήσου] [Εργαζόμενοι/Παρουσίες] [Σήμερα/Προγραμματισμένα] [επιλογέας ημέρας]· από κάτω τα πάνελ (Παρουσίες, Σήμερα).
   ΜΟΝΟ όψη. Τα περιτυλίγματα #dfin-section-employees / #dfin-today (ids + gates ρόλων της saas_app_shell.js) είναι display:contents:
   το inline display:none/'' του gate εξακολουθεί να τα κρύβει/δείχνει — πεδίο που ο ρόλος δεν βλέπει, δεν υπάρχει στη σειρά και τα υπόλοιπα γεμίζουν τον χώρο.
   Όλα με πρόθεμα #page-dashboard (η Αρχική του οδηγού μοιράζεται .p2l-dash-*, .erg-card). Κάθε κελί: min-width:0 + nowrap + ellipsis. */
#page-dashboard .p2l-dash-top{display:block;margin-bottom:6px}
#page-dashboard .p2l-dash-greeting{flex-direction:row;flex-wrap:nowrap;align-items:baseline;gap:12px;padding:6px 2px 0;min-width:0}
#page-dashboard .p2l-dash-hello{font-size:20px;flex:0 1 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#page-dashboard .p2l-dash-date{font-size:0.88rem;flex:0 100 auto;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dfin-pillrow{display:flex;flex-wrap:wrap;align-items:stretch;gap:8px 10px;margin-bottom:10px}
#dfin-section-employees,#dfin-today,#dfin-section-employees .p2l-upcoming-header{display:contents}
#page-dashboard .dfin-pillrow>.erg-card,
#page-dashboard .dfin-pillrow>.p2l-memos,
#page-dashboard .dfin-pillrow .emp-toggle,
#page-dashboard .dfin-pillrow .emp-daynav{box-sizing:border-box;min-width:0;max-width:100%;min-height:60px;margin:0;background:#FFF;border:1px solid var(--border);border-radius:12px;color:#0F172A}
#page-dashboard .dfin-pillrow>.erg-card{order:1;flex:1.5 1 0;padding:8px 10px;gap:4px;position:relative}
#page-dashboard .dfin-pillrow>.p2l-memos{order:2;flex:1.5 1 0;padding:8px 10px;gap:4px;max-height:150px}
#emp-toggle{order:3}
#dfin-today-toggle{order:4}
#page-dashboard .dfin-pillrow .emp-daynav{order:5}
#page-dashboard .dfin-pillrow .emp-toggle,
#page-dashboard .dfin-pillrow .emp-daynav{flex:1 1 0}
#page-dashboard .dfin-pillrow .emp-toggle{display:flex;align-items:center;justify-content:flex-start;padding:0 12px;text-align:left;cursor:pointer;font:inherit}
#page-dashboard .dfin-pillrow .emp-toggle .emp-chevron{display:none}
#page-dashboard .hz-lines{display:flex;flex-direction:column;justify-content:center;gap:1px;min-width:0;max-width:100%}
#page-dashboard .hz-l1,#page-dashboard .hz-l2{display:block;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:0.82rem;line-height:1.25}
#page-dashboard .hz-l1{font-weight:700;color:#0F172A}
#page-dashboard .hz-l2{font-weight:500;color:#64748B}
#page-dashboard .hz-sep,#page-dashboard .hz-short{display:none}
#page-dashboard .emp-daynav{display:flex;align-items:center;justify-content:space-between;gap:4px;padding:0 4px}
#page-dashboard .emp-daynav.emp-daynav-other{border-color:#1D6FD8}
#page-dashboard .emp-daynav .p2l-obl-nav-btn{background:transparent;border:none;flex:0 0 auto;padding:6px 8px;font-size:1.1rem;line-height:1}
#page-dashboard .hz-day{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;align-items:center;gap:1px;text-align:center}
#page-dashboard .hz-day-n,#page-dashboard .hz-day-d{display:block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.25}
#page-dashboard .hz-day-n{font-size:0.82rem;font-weight:700;color:#0F172A}
#page-dashboard .hz-day-d{font-size:0.82rem;font-weight:500;color:#64748B}
/* κάρτα ΕΡΓΑΝΗ — συμπαγής: τίτλος + (i) στην ίδια γραμμή (το (i) τοποθετείται πάνω δεξιά, η φούσκα του ανοίγει από πάνω), από κάτω το κουμπί */
#page-dashboard #ergani-card-dash{justify-content:center}
#page-dashboard #ergani-card-dash .erg-header{justify-content:flex-start;min-width:0;padding-right:28px;text-transform:none;letter-spacing:0;font-size:0.82rem;font-weight:700;color:#0F172A}
#page-dashboard #ergani-card-dash .erg-header>span{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#page-dashboard #ergani-card-dash .erg-t-short{display:none}
#page-dashboard #ergani-card-dash .erg-core{gap:6px}
#page-dashboard #ergani-card-dash .erg-status{font-size:0.78rem;line-height:1.3;min-width:0;overflow-wrap:anywhere}
#page-dashboard #ergani-card-dash .erg-status-none{display:none}
#page-dashboard #ergani-card-dash .erg-btn{padding:7px 10px;font-size:0.85rem;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#page-dashboard #ergani-card-dash .erg-log{max-height:60px}
#page-dashboard #ergani-card-dash .erg-push-active{position:absolute;top:6px;right:8px;border-top:0;padding-top:0;margin:0}
#page-dashboard #ergani-card-dash .erg-push-active .erg-qbubble{position:absolute;top:26px;left:auto;right:0;width:min(280px,calc(100vw - 32px));z-index:5;margin-top:0}
/* Θυμήσου — header μικρό, «+ νέο» μικρό· σημειώματα που έστειλα = μία κομμένη γραμμή */
#page-dashboard .p2l-memos-header{flex:0 0 auto;min-width:0}
#page-dashboard .p2l-memos-add{padding:2px 9px;font-size:0.72rem;white-space:nowrap}
#page-dashboard .hz-add-plus{display:none}
#page-dashboard .p2l-memos-list{gap:4px;min-width:0}
#page-dashboard .p2l-memo-item{display:flex;flex-direction:column;gap:4px;min-width:0}
#page-dashboard .p2l-memo-row{display:flex;align-items:baseline;gap:6px;width:100%;min-width:0;padding:1px 0;border:0;background:transparent;font:inherit;font-size:0.82rem;line-height:1.3;text-align:left;cursor:pointer;white-space:nowrap;overflow:hidden}
#page-dashboard .p2l-memo-row-name{flex:0 0 auto;max-width:50%;min-width:0;overflow:hidden;text-overflow:ellipsis;font-weight:700;color:#0F172A}
#page-dashboard .p2l-memo-row-text{flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis;color:#64748B}
#page-dashboard .p2l-memo-more{align-self:flex-start;padding:1px 0;border:0;background:transparent;font:inherit;font-size:0.78rem;font-weight:600;color:#1D6FD8;cursor:pointer;white-space:nowrap}
#page-dashboard .p2l-memo-full[hidden],#page-dashboard .p2l-memo-item[hidden]{display:none}
#page-dashboard #emp-day-list{order:6;flex:0 0 100%}
#page-dashboard .dfin-today-panel{order:7;flex:0 0 100%;box-sizing:border-box;display:flex;flex-wrap:wrap;align-items:center;gap:10px 22px;padding:10px 16px;margin-bottom:10px}
/* κινητό: πλέγμα 2 ίσων στηλών, κενό 8px — [ΕΡΓΑΝΗ | Θυμήσου] [Εργαζόμενοι / Παρουσίες | Σήμερα / Προγρ/μένα] [επιλογέας ημέρας σε όλο το πλάτος] */
@media (max-width:600px){
  #page-dashboard .dfin-pillrow{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  #page-dashboard .dfin-pillrow>*{min-width:0}
  #page-dashboard .dfin-pillrow>.erg-card,
  #page-dashboard .dfin-pillrow>.p2l-memos,
  #page-dashboard .dfin-pillrow .emp-toggle,
  #page-dashboard .dfin-pillrow .emp-daynav{flex:none;min-height:56px}
  #page-dashboard .dfin-pillrow .emp-daynav{grid-column:1/-1}
  #page-dashboard .dfin-pillrow>.p2l-memos{padding:8px;max-height:130px}
  #page-dashboard #emp-day-list,#page-dashboard .dfin-today-panel{grid-column:1/-1}
  #page-dashboard .hz-lines{flex-direction:row;align-items:baseline;gap:0;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  #page-dashboard .hz-l1,#page-dashboard .hz-l2{display:inline;overflow:visible}
  #page-dashboard .hz-l1{font-weight:700}
  #page-dashboard .hz-sep{display:inline;color:#64748B}
  #page-dashboard .hz-full{display:none}
  #page-dashboard .hz-short{display:inline}
  #page-dashboard #ergani-card-dash .erg-t-full{display:none}
  #page-dashboard #ergani-card-dash .erg-t-short{display:inline}
  #page-dashboard .hz-add-full{display:none}
  #page-dashboard .hz-add-plus{display:inline;line-height:1}
  #page-dashboard .p2l-memos-add{width:24px;height:24px;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;font-size:1rem;flex:0 0 auto}
  #page-dashboard #ergani-card-dash .erg-push-active .erg-qbubble{left:0;right:auto}
}
/* feat/driver-home-today-card — Αρχική οδηγού (ΜΟΝΟ κινητό): ΜΙΑ στήλη [ΕΡΓΑΝΗ] [Σήμερα] [Θυμήσου]. body.cfx-driver-home = η ΙΔΙΑ πύλη screen:driver-today
   του πλαϊνού (applyRoleUI). Άλλοι ρόλοι και desktop ανέγγιχτοι· η κάρτα #drv-today-card είναι κρυμμένη εκτός αυτού του συνδυασμού. */
#drv-today-card{display:none}
@media (max-width:600px){
  body.cfx-driver-home #page-dashboard{min-height:100vh;box-sizing:border-box}
  body.cfx-driver-home #page-dashboard .p2l-dash-greeting{flex-direction:column;align-items:flex-start;gap:2px}
  body.cfx-driver-home #page-dashboard .p2l-dash-hello,
  body.cfx-driver-home #page-dashboard .p2l-dash-date{white-space:normal;overflow:visible;text-overflow:clip;max-width:100%}
  body.cfx-driver-home #page-dashboard .dfin-pillrow{grid-template-columns:minmax(0,1fr)}
  body.cfx-driver-home #page-dashboard .dfin-pillrow>.erg-card{order:1}
  body.cfx-driver-home #page-dashboard .dfin-pillrow>#drv-today-card{order:2;display:block;box-sizing:border-box;min-width:0;background:#FFF;border:1px solid var(--border);border-radius:12px;padding:12px 14px;cursor:pointer;color:#0F172A}
  body.cfx-driver-home #page-dashboard .dfin-pillrow>.p2l-memos{order:3;max-height:none;overflow:visible}
  body.cfx-driver-home #page-dashboard #ergani-card-dash .erg-btn{min-height:52px;font-size:18px}
  body.cfx-driver-home #page-dashboard .p2l-memo-row{white-space:normal;overflow:visible;align-items:flex-start}
  body.cfx-driver-home #page-dashboard .p2l-memo-row-text,
  body.cfx-driver-home #page-dashboard .p2l-memo-text{white-space:normal;overflow:visible;text-overflow:clip;display:block;-webkit-line-clamp:unset;max-height:none}
  #drv-today-card .drv-t-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
  #drv-today-card .drv-t-title{font-size:16px;font-weight:600;color:#0F172A}
  #drv-today-card .drv-t-open{font-size:0.82rem;font-weight:600;color:#1D6FD8;white-space:nowrap}
  #drv-today-card .drv-t-empty{margin-top:8px;font-size:0.85rem;color:#64748B}
  #drv-today-card .drv-t-tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:10px}
  #drv-today-card .drv-t-tile{background:#F5F7FA;border-radius:10px;padding:8px 6px;text-align:center;min-width:0}
  #drv-today-card .drv-t-k{display:block;font-size:0.72rem;color:#64748B;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  #drv-today-card .drv-t-v{display:block;font-size:1.1rem;font-weight:700;color:#0F172A}
  #drv-today-card .drv-t-bar{height:6px;border-radius:3px;background:#E2E8F0;margin-top:8px;overflow:hidden}
  #drv-today-card .drv-t-fill{display:block;height:100%;background:#1D6FD8}
  #drv-today-card .drv-t-sub{margin-top:12px;font-size:0.78rem;font-weight:600;color:#64748B}
  #drv-today-card .drv-t-stop{display:flex;align-items:center;gap:8px;padding:8px 0;border-top:1px solid var(--border)}
  #drv-today-card .drv-t-txt{flex:1 1 0;min-width:0}
  #drv-today-card .drv-t-l1,#drv-today-card .drv-t-l2{display:block;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  #drv-today-card .drv-t-l1{font-size:0.88rem;font-weight:700;color:#0F172A}
  #drv-today-card .drv-t-l2{font-size:0.8rem;color:#64748B}
  #drv-today-card .drv-t-chip{flex:0 0 auto;font-size:0.72rem;font-weight:700;border-radius:999px;padding:3px 8px;white-space:nowrap}
  #drv-today-card .drv-t-chip-pickup{background:#DCEFE0;color:#1E7A45}
  #drv-today-card .drv-t-chip-delivery{background:#DCEAFB;color:#185FA5}
  #drv-today-card .drv-t-chip-onsite{background:#ECECEC;color:#5F5E5A}
  #drv-today-card .drv-t-more{margin-top:4px;padding-top:8px;border-top:1px solid var(--border);font-size:0.85rem;font-weight:600;color:#1D6FD8}
}
.p2l-obl-today-btn { font-size:0.82rem; padding:6px 12px; }
.p2l-obl-new-btn { margin-left:6px; }

/* Body split: calendar + selected-day sidebar */
.p2l-obl-body { display:grid; grid-template-columns: 1fr 240px; gap:14px; align-items:start; }
@media (max-width: 768px) { .p2l-obl-body { grid-template-columns: 1fr; } }

.p2l-obl-grid-wrap { background:var(--surface); border:1px solid var(--border); border-radius:14px; padding:10px; }
.p2l-obl-weekdays { display:grid; grid-template-columns: repeat(7, 1fr); gap:4px; margin-bottom:6px; }
.p2l-obl-weekdays > div { text-align:center; font-size:0.7rem; font-weight:700; color:var(--muted); text-transform:uppercase; letter-spacing:0.5px; padding:4px 0; }
.p2l-obl-grid { display:grid; grid-template-columns: repeat(7, 1fr); grid-template-rows: repeat(6, 1fr); gap:4px; }

.p2l-obl-day { background:var(--surface2); border:1px solid transparent; border-radius:8px; min-height:62px; padding:4px 5px; display:flex; flex-direction:column; justify-content:space-between; cursor:pointer; overflow:hidden; position:relative; transition:border-color 0.08s, transform 0.08s; font:inherit; text-align:left; color:inherit; width:100%; }
.p2l-obl-day:hover { border-color:var(--border); }
.p2l-obl-day:focus-visible { outline:2px solid var(--accent); outline-offset:2px; }
.p2l-obl-day-num { font-size:0.82rem; font-weight:700; color:var(--text); line-height:1; }
.p2l-obl-day-muted { opacity:0.35; cursor:default; }
.p2l-obl-day-muted:hover { border-color:transparent; }
.p2l-obl-day-today { background:#E6F1FB; }
body[data-theme="dark"] .p2l-obl-day-today { background:#042C53; }
.p2l-obl-day-today .p2l-obl-day-num { color:#0C447C; }
body[data-theme="dark"] .p2l-obl-day-today .p2l-obl-day-num { color:#BEDAF5; }
.p2l-obl-day-selected { background:#1C1C1C; border-color:#000; }
.p2l-obl-day-selected .p2l-obl-day-num { color:#fff; }
.p2l-obl-day-selected.p2l-obl-day-today { background:#1C1C1C; }

.p2l-obl-chip { border-radius:5px; padding:2px 5px; font-size:0.65rem; font-weight:700; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; line-height:1.3; }
.p2l-obl-chip-red   { background:#FCEBEB; color:#791F1F; }
.p2l-obl-chip-amber { background:#FAEEDA; color:#854F0B; }
.p2l-obl-chip-blue  { background:#E6F1FB; color:#0C447C; }

/* Right sidebar */
.p2l-obl-sidebar { background:var(--surface); border:1px solid var(--border); border-radius:14px; padding:12px 14px; display:flex; flex-direction:column; gap:10px; max-height:520px; overflow-y:auto; }
.p2l-obl-sidebar-header { font-family:Syne; font-weight:700; font-size:0.92rem; color:var(--text); padding-bottom:8px; border-bottom:1px solid var(--border); text-transform:capitalize; }
.p2l-obl-sidebar-list { display:flex; flex-direction:column; gap:8px; }
.p2l-obl-sidebar-item { background:var(--surface2); border:1px solid var(--border); border-radius:10px; padding:10px 12px; cursor:pointer; display:flex; flex-direction:column; gap:4px; font:inherit; text-align:left; color:inherit; width:100%; }
.p2l-obl-sidebar-item:hover { border-color:var(--accent); }
.p2l-obl-sidebar-item:focus-visible { outline:2px solid var(--accent); outline-offset:2px; }
.p2l-obl-sidebar-title { font-weight:700; font-size:0.9rem; color:var(--text); }
.p2l-obl-sidebar-meta { color:var(--muted); font-size:0.76rem; }
.p2l-obl-sidebar-add { background:transparent; border:1px dashed var(--border); border-radius:10px; padding:10px 12px; color:var(--accent); cursor:pointer; font-size:0.82rem; font-weight:600; text-align:center; }
.p2l-obl-sidebar-add:hover { background:rgba(var(--brand-primary-rgb),0.06); }
.p2l-obl-sidebar-empty { color:var(--muted); font-size:0.82rem; text-align:center; padding:12px 4px; }

/* Event modal edit pill */
.p2l-modal-edit-pill { background:rgba(var(--brand-primary-rgb),0.12); color:var(--accent); font-size:0.64rem; font-weight:700; padding:2px 8px; border-radius:999px; margin-left:8px; text-transform:uppercase; letter-spacing:0.4px; vertical-align:middle; }
/* ========== END PHASE 2L PR 2 ========== */

/* ========== PHASE 3 PR 3.1 — ANATHESEIS ========== */
/* fix/anatheseis-visual-smoke: το γενικό `.page{max-width:1400px}` (γραμμή
   ~75, κοινό σε ΟΛΕΣ τις σελίδες) κόβει την 5η στήλη ανεξάρτητα από το
   grid/flex fix παρακάτω — 4×262px+276px+4×10px gap = 1364px χρειάζονται,
   αλλά μέσα στο 1400px page μείον τα nested paddings (.page 20px + root
   1rem + .cfx-anath-page 12px, ανά πλευρά) μένουν μόνο ~1304px. Scoped
   override ΜΟΝΟ σε αυτή τη σελίδα (όχι στο κοινό .page, μηδέν επίδραση σε
   άλλες σελίδες) — αφήνει τη σελίδα να χρησιμοποιήσει ό,τι πλάτος δίνει το
   body.cfx-sidebar-on (viewport - 240px sidebar). */
#page-anatheseis.page { max-width: none; }
#anatheseis-root { font-size: 13px; color: var(--text); }

.cfx-anath-page { display: flex; flex-direction: column; gap: 12px; padding: 12px; }

.cfx-anath-fetch-error { background: #fff4e5; color: #663d00; border: 0.5px solid #f9b97f; border-radius: 8px; padding: 8px 12px; font-size: 12px; }
.cfx-anath-btn-disabled, #anatheseis-root button[disabled] { opacity: 0.4; cursor: not-allowed; pointer-events: none; }

/* fix/anatheseis-visual-smoke: display:grid με fixed-px tracks έπαθε
   "grid blowout" — τα direct children (.cfx-anath-pool-zone κλπ) δεν είχαν
   δικό τους min-width, οπότε το browser's automatic min-size (min-width:auto)
   ανέβαζε το track πλάτος στο min-content του περιεχομένου (~490px αντί 262px).
   Fix: display:flex + ρητό min-width ΣΤΟ ΙΔΙΟ στοιχείο (όχι μόνο flex-basis) —
   το explicit min-width είναι αυτό που σβήνει το auto-blowout floor. */
/* fix 13/09 (δέσμη Α): οι σταθερές 262px/276px ΔΕΝ χωρούσαν πάντα χωρίς
   σύρσιμο ακόμα και σε 1920px (4×262+276+4×10gap=1364px έναντι θεωρητικά
   ~1584px διαθέσιμων — το περιθώριο ήταν πολύ στενό για να αντέξει σε
   πραγματική οθόνη). Λύση: ελαστικό πλάτος (flex-grow ΜΕ βάρος = οι παλιές
   αναλογίες 262/276, flex-basis:0) αντί για σταθερά px — οι 5 στήλες
   ΠΑΝΤΑ γεμίζουν ΑΚΡΙΒΩΣ το διαθέσιμο πλάτος του container, ποτέ δεν το
   ξεπερνούν, άρα ΠΟΤΕ δεν χρειάζεται οριζόντιο σύρσιμο σε πρακτικό desktop
   πλάτος (και μπόνους: πιάνει ΚΑΙ τα συνηθισμένα laptop 1366-1536px, που η
   παλιά σταθερή έκδοση δεν χωρούσε ΠΟΤΕ χωρίς σύρσιμο). min-width:160px
   είναι το πάτωμα ασφαλείας — overflow-x:auto μένει ΜΟΝΟ ως δίχτυ για
   ακραία στενά παράθυρα (κάτω από ~800px), όχι η κύρια συμπεριφορά πια. */
.cfx-anath-5zone { display: flex; gap: 10px; min-height: 460px; align-items: flex-start; justify-content: flex-start; overflow-x: auto; }
.cfx-anath-5zone > * { flex: 262 1 0; min-width: 160px; }
.cfx-anath-5zone > *:last-child { flex: 276 1 0; min-width: 160px; }

.cfx-anath-zone-header { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 4px 4px 8px; flex-wrap: wrap; }
.cfx-anath-zone-title { font-size: 13px; font-weight: 600; color: #17323F; letter-spacing: normal; text-transform: none; }
.cfx-anath-zone-subtitle { font-size: 11.5px; color: #5B7183; font-weight: 400; }

/* PR feat/anatheseis-visual — status strip (3 πλακίδια κάτω από την κεφαλίδα) */
.cfx-anath2-statusbar { display: flex; gap: 10px; }
.cfx-anath2-status-tile { flex: 0 0 auto; width: auto; min-width: 148px; display: flex; align-items: center; gap: 10px; background: #FFFFFF; border: 1px solid #E2E8EF; border-radius: 10px; padding: 0 14px; height: 52px; }
.cfx-anath2-status-icon { width: 30px; height: 30px; border-radius: 8px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.cfx-anath2-status-icon--gray { background: #EEF3F7; color: #5B7183; }
.cfx-anath2-status-icon--blue { background: #EAF2FE; color: #1F6FEB; }
.cfx-anath2-status-icon--green { background: #F0F7E6; color: #7AB828; }
.cfx-anath2-status-text { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.cfx-anath2-status-num { font-size: 19px; font-weight: 700; color: #17323F; line-height: 1.1; }
.cfx-anath2-status-label { font-size: 12px; color: #5B7183; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* Κεφαλίδα στήλης (icon τετράγωνο + τίτλος/υπότιτλος + counter καψούλα) */
.cfx-anath2-col-head { display: flex; align-items: flex-start; gap: 8px; flex: 1; min-width: 0; }
.cfx-anath2-col-icon { width: 32px; height: 32px; border-radius: 8px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.cfx-anath2-col-icon--blue { background: #EAF2FE; color: #1F6FEB; }
.cfx-anath2-col-icon--green { background: #F0F7E6; color: #7AB828; }
.cfx-anath2-col-icon--orange { background: #FDF2E0; color: #E08A1E; }
.cfx-anath2-col-icon--purple { background: #EFEBFA; color: #6B4FBB; }
.cfx-anath2-col-titles { min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.cfx-anath2-col-titles .cfx-anath-zone-title { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cfx-anath2-col-titles .cfx-anath-zone-subtitle { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.cfx-anath-card-actions { display: flex; gap: 4px; flex-shrink: 0; }
.cfx-anath-x, .cfx-anath-more { width: 18px; height: 18px; border-radius: 6px; border: none; background: var(--surface2); color: var(--muted); font-size: 11px; cursor: pointer; display: flex; align-items: center; justify-content: center; padding: 0; line-height: 1; }
.cfx-anath-x:hover, .cfx-anath-more:hover { background: var(--border); color: var(--text); }
.cfx-anath-trash-btn { width: 18px; height: 18px; border-radius: 6px; border: none; background: transparent; color: #E60023; font-size: 12px; cursor: pointer; display: flex; align-items: center; justify-content: center; padding: 0; line-height: 1; }
.cfx-anath-trash-btn:hover { background: rgba(230, 0, 35, 0.1); }

.cfx-anath-status-pill { display: inline-block; border-radius: 999px; padding: 2px 7px; font-size: 11px; font-weight: 500; line-height: 1.5; white-space: nowrap; }

/* PR feat/anatheseis-visual — νέο εσωτερικό περιεχόμενο κάρτας ραντεβού
   (_anathCardInfoHtml), κοινό σε δεξαμενή/σχεδιασμό/«Δες». Ο εξωτερικός
   wrapper (.cfx-anath-planning-item) ΔΕΝ αλλάζει. */
.cfx-anath2-card-row1 { display: flex; flex-direction: column; align-items: stretch; gap: 2px; }
.cfx-anath2-card-name { font-size: 13.5px; font-weight: 600; color: #17323F; line-height: 1.3; flex: 1; min-width: 0; overflow-wrap: anywhere; }
.cfx-anath2-card-time { display: inline-flex; align-items: center; gap: 3px; font-size: 12px; color: #5B7183; white-space: nowrap; flex-shrink: 0; }
.cfx-anath2-card-row2 { display: flex; align-items: center; justify-content: space-between; gap: 6px; margin-top: 3px; }
.cfx-anath2-card-addr { display: inline-flex; align-items: center; gap: 4px; font-size: 12.5px; color: #5B7183; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cfx-anath2-card-addr svg { flex-shrink: 0; }
.cfx-anath2-card-pieces { flex-shrink: 0; background: #F1F5F8; color: #17323F; font-size: 11.5px; font-weight: 600; border-radius: 999px; padding: 2px 8px; white-space: nowrap; }
.cfx-anath2-card-phone { display: inline-flex; align-items: center; gap: 4px; font-size: 12.5px; font-weight: 500; color: #1F6FEB; text-decoration: none; margin-top: 4px; }
.cfx-anath2-card-phone:hover { text-decoration: underline; }
.cfx-anath2-card-tag { display: inline-block; margin-top: 5px; font-size: 11px; font-weight: 600; border-radius: 5px; padding: 2px 8px; }
.cfx-anath2-card-tag--pickup { background: #F0F7E6; color: #4A7414; }
.cfx-anath2-card-tag--delivery { background: #EAF2FE; color: #134FA8; }

.cfx-anath-planning-col { background: #FFFFFF; border: 1px solid #E2E8EF; border-radius: 12px; padding: 10px; display: flex; flex-direction: column; gap: 8px; min-height: 420px; }
.cfx-anath-planning-col-empty { cursor: pointer; background: #FFFFFF; border: 1px solid #E2E8EF; min-height: 260px; }
.cfx-anath-planning-col-empty:hover { background: #F8FAFB; }
.cfx-anath-col-header { display: flex; align-items: flex-start; gap: 6px; }
.cfx-anath-col-name { flex: 1; background: transparent; border: none; font-size: 13px; font-weight: 500; color: var(--text); padding: 2px; min-width: 0; }
.cfx-anath-col-name:disabled { color: var(--text); cursor: default; }
.cfx-anath-col-meta { font-size: 11.5px; color: #5B7183; }
.cfx-anath-col-items { display: flex; flex-direction: column; gap: 6px; flex: 1; min-height: 80px; }
.cfx-anath-drop-hint { padding: 16px 8px; text-align: center; font-size: 12px; color: #8A9AA8; border: 1.5px dashed #CFDBE4; border-radius: 8px; font-style: normal; line-height: 1.5; }
/* PR 3.2a Phase 3.1 — density-aware planning items + drag visual states */
.cfx-anath-planning-item { background: #FFFFFF; border: 1px solid #E2E8EF; border-radius: 8px; padding: 8px 10px; display: flex; flex-direction: column; gap: 1px; box-sizing: border-box; overflow: hidden; }
.cfx-anath-density-compact { padding: 6px 10px; }
.cfx-anath-density-dense { padding: 4px 8px; border-radius: 4px; }
.cfx-anath-item-pending { opacity: 0.6; cursor: not-allowed; }
.cfx-anath-col-counter { display: inline-block; border-radius: 999px; padding: 1px 8px; font-size: 11px; font-weight: 600; }

/* Drag states (Sortable.js classes) */
.cfx-anath-drag-ghost { opacity: 0.4; background: var(--surface2); border: 0.5px dashed var(--muted); }
.cfx-anath-drag-chosen { cursor: grabbing; }

/* PR 3.2a Phase 4.A — popover menu για column header */
.cfx-anath-col-menu-btn { background: transparent; border: none; padding: 2px 6px; font-size: 16px; line-height: 1; color: var(--muted); cursor: pointer; border-radius: 4px; }
.cfx-anath-col-menu-btn:hover { background: var(--surface); color: var(--text); }
.cfx-anath-col-menu-wrapper { position: relative; display: inline-block; }
.cfx-anath-popover { position: absolute; top: 100%; right: 0; background: var(--bg); border: 0.5px solid var(--border); border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.08); padding: 4px; z-index: 1000; min-width: 160px; display: none; }
.cfx-anath-popover.open { display: block; }
.cfx-anath-popover-item { display: block; width: 100%; text-align: left; background: transparent; border: none; padding: 8px 12px; font-size: 13px; color: var(--text); cursor: pointer; border-radius: 4px; }
.cfx-anath-popover-item:hover { background: var(--surface); }
.cfx-anath-popover-item.danger { color: #A32D2D; }
.cfx-anath-popover-item.danger:hover { background: #FCEBEB; }
.cfx-anath-popover-item:disabled { color: var(--muted); cursor: not-allowed; opacity: 0.6; }
.cfx-anath-popover-item:disabled:hover { background: transparent; }

/* PR 3.2f L2 — κουμπί αποστολής και αναδυόμενο επιλογέα οδηγού (πάνω από το κουμπί) */
.cfx-anath-send-btn {
  background: #1D9E75;
  color: white;
  border: none;
  padding: 8px 20px;
  border-radius: 8px;
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
  margin: 10px auto;
  display: block;
}
.cfx-anath-send-btn:hover:not(:disabled) { background: #15805F; }
.cfx-anath-send-btn:disabled { opacity: 0.6; cursor: not-allowed; }

.cfx-anath-send-btn-wrapper {
  position: relative;
  display: flex;
  justify-content: center;
}

.cfx-anath-popover--up {
  top: auto;
  bottom: 100%;
  right: auto;
  left: 50%;
  transform: translateX(-50%) translateY(-8px);
  min-width: 240px;
}

.cfx-anath-send-popover-header {
  padding: 8px 12px;
  font-size: 12px;
  font-weight: 500;
  color: var(--muted);
  border-bottom: 0.5px solid var(--border);
  background: var(--surface2);
}

.cfx-anath-send-popover-row {
  display: flex;
  width: 100%;
  justify-content: space-between;
  align-items: center;
  padding: 10px 12px;
  border: none;
  background: transparent;
  cursor: pointer;
  text-align: left;
  border-bottom: 0.5px solid var(--border);
  font-size: 14px;
  color: var(--text);
}
.cfx-anath-send-popover-row:last-child { border-bottom: none; }
.cfx-anath-send-popover-row:hover:not(.disabled):not(.loading) {
  background: rgba(29, 158, 117, 0.08);
}
.cfx-anath-send-popover-row.disabled {
  opacity: 0.45;
  cursor: not-allowed;
}
.cfx-anath-send-popover-row.loading { cursor: wait; }
.cfx-anath-send-popover-row.loading .cfx-anath-send-popover-spinner { display: inline-block; }

.cfx-anath-send-popover-counter {
  font-size: 12px;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}

.cfx-anath-send-popover-spinner {
  display: none;
  width: 12px;
  height: 12px;
  border: 1.5px solid rgba(29, 158, 117, 0.3);
  border-top-color: #1D9E75;
  border-radius: 50%;
  animation: cfx-anath-spin 0.6s linear infinite;
  margin-right: 6px;
  vertical-align: middle;
}

@keyframes cfx-anath-spin {
  to { transform: rotate(360deg); }
}

.cfx-anath-send-popover-error {
  padding: 8px 12px;
  background: #FCEBEB;
  color: #791F1F;
  font-size: 12px;
  border-bottom: 0.5px solid var(--border);
  border-radius: 0;
}

/* PR 3.2a Phase 4.A — item delete button */
.cfx-anath-item-delete-btn { background: transparent; border: none; color: var(--muted); cursor: pointer; padding: 2px 4px; font-size: 14px; line-height: 1; border-radius: 4px; margin-left: 6px; flex-shrink: 0; }
.cfx-anath-item-delete-btn:hover { background: #FCEBEB; color: #A32D2D; }
.cfx-anath-density-dense .cfx-anath-item-delete-btn { font-size: 11px; padding: 1px 3px; margin-left: 4px; }
.cfx-anath-item-trash-btn { background: transparent; border: none; color: #E60023; cursor: pointer; padding: 2px 4px; font-size: 14px; line-height: 1; border-radius: 4px; margin-left: 4px; flex-shrink: 0; }
.cfx-anath-item-trash-btn:hover { background: rgba(230, 0, 35, 0.1); }
.cfx-anath-density-dense .cfx-anath-item-trash-btn { font-size: 11px; padding: 1px 3px; }

.cfx-anath-active-zone { background: #FFFFFF; border: 1px solid #E2E8EF; border-radius: 12px; padding: 10px; display: flex; flex-direction: column; gap: 10px; }
.cfx-anath-active-cards { display: flex; flex-direction: column; gap: 6px; }
.cfx-anath-active-card { background: #FFFFFF; border: 1px solid #E2E8EF; border-radius: 8px; padding: 8px 10px; display: flex; flex-direction: column; gap: 4px; }
.cfx-anath-active-row { display: flex; align-items: center; gap: 6px; }
/* fix 13/09 (δέσμη Α): το όνομα οδηγού έκοβε με «…» — τώρα σπάει σε 2η
   γραμμή αντί να κόβεται (ζητήθηκε ρητά, αντί για ellipsis). align-items
   στη γραμμή έγινε flex-start (από center) ώστε το εικονίδιο φορτηγού/
   μετρητής να μένουν στην κορυφή, ευθυγραμμισμένα με την 1η γραμμή του
   ονόματος, όχι κάθετα κεντραρισμένα ανάμεσα σε 2 γραμμές. */
.cfx-anath-active-name { font-size: 13px; font-weight: 500; color: #17323F; flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* 29/09: το όνομα οδηγού σε ΜΙΑ γραμμή (ellipsis)· «Χ από Υ στάσεις» σε δική του γραμμή κάτω από το όνομα
   (padding-left = εικονίδιο φορτηγού 16px + κενό 6px), μπάρα προόδου σε όλο το πλάτος.
   29/09 απόφαση χρήστη: κόψιμο με … + πλήρες όνομα στο hover (αντικαθιστά το wrap της 13/09). */
.cfx-anath-progress-row { display: flex; align-items: center; gap: 6px; }
.cfx-anath-active-counter { font-size: 11.5px; font-weight: 500; color: #8A9AA8; white-space: nowrap; padding-left: 22px; }
.cfx-anath-progress { background: #EDF1F4; border-radius: 999px; height: 4px; overflow: hidden; flex: 1; min-width: 40px; }
.cfx-anath-progress-fill { background: #7AB828; height: 100%; border-radius: 999px; transition: width 0.3s ease; }

/* PR feat/anatheseis-visual — «Σε εξέλιξη σήμερα» (πράσινο πλαίσιο) +
   «Ολοκληρωμένα δρομολόγια» (λευκό πλαίσιο, ημερήσιες γραμμές). */
.cfx-anath2-inprogress-panel { background: #F0F7E6; border: 1px solid #D4E7B8; border-radius: 10px; padding: 10px; display: flex; flex-direction: column; gap: 8px; }
.cfx-anath2-inprogress-head { display: flex; align-items: center; justify-content: space-between; gap: 6px; }
.cfx-anath2-inprogress-title { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 600; color: #3B6D11; }
.cfx-anath2-inprogress-count { background: #FFFFFF; color: #3B6D11; border-radius: 999px; padding: 1px 8px; font-size: 11px; font-weight: 600; }
.cfx-anath2-active-truck { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; }
.cfx-anath2-completed-panel { background: #FFFFFF; border: 1px solid #E2E8EF; border-radius: 10px; padding: 10px; display: flex; flex-direction: column; gap: 8px; }
.cfx-anath2-completed-head { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 600; color: #17323F; }
/* CodeRabbit #3 (PR #1382): πλέον δείχνει ΟΛΕΣ τις completed λίστες (όχι
   slice(0,3) πίσω από dead «Πλήρες αρχείο» κουμπί) — scroll αντί για κόψιμο. */
.cfx-anath2-completed-rows { display: flex; flex-direction: column; gap: 6px; max-height: 180px; overflow-y: auto; }
.cfx-anath2-completed-row { display: flex; align-items: center; justify-content: space-between; gap: 6px; padding: 6px 2px; flex-shrink: 0; }
.cfx-anath2-completed-day { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: #17323F; }
.cfx-anath2-completed-count { font-size: 11.5px; color: #8A9AA8; white-space: nowrap; }

.cfx-anath-empty { padding: 16px 12px; text-align: center; font-size: 12px; color: var(--muted); }
.cfx-anath-empty p { margin: 0; line-height: 1.5; }

/* PR feat/anatheseis-visual — richer empty state (icon + τίτλος + εξήγηση + κουμπί) */
.cfx-anath2-empty { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 6px; padding: 22px 12px; }
.cfx-anath2-empty-icon { width: 40px; height: 40px; border-radius: 10px; background: #EEF3F7; color: #8A9AA8; display: flex; align-items: center; justify-content: center; margin-bottom: 4px; }
.cfx-anath2-empty-title { font-size: 13px; font-weight: 600; color: #17323F; }
.cfx-anath2-empty-desc { font-size: 12px; color: #8A9AA8; line-height: 1.5; max-width: 200px; }
.cfx-anath2-empty-btn { margin-top: 6px; background: #FFFFFF; color: #17323F; border: 1px solid #E2E8EF; border-radius: 8px; padding: 7px 14px; font-size: 12px; font-weight: 500; cursor: pointer; }
.cfx-anath2-empty-btn:hover { background: #F3F6F9; }

.cfx-anath-mobile-tabs { display: none; }
.cfx-anath-mobile-content { display: none; }

/* Μενού «Έκδοση παραστατικών»: υπότιτλος πλήρης (desktop) ↔ σύντομος (mobile ≤600px,
   ίδιο breakpoint με .prb-row στην ίδια κάρτα). ΜΟΝΟ εναλλαγή display — μηδέν αλλαγή
   διαστάσεων/padding/font. */
.cfx-iss-sub-short { display: none; }
@media (max-width: 600px) {
  .cfx-iss-sub-full { display: none; }
  .cfx-iss-sub-short { display: inline; }
}

/* Mobile-only move-to button — hidden on desktop (drag-drop is the way there). */
.cfx-anath-move-btn { display: none; }

@media (max-width: 767.98px) {
  .cfx-anath-5zone { display: none; }
  .cfx-anath-mobile-content { display: block; padding: 8px 0; }
  .cfx-anath-page { padding: 8px; }
  .cfx-anath-planning-item { grid-template-columns: 1fr auto; }

  /* Mobile move-to button — full width, 44px tap target, separate line at the bottom of the card. */
  .cfx-anath-move-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    min-height: 44px;
    margin-top: 8px;
    padding: 8px 12px;
    background: var(--brand-secondary, #2563eb);
    color: #fff;
    border: none;
    border-radius: 8px;
    font-family: inherit;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    box-sizing: border-box;
  }
  .cfx-anath-move-btn:active { opacity: 0.85; }
  /* Planning items use grid layout — force button to span full row. */
  .cfx-anath-planning-item .cfx-anath-move-btn { grid-column: 1 / -1; }
}

/* Move-to modal — overlay (only triggered from mobile button, but the modal
   itself stays outside the @media block so it renders correctly when active). */
.cfx-anath-move-modal-backdrop { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.55); z-index: 9999; display: flex; align-items: flex-end; justify-content: center; }
.cfx-anath-move-modal { background: var(--surface); border-radius: 14px 14px 0 0; width: 100%; max-width: 480px; padding: 16px; box-sizing: border-box; box-shadow: 0 -4px 16px rgba(0,0,0,0.15); }
.cfx-anath-move-modal-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; font-family: Syne, inherit; font-weight: 800; font-size: 1rem; color: var(--text); }
.cfx-anath-move-modal-close { background: transparent; border: none; font-size: 18px; cursor: pointer; color: var(--muted); padding: 4px 8px; line-height: 1; }
.cfx-anath-move-modal-list { display: flex; flex-direction: column; gap: 8px; }
.cfx-anath-move-modal-item { display: flex; align-items: center; min-height: 48px; padding: 10px 14px; background: var(--surface); border: 1.5px solid var(--border, #ddd); border-radius: 10px; font-family: inherit; font-size: 14px; font-weight: 600; color: var(--text); cursor: pointer; text-align: left; }
.cfx-anath-move-modal-item:active { background: rgba(37, 99, 235, 0.06); }
.cfx-anath-move-modal-item.cfx-anath-move-modal-item-disabled { opacity: 0.5; cursor: not-allowed; background: rgba(0, 0, 0, 0.04); color: var(--muted); }
.cfx-anath-move-modal-here { margin-left: auto; font-weight: 500; font-size: 12px; color: var(--muted); }
/* ========== END PHASE 3 PR 3.1 ========== */

/* από index.html, μπλοκ 2 */
body.cfx-booting > *:not(#cfx-app-splash) { display: none !important; }
  body:not(.cfx-booting) #cfx-app-splash { display: none; }
  #cfx-app-splash {
    position: fixed; inset: 0;
    display: flex; flex-direction: column;
    align-items: center; justify-content: center;
    background: #FFFFFF; z-index: 99999;
    gap: 20px;
  }
  .cfx-splash-spinner {
    width: 32px; height: 32px;
    border: 3px solid #E6F1FB;
    border-top-color: #185FA5;
    border-radius: 50%;
    animation: cfx-splash-spin 0.8s linear infinite;
  }
  @keyframes cfx-splash-spin { to { transform: rotate(360deg); } }
  .cfx-splash-text {
    font-family: Inter, system-ui, -apple-system, sans-serif;
    font-size: 14px; color: #5F5E5A;
  }

/* από index.html, μπλοκ 4 */
@media (min-width:601px){ #cfx-sb-pwa-settings { display:none !important; } }

/* από index.html, μπλοκ 5 */
@keyframes spin{to{transform:rotate(360deg)}}

/* από index.html, μπλοκ 6 */
.dl-card { display:flex; align-items:stretch; background:var(--surface); border:1px solid var(--border); border-radius:8px; overflow:hidden; cursor:pointer; transition:border-color 0.15s; }
.dl-card:hover { border-color:var(--brand-primary); }
.dl-stripe { width:4px; flex-shrink:0; }
/* Driver list & anatheseis stripes + pills — palette aligned με
   _apTypeMeta badgeBg/paleBg/paleText per purpose (C5 Visual Color
   Refresh 05/05). Palette ίδια με card context blocks και calendar
   events για cross-tab consistency. Pre-existing inconsistencies fixed:
   delivery ήταν μπλε (στο app είναι κόκκινο), onsite/estimation ήταν
   rotated. Class names διατηρούνται για backward compat με
   saas_anatheseis.js + saas_driver_lists.js lookup tables (no
   consolidation σε αυτό το PR). */
.dl-stripe-pickup   { background:#97C459; }
.dl-stripe-delivery { background:#E60023; }
.dl-stripe-estimate { background:#185FA5; }
.dl-stripe-onsite   { background:#FFEB3B; }
.dl-cardbody { flex:1; padding:10px 12px; min-width:0; }
.dl-row { display:flex; align-items:center; gap:8px; }
.dl-row + .dl-row { margin-top:4px; }
.dl-seq { font-size:11px; font-weight:500; color:var(--muted); min-width:14px; }
.dl-name { font-size:14px; font-weight:500; flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.dl-pill { font-size:10px; font-weight:500; padding:2px 7px; border-radius:8px; flex-shrink:0; }
.dl-pill-pickup   { background:#EAF3DE; color:#3B6D11; }
.dl-pill-delivery { background:#FCEBEB; color:#791F1F; }
.dl-pill-estimate { background:#E6F1FB; color:#0C447C; }
.dl-pill-onsite   { background:#FFFBE0; color:#633806; }
.dl-pill-pay { font-size:10px; padding:2px 7px; border-radius:8px; background:rgba(0,0,0,0.05); color:var(--text); white-space:nowrap; }
.dl-addr { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:12px; color:var(--muted); }
.dl-time { font-weight:500; font-size:12px; }
.dl-phone { font-size:12px; color:var(--brand-primary); text-decoration:none; }
.dl-handle { display:flex; align-items:center; justify-content:center; width:28px; color:var(--muted); font-size:14px; cursor:grab; flex-shrink:0; align-self:center; padding-right:6px; touch-action:none; }
.dl-handle:active { cursor:grabbing; }
.dl-list-header { display:flex; align-items:center; justify-content:space-between; padding:10px 12px; background:var(--surface-2); border-radius:6px; margin-bottom:10px; }
.dl-tabs { display:flex; border-bottom:1px solid var(--border); margin-bottom:12px; }
.dl-tab { flex:1; padding:8px 4px; text-align:center; font-size:13px; color:var(--muted); cursor:pointer; border-bottom:2px solid transparent; }
.dl-tab-active { color:var(--text); font-weight:500; border-bottom-color:var(--brand-primary); }
.dl-cardlist { display:flex; flex-direction:column; gap:8px; }
.dl-empty { text-align:center; padding:50px 20px; color:var(--muted); }

/* ── Φάκελος Δρομολογίου (PR-2) — panel «📁 Παραστατικά» ────────────────── */
.dfd-panel { margin-bottom:12px; }
.dfd-toggle-closed { display:flex; align-items:center; gap:8px; width:100%; background:var(--surface); border:1px solid var(--border); border-radius:8px; padding:9px 12px; cursor:pointer; text-align:left; font:inherit; color:var(--text); }
.dfd-closed-txt { flex:1 1 auto; font-size:13px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; min-width:0; }
.dfd-closed-warn { font-size:12px; font-weight:800; color:#7A1C1C; flex-shrink:0; }
.dfd-closed-chev { font-size:.95rem; color:var(--muted); flex-shrink:0; }
.dfd-toggle { display:flex; align-items:center; justify-content:space-between; gap:10px; width:100%; min-height:44px; background:#15314f; color:#fff; border:none; border-radius:10px; padding:10px 13px; cursor:pointer; text-align:left; }
.dfd-head-txt { display:flex; flex-direction:column; gap:2px; min-width:0; }
.dfd-title { font-size:.95rem; font-weight:800; letter-spacing:.2px; display:flex; align-items:center; gap:7px; }
.dfd-sub { font-size:.72rem; font-weight:600; opacity:.8; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.dfd-warn-badge { background:#FFD3D3; color:#7A1C1C; border-radius:7px; padding:1px 7px; font-size:.72rem; font-weight:800; flex-shrink:0; }
.dfd-toggle .dfd-chev { font-size:.9rem; opacity:.85; flex-shrink:0; }
.dfd-body { margin-top:9px; }
.dfd-offline { margin-top:8px; padding:7px 10px; border-radius:8px; background:#FFF8E1; color:#6B4E00; font-size:12px; font-weight:600; }
.dfd-banner { padding:9px 11px; border-radius:9px; background:#FDECEC; border:1px solid #F5B5B5; color:#7A1C1C; font-size:13px; font-weight:700; margin-bottom:10px; }
.dfd-sec-title { font-size:11px; font-weight:800; letter-spacing:.6px; color:var(--muted); margin:12px 0 6px; }
.dfd-stop { border:1px solid var(--border); border-radius:9px; padding:9px 11px; margin-bottom:7px; background:var(--surface); }
.dfd-stop-missing { border-color:#F0A0A0; background:#FEF6F6; }
.dfd-stop-dim { opacity:.55; }
.dfd-stop-head { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:5px; }
.dfd-stop-name { font-size:14px; font-weight:700; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.dfd-tem { font-size:12px; font-weight:700; color:var(--muted); flex-shrink:0; }
.dfd-doc { display:flex; align-items:center; gap:7px; flex-wrap:wrap; margin-top:5px; }
.dfd-chip { font-size:11px; font-weight:700; padding:3px 8px; border-radius:8px; background:#E9EEF5; color:#1B3B5F; }
.dfd-mark { font-size:10px; font-weight:700; padding:3px 7px; border-radius:8px; background:#E7F5E9; color:#1E5B2A; }
.dfd-amt { font-size:12px; font-weight:800; }
.dfd-view-btn { margin-left:auto; background:var(--brand-primary); color:#fff; border:none; border-radius:8px; padding:6px 12px; font-size:12px; font-weight:700; cursor:pointer; }
.dfd-missing { margin-top:5px; font-size:12px; font-weight:700; color:#7A1C1C; }
.dfd-note { font-size:12px; color:var(--muted); padding:4px 0; }
.dfd-link { background:none; border:none; padding:0; color:var(--brand-primary); font-size:12px; font-weight:700; text-decoration:underline; cursor:pointer; }
.dfd-total { display:flex; align-items:center; justify-content:space-between; margin-top:12px; padding-top:10px; border-top:2px solid var(--text); font-size:15px; font-weight:800; }
.dfd-inspect { width:100%; margin-top:12px; background:#1B3B5F; color:#fff; border:none; border-radius:10px; padding:13px 12px; font-size:15px; font-weight:800; letter-spacing:.3px; cursor:pointer; }

/* ── «Στο φορτηγό» (feat/driver-truck-load-screen) ──────────────────────── */
.tld-head { display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; margin-bottom:12px; }
.tld-head-summary { font-family:Syne; font-weight:700; font-size:0.95rem; color:var(--text); }
.tld-clear-all { background:var(--surface2); color:var(--text); border:1px solid var(--border); border-radius:9px; padding:8px 14px; font-size:0.82rem; font-weight:700; cursor:pointer; }
.tld-empty { color:var(--muted); font-size:0.85rem; padding:20px 4px; text-align:center; }
.tld-note { color:var(--muted); font-size:0.85rem; padding:20px 4px; }
.tld-row { display:flex; align-items:center; gap:10px; border:1px solid var(--border); border-radius:10px; padding:11px 13px; margin-bottom:8px; background:var(--surface); }
.tld-row-main { flex:1 1 auto; min-width:0; }
.tld-row-when { font-weight:800; font-size:0.9rem; color:var(--text); }
.tld-row-name { font-size:0.85rem; color:var(--text); margin-top:2px; }
.tld-row-meta { display:flex; align-items:center; gap:6px; margin-top:4px; font-size:0.8rem; color:var(--muted); }
.tld-row-dot { opacity:.6; }
.tld-doc-link { background:none; border:none; padding:0; color:var(--brand-primary); font-weight:700; font-size:0.8rem; cursor:pointer; }
.tld-doc-missing { color:#B4740A; font-weight:700; }
.tld-tick { flex-shrink:0; width:42px; height:42px; border-radius:50%; background:var(--brand-primary); color:#fff; border:none; font-size:1.1rem; font-weight:800; cursor:pointer; }
.tld-tick:disabled { opacity:.5; cursor:default; }

/* Fullscreen «ΠΡΟΒΟΛΗ ΓΙΑ ΕΛΕΓΧΟ» — overlay σε body, μεγάλα γράμματα */
#dfd-inspect-overlay { position:fixed; inset:0; z-index:99999; background:#fff; color:#000; overflow-y:auto; padding:16px; }
#dfd-inspect-overlay .dfi-head { display:flex; align-items:center; justify-content:space-between; gap:10px; border-bottom:3px solid #000; padding-bottom:10px; margin-bottom:14px; }
#dfd-inspect-overlay .dfi-title { font-size:20px; font-weight:900; letter-spacing:.5px; }
#dfd-inspect-overlay .dfi-close { background:#000; color:#fff; border:none; border-radius:8px; width:40px; height:40px; font-size:20px; font-weight:800; cursor:pointer; flex-shrink:0; }
#dfd-inspect-overlay .dfi-row { border-bottom:1px solid #999; padding:11px 0; }
#dfd-inspect-overlay .dfi-row-missing { background:#FFECEC; }
#dfd-inspect-overlay .dfi-name { font-size:19px; font-weight:800; }
#dfd-inspect-overlay .dfi-meta { font-size:14px; font-weight:700; color:#444; margin-top:2px; }
#dfd-inspect-overlay .dfi-docs { font-size:16px; font-weight:700; margin-top:4px; }
#dfd-inspect-overlay .dfi-total { margin-top:18px; padding-top:12px; border-top:3px solid #000; font-size:20px; font-weight:900; text-align:center; }

/* «Ο μήνας μου» (feat/employee-area-my-month): μεγάλη τυπογραφία, οι χρήστες
   δεν είναι όλοι νέοι — ίδιο εύρος μεγέθους/βάρους με #dfd-inspect-overlay
   (μόνο υπάρχον precedent «μεγάλα γράμματα» στο repo), scoped κάτω από τη
   δική του σελίδα (καμία νέα shared utility class — τίποτα άλλο τη χρειάζεται). */
#page-my-month .mm-tile-value { font-size:20px; font-weight:900; }
#page-my-month .mm-day-name { font-size:17px; font-weight:800; }
#page-my-month .mm-declared { font-size:15px; color:var(--muted); margin-top:4px; }
#page-my-month .mm-actual { font-size:17px; font-weight:800; margin-top:4px; }
#page-my-month .mm-protocol-row { font-size:13px; color:var(--muted); margin-top:2px; }
/* feat/ergani-submit-date-display: η ώρα ΠΟΥ ΤΟ ΚΡΑΤΟΣ κατέγραψε τη δήλωση,
   δίπλα σε ΚΑΘΕ εμφάνιση πρωτοκόλλου (Ωράρια + «Ο μήνας μου»). Ουδέτερο γκρι
   (var(--muted), ΟΧΙ νέο χρώμα) και μικρότερο από το πρωτόκολλο (em, σχετικό
   με το μέγεθος του γονέα — δουλεύει είτε μέσα σε .mm-protocol-row είτε μέσα
   σε .ewto-sub-ok/.ewto-owx-protocol χωρίς δεύτερη τιμή ανά περιοχή). */
.ergani-submit-time { color:var(--muted); font-size:0.85em; margin-left:4px; }
/* PR σαφήνειας 17/08: ΤΟ ΙΔΙΟ σταθερό πράσινο του «σταλμένου» με .ewto-sub-ok
   (γρ. 13874/13910) — ΟΧΙ var(--green): εκείνο είναι tenant-βαμμένο μέσω
   --brand-primary (βλ. σχόλιο γρ. 1358). Ίδιες τιμές, νέα scoped κλάση αντί
   για cross-file εξάρτηση σε κλάση άλλης οθόνης (ewto-*). */
#page-my-month .mm-protocol-ok { color:#166534; }
#page-my-month .mm-missing { font-size:14px; font-weight:700; color:#B45309; margin-top:4px; }
#page-my-month .mm-total { font-variant-numeric:tabular-nums; font-weight:800; font-size:17px; color:var(--text); }
#page-my-month .mm-total-missing { color:#B45309; }
#page-my-month .mm-total-progress { font-weight:700; font-size:14px; color:var(--muted); }
#page-my-month .mm-badge {
  display:inline-block; font-size:13px; font-weight:800; padding:4px 10px;
  border-radius:999px; background:var(--surface2); color:var(--muted);
}
#page-my-month .mm-day-card {
  border:1px solid var(--border); border-radius:12px; padding:14px;
  background:var(--surface);
}
/* fix/employee-overwork-view: ΣΥΝΟΨΗ (3 νούμερα), γραμμή σύμβασης, γραμμή
   εβδομάδας — ΙΔΙΟ κόκκινο προειδοποίησης με την οθόνη του ιδιοκτήτη (#1427,
   saas_ergani_card.js) ΜΟΝΟ στην Υπερεργασία/Υπερωρία όταν >0. Νέα scoped
   κλάση με δικό της dark-mode override (το #1427 δεν είχε — pre-existing gap,
   εκτός scope εδώ) ώστε η οθόνη εργαζομένου (dark mode default για πολλούς
   ρόλους) να μη δείξει σκούρο-κόκκινο σε σκούρο φόντο. */
#page-my-month .mm-zones-row {
  display:flex; gap:8px; margin-bottom:14px;
}
#page-my-month .mm-zone {
  flex:1; background:var(--surface2); border-radius:12px; padding:12px 8px;
  text-align:center;
}
#page-my-month .mm-zone-value { font-size:17px; font-weight:900; font-variant-numeric:tabular-nums; }
#page-my-month .mm-zone-label { font-size:0.76rem; color:var(--muted); margin-top:2px; }
#page-my-month .mm-zone-warn { color:#C62828; }
body[data-theme="dark"] #page-my-month .mm-zone-warn { color:#F87171; }
#page-my-month .mm-contract-line {
  font-size:13px; color:var(--muted); margin:-2px 0 14px; line-height:1.4;
}
#page-my-month .mm-week-line {
  font-size:13px; color:var(--muted); font-variant-numeric:tabular-nums;
  padding:2px 4px 10px; line-height:1.5;
}
#page-my-month .mm-week-line strong { color:var(--text); }
#page-my-month .mm-week-incomplete { font-weight:700; color:var(--text); }
#page-my-month .mm-worked { font-size:14px; color:var(--muted); margin-top:2px; }

/* ── Καρτέλες «Ο μήνας μου» / «🏢 Εργοδότης» ────────────────────────────────
   Ουδέτερα χρώματα, ΠΟΤΕ κόκκινο: η καρτέλα Εργοδότης δείχνει προσωπικά
   στοιχεία εργασιακής σχέσης με νομικό βάρος για τον εργαζόμενο — τίποτα εδώ
   δεν είναι σφάλμα ή προειδοποίηση, άρα κανένα χρώμα συναγερμού. */
#page-my-month .mm-tabs {
  display:flex; gap:0; margin-bottom:16px;
  border-bottom:1px solid var(--border);
}
#page-my-month .mm-tab {
  flex:1; background:none; border:none; border-bottom:2px solid transparent;
  font:inherit; font-size:15px; font-weight:700; color:var(--muted);
  padding:10px 4px 9px; cursor:pointer; margin-bottom:-1px;
}
#page-my-month .mm-tab.active { color:var(--text); border-bottom-color:var(--text); }

#page-my-month .mm-emp-name { font-size:20px; font-weight:900; line-height:1.3; }
#page-my-month .mm-emp-activity { font-size:15px; color:var(--muted); margin-top:3px; }
#page-my-month .mm-erow {
  display:flex; align-items:baseline; justify-content:space-between; gap:12px;
  padding:11px 0; border-bottom:0.5px dashed var(--border);
}
#page-my-month .mm-elabel { font-size:15px; color:var(--muted); }
#page-my-month .mm-evalue { font-size:17px; font-weight:800; text-align:right; }
#page-my-month .mm-pulled { font-size:13px; color:var(--muted); text-align:right; margin-top:8px; }
#page-my-month .mm-nopull { font-size:15px; color:var(--muted); line-height:1.55; padding:14px 0 4px; }
#page-my-month .mm-wk-title {
  font-size:15px; font-weight:800; margin:22px 0 2px;
}
#page-my-month .mm-wk-day { font-size:15px; color:var(--muted); }
#page-my-month .mm-wk-hours { font-size:17px; font-weight:800; text-align:right; }
#page-my-month .mm-wk-today .mm-wk-day { color:var(--text); font-weight:800; }

/* v3.1 pickup re-entry: memo picker buttons (Step 1 «Κατάσταση» modal) */
.memo-picker-btn {
  width:100%;
  background:#fff;
  border:0.5px solid #F09595;
  color:#501313;
  border-radius:8px;
  padding:14px 16px;
  font-size:14px;
  text-align:left;
  margin-bottom:8px;
  display:flex;
  align-items:center;
  gap:12px;
  line-height:1.4;
  cursor:pointer;
  font-family:inherit;
}
.memo-picker-btn:hover { background:#FCEBEB; }
.memo-picker-btn:active { transform:scale(0.99); }

/* από index.html, μπλοκ 7 */
/* Phase 2f: νέα card design με chrome dot + role label + name.
   Αντικαθιστά το παλιό .pin-screen-staff-btn με --admin highlight σε όλους
   τους admins (Διαχ. και Διαχ. Β). Τώρα ο highlight είναι ΜΟΝΟ για owner
   (--owner modifier) με info bg + 2px info border για καθαρή οπτική
   διάκριση (ο live theme μπορεί να εμφανίζει info bg κοντά στο white —
   το border εγγυάται ότι ο owner ξεχωρίζει με μια ματιά). */
.pin-screen-col { width: 100%; max-width: 420px; margin: auto; }
.pin-screen-head { display: flex; flex-direction: column; align-items: center; text-align: center; margin-bottom: 24px; }
.pin-screen-mono {
  width: 52px; height: 52px; border-radius: 12px; background: var(--cfx-mark-bg, #378ADD); color: var(--cfx-mark-fg, #fff);
  font-family: Syne; font-size: 20px; font-weight: 600;
  display: flex; align-items: center; justify-content: center; margin-bottom: 12px;
}
.pin-screen-name {
  max-width: 100%; font-family: Syne; font-size: 22px; font-weight: 600; color: #0F172A;
  line-height: 1.25; overflow-wrap: anywhere;
}
.pin-screen-legal { max-width: 100%; font-size: 14px; color: #334155; margin-top: 4px; overflow-wrap: anywhere; }
.pin-screen-sub { font-size: 13px; color: #64748B; margin-top: 4px; }
.pin-screen-label { font-size: 13px; color: #64748B; text-align: left; margin-bottom: 8px; }
.pin-screen-list { display: flex; flex-direction: column; gap: 8px; width: 100%; }
.pin-screen-logout-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 44px;
  margin-top: 16px; padding: 0 12px; background: none; border: none; color: #64748B;
  font-size: 14px; font-family: Syne; cursor: pointer;
}
/* Γραμμή χρήστη: κύκλος + όνομα/ρόλος + (αποτύπωμα) + βελάκι. Ο ιδιοκτήτης (--owner) έχει 2px μπλε
   πλαίσιο χωρίς γέμισμα· το padding μειώνεται 1px ώστε το ύψος να μένει ίδιο. */
.pin-screen-staff-card {
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: 12px;
  width: 100%;
  box-sizing: border-box;
  min-height: 56px;
  padding: 10px 12px;
  background: #FFFFFF;
  border: 1px solid #E2E8F0;
  border-radius: 12px;
  cursor: pointer;
  font-family: Syne;
  color: #0F172A;
  transition: border-color 0.15s, transform 0.1s;
  -webkit-tap-highlight-color: transparent;
  text-align: left;
}
.pin-screen-staff-card:hover { border-color: #94A3B8; }
.pin-screen-staff-card:active { transform: scale(0.98); }
.pin-screen-staff-card--owner,
.pin-screen-staff-card--owner:hover {
  border: 2px solid #1D6FD8;
  padding: 9px 11px;
}
.pin-screen-staff-card__dot {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: var(--border);
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #FFFFFF;
  font-size: 13px;
  font-weight: 600;
}
.pin-screen-staff-card__text { flex: 1; min-width: 0; }
.pin-screen-staff-card__name {
  font-size: 16px;
  font-weight: 600;
  color: #0F172A;
  line-height: 1.25;
  overflow-wrap: anywhere;
}
.pin-screen-staff-card__role {
  font-size: 13px;
  color: #64748B;
  line-height: 1.25;
  margin-top: 2px;
}
.pin-screen-staff-card .pin-screen-staff-card__pk {
  position: static;
  display: flex;
  flex-shrink: 0;
  color: #1D6FD8;
}
.pin-screen-staff-card__chev { display: flex; flex-shrink: 0; color: #94A3B8; }
/* Υπολογιστής ΜΟΝΟ: το inline justify-content:center του #pin-screen έκοβε το πάνω μέρος όταν η
   λίστα είναι ψηλότερη από το παράθυρο· !important γιατί νικά μόνο έτσι το inline. Το margin:auto
   του .pin-screen-col κεντράρει όταν χωράει και ξεκινά από πάνω όταν δεν χωράει. */
@media (min-width: 900px) {
  #pin-screen { justify-content: flex-start !important; }
  .pin-screen-col { max-width: 760px; flex-shrink: 0; }
  .pin-screen-list:has(> :nth-child(5)) {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
  }
  .pin-screen-staff-card { min-width: 0; }
  .pin-screen-staff-card__name,
  .pin-screen-staff-card__role { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .pin-screen-logout-btn { display: flex; margin-left: auto; margin-right: auto; }
}
.pin-modal-btn {
  background: var(--surface2);
  border: 2px solid var(--border);
  border-radius: 12px;
  padding: 16px;
  font-size: 1.4rem;
  font-family: Syne;
  font-weight: 700;
  cursor: pointer;
  color: var(--text);
  transition: background 0.1s, transform 0.1s;
  -webkit-tap-highlight-color: transparent;
  user-select: none;
}
.pin-modal-btn:active { background: var(--accent); color: #fff; transform: scale(0.93); }
.pin-modal-dot {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  border: 2px solid var(--border);
  background: var(--surface2);
}

/* PR-3: WORKSTATION MODE INDICATOR αφαιρέθηκε — ζούσε στο παλιό «Σταθμός»
   nav button (διαγραμμένο). Το «Σάρωση» δεν φέρει nav indicator. */

/* fix/mobile-horizontal-overflow: κινητό ≤768px — τίποτα δεν φαρδαίνει τη σελίδα.
   Η λωρίδα κουμπιών (.nav-actions) κυλάει ΜΟΝΗ της· ☰ και λογότυπο μένουν σταθερά.
   Σε desktop το .nav-actions είναι display:contents (δεν δημιουργεί box). */
.nav-actions { display: contents; }
@media (max-width: 768px) {
  .page { min-width: 0; max-width: 100%; }
  .p2l-dash-top, .p2l-dash-top.has-ergani, .drv-top, .drv-top.has-ergani, .p2l-obl-body {
    grid-template-columns: minmax(0, 1fr);
  }
  .p2l-dash-top > *, .drv-top > *, .p2l-obl-body > * { min-width: 0; }
  .dfin-cards { grid-template-columns: repeat(auto-fit, minmax(min(140px, 100%), 1fr)); }
  .dfin-tiles { grid-template-columns: repeat(auto-fit, minmax(min(160px, 100%), 1fr)); }
  .dfin-card, .dfin-tile { min-width: 0; overflow-wrap: anywhere; }
}
@media (max-width: 600px) {
  .money-grid, .form-row { grid-template-columns: minmax(0, 1fr); }
  .money-grid > *, .form-row > * { min-width: 0; }
}

/* από index.html, μπλοκ 8 */
#page-storage .pg-title-block { margin-bottom: 16px; }
    #page-storage .pg-title { font-family: Syne; font-weight: 800; font-size: 1.4rem; margin-bottom: 4px; }
    #page-storage .pg-subtitle { font-size: 0.85rem; color: var(--muted); }

    #page-storage .alert-banner {
      background: #FAEEDA; border: 1px solid #EF9F27;
      border-radius: 10px; padding: 12px 16px; margin-bottom: 16px;
      display: flex; gap: 12px; align-items: flex-start;
    }
    #page-storage .alert-icon { font-size: 18px; color: #854F0B; flex-shrink: 0; }
    #page-storage .alert-title { font-weight: 700; color: #854F0B; margin-bottom: 2px; font-size: 0.92rem; }
    #page-storage .alert-msg { font-size: 0.85rem; color: #633806; line-height: 1.5; }

    #page-storage .progress-card {
      background: var(--surface); border: 1px solid var(--border);
      border-radius: 12px; padding: 18px; margin-bottom: 16px;
    }
    #page-storage .progress-header {
      display: flex; justify-content: space-between; align-items: baseline;
      margin-bottom: 10px;
    }
    #page-storage .progress-label { font-size: 0.85rem; color: var(--muted); }
    #page-storage .progress-numbers { font-size: 0.92rem; }
    #page-storage .progress-numbers .used { font-weight: 700; }
    #page-storage .progress-numbers .quota { color: var(--muted); margin-left: 6px; }
    #page-storage .progress-bar-bg {
      background: var(--surface2); border-radius: 999px; height: 10px;
      overflow: hidden;
    }
    #page-storage .progress-bar-fill {
      background: var(--accent); height: 100%; transition: width 0.3s;
    }
    #page-storage .progress-bar-fill.warning { background: #EF9F27; }
    #page-storage .progress-bar-fill.danger { background: #E24B4A; }
    #page-storage .progress-foot {
      display: flex; justify-content: space-between; margin-top: 8px;
      font-size: 0.78rem; color: var(--muted);
    }

    #page-storage .metric-grid {
      display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px;
      margin-bottom: 20px;
    }
    #page-storage .metric-card {
      background: var(--surface2); border-radius: 10px; padding: 14px;
    }
    #page-storage .metric-label { font-size: 0.78rem; color: var(--muted); margin-bottom: 4px; }
    #page-storage .metric-value { font-size: 1.4rem; font-weight: 700; }
    #page-storage .metric-foot { font-size: 0.72rem; color: var(--muted); margin-top: 2px; }

    #page-storage .controls-row {
      display: flex; justify-content: space-between; align-items: center;
      gap: 12px; margin-bottom: 12px; flex-wrap: wrap;
    }
    #page-storage .filter-chips { display: flex; gap: 6px; }
    #page-storage .filter-chip {
      background: transparent; border: 1px solid var(--border);
      padding: 6px 14px; border-radius: 8px; font-size: 0.85rem;
      cursor: pointer; transition: all 0.15s;
    }
    #page-storage .filter-chip:hover { background: var(--surface2); }
    #page-storage .filter-chip.active {
      background: var(--text); color: var(--surface); border-color: var(--text);
    }
    #page-storage .sort-block { display: flex; gap: 8px; align-items: center; }
    #page-storage .sort-block label { font-size: 0.85rem; color: var(--muted); }
    #page-storage .sort-block select {
      font-size: 0.85rem; padding: 5px 8px;
      border: 1px solid var(--border); border-radius: 8px;
      background: var(--surface);
    }

    #page-storage .bulk-banner {
      background: var(--accent-50); border: 1px solid var(--accent);
      border-radius: 10px; padding: 10px 14px; margin-bottom: 12px;
      display: flex; justify-content: space-between; align-items: center;
    }
    #page-storage .bulk-info { font-size: 0.92rem; color: var(--accent-900); }
    #page-storage .bulk-info b { font-weight: 700; }
    #page-storage .bulk-delete-btn {
      background: #E24B4A; color: white; border: none;
      padding: 6px 14px; border-radius: 8px; font-size: 0.85rem;
      font-weight: 700; cursor: pointer;
    }
    #page-storage .bulk-delete-btn:hover { background: #C13837; }

    #page-storage .photos-table {
      background: var(--surface); border: 1px solid var(--border);
      border-radius: 12px; overflow: hidden;
    }
    #page-storage .photos-thead {
      display: grid;
      grid-template-columns: 24px 60px 1fr 90px 90px 70px 28px;
      gap: 10px; padding: 10px 14px;
      background: var(--surface2); border-bottom: 1px solid var(--border);
      font-size: 0.72rem; color: var(--muted); font-weight: 700;
      align-items: center; text-transform: uppercase; letter-spacing: 0.03em;
    }
    #page-storage .photo-row {
      display: grid;
      grid-template-columns: 24px 60px 1fr 90px 90px 70px 28px;
      gap: 10px; padding: 10px 14px;
      border-bottom: 1px solid var(--border); align-items: center;
    }
    #page-storage .photo-row:last-child { border-bottom: none; }
    #page-storage .photo-row.locked { opacity: 0.55; }
    #page-storage .lock-icon { font-size: 14px; text-align: center; color: var(--muted); }
    #page-storage .photo-thumb {
      width: 60px; height: 60px; background: var(--surface2);
      border-radius: 8px; display: flex; align-items: center;
      justify-content: center; font-size: 0.78rem; color: var(--muted);
      object-fit: cover;
    }
    #page-storage .photo-customer { font-size: 0.92rem; font-weight: 700; }
    #page-storage .photo-meta { font-size: 0.82rem; color: var(--muted); margin-top: 2px; }
    #page-storage .photo-meta .active-mark { color: #BA7517; font-weight: 700; }
    #page-storage .photo-date, #page-storage .photo-size {
      font-size: 0.82rem; color: var(--muted);
    }
    #page-storage .photo-size { text-align: right; }
    #page-storage .photo-delete-btn {
      background: transparent; border: none; cursor: pointer;
      color: var(--muted); padding: 4px; font-size: 1.1rem;
    }
    #page-storage .photo-delete-btn:hover { color: #E24B4A; }

    #page-storage .source-badge {
      padding: 3px 8px; border-radius: 8px; font-size: 0.72rem;
      font-weight: 700; display: inline-block;
    }
    #page-storage .source-badge.admin {
      background: #E6F1FB; color: #0C447C;
    }
    #page-storage .source-badge.driver {
      background: #E1F5EE; color: #085041;
    }
    #page-storage .source-badge.legacy {
      background: var(--surface2); color: var(--muted);
    }

    #page-storage .load-more-row {
      padding: 14px; text-align: center;
    }
    #page-storage .load-more-btn {
      background: transparent; border: 1px solid var(--border);
      padding: 8px 18px; border-radius: 8px; font-size: 0.85rem;
      cursor: pointer; transition: all 0.15s;
    }
    #page-storage .load-more-btn:hover { background: var(--surface2); }

    #page-storage .empty-state {
      padding: 60px 20px; text-align: center; color: var(--muted);
    }
    #page-storage .empty-icon { font-size: 2.5rem; margin-bottom: 12px; }
    #page-storage .empty-msg { font-size: 0.92rem; }

/* από index.html, μπλοκ 9 */
.settings-cat-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; margin-bottom:16px }
      @media (min-width:600px) { .settings-cat-grid { grid-template-columns:1fr 1fr 1fr } }
      .settings-cat-card { background:var(--surface); border:1px solid var(--border); border-radius:14px; padding:18px 16px; cursor:pointer; text-align:center; transition:background 0.15s }
      .settings-cat-card:hover { background:var(--surface2) }
      .settings-cat-card:focus-visible { outline:2px solid var(--accent); outline-offset:2px }
      .settings-cat-card.disabled { opacity:0.45; cursor:not-allowed }
      .settings-cat-card.disabled:hover { background:var(--surface) }
      .settings-cat-card .scc-icon { font-size:1.6rem; margin-bottom:6px }
      .settings-cat-card .scc-label { font-family:Syne; font-weight:700; font-size:0.88rem; color:var(--text) }
      /* ΥΠΟΤΙΤΛΟΣ ΠΛΑΚΙΔΙΟΥ — ΠΡΩΤΗ ΧΡΗΣΗ ΣΤΗΝ ΕΦΑΡΜΟΓΗ (PR ExProan/UI).
         Κανένα άλλο πλακίδιο σε κανένα hub δεν είχε δεύτερη γραμμή μέχρι τώρα.
         ΔΕΝ επαναχρησιμοποιείται η .scc-badge: εκείνη είναι χάπι κατάστασης
         («σύντομα»), όχι περιγραφή. Σκόπιμα ΣΒΗΣΤΟΣ και μικρότερος από την
         .scc-label ώστε η ετικέτα να μένει το πράγμα που διαβάζεται πρώτο —
         ο υπότιτλος απαντά μόνο στο «τι είναι αυτό;» όποιου δεν το ξέρει. */
      .settings-cat-card .scc-sub { font-size:0.68rem; font-weight:500; color:var(--muted); margin-top:2px; line-height:1.35 }
      .settings-cat-card .scc-badge { display:inline-block; font-size:0.65rem; background:var(--muted); color:#fff; border-radius:8px; padding:1px 8px; margin-top:6px; font-weight:600 }
      /* ΑΡΙΘΜΗΤΙΚΟ ΣΗΜΑ — ΠΡΩΤΗ ΧΡΗΣΗ ΣΕ ΠΛΑΚΙΔΙΟ hub (feat/ergani-orphan-punch-
         tracking). ΞΕΧΩΡΙΣΤΗ κλάση από τη .scc-badge σκόπιμα: εκείνη είναι χάπι
         ΚΑΤΑΣΤΑΣΗΣ («Σύντομα»), ουδέτερου χρώματος, και μπαίνει ΚΑΤΩ από τον
         υπότιτλο. Αυτό είναι ΜΕΤΡΗΤΗΣ δίπλα στην ετικέτα, και εμφανίζεται ΜΟΝΟ
         όταν κάποιος έχει ξεπεράσει την ανοχή της εγκυκλίου στον ΤΡΕΧΟΝΤΑ μήνα
         — αλλιώς λείπει εντελώς (display:none), ώστε το πλακίδιο να μη γίνει
         μόνιμη κόκκινη κουκκίδα που μαθαίνεις να αγνοείς. */
      .settings-cat-card .scc-count { display:inline-block; min-width:18px; font-size:0.68rem; background:var(--red); color:#fff; border-radius:9px; padding:0 6px; margin-left:5px; font-weight:700; vertical-align:middle }

/* από index.html, μπλοκ 10 */
.settings-group { border-radius:14px; overflow:hidden; margin-bottom:10px; border:1px solid var(--border); }
    .legacy-hidden { display: none; }
    .settings-group-header {
      display:flex; align-items:center; justify-content:space-between;
      padding:15px 18px; cursor:pointer; user-select:none;
      background:var(--surface2); transition:background 0.15s;
    }
    .settings-group-header:hover { background:var(--surface); }
    .settings-group-header .sg-title { font-family:Syne; font-weight:800; font-size:0.97rem; display:flex; align-items:center; gap:10px; }
    .settings-group-header .sg-arrow { font-size:0.8rem; color:var(--muted); transition:transform 0.2s; }
    .settings-group-header.open .sg-arrow { transform:rotate(90deg); }
    .settings-group-body { display:none; padding:14px; background:var(--surface); border-top:1px solid var(--border); }
    .settings-group-body.open { display:block; }
    .settings-group-body .card { margin-top:12px; }
    .settings-group-body .card:first-child { margin-top:0; }

/* από index.html, μπλοκ 11 */
.admin-card {
      background: var(--surface);
      border: 2px solid var(--border);
      border-radius: 14px;
      padding: 16px;
    }
    .admin-card--owner {
      background: rgba(55, 138, 221, 0.08);
      border-color: rgba(55, 138, 221, 0.35);
    }
    .admin-card--empty {
      border-style: dashed;
      padding: 24px 16px;
      text-align: center;
    }
    .admin-card-header { display: flex; align-items: center; gap: 12px; }
    .admin-avatar {
      width: 42px; height: 42px;
      border-radius: 50%;
      display: flex; align-items: center; justify-content: center;
      font-family: Syne; font-weight: 800; font-size: 1rem;
      flex-shrink: 0;
      letter-spacing: 0.02em;
    }
    .admin-avatar--owner { background: rgba(55, 138, 221, 0.18); color: #378ADD; }
    .admin-avatar--b     { background: var(--surface2); color: var(--text); border: 1px solid var(--border); }
    .admin-card-identity { flex: 1; min-width: 0; }
    .admin-name {
      font-family: Syne; font-weight: 700; font-size: 0.95rem;
      color: var(--text);
      word-break: break-word;
    }
    .admin-badge {
      display: inline-block;
      font-size: 0.7rem; font-weight: 700;
      padding: 2px 9px;
      border-radius: 12px;
      margin-left: 8px;
      vertical-align: middle;
      letter-spacing: 0.02em;
      white-space: nowrap;
    }
    .admin-badge--owner { background: rgba(55, 138, 221, 0.15); color: #378ADD; }
    .admin-badge--b     { background: var(--surface2); color: var(--muted); border: 1px solid var(--border); }
    .admin-subtitle { font-size: 0.78rem; color: var(--muted); margin-top: 4px; }
    .admin-notice {
      background: var(--surface2);
      border-radius: 10px;
      padding: 10px 12px;
      font-size: 0.76rem;
      color: var(--muted);
      margin-top: 12px;
      line-height: 1.5;
    }
    .admin-toggle-block {
      background: var(--surface2);
      border-radius: 10px;
      padding: 12px 14px;
      margin-top: 14px;
    }
    .admin-toggle-row {
      display: flex; align-items: center; justify-content: space-between; gap: 12px;
    }
    .admin-toggle-label { font-family: Syne; font-weight: 700; font-size: 0.88rem; color: var(--text); }
    .admin-toggle-desc {
      font-size: 0.72rem; color: var(--muted);
      margin-top: 8px; line-height: 1.5;
    }
    /* iOS-style switch */
    .admin-switch { position: relative; width: 44px; height: 26px; flex-shrink: 0; display: inline-block; }
    .admin-switch input { opacity: 0; width: 0; height: 0; position: absolute; }
    .admin-switch-slider {
      position: absolute; inset: 0;
      background: var(--border);
      border-radius: 26px;
      transition: background 0.15s;
      cursor: pointer;
    }
    .admin-switch-slider::before {
      content: ''; position: absolute; left: 3px; top: 3px;
      width: 20px; height: 20px;
      background: #fff; border-radius: 50%;
      transition: transform 0.15s;
      box-shadow: 0 1px 2px rgba(0,0,0,0.2);
    }
    .admin-switch input:checked + .admin-switch-slider { background: #378ADD; }
    .admin-switch input:checked + .admin-switch-slider::before { transform: translateX(18px); }
    .admin-switch input:disabled + .admin-switch-slider { opacity: 0.5; cursor: wait; }
    /* Danger button (full-width) */
    .admin-danger-btn {
      display: block; width: 100%;
      margin-top: 14px;
      background: rgba(192, 57, 107, 0.1);
      border: 1.5px solid rgba(192, 57, 107, 0.35);
      color: var(--red);
      border-radius: 10px;
      padding: 11px;
      font-family: Syne; font-weight: 700; font-size: 0.88rem;
      cursor: pointer;
    }
    .admin-danger-btn:hover { background: rgba(192, 57, 107, 0.15); }
    .admin-danger-btn:disabled { opacity: 0.5; cursor: wait; }
    /* Modal form helpers */
    .admin-modal-label {
      font-family: Syne; font-weight: 700; font-size: 0.82rem;
      color: var(--text); display: block; margin-bottom: 5px;
    }
    .admin-modal-input {
      width: 100%; box-sizing: border-box;
      background: var(--surface2);
      border: 1.5px solid var(--border);
      border-radius: 9px;
      padding: 9px 12px;
      color: var(--text);
      font-size: 0.9rem;
      outline: none;
    }
    .admin-modal-input:focus { border-color: var(--accent); }
    .admin-modal-input--error { border-color: var(--red); }
    .admin-modal-fielderr {
      color: var(--red); font-size: 0.72rem; margin-top: 4px; min-height: 14px;
    }

/* από index.html, μπλοκ 12 */
.admins-tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--border); margin-bottom: 14px; }
    .admins-tab {
      background: none; border: none; color: var(--muted);
      font-family: Syne; font-weight: 700; font-size: 0.88rem;
      padding: 10px 14px; cursor: pointer;
      border-bottom: 2px solid transparent; margin-bottom: -1px;
      transition: color 0.12s, border-color 0.12s;
    }
    .admins-tab:hover { color: var(--text); }
    .admins-tab.is-active { color: var(--accent); border-bottom-color: var(--accent); }
    .admins-history-filters {
      display: flex; gap: 10px; flex-wrap: wrap;
      justify-content: space-between; align-items: center;
      margin-bottom: 14px;
    }
    .admins-history-chips { display: flex; gap: 6px; flex-wrap: wrap; }
    .admins-chip {
      background: var(--surface2); border: 1px solid var(--border);
      color: var(--muted); border-radius: 999px;
      padding: 5px 12px; font-size: 0.76rem; font-weight: 600;
      cursor: pointer; font-family: inherit;
    }
    .admins-chip.is-active {
      background: rgba(55, 138, 221, 0.12);
      border-color: #378ADD; color: #378ADD;
    }
    .admins-timeframe-select {
      background: var(--surface2); border: 1px solid var(--border);
      color: var(--text); border-radius: 8px;
      padding: 6px 10px; font-size: 0.78rem; font-weight: 600;
      cursor: pointer; outline: none; font-family: inherit;
    }
    .admins-history-day-header {
      font-size: 0.76rem; font-weight: 700; color: var(--muted);
      text-transform: none; letter-spacing: 0.02em;
      padding: 14px 4px 8px; border-bottom: 1px solid var(--border);
      margin-bottom: 2px;
    }
    .admins-history-row {
      display: flex; gap: 10px; align-items: flex-start;
      padding: 10px 4px;
      border-bottom: 1px solid var(--border);
      cursor: pointer;
    }
    .admins-history-row:hover { background: rgba(55, 138, 221, 0.04); }
    .admins-history-row.is-expanded { background: rgba(55, 138, 221, 0.06); }
    .admins-history-time {
      width: 44px; flex-shrink: 0;
      font-size: 0.72rem; color: var(--muted);
      font-variant-numeric: tabular-nums; padding-top: 2px;
    }
    .admins-history-content { flex: 1; min-width: 0; }
    .admins-history-title {
      font-size: 0.85rem; font-weight: 600; color: var(--text);
      display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
    }
    .admins-history-pill {
      background: #FAEEDA; color: #633806;
      font-size: 0.65rem; font-weight: 700; padding: 2px 8px;
      border-radius: 999px; letter-spacing: 0.02em;
    }
    .admins-history-detail {
      font-size: 0.78rem; color: var(--muted); margin-top: 3px;
      line-height: 1.4;
    }
    .admins-history-actor {
      display: flex; align-items: center; gap: 6px; flex-shrink: 0;
      padding-top: 1px;
    }
    .admins-history-avatar {
      width: 28px; height: 28px; border-radius: 50%;
      display: flex; align-items: center; justify-content: center;
      font-family: Syne; font-weight: 700; font-size: 0.72rem;
      flex-shrink: 0; letter-spacing: 0.02em;
    }
    .admins-history-avatar--owner { background: #E6F1FB; color: #0C447C; }
    .admins-history-avatar--b     { background: #E1F5EE; color: #04342C; }
    .admins-history-actor-name {
      font-size: 0.72rem; color: var(--muted); font-weight: 600;
      max-width: 110px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    }
    .admins-history-expanded {
      padding: 10px 14px; background: var(--surface2);
      border-radius: 8px; margin: 6px 4px 10px 54px;
      font-size: 0.76rem; color: var(--text);
      display: grid; grid-template-columns: 100px 1fr; gap: 4px 12px;
      line-height: 1.5;
    }
    .admins-history-expanded .lbl { color: var(--muted); font-weight: 600; }
    .admins-load-more-btn {
      background: var(--surface2); border: 1px solid var(--border);
      color: var(--text); border-radius: 8px;
      padding: 8px 16px; font-size: 0.82rem; font-weight: 600;
      cursor: pointer; font-family: inherit;
    }
    .admins-load-more-btn:hover { background: var(--surface); }
    .admins-load-more-btn:disabled { opacity: 0.5; cursor: wait; }
    @media (max-width: 480px) {
      .admins-history-actor-name { display: none; }
      .admins-history-expanded { grid-template-columns: 80px 1fr; margin-left: 0; }
    }

/* από index.html, μπλοκ 13 */
#modal-send-message{background:rgba(15,23,42,0.55);align-items:flex-end;justify-content:center;padding:0}
#modal-send-message [hidden]{display:none!important}
#modal-send-message .sm-sheet{background:#FFF;color:#0F172A;width:100%;max-width:620px;max-height:92vh;overflow-y:auto;border-radius:12px 12px 0 0;padding:8px 18px 18px;box-sizing:border-box}
#modal-send-message .sm-grip{width:40px;height:4px;border-radius:999px;background:#E2E8F0;margin:4px auto 12px}
#modal-send-message .sm-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}
#modal-send-message .sm-title{font-size:1.1rem;font-weight:600;line-height:1.3}
#modal-send-message .sm-sub{font-size:0.85rem;color:#64748B;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#modal-send-message .sm-x{background:transparent;border:none;color:#64748B;font-size:1.6rem;line-height:1;width:36px;height:36px;cursor:pointer;flex-shrink:0}
#modal-send-message .sm-box{border:1px solid #E2E8F0;border-radius:10px;padding:14px;margin-top:14px;background:#FFF}
#modal-send-message .sm-chip{display:inline-block;padding:3px 10px;border-radius:999px;font-size:0.75rem;font-weight:600}
#modal-send-message .sm-chip-warn{background:#FFF4E5;color:#B45309;border:1px solid #FED7AA}
#modal-send-message .sm-chip-ok{background:#DCFCE7;color:#15803D;border:1px solid #BBF7D0}
#modal-send-message .sm-bignum{font-size:1.8rem;font-weight:700;letter-spacing:0.06em;margin:8px 0 2px;font-variant-numeric:tabular-nums}
#modal-send-message .sm-num{font-size:1.05rem;font-weight:600;font-variant-numeric:tabular-nums}
#modal-send-message .sm-q{font-size:0.95rem;margin-bottom:12px}
#modal-send-message .sm-row{display:flex;gap:8px}
#modal-send-message .sm-row .sm-btn{flex:1}
#modal-send-message .sm-btn{padding:10px 14px;min-height:42px;border-radius:10px;border:1px solid #E2E8F0;background:#FFF;color:#0F172A;font-size:0.9rem;font-weight:600;cursor:pointer}
#modal-send-message .sm-btn-blue{background:#1D6FD8;border-color:#1D6FD8;color:#FFF}
#modal-send-message .sm-btn-green{background:#16A34A;border-color:#16A34A;color:#FFF}
#modal-send-message .sm-btn[disabled]{background:#E2E8F0;border-color:#E2E8F0;color:#94A3B8;cursor:not-allowed}
#modal-send-message .sm-label{font-size:0.72rem;font-weight:600;color:#64748B;text-transform:uppercase;letter-spacing:0.06em;margin-bottom:6px}
#modal-send-message .sm-sec{margin-top:14px}
#modal-send-message .sm-tabs{display:flex;gap:22px;border-bottom:1px solid #E2E8F0}
#modal-send-message .sm-tab{background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;padding:8px 2px;font-size:0.95rem;font-weight:600;color:#64748B;cursor:pointer}
#modal-send-message .sm-tab-on{color:#1D6FD8;border-bottom-color:#1D6FD8}
#modal-send-message .sm-note{font-size:0.8rem;color:#64748B;margin-top:8px;line-height:1.4}
#modal-send-message .sm-err{color:#DC2626;font-size:0.8rem;margin-top:6px}
#modal-send-message .sm-old{color:#64748B;font-size:0.85rem}
#modal-send-message .sm-input{width:100%;box-sizing:border-box;padding:10px 12px;border:1px solid #E2E8F0;border-radius:10px;font-size:1.05rem;color:#0F172A;background:#FFF;margin-top:4px}
#modal-send-message .sm-input:focus{outline:none;border-color:#1D6FD8}
#modal-send-message .sm-opt{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;margin-top:8px;border:1px solid #E2E8F0;border-radius:10px;cursor:pointer}
#modal-send-message .sm-opt-off{opacity:0.6;cursor:not-allowed}
#modal-send-message .sm-opt b{display:block;font-size:0.9rem;font-weight:600}
#modal-send-message .sm-opt small{display:block;color:#64748B;font-size:0.78rem;margin-top:2px}
#modal-send-message .sm-phone-line{display:flex;align-items:center;gap:10px}
#modal-send-message .sm-link{margin-left:auto;background:none;border:none;color:#1D6FD8;font-size:0.9rem;font-weight:600;cursor:pointer;padding:4px}
#modal-send-message .sm-chips{display:flex;flex-wrap:wrap;gap:6px}
#modal-send-message .sm-pill{padding:6px 12px;border-radius:999px;border:1px solid #E2E8F0;background:#FFF;color:#0F172A;font-size:0.85rem;font-weight:600;cursor:pointer}
#modal-send-message .sm-pill-on{background:#1D6FD8;border-color:#1D6FD8;color:#FFF}
#modal-send-message .sm-tpl-fixed{border:1px solid #BBF7D0;background:#F0FDF4;color:#15803D;border-radius:10px;padding:10px 14px;font-size:0.9rem;font-weight:600}
#modal-send-message .sm-prev{border:1px solid #E2E8F0;border-radius:10px;padding:12px;color:#64748B;font-size:0.88rem;line-height:1.5;white-space:pre-wrap;min-height:80px;background:#FFF}
#modal-send-message .sm-foot{display:flex;gap:8px;margin-top:16px;padding-top:14px;border-top:1px solid #E2E8F0}
#modal-send-message .sm-foot .sm-btn{flex:1}
@media (min-width:640px){
  #modal-send-message{align-items:center;padding:16px}
  #modal-send-message .sm-sheet{border-radius:12px;padding-top:18px}
  #modal-send-message .sm-grip{display:none}
  #modal-send-message .sm-foot{justify-content:flex-end}
  #modal-send-message .sm-foot .sm-btn{flex:0 0 auto;min-width:140px}
}

/* από index.html, μπλοκ 14 */
/* ΒΗΜΑ 6: «Τι παραδίδω» driver — κλειστό compact κουμπί + BIG-TEXT ανοιγμένη λίστα */
    .tipd-btn{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;margin-top:8px;background:#15314f;color:#fff;border:none;border-radius:10px;padding:10px 12px;font-size:1rem;font-weight:800;cursor:pointer;letter-spacing:.2px}
    .tipd-btn .tipd-chev{margin-left:3px;font-size:.85rem;opacity:.85}
    .tipd-open{margin-top:9px}
    .tipd-grp{margin-bottom:11px}
    .tipd-gh{font-size:1.02rem;font-weight:900;color:#27500a;margin-bottom:7px}
    .tipd-gh .tipd-cnt{color:var(--muted);font-weight:700;font-size:.92rem}
    .tipd-item{display:flex;align-items:center;gap:11px;padding:12px 11px;border-radius:11px;background:#f7f9fb;margin-bottom:8px;border:1px solid var(--border)}
    .tipd-item .tipd-code{background:#15314f;color:#fff;font-weight:900;font-size:1.5rem;min-width:58px;text-align:center;padding:7px 9px;border-radius:10px;flex-shrink:0;letter-spacing:.5px;line-height:1}
    .tipd-item .tipd-desc{font-size:1.15rem;font-weight:700;line-height:1.3}
    .tipd-item .tipd-desc .tipd-sep{color:var(--muted);font-weight:600}
    .tipd-item .ap-dp-dot{display:inline-block;width:15px;height:15px;border-radius:50%;vertical-align:middle;margin-right:4px;border:1px solid rgba(0,0,0,.2)}
    .tipd-item.tipd-linen{background:#eef4fb}
    .tipd-item.tipd-linen .tipd-lbl{font-size:.78rem;font-weight:800;color:#2c5fa8;background:#dceafb;border-radius:6px;padding:1px 7px;margin-right:7px}
    .tipd-total{text-align:center;font-size:.98rem;font-weight:800;color:var(--muted);margin-top:3px}
    .tipd-empty{text-align:center;color:var(--muted);padding:14px 10px;font-size:.95rem;font-style:italic}
    /* 2.3/2.4 fix/unified-appt-modal (26/09/2026): γραμμή «διακεκομμένη» — κοινό οπτικό
       μοτίβο για «Τρόπος πληρωμής»/«Για τον οδηγό» (η πρώτη ζωγραφίζεται από
       saas_pay_method_picker.js με τις δικές του .cfx-pm-line-* κλάσεις). */
    .ap-dline{font-size:13px;border-bottom:1px dashed #185FA5;padding-bottom:4px;display:flex;justify-content:space-between;align-items:center;cursor:pointer}
    .ap-dline span:first-child{color:var(--text-secondary,var(--muted));}
    .ap-dline-val{color:#854F0B;font-weight:600}
    #ap-driver-note-panel{margin-top:8px}
    .ap-di-check{display:flex;align-items:center;gap:6px;font-size:13px;margin-bottom:6px;cursor:pointer}
    .ap-di-phone{color:var(--muted);font-size:12px}

/* από index.html, μπλοκ 15 */
#modal-topsearch{display:none;position:fixed;inset:0;z-index:10080;background:rgba(0,0,0,0.5)}
#modal-topsearch.open{display:flex;align-items:center;justify-content:center}
#modal-topsearch .ts-panel{width:100%;height:100%;height:100dvh;background:linear-gradient(160deg,#e8f1fe,#e6effc);display:flex;flex-direction:column;padding:16px 16px calc(16px + env(safe-area-inset-bottom,0px));box-sizing:border-box;overflow:hidden}
@media (min-width:601px){
  #modal-topsearch .ts-panel{width:100%;max-width:420px;height:auto;padding-bottom:16px;max-height:92vh;border-radius:20px;box-shadow:0 20px 60px rgba(0,0,0,0.35);overflow-y:auto}
}
#modal-topsearch .ts-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:14px;gap:10px}
#modal-topsearch .ts-title{font-family:Syne;font-weight:900;font-size:24px;color:#16305c;line-height:1.15}
#modal-topsearch .ts-subtitle{font-size:13px;color:#4a72ac;margin-top:2px}
#modal-topsearch .ts-close{width:34px;height:34px;border-radius:50%;background:#fff;border:none;color:#16305c;font-size:1.1rem;cursor:pointer;flex-shrink:0}
#modal-topsearch .ts-field-row{margin-bottom:8px;flex-shrink:0;position:relative}
/* !important: παρακάμπτει το global @media(max-width:600px) input{font-size:1rem !important}
   (index.html:1197, anti-zoom iOS). Το 40px είναι ΠΑΝΩ από το κατώφλι των 16px,
   άρα ο σκοπός του global κανόνα (αποτροπή auto-zoom) δεν παραβιάζεται. */
#modal-topsearch #ts-display{width:100%;height:56px;line-height:56px;border-radius:10px;border:1px solid #dbe6f5;background:#fff;color:#042C53;font-size:40px !important;font-weight:700;font-family:system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;font-variant-numeric:lining-nums tabular-nums;text-align:center;padding:0 56px;box-sizing:border-box;outline:none;caret-color:#1667d8}
#modal-topsearch .ts-mode-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin-bottom:12px;flex-shrink:0}
/* feat/topbar-search-symbols-code-format Αλλαγή Δ: ίδια font-family/
   font-variant-numeric με το πεδίο (#1368) + 20px (από 18px) — το «123»
   φαινόταν μικρότερο από «ΑΒΓ»/«ABC» στο ίδιο font-size (τα ψηφία καλύπτουν
   λιγότερα εικονοστοιχεία από τα γράμματα στην ίδια γραμματοσειρά). */
#modal-topsearch .ts-mode-btn{height:40px;border:none;border-radius:10px;font-family:system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;font-variant-numeric:lining-nums tabular-nums;font-weight:600;font-size:20px;cursor:pointer;background:#fff;color:#16305c}
#modal-topsearch .ts-keys-wrap{flex:1;min-height:0;display:flex;flex-direction:column}
#modal-topsearch #ts-keys-123{display:grid;flex:1;min-height:0;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(4,50px);gap:8px}
#modal-topsearch #ts-keys-abc{display:none}
#modal-topsearch #ts-keys-en{display:none}
#modal-topsearch .ts-key{border:none;border-radius:10px;font-size:34px;font-weight:700;color:#0d1220;cursor:pointer;background:linear-gradient(160deg,#d6f0cf,#c6e9bd);font-family:system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;font-variant-numeric:lining-nums tabular-nums}
#modal-topsearch .ts-key.ts-back{background:linear-gradient(160deg,#e6e9f0,#dbe0ea);color:#3d4a63;font-size:22px}
#modal-topsearch .ts-key.ts-go{background:#2b7fff;color:#fff}
#modal-topsearch .ts-status{margin-top:12px;font-size:0.85rem;color:#16305c;flex-shrink:0}
#modal-topsearch .ts-match-row{display:flex;justify-content:space-between;gap:10px;padding:10px 12px;background:#fff;border-radius:10px;margin-bottom:6px;cursor:pointer;font-size:0.85rem;font-weight:700;color:#16305c}
/* Φασόν: ετικέτα συνεργάτη δίπλα στο όνομα καρτέλας (λίστες παραγωγής + αποτελέσματα Παραγωγής) */
.cfx-fason-tag{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:4px;background:#EEEDFE;color:#3C3489;font-size:12px;font-weight:600;line-height:1.4;white-space:nowrap}
/* feat/unified-customer-search: ζωντανή λίστα κάτω από το πεδίο — δομή μόνο,
   η τελική εμφάνιση είναι PR-2. Κύλιση μέσα της ώστε το πληκτρολόγιο να μένει ορατό. */
#modal-topsearch .ts-results{flex:1;min-height:0;overflow-y:auto;margin-bottom:8px}
#modal-topsearch.ts-production .ts-results:empty{display:none}
#modal-topsearch .ts-live-row{align-items:center}
#modal-topsearch .ts-live-main{display:flex;flex-direction:column;min-width:0}
#modal-topsearch .ts-live-sub{font-size:0.75rem;font-weight:600;color:#4a72ac;margin-top:2px}
/* Αλλαγή ΣΤ: δευτερεύων κωδικός σε παρένθεση — πιο ανοιχτό μπλε + κανονικό
   βάρος, ώστε να μην ανταγωνίζεται οπτικά το όνομα (.ts-live-main bold). */
#modal-topsearch .ts-live-suffix{color:#7a9cc6;font-weight:400}
#modal-topsearch .ts-live-type{font-size:0.7rem;font-weight:800;color:#16305c;background:#e8f1fe;border-radius:6px;padding:2px 7px;flex-shrink:0}
#modal-topsearch .ts-live-status{padding:8px 4px;font-size:0.82rem;color:#4a72ac;text-align:center}
/* «Παραγωγή» (openProduction → προορισμός 'production'): ΙΔΙΟ modal, ΙΔΙΟ
   πληκτρολόγιο 123. .ts-production: τίτλος/υπότιτλος Παραγωγής, χωρίς ΑΒΓ/ABC,
   μικρόφωνο στο πεδίο, γραμμή «Σάρωση barcode». .ts-prod-card: η κάρτα του
   χαλιού αντί για πεδίο/πληκτρολόγιο. Χωρίς κλάση ⇒ Αναζήτηση όπως πριν. */
#modal-topsearch .ts-prod-only{display:none}
#modal-topsearch.ts-production .ts-prod-only{display:block}
#modal-topsearch.ts-production .ts-search-only{display:none}
#modal-topsearch.ts-production .ts-mode-row{display:none}
/* fix/ui-batch-appointments-keypad (Δ2): το «Καθάρισε» έφυγε από εδώ (βλ.
   .ts-prod-clear-row παρακάτω) — μόνο το μικρόφωνο μένει μέσα στο πεδίο, άρα
   ο δεξιός χώρος μειώνεται στο μέγεθός του+κενό (ήταν 168px για ΔΥΟ κουμπιά). */
/* #1377: το μικρόφωνο ζωντανεύει — ΙΔΙΑ βάση/θέση/μέγεθος (δεξιά άκρη, 44px,
   opacity 0.45 σε ηρεμία) όπως όταν ήταν ορατό-αλλά-ανενεργό. .ts-mic-rec
   ΜΟΝΟ όσο ηχογραφεί — κόκκινο παλμός (δικό του keyframe, καμία εξάρτηση από
   άλλο αρχείο). */
#modal-topsearch .ts-field-actions{position:absolute;right:6px;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:6px}
#modal-topsearch .ts-mic{width:44px;height:44px;border-radius:50%;border:2px solid #16305c;background:#fff;color:#16305c;display:flex;align-items:center;justify-content:center;padding:0;cursor:pointer;flex-shrink:0}
/* fix/ui-batch-appointments-keypad (Δ2, live bug): το «🧹 Καθάρισε» ζούσε
   μέσα στο .ts-field-actions (position:absolute, top:50%) — στο κινητό
   επέπλεε πάνω από το πλέγμα των αριθμών, σκέπαζε το 9 και ακουμπούσε το
   κουμπί-λούπα (Αναζήτηση, τελευταίο κελί). Τώρα είναι ΚΑΝΟΝΙΚΗ γραμμή ΜΕΣΑ
   στο #ts-keys-123 (grid-column:1/-1, δικό της ύψος στο grid-template-rows
   της Παραγωγής) — καμία απόλυτη τοποθέτηση, άρα ΔΟΜΙΚΑ αδύνατο να καλύψει
   πλήκτρο. Πρώτη γραμμή του πλέγματος, πριν τα 1-2-3.*/
#modal-topsearch.ts-production #ts-keys-123{grid-template-rows:40px repeat(4,50px)}
#modal-topsearch .ts-prod-clear-row{display:none}
#modal-topsearch.ts-production .ts-prod-clear-row{display:block;grid-column:1/-1}
#modal-topsearch .ts-prod-clear{width:100%;height:40px;border:1px solid #dbe6f5;border-radius:10px;background:#fff;color:#16305c;font-size:0.8rem;font-weight:800;cursor:pointer}
#modal-topsearch .ts-mic:disabled{cursor:default}
#modal-topsearch .ts-mic.ts-mic-rec{background:#b91c1c;color:#fff;opacity:1;border-color:#b91c1c;animation:ts-mic-pulse 1.1s ease-in-out infinite}
@keyframes ts-mic-pulse{0%,100%{box-shadow:0 0 0 0 rgba(185,28,28,0.5)}50%{box-shadow:0 0 0 6px rgba(185,28,28,0)}}
#modal-topsearch .ts-barcode{margin-top:10px;flex-shrink:0}
#modal-topsearch .ts-barcode-toggle{width:100%;display:flex;justify-content:space-between;align-items:center;padding:10px 12px;border:none;border-radius:10px;background:#fff;color:#16305c;font-size:0.9rem;font-weight:700;cursor:pointer}
#modal-topsearch .ts-barcode-caret{transition:transform 0.15s ease}
#modal-topsearch .ts-barcode.open .ts-barcode-caret{transform:rotate(90deg)}
#modal-topsearch .ts-barcode-body{display:none;margin-top:8px}
#modal-topsearch .ts-barcode.open .ts-barcode-body{display:block}
#modal-topsearch #ts-scan-video{width:100%;max-height:220px;object-fit:cover;border-radius:10px;background:#000;display:block}
#modal-topsearch #ts-scan-status{padding:6px 2px;font-size:0.8rem;color:#16305c;font-weight:700;text-align:center}
#modal-topsearch .ts-barcode-hint{margin-top:4px;font-size:0.75rem;color:#7a9cc6;text-align:center}
#modal-topsearch #prod-result{background:var(--bg);color:var(--text);border-radius:14px;padding:10px 8px 2px;margin-bottom:8px}
/* feat/production-packing-mode: δύο κουμπιά λειτουργίας (Πλυντήριο ·
   Συσκευασία) ΠΑΝΩ από το πεδίο κωδικού — ίδιο μοτίβο με τα 123/ΑΒΓ/ABC
   (.ts-mode-row/.ts-mode-btn), δύο ίσες στήλες, gap 6px, ύψος 44px,
   border-radius 10px. Ορατά ΜΟΝΟ στην Παραγωγή και ΜΟΝΟ όταν ο ρόλος έχει
   πάνω από μία λειτουργία (washer/packer μπαίνουν κατευθείαν, χωρίς κουμπιά)
   — το display το ορίζει το _prodRenderModes, γι' αυτό εδώ μένει none. */
#modal-topsearch #ts-fn-row{display:none;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin-bottom:8px;flex-shrink:0}
#modal-topsearch #ts-fn-row .ts-fn-btn{height:44px;border:none;border-radius:10px;font-family:system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;font-weight:700;font-size:0.95rem;cursor:pointer;background:#fff;color:#16305c}
#modal-topsearch.ts-prod-card #ts-fn-row,
#modal-topsearch.ts-prod-card .ts-field-row,
#modal-topsearch.ts-prod-card .ts-results,
#modal-topsearch.ts-prod-card .ts-keys-wrap,
#modal-topsearch.ts-prod-card .ts-status,
#modal-topsearch.ts-prod-card .ts-barcode{display:none}
#modal-topsearch.ts-prod-card .ts-panel{overflow-y:auto}

/* από index.html, μπλοκ 16 */
/* Ο τίτλος ζει πλέον στο page header — η accordion μπάρα του legacy
       group περισσεύει (και το κλικ της θα έκλεινε το body). */
    #page-admins .settings-group-header { display: none; }

/* από index.html, μπλοκ 17 */
/* ══════════════════════════════════════════════════════════════════════════
   Β3 · ΒΟΗΘΕΙΑ ΕΡΓΑΝΗ — τυπογραφία ερωταπαντήσεων (πρόθεμα .ehelp-)
   ══════════════════════════════════════════════════════════════════════════
   🚨 ΓΙΑΤΙ ΥΠΑΡΧΕΙ ΝΕΟ CSS ΕΔΩ, ΕΝΩ ΤΟ #1036 ΕΙΧΕ ΠΕΙ «ΜΗΔΕΝ ΝΕΟ CSS»:
     η απόφαση εκείνη στηριζόταν στο ότι δεν υπήρχε styled accordion και το
     .settings-group έχει τεκμηριωμένο footgun. Το native στοιχείο details ΔΕΝ είναι
     το .settings-group. Η απόκλιση είναι σκόπιμη και εγκεκριμένη (Β3).

   🚨 ΤΟ ΠΡΟΘΕΜΑ ΕΙΝΑΙ ΚΑΝΟΝΑΣ, ΟΧΙ ΣΥΜΒΑΣΗ: κάθε κλάση εδώ ξεκινά με
     .ehelp- και δεν χρησιμοποιείται σε καμία άλλη οθόνη. Η .ewto-legend και
     η .pp-help-text ΔΕΝ αγγίζονται και ΔΕΝ αλλάζει πόσες φορές εμφανίζονται
     — υπάρχουν tests άλλων οθονών που τις μετρούν και έχουν ξανασπάσει έτσι.

   🚨 ΟΙ ΤΙΜΕΣ ΕΙΝΑΙ ΑΠΑΙΤΗΣΗ ΠΡΟΪΟΝΤΟΣ, ΟΧΙ ΑΙΣΘΗΤΙΚΗ: το κοινό είναι
     επαγγελματίες με πρεσβυωπία που διαβάζουν σε κινητό. Η .ewto-legend
     είναι 0.75rem σε var(--muted) — σωστό για λεζάντα δίπλα σε φόρμα,
     μη αναγνώσιμο για σελίδα που διαβάζεται ολόκληρη. Τιμές εγκεκριμένου
     mockup: summary 20/700, σώμα 18.5/1.6, h1 29, h2 23, «Βήματα» 15/800,
     tip 16.5/1.55, κύκλος 24px με ψηφίο 14px.

   🚨 ΚΑΜΙΑ απόκρυψη του focus ring στο summary. Το native στοιχείο details δίνει ορατό focus
     ring στο πληκτρολόγιο· αν σβηστεί, ο χρήστης με tab χάνει τη θέση του.
     Ο δείκτης ▾/▴ μπαίνει με ::after ΑΦΟΥ κρυφτεί ο default marker — αυτό
     είναι διακόσμηση, όχι εστίαση.
   ══════════════════════════════════════════════════════════════════════════ */
.ehelp-h1{font-size:29px;line-height:1.25}
.ehelp-h2{font-size:23px;line-height:1.3}
/* Το χρώμα δηλώνεται ρητά: ο γονέας .ewto-legend κληροδοτεί var(--muted). */
.ehelp-intro,.ehelp-a{font-size:18.5px;line-height:1.6;color:var(--text)}
.ehelp-intro{margin:0 0 12px}
.ehelp-q{border:1px solid var(--border);border-radius:12px;background:var(--surface);margin-bottom:8px}
.ehelp-q>summary{font-size:20px;font-weight:700;line-height:1.4;color:var(--text);padding:14px;cursor:pointer;list-style:none}
.ehelp-q>summary::-webkit-details-marker{display:none}
.ehelp-q>summary::after{content:'▾';float:right;margin-left:10px;opacity:.55;font-weight:400}
.ehelp-q[open]>summary{border-bottom:1px solid var(--border)}
.ehelp-q[open]>summary::after{content:'▴'}
.ehelp-q>.ehelp-a{margin:12px 14px}
.ehelp-steps-label{font-size:15px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);margin:12px 14px 8px}
.ehelp-steps{list-style:none;margin:0 14px 12px;padding:0;counter-reset:ehelp-step}
/* ΕΝΑ ΒΗΜΑ ΑΝΑ ΓΡΑΜΜΗ: ο αριθμός σε δικό του κύκλο αριστερά, το κείμενο σε
   δική του στήλη — γι' αυτό το padding-left 46px, ώστε η δεύτερη γραμμή να
   μη γλιστράει κάτω από τον κύκλο. */
.ehelp-steps>li{position:relative;counter-increment:ehelp-step;font-size:18.5px;line-height:1.6;color:var(--text);background:var(--surface2);border-radius:10px;padding:10px 12px 10px 46px;margin-bottom:8px}
.ehelp-steps>li::before{content:counter(ehelp-step);position:absolute;left:12px;top:10px;width:24px;height:24px;border-radius:50%;background:#185FA5;color:#fff;font-size:14px;font-weight:800;line-height:24px;text-align:center}
.ehelp-tip{font-size:16.5px;line-height:1.55;color:var(--text);background:var(--surface2);border-left:3px solid #92400E;border-radius:8px;padding:10px 12px;margin:0 14px 14px}

/* από index.html, μπλοκ 18 */
/* Ωράρια (Ω-3α) — χρώματα ζωνών ίδια με ERG_BADGES/PL_BADGES (saas_ergani_card.js)
   ώστε το «κανονικό/υπερεργασία/υπερωρία» να μοιάζει οπτικά με τα υπάρχοντα
   badges της ΕΡΓΑΝΗ, όχι νέα, ασύνδετη παλέτα. */
.ewto-day-total{font-size:0.85rem;font-weight:700;padding:3px 9px;border-radius:999px;white-space:nowrap}
.ewto-zone-ok{background:#DCFCE7;color:#166534}
.ewto-zone-warn{background:#FEF3C7;color:#92400E}
.ewto-zone-crit{background:#FEE2E2;color:#991B1B}
.ewto-zone-rest{background:var(--surface2);color:var(--muted)}
/* Τοπικό άθροισμα (μη αποθηκευμένες αλλαγές) — ΕΠΙΤΗΔΕΣ διαφορετικό από τα
   ewto-zone-* badges (διακεκομμένο περίγραμμα, όχι γεμάτο φόντο): δεν πρέπει
   να μοιάζει με επίσημη ζώνη υπερωρίας που η μηχανή δεν έχει ακόμα κρίνει. */
.ewto-day-total-unsaved{background:none;border:1.5px dashed #92400E;color:#92400E}
.ewto-restday-pill{display:inline-flex;align-items:center;gap:6px;background:var(--surface2);color:var(--muted);border-radius:999px;padding:5px 10px;font-size:0.82rem;font-weight:600}
.ewto-exc-toggle{display:inline-flex;align-items:center;gap:5px;background:none;border:1px solid var(--border);border-radius:999px;padding:4px 9px;font:inherit;font-size:0.72rem;font-weight:600;color:var(--muted);cursor:pointer;white-space:nowrap}
.ewto-exc-toggle:hover{border-color:#185FA5;color:#185FA5}
.ewto-exc-toggle.active{background:#185FA5;border-color:#185FA5;color:#fff}
.ewto-exc-banner{display:flex;align-items:center;gap:6px;background:rgba(24,95,165,0.1);color:#185FA5;border-radius:8px;padding:5px 8px;margin-bottom:8px;font-size:0.76rem;font-weight:600}
.ewto-rest-flag{display:flex;align-items:center;gap:6px;font-size:0.76rem;color:#991B1B;background:#FEE2E2;border-radius:8px;padding:5px 8px;margin-bottom:8px}
/* Ίδιο σχήμα με .ewto-rest-flag, κεχριμπαρένιο αντί για κόκκινο — το κείμενο
   μέσα ήδη λέει «δεν ελέγχθηκε» με ειλικρίνεια, το χρώμα ΤΩΡΑ συμφωνεί μαζί
   του αντί να το αντιφάσκει. */
.ewto-rest-flag-unsupported{display:flex;align-items:center;gap:6px;font-size:0.76rem;color:#92400E;background:#FEF3C7;border-radius:8px;padding:5px 8px;margin-bottom:8px}
.ewto-sixthday-flag{display:flex;align-items:center;gap:6px;font-size:0.78rem;color:#92400E;background:#FEF3C7;border-radius:8px;padding:7px 9px;margin-top:10px}
.ewto-shift-row{display:flex;align-items:center;gap:6px;padding:7px 0;border-top:1px solid var(--border);flex-wrap:wrap}
.ewto-shift-row:first-of-type{border-top:none}
/* 24ωρη ώρα (β): δύο select ΩΩ/ΛΛ αντί native input[type=time] — η μορφή του
   native picker ακολουθεί το locale του browser/OS (πμ/μμ), όχι το lang="el"
   της σελίδας, χωρίς αξιόπιστο cross-browser τρόπο να εξαναγκαστεί 24ωρη. */
.ewto-time-group{display:inline-flex;align-items:center;gap:2px}
.ewto-time-sep{color:var(--muted);font-size:0.82rem}
.ewto-time-group select{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:5px 4px;font-size:0.82rem}
.ewto-shift-dur{font-size:0.78rem;color:var(--muted);flex-shrink:0;min-width:44px;text-align:right}
.ewto-shift-remove{background:none;border:none;color:var(--muted);cursor:pointer;font-size:1rem;padding:2px 6px;border-radius:6px;flex-shrink:0}
.ewto-shift-remove:hover{background:#FEE2E2;color:#991B1B}
/* Ω-6: το ΣΤΥΛ των κουμπιών προσθήκης βγήκε από το .ewto-add-shift σε δική του
   κλάση (.ewto-add-line), επειδή το .ewto-add-shift είναι ΚΑΙ behavior class
   στο delegation του saas_ergani_wto.js — κοινή κλάση στα τρία κουμπιά θα
   σήμαινε ότι το «+ Άδεια» προσθέτει βάρδια. */
.ewto-add-line{flex:1;min-width:118px;margin-top:0;background:none;border:1.5px dashed var(--border);border-radius:10px;padding:8px;color:var(--muted);font:inherit;font-size:0.85rem;cursor:pointer;font-weight:600}
.ewto-add-line:hover{border-color:#185FA5;color:#185FA5}
.ewto-add-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
/* Οι τρεις επιλογές πίσω από το «+ Προσθήκη». flex-basis:100% ώστε να πέφτουν
   σε ΔΙΚΗ ΤΟΥΣ γραμμή κάτω από το κουμπί εισόδου, όχι δίπλα του. Κλειστό by
   default — ανοίγει με την .open που βάζει το _toggleAddMenu. */
.ewto-add-menu{display:none;flex-basis:100%;gap:8px;flex-wrap:wrap;margin-top:8px}
.ewto-add-menu.open{display:flex}
/* Τα δύο κουμπιά άδειας στη μωβ γλώσσα της οθόνης — ίδια με το tint της
   γραμμής ωροάδειας και το pill της κεφαλίδας. */
.ewto-add-leave{border-color:#C4B5FD;color:#5B21B6}
.ewto-add-leave:hover{border-color:#6D28D9;color:#5B21B6}
/* ── Ω-6: ΑΔΕΙΕΣ ─────────────────────────────────────────────────────────
   ΜΩΒ = ΑΔΕΙΑ, σε τρία σημεία (γραμμή ωροάδειας, επιλογέας ολοήμερης, pill
   κεφαλίδας). Ξεχωριστή οικογένεια χρώματος από τα ewto-zone-* (πράσινο/
   κεχριμπαρένιο/κόκκινο = ζώνες υπερωρίας) και από το μπλε των εξαιρέσεων:
   η άδεια ΔΕΝ είναι ζώνη εργασίας και ΔΕΝ είναι κατάσταση δήλωσης. Οι ώρες
   μιας ωροάδειας μοιάζουν οπτικά με ώρες βάρδιας αλλά δεν μετράνε ως
   εργασία — το tint είναι η εξήγηση του «γιατί το badge λέει λιγότερα». */
.ewto-leave-row{background:rgba(109,40,217,0.06);border-radius:8px;padding-left:6px;padding-right:6px}
.ewto-leave-row .ewto-line-type{border-color:#C4B5FD;color:#5B21B6}
/* Επιλογέας ολοήμερης γραμμής: κουμπί που ανοίγει λίστα με αναζήτηση (31
   επιλογές, μακριά ονόματα — native select θα κοβόταν στο πλάτος οθόνης). */
.ewto-type-pick{flex:1;min-width:150px;display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:5px 8px;font:inherit;font-size:0.8rem;color:var(--text);cursor:pointer;text-align:left}
.ewto-type-pick.leave{border-color:#C4B5FD;color:#5B21B6}
.ewto-type-pick .cx{color:var(--muted);font-size:0.7rem;flex-shrink:0}
.ewto-type-pick:disabled{opacity:0.55;cursor:default}
/* Κωδικός χωρίς ετικέτα. ΚΟΚΚΙΝΟ και ΟΡΑΤΟ: η προηγούμενη συμπεριφορά ήταν
   να μη ζωγραφίζεται τίποτα, δηλαδή ο εργοδότης έβλεπε άδεια κάρτα για ημέρα
   που είχε δηλωμένη γραμμή. Σιωπή σε νομική οθόνη είναι το χειρότερο σφάλμα. */
.ewto-type-unknown{display:inline-flex;align-items:center;gap:5px;flex:1;min-width:150px;font-size:0.78rem;font-weight:700;color:#991B1B;background:#FEE2E2;border:1px solid #991B1B;border-radius:6px;padding:5px 8px}
/* Modal επιλογέα — μοτίβο saas_api.js (_openCfxPreviewModal): overlay +
   αναζήτηση + φιλτραρισμένη λίστα. */
/* top/right/bottom/left ΑΝΤΙ ΓΙΑ inset: το inset είναι πρόσφατο CSS και το
   deploy-frontend στοχεύει ρητά παλιούς browsers (γι' αυτό είναι όλο ES5). Σε
   browser χωρίς inset, το overlay θα κατέρρεε σε κουκκίδα και ο επιλογέας θα
   ήταν άχρηστος — χωρίς κανένα μήνυμα σφάλματος. */
.ewto-pick-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:rgba(15,23,42,0.45);z-index:9000;display:flex;align-items:center;justify-content:center;padding:16px}
.ewto-pick-modal{background:var(--surface);border-radius:14px;width:100%;max-width:420px;max-height:82vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 18px 40px rgba(0,0,0,0.28)}
.ewto-pick-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 14px;border-bottom:1px solid var(--border)}
.ewto-pick-title{font-weight:800;font-size:0.92rem;color:var(--text)}
.ewto-pick-close{background:none;border:none;font-size:1.15rem;color:var(--muted);cursor:pointer;padding:2px 6px}
.ewto-pick-body{padding:12px 14px;display:flex;flex-direction:column;min-height:0}
.ewto-pick-search{width:100%;padding:10px 12px;border-radius:10px;border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;font-size:0.88rem;margin-bottom:8px}
.ewto-pick-list{overflow-y:auto;border:1px solid var(--border);border-radius:10px;min-height:0}
.ewto-pick-item{display:flex;width:100%;justify-content:space-between;align-items:center;gap:10px;padding:9px 12px;border:none;border-bottom:1px solid var(--border);background:none;font:inherit;font-size:0.85rem;color:var(--text);text-align:left;cursor:pointer}
.ewto-pick-item:last-child{border-bottom:none}
.ewto-pick-item:hover{background:rgba(109,40,217,0.06)}
/* ΑΝ/ΜΕ: έντονα και πρώτα. Είναι ό,τι πατιέται δεκάδες φορές τον μήνα, ενώ οι
   29 άδειες από κάτω ίσως ποτέ. */
.ewto-pick-item.top{background:var(--surface2);font-weight:700}
.ewto-pick-item.sel{background:rgba(109,40,217,0.12);font-weight:700}
.ewto-pick-code{font-size:0.68rem;color:var(--muted);font-weight:700;flex-shrink:0}
.ewto-pick-empty{padding:22px;text-align:center;color:var(--muted);font-size:0.83rem}
.ewto-pick-broken{padding:9px 12px;border-bottom:1px solid var(--border)}
/* Δεύτερο pill κεφαλίδας: ώρες ΑΔΕΙΑΣ της ημέρας, δίπλα (ΟΧΙ αντί) στο badge
   εργασίας. Τα δύο νούμερα λένε διαφορετικά πράγματα και πρέπει να φαίνονται
   μαζί — το «0.0 ώ» δίπλα σε «2.0 ώ άδεια» εξηγείται μόνο του. */
.ewto-leave-pill{font-size:0.85rem;font-weight:700;padding:3px 9px;border-radius:999px;white-space:nowrap;background:#EDE9FE;color:#5B21B6}
/* Έτος + δικαιούμενες ημέρες (f_year/f_req_days του WTO_v2). Με εσοχή κάτω από
   τη γραμμή τους — ανήκουν σε ΕΚΕΙΝΗ την άδεια, όχι στην ημέρα. */
.ewto-leave-fields{display:flex;gap:10px;flex-wrap:wrap;align-items:center;padding:0 0 7px 24px;font-size:0.75rem;color:var(--muted)}
.ewto-leave-fields label{display:inline-flex;align-items:center;gap:5px}
.ewto-leave-fields input{font:inherit;font-size:0.8rem;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:4px 6px;width:78px}
.ewto-leave-fields input:disabled{opacity:0.55;cursor:default}
/* Ημέρα ΠΡΟΤΥΠΟΥ με άδεια: μία ένδειξη για τα δύο πεδία μαζί, με την ενέργεια
   μέσα της. Ουδέτερη (ΟΧΙ κόκκινη/πορτοκαλί) — δεν έγινε τίποτα λάθος, απλώς
   αυτά τα δύο ζουν σε συγκεκριμένη ημερομηνία. */
.ewto-leave-tplnote{font-size:0.73rem;color:var(--muted);line-height:1.45;background:var(--surface2);border-radius:8px;padding:6px 9px;margin-top:6px}
/* Δ3β: εξήγηση Ωροάδειας + «Εξαίρεση μόνο σήμερα», ΜΙΑ φορά πάνω από τη λίστα
   ημερών — ΟΧΙ ανά κάρτα (7 κάρτες × ίδιο κείμενο θα ήταν θόρυβος για όποιον
   ξαναέρχεται). Ίδια συνταγή με .ewto-leave-tplnote (ουδέτερο, μη-λάθος τόνος). */
/* Υπογραμμισμένος ΟΡΟΣ ΜΕΣΑ σε πρόταση — inline εκδοχή του .erg-htrig.
   Εκείνο είναι display:block/width:100% (η ετικέτα καταλαμβάνει ολόκληρη
   γραμμή, σωστό για τα πεδία των Ρυθμίσεων)· εδώ ο όρος ζει ΜΕΣΑ στο κείμενο
   και ένα block trigger θα έσπαγε την πρόταση στα δύο. Ίδια οπτική γλώσσα:
   διακεκομμένη υπογράμμιση, σβηστός τόνος που σκουραίνει σε hover/focus,
   καμία σχηματική ένδειξη. Η ΙΔΙΑ Η ΦΟΥΣΚΑ (.erg-qbubble/.erg-qclose/
   .erg-qbubble-body) είναι ΚΟΙΝΗ — μηδέν αντίγραφο στυλ εδώ.
   padding+αρνητικό margin: μεγαλώνει η περιοχή αφής χωρίς να ανοίγουν τα
   κενά της γραμμής (ίδιο κόλπο με το .erg-htrig, σε inline μέγεθος). */
/* Η .eexm-htrig είναι Ο ΙΔΙΟΣ inline όρος, στο namespace της οθόνης «Πότε
   δηλώνω στο ΕΡΓΑΝΗ» (#page-ergani-exemption). ΜΙΑ δήλωση για τις δύο —
   μηδέν αντίγραφο στυλ. Ξεχωριστό όνομα και όχι σκέτη επαναχρήση της
   .ewto-htrig, επειδή εκείνη φέρει δικό της scoped override
   (.ewto-wd .ewto-htrig) που δεν αφορά αυτή την οθόνη. */
.eexm-htrig,
.ewto-htrig{
  display:inline;background:none;border:none;padding:7px 3px;margin:-7px -3px;
  font:inherit;color:var(--muted);cursor:pointer;
  text-decoration:underline;text-decoration-style:dashed;text-underline-offset:3px
}
.ewto-htrig:hover,.ewto-htrig:focus-visible,
.eexm-htrig:hover,.eexm-htrig:focus-visible{color:var(--text)}
/* Ο ΤΙΤΛΟΣ ΤΗΣ ΣΕΛΙΔΑΣ ΕΙΝΑΙ ΚΑΙ ΟΡΟΣ: εκεί ο σβηστός τόνος του όρου θα
   έκανε γκρίζα ολόκληρη την κεφαλίδα. Κληρονομεί το χρώμα του .page-title
   και δίνει την ανάδραση με διαφάνεια — ίδιο ακριβώς κόλπο με το
   .ewto-wd .ewto-htrig μέσα στο πράσινο πλαίσιο ημέρας. */
.page-title .eexm-htrig{color:inherit;opacity:0.9}
.page-title .eexm-htrig:hover,.page-title .eexm-htrig:focus-visible{color:inherit;opacity:1}
/* ΥΠΟΤΙΤΛΟΣ ΣΕΛΙΔΑΣ, κάτω από τον τίτλο — μία σβηστή γραμμή, κανένα πλαίσιο. */
.eexm-sub{font-size:0.78rem;color:var(--muted);line-height:1.4;margin:0 0 14px 40px}
/* ΗΠΙΑ ΠΡΟΕΙΔΟΠΟΙΗΣΗ ΠΕΔΙΟΥ — ΔΕΝ ΜΠΛΟΚΑΡΕΙ. Σκόπιμα ΧΩΡΙΣ φόντο/περίγραμμα:
   το κόκκινο πλαίσιο #eexm-form-error σημαίνει «δεν προχωράς μέχρι να το
   φτιάξεις», ενώ αυτό εδώ σημαίνει «προχωράει, αλλά να το ξέρεις». Ίδιο
   βάρος με λεζάντα, όχι με σφάλμα. */
.eexm-soft-warn{font-size:0.75rem;color:#92400E;line-height:1.45;margin-top:5px}
body[data-theme="dark"] .eexm-soft-warn{color:#FBBF24}


/* ΜΙΑ γραμμή, ΟΧΙ πλαίσιο: αντικατέστησε το κουτί .ewto-legend πάνω από τη
   λίστα ημερών. Χωρίς φόντο/περίγραμμα — δεν διεκδικεί προσοχή, υπάρχει για
   να πατηθεί όταν χρειαστεί. Οι φούσκες μέσα της είναι display:none μέχρι το
   κλικ, οπότε η γραμμή μένει γραμμή. */
.ewto-helpline{font-size:0.78rem;color:var(--muted);line-height:1.9;margin-bottom:12px}
.ewto-legend{font-size:0.75rem;color:var(--muted);line-height:1.55;background:var(--surface2);border-radius:10px;padding:9px 11px;margin-bottom:12px}
.ewto-legend p{margin:0}
.ewto-legend p+p{margin-top:6px}
/* Ω-2β — ΑΔΗΛΩΤΕΣ ΑΛΛΑΓΕΣ. Σκόπιμα ΠΙΟ ΕΝΤΟΝΟ από το pending-banner: ο κίνδυνος
   του εργοδότη είναι «ξέχασα να στείλω», όχι «έστειλα κατά λάθος». Πλήρες
   πλαίσιο + έντονο περίγραμμα, δεν κλείνει, δεν είναι toast (2.8" δεν αρκούν
   για κάτι με πρόστιμο στο βάθος). */
.ewto-undeclared{background:#FFF7ED;border:2px solid #EA580C;border-radius:12px;padding:12px;margin-top:10px}
.ewto-undeclared-title{display:flex;align-items:center;gap:8px;font-weight:800;font-size:0.9rem;color:#9A3412;margin-bottom:6px}
.ewto-undeclared-dates{font-size:0.85rem;color:#9A3412;font-weight:600;margin-bottom:4px}
.ewto-undeclared-hint{font-size:0.78rem;color:#9A3412;opacity:0.85;margin-bottom:10px}
/* #C2410C αντί #EA580C: το λευκό πάνω στο ανοιχτό πορτοκαλί ήταν δυσδιάκριτο
   για χρήστη με μειωμένη όραση — και είναι η ΒΑΣΙΚΗ ενέργεια υποβολής της
   οθόνης, αυτή που δεν πρέπει να χαθεί. Το περίγραμμα του πλαισίου μένει
   #EA580C, οπότε η οπτική γλώσσα «προσοχή/πορτοκαλί» δεν αλλάζει. */
.ewto-declare-btn{width:100%;background:#C2410C;color:#fff;border:none;border-radius:10px;padding:11px;font:inherit;font-weight:700;font-size:0.9rem;cursor:pointer}
.ewto-declare-btn:disabled{opacity:0.6;cursor:default}
/* Ω-4 — ΒΑΣΙΚΟ ΕΒΔΟΜΑΔΙΑΙΟ ΠΡΟΓΡΑΜΜΑ. ΞΕΧΩΡΙΣΤΟ πλαίσιο από το .ewto-undeclared
   από πάνω, και αυτό είναι ΣΚΟΠΙΜΟ, όχι επανάληψη: είναι δύο ΔΙΑΦΟΡΕΤΙΚΕΣ
   δηλώσεις προς το ΕΡΓΑΝΗ (το σταθερό ωράριο ολόκληρο vs οι αλλαγές
   μεμονωμένων ημερών). Ένα κοινό κουμπί «στείλε ό,τι υπάρχει» θα έστελνε
   λάθος έντυπο. Όταν εκκρεμούν και τα δύο, ο εργοδότης ΠΡΕΠΕΙ να δει δύο
   πλαίσια με δύο κουμπιά. */
.ewto-wd{border-radius:12px;padding:12px;margin-top:10px;border:2px solid}
.ewto-wd.warn{background:#FFF7ED;border-color:#EA580C;color:#9A3412}
.ewto-wd.ok{background:#ECFDF5;border-color:#059669;color:#065F46}
.ewto-wd.wait{background:#FEF3C7;border-color:#92400E;color:#78350F}
/* ΣΥΜΠΥΚΝΩΜΕΝΗ κατάσταση: μία γραμμή αντί για τίτλο+παράγραφο+τεκμήρια. Μόνο
   για τις «ήσυχες» καταστάσεις (δηλωμένο / το έχει ήδη το ΕΡΓΑΝΗ), ΠΟΤΕ για
   όσες φέρουν κουμπί — εκεί το κείμενο εξηγεί τι θα σταλεί. */
.ewto-wd.slim{padding:9px 11px}
.ewto-wd-line{font-size:0.85rem;font-weight:700;line-height:1.6}
/* Ο όρος «λεπτομέρειες» μέσα στο χρωματιστό πλαίσιο κληρονομεί ΤΟ ΧΡΩΜΑ ΤΟΥ
   ΠΛΑΙΣΙΟΥ: το var(--muted) του .ewto-htrig είναι γκρι πάνω σε πράσινο tint
   και σε dark surface — μη αναγνώσιμο και στα δύο θέματα. Η διακεκομμένη
   υπογράμμιση μένει το σήμα ότι πατιέται. */
.ewto-wd .ewto-htrig{color:inherit;opacity:0.85}
.ewto-wd .ewto-htrig:hover,.ewto-wd .ewto-htrig:focus-visible{color:inherit;opacity:1}
.ewto-wd-title{font-weight:800;font-size:0.9rem;margin-bottom:6px;line-height:1.35}
.ewto-wd-text{font-size:0.8rem;line-height:1.55;margin-bottom:9px}
.ewto-wd-facts{font-size:0.82rem;line-height:1.7;font-weight:600}
/* Η καθησυχαστική γραμμή της κατάστασης Γ («η προηγούμενη έκδοση παραμένει
   δηλωμένη»). Δικό της φόντο ώστε να μη χαθεί μέσα στο προειδοποιητικό κείμενο
   — είναι η απάντηση στο «μήπως έμεινα ακάλυπτος;», που είναι ΟΛΟΚΛΗΡΟ το
   νόημα του πλαισίου σε αυτή την κατάσταση. */
.ewto-wd-note{background:rgba(255,255,255,0.65);border-radius:8px;padding:9px 10px;
  font-size:0.8rem;line-height:1.55;margin-bottom:10px;font-weight:600}
/* Ίδιο βάρος/χρώμα με το .ewto-declare-btn (#C2410C) — είναι κι αυτό βασική
   ενέργεια υποβολής, με τα ίδια κριτήρια αντίθεσης. */
.ewto-wd-btn{width:100%;background:#C2410C;color:#fff;border:none;border-radius:10px;
  padding:11px;font:inherit;font-weight:700;font-size:0.9rem;cursor:pointer}
.ewto-wd-btn:disabled{opacity:0.6;cursor:default}
/* Μπλοκάρισμα υποβολής (π.χ. υπερωρία) — inline panel, ΟΧΙ toast: ο χρήστης
   πρέπει να κάνει κάτι συγκεκριμένο για να προχωρήσει (UI guidelines). */
.ewto-block{background:#FEE2E2;border:2px solid #991B1B;border-radius:12px;padding:12px;margin-top:10px;font-size:0.84rem;color:#7F1D1D;font-weight:600;line-height:1.45}
.ewto-block-dismiss{float:right;background:none;border:none;color:inherit;font:inherit;font-weight:800;font-size:1rem;line-height:1;cursor:pointer;padding:0 0 8px 10px}
/* PR-5: ΠΡΟΕΙΔΟΠΟΙΗΣΗ ΠΑΝΩ ΣΕ ΕΠΙΤΥΧΙΑ. Κεχριμπαρένιο σαν το .ewto-unsaved,
   ΟΧΙ κόκκινο σαν το .ewto-block: η δήλωση ΕΦΥΓΕ κανονικά και με το σωστό
   έντυπο — απλώς η δηλωμένη πρόθεση του εργοδότη (απολογιστικό) δεν συμφωνεί
   με τα καταχωρημένα δεδομένα. Κόκκινο εδώ θα έλεγε «απέτυχε» για κάτι που
   πέτυχε, δηλαδή το ανάποδο σήμα σε εργαλείο συμμόρφωσης. */
.ewto-block.ewto-block-warn{background:#FEF3C7;border-color:#92400E;color:#78350F}
/* Η αποστολή στο ΕΡΓΑΝΗ έχει σταματήσει (ergani_auth_suspended_at). ΚΟΚΚΙΝΟ σαν
   το .ewto-block, ΟΧΙ κεχριμπαρένιο σαν το .ewto-unsaved: δεν είναι απόφαση που
   εκκρεμεί, είναι κατάσταση όπου ΤΙΠΟΤΑ δεν φεύγει και ο εργοδότης το αγνοεί.
   ΞΕΧΩΡΙΣΤΗ κλάση από το .ewto-block: εκείνο είναι παροδικό (αποτυχία μιας
   ενέργειας, καθαρίζεται με _clearBlock), αυτό είναι μόνιμο μέχρι να μπουν
   σωστά διαπιστευτήρια — δεν πρέπει ποτέ να το σβήσει ένα _clearBlock. */
.ewto-stopped{background:#FEE2E2;border:2px solid #991B1B;border-radius:12px;padding:12px;margin-bottom:12px}
.ewto-stopped-title{font-weight:800;font-size:0.9rem;color:#7F1D1D;margin-bottom:6px;letter-spacing:0.02em}
.ewto-stopped-body{font-size:0.82rem;color:#7F1D1D;line-height:1.5;margin-top:6px}
/* Αναποθήκευτες αλλαγές — τρεις επιλογές. Κεχριμπαρένιο (προσοχή, ΟΧΙ σφάλμα):
   δεν έχει γίνει κάτι λάθος, ο χρήστης πρέπει απλώς να αποφασίσει. */
.ewto-unsaved{background:#FEF3C7;border:2px solid #92400E;border-radius:12px;padding:12px;margin-top:10px}
.ewto-unsaved-title{font-weight:800;font-size:0.9rem;color:#78350F;margin-bottom:6px}
.ewto-unsaved-text{font-size:0.8rem;color:#78350F;line-height:1.45;margin-bottom:10px}
.ewto-unsaved-actions{display:flex;gap:8px;flex-wrap:wrap}
.ewto-unsaved-actions button{flex:1;min-width:132px;border-radius:10px;padding:10px;font:inherit;font-weight:700;font-size:0.83rem;cursor:pointer}
.ewto-unsaved-save{background:#92400E;color:#fff;border:none}
.ewto-unsaved-discard{background:none;color:#92400E;border:1.5px solid #92400E}
.ewto-unsaved-cancel{background:none;color:#78350F;border:1.5px solid transparent;text-decoration:underline}
/* Γ1β: «Από πότε ισχύει;» — ρητή ερώτηση πριν γεννηθεί έκδοση. */
.ewto-effective{background:#EFF6FF;border:2px solid #185FA5;border-radius:12px;padding:12px;margin-top:10px}
.ewto-effective-title{font-weight:800;font-size:0.9rem;color:#1E3A5F;margin-bottom:6px}
.ewto-effective-text{font-size:0.8rem;color:#1E3A5F;line-height:1.45;margin-bottom:8px}
.ewto-effective-opt{display:block;font-size:0.83rem;color:#1E3A5F;line-height:1.5;margin-bottom:6px;cursor:pointer}
.ewto-effective-opt input{margin-right:7px}
.ewto-effective-date{width:100%;padding:8px 9px;border:1px solid var(--border);border-radius:8px;font:inherit;font-size:0.88rem;background:var(--surface);color:var(--text);margin-bottom:10px}
/* Σύνοψη αποτυχίας ΜΕΣΑ στο μπλε πλαίσιο: κόκκινη, όχι μπλε — είναι σφάλμα,
   όχι οδηγία, και πρέπει να ξεχωρίζει από το υπόλοιπο πλαίσιο που το φιλοξενεί.
   Ίδια παλέτα με το .ewto-block (το αναλυτικό πάνελ δίπλα στην κάρτα ημέρας). */
.ewto-effective-error{background:#FEF2F2;border:1.5px solid #991B1B;color:#7F1D1D;border-radius:9px;padding:9px 10px;font-size:0.8rem;font-weight:700;line-height:1.5;margin-bottom:10px}
.ewto-effective-actions{display:flex;gap:8px;flex-wrap:wrap}
.ewto-effective-actions button:disabled{opacity:0.6;cursor:default}
.ewto-effective-actions button{flex:1;min-width:120px;border-radius:10px;padding:10px;font:inherit;font-weight:700;font-size:0.83rem;cursor:pointer}
/* Η .ewto-effective-confirm έφυγε μαζί με το κουμπί της: η ερώτηση «Από πότε
   ισχύει;» δεν δεσμεύει πια — δεσμεύεται μόνο το κάτω sticky. Μένει το
   .ewto-end-confirm, που ανήκει σε ΑΛΛΗ ενέργεια («Αλλαγή λήξης»). */
.ewto-end-confirm{background:#185FA5;color:#fff;border:none}
/* Μόνο «Άκυρο» στο πλαίσιο της ερώτησης: χωρίς αυτό το flex:1 το απλώνει σε
   όλο το πλάτος και ανταγωνίζεται οπτικά το πραγματικό κουμπί δέσμευσης. */
.ewto-effective-actions .ewto-effective-cancel:only-child{flex:0 0 auto}
.ewto-effective-cancel{background:none;color:#1E3A5F;border:1.5px solid #185FA5}
/* Σήμανση ανά ημέρα στην κάρτα */
.ewto-day-flag-undeclared{font-size:0.72rem;font-weight:700;color:#9A3412;background:#FFEDD5;border-radius:999px;padding:2px 8px;white-space:nowrap}
.ewto-day-flag-declared{font-size:0.72rem;font-weight:700;color:#166534;background:#DCFCE7;border-radius:999px;padding:2px 8px;white-space:nowrap}
/* Ω-5 «ΜΕΡΙΚΩΣ»: μια ημέρα με ωράριο ΚΑΙ υπερωρία παράγει ΔΥΟ έγγραφα με
   ανεξάρτητη τύχη. Κεχριμπαρένιο — ούτε πράσινο (δεν τελείωσε) ούτε το
   πορτοκαλί του «αδήλωτη» (κάτι ΕΧΕΙ φύγει, με πρωτόκολλο). ΔΕΝ έχει
   white-space:nowrap: το κείμενο λέει ΤΙ πέρασε και ΤΙ εκκρεμεί, οπότε
   πρέπει να μπορεί να σπάσει σε δεύτερη γραμμή σε κινητό. */
.ewto-day-flag-partial{font-size:0.72rem;font-weight:700;color:#92400E;background:#FEF3C7;border-radius:999px;padding:2px 8px;line-height:1.5}
/* Ω-8 «ΣΕ ΕΞΕΛΙΞΗ»: υποβολή pending/failed καθ' οδόν. ΙΔΙΟ κεχριμπαρένιο με
   το .ewto-wd.wait (κατάσταση του βασικού προγράμματος) — «amber = περίμενε»
   είναι ήδη η σύμβαση της οθόνης, όχι το χρώμα του «μερικώς». Χωρίς κουμπί
   πουθενά κοντά της — δεν χρειάζεται ενέργεια, μόνο αναμονή. */
.ewto-day-flag-pending{font-size:0.72rem;font-weight:700;color:#92400E;background:#FEF3C7;border-radius:999px;padding:2px 8px;white-space:nowrap}
/* Ημέρα εκτός ισχύουσας έκδοσης προγράμματος (Ω-3α): ορατή, μέσα στο άθροισμα,
   ΜΗ επεξεργάσιμη. Ουδέτερα χρώματα — ΔΕΝ είναι σφάλμα ούτε προειδοποίηση,
   είναι κατάσταση. Το διάστικτο περίγραμμα λέει «δεν γράφεται εδώ». */
.ewto-day-flag-locked{font-size:0.72rem;font-weight:700;color:var(--muted);background:var(--surface2);border:1px solid var(--border);border-radius:999px;padding:2px 8px;white-space:nowrap}
.ewto-locked-note{font-size:0.76rem;color:var(--muted);background:var(--surface);border:1px dashed var(--border);border-radius:8px;padding:6px 8px;margin-bottom:8px;line-height:1.4}
.ewto-locked-foot{font-size:0.78rem;color:var(--muted);margin-top:10px;line-height:1.4}
.ewto-exc-toggle:disabled,.ewto-add-line:disabled,.ewto-shift-remove:disabled{opacity:0.45;cursor:default}
.ewto-exc-toggle:disabled:hover,.ewto-add-line:disabled:hover{border-color:var(--border);color:var(--muted)}
.ewto-shift-remove:disabled:hover{background:none;color:var(--muted)}
.ewto-time-group select:disabled,.ewto-line-type:disabled{opacity:0.55;cursor:default}
/* Ιστορικό υποβολών */
.ewto-sub-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-top:1px solid var(--border);font-size:0.83rem;flex-wrap:wrap}
/* Ω-5: ΤΙ ΕΙΔΟΥΣ δήλωση είναι η γραμμή («Ωράριο» / «Υπερωρία»). Χωρίς αυτό,
   δύο υποβολές της ίδιας ημέρας ήταν οπτικά ΤΑΥΤΟΣΗΜΕΣ — η μία πράσινη με
   πρωτόκολλο, η άλλη κόκκινη, και καμία ένδειξη ποια είναι ποια. */
.ewto-sub-kind{display:inline-block;font-size:0.68rem;font-weight:700;text-transform:uppercase;letter-spacing:0.03em;color:var(--muted);background:var(--surface2);border-radius:5px;padding:1px 6px;margin-right:7px}
/* Γραμμή υποβολής χωρίς καταγεγραμμένο εργαζόμενο (staff_id IS NULL, μαζική
   υποβολή πριν τη migration 184) — πλάγια γραφή, ΟΧΙ έντονη σαν το όνομα:
   είναι ουδέτερη ένδειξη απουσίας, όχι δεδομένο σαν τα υπόλοιπα strong. */
.ewto-sub-nostaff{font-style:italic;color:var(--muted)}
.ewto-sub-row:first-of-type{border-top:none}
.ewto-sub-main{flex:1;min-width:180px}
.ewto-sub-err{color:#991B1B;font-size:0.78rem;margin-top:2px;word-break:break-word}
.ewto-sub-ok{color:#166534;font-size:0.78rem;margin-top:2px}
/* Σύνδεσμοι εμφάνισης μέσα στη λίστα υποβολών («δες όλες», «παλιές
   απορρίψεις»). Σκόπιμα ΟΧΙ κουμπιά-CTA: δεν κάνουν καμία ενέργεια προς το
   ΕΡΓΑΝΗ — μόνο αποκαλύπτουν γραμμές που ήδη υπάρχουν. */
/* §4β: ομαδοποίηση ιστορικού υποβολών ανά μήνα — native <details>, τρέχων
   μήνας ανοιχτός by default (βλ. _renderSubmissions). */
.ewto-sub-month{border-top:1px solid var(--border)}
.ewto-sub-month:first-of-type{border-top:none}
.ewto-sub-month-summary{cursor:pointer;padding:8px 0;font-weight:700;font-size:0.8rem;color:var(--muted);text-transform:uppercase;letter-spacing:0.03em;list-style:none}
.ewto-sub-month-summary::-webkit-details-marker{display:none}
.ewto-sub-month-summary::before{content:'▸ ';display:inline-block}
.ewto-sub-month[open] > .ewto-sub-month-summary::before{content:'▾ '}
.ewto-subs-more,.ewto-subs-rejected{padding:8px 0;border-top:1px solid var(--border)}
.ewto-subs-link{background:none;border:none;padding:0;font:inherit;font-size:0.8rem;font-weight:700;color:#185FA5;cursor:pointer;text-align:left}
.ewto-subs-link:hover,.ewto-subs-link:focus-visible{text-decoration:underline}
.ewto-retry-btn{background:none;border:1.5px solid #185FA5;color:#185FA5;border-radius:8px;padding:6px 12px;font:inherit;font-size:0.8rem;font-weight:700;cursor:pointer;flex-shrink:0}
.ewto-retry-btn:disabled{opacity:0.5;cursor:default}
.ewto-summary-title{font-weight:700;font-size:0.85rem;color:var(--muted);text-transform:uppercase;letter-spacing:0.04em;margin-bottom:8px}
.ewto-zonebar{display:flex;height:10px;border-radius:999px;overflow:hidden;background:var(--surface2)}
.ewto-zonebar > div{height:100%}
.ewto-zonebar .z-ok{background:#166534}
.ewto-zonebar .z-warn{background:#92400E}
.ewto-zonebar .z-crit{background:#991B1B}
.ewto-zone-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:0.78rem;color:var(--muted);margin-top:8px}
.ewto-zone-legend span{display:inline-flex;align-items:center;gap:5px}
.ewto-zone-legend i{width:9px;height:9px;border-radius:3px;display:inline-block}
.ewto-annual{margin-top:12px;font-size:0.85rem;color:var(--muted)}
.ewto-annual-text b{color:var(--text)}

/* ── DARK THEME (πολιτική #1) ────────────────────────────────────────────
   Καμία .ewto-* κλάση δεν είχε dark override (grep = 0). Τα pastel pills/
   πλαίσια είναι σχεδιασμένα για ΦΩΤΕΙΝΟ θέμα (ανοιχτό φόντο + σκούρο κείμενο)
   — σε σκοτεινό θέμα έμεναν ΟΛΟΪΔΙΑ: είτε ανοιχτόχρωμα μπαλώματα πάνω σε
   σκούρο φόντο, είτε σκούρο κείμενο πάνω σε σκούρο φόντο (πρακτικά αόρατο —
   π.χ. #92400E/#991B1B/#5B21B6 έχουν contrast ratio ~1.5-2.5:1 σε σκούρο
   surface, κάτω από κάθε όριο αναγνωσιμότητας).
   Selector ανά κλάση (body[data-theme="dark"] .κλάση{...}) — ΤΟ ΙΔΙΟ μοτίβο
   με το ΜΟΝΑΔΙΚΟ υπάρχον dark override του repo (.p2l-obl-day-today, γρ.
   1488-1490), ΚΑΝΕΝΑ νέο σύστημα. Μόνο ΝΕΕΣ γραμμές — καμία αλλαγή στο
   φωτεινό θέμα, καμία αλλαγή σε διάταξη/μέγεθος/markup.
   Στιβαρά χρώματα (solid CTA κουμπιά με λευκό κείμενο, .ewto-zonebar blocks,
   λεπτά rgba tints) ΔΕΝ αγγίχτηκαν — ήδη διαβάζονται σωστά και στα δύο θέματα. */
body[data-theme="dark"] .ewto-zone-ok,
body[data-theme="dark"] .ewto-day-flag-declared { background:#14321F; color:#4ADE80; }
body[data-theme="dark"] .ewto-sub-ok { color:#4ADE80; }
/* #page-my-month ΣΤΟ ΙΔΙΟ σημείο του selector όπως ο φωτεινός κανόνας
   (γρ. 2369) — ΟΧΙ μόνο body[data-theme="dark"] .mm-protocol-ok: εκείνο έχει
   ειδικότητα (0 ID, 2, 1), ΛΙΓΟΤΕΡΗ από το ID-scoped φωτεινό (1 ID, 1, 0) —
   το φωτεινό #166534 θα επικρατούσε ΠΑΝΤΑ, ανεξάρτητα από σειρά στο αρχείο.
   Εύρημα CodeRabbit #1126. */
body[data-theme="dark"] #page-my-month .mm-protocol-ok { color:#4ADE80; }
body[data-theme="dark"] .ewto-wd.ok { background:#0B2E22; color:#34D399; }
body[data-theme="dark"] .ewto-zone-crit,
body[data-theme="dark"] .ewto-rest-flag,
body[data-theme="dark"] .ewto-shift-remove:hover { background:#3B1212; color:#F87171; }
body[data-theme="dark"] .ewto-type-unknown { background:#3B1212; color:#F87171; border-color:#F87171; }
body[data-theme="dark"] .ewto-block { background:#3B1212; color:#F87171; border-color:#F87171; }
body[data-theme="dark"] .ewto-block.ewto-block-warn { background:#3B2A0F; color:#FCD34D; border-color:#FCD34D; }
body[data-theme="dark"] .ewto-stopped { background:#3B1212; border-color:#F87171; }
body[data-theme="dark"] .ewto-stopped-title,
body[data-theme="dark"] .ewto-stopped-body { color:#F87171; }
body[data-theme="dark"] .ewto-sub-err { color:#F87171; }
body[data-theme="dark"] .ewto-zone-warn,
body[data-theme="dark"] .ewto-rest-flag-unsupported,
body[data-theme="dark"] .ewto-sixthday-flag,
body[data-theme="dark"] .ewto-day-flag-partial,
body[data-theme="dark"] .ewto-day-flag-pending,
body[data-theme="dark"] .ewto-unsaved { background:#3A2A0A; color:#FBBF24; }
body[data-theme="dark"] .ewto-wd.wait { background:#3A2A0A; color:#FBBF24; border-color:#FBBF24; }
body[data-theme="dark"] .ewto-unsaved-title,
body[data-theme="dark"] .ewto-unsaved-text,
body[data-theme="dark"] .ewto-unsaved-cancel { color:#FCD34D; }
body[data-theme="dark"] .ewto-unsaved-discard,
body[data-theme="dark"] .ewto-day-total-unsaved { color:#FBBF24; border-color:#FBBF24; }
body[data-theme="dark"] .ewto-undeclared,
body[data-theme="dark"] .ewto-wd.warn,
body[data-theme="dark"] .ewto-day-flag-undeclared { background:#3A1D0A; color:#FB923C; }
body[data-theme="dark"] .ewto-undeclared-title,
body[data-theme="dark"] .ewto-undeclared-dates,
body[data-theme="dark"] .ewto-undeclared-hint { color:#FB923C; }
body[data-theme="dark"] .ewto-leave-pill { background:#2C1B4D; color:#C4B5FD; }
body[data-theme="dark"] .ewto-add-leave,
body[data-theme="dark"] .ewto-add-leave:hover,
body[data-theme="dark"] .ewto-leave-row .ewto-line-type,
body[data-theme="dark"] .ewto-type-pick.leave { color:#C4B5FD; }
body[data-theme="dark"] .ewto-effective { background:#10233A; }
body[data-theme="dark"] .ewto-effective-error { background:#3A1212; color:#FCA5A5; border-color:#FCA5A5; }
body[data-theme="dark"] .ewto-effective-title,
body[data-theme="dark"] .ewto-effective-text,
body[data-theme="dark"] .ewto-effective-opt,
body[data-theme="dark"] .ewto-effective-cancel { color:#7FB3E8; }
body[data-theme="dark"] .ewto-retry-btn { color:#7FB3E8; border-color:#3E7CB1; }
body[data-theme="dark"] .ewto-subs-link { color:#7FB3E8; }
body[data-theme="dark"] .ewto-wd-note { background:rgba(0,0,0,0.25); }

/* από index.html, μπλοκ 20 */
/* W2.E.1 show-list modal — minimal styles, reuses var(--surface/text/muted/border) */
.cfx-anath-show-info { background:var(--surface); border-radius:8px; padding:12px; margin-bottom:1rem; }
.cfx-anath-show-row { display:flex; justify-content:space-between; padding:6px 0; border-bottom:0.5px solid var(--border); }
.cfx-anath-show-row:last-child { border-bottom:none; }
.cfx-anath-show-label { color:var(--muted); font-size:13px; }
.cfx-anath-show-value { color:var(--text); font-size:13px; font-weight:500; text-align:right; }
.cfx-anath-show-items-header { font-size:11px; font-weight:600; color:var(--muted); letter-spacing:0.5px; margin-bottom:8px; }
.cfx-anath-show-items { display:flex; flex-direction:column; gap:6px; max-height:300px; overflow-y:auto; }
.cfx-anath-show-item { background:var(--surface); border-radius:6px; padding:8px 10px; border:0.5px solid var(--border); }
.cfx-anath-show-empty { background:var(--surface); border-radius:8px; padding:16px; text-align:center; color:var(--muted); font-size:13px; }
.cfx-anath-show-state { padding:24px; text-align:center; color:var(--muted); font-size:14px; }
.cfx-anath-show-error { display:flex; flex-direction:column; gap:12px; align-items:center; }
.cfx-anath-show-retry { padding:8px 16px; border-radius:6px; border:1px solid var(--border); background:var(--surface); cursor:pointer; font-size:13px; color:var(--text); }
.cfx-anath-show-retry:hover { background:var(--brand-primary); color:#fff; border-color:var(--brand-primary); }

/* W2.E.2 — popover divider (separator between menu groups) */
.cfx-anath-popover-divider { height:1px; background:var(--border); margin:4px 0; }

/* W2.E.2 — reorder modal: number input rows */
.cfx-anath-reorder-row { display:flex; align-items:center; gap:10px; padding:6px 0; border-bottom:0.5px solid var(--border); }
.cfx-anath-reorder-row:last-child { border-bottom:none; }
.cfx-anath-reorder-input { width:50px; padding:6px 8px; border:1px solid var(--border); border-radius:6px; font-size:14px; text-align:center; }
.cfx-anath-reorder-name { flex:1; font-size:14px; color:var(--text); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* W2.E.2 — danger popover item (delete option, red text) */
.cfx-anath-popover-item.danger { color:#A32D2D; }
.cfx-anath-popover-item.danger:hover { background:rgba(163,45,45,0.08); }

/* feat/warehouse-shelves-tiles — Αποθήκη: νέα όψη (κεφαλίδα, καρτέλες-λέξεις, πλακίδια ραφιών). Όλα με πρόθεμα .whs- / #page-warehouse.
   Φόντο = της Αρχικής (#page-dashboard). Οι καρτέλες Θέσεις/Λίστα/Ρυθμίσεις μένουν ως έχουν. */
#page-warehouse{background:var(--cfx-page-bg, #F1F6FC)}
#page-warehouse .whs-head{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px;margin-bottom:6px}
#page-warehouse .whs-title-row{display:flex;align-items:center;gap:10px}
#page-warehouse .whs-title{font-family:inherit;font-size:24px;font-weight:700;color:#0F172A}
#page-warehouse .whs-back{background:none;border:none;font:inherit;font-size:15px;color:#475569;cursor:pointer;padding:4px 8px}
#page-warehouse .whs-actions{display:flex;gap:8px;flex-wrap:wrap}
#page-warehouse .whs-btn{font-family:inherit;font-size:14px;font-weight:600;height:40px;padding:0 16px;border-radius:10px;border:1px solid #CBD5E1;background:#FFFFFF;color:#0F172A;cursor:pointer}
#page-warehouse .whs-btn.whs-btn-primary{background:#1D6FD8;border-color:#1D6FD8;color:#FFFFFF}
#page-warehouse .whs-tabs{display:flex;gap:24px;border-bottom:1px solid #E2E8F0;margin-bottom:16px;overflow-x:auto}
#page-warehouse .whs-tab{font-family:inherit;font-size:15px;font-weight:600;background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;padding:10px 2px;color:#475569;cursor:pointer;white-space:nowrap}
#page-warehouse .whs-tab.is-active{color:#1D6FD8;border-bottom-color:#1D6FD8}
#page-warehouse .whs-summary{font-size:14px;color:#475569;margin-bottom:14px}
#page-warehouse .whs-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(188px,1fr));gap:12px;margin-bottom:20px;align-items:stretch}
#page-warehouse .whs-grid.whs-legacy{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}
#page-warehouse .whs-msg{grid-column:1/-1;text-align:center;padding:30px;color:#475569}
#page-warehouse .whs-cell{position:relative}
#page-warehouse .whs-card{width:100%;height:100%;box-sizing:border-box;background:#FFFFFF;border:1px solid #E2E8F0;border-radius:12px;padding:14px;color:#0F172A;font-family:inherit;display:flex;flex-direction:column}
#page-warehouse .whs-card.is-empty{background:#F8FAFC;color:#64748B}
#page-warehouse .whs-card.is-open{position:absolute;top:0;left:0;height:auto;min-height:100%;width:calc(200% + 12px);z-index:20;border-color:#1D6FD8;box-shadow:0 10px 28px rgba(15,23,42,.18)}
#page-warehouse .whs-card.is-open.to-left{left:auto;right:0}
#page-warehouse .whs-card.is-open.is-single{width:100%}
#page-warehouse .whs-top{display:flex;justify-content:space-between;align-items:flex-start;gap:6px;margin-bottom:6px}
#page-warehouse .whs-name{font-family:inherit;font-size:16px;font-weight:800;color:inherit;background:none;border:none;padding:0;display:flex;align-items:center;gap:4px;text-align:left;min-width:0;overflow-wrap:anywhere}
#page-warehouse button.whs-name{cursor:pointer}
#page-warehouse .whs-name svg{width:14px;height:14px;flex:none;transition:transform .15s}
#page-warehouse .is-open .whs-name svg{transform:rotate(180deg)}
#page-warehouse .whs-chip{font-size:12px;font-weight:700;padding:2px 10px;border-radius:999px;white-space:nowrap;flex:none}
#page-warehouse .whs-chip.is-full{background:#FEE2E2;color:#991B1B}
#page-warehouse .whs-chip.is-none{background:#F1F5F9;color:#475569}
#page-warehouse .whs-count{display:flex;align-items:baseline;gap:6px;margin-bottom:8px}
#page-warehouse .whs-n{font-size:30px;font-weight:800;line-height:1.1}
#page-warehouse .whs-cap{font-size:13px;color:#475569}
#page-warehouse .whs-bar{height:6px;border-radius:3px;background:#E2E8F0;overflow:hidden}
#page-warehouse .whs-bar i{display:block;height:100%;border-radius:3px}
#page-warehouse .whs-area{font-size:12px;color:#475569;min-height:16px;margin:6px 0 8px}
#page-warehouse .whs-btns{display:flex;gap:8px;margin-top:auto}
#page-warehouse .whs-btns button{flex:1;height:44px;border-radius:10px;font-family:inherit;font-size:14px;font-weight:700;border:1px solid #CBD5E1;background:#FFFFFF;color:#0F172A;cursor:pointer}
#page-warehouse .whs-btns button[data-act="add"]{border-color:#1D6FD8;color:#1D6FD8}
#page-warehouse .whs-list{margin-top:10px;max-height:220px;overflow-y:auto;border-top:1px solid #E2E8F0}
#page-warehouse .whs-note{padding:12px 0;font-size:13px;color:#475569}
#page-warehouse .whs-row{display:grid;grid-template-columns:76px minmax(0,1fr) 84px 64px 74px;align-items:center;gap:8px;min-height:44px;box-sizing:border-box;border-bottom:1px solid #E2E8F0;font-size:13px;color:#1D6FD8;cursor:pointer;padding:0 4px}
#page-warehouse .whs-row.no-price{grid-template-columns:76px minmax(0,1fr) 84px 64px}
#page-warehouse .whs-row > span{white-space:nowrap}
#page-warehouse .whs-row .whs-code{color:#0F172A;font-size:16px;font-weight:800}
#page-warehouse .whs-row .whs-ql{overflow:hidden;text-overflow:ellipsis}
#page-warehouse .whs-row.is-expanded{background:#F1F6FD}
#page-warehouse .whs-row.is-expanded .whs-ql{white-space:normal;overflow:visible;padding:6px 0}
#page-warehouse .whs-row .whs-price{text-align:right;font-weight:800}
@media (max-width:520px){
  #page-warehouse .whs-row{grid-template-columns:58px minmax(0,1fr) 68px 50px 62px;gap:5px;font-size:12px}
  #page-warehouse .whs-row.no-price{grid-template-columns:58px minmax(0,1fr) 68px 50px}
  #page-warehouse .whs-row .whs-code{font-size:15px}
}

/* feat/warehouse-positions-list — Αποθήκη: καρτέλες «Θέσεις» (γραμμή ανά θέση) και «Λίστα» (κάρτα ανά πελάτη, μεταφορά χαλιών) */
#page-warehouse .whp-top{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px}
#page-warehouse .whp-top .whs-summary{margin-bottom:0}
#page-warehouse .whp-add{font-family:inherit;font-size:14px;font-weight:700;height:44px;padding:0 18px;border-radius:10px;border:1px solid #1D6FD8;background:#FFFFFF;color:#1D6FD8;cursor:pointer}
#page-warehouse .whp-grid{display:flex;flex-direction:column;gap:10px;margin-bottom:20px}
#page-warehouse .whp-item{background:#FFFFFF;border:1px solid #E2E8F0;border-radius:12px;padding:12px 16px;box-sizing:border-box;min-width:0}
#page-warehouse .whp-item.is-open{border-color:#1D6FD8}
#page-warehouse .whp-row{display:flex;align-items:center;gap:16px;min-width:0}
#page-warehouse .whp-name{flex:1 1 0;min-width:0;font-family:inherit;font-size:17px;font-weight:800;color:#0F172A;background:none;border:none;padding:0;text-align:left;cursor:pointer;word-break:normal;overflow-wrap:break-word;line-height:1.3}
#page-warehouse .whp-meter{flex:0 0 220px;min-width:0}
#page-warehouse .whp-count{font-size:13px;color:#475569;margin-bottom:6px}
#page-warehouse .whp-count b{font-size:17px;font-weight:800;color:#0F172A}
#page-warehouse .whp-item .whs-list{max-height:260px}
#page-warehouse .whl-search{position:relative;margin-bottom:12px}
#page-warehouse .whl-search input{width:100%;box-sizing:border-box;height:52px;padding:0 48px 0 16px;font-family:inherit;font-size:18px;color:#0F172A;background:#FFFFFF;border:1px solid #CBD5E1;border-radius:12px;-webkit-appearance:none;appearance:none}
#page-warehouse .whl-search input:focus{outline:2px solid #1D6FD8;outline-offset:0;border-color:#1D6FD8}
#page-warehouse .whl-clear{position:absolute;right:4px;top:4px;width:44px;height:44px;border:none;background:none;font-size:26px;line-height:1;color:#475569;cursor:pointer}
#page-warehouse .whl-clear[hidden]{display:none}
#page-warehouse .whl-filters{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
#page-warehouse .whl-fchip{font-family:inherit;font-size:14px;font-weight:600;height:40px;padding:0 16px;border-radius:999px;border:1px solid #CBD5E1;background:#FFFFFF;color:#475569;cursor:pointer}
#page-warehouse .whl-fchip.is-active{background:#1D6FD8;border-color:#1D6FD8;color:#FFFFFF}
#page-warehouse .whl-card{background:#FFFFFF;border:1px solid #E2E8F0;border-radius:12px;margin-bottom:10px;min-width:0;overflow:hidden}
#page-warehouse .whl-card.is-open{border-color:#1D6FD8}
#page-warehouse .whl-head{display:flex;flex-direction:column;align-items:stretch;gap:8px;width:100%;box-sizing:border-box;padding:12px 16px;min-height:44px;font-family:inherit;text-align:left;background:none;border:none;cursor:pointer;color:#0F172A}
#page-warehouse .whl-title{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;min-width:0}
#page-warehouse .whl-cname{font-size:17px;font-weight:800;word-break:normal;overflow-wrap:break-word;min-width:0}
#page-warehouse .whl-ccode{font-size:13px;color:#475569}
#page-warehouse .whl-chips{display:flex;flex-wrap:wrap;gap:6px}
#page-warehouse .whl-chip{font-size:12px;font-weight:700;padding:3px 10px;border-radius:999px;background:#DBEAFE;color:#1E40AF;white-space:nowrap}
#page-warehouse .whl-chip.is-none{background:#FEF3C7;color:#92400E}
#page-warehouse .whl-body{border-top:1px solid #E2E8F0;padding:8px 16px 14px}
#page-warehouse .whl-all{display:flex;align-items:center;gap:10px;min-height:44px;font-size:14px;font-weight:600;color:#475569;cursor:pointer}
#page-warehouse .whl-body input[type=checkbox]{width:22px;height:22px;flex:none;margin:0;accent-color:#1D6FD8}
#page-warehouse .whl-rows{max-height:264px;overflow-y:auto;border-top:1px solid #E2E8F0}
#page-warehouse .whl-crow{display:flex;align-items:center;gap:10px;height:44px;box-sizing:border-box;border-bottom:1px solid #F1F5F9;cursor:pointer;min-width:0}
#page-warehouse .whl-ccode2{flex:none;min-width:56px;font-size:16px;font-weight:800;color:#0F172A}
#page-warehouse .whl-cq{flex:1 1 0;min-width:0;font-size:14px;font-weight:600;color:#1D6FD8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#page-warehouse .whl-pl{flex:none;max-width:45%;font-size:12px;font-weight:700;padding:3px 10px;border-radius:999px;background:#DBEAFE;color:#1E40AF;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#page-warehouse .whl-pl.is-none{background:#FEF3C7;color:#92400E}
#page-warehouse .whl-move{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:12px}
#page-warehouse .whl-from{flex:1 1 100%;font-size:14px;font-weight:700;color:#0F172A;overflow-wrap:break-word}
#page-warehouse .whl-dest{flex:1 1 180px;min-width:0;height:44px;padding:0 12px;font-family:inherit;font-size:15px;color:#0F172A;background:#FFFFFF;border:1px solid #CBD5E1;border-radius:10px}
#page-warehouse .whl-go{flex:0 0 auto;height:44px;padding:0 22px;font-family:inherit;font-size:15px;font-weight:700;color:#FFFFFF;background:#1D6FD8;border:1px solid #1D6FD8;border-radius:10px;cursor:pointer}
#page-warehouse .whl-go:disabled{background:#CBD5E1;border-color:#CBD5E1;cursor:not-allowed}
#page-warehouse .whl-msg{margin-top:10px;padding:10px 12px;border-radius:10px;font-size:14px;background:#F1F5F9;color:#0F172A}
#page-warehouse .whl-msg.is-error{background:#FEE2E2;color:#991B1B}
#page-warehouse .whl-msg[hidden]{display:none}
#page-warehouse .whl-more{display:block;width:100%;height:48px;margin:6px 0 20px;font-family:inherit;font-size:15px;font-weight:700;color:#1D6FD8;background:#FFFFFF;border:1px solid #1D6FD8;border-radius:12px;cursor:pointer}
@media (max-width:520px){
  #page-warehouse .whp-row{flex-direction:column;align-items:stretch;gap:10px}
  #page-warehouse .whp-meter{flex:none}
}

/* feat/workshop-per-card — Εργαστήριο (#page-cards): μετρητές σταδίων, ΜΙΑ κάρτα ανά καρτέλα, λίστα χαλιών επί τόπου. Όλα με πρόθεμα .wsc- / #page-cards.
   Φόντο = της Αρχικής. Ονόματα και ποσά με τη συνηθισμένη γραμματοσειρά (όχι τη φαρδιά των τίτλων). */
#page-cards{background:var(--cfx-page-bg, #F1F6FC)}
#page-cards .wsc-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}
#page-cards .wsc-title{font-family:inherit;font-size:24px;font-weight:700;color:#0F172A}
#page-cards .wsc-back{background:none;border:none;font:inherit;font-size:15px;color:#475569;cursor:pointer;padding:4px 8px}
#page-cards .wsc-searchwrap{margin-bottom:14px}
#page-cards .wsc-search{width:100%;box-sizing:border-box;height:44px;background:#FFFFFF;border:1px solid #CBD5E1;border-radius:10px;padding:0 14px;font-family:inherit;font-size:15px;color:#0F172A;outline:none}
#page-cards .wsc-search:focus{border-color:#1D6FD8}
#page-cards .wsc-summary{background:#FFFFFF;border:1px solid #E2E8F0;border-radius:12px;padding:14px;margin-bottom:14px}
#page-cards .wsc-sumhead{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:12px}
#page-cards .wsc-sumtitle{font-family:inherit;font-size:13px;font-weight:700;letter-spacing:.06em;color:#475569}
#page-cards .wsc-sumcount{font-size:14px;color:#475569}
#page-cards .wsc-counters{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}
#page-cards .wsc-cnt{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;box-sizing:border-box;min-height:44px;padding:12px 14px;background:#FFFFFF;border:1px solid #E2E8F0;border-radius:12px;font-family:inherit;color:#0F172A;cursor:pointer}
#page-cards .wsc-cnt.is-on{border:2px solid #1D6FD8;padding:11px 13px}
#page-cards .wsc-cnt.is-zero{color:#94A3B8}
#page-cards .wsc-cnt:disabled{cursor:default}
#page-cards .wsc-cnt{min-width:0;overflow-wrap:anywhere}
#page-cards .wsc-cn{font-size:30px;font-weight:800;line-height:1.1}
#page-cards .wsc-cl{font-size:15px;font-weight:700}
#page-cards .wsc-cd{font-size:12px;font-weight:400;color:#475569}
#page-cards .wsc-cnt.is-zero .wsc-cd{color:#94A3B8}
#page-cards .wsc-chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
#page-cards .wsc-chip{height:40px;padding:0 16px;font-family:inherit;font-size:14px;font-weight:600;color:#0F172A;background:#FFFFFF;border:1px solid #CBD5E1;border-radius:999px;cursor:pointer}
#page-cards .wsc-chip.is-active{background:#1D6FD8;border-color:#1D6FD8;color:#FFFFFF}
#page-cards .wsc-card{background:#FFFFFF;border:1px solid #E2E8F0;border-radius:12px;margin-bottom:10px;overflow:hidden}
#page-cards .wsc-card.is-open{border-color:#1D6FD8}
#page-cards .wsc-row{display:flex;align-items:center;gap:12px;padding:14px}
#page-cards .wsc-main{flex:1;min-width:0;cursor:pointer}
#page-cards .wsc-name{font-family:inherit;font-size:17px;font-weight:800;color:#0F172A;overflow-wrap:anywhere}
#page-cards .wsc-code{font-family:inherit;font-weight:800;color:#1D6FD8}
#page-cards .wsc-sub{font-size:13px;color:#475569;margin-top:2px}
#page-cards .wsc-ri{display:inline-flex;align-items:center;gap:4px;margin-left:8px;padding:0 8px;font-size:12px;border:1px solid;border-radius:999px;vertical-align:middle}
#page-cards .wsc-sync{display:inline-block;margin-left:8px;padding:1px 8px;font-size:12px;font-weight:600;border-radius:999px;vertical-align:middle;background:#F1F5F9;color:#475569}
#page-cards .wsc-sync-synced{background:#DCFCE7;color:#166534}
#page-cards .wsc-sync-pending{background:#FEF3C7;color:#92400E}
#page-cards .wsc-notes{font-size:14px;color:#475569;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#page-cards .wsc-stages{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
#page-cards .wsc-stg{display:inline-block;font-size:12px;font-weight:700;padding:2px 10px;border-radius:999px;white-space:nowrap}
#page-cards .wsc-stg-received{background:#F1F5F9;color:#334155}
#page-cards .wsc-stg-washing{background:#DBEAFE;color:#1E40AF}
#page-cards .wsc-stg-packed{background:#FEF3C7;color:#92400E}
#page-cards .wsc-stg-stored{background:#FFEDD5;color:#9A3412}
#page-cards .wsc-stg-delivered{background:#DCFCE7;color:#166534}
#page-cards .wsc-amt{text-align:right;flex:none}
#page-cards .wsc-money{font-family:inherit;font-size:17px;font-weight:800;color:#0F172A;white-space:nowrap}
#page-cards .wsc-paid{font-size:13px;font-weight:700;margin-top:2px}
#page-cards .wsc-paid.is-paid{color:#166534}
#page-cards .wsc-paid.is-due{color:#B91C1C}
#page-cards .wsc-arrow{flex:none;width:44px;height:44px;display:flex;align-items:center;justify-content:center;background:#FFFFFF;border:1px solid #CBD5E1;border-radius:10px;color:#0F172A;cursor:pointer;padding:0}
#page-cards .wsc-arrow svg{transition:transform .15s}
#page-cards .wsc-card.is-open .wsc-arrow{border-color:#1D6FD8;color:#1D6FD8}
#page-cards .wsc-card.is-open .wsc-arrow svg{transform:rotate(180deg)}
#page-cards .wsc-rugs{border-top:1px solid #E2E8F0;padding:6px 14px 10px}
#page-cards .wsc-rugs[hidden]{display:none}
#page-cards .wsc-rugs-empty{font-size:14px;color:#475569;padding:10px 0}
#page-cards .wsc-rugs-list{max-height:calc(44px * 6);overflow-y:auto}
#page-cards .wsc-rug{display:grid;grid-template-columns:84px minmax(0,1fr) 96px 72px 84px auto;align-items:center;gap:12px;min-height:44px;border-bottom:1px solid #F1F5F9;font-size:14px;color:#0F172A}
#page-cards .wsc-rug:last-child{border-bottom:none}
#page-cards .wsc-rc{font-size:16px;font-weight:800;color:#000000}
#page-cards .wsc-rq{color:#1D6FD8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#page-cards .wsc-rs,#page-cards .wsc-ra{color:#334155;white-space:nowrap}
#page-cards .wsc-rp{font-weight:700;text-align:right;white-space:nowrap}
#page-cards .wsc-rg{text-align:right}
#page-cards .wsc-morewrap{display:flex;justify-content:center;margin:6px 0 14px}
#page-cards .wsc-more{height:44px;padding:0 24px;font-family:inherit;font-size:15px;font-weight:700;color:#1D6FD8;background:#FFFFFF;border:1px solid #1D6FD8;border-radius:12px;cursor:pointer}
@media (max-width:640px){
  #page-cards{padding-left:12px;padding-right:12px}
  #page-cards .wsc-summary{padding:10px}
  #page-cards .wsc-counters{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
  #page-cards .wsc-cnt{padding:10px 5px}
  #page-cards .wsc-cnt.is-on{padding:9px 4px}
  #page-cards .wsc-row{gap:8px;padding:12px}
  #page-cards .wsc-rug{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"c g" "q q" "s a" "p p";gap:2px 10px;padding:6px 0}
  #page-cards .wsc-rc{grid-area:c}
  #page-cards .wsc-rg{grid-area:g}
  #page-cards .wsc-rq{grid-area:q}
  #page-cards .wsc-rs{grid-area:s}
  #page-cards .wsc-ra{grid-area:a;text-align:right}
  #page-cards .wsc-rp{grid-area:p;text-align:left}
  #page-cards .wsc-rs:empty,#page-cards .wsc-ra:empty,#page-cards .wsc-rp:empty{display:none}
}
