/* ============================================================================
   cw-select — ΤΟ ΜΕΝΟΥ ΤΗΣ ΠΛΑΤΦΟΡΜΑΣ, ΣΤΑ ΧΡΩΜΑΤΑ ΤΟΥ SITE   (29/8/2026)
   ----------------------------------------------------------------------------
   ΠΡΟΕΛΕΥΣΗ: ekmathisis-platform/public/assets/cw-select.{js,css}
   ΤΟ JS ΗΡΘΕ ΑΥΤΟΥΣΙΟ (md5 ταυτόσημο) — είναι καθαρή συμπεριφορά, μηδέν χρώματα,
   μηδέν εξάρτηση από την πλατφόρμα. ΑΥΤΟ ΤΟ ΑΡΧΕΙΟ είναι το μόνο που ξαναγράφτηκε.

   ΓΙΑΤΙ ΞΑΝΑΓΡΑΦΤΗΚΕ ΚΑΙ ΔΕΝ ΑΝΤΙΓΡΑΦΗΚΕ (απόφαση Αντώνη 29/8):
   Το CSS της πλατφόρμας κρέμεται από 9 δικά της tokens (--lav, --paper, --chip,
   --line, --text, --muted, --btn-sh, --popup-h, --lvl-1-blur) και είναι ανθρακί
   με λεβάντα #8B7BE8. Το site είναι φωτεινό με teal. Σκέτη αντιγραφή θα έβαζε
   σκούρο μοβ μενού μέσα σε teal φόρμα.
   ΔΙΑΤΗΡΗΘΗΚΑΝ ΑΚΡΙΒΩΣ: γεωμετρία (pill 999px, 44px αφή, 18px γέμισμα, 14px
   γωνία φύλλου), οι χρόνοι και οι καμπύλες κάθε κίνησης, η δομή των κλάσεων.
   ΑΛΛΑΞΕ ΜΟΝΟ Η ΠΑΛΕΤΑ.

   Η ΑΡΧΗ ΠΟΥ ΚΡΑΤΗΘΗΚΕ: το ΚΛΕΙΣΤΟ κουμπί είναι φωτεινό (ανήκει στη φόρμα)·
   το ΑΝΟΙΧΤΟ φύλλο είναι σκούρο. Ένα σκούρο υλικό για «ό,τι είναι ανοιχτό τώρα».
   Εδώ το σκούρο είναι το μελάνι του site (--c-ink #17191E), όχι το ανθρακί της
   πλατφόρμας — ίδια ιδέα, δική μας ύλη.

   ΧΡΩΜΑΤΙΚΟΣ ΚΑΝΟΝΑΣ (brand kit): #00807D = ΛΕΙΤΟΥΡΓΙΚΟ (περίγραμμα, δαχτυλίδι
   εστίασης) · #4BECE7 = ΜΟΝΟ ΓΕΜΙΣΜΑΤΑ (η επιλεγμένη γραμμή).

   ΣΕ iOS ΔΕΝ ΦΟΡΤΩΝΕΙ ΤΙΠΟΤΑ ΑΠΟ ΕΔΩ: το cw-select.js ανιχνεύει iOS/iPad, δεν
   ντύνει κανένα μενού και βάζει `sel-native` στο <html>. Εκεί παίζει το φύλλο
   του λειτουργικού, όπως ζητήθηκε. Το μόνο που κάνουμε είναι να δώσουμε στο
   γυμνό <select> αξιοπρεπές ΚΛΕΙΣΤΟ κουμπί (βλ. τέλος αρχείου).
   ============================================================================ */

/* ── ΤΟ ΠΕΡΙΒΛΗΜΑ ─────────────────────────────────────────────────────────── */
.cw-sel{ position: relative; display: block; min-width: 0; }
.cw-sel > select{ display: none; }   /* μένει στο DOM: πηγή αλήθειας, υποβάλλεται κανονικά */

/* ── ΤΟ ΚΛΕΙΣΤΟ ΚΟΥΜΠΙ: ΓΡΑΜΜΗ ΑΠΟ ΚΑΤΩ, ΟΠΩΣ ΤΑ ΥΠΟΛΟΙΠΑ ΠΕΔΙΑ ─────────────
   ΑΛΛΑΓΗ 29/8 (εντολή Αντώνη): «το pill δεν ταιριάζει με το υπόλοιπο στυλ και
   μ' αρέσει το υπόλοιπο στυλ που είναι με τη γραμμή».
   ΤΟ PILL ΗΡΘΕ ΑΠΟ ΤΗΝ ΠΛΑΤΦΟΡΜΑ, όπου τα πεδία είναι κουτιά και το pill τα
   ξεχώριζε. ΕΔΩ τα πεδία είναι ΥΠΟΓΡΑΜΜΙΣΕΙΣ — άρα το pill ήταν το ξένο σώμα.
   ⚠ ΟΙ ΤΙΜΕΣ ΔΕΝ ΕΠΙΝΟΗΘΗΚΑΝ: αντιγράφηκαν από το `.nfield input, .nfield select`
   (style.css:921-929) ώστε το ντυμένο μενού να είναι ΟΠΤΙΚΑ ΤΑΥΤΟ με το γυμνό
   που αντικαθιστά. Αν αλλάξει εκεί το στυλ των πεδίων, πρέπει να αλλάξει κι εδώ.
   ΤΟ ΑΝΟΙΧΤΟ ΦΥΛΛΟ ΔΕΝ ΑΓΓΙΧΤΗΚΕ: το σκούρο μενού, ο καταρράκτης και η κύλιση
   της τιμής μένουν ακριβώς όπως ήταν — αυτά ήταν το ζητούμενο εξαρχής. */
.cw-sel-btn{
  box-sizing: border-box; width: 100%;
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  font-family: var(--f-body, inherit);
  font-size: clamp(1.05rem, 1rem + .3vw, 1.25rem);
  font-weight: 300;
  color: var(--c-ink, #17191E); text-align: left;
  background: transparent;
  border: 0; border-bottom: 1px solid var(--c-ink, #17191E); border-radius: 0;
  padding: .55rem 0 .8rem; cursor: pointer;
  min-height: 44px;   /* ΑΦΗ: αρχή «tablet first, με δάχτυλο» */
  transition: border-color var(--dur-fast, .18s) var(--ease, ease);
}
/* Η ΓΡΑΜΜΗ ΕΙΝΑΙ Η ΜΟΝΗ ΕΝΔΕΙΞΗ — γι' αυτό αλλάζει χρώμα και στις τρεις
   καταστάσεις, ακριβώς όπως στα πεδία κειμένου δίπλα. */
.cw-sel-btn:hover{ border-bottom-color: var(--c-teal-500, #00807D); }
.cw-sel-btn:focus-visible{ outline: none; border-bottom-color: var(--c-teal-500, #00807D); }
.cw-sel-btn[aria-expanded="true"]{ border-bottom-color: var(--c-teal-500, #00807D); }
.cw-sel-btn:disabled{ opacity: .55; cursor: default; }
/* Το κόκκινο/teal πλαίσιο σφάλματος τυλίγει το .nfield· η γραμμή ακολουθεί,
   όπως κάνει και το γυμνό <select> (style.css:926). */
.nfield.is-invalid .cw-sel-btn{ border-bottom-color: var(--c-cta, #00807D); }

.cw-sel-cur{ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* ΤΟ ΒΕΛΑΚΙ: ίδιο σχήμα και θέση με το background-image του γυμνού select
   (14×9, δεξιά .2rem). Εδώ είναι πραγματικό <svg>, οπότε μπορεί και να γυρίζει
   όταν ανοίγει — κάτι που το background-image δεν έκανε ποτέ. */
.cw-sel-chev{
  width: 14px; height: 9px; flex: none; margin-right: .2rem;
  color: var(--c-ink, #10201D); transition: transform .2s;
}
.cw-sel-btn[aria-expanded="true"] .cw-sel-chev{ transform: rotate(180deg); }

/* ── ΤΟ ΑΝΟΙΧΤΟ ΦΥΛΛΟ ─────────────────────────────────────────────────────────
   ΣΚΟΥΡΟ ΕΠΙΤΗΔΕΣ. Ο λόγος είναι ο ίδιος με της πλατφόρμας: όταν όλα είναι
   λευκά, δεν φαίνεται τι έχει ανοίξει. Το κουμπί μένει φωτεινό (κλειστό
   στοιχείο της φόρμας)· σκούρο γίνεται ΜΟΝΟ ό,τι είναι ανοιχτό τώρα.
   position:fixed γιατί το JS το στέλνει στο <body> (portal) — γονείς με
   backdrop-filter σπάνε το fixed. */
.cw-sel-pop{
  position: fixed; z-index: 1200;
  display: flex; flex-direction: column; gap: 2px;
  background: rgba(23, 25, 30, .93);
  backdrop-filter: blur(14px) saturate(140%);
  -webkit-backdrop-filter: blur(14px) saturate(140%);
  border: 1px solid rgba(255, 255, 255, .13);
  border-radius: 14px;
  box-shadow: 0 22px 60px -20px rgba(8, 12, 16, .6);
  padding: 6px; overscroll-behavior: contain;
  /* Δίχτυ για οθόνες με λίγο ύψος (κινητό σε landscape): εκεί η κύλιση είναι
     προτιμότερη από μενού που βγαίνει εκτός οθόνης. Οι 10 τάξεις × 44px + κενά
     ≈ 470px χωράνε άνετα σε κανονική οθόνη. Η place() στο cw-select.js ήδη το
     γυρίζει ΠΑΝΩ από το κουμπί όταν δεν χωράει από κάτω. */
  max-height: min(78vh, 560px); overflow-y: auto;
}
.cw-sel-pop[hidden]{ display: none; }

/* ── ΟΙ ΕΠΙΛΟΓΕΣ ──────────────────────────────────────────────────────────────
   min-height 44px ΚΑΙ flex:none μαζί: το min-height ΔΕΝ προστατεύει από
   flex-shrink — όταν η λίστα ξεπερνά το ύψος, το flex συμπιέζει τα items
   (μετρήθηκε στην πλατφόρμα: 44→43px). Με flex:none κρατούν το ύψος τους
   και η λίστα κυλάει, όπως πρέπει. */
.cw-sel-opt{
  font-family: inherit; font-size: .95rem; font-weight: 500;
  color: rgba(255, 255, 255, .92); background: transparent; border: 0;
  border-radius: 999px; padding: 0 14px 0 10px; cursor: pointer; white-space: nowrap;
  min-height: 44px; display: flex; align-items: center; gap: 8px;
  flex: none; box-sizing: border-box;
  transition: background .12s, color .12s;
}
.cw-sel-opt:hover,
.cw-sel-opt.hl{ background: rgba(255, 255, 255, .12); }
/* ΤΟ ΓΕΜΙΣΜΑ ΕΙΝΑΙ #4BECE7 (brand: το ανοιχτό teal ΜΟΝΟ ως γέμισμα, ποτέ ως
   λειτουργικό χρώμα). Σκούρο μελάνι από πάνω — αντίθεση 11:1, πολύ πάνω από
   το όριο 4,5:1, και διαβάζεται αμέσως ως «αυτό είναι το διαλεγμένο». */
.cw-sel-opt.on{
  background: var(--c-accent, #4BECE7); color: #0B1F1E; font-weight: 700;
}
.cw-sel-tick{ flex: none; width: 15px; height: 15px; opacity: 0; transition: opacity .12s; }
.cw-sel-tick svg{ width: 100%; height: 100%; display: block; }
.cw-sel-opt.on .cw-sel-tick{ opacity: 1; }
.cw-sel-txt{ overflow: hidden; text-overflow: ellipsis; }

/* ── ΑΠΟΧΡΩΣΕΙΣ ΕΠΙΛΟΓΩΝ (data-tone) ──────────────────────────────────────────
   Δεν χρησιμοποιούνται σήμερα στο site — μπαίνουν ώστε το εξάρτημα να μη
   «λείπει» κομμάτια αν αύριο έρθει μενού με σβησμένη ή επικίνδυνη επιλογή.
   Το «— επιλέξτε —» είναι muted: γκρι, και ΧΩΡΙΣ το γέμισμα όταν είναι το
   τρέχον — το γέμισμα διαβάζεται «διάλεξα κάτι», ενώ εδώ σημαίνει το αντίθετο. */
.cw-sel-opt[data-tone="muted"]{ color: rgba(255, 255, 255, .55); font-weight: 500; }
.cw-sel-opt[data-tone="muted"].on{
  background: rgba(255, 255, 255, .10); color: rgba(255, 255, 255, .62); font-weight: 500;
}
.cw-sel-opt[data-tone="reserve"]{
  outline: 1.5px dashed rgba(255, 255, 255, .35); outline-offset: -2px; border-radius: 999px;
}
.cw-sel-opt[data-tone="reserve"].on{ outline-style: solid; outline-color: rgba(255, 255, 255, .6); }
.cw-sel-opt[data-tone="danger"]{ color: #FF9A93; }
.cw-sel-opt[data-tone="danger"].on{ background: rgba(176, 69, 63, .5); color: #fff; }
.cw-sel[data-tone="danger"] .cw-sel-cur{ color: #B0453F; }

/* ── ΑΝΟΙΓΜΑ ──────────────────────────────────────────────────────────────── */
@keyframes cwSelIn{
  from{ opacity: 0; transform: translateY(-4px) scale(.985); }
  to  { opacity: 1; transform: none; }
}
.cw-sel-pop:not([hidden]){
  animation: cwSelIn .16s cubic-bezier(.22, 1, .36, 1); transform-origin: top center;
}

/* ── ΤΟ ΣΥΡΤΑΡΙ: το φύλλο ΣΕΡΝΕΤΑΙ από κάτω από το κουμπί ─────────────────────
   Το JS δίνει πρώτα ύψος μηδέν στη θέση του κουμπιού και μετά το ανοίγει.
   Η καμπύλη έχει μικρή υπέρβαση (1.30) — το φύλλο «κάθεται» αντί να σταματά
   ξερά. Οι τιμές είναι ΑΚΡΙΒΩΣ αυτές της πλατφόρμας. */
.cw-sel-pop.is-drawer{
  overflow: hidden;
  transition: top .62s cubic-bezier(.40, 1.30, .42, 1),
              height .62s cubic-bezier(.40, 1.30, .42, 1);
}
.cw-sel-pop.is-cascade{ animation: none; }   /* το συρτάρι αντικαθιστά το άνοιγμα */

/* ── Ο ΚΑΤΑΡΡΑΚΤΗΣ: οι επιλογές ρέουν μία-μία ─────────────────────────────────
   34ms η μία μετά την άλλη, με φρένο στις 10 (min(--i, 9)) ώστε μια μεγάλη
   λίστα να μη γίνεται αναμονή. Οι 10 τάξεις μας φτάνουν ακριβώς ως εκεί. */
.cw-sel-pop.is-cascade .cw-sel-opt{ opacity: 0; transform: translateY(7px); }
.cw-sel-pop.is-cascade.is-in .cw-sel-opt{
  opacity: 1; transform: none;
  transition: opacity .30s ease, transform .30s cubic-bezier(.2, .7, .3, 1);
  transition-delay: calc(min(var(--i, 0), 9) * 34ms);
}

/* ── Η ΤΙΜΗ ΚΥΛΑΕΙ ΑΝΤΙ ΝΑ ΑΛΛΑΖΕΙ ΑΚΑΡΙΑΙΑ ──────────────────────────────────
   Δύο όψεις στο ίδιο κουτί: η παλιά ανεβαίνει και σβήνει, η νέα έρχεται από
   κάτω. Δίνει στο μάτι το «τι έγινε» — αλλιώς η αλλαγή είναι ένα τρεμόπαιγμα.
   flex:1 στη θέση: αλλιώς η ΠΑΛΙΑ όψη έδινε το πλάτος και η νέα, απόλυτη πάνω
   της, κοβόταν (μετρημένο στην πλατφόρμα). */
.cw-sel-cur.is-roll{ position: relative; overflow: hidden; display: block; flex: 1 1 auto; min-width: 0; }
.cw-sel-cur .cw-sel-face{
  display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  transition: transform .28s cubic-bezier(.32, .08, .24, 1), opacity .28s;
}
.cw-sel-cur .cw-sel-face.next{ position: absolute; inset: 0; transform: translateY(100%); opacity: 0; }
.cw-sel-cur.rolling .cw-sel-face.cur { transform: translateY(-100%); opacity: 0; }
.cw-sel-cur.rolling .cw-sel-face.next{ transform: translateY(0); opacity: 1; }

/* ── ΜΠΑΡΑ ΚΥΛΙΣΗΣ ΜΕΣΑ ΣΤΟ ΣΚΟΥΡΟ ΦΥΛΛΟ ────────────────────────────────────
   Η προεπιλεγμένη είναι φωτεινή και ουρλιάζει πάνω στο σκούρο. */
.cw-sel-pop::-webkit-scrollbar{ width: 8px; }
.cw-sel-pop::-webkit-scrollbar-track{ background: transparent; }
.cw-sel-pop::-webkit-scrollbar-thumb{ background: rgba(255, 255, 255, .18); border-radius: 999px; }
.cw-sel-pop::-webkit-scrollbar-thumb:hover{ background: rgba(255, 255, 255, .28); }

/* ── ΟΤΑΝ ΤΟ ΘΟΛΩΜΑ ΔΕΝ ΕΙΝΑΙ ΕΠΙΘΥΜΗΤΟ ─────────────────────────────────────
   Χωρίς θόλωμα, το ημιδιάφανο φύλλο αφήνει να διαβάζονται τα γράμματα από
   κάτω και η λίστα γίνεται αδιάβαστη. Άρα: όχι θόλωμα → συμπαγές χρώμα. */
html.lite .cw-sel-pop,
html.no-glass .cw-sel-pop{ background: #17191E; backdrop-filter: none; -webkit-backdrop-filter: none; }
@media (prefers-reduced-transparency: reduce){
  .cw-sel-pop{ background: #17191E; backdrop-filter: none; -webkit-backdrop-filter: none; }
}

/* ── ΓΙΑ ΟΣΟΥΣ Η ΚΙΝΗΣΗ ΠΡΟΚΑΛΕΙ ΖΑΛΗ ───────────────────────────────────────
   Το μενού ανοίγει κανονικά, απλώς ακαριαία. */
@media (prefers-reduced-motion: reduce){
  .cw-sel-pop:not([hidden]){ animation: none; }
  .cw-sel-btn, .cw-sel-chev, .cw-sel-opt, .cw-sel-tick{ transition: none; }
  .cw-sel-pop.is-drawer, .cw-sel-cur .cw-sel-face{ transition: none; }
  .cw-sel-pop.is-cascade .cw-sel-opt{ opacity: 1; transform: none; transition: none; }
}

/* ── iOS: ΚΑΜΙΑ ΠΑΡΕΜΒΑΣΗ, ΚΑΙ ΕΙΝΑΙ ΣΩΣΤΟ ─────────────────────────────────────
   Εντολή Αντώνη 29/8: «σε iOS ας το σκέτο να εμφανίζεται και να παίρνει τις
   ρυθμίσεις του iOS». Το cw-select.js ανιχνεύει iOS/iPad, ΔΕΝ ντύνει κανένα
   μενού και βάζει `sel-native` στο <html>.

   ΕΙΧΑ ΓΡΑΨΕΙ ΕΔΩ ΚΑΝΟΝΕΣ ΚΑΙ ΤΟΥΣ ΑΦΑΙΡΕΣΑ (29/8): έδιναν στο γυμνό <select>
   σχήμα pill — δηλαδή ξανάφερναν από την πίσω πόρτα ακριβώς αυτό που ζητήθηκε
   να φύγει. ΔΕΝ ΧΡΕΙΑΖΕΤΑΙ ΤΙΠΟΤΑ: το `.nfield select` του style.css (γρ. 927)
   ήδη ντύνει το γυμνό select με γραμμή από κάτω και βελάκι — το ίδιο ακριβώς
   στυλ με το ντυμένο κουμπί παραπάνω. Σε iOS και σε Android/υπολογιστή το
   ΚΛΕΙΣΤΟ πεδίο φαίνεται ΙΔΙΟ· αλλάζει μόνο τι ανοίγει από κάτω.
   ⚠ ΚΑΙ ΤΟ ΖΟΥΜ ΕΙΝΑΙ ΚΑΛΥΜΜΕΝΟ: το iOS ζουμάρει τη σελίδα όταν το πεδίο έχει
   γράμματα κάτω από 16px· εκεί το ελάχιστο του clamp είναι 1,05rem = 16,8px. */
