:root{
  --bg:#F8F5FB; --surface:#FFFFFF; --ink:#211A2B; --muted:#6B6078; --line:#E6DEEF;
  --lila:#7E3FBF; --lila-ink:#FFFFFF; --lila-soft:#F0E6FA;
  --pink:#C2306E; --pink-bg:#FCE4EE;
  --ok:#1B7A52; --ok-bg:#DFF2E8;
  --grey-bg:#EEEBF1;
  --danger:#B42318;
  --font:"Onest", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --nav-h:64px;
  color-scheme: light dark;
}
@media (prefers-color-scheme: dark){
  :root{
    --bg:#141018; --surface:#1E1824; --ink:#EEE8F4; --muted:#A99DB6; --line:#332A3D;
    --lila:#C9A4F2; --lila-ink:#1D1027; --lila-soft:#2C2138;
    --pink:#F48DB7; --pink-bg:#3B1F2D;
    --ok:#5ACB95; --ok-bg:#15301F;
    --grey-bg:#2A2530;
    --danger:#FF8A7A;
  }
}

*{box-sizing:border-box}
[hidden]{display:none !important}
html,body{margin:0;min-height:100%}
body{
  background:var(--bg); color:var(--ink);
  font:16px/1.5 var(--font); -webkit-text-size-adjust:100%;
  padding-bottom:env(safe-area-inset-bottom,0px);
}
a{color:var(--lila)}
h1{font-size:1.6rem;line-height:1.2;letter-spacing:-.015em;margin:0}
h2{font-size:1.15rem;margin:0}
h3{font-size:.95rem;margin:12px 0 2px;color:var(--muted);font-weight:600}
p{margin:0}
code{font-size:.9em;word-break:break-all}
:focus-visible{outline:3px solid var(--lila);outline-offset:2px;border-radius:6px}

/* ---------- Cabecera y navegación ---------- */
header.top{
  position:sticky; top:0; z-index:5;
  background:var(--surface); border-bottom:1px solid var(--line);
  padding:calc(env(safe-area-inset-top,0px) + 8px) 16px 8px;
}
.top-in{max-width:960px;margin:0 auto;display:flex;align-items:center;gap:16px}
.brand{position:relative;isolation:isolate;padding:2px 12px;line-height:1.15;white-space:nowrap}
.brand b{display:block;font-size:1.05rem;letter-spacing:-.01em}
.brand small{display:block;font-size:.78rem;color:var(--muted);font-weight:500}
/* la tira de kinesio rosa detrás del nombre */
.brand::before{
  content:""; position:absolute; left:-4px; right:-6px; top:3px; height:1.15rem; z-index:-1;
  background:var(--pink); opacity:.2; border-radius:999px; transform:rotate(-2.5deg);
}
.brand.big b{font-size:1.6rem}
.brand.big small{font-size:1rem}
.brand.big::before{height:1.9rem;top:4px}
.brand.big{align-self:flex-start;margin-bottom:24px}

nav.tabs{
  position:fixed; left:0; right:0; bottom:0; z-index:6;
  display:flex; background:var(--surface); border-top:1px solid var(--line);
  padding-bottom:env(safe-area-inset-bottom,0px);
}
nav.tabs a{
  flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px;
  height:var(--nav-h); color:var(--muted); text-decoration:none; font-size:.72rem; font-weight:500;
}
nav.tabs svg{width:22px;height:22px}
nav.tabs a[aria-current="page"]{color:var(--lila)}
nav.tabs a[aria-current="page"] svg{stroke-width:2.4}

@media (min-width:900px){
  nav.tabs{position:static;border:none;padding:0;margin-left:auto;gap:4px;background:none}
  nav.tabs a{flex:none;flex-direction:row;height:40px;padding:0 12px;border-radius:999px;font-size:.9rem;gap:6px}
  nav.tabs svg{width:18px;height:18px}
  nav.tabs a[aria-current="page"]{background:var(--lila-soft)}
}

/* ---------- Contenido ---------- */
main.view{
  max-width:760px; margin:0 auto; padding:20px 16px calc(var(--nav-h) + 32px);
  display:flex; flex-direction:column; gap:16px;
}
main.view.wide{max-width:960px;padding-left:8px;padding-right:8px}
@media (min-width:900px){ main.view{padding-bottom:48px} }
.head{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.head > :first-child{margin-right:auto}
.muted{color:var(--muted)}
.small{font-size:.85rem}
.strong{font-weight:600}
.pre{white-space:pre-wrap}
.grow{flex:1}
.pad{padding:8px 0}
.empty{color:var(--muted);padding:12px 4px}
.err-text{color:var(--danger)}
.note{background:var(--lila-soft);padding:10px 14px;border-radius:10px}
.back{display:inline-flex;align-items:center;gap:4px;text-decoration:none;font-weight:500;align-self:flex-start}
.back svg{width:18px;height:18px}
section{display:flex;flex-direction:column;gap:12px}
section + section{margin-top:12px}

/* ---------- Botones y chips ---------- */
.btn{
  font:inherit; font-weight:600; font-size:.95rem; cursor:pointer; text-decoration:none;
  display:inline-flex; align-items:center; justify-content:center; gap:6px;
  border:1px solid var(--lila); background:var(--lila); color:var(--lila-ink);
  border-radius:999px; padding:10px 18px; min-height:44px;
}
.btn:disabled{opacity:.55;cursor:progress}
.btn.ghost{background:transparent;color:var(--lila)}
.btn.sm{padding:6px 14px;min-height:36px;font-size:.85rem}
.btn.danger{border-color:var(--danger);color:var(--danger);background:transparent}
.btn.wa{border-color:#1F9D55;color:#1F9D55;background:transparent}
.btn.wide{width:100%}
.icon-btn{border:none;background:none;color:var(--muted);cursor:pointer;padding:8px;border-radius:999px;display:flex}
.icon-btn svg{width:22px;height:22px}

.chip{display:inline-block;font-size:.8rem;font-weight:600;padding:3px 12px;border-radius:999px;white-space:nowrap}
.chip.pend{background:var(--pink-bg);color:var(--pink);transform:rotate(-1.5deg)}
.chip.ok{background:var(--ok-bg);color:var(--ok)}
.chip.lila{background:var(--lila-soft);color:var(--lila)}
.chip.grey{background:var(--grey-bg);color:var(--muted)}
.tags{display:flex;flex-wrap:wrap;gap:6px}
.tag{font-size:.78rem;padding:2px 10px;border-radius:999px;background:var(--lila-soft);color:var(--ink)}

/* ---------- Listas ---------- */
.list{background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden}
.row{
  display:flex; align-items:center; gap:12px; padding:12px 16px; min-height:56px;
  color:inherit; text-decoration:none; border-top:1px solid var(--line);
}
.row:first-child{border-top:none}
.row > div{flex:1;min-width:0}
.row svg{width:18px;height:18px;color:var(--muted);flex:none}
a.row:hover,button.row:hover{background:var(--lila-soft)}
button.row{font:inherit;width:100%;text-align:left;background:none;border-left:0;border-right:0;border-bottom:0;cursor:pointer}

.panel{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:16px}
.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px 20px;margin:0}
.facts dt{font-size:.8rem;color:var(--muted)}
.facts dd{margin:0;overflow-wrap:anywhere}
.actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}

/* Historial: línea de tiempo */
ol.timeline{list-style:none;margin:0;padding:0 0 0 18px;border-left:2px solid var(--line);display:flex;flex-direction:column;gap:12px}
li.ses{
  position:relative; background:var(--surface); border:1px solid var(--line); border-radius:14px;
  padding:12px 14px; display:flex; flex-direction:column; gap:6px;
}
li.ses::before{
  content:""; position:absolute; left:-25px; top:18px; width:12px; height:12px; border-radius:50%;
  background:var(--surface); border:2px solid var(--lila);
}
li.ses.falta::before{border-color:var(--pink)}
li.ses.bono::before{border-radius:3px}
.ses-top,.ses-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ses-top .date{font-weight:600;font-variant-numeric:tabular-nums}
.ses-top a{text-decoration:none}
.ses-foot{font-variant-numeric:tabular-nums}

/* ---------- Agenda semanal ---------- */
.weeknav{display:flex;align-items:center;gap:4px}
.weeknav span{font-weight:600;min-width:9.5em;text-align:center}
.week{
  --gut:38px;
  background:var(--surface); border:1px solid var(--line); border-radius:14px; overflow:hidden;
}
.wk-head,.wk-body{display:grid;grid-template-columns:var(--gut) repeat(var(--days),minmax(0,1fr))}
.wk-head{border-bottom:1px solid var(--line)}
.wk-head div{padding:6px 2px;text-align:center;font-size:.78rem;color:var(--muted);line-height:1.2}
.wk-head div b{display:block;font-size:1.05rem;color:var(--ink);font-variant-numeric:tabular-nums}
.wk-head div.today b{color:var(--lila-ink);background:var(--lila);border-radius:999px;width:1.9em;height:1.9em;line-height:1.9em;margin:2px auto 0}
.wk-hours{position:relative}
.wk-hours span{position:absolute;right:6px;transform:translateY(-50%);font-size:.7rem;color:var(--muted);font-variant-numeric:tabular-nums}
.wk-col{
  position:relative; border-left:1px solid var(--line); cursor:pointer;
  background-image:repeating-linear-gradient(to bottom, var(--line) 0 1px, transparent 1px var(--hh));
}
.wk-col.today{background-color:color-mix(in srgb, var(--lila-soft) 45%, transparent)}
.now{position:absolute;left:0;right:0;height:2px;background:var(--pink);z-index:2;pointer-events:none}
.ev{
  position:absolute; left:2px; right:2px; z-index:1; overflow:hidden; cursor:pointer;
  border-radius:8px; padding:2px 5px; font:inherit; font-size:.72rem; line-height:1.2; text-align:left;
  background:var(--lila-soft); color:var(--ink); border:0; border-left:3px solid var(--lila);
}
.ev b{display:block;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ev span{color:var(--muted);font-variant-numeric:tabular-nums}
.ev.realizada{background:var(--ok-bg);border-left-color:var(--ok)}
.ev.falta{background:var(--pink-bg);border-left-color:var(--pink)}
.ev.anulada{background:var(--grey-bg);border-left-color:var(--muted);opacity:.75}
.ev.anulada b{text-decoration:line-through}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:.8rem;color:var(--muted)}
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}

/* ---------- Resumen ---------- */
.total{font-size:1.3rem;font-weight:700;font-variant-numeric:tabular-nums}
.total.big{font-size:2.2rem;letter-spacing:-.02em;line-height:1.1}
.quarters{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.quarters > div{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:10px 12px}
.quarters .strong{font-variant-numeric:tabular-nums;font-size:.95rem}
@media (max-width:480px){ .quarters{grid-template-columns:repeat(2,1fr)} }
.bars{display:flex;flex-direction:column;gap:6px}
.bar-row{display:grid;grid-template-columns:36px 1fr 88px;align-items:center;gap:10px}
.bar{height:14px;background:var(--lila-soft);border-radius:999px;overflow:hidden}
.bar > span{display:block;height:100%;background:var(--lila);border-radius:999px}
.num{text-align:right;font-variant-numeric:tabular-nums}
.stepper{display:flex;align-items:center;gap:4px}
.stepper span{min-width:7.5em;text-align:center;font-weight:600}

/* ---------- Formularios ---------- */
.stack{display:flex;flex-direction:column;gap:14px}
label{display:flex;flex-direction:column;gap:4px;font-size:.88rem;font-weight:500;color:var(--muted)}
input,select,textarea{
  font:inherit; font-size:16px; color:var(--ink); background:var(--bg);
  border:1px solid var(--line); border-radius:10px; padding:10px 12px; width:100%;
}
textarea{resize:vertical}
input:focus,select:focus,textarea:focus{outline:2px solid var(--lila);outline-offset:0;border-color:transparent}
label.check{flex-direction:row;align-items:center;gap:10px;color:var(--ink);font-size:.95rem}
label.check input{width:20px;height:20px;accent-color:var(--lila);flex:none}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width:420px){ .grid2{grid-template-columns:1fr} }
input[type=search]{background:var(--surface);border-radius:999px;padding-left:16px}
fieldset{border:1px solid var(--line);border-radius:12px;padding:12px 14px 14px;margin:0;display:flex;flex-direction:column;gap:12px;min-width:0}
legend{font-size:.88rem;font-weight:600;color:var(--muted);padding:0 6px}
details.box{border:1px solid var(--line);border-radius:12px;padding:10px 14px}
details.box summary{cursor:pointer;font-weight:600;color:var(--muted);font-size:.9rem}
details.box[open] summary{margin-bottom:12px}
details.box > div{display:flex;flex-direction:column;gap:12px}

/* Botones-chip (zonas, técnicas, dolor, opciones) */
.toggles{display:flex;flex-wrap:wrap;gap:6px}
.tog{display:inline-flex;flex-direction:row;cursor:pointer;color:var(--ink);font-size:.85rem;font-weight:500}
.tog input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}
.tog span{padding:6px 12px;border-radius:999px;border:1px solid var(--line);background:var(--bg);min-width:2.2em;text-align:center}
.tog input:checked + span{background:var(--lila);border-color:var(--lila);color:var(--lila-ink)}
.tog input:focus-visible + span{outline:3px solid var(--lila);outline-offset:2px}
.dolor .tog span{padding:6px 0;min-width:2.3em}
.opt{display:flex;flex-direction:row;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--line);border-radius:12px;color:var(--ink);font-size:.95rem;cursor:pointer}
.opt input{width:20px;height:20px;accent-color:var(--lila);flex:none;margin-top:1px}
.opt:has(input:checked){border-color:var(--lila);background:var(--lila-soft)}

/* ---------- Documentos ---------- */
.doc-row .ico{width:36px;height:36px;border-radius:8px;background:var(--lila-soft);color:var(--lila);display:flex;align-items:center;justify-content:center;flex:none}
.doc-row .ico svg{width:20px;height:20px;color:var(--lila)}
.preview{max-width:100%;max-height:60dvh;object-fit:contain;border-radius:10px;align-self:center;background:var(--bg)}

/* ---------- Diálogo (hoja inferior en móvil) ---------- */
dialog{
  border:none; padding:0; background:var(--surface); color:var(--ink);
  width:100%; max-width:560px; max-height:92dvh;
  margin:auto auto 0; border-radius:20px 20px 0 0;
}
dialog::backdrop{background:rgba(20,10,30,.45)}
@media (min-width:600px){ dialog{margin:auto;border-radius:20px} }
.sheet{display:flex;flex-direction:column;max-height:92dvh}
.sheet-head{display:flex;align-items:center;gap:8px;padding:16px 16px 8px 20px}
.sheet-head h2{flex:1}
.sheet-body{padding:8px 20px 16px;overflow-y:auto}
.sheet-foot{
  display:flex; justify-content:flex-end; gap:8px; padding:12px 16px;
  border-top:1px solid var(--line);
  padding-bottom:calc(12px + env(safe-area-inset-bottom,0px));
}
.qr{width:200px;height:200px;align-self:center;background:#fff;border-radius:12px;padding:8px}

/* ---------- Login ---------- */
main.auth{
  max-width:380px; margin:0 auto;
  padding:calc(env(safe-area-inset-top,0px) + 12vh) 20px 40px;
  display:flex; flex-direction:column; gap:14px;
}

/* ---------- Aviso ---------- */
#toast{
  position:fixed; left:50%; bottom:calc(var(--nav-h) + 20px + env(safe-area-inset-bottom,0px));
  transform:translate(-50%,20px); opacity:0; pointer-events:none; z-index:20;
  background:var(--ink); color:var(--bg); padding:10px 18px; border-radius:999px;
  font-weight:500; font-size:.92rem; max-width:calc(100% - 32px); text-align:center;
  transition:opacity .2s, transform .2s;
}
#toast.show{opacity:1;transform:translate(-50%,0)}
#toast.err{background:var(--danger);color:#fff}
@media (min-width:900px){ #toast{bottom:32px} }
@media (prefers-reduced-motion:reduce){ #toast{transition:none} }
