/* ============================================================================
   base.css — Reset, τυπογραφία, σκελετός εφαρμογής (sidebar + topbar + view).
   ========================================================================== */

*, *::before, *::after { box-sizing: border-box; }

/* Το [hidden] του browser χάνει από κάθε class που ορίζει display (π.χ. .login{display:grid}).
   Χωρίς αυτό, η οθόνη σύνδεσης έμενε πάνω από την εφαρμογή μετά τη σύνδεση. */
[hidden] { display: none !important; }

html, body { margin: 0; padding: 0; height: 100%; }

body {
  font-family: var(--sans);
  font-size: var(--fs-base);
  line-height: 1.55;
  color: var(--ink);
  /* Το φόντο του esdocs: στρωμένες ακτινωτές λάμψεις πάνω σε κρεμ κλίση. Δεν
     είναι διακόσμηση — δίνει βάθος ώστε οι λευκές κάρτες να «κάθονται» πάνω
     του αντί να κολλάνε σε επίπεδο γκρι.

     ⚠⚠ ΟΙ ΔΥΟ ΤΕΛΕΥΤΑΙΕΣ ΛΑΜΨΕΙΣ ΜΠΗΚΑΝ 23.09.2026 ΚΑΙ ΕΧΟΥΝ ΛΟΓΟ.
     ΜΕΤΡΗΘΗΚΕ: οι αρχικές λάμψεις είναι ΤΕΡΑΣΤΙΕΣ (900x520) και κάθονται στην
     ΚΟΡΥΦΗ — εκεί που δεν υπάρχουν κάρτες. Πάνω σε μία κάρτα 700x92 στη μέση
     της λίστας το φόντο άλλαζε μόλις **1,20 στα 255** κατακόρυφα και **0,00**
     οριζόντια — κάτω από το όριο ορατότητας (~2/255) που καταγράφηκε όταν
     αφαιρέθηκε το θόλωμα. Οι διάφανες κάρτες δεν είχαν ΤΙΠΟΤΑ να δείξουν:
     γυαλί πάνω σε επίπεδο χρώμα είναι απλώς χρώμα.

     Οι δύο νέες είναι ΜΙΚΡΟΤΕΡΕΣ και μέσα στη σελίδα (δεξιά-μέση, αριστερά-
     κάτω), ώστε το φόντο να αλλάζει σε κλίμακα ΚΑΡΤΑΣ. Μετά: **7,59/255 στη
     χειρότερη κάρτα** (από 1,20), 11,1 μέσος όρος — **6,3 φορές**. Το πιο
     σκούρο σημείο μένει στο 224/255: η σελίδα παραμένει καθαρά κρεμ.
     Στη ΝΥΧΤΑ αντίστοιχα: 1,29 → **8,73**, μέση 10,6.
     ⚠ ΤΟ ΣΥΝΟΛΙΚΟ ΕΥΡΟΣ ΔΕΝ ΑΥΞΗΘΗΚΕ ΟΥΣΙΑΣΤΙΚΑ (22→26): η αλλαγή δίνει
     ΤΟΠΙΚΗ διακύμανση, όχι περισσότερη αντίθεση. Αυτό ήταν το ζητούμενο —
     περισσότερη αντίθεση θα έμοιαζε με προβολέα, όχι με γυαλί.
     ⚠ ΜΗΝ τις μεγαλώσεις «για να φαίνονται καλύτερα»: όσο μεγαλώνει η ακτίνα
     τόσο πιο ΕΠΙΠΕΔΟ γίνεται το φόντο πάνω σε μία κάρτα. Είναι αντιστρόφως. */
  background:
    radial-gradient(900px 520px at 14% -10%, rgba(208,171,100,.12), transparent 60%),
    radial-gradient(820px 620px at 104% -4%, rgba(10,25,47,.06), transparent 55%),
    radial-gradient(700px 700px at 50% 118%, rgba(208,171,100,.06), transparent 60%),
    radial-gradient(880px 600px at 92% 50%, rgba(10,25,47,.08), transparent 62%),
    radial-gradient(880px 600px at 4% 84%, rgba(176,137,76,.18), transparent 62%),
    linear-gradient(170deg, #fdfbf7, #f7f3ec 60%, #f4efe6);
  background-attachment: fixed;
  /* ⚠ ΧΡΩΜΑ ΒΑΣΗΣ — ΤΟ ΛΕΥΚΟ ΚΑΤΩ ΑΠΟ ΤΗ ΣΕΛΙΔΑ ΣΤΟ iPhone (05.10.2026). Εντολή
     ιδιοκτήτη: «you can scroll way further down and there is just white there...
     especially when there are no transfers today». ΜΕΤΡΗΜΕΝΟ στο Safari του iPhone:
     το ύψος ΔΕΝ κρατιέται (12 κάρτες 2764px → άδεια μέρα 761px). Το λευκό είναι το
     ελαστικό τράβηγμα του iOS ΠΕΡΑ από το τέλος της σελίδας: εκεί το Safari βάφει το
     ΧΡΩΜΑ του φόντου — και το φόντο μας ήταν μόνο κλίσεις, χωρίς χρώμα, άρα λευκό.
     Στην άδεια μέρα η σελίδα είναι κοντή και κάθε τίναγμα φτάνει στο τέλος· γι' αυτό
     φαινόταν «κυρίως» εκεί. Χρώμα = η ΚΑΤΩ άκρη της κλίσης.
     ⚠ ΣΤΟ body, ΟΧΙ στο html: φόντο στο html σταματά τη μεταφορά του φόντου του body
     στον καμβά, και οι κλίσεις θα έπιαναν μόνο το πρώτο ύψος οθόνης.
     ⚠ ΚΑΙ στους δύο κανόνες της νύχτας πιο κάτω: το `background:` εκεί το μηδενίζει. */
  background-color: #f4efe6;
  -webkit-font-smoothing: antialiased;
  -webkit-text-size-adjust: 100%;
}
/* Νύχτα — «obsidian» του esdocs.

   Δύο κανόνες, όχι ένας, και ΟΧΙ `:not([data-theme])`: στο «auto» το attribute
   λείπει, οπότε ένας τέτοιος κανόνας θα έβαζε νυχτερινό φόντο και σε
   λειτουργικό που είναι στο φως. Η ρητή επιλογή νύχτας πιάνει πάντα· το
   «auto» πιάνει μόνο μέσα από το media query. */
:root[data-theme="dark"] body {
  background:
    radial-gradient(900px 520px at 84% -8%, rgba(208,171,100,.12), transparent 60%),
    radial-gradient(820px 620px at 6% 6%, rgba(41,86,150,.20), transparent 58%),
    /* Οι δύο «καρτο-κλίμακας» λάμψεις — αναλυτική σημείωση στο body. */
    radial-gradient(780px 520px at 92% 52%, rgba(41,86,150,.24), transparent 62%),
    radial-gradient(780px 520px at 4% 86%, rgba(208,171,100,.12), transparent 62%),
    linear-gradient(180deg, #0a1428, #060b17 62%, #0c1a33);
  background-attachment: fixed;
  background-color: #0c1a33; /* το λευκό του iPhone — βλ. body */
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) body {
    background:
      radial-gradient(900px 520px at 84% -8%, rgba(208,171,100,.12), transparent 60%),
      radial-gradient(820px 620px at 6% 6%, rgba(41,86,150,.20), transparent 58%),
      /* Οι δύο «καρτο-κλίμακας» λάμψεις — αναλυτική σημείωση στο body. */
      radial-gradient(780px 520px at 92% 52%, rgba(41,86,150,.24), transparent 62%),
      radial-gradient(780px 520px at 4% 86%, rgba(208,171,100,.12), transparent 62%),
      linear-gradient(180deg, #0a1428, #060b17 62%, #0c1a33);
    background-attachment: fixed;
    background-color: #0c1a33; /* το λευκό του iPhone — βλ. body */
  }
}

body.locked { overflow: hidden; }

/* Μπάρες κύλισης: λεπτές, ναυτικές, χωρίς ράγα (Chrome/Edge/Firefox,
   24.09.2026). ⚠ Κανένα `::-webkit-scrollbar` εδώ: στο Safari θα έκανε την
   αόρατη μπάρα του Mac ΜΟΝΙΜΗ. */
html, .nav, .pstrip, .daystrip, .modal-body, .tmenu, .locmenu, .tablewrap {
  scrollbar-width: thin;
  scrollbar-color: var(--scroll-thumb) transparent;
}

h1, h2, h3, h4 { margin: 0; font-weight: var(--h-weight); line-height: 1.22; text-wrap: balance; letter-spacing: var(--h-track); }
h1 { font-family: var(--serif); font-size: var(--fs-2xl); }
h2 { font-family: var(--serif); font-size: var(--fs-xl); }
h3 { font-size: var(--fs-md); font-weight: 600; letter-spacing: 0; }
p  { margin: 0 0 var(--s3); }

a { color: var(--gold-text); text-decoration: none; }
a:hover { text-decoration: underline; }

button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; }
:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; border-radius: var(--r-xs); }

.num { font-variant-numeric: tabular-nums; }
.mono { font-family: var(--mono); }
.muted { color: var(--muted); }
.faint { color: var(--faint); }
.tiny { font-size: var(--fs-xs); }
.sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.hidden { display: none !important; }
.spread { display: flex; align-items: center; justify-content: space-between; gap: var(--s3); }
.row { display: flex; align-items: center; gap: var(--s2); }
.row-wrap { display: flex; align-items: center; gap: var(--s2); flex-wrap: wrap; }
.grow { flex: 1 1 auto; min-width: 0; }
/* ⚠ ΕΝΑ ΚΕΝΟ ΔΕΝ ΦΤΑΝΕΙ ΓΙΑ ΟΛΑ. Το `.stack` ήταν το μοναδικό εργαλείο
   στοίβαξης της εφαρμογής και έδινε 12px σε ΚΑΘΕ περίπτωση: ανάμεσα σε δύο
   γραμμές της ίδιας κάρτας, και ανάμεσα σε δύο ΑΣΧΕΤΕΣ ενότητες. Τέσσερα
   μπλοκ στοιβαγμένα με το ίδιο κενό διαβάζονται σαν ΕΝΑ μπλοκ — γι' αυτό οι
   οθόνες έμοιαζαν «γκρι μάζα» και το μάτι δεν έβρισκε πού τελειώνει το ένα.
   Τρία κενά, με νόημα το καθένα. */
.stack { display: flex; flex-direction: column; gap: var(--s3); }      /* 12px — μέσα σε μια ενότητα */
.stack-tight { display: flex; flex-direction: column; gap: var(--s2); } /* 8px  — γραμμές που ανήκουν μαζί */
.stack-loose { display: flex; flex-direction: column; gap: var(--s5); } /* 22px — ΑΝΑΜΕΣΑ σε ενότητες */
.truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ── Σκελετός ───────────────────────────────────────────────────────────── */
.app { display: flex; min-height: 100vh; }

.sidebar {
  position: fixed; inset: 0 auto 0 0; width: var(--sidebar); z-index: 40;
  display: flex; flex-direction: column;
  background: var(--glass-2);
  -webkit-backdrop-filter: var(--blur); backdrop-filter: var(--blur);
  border-right: 1px solid var(--line-2);
  /* ⚠ ΚΑΙ `visibility`, ΟΧΙ ΜΟΝΟ ΜΕΤΑΤΟΠΙΣΗ. Ένα μενού σπρωγμένο έξω από την
     οθόνη παραμένει ΕΣΤΙΑΣΙΜΟ: με Tab, η εστίαση χανόταν για 19 πατήματα σε
     γραμμές που ο χρήστης δεν έβλεπε, και το Enter τον πήγαινε σε οθόνη που
     δεν κατάλαβε ότι διάλεξε. Το `visibility: hidden` το βγάζει από τη σειρά.
     Η καθυστέρηση ίση με τη διάρκεια είναι ΑΠΑΡΑΙΤΗΤΗ: χωρίς αυτήν το μενού
     εξαφανίζεται ακαριαία και δεν βλέπεις ποτέ το γλίστρημα. Στο άνοιγμα η
     καθυστέρηση μηδενίζεται, αλλιώς εμφανιζόταν αφού είχε ήδη φτάσει. */
  transform: translateX(-100%); visibility: hidden;
  transition: transform var(--t), visibility 0s var(--t-dur);
}
.sidebar.open { transform: none; visibility: visible; transition-delay: 0s, 0s; }
@media (min-width: 1024px) { .sidebar { transform: none; visibility: visible; transition-delay: 0s, 0s; } }
/* ⚠ Ο ΣΚΕΛΕΤΟΣ ΥΠΟΧΩΡΕΙ (24.09.2026, «Βάθος με μπλε σκιές»): το μενού κάθεται
   ένα σκαλί ΠΙΟ ΚΑΤΩ από τη σελίδα, ώστε να φωτίζεται η δουλειά, όχι η πλοήγηση.
   Μόνο οθόνη — στο χαρτί το μενού δεν τυπώνεται ούτως ή άλλως. */
@media screen {
  .sidebar {
    background: linear-gradient(180deg, rgba(246,241,231,.82), rgba(241,235,223,.86));
    border-right-color: rgba(10,25,47,.08);
  }
  :root[data-theme="dark"] .sidebar {
    background: linear-gradient(180deg, rgba(7,14,30,.78), rgba(5,10,22,.84));
    border-right-color: rgba(255,255,255,.06);
    box-shadow: inset -1px 0 0 rgba(2,7,20,.7);
  }
}
@media screen and (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .sidebar {
    background: linear-gradient(180deg, rgba(7,14,30,.78), rgba(5,10,22,.84));
    border-right-color: rgba(255,255,255,.06);
    box-shadow: inset -1px 0 0 rgba(2,7,20,.7);
  }
}
/* «Μείωση διαφάνειας» του iPhone: τα σταθερά χρώματα ακολουθούν. */
@media screen and (prefers-reduced-transparency: reduce) {
  .sidebar { background: #f3eee3; }
  :root[data-theme="dark"] .sidebar { background: #070e1d; }
}
@media screen and (prefers-reduced-transparency: reduce) and (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .sidebar { background: #070e1d; }
}
/* Windows «υψηλή αντίθεση» πετά τις διαβαθμίσεις· χωρίς αυτό το συρτάρι του
   μενού έμενε ΔΙΑΦΑΝΕΣ πάνω από τη σελίδα. */
@media (forced-colors: active) { .sidebar { background: Canvas !important; } }

/* Μόνο το σήμα. Χωρίς γράμματα δίπλα του. */
.sidebar-head {
  /* Το σήμα καθόταν πίσω από το Dynamic Island όταν το μενού είναι ανοιχτό. */
  padding: calc(var(--s5) + var(--safe-t)) var(--s4) var(--s5);
  border-bottom: 1px solid transparent;
  background: linear-gradient(var(--line-2), var(--line-2)) bottom center / calc(100% - 40px) 1px no-repeat;
  display: flex; align-items: center; justify-content: center;
}
.brandmark { height: 62px; width: auto; display: block; }
/* ── GR | EN (05.10.2026): πάνω αριστερά στο σήμα. Το ενεργό φωτεινό, το άλλο ΣΚΟΥΡΟΤΕΡΟ
   («when one is pressed the other is darker»). core/i18n.js `langSwitch()`. */
.sidebar-head { position: relative; }
.langsw {
  position: absolute; top: calc(var(--s3) + var(--safe-t)); left: var(--s3);
  display: inline-flex; align-items: center; gap: 1px;
  font-size: 11px; font-weight: 700; letter-spacing: .06em; line-height: 1;
}
.langsw-b {
  border: 0; background: none; cursor: pointer; font: inherit; letter-spacing: inherit;
  padding: 5px 5px; border-radius: 6px; color: var(--faint); opacity: .55;
  transition: color var(--t-fast), opacity var(--t-fast), background var(--t-fast);
}
.langsw-b.on { color: var(--gold); opacity: 1; }
.langsw-b:not(.on):hover { opacity: .9; background: var(--gold-soft); }
.langsw-b:focus-visible { outline: 2px solid var(--gold); outline-offset: 1px; }
.langsw-sep { color: var(--faint); opacity: .45; }
@media print { .langsw { display: none !important; } }

/* ⚠ `min-height: 0` — Η ΕΓΓΥΗΣΗ ΤΗΣ ΚΑΘΕΤΗΣ ΚΥΛΙΣΗΣ. Ένα flex παιδί έχει
   εξ ορισμού `min-height: auto`, δηλαδή ΑΡΝΕΙΤΑΙ να γίνει πιο κοντό από το
   περιεχόμενό του — οπότε το `overflow-y: auto` δεν ενεργοποιείται ποτέ και η
   λίστα απλώς ξεχειλίζει κάτω από το πόδι της μπάρας. Με 16 γραμμές μενού
   (827px σε χώρο 641px, μετρημένο) το «Ρυθμίσεις» έπεφτε εκτός οθόνης.
   `overscroll-behavior` ώστε το τέρμα της λίστας να ΜΗΝ παρασύρει τη σελίδα. */
.nav {
  flex: 1 1 auto; min-height: 0;
  overflow-y: auto; overflow-x: hidden;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  padding: var(--s3) var(--s2);
}
.nav-group { margin-bottom: var(--s4); }
/* ⚠ ΠΕΖΑ, ΟΧΙ ΑΡΑΙΑ ΚΕΦΑΛΑΙΑ (εγκρίθηκε 24.09.2026, «Ήσυχες ετικέτες»). Η
   ιεραρχία βγαίνει από μέγεθος, βάρος και χρώμα· τα αραιωμένα κεφαλαία είναι η
   πιο αναγνωρίσιμη «υπογραφή» αυτόματου UI. Ίδιος κανόνας στις ετικέτες
   ενοτήτων (thead, πλακίδια, φόρμα, τιμοκατάλογοι). Κεφαλαία μένουν όπου είναι
   αληθινά — πινακίδες, αρχικά ονομάτων, σφραγίδα FREE, «MEMBERS», μέρες — και
   στις ετικέτες ρόλων `.estag`, που δεν μπήκαν στην έγκριση. */
.nav-label {
  font-size: var(--fs-sm); font-weight: 600;
  color: var(--faint); padding: 0 var(--s3) 6px;
}
.nav-item {
  display: flex; align-items: center; gap: 11px; width: 100%;
  padding: 9px 11px; border: 0; border-radius: var(--r-sm); background: none;
  font-size: var(--fs-base); font-weight: 500; color: var(--ink-2);
  text-align: start;
  transition: background-color var(--t-fast), color var(--t-fast),
              box-shadow var(--t-fast), transform var(--t-btn) var(--spring);
}
.nav-item svg { width: 17px; height: 17px; flex: 0 0 auto; color: var(--faint); }

/* ── Λογότυπο αντί για λέξη ───────────────────────────────────────────────
   Εντολή ιδιοκτήτη 10.09.2026: «instead of Παραστατικά replace that name with
   just the MyData logo». Αντικαθιστά ΜΟΝΟ τη λέξη — το εικονίδιο αριστερά
   μένει, δική του επιλογή, ώστε να μη σπάσει η στοίχιση του μενού.

   ⚠ ΕΙΝΑΙ <img> ΚΑΙ Η ΕΝΑΛΛΑΓΗ ΓΙΝΕΤΑΙ ΜΕ `content`, ΟΧΙ ΜΕ ΦΟΝΤΟ.
   Το επίσημο λογότυπο της ΑΑΔΕ έχει το «DATA» σε σκούρο μπλε (#102d5d) που
   ΕΞΑΦΑΝΙΖΕΤΑΙ στο νυχτερινό θέμα, άρα χρειάζεται δεύτερο αρχείο με λευκά
   γράμματα — και η `src` δεν αλλάζει από στυλ.

   ΔΟΚΙΜΑΣΤΗΚΕ ΠΡΩΤΑ ΜΕ `background-image` ΚΑΙ ΗΤΑΝ ΛΑΘΟΣ: ο κανόνας
   εκτύπωσης πιο κάτω γράφει `.main * { background-image: none !important }`
   για να μη βγει γυαλί στο χαρτί, οπότε το σήμα ΕΞΑΦΑΝΙΖΟΤΑΝ από κάθε
   εκτύπωση ημερολογίου. Οι εικόνες τυπώνονται κανονικά· τα φόντα όχι.
   Δεύτερος λόγος: αν κάποιος browser δεν υποστηρίζει `content` σε <img>,
   μένει η κανονική `src` — δηλαδή η ΣΗΜΕΡΙΝΗ συμπεριφορά, όχι κενό κουτί.

   ⚠ ΡΗΤΟ ΠΛΑΤΟΣ, ΟΧΙ `aspect-ratio`. Αν το `aspect-ratio` δεν υποστηριχθεί,
   το πλάτος γίνεται 0 και το σήμα εξαφανίζεται σιωπηλά· 434÷173 = 2,509.

   ΜΕΓΕΘΟΣ ΜΕ ΜΙΑ ΜΕΤΑΒΛΗΤΗ: η `--logo-h` είναι το ΖΩΓΡΑΦΙΣΜΕΝΟ ύψος του
   σήματος· το πλάτος βγαίνει από τον λόγο, άρα με `object-fit: contain`
   περιοριστής είναι πάντα το πλάτος. Η `--logo-box` αλλάζει ΜΟΝΟ το ύψος
   του κουτιού και είναι εξ ορισμού ίδια. */
.logo-word {
  --logo-h: 1.35em;
  --logo-box: var(--logo-h);
  display: inline-block;
  height: var(--logo-box); width: calc(var(--logo-h) * 2.509);
  object-fit: contain;
  vertical-align: middle;   /* αγνοείται μέσα στο flex του μενού — εκεί κεντράρεται */
  flex: 0 0 auto;
}
/* ⚠ ΣΤΟ ΜΕΝΟΥ ΤΟ ΚΟΥΤΙ ΕΙΝΑΙ ΨΗΛΟΤΕΡΟ ΑΠΟ ΤΟ ΣΗΜΑ, ΕΠΙΤΗΔΕΣ. Το 1,55em είναι
   το ύψος που πιάνει μια κανονική γραμμή κειμένου· χωρίς αυτό η γραμμή του
   μενού κόνταινε 3px και «κούτσαινε» ανάμεσα στα «Έξοδα» και «Τιμολόγια».
   Μετρημένο: ύψος κεφαλαίων «DATA» 9,5px δίπλα σε 9,9px του κειμένου. */
.nav-item .logo-word, #viewTitle .logo-word { --logo-box: 1.55em; }
/* Στη μέρα δεν χρειάζεται κανόνας: η `src` του <img> είναι ήδη η σκούρα
   εκδοχή. Στη νύχτα το αρχείο αντικαθίσταται από το `content`. */
:root[data-theme="dark"] .logo-mydata { content: url('../img/mydata-dark.png'); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .logo-mydata { content: url('../img/mydata-dark.png'); }
}
/* ⚠ ΣΤΟ ΧΑΡΤΙ ΠΑΝΤΑ Η ΣΚΟΥΡΑ ΕΚΔΟΧΗ — λευκά γράμματα σε λευκό χαρτί δεν
   τυπώνονται, ακόμη κι αν η οθόνη είναι στη νύχτα. Το `!important` νικά τον
   κανόνα της νύχτας ακόμη κι αν εκείνος έχει μεγαλύτερη ειδικότητα. */
@media print { .logo-mydata { content: url('../img/mydata.png') !important; } }
/* ⚠ ΣΤΗ ΜΕΡΑ 10% ΜΕΓΑΛΥΤΕΡΟ (05.10.2026 — ιδιοκτήτης: «the mydata logo on light mode is smaller than on
   dark mode»). ΜΕΤΡΗΜΕΝΟ: τα δύο αρχεία είναι pixel-ίδια και ζωγραφίζονται στο ίδιο κουτί (Chrome ΚΑΙ Safari
   iPhone)· το λευκό «DATA» στο σκούρο απλώς ΦΑΙΝΕΤΑΙ μεγαλύτερο από το ναυτικό στο λευκό. Επιλογή ιδιοκτήτη:
   «Light 10% bigger». `transform` = ίδιο κουτί, καμία μετακίνηση στη σειρά κουμπιών / στο μενού. ΜΟΝΟ οθόνη:
   το χαρτί (και το PDF του iPhone — εκεί το screen σβήνει) μένει όπως ήταν. */
/* ⚠ ΤΙΤΛΟΣ ΜΠΑΡΑΣ & ΜΕΝΟΥ: ΟΧΙ transform. Το `<h1 id="viewTitle">` έχει `overflow:hidden` (ελλειπτικό
   κείμενο) — το scale έβγαινε 3px έξω και κοβόταν («gets cut off on the header of mydata section»). Εκεί
   μεγαλώνει η ίδια η `--logo-h` (1,35em → 1,485em): χωρά στο κουτί των 1,55em, και το πλάτος ανοίγει
   στη διάταξη αντί να ξεχειλίζει. */
@media screen {
  :root[data-theme="light"] .logo-mydata { transform: scale(1.1); }
  :root[data-theme="light"] #viewTitle .logo-mydata,
  :root[data-theme="light"] .nav-item .logo-mydata { transform: none; --logo-h: 1.485em; }
}
@media screen and (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) .logo-mydata { transform: scale(1.1); }
  :root:not([data-theme="dark"]) #viewTitle .logo-mydata,
  :root:not([data-theme="dark"]) .nav-item .logo-mydata { transform: none; --logo-h: 1.485em; }
}
.nav-item:hover { background: var(--gold-soft); color: var(--ink); }
.nav-item:hover svg { color: var(--muted); }
/* ⚠ ΑΝΑΣΗΚΩΜΕΝΗ ΠΛΑΚΑ ΜΕ ΧΡΥΣΗ ΑΚΜΗ (24.09.2026), όχι γκρι χάπι + χρυσό
   ραβδάκι αριστερά. Ίδια γλώσσα «επιλεγμένου» με τη στεφάνη των φίλτρων και
   το πλαίσιο της μέρας: ό,τι είναι επιλεγμένο, φοράει χρυσό περίγραμμα. */
.nav-item.active, .nav-item.active:hover {
  background: var(--sel-plate); color: var(--ink); font-weight: 600;
  box-shadow: inset 0 0 0 1px var(--sel-edge), var(--sel-lift);
}
.nav-item.active svg { color: var(--gold-ink); }
.nav-item:active { transform: scale(.98); transition-duration: var(--t-press); }
.nav-count {
  margin-inline-start: auto; font-size: var(--fs-xs); font-weight: 600;
  color: var(--muted); background: var(--line-2); padding: 1px 7px; border-radius: var(--r-pill);
  font-variant-numeric: tabular-nums;
}
.nav-item.active .nav-count { background: var(--gold-soft2); color: var(--gold-ink); }

/* Ο χρήστης, ο διακόπτης θέματος και η έξοδος — τέρμα κάτω, ακριβώς πάνω στη
   μπάρα του home. Ο διακόπτης είναι 32px· χωρίς αυτό, το μισό του ήταν άπιαστο. */
/* Η διαχωριστική δεν ακουμπά τις άκρες (40px πιο κοντή): ζωγραφίζεται με
   φόντο, ενώ το διάφανο περίγραμμα κρατά το ίδιο ύψος. Ίδιο στο `.sidebar-head`. */
.sidebar-foot {
  border-top: 1px solid transparent;
  background: linear-gradient(var(--line-2), var(--line-2)) top center / calc(100% - 40px) 1px no-repeat;
  padding: var(--s3) var(--s3) calc(var(--s3) + var(--safe-b));
}

/* Ο διακόπτης ημέρας/νύχτας. Η χρυσή τελεία λέει «ακολουθώ τη συσκευή» —
   μόλις τον πατήσεις, κλειδώνει και η τελεία φεύγει. */
#themeBtn { position: relative; }
#themeBtn.is-auto::after {
  content: ''; position: absolute; top: 5px; inset-inline-end: 5px;
  width: 5px; height: 5px; border-radius: 50%; background: var(--gold);
}
#themeBtn svg { transition: transform var(--t); }
#themeBtn:hover svg { transform: rotate(-18deg); }
/* ⚠ `min-width: 0` ΣΤΟ ΠΑΙΔΙ ΠΟΥ ΜΕΓΑΛΩΝΕΙ. Ένα flex παιδί αρνείται εξ ορισμού
   να γίνει στενότερο από το περιεχόμενό του, οπότε ένα μακρύ όνομα έσπρωχνε τα
   κουμπιά θέματος/αποσύνδεσης έξω και ΚΑΘΟΤΑΝ από πάνω τους. Το ίδιο λάθος με
   το `.nav` — βλ. εκεί. Τώρα το κείμενο κόβεται με αποσιωπητικά και τα κουμπιά
   κρατούν πάντα τη θέση τους. */
.who { display: flex; align-items: center; gap: var(--s3); }
.who > .grow { min-width: 0; }
.who-name {
  font-weight: 600; font-size: var(--fs-sm); color: var(--ink-2);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

.main { flex: 1 1 auto; min-width: 0; }
/* ⚠ ΤΟ ΠΕΡΙΕΧΟΜΕΝΟ ΓΛΙΣΤΡΑ ΜΑΖΙ ΜΕ ΤΟ ΜΕΝΟΥ. Χωρίς μετάβαση, η μπάρα και οι
   κάρτες πηδούσαν 236px ακαριαία και μετά το ΑΔΙΑΦΑΝΟ μενού περνούσε από πάνω
   τους για 240ms, σκεπάζοντας τον τίτλο που μόλις είχε μετακομίσει από κάτω. */
@media (min-width: 1024px) {
  .main { margin-inline-start: var(--sidebar); transition: margin-inline-start var(--t); }
}
/* ⚠ ΣΥΜΠΤΥΓΜΕΝΟ ΜΕΝΟΥ (≥1024px). Οι δύο κανόνες πάνε ΠΑΝΤΑ μαζί: αν φύγει
   μόνο το μενού και μείνει το περιθώριο, μένει μια λωρίδα 248px κενή. Κάτω
   από 1024px η κλάση δεν κάνει ΤΙΠΟΤΑ — εκεί το μενού είναι ήδη συρτάρι και
   το `.open` το κυβερνά, οπότε μια ξεχασμένη σύμπτυξη δεν κλειδώνει το μενού.
   Ζει στο <body> και όχι στο `.open`, γιατί η render() κλείνει το συρτάρι σε
   κάθε ζωγραφιά και θα έσβηνε την επιλογή. */
@media (min-width: 1024px) {
  body.nav-collapsed .sidebar {
    transform: translateX(-100%); visibility: hidden;
    transition-delay: 0s, var(--t-dur);
  }
  body.nav-collapsed .main { margin-inline-start: 0; }
}

.topbar {
  position: sticky; top: 0; z-index: 30; min-height: var(--topbar);
  display: flex; align-items: center; gap: var(--s3);
  /* ⚠ ΤΟ ΤΥΛΙΓΜΑ ΑΚΟΛΟΥΘΕΙ ΤΟ ΠΕΡΙΕΧΟΜΕΝΟ, ΟΧΙ ΚΑΤΩΦΛΙ. Πριν, κάθε οθόνη
     κάτω από 720px έσπρωχνε τις ενέργειες σε ΔΕΥΤΕΡΗ ΓΡΑΜΜΗ — ακόμη και με ΕΝΑ
     κουμπί 144px σε παράθυρο 714px, όπου χωρούσε άνετα. Η κεφαλίδα γινόταν
     98px αντί για 62. Τώρα ο `flex-basis: 200px` του τίτλου είναι το όριο:
     οι ενέργειες κατεβαίνουν μόνο όταν ο τίτλος θα έπεφτε κάτω από αυτό. */
  flex-wrap: wrap; row-gap: 8px;
  /* Με `viewport-fit=cover` η σελίδα ξεκινά ΚΑΤΩ από το Dynamic Island. Χωρίς
     αυτό, ο τίτλος της οθόνης κρυβόταν πίσω του σε πορτρέτο. */
  padding: var(--safe-t) calc(var(--s5) + var(--safe-r)) 0 calc(var(--s5) + var(--safe-l));
  /* Εδώ το θόλωμα δουλεύει ΠΡΑΓΜΑΤΙΚΑ — οι γραμμές των δουλειών κυλούν από κάτω. */
  background: var(--glass-2);
  -webkit-backdrop-filter: var(--blur); backdrop-filter: var(--blur);
  border-bottom: 1px solid var(--line-2);
}
/* Η μπάρα τελειώνει σε ΑΠΑΛΗ ΣΚΙΑ αντί για χαραγμένη γραμμή (24.09.2026). */
@media screen {
  .topbar {
    border-bottom-color: rgba(10,25,47,.06);
    box-shadow: 0 14px 28px -24px rgba(10,25,47,.32);
  }
  :root[data-theme="dark"] .topbar {
    border-bottom-color: rgba(255,255,255,.05);
    box-shadow: 0 14px 28px -24px rgba(2,7,20,.95);
  }
}
@media screen and (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .topbar {
    border-bottom-color: rgba(255,255,255,.05);
    box-shadow: 0 14px 28px -24px rgba(2,7,20,.95);
  }
}
/* ⚠ ΤΟ ΠΑΝΩ ΣΚΑΛΟΠΑΤΙ ΤΗΣ ΙΕΡΑΡΧΙΑΣ. Ήταν --fs-lg — ΤΟ ΙΔΙΟ με το `.card-t`
   κάθε κάρτας, οπότε ο τίτλος της οθόνης δεν ξεχώριζε από πέντε επικεφαλίδες
   ενοτήτων από κάτω του και το μάτι δεν είχε πού να προσγειωθεί. Τώρα:
     ΟΘΟΝΗ 21px  →  ΕΝΟΤΗΤΑ 18px  →  ΣΩΜΑ 14px  →  ΕΤΙΚΕΤΑ 10px
   Τέσσερα σκαλοπάτια, το καθένα ~1.25× το επόμενο. */
.topbar > .grow { flex: 1 1 200px; min-width: 0; }
/* ⚠ ΚΟΨΙΜΟ ΜΕ ΑΠΟΣΙΩΠΗΤΙΚΑ, ΟΧΙ ΑΝΑΔΙΠΛΩΣΗ. Χωρίς αυτό, ένας στενός τίτλος
   σπάει ΑΝΑ ΓΡΑΜΜΑ και γίνεται στήλη — «Κλείσιμο μετρητών · Αύγουστος 2026»
   είχε γίνει 108px ύψους. Το `min-width: 0` από πάνω επιτρέπει τη συρρίκνωση,
   αυτό εδώ ορίζει τι γίνεται όταν συμβεί. */
.topbar h1, .topbar-sub { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.topbar h1 { font-size: var(--fs-xl); font-weight: 600; letter-spacing: -.018em; }
.topbar-sub { font-size: var(--fs-xs); color: var(--muted); margin-top: 1px; }

/* ⚠ ΤΟ ΚΟΥΜΠΙ ΦΑΙΝΕΤΑΙ ΠΑΝΤΑ. Ήταν `display: none` από τα 1024px και πάνω:
   ο ιδιοκτήτης το έβλεπε στο σημείο μετάβασης και δεν έκανε τίποτα. Τώρα σε
   στενή οθόνη ανοίγει το συρτάρι, σε υπολογιστή ΣΥΜΠΤΥΣΣΕΙ το μενού. */
.burger { display: inline-flex; }

/* Στενή οθόνη: οι ενέργειες κατεβαίνουν σε ΔΙΚΗ ΤΟΥΣ γραμμή.
   Πριν, το #topActions δεν συρρικνωνόταν και έσφιγγε τον τίτλο σε 28px
   πλάτος — «Κλείσιμο μετρητών · Αύγουστος 2026» γινόταν στήλη ενός
   γράμματος ύψους 108px, με τα κουμπιά από πάνω του. */
/* Οι ενέργειες μένουν ΠΑΝΤΑ δεξιά — και δίπλα στον τίτλο, και όταν τυλιχτούν
   από κάτω του. Η θέση ενός κουμπιού δεν πρέπει να εξαρτάται από το πλάτος. */
.topbar #topActions {
  flex: 0 1 auto; flex-wrap: wrap;
  justify-content: flex-end; margin-inline-start: auto;
}

@media (max-width: 720px) {
  .topbar {
    /* ⚠ `padding-block` ΞΑΝΑΓΡΑΦΕΙ ΚΑΙ ΤΟ ΠΑΝΩ — και ακύρωνε τον inset της
       εγκοπής που ορίζει το βασικό μπλοκ. Μετρήθηκε: 9px αντί για 59+9.
       Σε στενή οθόνη είναι ακριβώς όπου ζει το πρόβλημα (πορτρέτο iPhone). */
    padding-block: calc(9px + var(--safe-t)) 9px;
  }
  .topbar h1 { font-size: var(--fs-lg); }   /* στενή οθόνη: ένα σκαλοπάτι κάτω, η σχέση μένει */
}
/* Στο κινητό το ☰ και η εκτύπωση στοιχίζονται με τις άκρες των καρτών από
   κάτω (24.09.2026): ίδιο πλάγιο περιθώριο, και τα αόρατα κουμπιά τραβιούνται
   7px έξω ώστε να ευθυγραμμίζεται το ΕΙΚΟΝΙΔΙΟ, όχι το αόρατο κουτί του. */
@media (max-width: 719px) {
  .topbar { padding-inline: calc(var(--s4) + var(--safe-l)) calc(var(--s4) + var(--safe-r)); }
  .topbar > .burger { margin-inline-start: -7px; }
  .topbar #topActions > .btn-icon.btn-ghost:last-child { margin-inline-end: -7px; }
}

/* ⚠ ΟΙ ΠΛΑΪΝΟΙ inset ΑΦΟΡΟΥΝ ΤΟ ΤΟΠΙΟ. Γυρνώντας το iPhone, η εγκοπή πάει στο
   πλάι και τρώει ~44px· χωρίς αυτό οι κάρτες κόβονταν στη μία μεριά.
   ⚠ ΤΟ ΚΑΤΩ ΠΕΡΙΘΩΡΙΟ ΞΕΠΕΡΝΑ ΤΟ «+» (26.09.2026). Ήταν --s8 = 56px, ενώ το «+»
   πιάνει 74px από κάτω (+ τη ζώνη του home): η ΤΕΛΕΥΤΑΙΑ κάρτα της μέρας δεν
   μπορούσε να ανέβει πάνω από αυτό, και η σειρά κουμπιών της — με τη Διαγραφή
   τέρμα δεξιά — έπεφτε ΚΑΤΩ από το «+». Τώρα: η απόστασή του + 52px + ανάσα. */
.view {
  padding: var(--s5) calc(var(--s4) + var(--safe-r)) calc(var(--s5) + 52px + var(--s4) + var(--safe-b)) calc(var(--s4) + var(--safe-l));
  max-width: var(--maxw); margin: 0 auto;
}
@media (min-width: 720px) {
  .view { padding: var(--s6) calc(var(--s6) + var(--safe-r)) calc(var(--s5) + 52px + var(--s4) + var(--safe-b)) calc(var(--s6) + var(--safe-l)); }
}

.scrim {
  position: fixed; inset: 0; z-index: 35; background: var(--overlay);
  opacity: 0; pointer-events: none; transition: opacity var(--t);
}
.scrim.show { opacity: 1; pointer-events: auto; }
@media (min-width: 1024px) { .scrim { display: none; } }

/* ═══ ΕΚΤΥΠΩΣΗ — ΛΕΥΚΟ ΧΑΡΤΙ, ΜΑΥΡΟ ΜΕΛΑΝΙ, ΤΙΠΟΤΑ ΠΕΡΙΤΤΟ ═════════════════
   Κανόνας ιδιοκτήτη (03.09.2026): «λευκό χαρτί για να μη φεύγει μελάνι» — ο
   ίδιος που ισχύει ήδη στην πινακίδα άφιξης.

   Η παλέτα γυρίζει μόνη της στις ημερήσιες τιμές (τα δύο σκοτεινά μπλοκ του
   tokens.css είναι πλέον `@media screen`). Εδώ φεύγει ό,τι ΚΑΙΕΙ μελάνι χωρίς
   να προσθέτει πληροφορία: γεμίσματα επιφανειών, σκιές, θολώματα, ντεγκραντέ.
   ΜΕΝΟΥΝ οι λεπτές γραμμές — ένα πλαίσιο πίνακα κοστίζει ελάχιστο μελάνι και
   είναι ο μόνος τρόπος να διαβαστεί μια κατάσταση σε χαρτί.

   ⚠ ΣΤΟΧΕΥΕΙ ΤΟ `.main`, ΟΧΙ ΤΟ `*`. Τα voucher, τα συμφωνητικά και οι κάρτες
   έχουν ΔΙΚΟ ΤΟΥΣ σχέδιο για χαρτί (voucher.css, contract.css, cards-print.css)
   και προσαρτώνται απευθείας στο <body>. Ένα καθολικό `*` θα τα ισοπέδωνε. */
@media print {
  .sidebar, .topbar, .scrim, .no-print { display: none !important; }
  .main { margin: 0; }
  /* ⚠ ΤΟ `overflow: hidden` ΤΟΥ `body.locked` ΞΕΚΛΕΙΔΩΝΕΙ ΣΤΟ ΧΑΡΤΙ. Μπαίνει
     όσο είναι ανοιχτό παράθυρο, ώστε να μην κυλάει η σελίδα από πίσω· σε
     σελιδοποιημένο μέσο όμως ένα κρυμμένο overflow μπορεί να κόψει ό,τι
     ξεπερνά την πρώτη σελίδα. Το «Συγκεντρωτικό μήνα» τυπώνεται ακριβώς έτσι. */
  body { background: #fff !important; overflow: visible !important; }

  /* Καμία γυάλινη επιφάνεια, καμία σκιά, κανένα θόλωμα στο χαρτί. */
  .main, .main *, .print-only, .print-only * {
    background-image: none !important;
    box-shadow: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    text-shadow: none !important;
  }
  /* Οι επιφάνειες γίνονται διάφανες — δηλαδή λευκές. Οι ΓΡΑΜΜΕΣ μένουν. */
  .main .card, .main .escard, .main .job, .main .stat, .main .tablewrap,
  .main .matrix, .main .list-row, .main .notice, .main .pcard, .main .mcard,
  .main table.tbl thead th, .main table.mx thead th, .main .chip, .main .badge,
  .main .estag, .main .rate-card, .main .exp-row {
    background: transparent !important;
  }
  /* Το μελάνι είναι σκούρο ΠΑΝΤΑ — ακόμη κι αν ένας κανόνας θέματος έγραψε
     σταθερό ανοιχτό χρώμα (π.χ. `.job-route` έγραφε #eef3fb). */
  .main, .main * { color: var(--ink) !important; }
  .main .muted, .main .tiny.muted, .main .stat-d, .main .stat-l,
  .main .faint, .main .tiny.faint { color: #4a5260 !important; }

  /* Χρώμα μένει ΜΟΝΟ όπου κουβαλά νόημα: κόκκινο = χρωστάμε, χρυσό = σήμερα. */
  .main .money-neg, .main .crit-t, .main .chip-crit { color: #a3271b !important; }

  @page { margin: 12mm; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
}

/* Το σήμα είναι κουμπί — χωρίς όψη κουμπιού, αλλά με κανονική εστίαση. */
.brandbtn {
  display: block; padding: 0; border: 0; background: none; cursor: pointer;
  border-radius: var(--r-sm);
}
.brandbtn:focus-visible { outline: 2px solid var(--gold); outline-offset: 3px; }
.brandbtn:hover .brandmark { opacity: .85; }
.brandmark { transition: opacity var(--t-fast); }

/* ── ΕΚΤΥΠΩΣΗ ΤΟΥ ΗΜΕΡΟΛΟΓΙΟΥ (03.09.2026) ────────────────────────────────
   Το κουμπί τυπώνει ΟΤΙ ΕΙΝΑΙ ΑΝΟΙΧΤΟ: τη μέρα ή ολόκληρο το διάστημα. Στην
   οθόνη δεν αλλάζει τίποτα· εδώ φεύγει μόνο ό,τι δεν έχει νόημα σε χαρτί. */
.print-only { display: none; }
@media print {
  .print-only { display: block; }
  /* Φίλτρα, λωρίδα ημερών, διακόπτης Ημέρα/Διάστημα και τα κουμπιά κάθε
     κάρτας είναι ΧΕΙΡΙΣΤΗΡΙΑ — σε χαρτί είναι μελάνι χωρίς χρήση. */
  .toolbar, .filter-card, .filterbar, .daystrip, .seg, .rangenav,
  .job-acts, .tact, .fab { display: none !important; }
  /* ⚠ ΚΡΥΒΕΤΑΙ ΤΟ ΔΟΧΕΙΟ, ΟΧΙ ΤΑ ΠΑΙΔΙΑ. Η λωρίδα ημερών και η κεφαλίδα του
     μήνα («‹ Σεπτέμβριος 2026 ›» με τα δύο βελάκια) ζουν στην ΙΔΙΑ κάρτα.
     Κρύβοντας μόνο τα δύο παιδιά έμενε ένα ΑΔΕΙΟ πλαίσιο στο χαρτί. Το `:has()`
     πιάνει ακριβώς αυτή την κάρτα και καμία άλλη· η ημερομηνία γράφεται ήδη
     στην κεφαλίδα εκτύπωσης από πάνω. */
  .card:has(.daystrip) { display: none !important; }

  .print-head { margin-bottom: 14px; border-bottom: 1.5px solid #000; padding-bottom: 8px; }
  .print-brand { font-size: var(--fs-xs); letter-spacing: .22em; text-transform: uppercase; }
  .print-title { font-size: var(--fs-lg); font-weight: 700; margin-top: 2px; }

  /* ⚠ ΤΟ ΓΥΑΛΙ ΔΕΝ ΤΥΠΩΝΕΤΑΙ. Διαφάνειες και blur βγαίνουν γκρι πλακάκια στον
     εκτυπωτή· οι κάρτες γίνονται λευκές με μια λεπτή γραμμή, και δεν κόβονται
     στη μέση από αλλαγή σελίδας. */
  .job, .job-list, .day, .card, .escard {
    background: #fff !important; box-shadow: none !important;
    -webkit-backdrop-filter: none !important; backdrop-filter: none !important;
    border-color: #ccc !important;
    break-inside: avoid; page-break-inside: avoid;
  }
  /* ⚠ Η ΛΙΣΤΑ ΣΠΑΕΙ, Η ΚΑΡΤΑ ΟΧΙ (05.10.2026). Με `avoid` σε ΟΛΗ τη λίστα, μια μέρα που δεν χωρούσε
     κάτω από την κεφαλίδα και τα ποσά πήγαινε ΟΛΟΚΛΗΡΗ στη 2η σελίδα («they only start from 2nd page»)
     και η 1η έμενε μισή άδεια. Μένει αχώριστη μόνο η κάθε μεταφορά. */
  .job-list, .day, .stack:has(> .job-list) { break-inside: auto; page-break-inside: auto; }
}

/* ══ ΑΙΩΡΟΥΜΕΝΗ ΜΠΑΡΑ ΣΑΝ ΤΟ esdocs + ΣΗΜΑ ΔΙΠΛΑ ΣΤΟ ☰ (05.10.2026) ═══════════════════════════
   Ιδιοκτήτης (στιγμιότυπο iPhone): «I want the logo to be up there where I marked it with red … the
   header to have rounded corners and be disconnected just like it is on ES docs» → πρώτα ΜΟΝΟ κινητό.
   Μετά: «i like the new header, i want it on desktop mode also. but on desktop mode the logo should be
   on the header only when the menu is closed because the logo is already on the menu».
   esdocs (reference/esdocs.html .topbar): περιθώριο γύρω, sticky λίγο κάτω από την κορυφή, 18px
   γωνίες, λεπτό περίγραμμα, απαλή σκιά, πιο διάφανο γυαλί (--bar-glass, tokens.css).
   ⚠ Στο ΤΕΛΟΣ του αρχείου: νικά τα padding / -7px / σκιές της μπάρας πιο πάνω.
   ⚠ ΤΟ ΣΗΜΑ: <1024px το μενού είναι ΣΥΡΤΑΡΙ (κλειστό) → σήμα πάντα· ≥1024px το μενού είναι ανοιχτό
     και ΕΧΕΙ το σήμα → στη μπάρα ΜΟΝΟ με `body.nav-collapsed`. */
.topbrand {
  display: none; align-items: center; flex: 0 0 auto;
  padding: 0; border: 0; background: none; cursor: pointer; border-radius: var(--r-sm);
}
.topbrand img { display: block; height: 36px; width: auto; filter: drop-shadow(0 3px 8px rgba(10,25,47,.18)); }
.topbrand:focus-visible { outline: 2px solid var(--gold); outline-offset: 3px; }
.topbrand:hover img { opacity: .85; }
@media screen and (max-width: 1023px) { .topbrand { display: inline-flex; } }
@media screen and (min-width: 1024px) { body.nav-collapsed .topbrand { display: inline-flex; } }

@media screen {
  .topbar {
    top: calc(var(--safe-t) + 8px);
    /* ίδιες άκρες με τις κάρτες από κάτω: το `.view` έχει max-width --maxw στο κέντρο */
    margin: calc(var(--safe-t) + 12px)
            max(calc(var(--s6) + var(--safe-r)), calc((100% - var(--maxw)) / 2 + var(--s6)))
            6px
            max(calc(var(--s6) + var(--safe-l)), calc((100% - var(--maxw)) / 2 + var(--s6)));
    min-height: 0;
    padding: 8px 12px 8px 8px;
    border: 1px solid var(--line-2); border-radius: 18px;
    background: var(--bar-glass);
    box-shadow: 0 1px 0 var(--hair) inset, 0 6px 22px rgba(10,25,47,.08);
  }
  .topbar > .burger { margin-inline-start: 0; }
  .topbar #topActions > .btn-icon.btn-ghost:last-child { margin-inline-end: 0; }
  :root[data-theme="dark"] .topbar {
    border-color: rgba(255,255,255,.08);
    box-shadow: 0 1px 0 rgba(255,255,255,.06) inset, 0 8px 24px rgba(2,7,20,.55);
  }
}
@media screen and (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .topbar {
    border-color: rgba(255,255,255,.08);
    box-shadow: 0 1px 0 rgba(255,255,255,.06) inset, 0 8px 24px rgba(2,7,20,.55);
  }
}
/* Κινητό: ίδιες άκρες με τις κάρτες (--s4), λίγο πιο σφιχτή. */
@media screen and (max-width: 719px) {
  .topbar {
    margin: calc(var(--safe-t) + 8px) calc(var(--s4) + var(--safe-r)) 6px calc(var(--s4) + var(--safe-l));
    padding: 7px 10px 7px 6px; gap: 8px;
  }
}

/* ── ΜΙΚΡΑ ΚΟΥΜΠΙΑ ΣΤΗ ΜΠΑΡΑ ΤΟΥ ΚΙΝΗΤΟΥ (app.js compactAction, 05.10.2026) ─────────────────────
   «+» αντί για «Προσθήκη εγγράφου» κ.λπ., εικονίδιο + «CSV» αντί για «Εξαγωγή CSV». Ένα ύψος (36px) για
   όλα, ώστε η μπάρα να μένει ΜΙΑ γραμμή. */
@media screen and (max-width: 719px) {
  .topbar #topActions { gap: 6px; flex-wrap: nowrap; }
  /* Ο τίτλος παίρνει ό,τι μένει (και κόβεται με «…») αντί να κρατά 200px — αλλιώς ακόμη και δύο
     μικρά κουμπιά έπεφταν σε δεύτερη γραμμή. */
  .topbar > .grow { flex: 1 1 0; }
  .topbar #topActions > .btn:not(.btn-icon) { min-height: 36px; padding: 0 10px; font-size: var(--fs-sm); gap: 5px; }
  .topbar #topActions > .btn[data-short] .act-label { display: none; }
  .topbar #topActions > .btn[data-short]:not([data-short=""])::after { content: attr(data-short); }
  .topbar #topActions > .btn[data-short=""] { width: 36px; padding: 0; justify-content: center; }
}

/* ── ΟΘΟΝΕΣ ΧΑΡΤΗ: Η ΑΙΩΡΟΥΜΕΝΗ ΜΠΑΡΑ ΠΕΡΝΑ ΠΑΝΩ ΑΠΟ ΤΟΝ ΧΑΡΤΗ (05.10.2026) ──────────────────────
   Ιδιοκτήτης: «in desktop mode only the live map header is weird» (λωρίδα φόντου γύρω από την αιωρούμενη
   μπάρα πάνω από χάρτη που πιάνει όλο το πλάτος) → «please make these 2 headers like the other ones».
   Χάρτης & μεταφορές (`.lm`): η μπάρα βγαίνει από τη ροή (absolute, ίδια περιθώρια/γωνίες) και ο χάρτης
   γεμίζει ΟΛΟ το .main, ΚΑΙ κάτω από τη μπάρα — γυαλί πάνω από χάρτη. Ό,τι κάθεται ψηλά μέσα στον χάρτη
   (κουμπιά ζουμ, λωρίδες ειδοποιήσεων) κατεβαίνουν κάτω από τη μπάρα:
   `--bar-bottom` = πού τελειώνει η μπάρα + 8px (app.js, ResizeObserver). Κινητό: το φύλλο από κάτω
   μένει κάτω (ακόμη και ανοιχτό 84% δεν φτάνει τη μπάρα).
   Digital Maps (`.maps-embed`): ΚΑΙ αυτή περνά κάτω από τη μπάρα («digital maps header is not transparent,
   it still has the old header underneath»)· το κενό στην κορυφή μπαίνει ΜΕΣΑ στη σελίδα (maps.js, --embed-top). */
@media screen {
  .main:has(> .view > .lm), .main:has(> .view > .maps-embed) { position: relative; }
  .main:has(> .view > .lm) > .topbar, .main:has(> .view > .maps-embed) > .topbar { position: absolute; top: 0; left: 0; right: 0; }
  .lm .maplibregl-ctrl-top-right, .lm .maplibregl-ctrl-top-left { top: var(--bar-bottom, 84px); }
  .lm .lm-banners { top: var(--bar-bottom, 84px); }
}
/* ⚠ ΥΠΟΛΟΓΙΣΤΗΣ/TABLET (≥720px): Η ΜΠΑΡΑ ΣΤΑΜΑΤΑ ΕΚΕΙ ΠΟΥ ΣΤΑΜΑΤΑ Ο ΧΑΡΤΗΣ (05.10.2026). Ιδιοκτήτης: «you
   can make the header stop where the map stops it doesnt have to be above μεταφορες and οδηγοι, that way
   we can move μεταφορες and οδηγοι higher up». Τα πλάτη είναι ΑΚΡΙΒΩΣ οι στήλες του `.lm` (live-map.css):
   720–1079 clamp(340px, 48%, 400px) · ≥1080 440px · ≥1600 440px αριστερά + 380px δεξιά. Το % μετριέται
   στο πλάτος του .main = πλάτος του .lm. Οι στήλες ξεκινούν πλέον από την κορυφή (ΧΩΡΙΣ padding-top). */
@media screen and (min-width: 720px) {
  .main:has(> .view > .lm) > .topbar {
    right: clamp(340px, 48%, 400px);
    margin-inline: calc(12px + var(--safe-l)) 12px;
  }
}
@media screen and (min-width: 1080px) { .main:has(> .view > .lm) > .topbar { right: 440px; } }
@media screen and (min-width: 1600px) { .main:has(> .view > .lm) > .topbar { left: 440px; right: 380px; margin-inline: 12px; } }
