/* RESERVAS_CENTROS · interfaz del piloto (G3.5).
   Recreación sobre Django de la referencia visual v0.3.3.3 (tokens, tipografía, componentes); sin su lógica de demo.
   Núcleo NEUTRAL: los colores de marca solo llegan por static/brand/<marca>/brand.css (tokens). Sin estilos en línea (CSP). */
:root{
  --bg:#f5f5f3; --surface:#ffffff; --surface-2:#f1f1ee; --surface-3:#e6e6e2;
  --ink:#232523; --ink-2:#474a47; --muted:#636661;
  --line:#e2e2dd; --line-strong:#8b8d88;
  --accent:#4b6a8f; /* acento gráfico (marcas, puntos); no se usa como fondo de texto */
  --brand:#2f4a6b; --brand-strong:#223852; --brand-ink:#ffffff; --brand-soft:#e7edf4; --brand-line:#b3c2d3;
  --focus:#1d5fc4;
  --st-met:#2f5435; --st-track:#7f9d7b; --st-pend:#c4a06a; --st-insuf:#958ca6; --st-follow:#c27c5c; --st-ne:#b3b0a9;
  --pill-bg:#f6e3d7; --pill-ink:#8a4a2e;
  --ok-bg:#e9efe6; --ok-ink:#243f29; --warn-bg:#f5ecdc; --warn-ink:#5f4810; --err-bg:#f6e6e0; --err-ink:#7a2f1c;
  --avail-bg:#e9efe6; --avail-ink:#243f29; --avail-line:#7f9d7b; --full-bg:#fbe8e4; --full-ink:#a3261b; /* UX02: disponibilidad / sin plazas */
  --shadow:0 1px 2px rgba(46,47,46,.04);
  --font:"Inter","Segoe UI Variable Text","Segoe UI Variable","Segoe UI",system-ui,-apple-system,Roboto,"Helvetica Neue",Arial,sans-serif;
  --r-lg:14px; --r:10px; --r-sm:8px;
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:24px; --s6:32px; --s7:48px;
}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]){
  --bg:#151716; --surface:#1d1f1e; --surface-2:#262928; --surface-3:#2f3331; --ink:#eceae5; --ink-2:#cfccc5; --muted:#aaa79f;
  --line:#343836; --line-strong:#6f7470; --brand:#9db8d8; --brand-strong:#bcd0e8; --brand-ink:#10192a; --brand-soft:#223042;
  --brand-line:#4b6079; --focus:#8ab8ff; --st-met:#8fc08c; --st-track:#6f8f6b; --st-pend:#c9a56e; --st-insuf:#a99fc4;
  --st-follow:#d08b72; --st-ne:#8a877f; --pill-bg:#43281c; --pill-ink:#f1c3ab; --ok-bg:#223320; --ok-ink:#b9e2a6;
  --warn-bg:#3a3018; --warn-ink:#efd28f; --err-bg:#3d241b; --err-ink:#f2b6a2; --avail-bg:#223320; --avail-ink:#b9e2a6; --avail-line:#4f6d4d;
  --full-bg:#3d241b; --full-ink:#f2b6a2; --shadow:none; color-scheme:dark }}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-padding-bottom:96px;scroll-padding-top:72px}
body{background:var(--bg);color:var(--ink);font-family:var(--font);font-size:15px;line-height:1.5;margin:0;-webkit-font-smoothing:antialiased}
h1,h2,h3{text-wrap:balance;margin:0;font-weight:650;color:var(--ink);letter-spacing:-.012em}
p{margin:0}
a{color:var(--brand);text-underline-offset:3px}
a:hover{color:var(--brand-strong)}
button,select,input{font:inherit;color:inherit}
:focus-visible{outline:3px solid var(--focus);outline-offset:2px;border-radius:6px}
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.skip{position:absolute;left:12px;top:-60px;z-index:50;background:var(--surface);padding:10px 14px;border-radius:var(--r-sm);border:1px solid var(--line-strong)}
.skip:focus{top:12px}
.num{font-variant-numeric:tabular-nums}
.small{font-size:13px;color:var(--muted)}
.muted{color:var(--muted)}

/* ---------- Barra de desarrollo (modo de prueba local) ---------- */
.devbar{background:var(--ink);color:var(--surface);font-size:13px;padding:6px 16px;display:flex;flex-wrap:wrap;gap:6px 16px;align-items:center;justify-content:space-between}
.devbar a,.devbar button{color:var(--surface)}
.devbar form{margin:0}
.devbar button{background:none;border:1px solid currentColor;border-radius:6px;padding:4px 10px;cursor:pointer;min-height:32px}

/* ---------- Barra de producto ---------- */
.prodbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 20px;min-height:64px;background:var(--surface);border-bottom:1px solid var(--line)}
.brand{display:inline-flex;align-items:center;gap:10px;color:var(--ink);text-decoration:none;min-height:44px}
.brand .logo{display:block;height:26px;width:auto}
.brand .product{font-size:16px;font-weight:700;line-height:1.2;color:var(--ink)}
.brand .sep{width:1px;height:20px;background:var(--line-strong)}
.who{font-size:13.5px;color:var(--muted);text-align:right;line-height:1.35}
.who b{color:var(--ink);font-weight:600}
.signout{margin:0}
.signout button{background:none;border:1px solid var(--line);border-radius:6px;padding:4px 10px;min-height:32px;font:inherit;font-size:13.5px;color:var(--ink);cursor:pointer}
.signout button:hover{border-color:var(--ink)}
.topnav{display:flex;flex-wrap:wrap;gap:4px;padding:6px 16px;background:var(--surface);border-bottom:1px solid var(--line)}
.topnav a{display:inline-flex;align-items:center;min-height:44px;padding:8px 14px;border-radius:var(--r-sm);color:var(--ink-2);text-decoration:none;font-weight:600;font-size:14.5px}
.topnav a:hover{background:var(--surface-2);color:var(--ink)}
.topnav a[aria-current="page"]{background:var(--brand-soft);color:var(--brand-strong);box-shadow:inset 0 -3px 0 var(--accent)}

/* ---------- Contenedores ---------- */
.page{padding:24px 20px 56px;margin:0 auto}
.page.narrow{max-width:560px}
.page.wide{max-width:1280px}
.stack{display:grid;gap:28px}
.head{display:grid;gap:4px}
.head .kicker{font-size:15px;font-weight:650;color:var(--brand)}
.head h1{font-size:28px;line-height:1.12;letter-spacing:-.022em}
.head .meta{display:flex;flex-wrap:wrap;gap:2px 10px;font-size:14px;color:var(--muted)}
.sechead{font-size:19px;font-weight:650}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:20px 22px;display:grid;gap:16px;align-content:start;min-width:0;box-shadow:var(--shadow)}
.card h2{font-size:19px;font-weight:650}
.lede{font-size:14px;color:var(--muted)}

/* ---------- Botones ---------- */
.btn{min-height:44px;padding:9px 18px;border-radius:var(--r-sm);border:1px solid transparent;font-weight:600;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:6px;text-align:center;font-size:15px;line-height:1.2;text-decoration:none}
.btn-primary{background:var(--brand);color:var(--brand-ink)}
.btn-primary:hover{background:var(--brand-strong);color:var(--brand-ink)}
.btn-secondary{background:var(--surface);color:var(--brand);border-color:var(--brand-line)}
.btn-secondary:hover{background:var(--brand-soft)}
.btn-quiet{background:transparent;color:var(--ink-2);border-color:var(--line)}
.btn-quiet:hover{background:var(--surface-2);border-color:var(--line-strong)}
.btn.sm{min-height:44px;padding:6px 14px;font-size:14px} /* B1: objetivo táctil de 44 px también en los botones pequeños */
input[type=file]{min-height:44px;padding:8px;border:1px dashed var(--ctl-border,#8d8f88);border-radius:10px;background:var(--surface);max-width:100%}
form.inline{display:inline}

/* ---------- Avisos y etiquetas ---------- */
.note{border-radius:var(--r-sm);padding:10px 14px;font-size:14px}
.note.warn{background:var(--warn-bg);color:var(--warn-ink)}
.note.ok{background:var(--ok-bg);color:var(--ok-ink)}
.note.err{background:var(--err-bg);color:var(--err-ink)}
.note.plain{background:var(--surface-2);color:var(--ink-2)}
.badge{display:inline-flex;align-items:center;gap:6px;border-radius:6px;padding:3px 9px;font-size:13px;font-weight:600;line-height:1.3}
.badge.ok{background:var(--ok-bg);color:var(--ok-ink)}
.badge.warn{background:var(--warn-bg);color:var(--warn-ink)}
.badge.muted{background:var(--surface-2);color:var(--ink-2)}
.badge.info{background:var(--brand-soft);color:var(--ink)}
.tag{display:inline-block;border:1px solid var(--line);background:var(--surface-2);border-radius:6px;padding:1px 7px;font-size:12.5px;color:var(--ink-2);white-space:nowrap}
.pill{display:inline-block;padding:3px 10px;border-radius:6px;background:var(--pill-bg);color:var(--pill-ink);font-size:12.5px;font-weight:600;white-space:nowrap}

/* ---------- Alumno: resumen de la semana ---------- */
.kpis{display:grid;grid-template-columns:1fr 1fr;gap:4px 24px}
.kpi .k{font-size:13.5px;color:var(--muted);font-weight:500}
.kpi .v{font-size:30px;font-weight:650;font-variant-numeric:tabular-nums;line-height:1.2;letter-spacing:-.025em}
.kpi .v small{font-size:16px;font-weight:500;color:var(--muted);letter-spacing:0}
.kpi .s{font-size:13px;color:var(--muted)}
.kpis .msg{grid-column:1/-1;font-size:15px;font-weight:500;color:var(--ink-2);margin-top:12px;display:flex;gap:10px;align-items:baseline}
.kpis .msg::before{content:"";flex:none;width:8px;height:8px;border-radius:50%;background:var(--accent);transform:translateY(-1px)}
.weeknav{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between}
.day{display:grid;gap:0}
.day h3{font-size:14px;font-weight:600;margin:0 0 4px;color:var(--muted);display:flex;align-items:center;gap:12px}
.day h3::after{content:"";flex:1;height:1px;background:var(--line)}
.slist{display:grid;gap:0;list-style:none;margin:0;padding:0}
.scard{padding:12px 0;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 16px;align-items:center;border-bottom:1px solid var(--line)}
.scard:last-child{border-bottom:0}
.scard .t{font-size:20px;font-weight:650;font-variant-numeric:tabular-nums;letter-spacing:-.015em;line-height:1.25}
.scard .ti{font-size:15px;color:var(--ink-2)}
.scard .pl{font-size:13.5px;color:var(--muted);font-variant-numeric:tabular-nums}
.scard .pl .low{color:var(--warn-ink);font-weight:600}
.scard .a{display:flex;flex-direction:column;align-items:flex-end;gap:6px;text-align:right}
.scard .a form{display:flex;flex-direction:column;align-items:flex-end;gap:6px;margin:0}
.scard.full .t,.scard.full .ti{color:var(--muted)}
.scard .free{grid-column:1/-1;margin-top:6px}
/* G3.6A-04-UX02 · calendario aprobado: tarjeta con la semana ISO, selector de lunes a domingo con las clases libres
   de cada día y, debajo, las clases del día elegido. El estado siempre va en texto; el color lo acompaña. Verde de
   disponibilidad con texto oscuro derivado (5,6:1 sobre su fondo); el verde de marca solo en bordes y acentos. */
.wkcard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:22px 24px 24px;display:grid;gap:20px;min-width:0;box-shadow:var(--shadow)}
.wkcard-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:8px 16px}
.wkcard-head h1{font-size:24px;line-height:1.2;letter-spacing:-.018em}
.wkcard-sub{font-size:14px;color:var(--muted);margin-top:2px}
.wkbar{display:grid;grid-template-columns:44px minmax(0,1fr) 44px;align-items:center;gap:8px}
.wkarrow{width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;color:var(--ink);border:1px solid transparent}
a.wkarrow:hover{background:var(--surface-2);border-color:var(--line);color:var(--ink)}
.wkarrow:focus-visible{border-radius:50%}
.wktitle{display:grid;justify-items:center;gap:2px;text-align:center;font-size:22px;line-height:1.2}
.wktitle .wsep{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.wktitle .wr{font-size:16px;font-weight:500;color:var(--muted);letter-spacing:0}
.wkgroup{display:grid;gap:20px;min-width:0}
.daystrip{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px}
.daystrip li{display:flex;min-width:0}
.dpick{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;min-width:0;min-height:44px;padding:10px 6px 8px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);color:var(--ink);text-decoration:none;text-align:center}
.dpick:hover{border-color:var(--line-strong);color:var(--ink)}
.dpick .dn{font-size:13px;color:var(--muted)}
.dpick .dd{font-size:20px;font-weight:650;line-height:1.2;font-variant-numeric:tabular-nums}
.dpick .dc{align-self:stretch;display:grid;justify-items:center;margin-top:8px;padding:8px 4px;border-radius:var(--r-sm);background:var(--surface-2)}
.dpick .dcn{font-size:22px;font-weight:700;line-height:1.15;font-variant-numeric:tabular-nums}
.dpick .dct{font-size:12px;line-height:1.25;color:var(--muted)}
.dpick.k-none .dc{background:transparent}
.dpick.k-none .dcn,.dpick.k-closed .dcn{font-weight:400;color:var(--muted)}
.dpick.k-open .dc{background:var(--avail-bg)}
.dpick.k-open .dcn,.dpick.k-open .dct{color:var(--avail-ink)}
.dpick.k-full .dc{background:var(--full-bg)}
.dpick.k-full .dcn,.dpick.k-full .dct{color:var(--full-ink)}
.dpick.k-booked .dc{background:var(--brand-soft)}
.dpick.k-booked .dcn,.dpick.k-booked .dct{color:var(--brand-strong);font-weight:600}
.dpick[aria-current="true"]{border:2px solid var(--ink-2);padding:9px 5px 7px;box-shadow:0 2px 8px rgba(46,47,46,.10)}
.dpick .dtag{margin-top:6px;font-size:12px;font-weight:650;color:var(--brand-strong);background:var(--brand-soft);border-radius:6px;padding:0 7px}
.dpick .dmine{margin-top:4px;font-size:12px;font-weight:600;color:var(--brand-strong)}
.daypanel{border-top:1px solid var(--line);padding-top:20px;display:grid;gap:12px;min-width:0}
.dayhead{font-size:18px}
.dayhead .daycount{font-weight:550;color:var(--avail-ink)}
.daypanel .none{font-size:14px;color:var(--muted)}
.clist{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.cls{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px 24px;align-items:start;padding:16px 18px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);min-width:0;overflow-wrap:anywhere}
.cls-main{display:grid;gap:4px;min-width:0}
.cls .ti{font-size:17px;font-weight:650;line-height:1.3}
.cls .ti a{color:var(--ink);text-decoration:none}
.cls .ti a:hover{text-decoration:underline}
.cls .t{font-size:15px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.cls .pl{font-size:14px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.cls-side{display:grid;justify-items:end;gap:10px;text-align:right}
.cls-side form{display:grid;justify-items:end;gap:6px;margin:0}
.cls-state{display:inline-flex;align-items:center;gap:6px;border-radius:999px;padding:3px 12px;font-size:13px;font-weight:700;background:var(--surface-2);color:var(--ink-2)}
.cls .dot{width:8px;height:8px;border-radius:50%;background:currentColor;flex:none}
.cls .check{max-width:280px}
.cls .free{grid-column:1/-1}
.cls.st-open .cls-state,.cls.st-place-available .cls-state{background:var(--avail-bg);color:var(--avail-ink)}
.cls.st-open .pl,.cls.st-place-available .pl{color:var(--avail-ink);font-weight:600}
.cls.st-open,.cls.st-place-available{border-color:var(--avail-line)}
.cls.st-booked{border:2px solid var(--brand);padding:15px 17px}
.cls.st-booked .cls-state{background:var(--brand);color:var(--brand-ink)}
.cls.st-full .cls-state{background:var(--full-bg);color:var(--full-ink)}
.cls.st-weekly-full .cls-state,.cls.st-waiting .cls-state{background:var(--warn-bg);color:var(--warn-ink)}
.cls.st-ended,.cls.st-closed,.cls.st-not-open{background:var(--surface-2)}
.cls.st-ended .cls-state,.cls.st-closed .cls-state,.cls.st-not-open .cls-state{background:var(--surface-3)}
.cls.st-ended .ti a,.cls.st-ended .t{color:var(--muted)}
.wkkpis{border-top:1px solid var(--line);padding-top:16px}
@media (max-width:700px){
  .wkcard{padding:16px 14px 18px;gap:16px}
  .wktitle{font-size:20px}
  .wktitle .wr{font-size:15px}
  /* Móvil: la semana entera a la vista en dos filas (4 + 3), con el día y su número en una línea. */
  .daystrip{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}
  .dpick{display:grid;grid-template-columns:auto auto;justify-content:center;align-items:baseline;align-content:start;column-gap:4px;row-gap:0;padding:8px 4px 6px}
  .dpick[aria-current="true"]{padding:7px 3px 5px}
  .dpick .dd{font-size:17px}
  .dpick .dc,.dpick .dtag,.dpick .dmine{grid-column:1/-1;justify-self:center}
  .dpick .dc{justify-self:stretch;margin-top:6px;padding:5px 2px}
  .dpick .dcn{font-size:18px}
  .dpick .dct{font-size:11.5px}
  .cls{grid-template-columns:minmax(0,1fr);padding:14px}
  .cls.st-booked{padding:13px}
  .cls-side{justify-items:start;text-align:left;grid-auto-flow:row}
  .cls-side form{justify-items:stretch;width:100%}
  .cls-side .btn{width:100%;min-height:44px}
}
.check{display:flex;gap:10px;align-items:flex-start;font-size:13.5px;max-width:280px;text-align:left}
.check input{width:20px;height:20px;accent-color:var(--brand);flex:none;margin-top:1px}
.empty{text-align:center;padding:24px 8px;color:var(--ink-2)}

/* ---------- Docente: sesiones y pase de lista ---------- */
.tlist{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.tlist a{display:grid;gap:2px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);padding:12px 14px;text-decoration:none;color:var(--ink);min-height:44px}
.tlist a:hover{border-color:var(--brand);background:var(--brand-soft)}
.tlist .when{font-weight:650;font-variant-numeric:tabular-nums}
.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.fact{background:var(--surface-2);border-radius:var(--r-sm);padding:10px}
.fact .k{font-size:12.5px;color:var(--ink-2);font-weight:600}
.fact .v{font-weight:700;font-variant-numeric:tabular-nums}
.roster{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.rrow{border:1px solid var(--line);border-radius:var(--r);padding:10px 12px;display:grid;grid-template-columns:220px minmax(0,1fr);gap:8px 14px;align-items:center}
.rrow form{display:grid;gap:8px;margin:0}
.rrow fieldset{border:0;margin:0;padding:0;min-width:0}
.rrow legend{padding:0}
.rmeta{display:grid;gap:3px}
.rmeta .nm{font-weight:600}
.opts{display:flex;flex-wrap:wrap;gap:6px}
.opt{position:relative}
.opt input{position:absolute;opacity:0;width:1px;height:1px}
.opt span{display:inline-flex;align-items:center;min-height:44px;padding:6px 12px;border:1px solid var(--line-strong);border-radius:var(--r-sm);cursor:pointer;font-size:14px;background:var(--surface)}
.opt input:checked+span{background:var(--brand);color:var(--brand-ink);border-color:var(--brand);font-weight:600}
.opt input:checked+span::before{content:"✓ ";white-space:pre}
.opt input:focus-visible+span{outline:3px solid var(--focus);outline-offset:2px}
.rowactions{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end}
.field{display:grid;gap:4px;min-width:0;align-content:start} /* POLISH-01A · H-CV05-12: sin estirar filas en .row2 */
.field>label{font-size:13px;font-weight:600;color:var(--ink-2)}
input[type=text],input:not([type]),select{min-height:44px;padding:8px 12px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);max-width:100%}
.tfoot .check{max-width:none}
.tfoot{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;border-top:1px solid var(--line);padding-top:14px}

/* ---------- Responsable: seguimiento semanal ---------- */
.filters{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end}
.sum{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg)}
.stat{padding:18px 22px;display:grid;gap:2px;align-content:start;border-left:1px solid var(--line)}
.stat:first-child{border-left:0}
.stat .k{font-size:14px;color:var(--ink-2);font-weight:500;display:flex;align-items:center;gap:8px}
.stat .v{font-size:36px;font-weight:650;font-variant-numeric:tabular-nums;line-height:1.1;letter-spacing:-.03em}
.stat .s{font-size:13px;color:var(--muted)}
.sw{width:10px;height:10px;border-radius:50%;flex:none;display:inline-block}
.sw.GOAL_MET{background:var(--st-met)}
.sw.ON_TRACK{background:var(--st-track)}
.sw.ATTENDANCE_PENDING{background:var(--st-pend)}
.sw.INSUFFICIENT_SESSION_OPPORTUNITY{background:var(--st-insuf)}
.sw.NEEDS_FOLLOW_UP{background:var(--st-follow)}
.sw.NOT_EVALUATED{background:var(--st-ne)}
.state{display:inline-flex;align-items:center;gap:7px;font-weight:600;font-size:13.5px;white-space:nowrap}
.grid2{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:24px;align-items:start}
.tablewrap{overflow-x:auto;min-width:0;position:relative} /* POLISH-01A: los .sr-only (absolutos) no ensanchan la página */
table{border-collapse:collapse;width:100%;font-size:14px}
th{text-align:left;font-weight:500;color:var(--muted);font-size:12.5px;padding:8px 10px;border-bottom:1px solid var(--line)}
td{padding:11px 10px;border-bottom:1px solid var(--line);vertical-align:top}
td.n,th.n{text-align:right;font-variant-numeric:tabular-nums}
tbody th{font-weight:600;white-space:nowrap;text-align:left;padding:11px 10px;border-bottom:1px solid var(--line);vertical-align:top} /* POLISH-01A · H-CV05-18 */
.rlist{list-style:none;margin:0;padding:0;display:grid}
.rlist li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1px 12px;align-items:center;padding:11px 0;border-top:1px solid var(--line)}
.rlist li:first-child{border-top:0}
.rlist .nm{font-weight:600}
.rlist .dt{font-size:13px;color:var(--muted)}
.rlist .fig{text-align:right;font-variant-numeric:tabular-nums;font-size:12.5px;color:var(--muted)}
.rlist .fig b{display:block;color:var(--ink);font-size:16px;font-weight:650}
.offer-fig{display:grid;gap:8px;margin:0}
.offer-fig div{display:flex;justify-content:space-between;gap:12px;font-size:14px;color:var(--ink-2);padding-bottom:8px;border-bottom:1px solid var(--line)}
.offer-fig div:last-child{border-bottom:0}
.offer-fig dd{margin:0;font-weight:650;color:var(--ink);font-variant-numeric:tabular-nums}
.offer-fig dt{margin:0}

/* ---------- Detalle de sesión y formularios heredados ---------- */
dl.facts-list{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:6px 16px;margin:0}
dl.facts-list dt{color:var(--muted);font-size:14px}
dl.facts-list dd{margin:0}
.formgrid{display:grid;gap:12px;max-width:520px}
.formgrid label{font-size:13px;font-weight:600;color:var(--ink-2)}

/* ---------- Horarios (G3.5.1): el año como calendario de pared ---------- */
.yearnav{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center}
.yearnav .current{font-size:22px;font-weight:650;font-variant-numeric:tabular-nums;letter-spacing:-.02em;padding:0 6px}
.months{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;align-items:start}
.month{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:16px 18px;display:grid;gap:10px;align-content:start;min-width:0}
.month .mhead{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.month h2,.month h3{font-size:19px;font-weight:650}
.month h2 a,.month h3 a{color:var(--ink);text-decoration:none}
.month h2 a:hover,.month h3 a:hover{color:var(--brand);text-decoration:underline}
/* G3.6A-04-UX04B-02 · «Planificar meses» en «Mis clases»: tres meses dentro de una tarjeta, sin desbordar a 320 px. */
.plan-months{grid-template-columns:repeat(auto-fill,minmax(min(100%,160px),1fr))}
.plan-months .mstate{display:flex;flex-wrap:wrap}
.plan-months .btn{justify-self:start;min-height:44px}
.month .mcount{font-size:14px;color:var(--ink-2)}
.month .mcount b{font-size:17px;color:var(--ink)}
.month .mempty{font-size:14px;color:var(--muted)}
.month .patterns{list-style:none;margin:0;padding:0;display:grid;gap:3px;font-size:14px}
.month.past{background:var(--surface-2);box-shadow:none}
.month.past h2 a,.month.past .mcount b{color:var(--ink-2)}
.month.next{border-color:var(--brand-line);box-shadow:inset 4px 0 0 var(--accent)}
.mactions{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.mactions form{margin:0}
.btn.is-off{color:var(--muted);cursor:not-allowed;border-style:dashed}
.steps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:16px} /* POLISH-01A: cabe a 320 px */
.formcard{max-width:640px}
.formcard .row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.formcard .row3{display:grid;grid-template-columns:2fr 1fr 1fr;gap:12px}
input[type=date],input[type=time],input[type=number]{min-height:44px;padding:8px 12px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);max-width:100%;font:inherit;color:inherit}
tr.is-skip td,tr.is-skip th{color:var(--muted)}
tr.is-bad{background:var(--warn-bg)}
@media (max-width:560px){ .formcard .row2,.formcard .row3{grid-template-columns:1fr} }
@media (max-width:860px){
  .grid2{grid-template-columns:1fr}
  .rrow{grid-template-columns:1fr}
  .page{padding:20px 16px 48px}
}
@media (prefers-reduced-motion: reduce){ *{transition:none!important;animation:none!important} }

/* --- G3.5.1 ampliado: planificar en línea, estado del mes, ocupación --------------------------------------- */
[hidden]{display:none!important}
.planner{display:grid;gap:16px;align-items:start;min-width:0;grid-template-areas:"patterns" "preview" "save"}
.plan-patterns{grid-area:patterns}.plan-preview{grid-area:preview}.savebar{grid-area:save}
@media (min-width:1024px){ .planner{grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);grid-template-areas:"patterns preview" "save preview"} .plan-preview{position:sticky;top:16px} }
.plan-patterns{display:grid;gap:12px;min-width:0}
.patterns-list{list-style:none;margin:0;padding:0;display:grid;gap:12px}
.pattern{gap:12px}
.pattern-head{display:flex;justify-content:space-between;align-items:center;gap:8px}
.pattern-title{font-size:17px}
.pattern .row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.pattern .row4{display:grid;grid-template-columns:1fr 1fr 1fr 2fr;gap:12px}
@media (max-width:640px){ .pattern .row2{grid-template-columns:1fr} .pattern .row4{grid-template-columns:1fr 1fr} .pattern .row4 .field:last-child{grid-column:1/-1} }
.field select,.field input{width:100%;box-sizing:border-box}
.daypick{border:0;margin:0;padding:0;min-width:0}
.daypick legend{font-size:14px;font-weight:600;color:var(--ink-2);padding:0;margin-bottom:6px}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{position:relative;display:inline-flex}
.chip input{position:absolute;opacity:0;width:1px;height:1px}
.chip span[aria-hidden]{min-width:48px;min-height:44px;display:inline-flex;align-items:center;justify-content:center;padding:0 10px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);color:var(--ink-2);font-weight:600;font-size:14px;cursor:pointer;box-sizing:border-box}
.chip input:checked+span[aria-hidden]{background:var(--brand);border-color:var(--brand);color:var(--brand-ink)}
.chip input:focus-visible+span[aria-hidden]{outline:3px solid var(--focus);outline-offset:2px}
.savebar{gap:10px}
.plan-preview{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:18px 20px;display:grid;gap:12px;min-width:0}
.plan-preview h2{font-size:19px}
.plan-preview[aria-busy="true"],[data-preview][aria-busy="true"]{opacity:.6}
.pv{display:grid;gap:12px;min-width:0}
.pv-total{font-size:15px;color:var(--ink-2);margin:0}
.pv-total b{font-size:24px;color:var(--ink)}
.pv-warn{color:var(--warn-ink)}
.minical{width:100%;border-collapse:separate;border-spacing:3px;table-layout:fixed;font-variant-numeric:tabular-nums}
.minical th{font-size:12px;font-weight:600;color:var(--muted);padding:2px 0;text-align:center}
.minical td{height:40px;border-radius:6px;background:var(--surface-2);vertical-align:top;padding:3px 4px;position:relative;font-size:12px;color:var(--muted)}
.minical td.out{background:transparent}
.minical td .d{display:block}
.minical td .n{position:absolute;right:4px;bottom:3px;font-weight:700;font-size:13px}
.minical td.has-new{background:var(--brand-soft);color:var(--ink)}
.minical td.has-new .n{color:var(--brand)}
.minical td.has-bad{background:var(--warn-bg);color:var(--warn-ink);box-shadow:inset 0 0 0 2px var(--warn-ink)}
.minical td .x{position:absolute;right:5px;bottom:3px;font-weight:800}
.pv-list{list-style:none;margin:0;padding:0;display:grid;gap:2px;max-height:420px;overflow-y:auto;border-top:1px solid var(--line)}
.pv-item{display:grid;gap:1px;padding:8px 2px;border-bottom:1px solid var(--line);font-size:14px;min-width:0;overflow-wrap:anywhere}
.pv-item .when{font-weight:600}
.pv-item.bad{border-left:3px solid var(--warn-ink);padding-left:8px}
.pv-item.skip{color:var(--muted)}
.mstate{display:inline-flex;align-items:center;gap:6px}
.copyfrom{font-size:13px;color:var(--muted);margin:0;flex-basis:100%}
.occ{font-variant-numeric:tabular-nums}
.occ b{color:var(--ink)}

/* G3.6A-03-01 · invitaciones */
input[type=email],input[type=tel],input[type=url],input[type=search]{min-height:44px;padding:8px 12px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);max-width:100%;font:inherit;color:inherit}
.field [aria-invalid="true"]{border-color:var(--err-ink);border-width:2px}
.ferr{font-size:13px;color:var(--err-ink);font-weight:600;margin:0}
.choice{border:0;margin:0;padding:0;min-width:0;display:flex;flex-wrap:wrap;gap:8px 20px}
.choice legend{font-size:13px;font-weight:600;color:var(--ink-2);padding:0;margin-bottom:6px;width:100%}
.choice label{display:flex;gap:8px;align-items:center;font-size:15px;min-height:44px}
.choice input{width:20px;height:20px;accent-color:var(--brand);margin:0}
.inv-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}
@media (max-width:560px){ .rlist li.inv{grid-template-columns:1fr} .inv-actions{justify-content:flex-start} }
/* G3.6A-04-UX04-A · Panel del centro (estado actual, no validado) · UX04A-UI01: resumen progresivo. Portada con
   cuatro indicadores y «Requiere atención»; el detalle en vistas internas. Los avisos «No validado», «Parcial» y
   «Provisional» van siempre en texto y nunca dentro de contenido plegado. Las tablas se desplazan dentro de su región
   (enfocable), nunca la página. Sin JavaScript: periodo, pestañas y filtros son enlaces o un formulario GET. */
.dash{gap:22px}
.dash-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:8px 24px}
.dash-title h1{font-size:28px;line-height:1.15;letter-spacing:-.022em}
.dash-status{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;margin-top:8px}
.dash summary{cursor:pointer;min-height:44px;display:inline-flex;align-items:center;gap:8px;color:var(--brand);font-weight:600;font-size:14.5px;list-style:none;border-radius:6px}
.dash summary::-webkit-details-marker{display:none}
.dash summary::after{content:"";width:7px;height:7px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:translateY(-2px) rotate(45deg)}
.dash details[open]>summary::after{transform:translateY(2px) rotate(-135deg)}
.dash-howto{max-width:560px}
.dash-howto-body{display:grid;gap:10px;padding:14px 16px;background:var(--surface-2);border-radius:var(--r);color:var(--ink-2);font-size:14px}
.dash-legend{display:grid;gap:6px;margin:0;font-size:13px;color:var(--ink-2)}
.dash-legend div{display:grid;grid-template-columns:96px minmax(0,1fr);gap:8px;align-items:baseline}
.dash-legend dt,.dash-legend dd{margin:0}
.dash-legend dt{font-weight:600}
.dash-controls{display:grid;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:12px 18px 16px}
.dash-period{text-align:center;font-size:20px;letter-spacing:-.012em}
.dash-filterrow{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px 20px}
.seg{display:inline-flex;gap:2px;padding:3px;background:var(--surface-2);border-radius:10px}
.seg a{min-height:44px;min-width:88px;display:inline-flex;align-items:center;justify-content:center;padding:0 16px;border-radius:8px;color:var(--ink-2);text-decoration:none;font-weight:600;font-size:14.5px}
.seg a:hover{color:var(--ink)}
.seg a[aria-current="true"]{background:var(--surface);color:var(--ink);box-shadow:0 1px 3px rgba(46,47,46,.16)}
.dash-filterform{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px 14px}
.dash-filterform select,.dash-filterform input{min-height:44px}
.dash-more{align-self:flex-end}
.dash-more[open]{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px 14px}
.dash-more-body{display:flex;flex-wrap:wrap;gap:10px 14px;padding-top:4px}
.dash-chips{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:0}
.chip-on{display:inline-flex;align-items:center;min-height:32px;padding:2px 12px;border-radius:999px;background:var(--brand-soft);color:var(--brand-strong);font-weight:600;font-size:13.5px}
.dash-tabs{display:flex;gap:4px;overflow-x:auto;overflow-y:hidden;border-bottom:1px solid var(--line);scrollbar-width:none}
.dash-tabs::-webkit-scrollbar{display:none} /* se desplaza con el dedo o con Tab; la pestaña cortada indica que hay más */
.dash-tabs a{flex:none;min-height:44px;display:inline-flex;align-items:center;gap:6px;padding:0 14px;color:var(--ink-2);text-decoration:none;font-weight:600;font-size:14.5px;border-bottom:3px solid transparent;margin-bottom:-1px}
.dash-tabs a:hover{color:var(--ink)}
.dash-tabs a[aria-current="page"]{color:var(--ink);border-bottom-color:var(--accent)}
.kpi4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.kcard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:20px 20px 18px;display:grid;gap:6px;align-content:start;min-width:0;box-shadow:var(--shadow)}
.kcard .k{font-size:14px;font-weight:600;color:var(--ink-2);display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.kcard .v{font-size:38px;font-weight:650;line-height:1.05;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.kcard .v small{font-size:17px;font-weight:500;color:var(--muted);letter-spacing:0}
.kcard .s{font-size:13.5px;color:var(--muted)}
.dash-attention{gap:4px}
.dash-attention h2{font-size:18px}
.att{list-style:none;margin:0;padding:0;display:grid}
.att li{display:grid;grid-template-columns:56px minmax(0,1fr) auto;align-items:center;gap:4px 16px;padding:12px 0;border-top:1px solid var(--line)}
.att li:first-child{border-top:0}
.att-n{font-size:28px;font-weight:650;text-align:right;letter-spacing:-.02em}
.att-t{display:grid;gap:2px;font-weight:600}
.att-t .small{font-weight:400}
.scards{list-style:none;margin:0;padding:0;display:grid}
.scard2{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,2fr) auto;gap:6px 24px;align-items:start;padding:14px 0;border-top:1px solid var(--line)}
.scard2:first-child{border-top:0}
.sc-main{display:grid;gap:4px;min-width:0}
.sc-when{font-weight:650}
.sc-who{font-size:14px;color:var(--ink-2)}
.sc-dl{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:4px 14px;margin:0}
.sc-dl div{display:grid}
.sc-dl dt{font-size:12px;color:var(--muted);margin:0}
.sc-dl dd{margin:0;font-weight:600}
.sc-act{white-space:nowrap}
.dash .rlist li .dt{grid-column:1}
.dash .rlist li a{grid-column:2;grid-row:1 / span 2;align-self:center}
.dash .tablewrap{position:relative} /* contiene los textos .sr-only (absolutos): no ensanchan la página */
.dash .tablewrap:focus-visible{outline:3px solid var(--focus);outline-offset:2px}
.dash td .small{white-space:nowrap}
.dash .empty{display:grid;gap:6px}
.cat{display:inline-block;border-radius:999px;padding:2px 10px;font-size:12.5px;font-weight:650;white-space:nowrap;background:var(--surface-2);color:var(--ink-2)}
.cat-held{background:var(--avail-bg);color:var(--avail-ink)}
.cat-pending_close{background:var(--warn-bg);color:var(--warn-ink)}
.cat-cancelled{background:var(--surface-3);color:var(--ink-2)}
@media (max-width:1100px){ .kpi4{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (max-width:860px){
  .scard2{grid-template-columns:1fr;gap:8px}
  .sc-dl{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (max-width:560px){
  .dash{gap:16px}
  .dash-title h1{font-size:24px}
  .dash-controls{padding:10px 12px 14px}
  .dash-filterrow{display:grid;gap:10px}
  .seg{display:flex}
  .seg a{flex:1 1 0;min-height:44px;min-width:0}
  .dash-filterform{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"grupo aplicar" "mas mas";align-items:end;gap:8px 10px}
  .dash-filterform .field{grid-area:grupo}
  .dash-filterform .btn{grid-area:aplicar}
  .dash-filterform .dash-more{grid-area:mas}
  .dash-more-body{display:grid}
  .kpi4{gap:10px}
  .kcard{padding:14px 14px 12px}
  .kcard .v{font-size:28px}
  .kcard .v small{font-size:15px}
  .att li{grid-template-columns:44px minmax(0,1fr);padding:12px 0}
  .att li .btn{grid-column:2;justify-self:start;min-height:44px}
  .att-n{font-size:24px}
  .dash .rlist li{grid-template-columns:1fr}
  .dash .rlist li a{grid-column:1;grid-row:auto}
}
/* UI02 · panel: acciones de 44 px y, en móvil, todas las vistas visibles (sin depender de desplazar ni de texto
   cortado): las pestañas pasan a varias líneas con la activa marcada. */
.sc-act{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.sc-act .btn,.dash .rlist .btn{min-height:44px}
@media (max-width:560px){
  .dash-tabs{flex-wrap:wrap;overflow:visible;border-bottom:0;gap:6px}
  .dash-tabs a{margin:0;padding:0 14px;border:1px solid var(--line);border-radius:999px;background:var(--surface)}
  .dash-tabs a[aria-current="page"]{background:var(--brand-soft);border-color:var(--brand-line);color:var(--brand-strong)}
}

/* =====================================================================================================================
   G3.6A-05-B1 · implementación visual del diseño elegido (UXUI-DESIGN-01 v2 r1, con las mejoras compatibles de la r2).
   Solo presentación: tokens, estructura compartida, cabeceras de sección, agenda y tarjetas. Núcleo NEUTRAL: las
   superficies de sección de la marca Ecura (menta, salvia, rosa, verde azulado, azul) llegan por su brand.css; aquí
   todas las secciones usan la superficie suave de la marca activa. Iconos: máscaras de static/icons/ (img-src 'self';
   sin estilos en línea). El estado siempre va en texto; el color lo acompaña.
   ===================================================================================================================== */
:root{
  --r-sm:10px; --r-panel:18px; --side-w:248px; --tap:44px; --ctl-border:#8d8f88;
  --sec-bg:var(--brand-soft); --sec-ink:var(--brand-strong); --sec-line:var(--brand-line);
  --attn-bg:var(--warn-bg); --attn-ink:var(--warn-ink); --attn-line:#e6d3ac; --attn-edge:#b8862a;
  --bar-track:var(--surface-3); --bar-fill:var(--brand);
  --shadow:0 1px 2px rgba(40,42,38,.05),0 1px 6px rgba(40,42,38,.04);
}

/* ---------- Iconos (máscaras locales; decorativos) ---------- */
.ico,.sec-ico::before,.topnav a::before,.tab::before,.navmenu>summary::before,.acctlink::before{
  content:"";display:inline-block;flex:none;width:20px;height:20px;background:currentColor;
  -webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat}
.i-semana,.topnav a[href="/semana/"]{--i:url("/static/icons/semana.svg")}
.i-reservas,.topnav a[href="/mis-reservas/"]{--i:url("/static/icons/reservas.svg")}
.i-lista,.topnav a[href="/sesiones/"]{--i:url("/static/icons/lista.svg")}
.i-sesiones,.topnav a[href="/personal/sesiones/"]{--i:url("/static/icons/semana.svg")}
.i-horarios,.topnav a[href="/horarios/"]{--i:url("/static/icons/horarios.svg")}
.i-panel,.topnav a[href="/panel/"]{--i:url("/static/icons/panel.svg")}
.i-seguimiento,.topnav a[href="/seguimiento/"]{--i:url("/static/icons/seguimiento.svg")}
.i-informe,.topnav a[href="/informes/"]{--i:url("/static/icons/lista.svg")}
.i-grupos,.topnav a[href="/grupos/"]{--i:url("/static/icons/grupos.svg")}
.i-usuarios,.topnav a[href="/usuarios/"]{--i:url("/static/icons/usuarios.svg")}
.i-avisos,.topnav a[href="/avisos/"]{--i:url("/static/icons/avisos.svg")}
.i-ayuda,.topnav a[href="/ayuda/"]{--i:url("/static/icons/ayuda.svg")}  /* HELP-01 */
.i-check{--i:url("/static/icons/check.svg")}
.i-menu,.navmenu>summary{--i:url("/static/icons/menu.svg")}
.i-seguridad,.acctlink{--i:url("/static/icons/seguridad.svg")}

/* ---------- Marca: logotipo sin deformar y descriptor como texto aparte ---------- */
.brand{display:inline-flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:0;min-height:44px;color:var(--ink);text-decoration:none}
.brand .logo{display:block;flex:none;align-self:flex-start;height:24px;width:auto;max-width:none;object-fit:contain}
.brand .product{font-size:16px;font-weight:700;line-height:1.2;color:var(--ink)}
.brand .logo+.product{margin-top:6px;padding-top:5px;border-top:1px solid var(--line);font-size:12px;font-weight:600;color:var(--muted);letter-spacing:.01em}

/* ---------- Estructura: cabecera compacta (móvil) y barra lateral (escritorio) ---------- */
.prodbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:10px 16px;min-height:60px;background:var(--surface);border-bottom:1px solid var(--line)}
.prodbar .who{margin-left:auto;font-size:12.5px;line-height:1.35;text-align:right}
.prodbar .who+.signout{margin-left:0}
.signout{margin-left:auto}
.signout button{min-height:44px;padding:4px 14px;border-radius:var(--r-sm);border-color:var(--ctl-border)}
.prodbar .topnav-desk,.tabbar{display:none}
.topnav{display:flex;flex-direction:column;gap:2px;padding:0;background:transparent;border:0}
.topnav a{position:relative;display:flex;align-items:center;gap:12px;min-height:44px;padding:0 12px;border-radius:var(--r-sm);color:var(--ink-2);font-weight:500;font-size:15px;text-decoration:none}
.topnav a:hover{background:var(--surface-2);color:var(--ink)}
.topnav a[aria-current="page"]{background:var(--sec-bg);color:var(--ink);font-weight:650;box-shadow:inset 4px 0 0 var(--accent)}
.topnav a[aria-current="page"]::before{color:var(--sec-ink)}
.navgroup{margin:0;padding:14px 12px 4px;font-size:12px;font-weight:650;color:var(--muted);letter-spacing:.02em}
.topnav .navgroup:first-child{padding-top:2px}

@media (min-width:1024px){
  .has-nav{padding-left:var(--side-w)}
  .has-nav .side{position:fixed;top:0;bottom:0;left:0;z-index:5;width:var(--side-w);background:var(--surface);border-right:1px solid var(--line);overflow-x:hidden;overflow-y:auto}
  .has-nav .devbar{position:relative;z-index:6;min-height:40px;margin-left:calc(-1 * var(--side-w))}
  .has-nav .devbar+.side{top:40px}
  .has-nav .prodbar{flex-direction:column;flex-wrap:nowrap;align-items:stretch;gap:0;min-height:100%;padding:24px 12px 14px;border:0;background:transparent}
  .has-nav .brand{padding:0 12px 22px}
  .has-nav .brand .logo{height:32px}
  .has-nav .brand .logo+.product{font-size:13.5px}
  .has-nav .prodbar .topnav-desk{display:flex}
  .has-nav .prodbar .who{margin:auto 0 0;padding:14px 12px 10px;border-top:1px solid var(--line);text-align:left;font-size:13.5px}
  .has-nav .signout{margin:0;padding:0 12px}
  .has-nav .signout button{width:100%}
  .has-nav .page{padding:28px 32px 56px}
}
@media (max-width:1023px){
  .has-nav .page{padding-bottom:calc(104px + env(safe-area-inset-bottom))}
  .has-nav .tabbar{position:fixed;left:0;right:0;bottom:0;z-index:30;display:flex;align-items:stretch;background:var(--surface);border-top:1px solid var(--line);box-shadow:0 -2px 12px rgba(40,42,38,.07);padding-bottom:env(safe-area-inset-bottom)}
  .tabbar .tabs{display:flex;flex:1 1 auto;min-width:0}
  .tab,.navmenu>summary{position:relative;flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:58px;padding:6px 2px;color:var(--muted);font-size:12px;font-weight:600;line-height:1.15;text-align:center;text-decoration:none;cursor:pointer}
  .tab:hover{color:var(--ink)}
  .tab[aria-current="page"]{color:var(--sec-ink)}
  .tab[aria-current="page"]::after,.navmenu[open]>summary::after{content:"";position:absolute;top:0;left:22%;right:22%;height:3px;border-radius:0 0 3px 3px;background:var(--accent)}
  .navmenu{flex:0 0 76px;display:flex}
  .navmenu>summary{list-style:none}
  .navmenu>summary::-webkit-details-marker{display:none}
  .navmenu-cur{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap} /* se anuncia; la barra marca la sección */
  .navmenu-body{position:fixed;left:8px;right:8px;bottom:calc(66px + env(safe-area-inset-bottom));max-height:calc(100vh - 150px);overflow:auto;display:grid;gap:4px;padding:12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-panel);box-shadow:0 10px 30px rgba(40,42,38,.18)}
  .navmenu-body .who{text-align:left;font-size:13.5px;padding:2px 12px 6px;color:var(--muted)}
}
@media (max-width:480px){
  .prodbar>.who{display:none} /* la identidad sigue en «Menú» */
  .brand .logo{height:22px}
}

/* CV05-FIX02 (H-CV05-03) · «Seguridad de la cuenta»: entrada propia con icono y 44 px, como las de navegación. En la
   barra lateral queda alineada con el nombre y «Cerrar sesión»; en móvil va dentro de «Menú». */
.acctlink{display:flex;align-items:center;gap:12px;min-height:44px;padding:0 12px;border-radius:var(--r-sm);color:var(--ink-2);font-weight:500;font-size:15px;text-decoration:none}
.acctlink:hover{background:var(--surface-2);color:var(--ink)}
.acctlink[aria-current="page"]{background:var(--sec-bg);color:var(--ink);font-weight:650;box-shadow:inset 4px 0 0 var(--accent)}
.prodbar>.acctlink{font-size:14px}
@media (min-width:1024px){ .has-nav .prodbar>.acctlink{margin:0 0 8px;font-size:15px} }
@media (max-width:1023px){ .has-nav .prodbar>.acctlink{display:none} } /* en móvil está en «Menú» */

/* CV05-FIX02 (H-CV05-04) · aviso previo de caducidad de la sesión de personal (solo con JavaScript). */
.session-warn{position:fixed;z-index:40;right:16px;bottom:16px;width:min(420px,calc(100vw - 32px));display:grid;gap:10px;padding:14px 16px;background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--attn-edge,#b8862a);border-radius:var(--r-lg);box-shadow:0 10px 30px rgba(40,42,38,.18)}
.session-warn[hidden],.session-warn [hidden]{display:none!important}
.session-warn-msg{margin:0;font-size:14.5px;line-height:1.4;color:var(--ink)}
.session-warn form{margin:0}
@media (max-width:1023px){ .has-nav .session-warn{left:8px;right:8px;width:auto;bottom:calc(74px + env(safe-area-inset-bottom))} }

/* ---------- Cabecera de sección: franja suave con icono ---------- */
body[data-section] .head,.phead{background:var(--sec-bg);border:1px solid var(--sec-line);border-radius:var(--r-panel);padding:18px 24px}
.phead{display:flex;flex-wrap:wrap;align-items:center;gap:12px 16px}
.phead-text{flex:1 1 260px;min-width:0;display:grid;gap:3px}
.phead h1{font-size:28px;line-height:1.15;letter-spacing:-.018em}
.phead-act{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0}
.head .kicker{color:var(--sec-ink)}
.head .meta{color:var(--ink-2)}
.sec-ico{display:inline-grid;place-items:center;flex:none;width:44px;height:44px;border-radius:12px;background:var(--surface);border:1px solid var(--sec-line);color:var(--sec-ink)}
.sec-ico::before{width:22px;height:22px}
.dash-head.phead{justify-content:flex-start}
.dash-head.phead .dash-howto{flex:0 1 auto;margin-left:auto;align-self:center}
@media (max-width:640px){
  body[data-section] .head,.phead{padding:14px 16px}
  .phead h1{font-size:24px}
  .sec-ico{width:36px;height:36px}
}

/* ---------- Tarjetas, encabezados de tarjeta y columnas ---------- */
.card{border-radius:var(--r-lg);box-shadow:var(--shadow)}
.card-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px}
.card-head h2{display:flex;align-items:center;gap:10px;font-size:19px}
.card-head h2 .ico{color:var(--ink-2)}
.cols-2{display:grid;gap:24px;align-items:start}
@media (min-width:1100px){ .cols-2{grid-template-columns:minmax(0,1.6fr) minmax(0,1fr)} }
.btn-secondary{border-color:var(--brand)}
.btn-quiet{background:var(--surface);border-color:var(--ctl-border)}

/* ---------- Aviso destacado (lo siguiente o lo que requiere atención) ---------- */
.callout{display:grid;gap:12px;padding:18px 24px;border-radius:var(--r-panel);background:var(--sec-bg);border:1px solid var(--sec-line);border-left:6px solid var(--accent)}
.callout.is-attention{background:var(--attn-bg);border-color:var(--attn-line);border-left-color:var(--attn-edge)}
.callout .label{font-size:14px;font-weight:650;color:var(--sec-ink)}
.callout.is-attention .label{color:var(--attn-ink)}
.callout h2{font-size:22px;margin-top:2px}
.callout p{color:var(--ink-2)}
@media (min-width:760px){ .callout{grid-template-columns:minmax(0,1fr) auto;align-items:center} }

/* ---------- Agenda (profesora y administración): filas por día con bloque horario ---------- */
.agenda{display:grid}
.aday{margin:16px 0 4px;font-size:15px;font-weight:650;color:var(--ink-2)}
.aday:first-child{margin-top:0}
.slot{display:grid;grid-template-columns:84px minmax(0,1fr) auto;gap:10px 16px;align-items:center;padding:12px 0;border-top:1px solid var(--line)}
.aday+.slot{border-top:0}
.time,.cls-time{display:grid;align-content:center;margin:0;padding:8px 10px;border-radius:var(--r-sm);background:var(--surface);border:1px solid var(--line)}
.time b,.cls-time b{font-size:22px;font-weight:700;line-height:1.1;color:var(--ink);white-space:nowrap}
.time span,.cls-time span{white-space:nowrap}
@media (max-width:700px){ .time,.cls-time{padding:6px 8px} .time b,.cls-time b{font-size:18px} }
.time span,.cls-time span{font-size:12px;color:var(--muted)}
.s-body{display:grid;gap:4px;min-width:0}
.s-title{font-weight:650;display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center}
.s-meta{display:flex;flex-wrap:wrap;gap:2px 14px;font-size:14px;color:var(--ink-2)}
.tag{border-radius:6px;font-weight:650}
.rlist li>.btn{grid-column:2;grid-row:1 / span 2;align-self:center}
@media (max-width:560px){
  .slot{grid-template-columns:72px minmax(0,1fr)}
  .slot>.btn{grid-column:1/-1;justify-self:start}
  .rlist li{grid-template-columns:1fr}
  .rlist li>.btn{grid-column:1;grid-row:auto;justify-self:start;margin-top:6px}
}

/* ---------- Resumen compacto (profesora) ---------- */
.pills{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}
.pillstat{display:flex;align-items:baseline;gap:14px;margin:0;padding:14px 18px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg)}
.pillstat b{font-size:28px;font-weight:700;line-height:1;color:var(--attn-ink)}
.pillstat span{font-size:13px;color:var(--muted)}
.pillstat strong{display:block;font-size:14.5px;color:var(--ink)}

/* ---------- Alumno: «Esta semana» (tarjetas de día y filas con hora) ---------- */
.wkhint{font-size:13.5px;color:var(--muted)}
.wkcard{border-radius:var(--r-panel)}
.daystrip{gap:8px}
.dpick{position:relative;display:grid;grid-template-columns:auto 1fr;align-content:start;justify-items:start;column-gap:4px;row-gap:2px;min-height:112px;padding:12px;border-radius:var(--r-lg);text-align:left}
.dpick .dn{font-size:14px;font-weight:650;color:var(--ink)}
.dpick .dd{font-size:14px;font-weight:650;line-height:inherit}
.dpick .dc{grid-column:1/-1;justify-self:stretch;justify-items:start;margin-top:6px;padding:0;background:transparent!important}
.dpick .dcn{font-size:22px;font-weight:750}
.dpick .dct{font-size:12px;text-align:left}
.dpick .dtag{position:absolute;top:8px;right:8px;margin:0;padding:0 7px;border:1px solid var(--accent);border-radius:999px;background:var(--surface);font-size:11px;font-weight:700;color:var(--sec-ink)}
.dpick .dmine{grid-column:1/-1;margin-top:auto;padding-top:6px}
.dpick[aria-current="true"]{border:2px solid var(--accent);padding:11px;background:var(--sec-bg);box-shadow:none}
.cls{grid-template-columns:84px minmax(0,1fr) auto;gap:8px 18px;border-radius:var(--r-lg)}
.cls .t{font-size:14px;color:var(--muted)}
.cls.st-booked{border:1px solid var(--sec-line);background:var(--sec-bg);padding:16px 18px}
.cls.st-booked .cls-state{background:var(--brand);color:var(--brand-ink)}
@media (max-width:700px){
  .dpick{display:grid;grid-template-columns:auto 1fr;justify-content:start;align-items:baseline;min-height:96px;padding:8px}
  .dpick[aria-current="true"]{padding:7px}
  .dpick .dc,.dpick .dmine{grid-column:1/-1;justify-self:stretch}
  .dpick .dtag{position:static;grid-column:1/-1;justify-self:start;order:-1}
  .dpick .dcn{font-size:18px}
  .cls{grid-template-columns:72px minmax(0,1fr);padding:14px}
  .cls.st-booked{padding:14px}
  .cls-side{grid-column:1/-1}
}

/* ---------- Seguimiento: paso entre panel y semanal, barras de proporción ---------- */
.switch{display:flex;flex-wrap:wrap;gap:8px}
.switch a{display:inline-flex;align-items:center;min-height:44px;padding:0 16px;border:1px solid var(--ctl-border);border-radius:var(--r-sm);background:var(--surface);color:var(--ink-2);font-weight:600;font-size:14.5px;text-decoration:none}
.switch a:hover{background:var(--surface-2);color:var(--ink)}
.switch a[aria-current="page"]{background:var(--brand);border-color:var(--brand);color:var(--brand-ink)}
.bar{display:block;width:100%;height:8px;margin-top:8px}
.bar .track{fill:var(--bar-track)}
.bar .fill{fill:var(--bar-fill)}
.kcard{border-radius:var(--r-lg)}
.dash-controls,.sum{border-radius:var(--r-lg)}

/* =====================================================================================================================
   G3.6A-05-B1 · color y tarjetas (precisión del PO): superficies de color visibles en tarjetas e indicadores, relieve
   suave, revisión en rojo claro (distinta del error, en rojo intenso), estados de clase legibles y pasos de la
   planificación. Núcleo neutral: aquí los tonos son neutros; la marca de cada centro los redefine (Ecura: verdes).
   ===================================================================================================================== */
:root{
  --tone-a-bg:#e7edf4; --tone-a-ink:#223852; --tone-a-line:#c9d5e3;
  --tone-b-bg:#e3ece6; --tone-b-ink:#24402b; --tone-b-line:#c3d3c7;
  --tone-c-bg:#eceee9; --tone-c-ink:#3c4339; --tone-c-line:#d4d8d0;
  --tone-d-bg:#f2efe7; --tone-d-ink:#4a4636; --tone-d-line:#dfd9c8;
  --tone-r-bg:#f9e6e2; --tone-r-ink:#8a2c1f; --tone-r-line:#eec3b9; --tone-r-edge:#c2483a;
  --err-strong:#b3261e;
  --shadow-2:0 1px 2px rgba(40,42,38,.06),0 4px 14px rgba(40,42,38,.06);
}

/* ---------- Tarjetas de indicador (tiles) ---------- */
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.tile{--t-bg:var(--tone-a-bg);--t-ink:var(--tone-a-ink);--t-line:var(--tone-a-line);
  display:grid;gap:2px;align-content:start;min-width:0;margin:0;padding:14px 18px;background:var(--t-bg);
  border:1px solid var(--t-line);border-radius:var(--r-lg);box-shadow:var(--shadow-2)}
.tile .tl{margin:0;font-size:14px;font-weight:650;color:var(--t-ink)}
.tile .tv{margin:2px 0 0;font-size:34px;font-weight:750;line-height:1.1;letter-spacing:-.02em;color:var(--t-ink)}
.tile .tv small{font-size:16px;font-weight:600;letter-spacing:0}
.tile .ts{margin:0;font-size:13px;color:var(--ink-2)}
.tile .ts a{color:var(--t-ink);font-weight:600}
.t-mint{--t-bg:var(--tone-a-bg);--t-ink:var(--tone-a-ink);--t-line:var(--tone-a-line)}
.t-green{--t-bg:var(--tone-b-bg);--t-ink:var(--tone-b-ink);--t-line:var(--tone-b-line)}
.t-sage{--t-bg:var(--tone-c-bg);--t-ink:var(--tone-c-ink);--t-line:var(--tone-c-line)}
.t-cream{--t-bg:var(--tone-d-bg);--t-ink:var(--tone-d-ink);--t-line:var(--tone-d-line)}
.t-review{--t-bg:var(--tone-r-bg);--t-ink:var(--tone-r-ink);--t-line:var(--tone-r-line)}
.tiles .tmsg{grid-column:1/-1;display:flex;gap:10px;align-items:baseline;margin:0;font-size:14px;color:var(--ink-2)}
.tiles .tmsg::before{content:"";flex:none;width:8px;height:8px;border-radius:50%;background:var(--accent);transform:translateY(-1px)}
.wktiles{margin:0}
@media (max-width:560px){
  .tiles{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .tile{padding:10px 12px}
  .tile .tv{font-size:26px}
  .tile .tl{font-size:13px}
}

/* ---------- Avisos: «Ahora» (actividad) frente a «Requiere revisión» (rojo claro) ---------- */
.callout{background:var(--tone-a-bg);border-color:var(--tone-a-line);border-left-color:var(--accent);box-shadow:var(--shadow-2)}
.callout .label{color:var(--tone-a-ink)}
.callout.is-review{background:var(--tone-r-bg);border-color:var(--tone-r-line);border-left-color:var(--tone-r-edge)}
.callout.is-review .label{color:var(--tone-r-ink)}
.badge.review{background:var(--tone-r-bg);color:var(--tone-r-ink);border:1px solid var(--tone-r-line)}
.rlist li.is-review,.att li.is-review{margin:4px 0;padding:11px 12px;border-top-color:transparent;background:var(--tone-r-bg);border-radius:var(--r-sm);box-shadow:inset 4px 0 0 var(--tone-r-edge)}
.rlist li.is-review+li,.att li.is-review+li{border-top-color:transparent}
.card.is-review{box-shadow:inset 6px 0 0 var(--tone-r-edge),var(--shadow)}
tr.is-bad{background:var(--tone-r-bg)}
.note.err{background:var(--tone-r-bg);color:var(--err-strong);border-left:4px solid var(--err-strong)}

/* ---------- Estado de una clase en la agenda del personal ---------- */
.state-chip{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:999px;font-size:12.5px;font-weight:650;border:1px solid var(--line);background:var(--surface-2);color:var(--ink-2)}
.state-chip::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.state-chip.st-now{background:var(--tone-a-bg);border-color:var(--tone-a-line);color:var(--tone-a-ink)}
.state-chip.st-late{background:var(--tone-r-bg);border-color:var(--tone-r-line);color:var(--tone-r-ink)}
.state-chip.st-held{background:var(--tone-c-bg);border-color:var(--tone-c-line);color:var(--tone-c-ink)}
.state-chip.st-cancelled{text-decoration:line-through}
.daypanel .slot.st-now{margin:4px -12px;padding:12px;border-top-color:transparent;border-radius:var(--r-lg);background:var(--tone-a-bg)}
.daypanel .slot.st-late{margin:4px -12px;padding:12px;border-top-color:transparent;border-radius:var(--r-lg);background:var(--tone-r-bg)}
.daypanel .slot.st-now+.slot,.daypanel .slot.st-late+.slot{border-top-color:transparent}
.daypanel .slot.st-cancelled{opacity:.75}

/* ---------- Semana del personal: tarjetas de día ---------- */
.weekstep{display:flex;align-items:center;gap:6px}
.daystrip.staff .dcn{color:var(--tone-a-ink)}
.daystrip.staff .k-none .dcn{color:var(--muted);font-weight:500}
.daystrip.staff .dpick:not(.k-none):not([aria-current="true"]){background:var(--tone-c-bg);border-color:var(--tone-c-line)}
.dpick .dlate,.dpick .dnow{grid-column:1/-1;justify-self:start;margin-top:auto;padding:0 7px;border-radius:999px;font-size:11.5px;font-weight:700;line-height:1.6}
.dpick .dlate{background:var(--tone-r-bg);color:var(--tone-r-ink);border:1px solid var(--tone-r-line)}
.dpick .dnow{background:var(--tone-a-bg);color:var(--tone-a-ink);border:1px solid var(--tone-a-line)}
.dpick.has-late{border-color:var(--tone-r-line)}

/* ---------- Alumno: tarjetas de día con fondo de su estado ---------- */
.daystrip:not(.staff) .dpick.k-open{background:var(--tone-a-bg);border-color:var(--tone-a-line)}
.daystrip:not(.staff) .dpick.k-booked{background:var(--tone-c-bg);border-color:var(--tone-c-line)}
.daystrip:not(.staff) .dpick.k-full{background:var(--tone-r-bg);border-color:var(--tone-r-line)}
.dpick[aria-current="true"]{box-shadow:0 0 0 3px var(--surface),0 0 0 5px var(--accent)}

/* ---------- Panel: indicadores con superficie propia ---------- */
.kcard{background:var(--t-bg,var(--surface));border-color:var(--t-line,var(--line));box-shadow:var(--shadow-2)}
.kcard .k,.kcard .v{color:var(--t-ink,var(--ink))}
.kcard[data-kpi="sessions"]{--t-bg:var(--tone-b-bg);--t-ink:var(--tone-b-ink);--t-line:var(--tone-b-line)}
.kcard[data-kpi="occupancy"]{--t-bg:var(--tone-c-bg);--t-ink:var(--tone-c-ink);--t-line:var(--tone-c-line)}
.kcard[data-kpi="booked-attendance"]{--t-bg:var(--tone-a-bg);--t-ink:var(--tone-a-ink);--t-line:var(--tone-a-line)}
.kcard[data-kpi="coverage"]{--t-bg:var(--tone-d-bg);--t-ink:var(--tone-d-ink);--t-line:var(--tone-d-line)}
.kcard .s{color:var(--ink-2)}

/* ---------- Planificación: pasos ---------- */
.steps-bar{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.steps-bar li{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:4px 14px 4px 6px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--ink-2);font-weight:600;font-size:14px}
.steps-bar .sn{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:50%;background:var(--surface-2);color:var(--ink-2);font-size:13px;font-weight:700}
.steps-bar li.done .sn{background:var(--tone-b-bg);color:var(--tone-b-ink)}
.steps-bar li.current{border-color:var(--brand);color:var(--ink)}
.steps-bar li.current .sn{background:var(--brand);color:var(--brand-ink)}

/* ---------- Tarjetas generales: relieve suave ---------- */
.card,.wkcard{box-shadow:var(--shadow-2)}

/* ---------- G3.6A-05-B1 · filas alineadas (petición del PO): cada fila iguala la altura de sus tarjetas y comparte
   el mismo espaciado que el resto de la página; los meses de la planificación ocupan columnas iguales con la acción
   alineada abajo. ---------- */
.cardrow{display:grid;gap:24px;grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));align-items:stretch}
.cardrow>.card{height:100%}
.cardrow>.card>.rlist,.cardrow>.card>.agenda{align-content:start}
.cardrow .empty{padding:16px 8px}
[data-plan-months] .plan-months{grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:14px;align-items:stretch}
.plan-months .month{display:flex;flex-direction:column;gap:10px;height:100%}
.plan-months .month .mstate{flex-wrap:wrap;gap:6px}
.plan-months .month>.btn{margin-top:auto;align-self:flex-start}
.plan-months .mhead h3{white-space:nowrap}
@media (max-width:560px){ .cardrow{gap:16px} }
@media (min-width:1100px){ .cardrow.wide-first{grid-template-columns:minmax(0,2fr) minmax(0,1fr)} .cardrow.wide-first>.card:only-child{grid-column:1/-1} }
.badge{white-space:nowrap}
.plan-months .mhead{flex-wrap:wrap;row-gap:4px}

/* ---------- G3.6A-05-B1 · correcciones detectadas por el barrido de solapes ----------
   1) Panel a ≤ 560 px: la colocación por áreas era solo para el campo «Grupo»; los campos de «Más filtros» heredaban la
      misma área y quedaban uno encima de otro. 2) Formularios del detalle de sesión: etiqueta encima y campo a lo ancho
      (la etiqueta larga montaba el campo). 3) Fecha y hora con 44 px como el resto de campos. */
@media (max-width:560px){
  .dash-filterform .dash-more-body .field{grid-area:auto}
  .dash-more-body{grid-template-columns:minmax(0,1fr);width:100%}
}
.formgrid>label{display:block;margin-top:4px}
.formgrid>input,.formgrid>select{width:100%;max-width:100%}
.formgrid>button,.formgrid>.btn{justify-self:start}
input[type=datetime-local],input[type=month]{min-height:44px;padding:8px 12px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);max-width:100%;font:inherit;color:inherit}

/* ---------- G3.6A-05-B1 · detalle de sesión: estado, acción destructiva en rojo intenso y datos de la semana ---------- */
.btn-danger{background:var(--surface);color:var(--err-strong);border-color:var(--err-strong)}
.btn-danger:hover{background:var(--tone-r-bg);color:var(--err-strong)}
.card.is-danger{box-shadow:inset 6px 0 0 var(--err-strong),var(--shadow-2)}
.state-chip.st-published{background:var(--tone-a-bg);border-color:var(--tone-a-line);color:var(--tone-a-ink)}
.state-chip.st-draft{background:var(--tone-d-bg);border-color:var(--tone-d-line);color:var(--tone-d-ink)}
.state-chip.st-cancelled{background:var(--surface-2);color:var(--ink-2)}
.phead-act .state-chip{min-height:32px;font-size:13.5px}
.callout h3{font-size:19px;margin-top:2px}
.card .callout{box-shadow:none}
.weekly-facts{display:grid;gap:6px;padding-top:12px;border-top:1px solid var(--line);font-size:14px;color:var(--ink-2)}
dl.facts-list dd{font-weight:600}

/* A04 · acceso del personal (contraseña + Authenticator). Mismos tokens; sin estilos en línea (CSP). */
input[type=password]{min-height:44px;padding:8px 12px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);max-width:100%;font:inherit;color:inherit}
.auth-setup h2{font-size:17px}
.auth-qr{margin:0;display:grid;gap:8px;justify-items:start}
.auth-qr svg{display:block;width:min(100%,220px);height:auto;aspect-ratio:1/1;background:#fff;border:1px solid var(--line);border-radius:var(--r-sm)}
.auth-reveal{display:grid;gap:8px}
/* UX-A04 · pasos para reabrir el enlace original (`account_appeared`). */
.reopen-steps{margin:0;padding-left:1.35em;display:grid;gap:6px}
.auth-reveal>summary{cursor:pointer;min-height:44px;display:flex;align-items:center;color:var(--brand);font-weight:600;font-size:14.5px;border-radius:6px}
.auth-key{font-family:ui-monospace,"Cascadia Mono",Consolas,"Courier New",monospace;font-size:17px;letter-spacing:.06em;word-break:break-all;background:var(--surface-2);border-radius:var(--r-sm);padding:10px 12px;user-select:all}
.auth-codes{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}
.auth-codes li{font-family:ui-monospace,"Cascadia Mono",Consolas,"Courier New",monospace;font-size:15.5px;letter-spacing:.04em;background:var(--surface-2);border-radius:var(--r-sm);padding:8px 10px;text-align:center;user-select:all}
/* R4 · informe mensual y baja administrativa: mismos tokens y componentes de B1; solo distribución. */
.report-sec-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:6px 16px;margin-bottom:12px}
.report-sec-head h2{margin:0}
.report-actions{display:grid;gap:10px;margin-top:16px;padding-top:16px;border-top:1px solid var(--line)}
.report-actions h3{margin:0;font-size:16px}
.report-actions .btn{justify-self:start}
.report-actions .btn[disabled]{background:var(--surface-2);color:var(--ink-2);border-color:var(--line);box-shadow:none;cursor:not-allowed}
.report-live{margin-top:12px}
.report [data-blocked-reasons]{margin:0;padding-left:1.35em;display:grid;gap:4px}
.report table caption{text-align:left;font-weight:600;padding:0 0 8px}
.admin-bookings li{grid-template-columns:minmax(0,1fr)}
.admin-cancel{grid-column:1 / -1}
/* CV05-FIX02: «Dar de baja» se ve como el botón que es (mismo aspecto que .btn-danger), con su flecha de desplegable. */
.admin-cancel>summary{cursor:pointer;min-height:44px;display:inline-flex;align-items:center;gap:8px;padding:6px 14px;color:var(--err-strong,var(--err-ink));background:var(--surface);border:1px solid var(--err-strong,var(--err-ink));border-radius:var(--r-sm);font-weight:600;font-size:14px;list-style:none}
.admin-cancel>summary::-webkit-details-marker{display:none}
.admin-cancel>summary::after{content:"";width:7px;height:7px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:translateY(-2px) rotate(45deg)}
.admin-cancel[open]>summary::after{transform:translateY(2px) rotate(-135deg)}
.admin-cancel>summary:hover{background:var(--tone-r-bg,var(--err-bg))}
.admin-cancel .formgrid{margin-top:8px}
/* CV05-FIX03: grupos archivados, plegados por defecto (título como control de 44 px con su flecha). */
.archived-groups>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:10px;min-height:44px}
.archived-groups>summary::-webkit-details-marker{display:none}
.archived-groups>summary h2{margin:0}
.archived-groups>summary::after{content:"";width:8px;height:8px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:translateY(-2px) rotate(45deg)}
.archived-groups[open]>summary::after{transform:translateY(2px) rotate(-135deg)}
.archived-groups[open]>summary{margin-bottom:8px}
/* HELP-01 · asistente de ayuda: opciones como filas enlazadas de 44 px o más (todo el recuadro es el enlace), pasos
   numerados y ruta de vuelta. Mismos tokens que el resto; el estado no depende del color (texto y subrayado). */
.help-path{font-size:14px;color:var(--ink-2);display:flex;flex-wrap:wrap;align-items:center;gap:4px}
.help-path a{display:inline-flex;align-items:center;min-height:44px}
.help-opts{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.help-opts a{display:grid;gap:2px;align-content:center;min-height:56px;padding:12px 44px 12px 16px;position:relative;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm);color:var(--ink);text-decoration:none}
.help-opts a::after{content:"";position:absolute;right:18px;top:50%;width:8px;height:8px;border-right:2px solid var(--brand);
  border-top:2px solid var(--brand);transform:translateY(-50%) rotate(45deg)}
.help-opts a:hover{border-color:var(--brand-line);background:var(--brand-soft)}
.help-opts a:hover b{text-decoration:underline}
.help-opts b{font-weight:650}
.help-opts span{font-size:14px;color:var(--ink-2)}
.help-cat{display:grid;gap:10px}
.help-cat h2{font-size:17px;font-weight:650}
.help-steps,.help-list{margin:0;padding-left:22px;display:grid;gap:8px}
.help-steps li::marker{font-weight:650;color:var(--brand)}
.help-ask h2{font-size:17px}
.help-facts{display:grid;grid-template-columns:max-content 1fr;gap:8px 18px;margin:0}
.help-facts dt{font-weight:600;color:var(--ink-2)}
.help-facts dd{margin:0;overflow-wrap:anywhere}
@media (max-width:480px){.help-facts{grid-template-columns:1fr;gap:2px}.help-facts dd{margin-bottom:8px}}
/* POLISH-01A · enlaces sueltos (volver, títulos de clase, meses, «Gestionar»…): zona pulsable de 44 px o más con una
   capa invisible encima y debajo del texto; ni el texto, ni el subrayado, ni el foco, ni la maqueta cambian. */
.head .kicker a,.phead-text .meta a,.help-facts a,.month .mhead a,.month .patterns a,.ti>a,.cls-side a.small,
.rlist .nm>a,tbody td>a:only-child,a.lnk{position:relative}
.head .kicker a::after,.phead-text .meta a::after,.help-facts a::after,.month .mhead a::after,.month .patterns a::after,
.ti>a::after,.cls-side a.small::after,.rlist .nm>a::after,tbody td>a:only-child::after,a.lnk::after{content:"";position:absolute;inset:-13px -4px}
/* POLISH-01A · H-CV05-16: «Esta semana» como etiqueta visible en la cabecera; con una sola cifra semanal, el mensaje
   va a su lado en vez de dejar un hueco. */
.phead-act .badge.info{background:var(--surface);border:1px solid var(--sec-line,var(--line))}
@media (min-width:640px){.wktiles.one{grid-template-columns:minmax(220px,280px) minmax(0,1fr);align-items:center}
  .wktiles.one .tmsg{grid-column:2}}
.cls-main .notice{margin-top:4px}
/* POLISH-01A · H-CV05-22/23: ficha de usuario con tarjetas de la misma altura; la del enlace habitual ocupa la fila. */
.grid2.eq{align-items:stretch}
.grid2.eq>.span2{grid-column:1/-1}
.grid2.eq>.span2 .rowactions>.field{flex:1 1 20rem;max-width:40rem}
.grid2.eq>.span2 .rowactions>.field input{width:100%}

/* REPORT-PRESENTATION-01 · impresión de las páginas del informe mensual (estado del mes y versión guardada). Sin
   navegación ni controles; cabecera con versión, periodo, estado, vigencia y clasificación; tablas completas sin
   desplazamiento horizontal y filas sin cortar; insignias y avisos con borde y texto (no dependen del color). Solo
   presentación: los datos y los permisos son los de la pantalla. */
@media print{
  @page{margin:14mm 12mm}
  body{background:#fff;color:#000;font-size:10.5pt}
  .side,.tabbar,.skip,.devbar,.signout,.dash-controls,.phead-act,.sec-ico,.report-actions form,.report .btn,.report .wkarrow,.session-warn,.acctlink{display:none!important}
  /* CV06-FIX01 · F-CV06-01: en el informe, el mes seleccionado (h2.dash-period) se imprime; de su barra solo se
     ocultan los controles (flechas arriba y selector de mes aquí). Bloque simple: sin las flechas, la rejilla de 3
     columnas de .wkbar dejaría el mes en la de 44 px. */
  .report .dash-controls,.report .dash-periodbar{display:block!important;background:none!important;border:0!important;padding:0!important}
  .report .dash-filterform{display:none!important}
  .has-nav{padding-left:0!important}
  .page,.has-nav .page,.page.wide{max-width:none!important;margin:0!important;padding:0!important}
  .stack{gap:10pt}
  .report .phead,.report .card,.report .kcard{background:#fff!important;box-shadow:none!important;border:1px solid #888;border-radius:0;break-inside:avoid;padding:8pt}
  .report .cardrow,.report .kpi4{display:block}
  .report .cardrow>*,.report .kpi4>*{margin-bottom:8pt}
  .report .cardrow>.card{height:auto}  /* en pantalla miden lo mismo (100 %); apiladas, cada una su alto */
  .report .tablewrap{overflow:visible!important;max-width:none!important}
  .report table{width:100%;border-collapse:collapse;font-size:9.5pt;table-layout:auto}
  .report th,.report td{border-bottom:1px solid #bbb;padding:2pt 4pt;white-space:normal}
  .report thead{display:table-header-group}
  .report tr,.report li,.report dt,.report dd{break-inside:avoid}
  .report .badge,.report .note{background:none!important;color:#000!important;border:1px solid #444}
  .report a{color:#000;text-decoration:none}
  .report .muted,.report .small{color:#333}
}
