/* =============================================================================
   workspace.css — S581 (Φ0, PLAN_Workspace): «Καρτέλες Εργασίας».
   Shell: tab strip + frames μέσα στο .dashboard-container (κλάση .ws-on μόνο όταν ενεργό).
   Χωρίς .ws-on / .ws-tabstrip στο DOM: ΚΑΝΕΝΑΣ κανόνας δεν εφαρμόζεται (μηδενική αλλαγή).
   Χρώματα: UI STANDARD (teal #22B2A8) μέσω των --t-* του theme.css.
   ============================================================================= */

/* Shell: ο container γίνεται στήλη ώστε τα frames να γεμίζουν το ύψος */
/* S582 (bug πελατών «το ύψος ακολουθεί το μενού»): το .app-content ΔΕΝ έχει ορισμένο ύψος (κανένα .page wrapper,
   flex:1 χωρίς flex γονέα) ⇒ η γραμμή sidebar+περιεχόμενο ψήλωνε όσο το ΨΗΛΟΤΕΡΟ παιδί = το sidebar, και τα frames
   (flex:1 μέσα στο .ws-on) κόβονταν στο ύψος του μενού. Με ενεργό shell (κλάση ws-shell από το workspace.js init)
   το .app-content παίρνει ύψος viewport − header (56px), το sidebar κυλά μόνο του (overflow-y:auto) και τα frames /
   το φόντο (.ws-body) γεμίζουν ΟΛΟ το παράθυρο, όπως το κλασικό layout. Χωρίς ws-shell: μηδενική αλλαγή. */
.app-content.ws-shell { height: calc(100vh - 56px); min-height: 0; }
/* S582 (Michael, τεστ): το sidebar σε ύψος viewport κυλά μόνο του — scrollbar ΛΕΠΤΟ και ορατό ΜΟΝΟ στο hover,
   ώστε το μενού να ΜΗ δείχνει «νέο» scrollbar (η κλασική σελίδα κυλά ολόκληρη). Standard props (Chrome 121+/Firefox)
   + webkit fallback για παλαιότερα Chromium. */
.app-content.ws-shell > .sidebar, .app-content.ws-shell > .sidebar-mini { scrollbar-width: thin; scrollbar-color: transparent transparent; }
.app-content.ws-shell > .sidebar:hover, .app-content.ws-shell > .sidebar-mini:hover { scrollbar-color: #cbd5e1 transparent; }
.app-content.ws-shell > .sidebar::-webkit-scrollbar, .app-content.ws-shell > .sidebar-mini::-webkit-scrollbar { width: 6px; }
.app-content.ws-shell > .sidebar::-webkit-scrollbar-thumb, .app-content.ws-shell > .sidebar-mini::-webkit-scrollbar-thumb { background: transparent; border-radius: 3px; }
.app-content.ws-shell > .sidebar:hover::-webkit-scrollbar-thumb, .app-content.ws-shell > .sidebar-mini:hover::-webkit-scrollbar-thumb { background: #cbd5e1; }
/* S582 (Michael, τεστ): ΙΔΙΟ πλάτος/θέση περιεχομένου με την κλασική σελίδα — το frame πάει άκρη-άκρη (χωρίς κουτί/διπλό
   padding: το εσωτερικό .dashboard-container της σελίδας δίνει τα 15px όπως πάντα)· μόνο το strip κοστίζει ύψος (40px).
   Χωρίς ενεργή καρτέλα, ο Πίνακας Ελέγχου (.ws-body) κρατά τα 15px της κλασικής σελίδας (6 + 9). */
.dashboard-container.ws-on { display: flex; flex-direction: column; overflow: hidden; min-height: 0; padding: 6px 0 0 0; }
.dashboard-container.ws-on .ws-body { flex: 1; min-height: 0; overflow-y: auto; padding: 9px 15px 15px 15px; }
/* S583 (bug παραγωγής «το παράθυρο μένει μικρό / δεν κάνει resize»): δίχτυ ΧΩΡΙΣ JS/timing — οι ΙΔΙΕΣ ιδιότητες με τις
   κλάσεις ws-shell/ws-on εφαρμόζονται και από τη δομή του DOM (υπάρχει strip ⇒ το shell είναι ενεργό) σε browsers με :has()
   (Chrome/Edge 105+, Firefox 121+, Safari 15.4+). Οι παλαιότεροι αγνοούν ΜΟΝΟ αυτούς τους 3 κανόνες (ξεχωριστοί, ώστε να μην
   ακυρώσουν άλλους) και βασίζονται στις κλάσεις του workspace.js init/ensureShell. Κάθε αλλαγή στους κανόνες ws-shell/ws-on
   παραπάνω ⇒ ΙΔΙΑ αλλαγή εδώ. */
.app-content:has(.ws-tabstrip) { height: calc(100vh - 56px); min-height: 0; }
.dashboard-container:has(> .ws-tabstrip) { display: flex; flex-direction: column; overflow: hidden; min-height: 0; padding: 6px 0 0 0; }
.dashboard-container:has(> .ws-tabstrip) .ws-body { flex: 1; min-height: 0; overflow-y: auto; padding: 9px 15px 15px 15px; }
.ws-hidden { display: none !important; }

/* Tab strip */
/* S582: πιο συμπαγές (40px) + 15px αριστερά ώστε οι καρτέλες να ευθυγραμμίζονται με το περιεχόμενο· η γραμμή
   κάτω από το strip = το άνω όριο του frame (το panel δεν έχει πια δικό του κουτί). */
.ws-tabstrip { min-height: 40px; display: flex; align-items: flex-end; gap: 4px; padding: 0 15px 0 15px; border-bottom: 1px solid var(--t-card-border, #e2e8f0); overflow-x: auto; overflow-y: hidden; scrollbar-width: thin; flex-shrink: 0; }
.ws-tabstrip.ws-empty { min-height: 0; height: 0; padding: 0; border: 0; overflow: hidden; }
.ws-tabstrip::-webkit-scrollbar { height: 6px; }
.ws-tabstrip::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 3px; }
.ws-tab { display: inline-flex; align-items: center; gap: 8px; padding: 7px 12px 7px 14px; background: #e4eaec; color: var(--t-text-secondary, #5a6577); border: 1px solid transparent; border-bottom: none; border-radius: 8px 8px 0 0; font-size: 13px; font-weight: 500; cursor: pointer; user-select: none; white-space: nowrap; max-width: 220px; position: relative; top: 1px; transition: background .15s ease; }
.ws-tab:hover { background: #eef3f4; color: var(--t-primary-dark, #1a8f87); }
.ws-tab .tab-icon { color: var(--t-sidebar-icon, #22B2A8); font-size: 13px; }
.ws-tab .tab-label { overflow: hidden; text-overflow: ellipsis; }
.ws-tab .tab-close { width: 18px; height: 18px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; color: var(--t-text-muted, #94a3b8); font-size: 11px; margin-left: 2px; }
.ws-tab .tab-close:hover { background: #fecaca; color: var(--t-danger, #dc2626); }
.ws-tab.active { background: #fff; color: var(--t-primary-dark, #1a8f87); font-weight: 600; border-color: var(--t-card-border, #e2e8f0); box-shadow: inset 0 3px 0 var(--t-primary, #22B2A8); }
.ws-limit { align-self: center; margin-left: 10px; font-size: 12px; color: var(--t-warning, #d97706); white-space: nowrap; }

/* Φ1 — δεξί κλικ σε καρτέλα */
.ws-ctx-backdrop { position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 1060; }
.ws-ctx { position: fixed; z-index: 1061; background: #fff; border: 1px solid var(--t-card-border, #e2e8f0); border-radius: 8px; box-shadow: 0 8px 24px rgba(0,0,0,.14); padding: 6px 0; min-width: 210px; font-size: 13px; }
.ws-ctx-item { padding: 8px 16px; cursor: pointer; color: var(--t-text-primary, #343e4b); white-space: nowrap; }
.ws-ctx-item:hover { background: var(--t-primary-light, #e6f7f6); color: var(--t-primary-dark, #1a8f87); }
.ws-ctx-item.disabled { color: var(--t-text-muted, #94a3b8); cursor: default; pointer-events: none; }

/* Frames */
/* S582: άκρη-άκρη, χωρίς κουτί/στρογγύλεμα — το frame δείχνει ΑΚΡΙΒΩΣ ό,τι η κλασική σελίδα (ίδιο πλάτος, ίδιο padding). */
.ws-panels { flex: 1; min-height: 0; background: var(--t-card-bg, #fff); border: 0; border-radius: 0; overflow: hidden; }
.ws-frame { display: none; width: 100%; height: 100%; border: 0; background: #fff; }
.ws-frame.active { display: block; }

/* Φ3 — διακόπτης «Καρτέλες εργασίας» στο header (desktop)
   S582 (Michael): ghost εικονίδιο ΧΩΡΙΣ κουτί/φόντο, ίδιο μέγεθος με τα διπλανά header icons (ραβδί/ασπίδα).
   Το site.css `.user-info i { color: var(--t-secondary) }` έβαφε το glyph teal ΠΑΝΩ σε teal φόντο (αόρατο = «άδειο κουτί»)
   ⇒ τα χρώματα μπαίνουν στο <i> με μεγαλύτερη ειδικότητα. ON = teal όπως τα διπλανά, OFF = αχνό γκρι. */
.header-ws-toggle { background: none; border: 0; padding: 0; margin-left: 12px; cursor: pointer; font-size: 14px; line-height: inherit; color: inherit; vertical-align: baseline; }
.user-info .header-ws-toggle i { margin-right: 0; color: var(--t-text-muted, #94a3b8); opacity: .55; transition: color .15s ease, opacity .15s ease; }
.user-info .header-ws-toggle:hover i { color: var(--t-primary-dark, #1a8f87); opacity: 1; }
.user-info .header-ws-toggle.on i { color: var(--t-secondary, #22B2A8); opacity: 1; }

/* Embedded (μέσα σε frame): μόνο το περιεχόμενο, ίδιο container με το κανονικό layout */
.app-content.ws-embedded { height: 100vh; }
