/* =====================================================================
   Marilo Confirmation — feuille de style
   Palette : pétrole profond + papier ardoise + safran
   Type    : Bricolage Grotesque (titres) / IBM Plex Sans (+Arabic) / Plex Mono (chiffres)
   ===================================================================== */

:root{
  --ink:#0F2830;
  --ink-800:#153643;
  --ink-700:#1D4553;
  --ink-500:#2E5C6B;
  --paper:#EDF1F2;
  --surface:#FFFFFF;
  --surface-2:#F7F9FA;
  --saffron:#E39B2F;
  --saffron-700:#C07F1C;
  --saffron-soft:#FDF2DE;
  --jade:#12876B;
  --jade-soft:#E1F3EE;
  --clay:#C0453A;
  --clay-soft:#FBE9E7;
  --sky:#2C6E9B;
  --sky-soft:#E5EFF6;
  --slate:#5E7883;
  --slate-400:#8AA1AA;
  --line:#D9E2E5;
  --line-soft:#E9EFF1;

  --r-sm:6px; --r:10px; --r-lg:16px; --r-full:999px;
  --sh-1:0 1px 2px rgba(15,40,48,.06), 0 1px 3px rgba(15,40,48,.05);
  --sh-2:0 4px 12px rgba(15,40,48,.08);
  --sh-3:0 18px 45px rgba(15,40,48,.18);

  --sidebar-w:264px;
  --topbar-h:64px;

  --font-display:"Bricolage Grotesque","IBM Plex Sans Arabic","IBM Plex Sans",system-ui,sans-serif;
  --font-body:"IBM Plex Sans","IBM Plex Sans Arabic",system-ui,-apple-system,"Segoe UI",sans-serif;
  --font-mono:"IBM Plex Mono","IBM Plex Sans Arabic",ui-monospace,"SF Mono",Menlo,monospace;
}

html[dir="rtl"]{
  --font-display:"IBM Plex Sans Arabic","Bricolage Grotesque",system-ui,sans-serif;
  --font-body:"IBM Plex Sans Arabic","IBM Plex Sans",system-ui,sans-serif;
}

*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{
  font-family:var(--font-body);
  background:var(--paper);
  color:var(--ink);
  font-size:15px;
  line-height:1.55;
  -webkit-font-smoothing:antialiased;
  min-height:100vh;
}
a{color:var(--ink-500);text-decoration:none}
a:hover{color:var(--saffron-700)}
img{max-width:100%;display:block}
h1,h2,h3,h4{font-family:var(--font-display);margin:0;line-height:1.15;letter-spacing:-.015em;font-weight:600}
h1{font-size:1.65rem}
h2{font-size:1.2rem}
h3{font-size:1rem}
p{margin:0 0 .8em}
hr{border:0;border-top:1px solid var(--line);margin:1.4rem 0}

:focus-visible{outline:2px solid var(--saffron);outline-offset:2px;border-radius:4px}

.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.muted{color:var(--slate)}
.small{font-size:.82rem}
.tiny{font-size:.74rem}
.strong{font-weight:600}
.nowrap{white-space:nowrap}
.center{text-align:center}
.end{text-align:end}
.hide{display:none !important}
.mt-0{margin-top:0}.mt-1{margin-top:.5rem}.mt-2{margin-top:1rem}.mt-3{margin-top:1.5rem}
.mb-0{margin-bottom:0}.mb-1{margin-bottom:.5rem}.mb-2{margin-bottom:1rem}.mb-3{margin-bottom:1.5rem}


/* --------------------------------------------- Dimensions des icônes */
.ico{width:18px;height:18px;flex:none}
.kpi-label .ico{width:15px;height:15px;opacity:.6}
.card-head h2 svg,.card-head h3 svg{width:17px;height:17px;color:var(--slate);vertical-align:-3px}
.pw-toggle svg{width:18px;height:18px}
.modal-head .x svg{width:18px;height:18px}
.empty-mark svg{width:42px;height:42px;stroke-width:1.2;margin:0 auto}
.pipe-legend .dot,.rank .dot{flex:none}

/* ---------------------------------------------------------------- Skip */
.skip{position:absolute;inset-inline-start:-9999px;top:0;background:var(--ink);color:#fff;padding:.6rem 1rem;z-index:999}
.skip:focus{inset-inline-start:0}

/* ================================================================ SHELL */
.shell{display:flex;min-height:100vh}

.sidebar{
  width:var(--sidebar-w);flex:0 0 var(--sidebar-w);
  background:var(--ink);color:#CFDDE2;
  display:flex;flex-direction:column;
  position:fixed;inset-block:0;inset-inline-start:0;z-index:60;
  transition:transform .25s ease;
}
.brand{
  display:flex;align-items:center;gap:.7rem;
  padding:1.15rem 1.25rem;border-bottom:1px solid rgba(255,255,255,.08);
}
.brand-mark{
  width:38px;height:38px;flex:none;border-radius:11px;
  background:linear-gradient(150deg,var(--saffron),#D2751E);
  display:grid;place-items:center;color:#20130A;
  font-family:var(--font-display);font-weight:700;font-size:1.05rem;
  box-shadow:inset 0 -2px 0 rgba(0,0,0,.15);
}
.brand-text{min-width:0}
.brand-name{font-family:var(--font-display);font-weight:600;color:#fff;font-size:1rem;line-height:1.1}
.brand-sub{font-size:.7rem;color:#7D97A0;letter-spacing:.04em;text-transform:uppercase;margin-top:2px}

.nav{flex:1;overflow-y:auto;padding:.9rem .75rem 1.5rem}
.nav-group{margin-top:1.1rem;padding:0 .55rem .4rem;font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;color:#61818B;font-weight:600}
.nav-group:first-child{margin-top:0}
.nav a{
  display:flex;align-items:center;gap:.7rem;
  padding:.62rem .6rem;border-radius:var(--r);
  color:#C3D4DA;font-size:.9rem;font-weight:500;
  margin-bottom:2px;position:relative;transition:background .15s,color .15s;
}
.nav a:hover{background:rgba(255,255,255,.06);color:#fff}
.nav a.on{background:var(--ink-700);color:#fff}
.nav a.on::before{
  content:"";position:absolute;inset-inline-start:-.75rem;top:50%;transform:translateY(-50%);
  width:3px;height:20px;background:var(--saffron);border-radius:0 3px 3px 0;
}
html[dir="rtl"] .nav a.on::before{border-radius:3px 0 0 3px}
.nav .ico{width:19px;height:19px;flex:none;opacity:.85}
.nav a.on .ico{opacity:1}
.nav .count{
  margin-inline-start:auto;background:var(--saffron);color:#241505;
  font-family:var(--font-mono);font-size:.7rem;font-weight:600;
  padding:1px 7px;border-radius:var(--r-full);
}
.nav a.on .count{background:var(--saffron)}

.side-foot{padding:.9rem 1rem;border-top:1px solid rgba(255,255,255,.08);font-size:.72rem;color:#5F7C86}

.main{flex:1;min-width:0;margin-inline-start:var(--sidebar-w);display:flex;flex-direction:column}

.topbar{
  height:var(--topbar-h);position:sticky;top:0;z-index:40;
  background:rgba(255,255,255,.88);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line);
  display:flex;align-items:center;gap:1rem;padding:0 1.4rem;
}
.burger{display:none;background:none;border:0;padding:.4rem;cursor:pointer;color:var(--ink)}
.page-title{font-family:var(--font-display);font-size:1.05rem;font-weight:600;margin:0}
.topbar-right{margin-inline-start:auto;display:flex;align-items:center;gap:.6rem}

.lang-switch{display:flex;background:var(--paper);border-radius:var(--r-full);padding:3px;border:1px solid var(--line)}
.lang-switch a{
  padding:.2rem .62rem;border-radius:var(--r-full);font-size:.78rem;font-weight:600;color:var(--slate);
}
.lang-switch a.on{background:var(--surface);color:var(--ink);box-shadow:var(--sh-1)}

.userchip{display:flex;align-items:center;gap:.55rem;padding:.28rem .28rem;border-radius:var(--r-full);border:1px solid var(--line);background:var(--surface)}
.userchip .who{padding-inline-end:.6rem;line-height:1.15}
.userchip .who b{display:block;font-size:.82rem;font-weight:600}
.userchip .who span{font-size:.7rem;color:var(--slate)}

.avatar{
  width:34px;height:34px;border-radius:var(--r-full);flex:none;
  display:grid;place-items:center;font-size:.78rem;font-weight:700;
  font-family:var(--font-display);color:#fff;
  background:hsl(var(--hue,200) 38% 38%);
}
.avatar.sm{width:26px;height:26px;font-size:.66rem}
.avatar.lg{width:56px;height:56px;font-size:1.15rem}

.content{padding:1.5rem 1.4rem 4rem;max-width:1440px;width:100%}

/* =============================================================== PAGES */
.page-head{display:flex;align-items:flex-start;gap:1rem;flex-wrap:wrap;margin-bottom:1.4rem}
.page-head .lede{color:var(--slate);margin:.35rem 0 0;font-size:.92rem}
.page-head .tools{margin-inline-start:auto;display:flex;gap:.5rem;flex-wrap:wrap}
.eyebrow{
  font-size:.68rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--saffron-700);font-weight:600;margin-bottom:.35rem;display:block;
}

/* =============================================================== CARDS */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-1)}
.card + .card{margin-top:1.1rem}
.card-head{display:flex;align-items:center;gap:.75rem;padding:1rem 1.15rem;border-bottom:1px solid var(--line-soft)}
.card-head h2,.card-head h3{font-size:.98rem}
.card-head .tools{margin-inline-start:auto;display:flex;gap:.45rem;align-items:center}
.card-body{padding:1.15rem}
.card-body.tight{padding:.6rem}
.card-foot{padding:.85rem 1.15rem;border-top:1px solid var(--line-soft);background:var(--surface-2);border-radius:0 0 var(--r-lg) var(--r-lg)}

.grid{display:grid;gap:1.1rem}
.g-2{grid-template-columns:repeat(2,minmax(0,1fr))}
.g-3{grid-template-columns:repeat(3,minmax(0,1fr))}
.g-4{grid-template-columns:repeat(4,minmax(0,1fr))}
.g-main{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}
.g-side{grid-template-columns:minmax(0,1fr) minmax(0,2fr)}

/* ================================================================= KPI */
.kpis{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}
.kpi{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:1.05rem 1.15rem;position:relative;overflow:hidden;box-shadow:var(--sh-1);
}
.kpi::after{content:"";position:absolute;inset-block-start:0;inset-inline-start:0;width:100%;height:3px;background:var(--line)}
.kpi.k-money::after{background:var(--saffron)}
.kpi.k-good::after{background:var(--jade)}
.kpi.k-bad::after{background:var(--clay)}
.kpi.k-info::after{background:var(--sky)}
.kpi-label{font-size:.76rem;color:var(--slate);font-weight:500;display:flex;align-items:center;gap:.4rem}
.kpi-value{font-family:var(--font-display);font-size:1.85rem;font-weight:600;letter-spacing:-.02em;margin-top:.35rem;line-height:1.05}
.kpi-value.num{font-family:var(--font-mono);font-size:1.6rem;font-weight:600}
.kpi-sub{font-size:.76rem;color:var(--slate-400);margin-top:.3rem}
.kpi-sub b{color:var(--ink);font-weight:600}

/* ====================================================== PIPELINE (signature) */
.pipeline{padding:.4rem 0 0}
.pipe-bar{display:flex;height:34px;border-radius:var(--r);overflow:hidden;background:var(--line-soft);border:1px solid var(--line)}
.pipe-seg{
  display:grid;place-items:center;color:#fff;font-family:var(--font-mono);
  font-size:.76rem;font-weight:600;min-width:0;transition:flex-grow .4s ease;
}
.pipe-seg span{padding-inline:.3rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pipe-new{background:var(--slate-400)}
.pipe-work{background:var(--sky)}
.pipe-conf{background:var(--saffron)}
.pipe-paid{background:var(--jade)}
.pipe-canc{background:var(--clay)}
.pipe-legend{display:flex;flex-wrap:wrap;gap:.35rem 1.1rem;margin-top:.85rem}
.pipe-legend div{display:flex;align-items:center;gap:.45rem;font-size:.8rem;color:var(--slate)}
.dot{width:9px;height:9px;border-radius:3px;flex:none}
.pipe-legend b{color:var(--ink);font-family:var(--font-mono);font-weight:600}


/* ------------------------------------------------- Choix de statut */
.picks{display:flex;flex-wrap:wrap;gap:.45rem}
.pick{position:relative;cursor:pointer;display:block}
.pick input{position:absolute;inset:0;width:100%;height:100%;opacity:0;margin:0;cursor:pointer}
.pick span{
  display:block;padding:.5rem .85rem;border:1px solid var(--line);border-radius:var(--r);
  font-size:.85rem;font-weight:600;background:var(--surface);color:var(--ink);
  transition:background .15s,border-color .15s,color .15s;
}
.pick:hover span{border-color:var(--slate-400);background:var(--surface-2)}
.pick.on span,.pick:has(input:checked) span{background:var(--ink);border-color:var(--ink);color:#fff}
.pick input:focus-visible + span{outline:2px solid var(--saffron);outline-offset:2px}

/* ------------------------------------------------ Cartes cliquables */
a.kpi{display:block;color:inherit;text-decoration:none}
a.kpi:hover{border-color:var(--slate-400);box-shadow:var(--sh-2);color:inherit}
a.kpi:hover .kpi-label{color:var(--ink)}

/* ============================================================== SPARK */
.spark{width:100%;height:150px;display:block;overflow:visible}
.spark .bar{fill:var(--sky);opacity:.85}
.spark .bar.pos{fill:var(--jade)}
.spark .grid-line{stroke:var(--line-soft);stroke-width:1}
.spark text{font-family:var(--font-mono);font-size:9px;fill:var(--slate-400)}

/* ============================================================== CHIPS */
.chip{
  display:inline-flex;align-items:center;gap:.35rem;
  padding:.2rem .6rem;border-radius:var(--r-full);
  font-size:.76rem;font-weight:600;white-space:nowrap;line-height:1.5;
  border:1px solid transparent;
}
.chip-neutral{background:var(--paper);color:var(--slate);border-color:var(--line)}
.chip-muted{background:#F1F4F5;color:var(--slate-400);border-color:var(--line)}
.chip-info{background:var(--sky-soft);color:var(--sky);border-color:#CBE0EC}
.chip-warn{background:#FEF4E3;color:#9A6510;border-color:#F4E0BC}
.chip-accent{background:var(--saffron-soft);color:var(--saffron-700);border-color:#F2DCB4}
.chip-success{background:var(--jade-soft);color:var(--jade);border-color:#C4E5DB}
.chip-danger{background:var(--clay-soft);color:var(--clay);border-color:#F2CFCB}
.chip-dark{background:var(--ink);color:#fff}

/* ============================================================ BUTTONS */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.45rem;
  padding:.55rem .95rem;border-radius:var(--r);
  font-family:var(--font-body);font-size:.87rem;font-weight:600;
  border:1px solid var(--line);background:var(--surface);color:var(--ink);
  cursor:pointer;transition:background .15s,border-color .15s,transform .05s,box-shadow .15s;
  text-decoration:none;white-space:nowrap;
}
.btn:hover{background:var(--surface-2);border-color:var(--slate-400);color:var(--ink)}
.btn:active{transform:translateY(1px)}
.btn:disabled,.btn[aria-disabled="true"]{opacity:.5;pointer-events:none}
.btn svg{width:16px;height:16px;flex:none}
.btn-primary{background:var(--ink);border-color:var(--ink);color:#fff;box-shadow:var(--sh-1)}
.btn-primary:hover{background:var(--ink-700);border-color:var(--ink-700);color:#fff}
.btn-accent{background:var(--saffron);border-color:var(--saffron);color:#241505}
.btn-accent:hover{background:var(--saffron-700);border-color:var(--saffron-700);color:#fff}
.btn-good{background:var(--jade);border-color:var(--jade);color:#fff}
.btn-good:hover{background:#0E6E57;border-color:#0E6E57;color:#fff}
.btn-danger{background:var(--surface);border-color:#EBC9C5;color:var(--clay)}
.btn-danger:hover{background:var(--clay-soft);border-color:var(--clay);color:var(--clay)}
.btn-ghost{background:transparent;border-color:transparent;color:var(--slate)}
.btn-ghost:hover{background:var(--paper);color:var(--ink)}
.btn-sm{padding:.35rem .65rem;font-size:.79rem;border-radius:var(--r-sm)}
.btn-sm svg{width:14px;height:14px}
.btn-lg{padding:.75rem 1.3rem;font-size:.95rem}
.btn-block{width:100%}
.btn-icon{padding:.42rem;border-radius:var(--r-sm)}
.btn-icon svg{width:16px;height:16px}

.btn-row{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center}

/* ============================================================== FORMS */
.field{margin-bottom:1rem}
.field label,.lbl{display:block;font-size:.82rem;font-weight:600;margin-bottom:.35rem;color:var(--ink-700)}
.field .hint{font-size:.76rem;color:var(--slate);margin-top:.3rem}
.req{color:var(--clay)}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=tel],
input[type=date],input[type=search],input[type=url],select,textarea{
  width:100%;padding:.58rem .7rem;font-family:var(--font-body);font-size:.9rem;
  border:1px solid var(--line);border-radius:var(--r);background:var(--surface);color:var(--ink);
  transition:border-color .15s,box-shadow .15s;
}
input:focus,select:focus,textarea:focus{
  outline:none;border-color:var(--ink-500);box-shadow:0 0 0 3px rgba(46,92,107,.12);
}
input.num,select.num{font-family:var(--font-mono)}
textarea{min-height:90px;resize:vertical;line-height:1.5}
select{
  appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath fill='%235E7883' d='M1 1.5 6 6.5l5-5'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-size:11px;
  background-position:right .7rem center;padding-inline-end:2rem;
}
html[dir="rtl"] select{background-position:left .7rem center;padding-inline-end:.7rem;padding-inline-start:2rem}
input[disabled],select[disabled],textarea[disabled]{background:var(--surface-2);color:var(--slate);cursor:not-allowed}

.check{display:flex;align-items:flex-start;gap:.55rem;padding:.4rem 0;cursor:pointer;font-size:.87rem}
.check input{width:17px;height:17px;margin:2px 0 0;accent-color:var(--ink);flex:none;cursor:pointer}
.check span{line-height:1.4}

.row{display:grid;gap:1rem;grid-template-columns:repeat(2,minmax(0,1fr))}
.row-3{display:grid;gap:1rem;grid-template-columns:repeat(3,minmax(0,1fr))}

.input-group{display:flex}
.input-group input{border-start-end-radius:0;border-end-end-radius:0}
.input-group .btn{border-start-start-radius:0;border-end-start-radius:0;border-inline-start:0}

.filters{display:flex;gap:.6rem;flex-wrap:wrap;align-items:flex-end}
.filters .field{margin:0;min-width:150px}
.filters .grow{flex:1;min-width:200px}

/* ============================================================= TABLES */
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
table.tbl{width:100%;border-collapse:collapse;font-size:.88rem}
table.tbl th{
  text-align:start;font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;
  color:var(--slate);font-weight:600;padding:.65rem .8rem;
  border-bottom:1px solid var(--line);background:var(--surface-2);white-space:nowrap;
}
table.tbl td{padding:.72rem .8rem;border-bottom:1px solid var(--line-soft);vertical-align:middle}
table.tbl tbody tr:hover{background:var(--surface-2)}
table.tbl tbody tr:last-child td{border-bottom:0}
table.tbl td.acts{white-space:nowrap;text-align:end}
table.tbl .who{display:flex;align-items:center;gap:.55rem;min-width:0}
table.tbl .who b{font-weight:600;display:block;line-height:1.25}
.tbl-checkbox{width:34px}
.tbl-checkbox input{width:16px;height:16px;accent-color:var(--ink);cursor:pointer}
tr.picked{background:var(--saffron-soft) !important}

/* Numéro de téléphone : élément signature */
.tel{
  font-family:var(--font-mono);font-size:.92rem;font-weight:600;letter-spacing:.02em;
  color:var(--ink);display:inline-flex;align-items:center;gap:.4rem;direction:ltr;
}
.tel:hover{color:var(--saffron-700)}
.tel svg{width:13px;height:13px;opacity:.5}

/* ========================================================= CALL SLIPS */
.slips{display:grid;gap:.7rem}
.slip{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r);
  padding:.85rem 1rem;display:flex;align-items:center;gap:1rem;flex-wrap:wrap;
  border-inline-start:3px solid var(--slate-400);transition:box-shadow .15s,border-color .15s;
}
.slip:hover{box-shadow:var(--sh-2)}
.slip.s-confirmed{border-inline-start-color:var(--saffron)}
.slip.s-paid{border-inline-start-color:var(--jade)}
.slip.s-cancelled{border-inline-start-color:var(--clay)}
.slip.s-callback{border-inline-start-color:#D9A441}
.slip.s-assigned,.slip.s-new{border-inline-start-color:var(--sky)}
.slip-main{min-width:180px;flex:1}
.slip-name{font-weight:600;font-size:.95rem;line-height:1.25}
.slip-meta{font-size:.78rem;color:var(--slate);margin-top:.15rem}
.slip-money{font-family:var(--font-mono);font-weight:600;font-size:.9rem;text-align:end}
.slip-money small{display:block;font-size:.68rem;color:var(--slate);font-family:var(--font-body);font-weight:400}
.slip-acts{display:flex;gap:.4rem;margin-inline-start:auto}

/* ============================================================ RANKING */
.rank{display:flex;align-items:center;gap:.75rem;padding:.6rem 0;border-bottom:1px solid var(--line-soft)}
.rank:last-child{border-bottom:0}
.rank-pos{
  font-family:var(--font-mono);font-size:.8rem;font-weight:600;color:var(--slate-400);
  width:22px;text-align:center;flex:none;
}
.rank:first-child .rank-pos{color:var(--saffron-700)}
.rank-body{flex:1;min-width:0}
.rank-name{font-weight:600;font-size:.88rem}
.rank-bar{height:5px;background:var(--line-soft);border-radius:var(--r-full);margin-top:.35rem;overflow:hidden}
.rank-bar i{display:block;height:100%;background:var(--saffron);border-radius:var(--r-full)}
.rank-val{font-family:var(--font-mono);font-size:.85rem;font-weight:600;text-align:end;flex:none}
.rank-val small{display:block;font-size:.68rem;color:var(--slate);font-weight:400;font-family:var(--font-body)}

/* ========================================================== TIMELINE */
.timeline{position:relative;padding-inline-start:1.1rem}
.timeline::before{content:"";position:absolute;inset-inline-start:4px;top:6px;bottom:6px;width:2px;background:var(--line)}
.tl-item{position:relative;padding-bottom:1rem}
.tl-item:last-child{padding-bottom:0}
.tl-item::before{
  content:"";position:absolute;inset-inline-start:-1.1rem;top:6px;
  width:10px;height:10px;border-radius:50%;background:var(--surface);
  border:2px solid var(--slate-400);
}
.tl-item.hl::before{border-color:var(--saffron);background:var(--saffron)}
.tl-text{font-size:.86rem;line-height:1.45}
.tl-meta{font-size:.73rem;color:var(--slate-400);margin-top:.1rem}

/* ============================================================ ALERTS */
.alert{
  display:flex;gap:.7rem;align-items:flex-start;
  padding:.8rem 1rem;border-radius:var(--r);font-size:.88rem;
  border:1px solid;margin-bottom:1.1rem;
}
.alert svg{width:18px;height:18px;flex:none;margin-top:1px}
.alert-ok{background:var(--jade-soft);border-color:#C4E5DB;color:#0B5F4B}
.alert-err{background:var(--clay-soft);border-color:#F2CFCB;color:#8E2E26}
.alert-warn{background:#FEF4E3;border-color:#F4E0BC;color:#8A5A0E}
.alert-info{background:var(--sky-soft);border-color:#CBE0EC;color:#1F5474}
.alert .btn{margin-inline-start:auto;flex:none}
.alert a{color:inherit;text-decoration:underline}

/* ============================================================= TOAST */
.toast{
  position:fixed;inset-block-end:1.2rem;inset-inline-end:1.2rem;z-index:200;
  background:var(--ink);color:#fff;padding:.75rem 1.1rem;border-radius:var(--r);
  box-shadow:var(--sh-3);font-size:.88rem;max-width:340px;
  animation:toastIn .3s cubic-bezier(.2,.9,.3,1.2);
}
@keyframes toastIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}

/* ============================================================= MODAL */
.modal{
  position:fixed;inset:0;z-index:150;display:none;
  align-items:center;justify-content:center;padding:1rem;
  background:rgba(15,40,48,.5);backdrop-filter:blur(3px);
}
.modal.open{display:flex}
.modal-box{
  background:var(--surface);border-radius:var(--r-lg);width:100%;max-width:520px;
  box-shadow:var(--sh-3);max-height:90vh;overflow-y:auto;
  animation:modalIn .22s cubic-bezier(.2,.9,.3,1.05);
}
.modal-box.wide{max-width:720px}
@keyframes modalIn{from{opacity:0;transform:translateY(16px) scale(.98)}to{opacity:1;transform:none}}
.modal-head{display:flex;align-items:center;padding:1.1rem 1.25rem;border-bottom:1px solid var(--line-soft)}
.modal-head h3{font-size:1.05rem}
.modal-head .x{margin-inline-start:auto;background:none;border:0;cursor:pointer;color:var(--slate);padding:.25rem;line-height:0}
.modal-body{padding:1.25rem}
.modal-foot{padding:.9rem 1.25rem;border-top:1px solid var(--line-soft);display:flex;gap:.6rem;justify-content:flex-end;background:var(--surface-2);border-radius:0 0 var(--r-lg) var(--r-lg)}

/* ============================================================ EMPTY */
.empty{text-align:center;padding:3.2rem 1.5rem;color:var(--slate)}
.empty-mark{
  font-family:var(--font-display);font-size:2.6rem;font-weight:600;color:var(--line);
  line-height:1;margin-bottom:.6rem;
}
.empty h2{color:var(--ink);margin-bottom:.4rem;font-size:1.1rem}
.empty p{max-width:420px;margin:0 auto 1.1rem;font-size:.9rem}

/* ======================================================== PAGINATION */
.pager{display:flex;gap:.35rem;align-items:center;justify-content:center;padding:1rem 0 0}
.pager a,.pager span{
  min-width:34px;height:34px;display:grid;place-items:center;padding:0 .55rem;
  border-radius:var(--r-sm);font-size:.83rem;font-family:var(--font-mono);
  border:1px solid var(--line);background:var(--surface);color:var(--slate);
}
.pager a:hover{border-color:var(--slate-400);color:var(--ink)}
.pager .on{background:var(--ink);border-color:var(--ink);color:#fff;font-weight:600}
.pager .dis{opacity:.4;pointer-events:none}

/* =========================================================== BULKBAR */
.bulkbar{
  position:sticky;inset-block-end:0;z-index:30;margin-top:.5rem;
  background:var(--ink);color:#fff;border-radius:var(--r);
  padding:.6rem .9rem;display:none;align-items:center;gap:.7rem;flex-wrap:wrap;
  box-shadow:var(--sh-3);
}
.bulkbar.show{display:flex}
.bulkbar .n{font-family:var(--font-mono);font-weight:600}
.bulkbar select{background:var(--ink-700);border-color:var(--ink-500);color:#fff;width:auto;min-width:170px}
.bulkbar select option{color:var(--ink);background:#fff}
.bulkbar .spacer{margin-inline-start:auto}

/* ============================================================= LOGIN */
.auth{min-height:100vh;display:grid;grid-template-columns:1fr 1fr}
.auth-art{
  background:var(--ink);color:#fff;padding:3rem;display:flex;flex-direction:column;justify-content:space-between;
  position:relative;overflow:hidden;
}
.auth-art::before{
  content:"";position:absolute;inset-block-start:-30%;inset-inline-end:-20%;
  width:520px;height:520px;border-radius:50%;
  background:radial-gradient(circle at 35% 35%, rgba(227,155,47,.35), transparent 62%);
}
.auth-art > *{position:relative}
.auth-quote{font-family:var(--font-display);font-size:2rem;line-height:1.2;font-weight:600;max-width:16ch;letter-spacing:-.02em}
.auth-quote em{color:var(--saffron);font-style:normal}
.auth-stats{display:flex;gap:2rem;font-size:.8rem;color:#8FA8B0}
.auth-stats b{display:block;font-family:var(--font-mono);font-size:1.3rem;color:#fff;font-weight:600}
.auth-form{display:flex;align-items:center;justify-content:center;padding:2rem;background:var(--paper)}
.auth-card{width:100%;max-width:400px}
.auth-card .brand{border:0;padding:0 0 1.6rem}
.auth-card h1{font-size:1.5rem;margin-bottom:.3rem}
.auth-card .lede{color:var(--slate);font-size:.9rem;margin-bottom:1.6rem}
.auth-box{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:1.5rem;box-shadow:var(--sh-2)}
.pw-wrap{position:relative}
.pw-wrap input{padding-inline-end:2.6rem}
.pw-toggle{
  position:absolute;inset-inline-end:.5rem;top:50%;transform:translateY(-50%);
  background:none;border:0;cursor:pointer;color:var(--slate);padding:.3rem;line-height:0;
}

/* ========================================================== INSTALLER */
.install{max-width:640px;margin:0 auto;padding:2.5rem 1.2rem 4rem}
.steps{display:flex;gap:.5rem;margin-bottom:1.6rem}
.step{flex:1;height:4px;border-radius:var(--r-full);background:var(--line)}
.step.on{background:var(--saffron)}
.step.done{background:var(--jade)}
.code{
  font-family:var(--font-mono);font-size:.8rem;background:var(--ink);color:#D8E4E8;
  padding:.7rem .85rem;border-radius:var(--r);overflow-x:auto;white-space:pre;direction:ltr;text-align:left;
}
.copybox{display:flex;gap:.4rem;align-items:stretch}
textarea.codebox{
  font-family:var(--font-mono);font-size:.76rem;line-height:1.55;
  background:var(--ink);color:#D8E4E8;border-color:var(--ink);
  min-height:200px;white-space:pre;direction:ltr;text-align:left;
}
textarea.codebox:focus{border-color:var(--saffron);box-shadow:0 0 0 3px rgba(227,155,47,.2)}
.tabbar{display:flex;gap:.3rem;margin-bottom:.6rem;flex-wrap:wrap}
.copybox input{font-family:var(--font-mono);font-size:.8rem;direction:ltr;text-align:left}

/* ============================================================ MOBILE */
.scrim{position:fixed;inset:0;background:rgba(15,40,48,.45);z-index:55;display:none}
.scrim.open{display:block}

@media (max-width:1100px){
  .g-4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .g-main,.g-side{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:980px){
  .auth{grid-template-columns:1fr}
  .auth-art{display:none}
}
@media (max-width:900px){
  .sidebar{transform:translateX(-100%)}
  html[dir="rtl"] .sidebar{transform:translateX(100%)}
  .sidebar.open{transform:none;box-shadow:var(--sh-3)}
  .main{margin-inline-start:0}
  .burger{display:inline-flex}
  .content{padding:1.1rem .9rem 5rem}
  .g-3{grid-template-columns:repeat(2,minmax(0,1fr))}
  .userchip .who{display:none}
}
@media (max-width:640px){
  body{font-size:14.5px}
  h1{font-size:1.35rem}
  .g-2,.g-3,.g-4,.row,.row-3{grid-template-columns:minmax(0,1fr)}
  .kpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:.7rem}
  .kpi{padding:.85rem}
  .kpi-value{font-size:1.35rem}
  .kpi-value.num{font-size:1.25rem}
  .page-head .tools{width:100%;margin-inline-start:0}
  .page-head .tools .btn{flex:1}
  .filters .field{min-width:100%}
  .card-body{padding:.9rem}
  .slip{gap:.6rem}
  .slip-acts{width:100%;margin-inline-start:0}
  .slip-acts .btn{flex:1}
  .modal-foot{flex-direction:column-reverse}
  .modal-foot .btn{width:100%}
  .topbar{padding:0 .8rem;gap:.6rem}
  .page-title{font-size:.95rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .bulkbar{inset-block-end:.5rem}
  table.tbl{font-size:.83rem}
  table.tbl th,table.tbl td{padding:.55rem .5rem}
}

/* ============================================================= PRINT */
@media print{
  .sidebar,.topbar,.bulkbar,.btn,.pager{display:none !important}
  .main{margin:0}
  .card{box-shadow:none;border-color:#ccc}
  body{background:#fff}
}

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