:root{--bg:#f5f6f8;--card:#fff;--ink:#1c2430;--mut:#64748b;--line:#e2e8f0;--pri:#1d4ed8;--priink:#fff;--out:#eef0f3;--today:#fef3c7}
@media (prefers-color-scheme:dark){:root{--bg:#10141b;--card:#181e28;--ink:#e6eaf0;--mut:#94a3b8;--line:#2a3342;--pri:#3b82f6;--priink:#fff;--out:#141922;--today:#3a3012}}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}
.top{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--card);border-bottom:1px solid var(--line)}
.top h1{font-size:1.15rem;margin:0}
.who{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.badge{font-size:.72rem;background:var(--out);border:1px solid var(--line);border-radius:99px;padding:1px 8px;color:var(--mut)}
.notice{margin:12px 16px 0;padding:8px 12px;background:var(--card);border:1px solid var(--line);border-left:4px solid var(--pri);border-radius:6px;color:var(--mut)}
.btn{display:inline-block;border:1px solid var(--pri);background:var(--pri);color:var(--priink);border-radius:8px;padding:7px 14px;font:inherit;cursor:pointer;text-decoration:none}
.btn.ghost{background:transparent;color:var(--ink);border-color:var(--line)}
.btn.danger{background:#b91c1c;border-color:#b91c1c}
.btn:focus-visible,select:focus-visible,input:focus-visible,textarea:focus-visible,button:focus-visible{outline:2px solid var(--pri);outline-offset:2px}
.tabs{display:flex;gap:4px;overflow-x:auto;padding:12px 16px 0}
.tabs button{border:1px solid var(--line);border-bottom:none;background:var(--card);color:var(--mut);padding:8px 16px;border-radius:8px 8px 0 0;cursor:pointer;font:inherit;white-space:nowrap}
.tabs button.on{color:var(--ink);font-weight:600;box-shadow:inset 0 -3px 0 var(--pri)}
.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;padding:12px 16px;background:var(--card);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.seg{display:flex;border:1px solid var(--line);border-radius:8px;overflow:hidden}
.seg button{border:0;background:transparent;color:var(--ink);padding:7px 12px;cursor:pointer;font:inherit}
.seg button.on{background:var(--pri);color:var(--priink)}
.nav{display:flex;align-items:center;gap:6px}.nav strong{min-width:150px;text-align:center}
select,input,textarea{font:inherit;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:8px;padding:7px 10px;max-width:100%}
#nuevo{margin-left:auto}
main{padding:16px}
.grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--card)}
.dow{padding:6px;text-align:center;font-size:.8rem;color:var(--mut);background:var(--out);border-bottom:1px solid var(--line)}
.day{min-height:104px;padding:4px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);cursor:pointer;overflow:hidden}
.day:nth-child(7n){border-right:0}
.day.other{background:var(--out);color:var(--mut)}
.day.fuera{background:repeating-linear-gradient(45deg,var(--out),var(--out) 6px,transparent 6px,transparent 12px)}
.day.today,.ycell.today{box-shadow:inset 0 0 0 2px var(--pri)}
.day .n{font-size:.8rem;font-weight:600;display:block;margin-bottom:2px}
.chip{display:block;width:100%;text-align:left;border:0;border-left:4px solid var(--c,#475569);background:var(--out);color:var(--ink);border-radius:4px;padding:1px 5px;margin:2px 0;font:inherit;font-size:.78rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
.chip.priv{border-style:dashed none dashed solid;font-style:italic}
.more{font-size:.75rem;color:var(--pri);background:none;border:0;cursor:pointer;padding:0 4px}
.list h3{margin:18px 0 6px;font-size:.95rem;color:var(--mut);border-bottom:1px solid var(--line);padding-bottom:4px}
.list h2{margin:22px 0 4px;font-size:1.05rem}
.item{display:flex;gap:12px;align-items:flex-start;width:100%;text-align:left;background:var(--card);border:1px solid var(--line);border-left:5px solid var(--c,#475569);border-radius:8px;padding:8px 12px;margin:6px 0;cursor:pointer;font:inherit;color:inherit}
.item .t{font-weight:600}.item .m{color:var(--mut);font-size:.85rem}
.empty{color:var(--mut);padding:24px;text-align:center}
.legend{display:flex;flex-wrap:wrap;gap:12px;padding:0 16px 24px;font-size:.82rem;color:var(--mut)}
.legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:4px;background:var(--c)}
.modal{position:fixed;inset:0;background:rgba(0,0,0,.5);display:flex;align-items:center;justify-content:center;padding:16px;z-index:10}
.modal[hidden]{display:none}
.modal-box{background:var(--card);border-radius:12px;max-width:560px;width:100%;max-height:92vh;overflow:auto;padding:20px}
.modal-box h2{margin:0 0 8px}
.row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
label{display:block;font-size:.85rem;color:var(--mut);margin:10px 0 3px}
label input,label select,label textarea{width:100%}
.checks label{display:inline-flex;gap:6px;align-items:center;margin:4px 12px 4px 0;color:var(--ink)}
.checks input{width:auto}
.actions{display:flex;gap:8px;justify-content:flex-end;margin-top:16px;flex-wrap:wrap}
.err{color:#b91c1c;margin-top:8px}
.pill{display:inline-block;font-size:.75rem;border:1px solid var(--line);border-radius:99px;padding:0 8px;margin-right:4px}
/* admin */
.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:16px;margin:16px}
.card.narrow{max-width:520px;margin:48px auto}
table{width:100%;border-collapse:collapse}
th,td{text-align:left;padding:8px;border-bottom:1px solid var(--line);vertical-align:top}
th{font-size:.8rem;color:var(--mut)}
.adm-nav{display:flex;gap:6px;flex-wrap:wrap;padding:10px 16px;background:var(--card);border-bottom:1px solid var(--line)}
.adm-nav a{padding:6px 12px;border-radius:8px;text-decoration:none;color:var(--ink);border:1px solid var(--line)}
.adm-nav a.on{background:var(--pri);color:var(--priink);border-color:var(--pri)}
.flash{margin:16px;padding:10px 14px;border-radius:8px;background:#dcfce7;color:#14532d}
.flash.bad{background:#fee2e2;color:#7f1d1d}
.inline{display:inline}.inline button{padding:3px 10px}
@media (max-width:700px){.day{min-height:70px}.chip{font-size:.7rem}.row{grid-template-columns:1fr}#nuevo{margin-left:0}}

.daylist{max-height:55vh;overflow:auto;padding-right:4px}
.more{font-weight:600;text-decoration:underline}

/* tipos de día */
:root{--tp:rgba(255,102,255,.32);--tl:rgba(0,176,240,.22);--tf:rgba(255,0,0,.20);--td:rgba(120,190,80,.40);--te:rgba(255,200,0,.42);--fs:rgba(128,128,128,.28)}
.day.t-lectivo,.ycell.t-lectivo,.sw.t-lectivo{background:var(--tl)}
.day.t-feriado,.ycell.t-feriado,.sw.t-feriado{background:var(--tf)}
.day.t-docentes,.ycell.t-docentes,.sw.t-docentes{background:var(--td)}
.day.t-especial,.ycell.t-especial,.sw.t-especial{background:var(--te)}
.day.finde,.ycell.finde,.sw.finde{background:var(--fs)}
.legend .sw{width:14px;height:14px;border:1px solid var(--line);vertical-align:-2px}
/* vista anual */
.ywrap{overflow-x:auto}
.ygrid{display:grid;grid-template-columns:repeat(12,minmax(64px,1fr));min-width:820px;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--card)}
.yhead{text-align:center;font-weight:600;font-size:.8rem;padding:4px;background:var(--out);border-bottom:1px solid var(--line);border-right:1px solid var(--line)}
.ycell{position:relative;display:flex;align-items:center;gap:4px;height:24px;padding:0 4px;font-size:.74rem;border-right:1px solid var(--line);border-bottom:1px solid var(--line);cursor:pointer}
.ycell.blank{background:var(--out);cursor:default}
.yn{min-width:1.3em;text-align:right;font-weight:600}.yd{color:var(--mut)}
.ydot{margin-left:auto;min-width:11px;height:11px;border-radius:99px;font-size:.6rem;line-height:11px;text-align:center;color:#fff}

/* El atributo hidden debe ganar sobre display de .btn, .nav, etc. */
[hidden]{display:none !important}

.day.t-feriado_solo,.ycell.t-feriado_solo,.sw.t-feriado_solo{background:var(--tp)}

/* actividades por revisar */
.notice.warn{border-left-color:#d97706}
.chip.rev{outline:1px dashed #d97706;outline-offset:-1px}
.pill.warnpill{border-color:#d97706;color:#b45309}
#revBanner{display:flex;gap:10px;align-items:center;flex-wrap:wrap}

/* publicación */
#estadoBanner{border-left-color:#d97706}
.pubform table{max-width:520px}.pubform td:nth-child(n+2),.pubform th:nth-child(n+2){text-align:center}
.pubform input[type=checkbox]{width:18px;height:18px}
ul.m{color:var(--mut);margin:6px 0 0;padding-left:20px}

/* ===== Idioma (banderas) ===== */
.lang{display:flex;gap:6px}
.lang button{padding:3px;border:2px solid transparent;border-radius:6px;background:transparent;cursor:pointer;line-height:0;opacity:.6}
.lang button.on{border-color:var(--pri);opacity:1}
.lang svg{display:block;border-radius:2px;box-shadow:0 0 0 1px rgba(0,0,0,.25)}
.dots{display:none}

/* ===== Responsivo ===== */
html{-webkit-text-size-adjust:100%}
img,svg{max-width:100%}
.card{overflow-x:auto}
@media (max-width:900px){
  .toolbar{gap:8px}
  .seg{flex:1 1 100%}.seg button{flex:1;padding:9px 6px;font-size:.9rem}
  .nav{flex:1 1 100%;justify-content:space-between}
  .nav strong{flex:1}
  #selCurso,#selPeriodo,#selCat{flex:1 1 45%;min-width:0}
}
@media (max-width:700px){
  body{font-size:16px}
  .top{padding:8px 12px}
  .top h1{font-size:1rem;flex:1 1 100%}
  .who{width:100%;justify-content:space-between}
  .who .btn{padding:8px 10px;font-size:.9rem}
  .notice{margin:8px 12px 0;font-size:.9rem}
  .tabs{padding:8px 12px 0;-webkit-overflow-scrolling:touch}
  .tabs button{padding:10px 14px}
  .toolbar{padding:10px 12px}
  #selCurso,#selPeriodo,#selCat{flex:1 1 100%}
  #nuevo{flex:1 1 100%;margin-left:0;padding:10px}
  main{padding:10px 8px}
  /* mes: celdas compactas con puntos de color; el detalle se ve al tocar el día */
  .dow{padding:4px 0;font-size:.7rem}
  .day{min-height:54px;padding:3px 2px;text-align:center}
  .day .n{font-size:.85rem;margin:0 0 3px}
  .day .chip,.day .more{display:none}
  .dots{display:flex;flex-wrap:wrap;justify-content:center;gap:2px;font-size:.65rem;color:var(--mut);line-height:1}
  .dots i{width:7px;height:7px;border-radius:50%;display:block}
  /* lista y agenda */
  .item{padding:10px}
  .list h3{font-size:.9rem}
  /* ventanas: hoja a pantalla completa, controles cómodos al tacto */
  .modal{padding:0;align-items:flex-end}
  .modal-box{max-width:none;max-height:94vh;border-radius:14px 14px 0 0;padding:16px}
  .modal-box .btn,.actions .btn{padding:10px 14px}
  .actions .btn{flex:1 1 auto}
  input,select,textarea{font-size:16px}   /* evita el zoom automático de iOS */
  .row{grid-template-columns:1fr}
  .daylist{max-height:60vh}
  .legend{padding:0 12px 24px;gap:8px 12px}
  /* año: se desplaza horizontalmente */
  .ygrid{min-width:760px}
  .ywrap{-webkit-overflow-scrolling:touch}
  /* administración */
  .card{margin:10px 8px;padding:12px}
  .card.narrow{margin:20px 8px}
  .adm-nav{padding:8px 10px}
  th,td{padding:6px 4px}
}
@media (max-width:380px){.day{min-height:48px}.lang svg{width:26px;height:17px}}

/* ===== Impresión / PDF (carta) ===== */
.printhead{display:none}
.pdesc{display:none}
.printday{display:none}
.item .pdesc{display:block;white-space:pre-wrap;color:var(--mut);font-size:.85rem;margin-top:4px;font-weight:400}
#imprimir{margin-left:auto}#nuevo{margin-left:0}
@media (max-width:700px){#imprimir{flex:1 1 100%;margin-left:0}}
@media print{
  :root{--bg:#fff;--card:#fff;--ink:#000;--mut:#444;--line:#999;--out:#f1f1f1;--today:#fff}
  *{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  html,body{background:#fff}
  .top,.tabs,.toolbar,.notice,#modal,.lang,.dots,.more,#revBanner,#estadoBanner{display:none !important}
  .printhead{display:block;margin:0 0 6px}
  .printhead h1{font-size:15pt;margin:0}.printhead p{margin:2px 0;font-size:11pt;font-weight:600}.printhead small{color:#444}
  main{padding:0}
  body{font-size:9pt}
  .grid{border-radius:0}
  .day{min-height:0;height:auto;padding:2px;cursor:default;break-inside:avoid;overflow:visible}
  .day .n{font-size:8pt}
  .chip{white-space:normal;overflow:visible;text-overflow:clip;font-size:7pt;line-height:1.2;padding:0 3px;margin:1px 0;border:0;border-left:3px solid var(--c);background:rgba(255,255,255,.75)}
  .ygrid{min-width:0;width:100%;border-radius:0}
  .ycell{height:17px;font-size:7pt;cursor:default}
  .ywrap{overflow:visible}
  .item{break-inside:avoid;cursor:default;padding:5px 8px;margin:3px 0}
  .list h2{break-after:avoid}.list h3{break-after:avoid;margin:10px 0 4px}
  .legend{padding:6px 0 0;font-size:7.5pt;color:#222;gap:3px 10px}
  .day.today,.ycell.today{box-shadow:none}
  .pdesc{display:block;white-space:pre-wrap;font-weight:400;color:#333}
  body.print-day main,body.print-day .legend,body.print-day #printHead{display:none !important}
  body.print-day .printday{display:block}
  .printday h1{font-size:16pt;margin:0 0 2px}.printday h2{font-size:13pt;margin:0 0 12px;}
  .printday h2::first-letter{text-transform:uppercase}
  .printday .pi{border-left:4px solid var(--c);padding:4px 10px;margin:0 0 10px;break-inside:avoid;font-size:10.5pt}
  .printday .pi .t{font-weight:700;font-size:12pt}.printday .pi .m{color:#555}
  .printday .pdesc{font-size:10.5pt;margin-top:4px}
  .chip .pdesc{font-size:6.5pt;line-height:1.15;margin-top:1px}
  .item .pdesc{font-size:8.5pt;margin-top:3px}
}

/* ===== Navegación, gráficas y reportes ===== */
.sitenav{display:flex;gap:4px;padding:8px 16px 0;background:var(--card);border-bottom:1px solid var(--line);overflow-x:auto}
.sitenav a{padding:8px 16px;border-radius:8px 8px 0 0;text-decoration:none;color:var(--mut);border:1px solid transparent;border-bottom:none;white-space:nowrap}
.sitenav a.on{color:var(--ink);font-weight:600;background:var(--bg);border-color:var(--line);box-shadow:inset 0 -3px 0 var(--pri)}
.filtros{align-items:flex-end}
.filtros .f{display:flex;flex-direction:column;gap:2px;margin:0;font-size:.78rem;color:var(--mut)}
.filtros .f select,.filtros .f input{min-width:130px}
.gwrap{max-width:1200px;margin:0 auto}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin-bottom:6px}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.kpi b{display:block;font-size:1.8rem;line-height:1.1}.kpi span{color:var(--mut);font-size:.85rem}
.gcard{margin:12px 0}.gcard h2{margin:0 0 10px;font-size:1.02rem}
.two{display:grid;grid-template-columns:1fr 1fr;gap:12px}.two .gcard{margin:12px 0 0}
.chart-wrap{overflow-x:auto}
.chart{width:100%;min-width:560px;height:auto;display:block}
.chart .grid{stroke:var(--line);stroke-width:1}.chart .ax{fill:var(--mut);font-size:11px}.chart .val{fill:var(--ink);font-size:11px;font-weight:600}
.chart-legend{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:.82rem;color:var(--mut);margin-top:6px}
.chart-legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px}
.hbars{display:flex;flex-direction:column;gap:8px}
.hrow{display:grid;grid-template-columns:minmax(90px,170px) 1fr 36px;gap:8px;align-items:center;font-size:.88rem}
.hl{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hb{background:var(--out);border-radius:99px;height:14px;overflow:hidden}
.hb i{display:block;height:100%;border-radius:99px}.hv{text-align:right}
.exports{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:10px}.exports .grow{flex:1}
.tbl-wrap{overflow-x:auto}
.rtable{font-size:.88rem;min-width:640px}.rtable.small{min-width:0}
.rtable th{position:sticky;top:0;background:var(--card)}
.pdesc2{color:var(--mut);font-weight:400;font-size:.82rem;margin-top:2px;white-space:pre-wrap}
.cdot::before{content:"";display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--c);margin-right:6px}
@media (max-width:900px){.two{grid-template-columns:1fr}}
@media (max-width:700px){
  .sitenav{padding:6px 12px 0}.sitenav a{padding:10px 14px}
  .filtros .f{flex:1 1 45%}.filtros .f select,.filtros .f input{min-width:0;width:100%}
  .filtros .btn{flex:1 1 100%}
  /* tabla del reporte en tarjetas */
  .rtable{min-width:0}.rtable thead{display:none}
  .rtable tr{display:block;border:1px solid var(--line);border-radius:8px;margin:8px 0;padding:6px 8px;background:var(--card)}
  .rtable td{display:flex;gap:8px;border:0;padding:3px 0}
  .rtable td:empty{display:none}
  .rtable td::before{content:attr(data-l);flex:0 0 78px;color:var(--mut);font-size:.78rem}
  .rtable.small tr{display:table-row;border:0;padding:0;margin:0}.rtable.small td{display:table-cell}.rtable.small td::before{content:none}
  .rtable.small thead{display:table-header-group}.rtable.small{min-width:420px}
}
@media print{
  .sitenav,.exports,.filtros{display:none !important}
  .gcard{border:0;padding:0;margin:8px 0;break-inside:avoid}
  .kpi{border:1px solid #bbb}
  .chart{min-width:0}.chart-wrap{overflow:visible}
  .rtable{min-width:0;font-size:8pt}.rtable th{position:static}
  .tbl-wrap{overflow:visible}
  .pdesc2{color:#333}
}

.nota{color:var(--mut);font-size:.82rem;margin:6px 0 0}.badge.big{font-size:.85rem;padding:3px 10px;color:var(--ink)}

/* ===== Importar ===== */
.gcard h3{margin:0 0 4px;font-size:1rem}
.estado{display:inline-block;padding:1px 9px;border-radius:99px;font-size:.78rem;font-weight:600;border:1px solid var(--line)}
.estado.ok{background:#dcfce7;color:#14532d;border-color:#86efac}.estado.error{background:#fee2e2;color:#7f1d1d;border-color:#fca5a5}.estado.duplicada{background:#fef3c7;color:#78350f;border-color:#fcd34d}
.rtable.imp tr.f-error td:last-child{color:#b91c1c}.rtable.imp tr.f-duplicada td:last-child{color:#92400e}
.okmsg{font-size:1.1rem;font-weight:600;color:#15803d}
input[type=file]{max-width:100%}

/* recurrencia */
.recbox{border:1px solid var(--line);border-radius:8px;padding:2px 12px 10px;margin:8px 0;background:rgba(0,0,0,.02)}
.cadaw{display:flex;gap:8px;align-items:center}.cadaw input{width:76px}.unit{color:var(--mut);font-size:.85rem}
.recprev{margin-top:8px;font-size:.85rem}.serienote{background:#eef2ff;border-radius:8px;padding:8px 10px}
.pill.seriepill{border-color:#6366f1;color:#4338ca}
.actions.scope{flex-direction:row}
.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:#1f2937;color:#fff;padding:10px 16px;border-radius:10px;z-index:30;max-width:90vw;box-shadow:0 6px 20px rgba(0,0,0,.25)}
@media print{.toast{display:none}}
.modal-box .m,.recbox .m{color:var(--mut)}
