:root {
  --bg: #f4f6fb;
  --card: #fff;
  --text: #172033;
  --muted: #667085;
  --primary: #245bb3;
  --primary-dark: #153b78;
  --navy: #102c56;
  --ok: #198754;
  --warn: #a36500;
  --danger: #b42318;
  --line: #dfe4ec;
  --soft: #edf3ff;
}
* { box-sizing: border-box; }
html { min-height: 100%; }
body { margin: 0; min-height: 100%; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; background: var(--bg); color: var(--text); }
a { color: var(--primary); text-decoration: none; }
a:hover { text-decoration: underline; }
h1,h2,h3 { color: #14213a; }
h1 { margin: 0 0 8px; font-size: clamp(1.75rem, 3vw, 2.35rem); }
h2 { margin: 0 0 16px; font-size: 1.35rem; }
h3 { margin: 0 0 12px; }
p { line-height: 1.5; }
.public-header { position: sticky; top: 0; z-index: 20; display: flex; align-items: center; justify-content: space-between; gap: 20px; min-height: 64px; padding: 10px 22px; background: rgba(255,255,255,.96); border-bottom: 1px solid var(--line); backdrop-filter: blur(8px); }
.brand-link, .sidebar-brand { display: flex; align-items: center; gap: 10px; font-weight: 800; color: var(--primary-dark); }
.brand-link img { width: 42px; height: 42px; object-fit: contain; border-radius: 8px; }
.public-header nav { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; font-size: .9rem; }
.menu-toggle { display: none; padding: 8px 11px; }
.public-main { max-width: 1120px; margin: 0 auto; padding: 28px 18px 60px; }
.hero { display: grid; grid-template-columns: 1.3fr .7fr; gap: 28px; align-items: center; padding: 38px; background: linear-gradient(135deg,#fff 20%,#e8f0ff); border: 1px solid var(--line); border-radius: 24px; box-shadow: 0 18px 40px rgba(27,55,100,.08); }
.hero-logo { max-width: 230px; max-height: 210px; width: 100%; margin: auto; object-fit: contain; }
.hero p { color: var(--muted); font-size: 1.05rem; }
.card { background: var(--card); border: 1px solid var(--line); border-radius: 17px; padding: 20px; box-shadow: 0 9px 26px rgba(20,35,70,.055); margin-bottom: 18px; }
.card-link { display: block; color: inherit; transition: transform .15s, box-shadow .15s; }
.card-link:hover { text-decoration: none; transform: translateY(-2px); box-shadow: 0 13px 30px rgba(20,35,70,.10); }
.grid { display: grid; gap: 16px; }
.grid-2 { grid-template-columns: repeat(2,minmax(0,1fr)); }
.grid-3 { grid-template-columns: repeat(3,minmax(0,1fr)); }
.grid-4 { grid-template-columns: repeat(4,minmax(0,1fr)); }
.actions { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.btn, button { appearance: none; display: inline-flex; align-items: center; justify-content: center; border: 0; border-radius: 10px; padding: 10px 15px; background: var(--primary); color: white; font: inherit; font-size: .9rem; font-weight: 750; cursor: pointer; }
.btn:hover, button:hover { background: var(--primary-dark); text-decoration: none; }
.btn-secondary { background: var(--soft); color: var(--primary-dark); }
.btn-secondary:hover { background: #dbe8ff; }
.btn-danger { background: var(--danger); }
.btn-ghost { background: transparent; color: var(--primary-dark); border: 1px solid var(--line); }
.btn-small { padding: 7px 10px; font-size: .78rem; }
label { display: block; margin-bottom: 6px; font-weight: 700; font-size: .86rem; }
input, select, textarea { width: 100%; min-height: 42px; padding: 10px 12px; border: 1px solid #cdd5df; border-radius: 10px; background: #fff; color: var(--text); font: inherit; }
input:focus, select:focus, textarea:focus { outline: 3px solid rgba(36,91,179,.13); border-color: var(--primary); }
textarea { min-height: 100px; resize: vertical; }
.form-row { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 14px; margin-bottom: 14px; }
.form-row-3 { grid-template-columns: repeat(3,minmax(0,1fr)); }
.form-row-4 { grid-template-columns: repeat(4,minmax(0,1fr)); }
.password-wrap { display: grid; grid-template-columns: 1fr auto; gap: 8px; }
.password-wrap .btn { min-width: 86px; }
.help { color: var(--muted); font-size: .82rem; }
.small { font-size: .82rem; }
.muted { color: var(--muted); }
.required { color: var(--danger); }
.alert { padding: 13px 15px; margin-bottom: 18px; border-radius: 12px; border: 1px solid transparent; }
.alert-success { background: #e9f8ef; color: #126438; border-color: #bce5cc; }
.alert-error { background: #fff0ef; color: #8f1e17; border-color: #ffc9c4; }
.alert-warning { background: #fff8e6; color: #7c5100; border-color: #f0d48d; }
.badge { display: inline-block; padding: 4px 9px; border-radius: 999px; font-size: .73rem; font-weight: 750; background: #eef1f5; color: #4c596d; white-space: nowrap; }
.badge-ok { background: #e5f7ec; color: var(--ok); }
.badge-warn { background: #fff2d6; color: var(--warn); }
.badge-danger { background: #fee8e6; color: var(--danger); }
.badge-muted { background: #edf0f4; color: #5e6878; }
.table-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: 12px; }
table { width: 100%; border-collapse: collapse; background: #fff; }
th,td { padding: 11px 10px; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; }
th { background: #f8fafc; color: #475467; font-size: .78rem; }
tr:last-child td { border-bottom: 0; }
.app-shell { display: grid; grid-template-columns: 245px 1fr; min-height: 100vh; }
.sidebar { background: linear-gradient(180deg,#112f5c,#0d2446); color: #fff; padding: 18px 14px; }
.sidebar-brand { color: #fff; margin: 0 4px 20px; }
.sidebar-brand img { width: 34px; height: 34px; border-radius: 7px; object-fit: contain; background: #fff; }
.sidebar nav { display: grid; gap: 5px; }
.sidebar nav a { color: #e7efff; padding: 10px 12px; border-radius: 9px; }
.sidebar nav a:hover { background: rgba(255,255,255,.1); text-decoration: none; }
.content { width: 100%; max-width: 1360px; padding: 26px; }
.topbar { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 20px; }
.kpi { font-size: 2rem; line-height: 1; font-weight: 850; color: var(--primary-dark); }
.kpi-label { margin-top: 8px; color: var(--muted); font-size: .86rem; }
.kpi-note { margin-top: 8px; color: #7d8796; font-size: .75rem; }
.filter-panel { background: #fff; border: 1px solid var(--line); border-radius: 16px; padding: 18px; margin-bottom: 18px; }
.empty-state { padding: 32px 18px; text-align: center; color: var(--muted); border: 1px dashed #cbd4e0; border-radius: 14px; background: #fbfcfe; }
.student-card { display: grid; gap: 8px; }
.student-meta { display: flex; flex-wrap: wrap; gap: 8px 16px; color: var(--muted); font-size: .84rem; }
.progress { height: 9px; border-radius: 99px; background: #e7ecf3; overflow: hidden; }
.progress > span { display: block; height: 100%; background: var(--primary); }
.attendance-row { display: grid; grid-template-columns: 34px minmax(180px,1fr) 190px; gap: 12px; align-items: center; padding: 10px 0; border-bottom: 1px solid var(--line); }
.attendance-row input[type=checkbox] { min-height: auto; width: 18px; height: 18px; }
.calendar-month { display: grid; grid-template-columns: repeat(7,minmax(0,1fr)); border-left: 1px solid var(--line); border-top: 1px solid var(--line); }
.calendar-month > div { min-height: 115px; padding: 8px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); background: #fff; }
.calendar-month .weekday { min-height: auto; font-weight: 750; background: #f5f7fb; text-align: center; }
.calendar-day-number { font-weight: 800; }
.calendar-event { margin-top: 7px; padding: 6px; border-radius: 8px; background: var(--soft); font-size: .75rem; }
.calendar-event.suspension { background: #fee8e6; color: var(--danger); }
.calendar-event.tema_especial { background: #fff2d6; color: #7c5100; }
.month-title { text-transform: capitalize; }
.pill-list { display: flex; gap: 7px; flex-wrap: wrap; }
.info-list { display: grid; grid-template-columns: 180px 1fr; gap: 8px 14px; }
.info-list dt { font-weight: 700; }
.info-list dd { margin: 0; }
.tabs { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 16px; }
.tabs a { padding: 8px 12px; border: 1px solid var(--line); border-radius: 999px; background: #fff; }
.tabs a.active { background: var(--primary); color: #fff; border-color: var(--primary); }
.check-grid { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 8px; }
.check-grid label { display: flex; gap: 8px; align-items: center; padding: 10px; border: 1px solid var(--line); border-radius: 10px; background: #fff; }
.check-grid input { width: 18px; min-height: auto; }
.footer-note { color: var(--muted); font-size: .8rem; margin-top: 24px; }
.print-only { display: none; }
@media (max-width: 1050px) {
  .grid-4 { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .form-row-4 { grid-template-columns: repeat(2,minmax(0,1fr)); }
}
@media (max-width: 820px) {
  .app-shell { grid-template-columns: 1fr; }
  .sidebar { position: static; }
  .sidebar nav { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .content { padding: 18px 14px; }
  .hero { grid-template-columns: 1fr; padding: 24px; }
  .grid-2,.grid-3,.grid-4,.form-row,.form-row-3,.form-row-4 { grid-template-columns: 1fr; }
  .public-header { align-items: center; }
  .menu-toggle { display: inline-flex; }
  .public-header nav { display: none; position: absolute; left: 12px; right: 12px; top: 60px; padding: 14px; border: 1px solid var(--line); border-radius: 12px; background: #fff; box-shadow: 0 14px 30px rgba(20,30,60,.14); }
  .public-header nav.is-open { display: grid; }
  .topbar { flex-direction: column; }
  .attendance-row { grid-template-columns: 30px 1fr; }
  .attendance-row select { grid-column: 2; }
  .check-grid { grid-template-columns: 1fr; }
  .info-list { grid-template-columns: 1fr; }
  .info-list dd { margin-bottom: 8px; }
  .calendar-month { grid-template-columns: 1fr; }
  .calendar-month .weekday { display: none; }
  .calendar-month > div { min-height: auto; }
}
@media print {
  body { background: #fff; }
  .no-print,.public-header,.sidebar,.actions,.btn,button { display: none !important; }
  .print-only { display: block; }
  .public-main,.content { max-width: none; padding: 0; }
  .card { box-shadow: none; border: 0; }
}
/* v0.3 navigation, long-form records and email UI */
.app-shell { display:block; min-height:100vh; }
.sidebar { position:fixed; inset:0 auto 0 0; width:245px; z-index:40; overflow-y:auto; transition:width .2s ease; }
.content { margin-left:245px; max-width:none; transition:margin-left .2s ease; }
.sidebar-head { display:flex; align-items:center; gap:8px; margin-bottom:14px; }
.sidebar-head .sidebar-brand { flex:1; margin:0; min-width:0; }
.sidebar-toggle { background:rgba(255,255,255,.12); padding:7px 9px; flex:0 0 auto; }
.nav-icon { display:inline-flex; width:24px; justify-content:center; font-weight:800; }
.sidebar nav a { display:flex; align-items:center; gap:8px; white-space:nowrap; }
.app-shell.sidebar-collapsed .sidebar { width:72px; }
.app-shell.sidebar-collapsed .content { margin-left:72px; }
.app-shell.sidebar-collapsed .sidebar-label { display:none; }
.app-shell.sidebar-collapsed .sidebar-brand img { margin:auto; }
.app-shell.sidebar-collapsed .sidebar nav a { justify-content:center; }
.auth-card { max-width:560px; margin:28px auto; }
.inline-check { display:flex; gap:9px; align-items:flex-start; }
.inline-check input,.table-check { width:18px; height:18px; min-height:auto; flex:0 0 auto; }
.card-soft { background:#f8faff; border:1px solid var(--line); border-radius:13px; padding:15px; margin-bottom:16px; }
.template-editor { border:1px solid var(--line); border-radius:12px; padding:12px 14px; margin-bottom:10px; }
.template-editor summary { cursor:pointer; }
.template-editor form { margin-top:15px; }
.mini-form { margin-top:12px; padding:12px; background:#f8fafc; border-radius:10px; min-width:320px; }
.inline-form { display:inline-block; margin:8px 6px 0 0; }
.email-preview iframe { width:100%; min-height:620px; border:1px solid var(--line); border-radius:12px; background:white; }
.credential-box { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px; margin:18px 0; }
.credential-box > div { padding:16px; background:var(--soft); border-radius:12px; }
.credential-box span { display:block; color:var(--muted); font-size:.8rem; }
.credential-box strong { display:block; font-size:1.45rem; margin-top:5px; letter-spacing:.04em; }
.requirement-public { display:grid; grid-template-columns:28px 1fr; gap:8px; padding:10px 0; border-bottom:1px solid var(--line); }
.requirement-public:last-child { border-bottom:0; }
.student-sticky-header { position:sticky; top:0; z-index:18; display:flex; justify-content:space-between; align-items:flex-start; gap:15px; padding:14px 0 12px; background:rgba(244,246,251,.96); backdrop-filter:blur(8px); }
.student-sticky-header h1 { margin:0; }
.sticky-tabs { position:sticky; top:92px; z-index:17; padding:8px 0; background:rgba(244,246,251,.96); backdrop-filter:blur(8px); }
.bulk-bar { display:flex; align-items:end; gap:10px; flex-wrap:wrap; margin-top:14px; padding:14px; background:#f8fafc; border-radius:12px; }
.bulk-bar select { width:230px; }
.godparent-doc-row { display:grid; grid-template-columns:minmax(260px,1fr) 220px auto; gap:12px; align-items:center; padding:10px 0; border-bottom:1px solid var(--line); }
.godparent-doc-row[hidden],section[hidden] { display:none !important; }
@media (max-width:820px){
 .sidebar { transform:translateX(-100%); width:min(86vw,300px); transition:transform .2s ease; }
 .content,.app-shell.sidebar-collapsed .content { margin-left:0; }
 .app-shell.sidebar-mobile-open .sidebar { transform:translateX(0); }
 .app-shell.sidebar-collapsed .sidebar { width:min(86vw,300px); }
 .app-shell.sidebar-collapsed .sidebar-label { display:inline; }
 .app-shell.sidebar-collapsed .sidebar nav a { justify-content:flex-start; }
 .sidebar-toggle { position:fixed; left:12px; bottom:12px; z-index:60; box-shadow:0 8px 20px rgba(0,0,0,.25); }
 .student-sticky-header { top:0; flex-direction:column; }
 .sticky-tabs { top:132px; overflow-x:auto; flex-wrap:nowrap; }
 .credential-box { grid-template-columns:1fr; }
 .godparent-doc-row { grid-template-columns:1fr; }
 .mini-form { min-width:0; }
}
.mobile-sidebar-button { display:none; position:fixed; left:12px; bottom:12px; z-index:70; border-radius:50%; width:48px; height:48px; padding:0; box-shadow:0 8px 24px rgba(0,0,0,.25); }
@media (max-width:820px){ .mobile-sidebar-button{display:inline-flex}.sidebar .sidebar-toggle{display:none} }

/* ==========================================================
   v1.0.0-rc.3 — responsive shell, themes, compact calendar and manual assignment
   ========================================================== */
:root {
  --secondary: #c7a45d;
  --primary-rgb: 36,91,179;
  --sidebar-width: 245px;
  --sidebar-collapsed-width: 72px;
  --content-max: 1600px;
}
html, body { max-width: 100%; overflow-x: clip; }
img, svg, video, iframe { max-width: 100%; }
.app-shell { display: block; width: 100%; min-width: 0; }
.sidebar { width: var(--sidebar-width); }
.content {
  width: auto;
  min-width: 0;
  max-width: var(--content-max);
  margin-left: var(--sidebar-width);
  padding: clamp(16px, 2.1vw, 30px);
  overflow-wrap: anywhere;
}
.app-shell.sidebar-collapsed .sidebar { width: var(--sidebar-collapsed-width); }
.app-shell.sidebar-collapsed .content { margin-left: var(--sidebar-collapsed-width); }
.content > *, .grid > *, .form-row > *, .topbar > *, .card > * { min-width: 0; }
.topbar { flex-wrap: wrap; }
.topbar > .actions { justify-content: flex-end; }
.actions > * { max-width: 100%; }
input, select, textarea, button, .btn { max-width: 100%; }
.table-wrap { width: 100%; max-width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }
table { min-width: 640px; }
.table-compact { min-width: 520px; }
.no-min-width { min-width: 0 !important; }

/* Theme accents */
.btn-accent { background: var(--secondary); color: #172033; }
.theme-preview { display: grid; grid-template-columns: repeat(auto-fit,minmax(150px,1fr)); gap: 12px; }
.theme-option { position: relative; display: block; border: 2px solid var(--line); border-radius: 14px; padding: 12px; cursor: pointer; background: #fff; }
.theme-option:has(input:checked) { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(var(--primary-rgb),.12); }
.theme-option input { position: absolute; opacity: 0; pointer-events: none; }
.theme-swatches { display: flex; gap: 6px; margin-bottom: 8px; }
.theme-swatches span { width: 34px; height: 22px; border-radius: 6px; border: 1px solid rgba(0,0,0,.08); }
.color-field { display: grid; grid-template-columns: 62px 1fr; gap: 10px; align-items: center; }
.color-field input[type=color] { padding: 3px; min-height: 44px; }
.beta-banner { background: #fff2d6; color: #704500; border-bottom: 1px solid #eac978; padding: 8px 18px; text-align: center; font-size: .84rem; font-weight: 700; }

/* Contextual help */
.field-help { display: block; margin-top: 6px; color: var(--muted); font-size: .78rem; line-height: 1.4; }
.help-icon { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; border-radius: 50%; background: var(--soft); color: var(--primary-dark); font-size: 11px; font-weight: 800; cursor: help; }
.form-section { padding-top: 8px; }
.form-section + .form-section { border-top: 1px solid var(--line); margin-top: 22px; padding-top: 22px; }

/* Compact calendar */
.compact-calendar { display: grid; gap: 12px; }
.compact-month { display: grid; grid-template-columns: minmax(125px, .75fr) repeat(var(--session-columns, 5), minmax(125px, 1fr)); border: 1px solid #1f2937; background: #fff; overflow: hidden; }
.compact-month-name { display: flex; align-items: center; justify-content: center; padding: 14px 10px; font-size: 1.12rem; font-weight: 850; text-transform: uppercase; border-right: 1px solid #1f2937; background: #fbfcff; text-align: center; }
.compact-session { position: relative; min-height: 108px; padding: 10px; border-right: 1px solid #1f2937; }
.compact-session:last-child { border-right: 0; }
.compact-session.empty { background: #fafafa; }
.compact-session-date { display: flex; align-items: baseline; gap: 6px; margin-bottom: 8px; }
.compact-session-date strong { font-size: 1.25rem; }
.compact-session-date span { color: var(--muted); font-size: .78rem; font-weight: 700; }
.compact-session-title { font-weight: 800; line-height: 1.25; }
.compact-session-topic { margin-top: 4px; font-style: italic; line-height: 1.25; }
.compact-session-note { margin-top: 5px; color: var(--muted); font-size: .75rem; line-height: 1.25; }
.compact-session.suspension { background: #fff0ef; }
.compact-session.tema_especial { background: #fff8e6; }
.compact-session.retiro, .compact-session.celebracion { background: #eef8f2; }
.compact-month--multi { grid-template-columns: minmax(125px,.75fr) repeat(var(--session-columns, 6), minmax(115px,1fr)); }
.compact-month-continuation .compact-month-name { color: transparent; }
.calendar-view-switch { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 14px; }
.calendar-legend { display: flex; flex-wrap: wrap; gap: 10px; font-size: .78rem; color: var(--muted); }
.calendar-legend span::before { content: ''; display: inline-block; width: 12px; height: 12px; margin-right: 5px; border-radius: 3px; vertical-align: -1px; background: var(--soft); border: 1px solid var(--line); }
.calendar-legend .legend-suspension::before { background: #fff0ef; }
.calendar-legend .legend-special::before { background: #fff8e6; }
.calendar-legend .legend-celebration::before { background: #eef8f2; }

/* Diagnostics */
.diagnostic-grid { display: grid; grid-template-columns: repeat(auto-fit,minmax(230px,1fr)); gap: 12px; }
.diagnostic-item { padding: 15px; border: 1px solid var(--line); border-radius: 12px; background: #fff; }
.diagnostic-item strong { display: block; margin-bottom: 6px; }
.diagnostic-ok { border-left: 5px solid var(--ok); }
.diagnostic-warn { border-left: 5px solid #d89b00; }
.diagnostic-error { border-left: 5px solid var(--danger); }
.smtp-steps { display: grid; gap: 8px; }
.smtp-step { padding: 10px 12px; border-radius: 9px; background: #f8fafc; border: 1px solid var(--line); }
.smtp-step.ok { background: #e9f8ef; border-color: #bce5cc; }
.smtp-step.error { background: #fff0ef; border-color: #ffc9c4; }

/* Pagination */
.pagination { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; margin-top: 16px; }
.pagination a, .pagination span { padding: 7px 10px; border: 1px solid var(--line); border-radius: 8px; background: #fff; }
.pagination .current { background: var(--primary); color: #fff; border-color: var(--primary); }

/* Responsive cards for report tables */
@media (max-width: 820px) {
  html, body { overflow-x: hidden; }
  .content, .app-shell.sidebar-collapsed .content { width: 100%; max-width: 100%; margin-left: 0; padding: 16px 12px 76px; }
  .sidebar { position: fixed; width: min(88vw, 310px); max-width: 310px; }
  .topbar { gap: 10px; }
  .topbar > .actions { width: 100%; justify-content: flex-start; }
  .actions .btn, .actions button { flex: 0 1 auto; }
  .card { padding: 16px; border-radius: 14px; }
  .public-main { padding: 18px 12px 48px; }
  .public-header { padding: 9px 12px; }
  .public-header .brand-link span { max-width: 210px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .mini-form { min-width: 0; }
  .password-wrap { grid-template-columns: minmax(0,1fr) auto; }
  .godparent-doc-row { grid-template-columns: 1fr; }
  .bulk-bar select { width: 100%; }
  .credential-box { grid-template-columns: 1fr; }
  .email-preview iframe { min-height: 440px; }
  .compact-calendar { overflow-x: auto; padding-bottom: 5px; }
  .compact-month { min-width: 760px; }
  .compact-month--multi { min-width: 900px; }
  .tabs { overflow-x: auto; flex-wrap: nowrap; padding-bottom: 4px; }
  .tabs a { white-space: nowrap; }
  .mobile-stack-table { min-width: 0; border: 0; }
  .mobile-stack-table thead { display: none; }
  .mobile-stack-table, .mobile-stack-table tbody, .mobile-stack-table tr, .mobile-stack-table td { display: block; width: 100%; }
  .mobile-stack-table tr { margin: 0 0 12px; border: 1px solid var(--line); border-radius: 12px; overflow: hidden; background: #fff; }
  .mobile-stack-table td { display: grid; grid-template-columns: minmax(90px, 38%) 1fr; gap: 10px; border-bottom: 1px solid var(--line); padding: 10px 12px; }
  .mobile-stack-table td:last-child { border-bottom: 0; }
  .mobile-stack-table td::before { content: attr(data-label); font-weight: 750; color: #475467; font-size: .78rem; }
}

@media (max-width: 430px) {
  h1 { font-size: 1.65rem; }
  .btn, button { padding: 9px 12px; }
  .actions { gap: 7px; }
  .theme-preview { grid-template-columns: 1fr 1fr; }
  .public-header .brand-link span { max-width: 175px; }
}

@media print {
  @page { size: A4 landscape; margin: 8mm; }
  html, body { overflow: visible !important; }
  .compact-calendar { gap: 5px; }
  .compact-month { break-inside: avoid; grid-template-columns: 30mm repeat(var(--session-columns,5), 1fr); }
  .compact-month-name { font-size: 12pt; padding: 5px; }
  .compact-session { min-height: 24mm; padding: 4px; font-size: 8pt; }
  .compact-session-date strong { font-size: 12pt; }
  .compact-session-date span, .compact-session-note { font-size: 7pt; }
  .beta-banner,.global-notice { display: none !important; }
}
.debug-meter{position:fixed;right:10px;bottom:10px;z-index:100;background:#111827;color:#fff;padding:7px 10px;border-radius:8px;font:12px/1.2 ui-monospace,SFMono-Regular,Consolas,monospace;box-shadow:0 5px 18px rgba(0,0,0,.22)}
.hp-field{position:absolute!important;left:-9999px!important;width:1px!important;height:1px!important;overflow:hidden!important;opacity:0!important}
@media (max-width:820px){
  .mobile-stack-table td.table-full-cell{display:block!important;text-align:center;color:var(--muted)}
  .mobile-stack-table td.table-full-cell::before{display:none}
}
.password-strength{margin-top:6px;font-size:.76rem;color:var(--muted)}
.password-strength[data-score="0"],.password-strength[data-score="1"]{color:#a8322d}
.password-strength[data-score="2"]{color:#9a6400}
.password-strength[data-score="3"]{color:#4f6f20}
.password-strength[data-score="4"],.password-strength[data-score="5"]{color:#197044}


/* v1.0.0-rc.3 — aviso global configurable y asignación manual */
.global-notice{position:relative;z-index:1200;padding:10px 18px;text-align:center;font-weight:700;border-bottom:1px solid rgba(0,0,0,.08)}
.global-notice-info{background:#e8f1ff;color:#174a8b}.global-notice-warning{background:#fff3cd;color:#745100}.global-notice-danger{background:#fde8e8;color:#9b1c1c}
.assignment-tabs{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 18px}.assignment-tabs a{padding:9px 14px;border:1px solid var(--border);border-radius:999px;text-decoration:none;background:#fff;color:var(--primary);font-weight:700}.assignment-tabs a.active{background:var(--primary);color:#fff;border-color:var(--primary)}
.compatibility-list{display:flex;gap:6px;flex-wrap:wrap}.compatibility-note{font-size:.86rem;color:var(--muted);margin-top:5px}.assignment-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.assignment-summary{padding:12px;border-radius:10px;background:rgba(var(--primary-rgb),.06);margin:12px 0}.assignment-summary ul{margin:8px 0 0;padding-left:20px}
.production-checklist{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:12px}.production-check{border:1px solid var(--border);border-radius:12px;padding:14px;background:#fff}.production-check.ok{border-left:5px solid #198754}.production-check.warn{border-left:5px solid #d39e00}.production-check.error{border-left:5px solid #c0392b}
@media(max-width:700px){.assignment-tabs{display:grid;grid-template-columns:1fr 1fr}.assignment-tabs a{text-align:center}.assignment-actions{align-items:stretch}.assignment-actions .btn,.assignment-actions button{width:100%}}

/* v1.0.0-rc.3 — minifooter público institucional y créditos del sistema */
.public-mini-footer{
  width:100%;
  margin-top:auto;
  padding:16px clamp(14px,3vw,34px);
  border-top:1px solid var(--line);
  background:#f8fafc;
  color:var(--muted);
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  gap:18px;
  font-size:.78rem;
  line-height:1.45;
}
.public-mini-footer-org{
  min-width:0;
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:4px 12px;
}
.public-mini-footer-org strong{
  width:100%;
  color:#475467;
  font-size:.82rem;
}
.public-mini-footer a{
  color:inherit;
  text-decoration:none;
}
.public-mini-footer a:hover,
.public-mini-footer a:focus{
  color:var(--primary);
  text-decoration:underline;
}
.system-credit{
  flex:0 0 auto;
  margin-left:auto;
  text-align:right;
  white-space:nowrap;
  color:#667085;
  font-size:.74rem;
}
.system-credit a{
  font-weight:750;
}
@media(max-width:700px){
  .public-mini-footer{
    align-items:flex-start;
    flex-direction:column;
    gap:12px;
  }
  .public-mini-footer-org{
    display:grid;
    gap:3px;
  }
  .system-credit{
    width:100%;
    text-align:right;
  }
}
@media print{
  .public-mini-footer{display:none!important}
}

/* Mantiene el minifooter al fondo incluso en páginas públicas cortas. */
body{display:flex;flex-direction:column;min-height:100vh}
.public-main{width:100%;flex:1 0 auto}
.app-shell{width:100%;flex:1 0 auto}
