:root{
  --paper:#eff1ec;
  --paper-raised:#ffffff;
  --ink:#1f2a24;
  --ink-soft:#4c574f;
  --line:#d8d6ce;
  --accent:#355e4b;
  --danger:#a13d2c;
  --ok:#2f6f4f;
  --swap-day:#1f7a8c;
  --override-day:#4a5b8c;
  --today:#d62828;
  --override-tint-bg:#eef0f7;
  --override-tint-border:#c7cee3;
  --shadow:0 1px 2px rgba(31,42,36,.06), 0 8px 24px -12px rgba(31,42,36,.18);
  --radius:10px;
  --font-display:'Fraunces', ui-serif, Georgia, serif;
  --font-body:'Public Sans', ui-sans-serif, system-ui, sans-serif;
  --font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
@media (prefers-color-scheme: dark){
  :root{
    --paper:#181b18;
    --paper-raised:#212520;
    --ink:#ece9e1;
    --ink-soft:#a9b0a5;
    --line:#3a3f38;
    --accent:#7fbb9c;
    --danger:#e0917f;
    --ok:#7fbb9c;
    --swap-day:#5fb8c9;
    --override-day:#93a7e0;
    --today:#ff4d4d;
    --override-tint-bg:#242a3d;
    --override-tint-border:#3a4566;
    --shadow:0 1px 2px rgba(0,0,0,.3), 0 8px 24px -12px rgba(0,0,0,.5);
  }
}
*{box-sizing:border-box;}
body{
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--font-body);
  font-size:15px;
  line-height:1.5;
  padding:20px 16px 48px;
}
.wrap{max-width:1280px;margin:0 auto;}
h1,h2,h3{font-family:var(--font-display);text-wrap:balance;margin:0;}
a{color:var(--accent);}

/* account bar (shown on calendar/index pages when logged in) */
.account-bar{
  max-width:1280px;margin:0 auto 14px;display:flex;justify-content:space-between;align-items:center;
  font-size:13px;color:var(--ink-soft);flex-wrap:wrap;gap:6px;
}
.account-bar a{color:var(--ink-soft);text-decoration:underline;}
.account-bar strong{color:var(--ink);}

header.top{
  display:flex;flex-wrap:wrap;gap:16px;align-items:flex-end;justify-content:space-between;
  padding-bottom:18px;margin-bottom:18px;border-bottom:1px solid var(--line);
}
.title-block h1{font-size:clamp(24px,3vw,32px);font-weight:600;color:var(--accent);}
.title-block p{margin:4px 0 0;color:var(--ink-soft);font-size:13.5px;max-width:52ch;}
.yearnav{display:flex;align-items:center;gap:10px;}
.yearnav .yearval{font-family:var(--font-display);font-size:26px;font-weight:600;min-width:64px;text-align:center;font-variant-numeric:tabular-nums;}
button, .btn{
  font-family:var(--font-body);font-size:13.5px;font-weight:600;
  border:1px solid var(--line);background:var(--paper-raised);color:var(--ink);
  border-radius:8px;padding:8px 14px;cursor:pointer;transition:background .15s,border-color .15s;
}
button:hover{border-color:var(--accent);}
button:focus-visible, a:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible{
  outline:2px solid var(--accent);outline-offset:2px;
}
button.primary{background:var(--accent);color:var(--paper);border-color:var(--accent);}
button.icononly{padding:8px 11px;font-size:16px;line-height:1;}
button.ghost{background:transparent;}
.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:20px;}
.toolbar .spacer{flex:1;}

.layout{display:grid;grid-template-columns:250px 1fr;gap:24px;align-items:start;}
@media (max-width:880px){.layout{grid-template-columns:1fr;}}

.panel{
  background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);
  padding:16px;box-shadow:var(--shadow);
}
.panel + .panel{margin-top:16px;}
.panel h3{font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-soft);font-family:var(--font-body);font-weight:700;margin-bottom:10px;}

.legend-row{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:13.5px;}
.swatch{width:14px;height:14px;border-radius:4px;flex:none;}
.legend-icons{display:flex;flex-direction:column;gap:6px;margin-top:10px;padding-top:10px;border-top:1px solid var(--line);font-size:12.5px;color:var(--ink-soft);}
.legend-icons span.ic{display:inline-block;width:1.4em;text-align:center;}

.stat-bar{height:10px;border-radius:6px;overflow:hidden;display:flex;background:var(--line);margin:8px 0 6px;}
.stat-bar div{height:100%;}
.stat-nums{display:flex;justify-content:space-between;font-size:12.5px;color:var(--ink-soft);font-variant-numeric:tabular-nums;}
.vac-table{width:100%;border-collapse:collapse;font-size:12.5px;margin-top:4px;}
.vac-table td{padding:4px 2px;border-top:1px solid var(--line);vertical-align:top;}
.vac-table td.who{white-space:nowrap;font-weight:600;}

#dayDetail{min-height:64px;font-size:13.5px;}
#dayDetail .dd-date{font-family:var(--font-display);font-size:17px;margin-bottom:4px;}
#dayDetail .dd-owner{font-weight:600;}
#dayDetail ul{margin:6px 0 0;padding-left:18px;color:var(--ink-soft);}
#dayDetail .dd-empty{color:var(--ink-soft);}

/* aviso de periodos de vacaciones sin fechas escolares */
.cal-notice{margin:0 0 12px;padding:10px 14px;border-radius:8px;border:1px solid var(--danger);background:var(--paper-raised);color:var(--danger);font-size:13px;}
.cal-notice[hidden]{display:none;}
/* 4 meses por fila en el ancho máximo (≈1000px); baja a 3/2/1 solo si no caben */
.months{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;}
.month{background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);padding:10px;box-shadow:var(--shadow);}
.month h4{font-family:var(--font-display);font-weight:600;font-size:16px;margin:0 0 8px;text-align:center;}
.wk-row, .day-row{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;}
.wk-row span{font-size:10.5px;text-align:center;color:var(--ink-soft);font-weight:600;text-transform:uppercase;}
.day-row{margin-top:3px;}
.day-cell{
  position:relative;aspect-ratio:1;border-radius:6px;display:flex;align-items:flex-start;justify-content:flex-end;
  padding:3px 4px;font-size:11.5px;font-variant-numeric:tabular-nums;cursor:pointer;color:var(--ink);
  border:1px solid transparent;
}
.day-cell.empty{visibility:hidden;cursor:default;}
.day-cell .num{position:relative;z-index:1;}
/* Hoy: la casilla se vuelve redonda con un aro rojo grueso; conserva el color del progenitor */
.day-cell .badges span.forced-dot{
  width:7px;height:7px;border-radius:50%;background:var(--today);box-shadow:0 0 0 1.5px #fff;align-self:center;margin:0 1px;
}
.day-cell.today{
  border-radius:50%;align-items:center;justify-content:center;padding:0;
  outline:4px solid var(--today);outline-offset:1px;z-index:2;
}
.day-cell.today .num{font-weight:700;font-size:13px;}
.day-cell.today .badges{left:50%;transform:translateX(-50%);bottom:4px;}
.swatch.today-swatch{background:transparent;border:2px solid var(--today);border-radius:50%;}
.day-cell.selected{box-shadow:0 0 0 2px var(--accent) inset;}
.day-cell .badges{position:absolute;left:3px;bottom:2px;display:flex;align-items:center;gap:2px;}
.day-cell .badges span{font-size:9px;line-height:1;}

.drawer-backdrop{position:fixed;inset:0;background:rgba(20,24,20,.35);display:none;z-index:20;}
.drawer-backdrop.open{display:block;}
.drawer{
  position:fixed;top:0;right:0;height:100%;width:min(560px,100%);background:var(--paper-raised);
  border-left:1px solid var(--line);box-shadow:var(--shadow);z-index:21;
  transform:translateX(100%);transition:transform .2s ease;overflow-y:auto;padding:22px;
}
.drawer.open{transform:translateX(0);}
.drawer h2{font-size:20px;color:var(--accent);margin-bottom:4px;}
.drawer p.hint{color:var(--ink-soft);font-size:13px;margin:0 0 18px;}
.field-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px;margin-bottom:18px;}
.field{display:flex;flex-direction:column;gap:4px;min-width:0;}
.field label{font-size:12px;font-weight:600;color:var(--ink-soft);}
.field input[type=text], .field input[type=email], .field input[type=password], .field input[type=date], .field input[type=time], .field input[type=number], .field input[type=search], .field select{
  width:100%;min-width:0;box-sizing:border-box;font-family:var(--font-body);font-size:13.5px;padding:7px 9px;border-radius:7px;border:1px solid var(--line);
  background:var(--paper);color:var(--ink);
}
.field input[type=color]{width:100%;height:32px;padding:2px;border-radius:7px;border:1px solid var(--line);background:var(--paper);}
.field.row-check{flex-direction:row;align-items:center;gap:8px;}
.field.row-check label{font-weight:500;color:var(--ink);}

/* compact inline label+field pairs, laid out as a grid so each line fills the width evenly */
.field-row{
  display:grid;
  grid-template-columns:max-content minmax(0,1fr) minmax(0,1fr);
  align-items:center;gap:8px 14px;margin-bottom:16px;
}
.field-row.two-pairs{grid-template-columns:max-content minmax(0,1fr) max-content minmax(0,1fr);}
.field-row label{font-size:12px;font-weight:600;color:var(--ink-soft);white-space:nowrap;}
.field-row input[type=text], .field-row input[type=email]{
  width:100%;min-width:0;box-sizing:border-box;font-family:var(--font-body);font-size:13.5px;padding:8px 10px;border-radius:7px;border:1px solid var(--line);
  background:var(--paper);color:var(--ink);
}
@media (max-width:560px){
  .field-row, .field-row.two-pairs{grid-template-columns:1fr;}
}
fieldset{border:1px solid var(--line);border-radius:8px;padding:12px;margin:0 0 18px;}
legend{font-family:var(--font-display);font-size:14px;font-weight:600;padding:0 6px;color:var(--accent);}
textarea{
  width:100%;min-height:260px;font-family:var(--font-mono);font-size:12px;line-height:1.5;
  border:1px solid var(--line);border-radius:8px;padding:10px;background:var(--paper);color:var(--ink);resize:vertical;
}
.drawer-actions{display:flex;gap:10px;justify-content:flex-end;align-items:center;position:sticky;bottom:-22px;background:var(--paper-raised);padding:14px 0 4px;margin-top:6px;}

/* editor: vacation blocks and school-year cards */
.vac-block{border:1px solid var(--line);border-radius:8px;padding:12px;margin-bottom:12px;background:var(--paper);}
.vac-block:last-child{margin-bottom:0;}
.vac-block .field-grid, .vac-block .field{margin-bottom:12px;}
.vac-block > .field:last-child, .vac-block > div:last-child .field{margin-bottom:0;}
.mini-table{width:100%;border-collapse:collapse;font-size:12.5px;margin-top:8px;}
.mini-table th, .mini-table td{padding:6px 8px;text-align:left;border-bottom:1px solid var(--line);}
.mini-table thead th{font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-soft);}
.mini-table input{width:100%;}
.year-card{border:1px solid var(--line);border-radius:8px;padding:12px;margin-bottom:12px;background:var(--paper);}
.year-card-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;}
.year-card-head strong{font-family:var(--font-display);font-weight:600;display:flex;align-items:center;gap:6px;}
.nonschool-list{display:flex;flex-direction:column;gap:6px;margin:6px 0;}
.nonschool-row{display:flex;align-items:center;gap:6px;}
.nonschool-row input{flex:1;max-width:180px;}
.err-msg{color:var(--danger);font-size:12.5px;min-height:16px;margin-top:4px;}
.ok-msg{color:var(--ok);font-size:12.5px;}
.close-x{position:absolute;top:14px;right:14px;}
input[type=file]{font-size:12.5px;}
footer.note{margin-top:26px;color:var(--ink-soft);font-size:12px;max-width:70ch;}

/* role-based visibility (defense in depth alongside server-side checks) */
body.role-parent .admin-only{display:none !important;}

/* auth pages (login, invite, change password) */
body.auth-body{
  min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px 16px;
}
.auth-card{
  width:100%;max-width:380px;background:var(--paper-raised);border:1px solid var(--line);
  border-radius:var(--radius);box-shadow:var(--shadow);padding:28px;
}
.auth-card h1{font-size:22px;color:var(--accent);margin-bottom:4px;}
.auth-card p.sub{color:var(--ink-soft);font-size:13px;margin:0 0 18px;}
.auth-card form{display:flex;flex-direction:column;gap:12px;}
.auth-card .field{gap:5px;}

/* admin: convenios list */
.conv-list{display:flex;flex-direction:column;gap:10px;}
.conv-card{
  display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;
  background:var(--paper-raised);border:1px solid var(--line);border-radius:var(--radius);
  padding:14px 16px;box-shadow:var(--shadow);
}
.conv-card .conv-title{font-family:var(--font-display);font-size:17px;}
.conv-card .conv-parents{font-size:12.5px;color:var(--ink-soft);margin-top:6px;display:flex;flex-direction:column;gap:4px;}
.parent-edit-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.mini-input{
  font-family:var(--font-body);font-size:12.5px;padding:4px 7px;border-radius:6px;border:1px solid var(--line);
  background:var(--paper);color:var(--ink);
}
.mini-input.mini-name{width:130px;}
.mini-input.mini-email{width:200px;}
.mini-btn{padding:4px 9px;font-size:11.5px;}

/* admin: convenios table */
.table-scroll{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--paper-raised);box-shadow:var(--shadow);}
.admin-table{width:100%;border-collapse:collapse;font-size:13px;min-width:640px;}
.admin-table th, .admin-table td{padding:10px 12px;text-align:left;vertical-align:top;border-bottom:1px solid var(--line);}
.admin-table thead th{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-soft);font-weight:700;background:var(--paper);}
.admin-table tbody tr.conv-row:hover{background:var(--paper);}
.admin-table .row-email{color:var(--ink-soft);font-size:11.5px;margin-top:2px;}
.admin-table .row-actions{white-space:nowrap;display:flex;gap:8px;align-items:center;}
.admin-table tr.conv-row[hidden]{display:none;}

/* admin: edit-parents dialog */
dialog.edit-dialog{
  border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);
  padding:22px;width:min(560px,90vw);background:var(--paper-raised);color:var(--ink);
}
dialog.edit-dialog::backdrop{background:rgba(20,24,20,.4);}
dialog.edit-dialog h3{font-family:var(--font-display);font-size:19px;color:var(--accent);margin-bottom:2px;}
dialog.edit-dialog .conv-parents{margin-top:14px;display:flex;flex-direction:column;gap:12px;}
.pill{display:inline-block;font-size:11px;font-weight:600;padding:2px 8px;border-radius:99px;margin-left:6px;}
.pill.pending{background:#f6ead1;color:#8a5a12;}
.pill.active{background:#e4ebe6;color:var(--accent);}
.pill.status-pending{background:#f6ead1;color:#8a5a12;}
.pill.status-accepted{background:#e4ebe6;color:var(--accent);}
.pill.status-rejected{background:#f6dedb;color:var(--danger);}
.pill.status-cancelled{background:var(--line);color:var(--ink-soft);}
@media (prefers-color-scheme: dark){
  .pill.pending{background:#3d3222;color:#e0ae5c;}
  .pill.active{background:#243129;color:var(--accent);}
  .pill.status-pending{background:#3d3222;color:#e0ae5c;}
  .pill.status-accepted{background:#243129;color:var(--accent);}
  .pill.status-rejected{background:#3a2622;color:var(--danger);}
}

/* custody-swap requests panel */
.swap-form{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;margin-bottom:18px;}
.swap-form .field{min-width:150px;}
.swap-form .swap-reason{flex:1;min-width:220px;}
.swap-list{display:flex;flex-direction:column;gap:10px;}
.swap-item{border:1px solid var(--line);border-left:3px solid var(--line);border-radius:8px;padding:10px 14px;background:var(--paper);}
.swap-item.swap-status-pending{border-left-color:#c99a2e;}
.swap-item.swap-status-accepted{border-left-color:var(--swap-day);}
.swap-item.swap-status-rejected{border-left-color:var(--danger);}
.swap-item.swap-status-cancelled{border-left-color:var(--line);}
.swap-item-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;}
.swap-meta{font-size:12.5px;color:var(--ink-soft);margin-top:4px;}
.swap-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:10px;}
.swap-respond-form{display:flex;gap:6px;align-items:center;}
.swap-respond-form input[type=text]{font-family:var(--font-body);font-size:12.5px;padding:5px 8px;border-radius:6px;border:1px solid var(--line);background:var(--paper-raised);color:var(--ink);width:170px;}

/* generic JS-toggled visibility — always wins over any component display rule */
.is-hidden{display:none !important;}

.dd-section-label{
  font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-soft);font-weight:700;
  margin:14px 0 8px;
}
.dd-section-label:first-of-type{margin-top:0;}

/* day notes */
.day-notes{margin-top:14px;padding-top:14px;border-top:1px solid var(--line);}
.note-list{display:flex;flex-direction:column;gap:8px;margin-bottom:10px;}
.note-card{font-size:12.5px;background:var(--paper);border-radius:8px;padding:9px 11px;}
.note-top{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--ink-soft);margin-bottom:3px;}
.note-body{line-height:1.45;}
.note-body b{font-weight:700;}
.note-actions-inline{display:flex;gap:12px;margin-top:6px;flex-wrap:wrap;}
.note-actions-inline button{
  background:none;border:none;padding:0;font:inherit;font-size:11.5px;color:var(--ink-soft);
  text-decoration:underline;text-underline-offset:2px;cursor:pointer;
}
.note-actions-inline button:hover{color:var(--ink);}
.note-actions-inline button.danger:hover{color:var(--danger);}
.note-edit-text{
  width:100%;min-height:48px;font-family:var(--font-body);font-size:12.5px;padding:6px 8px;
  border-radius:6px;border:1px solid var(--line);background:var(--paper-raised);color:var(--ink);resize:vertical;
}
.note-form{display:flex;flex-direction:column;gap:2px;}
.note-form textarea{
  width:100%;min-height:56px;font-family:var(--font-body);font-size:12.5px;padding:7px 9px;
  border-radius:7px;border:1px solid var(--line);background:var(--paper);color:var(--ink);resize:vertical;margin-bottom:4px;
}
.btn-row{display:flex;justify-content:flex-end;margin-top:4px;}

.switch-row{display:flex;align-items:center;gap:9px;margin:6px 0 10px;cursor:pointer;user-select:none;width:fit-content;}
.switch-input{position:absolute;opacity:0;width:1px;height:1px;}
.switch{width:32px;height:18px;border-radius:99px;background:var(--line);position:relative;flex:none;transition:background .15s;}
.switch::after{content:'';position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:transform .15s;}
.switch-input:checked + .switch{background:var(--accent);}
.switch-input:checked + .switch::after{transform:translateX(14px);}
.switch-input:focus-visible + .switch{outline:2px solid var(--accent);outline-offset:2px;}
.switch-label{font-size:13px;font-weight:600;}

.repeat-box{display:none;flex-direction:column;gap:10px;border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin-bottom:10px;}
.repeat-box.show{display:flex;}
.repeat-row{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink-soft);flex-wrap:wrap;}
.repeat-row input[type=number], .repeat-row select{
  font-family:var(--font-body);font-size:12.5px;padding:5px 7px;border-radius:6px;border:1px solid var(--line);
  background:var(--paper-raised);color:var(--ink);
}
.repeat-row input[type=number]{width:50px;}
.seg{display:flex;border:1px solid var(--line);border-radius:7px;overflow:hidden;width:fit-content;}
.seg button{
  border:none;background:var(--paper-raised);color:var(--ink-soft);font:inherit;font-size:11.5px;font-weight:600;
  padding:6px 10px;cursor:pointer;
}
.seg button.active{background:var(--accent);color:var(--paper);}
.repeat-field input{
  width:100%;font-family:var(--font-body);font-size:12.5px;padding:6px 8px;border-radius:6px;
  border:1px solid var(--line);background:var(--paper-raised);color:var(--ink);
}
#swSwap{background:var(--swap-day);}
#swOverride{width:10px;height:10px;margin:2px;border-radius:50%;background:var(--today);box-shadow:0 0 0 1.5px #fff;}

/* admin day override */
.admin-box{
  margin-top:16px;border-radius:10px;padding:12px;
  background:var(--override-tint-bg);border:1px solid var(--override-tint-border);
}
.admin-eyebrow{
  font-size:12px;text-transform:uppercase;letter-spacing:.06em;font-weight:700;color:var(--override-day);
  margin:0 0 10px;display:flex;align-items:center;gap:6px;
}
.admin-row{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;margin-bottom:8px;}
.admin-row select, .admin-row input[type=text]{
  width:100%;min-width:0;box-sizing:border-box;font-family:var(--font-body);font-size:12.5px;padding:7px 9px;
  border-radius:7px;border:1px solid var(--line);background:var(--paper-raised);color:var(--ink);
}
