:root{
  --bg:#f4f7f9;
  --card:#ffffff;
  --text:#102430;
  --muted:#627984;
  --border:#d8e3e8;
  --accent:#0b5c7a;
  --accent-2:#e5f1f6;
  --good:#176942;
  --good-bg:#edf8f1;
  --warn:#8b5e16;
  --warn-bg:#fff7e6;
  --bad:#9b2f2f;
  --bad-bg:#fff1f1;
  --current:#e5ecef;
  --course:#dceff7;
  --course-border:#287b9a;
  --block:#f0e7d8;
  --block-border:#b28845;
}
*{box-sizing:border-box}
body{
  margin:0;
  background:var(--bg);
  color:var(--text);
  font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
}
button,input,select{font:inherit}
button{cursor:pointer}
.topbar{
  display:flex;
  justify-content:space-between;
  gap:18px;
  align-items:center;
  padding:22px max(24px,calc((100vw - 1180px)/2));
  background:#fff;
  border-bottom:1px solid var(--border);
}
.topbar h1{margin:4px 0 2px;font-size:28px}
.topbar p{margin:0;color:var(--muted)}
.eyebrow{font-size:11px;font-weight:900;letter-spacing:.08em;color:var(--accent)}
.top-actions{display:flex;gap:9px;align-items:center;flex-wrap:wrap}
.badge{
  display:inline-flex;
  align-items:center;
  padding:7px 10px;
  border-radius:999px;
  background:var(--accent-2);
  color:var(--accent);
  font-size:12px;
  font-weight:800;
}
.page{max-width:1180px;margin:22px auto;padding:0 18px 36px}
.notice{
  display:flex;
  gap:9px 16px;
  flex-wrap:wrap;
  padding:12px 14px;
  margin-bottom:16px;
  border:1px solid #c9dce5;
  border-radius:12px;
  background:#eef6f9;
}
.notice span{color:var(--muted)}
.card{
  background:var(--card);
  border:1px solid var(--border);
  border-radius:15px;
  padding:18px;
  margin-bottom:16px;
}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.two-col .card{margin-bottom:0}
.section-head{display:flex;gap:11px;align-items:flex-start;margin-bottom:15px}
.section-head h2,.results-head h2{margin:0 0 3px;font-size:18px}
.section-head p,.results-head p{margin:0;color:var(--muted);font-size:13px}
.step{
  min-width:30px;height:30px;display:grid;place-items:center;border-radius:9px;
  background:var(--accent-2);color:var(--accent);font-weight:900
}
.subjects-grid{
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:9px;
}
.subject-option{
  display:flex;align-items:center;gap:9px;padding:11px 12px;
  border:1px solid var(--border);border-radius:10px;background:#fff;cursor:pointer
}
.subject-option:hover{border-color:#9db5c0}
.subject-option.selected{background:#eef7fa;border-color:#78a8bb}
.subject-option input{margin:0}
.helper{margin-top:10px;color:var(--muted);font-size:12px}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:11px}
.form-grid label,.group-pref label{
  display:grid;gap:5px;color:var(--muted);font-size:12px;font-weight:800
}
select,input[type=text],input[type=time]{
  width:100%;border:1px solid #cfdce2;border-radius:9px;background:#fff;color:var(--text)
}
select,input[type=text]{padding:9px 10px}
input[type=time]{padding:8px}
.check-row{display:flex;gap:14px;flex-wrap:wrap;margin-top:13px;font-size:13px}
.shift-note{
  margin-top:12px;padding:9px 10px;border-radius:9px;background:#f6f8f9;
  color:var(--muted);font-size:12px
}
.btn{
  border:1px solid transparent;border-radius:9px;padding:9px 12px;font-weight:800;
  color:var(--text);background:#fff
}
.btn.primary{background:var(--accent);color:#fff}
.btn.primary:hover{filter:brightness(.96)}
.btn.secondary{background:var(--accent-2);color:#084b66}
.btn.ghost{border-color:#cfdce2;background:#fff}
.btn.big{font-size:16px;padding:13px 20px;min-width:250px}
.quick-buttons{display:flex;gap:8px;flex-wrap:wrap}
.blocked-list{display:grid;gap:7px;margin:11px 0}
.blocked-item{
  display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center;
  border:1px solid #e2d4ba;background:#fff8ec;border-radius:9px;padding:8px 10px
}
.blocked-item strong{font-size:12px}
.blocked-item span{display:block;color:#806d4d;font-size:11px;margin-top:2px}
.blocked-item button{border:0;background:transparent;font-size:16px}
.manual-block{
  display:grid;grid-template-columns:130px 120px 120px 1fr auto;gap:8px;align-items:end
}
details summary{
  display:flex;justify-content:space-between;gap:12px;cursor:pointer;list-style:none
}
details summary span{color:var(--muted);font-size:12px}
.details-help{color:var(--muted);font-size:12px}
.group-preferences{display:grid;gap:9px}
.group-pref{
  display:grid;grid-template-columns:1.2fr .8fr 1.4fr;gap:9px;padding:10px;
  border:1px solid var(--border);border-radius:10px
}
.group-pref .subject-name{font-weight:850;align-self:center}
.generate-card{
  display:flex;align-items:center;justify-content:center;gap:16px;flex-wrap:wrap;
  padding:10px 0 22px
}
.status{font-size:13px;color:var(--muted)}
.status.bad{color:var(--bad)}
.status.good{color:var(--good)}
.results-head{
  display:flex;justify-content:space-between;gap:14px;align-items:flex-start;margin-bottom:12px
}
.result-actions{display:flex;gap:8px;flex-wrap:wrap}
.result-card{
  border:1px solid var(--border);border-radius:12px;overflow:hidden;margin-top:11px;background:#fff
}
.result-top{
  display:flex;justify-content:space-between;gap:12px;padding:12px 14px;background:#f8fafb
}
.result-top strong{font-size:14px}
.result-stats{display:flex;gap:7px;flex-wrap:wrap;justify-content:flex-end}
.stat{
  padding:4px 7px;border-radius:999px;background:#eef3f5;color:#536a75;font-size:11px;font-weight:750
}
.courses{padding:4px 14px 10px}
.course-row{
  display:grid;grid-template-columns:1.1fr .6fr .7fr 1fr;gap:10px;
  padding:10px 0;border-bottom:1px solid #edf1f3;font-size:12px
}
.course-row:last-child{border-bottom:0}
.course-row strong{font-size:12px}
.course-meta{color:var(--muted)}
.result-toolbar{
  display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap;padding:0 14px 13px
}
.favorite.active{background:#fff4dc;border-color:#d7b466;color:#7a5617}
.schedule-panel{border-top:1px solid var(--border);padding:13px}
.schedule-status{
  padding:9px 10px;border-radius:9px;margin-bottom:9px;font-size:12px
}
.schedule-status.good{background:var(--good-bg);color:var(--good);border:1px solid #cbe6d5}
.schedule-status.bad{background:var(--bad-bg);color:var(--bad);border:1px solid #efcccc}
.schedule-legend{display:flex;gap:11px;flex-wrap:wrap;margin:0 0 9px;font-size:11px;color:var(--muted)}
.legend-dot{width:9px;height:9px;border-radius:3px;display:inline-block;margin-right:4px}
.legend-dot.course{background:var(--course);border:1px solid var(--course-border)}
.legend-dot.blocked{background:var(--block);border:1px solid var(--block-border)}
.legend-dot.clash{background:#f8dada;border:1px solid #b83d3d}
.calendar-scroll{overflow-x:auto;border:1px solid var(--border);border-radius:9px;background:#fff}
.calendar-grid{display:grid;min-width:760px}
.calendar-head{background:#f5f8fa;border-bottom:1px solid var(--border)}
.calendar-head>div{
  padding:7px 5px;text-align:center;font-size:11px;font-weight:850;border-left:1px solid #e3eaed
}
.calendar-head>div:first-child{border-left:0;text-align:left}
.time-axis,.day-col{position:relative}
.time-axis{background:#fafcfd;border-right:1px solid #dfe7eb}
.day-col{border-right:1px solid #e7edef;overflow:hidden}
.hour-label{
  position:absolute;left:6px;transform:translateY(-50%);font-size:9px;color:#73858e;white-space:nowrap
}
.hour-line{position:absolute;left:0;right:0;border-top:1px solid #edf1f3}
.cal-block{
  position:absolute;left:4px;right:4px;border-radius:6px;padding:4px 5px;overflow:hidden;
  display:flex;flex-direction:column;gap:1px;box-sizing:border-box;font-size:9px;line-height:1.12
}
.cal-block strong,.cal-block span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-block.course{background:var(--course);border:2px solid var(--course-border);color:#124d63;z-index:2}
.cal-block.blocked{background:var(--block);border:1px solid var(--block-border);color:#604d2d}
.cal-block.clash{background:#f9dddd;border:2px solid #b83d3d;color:#812525;z-index:3}
.empty-state{padding:26px;text-align:center;color:var(--muted)}
.hidden{display:none!important}
footer{padding:16px 4px 30px;text-align:center;color:var(--muted);font-size:11px}
@media(max-width:900px){
  .subjects-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .two-col{grid-template-columns:1fr}
  .manual-block{grid-template-columns:1fr 1fr}
  .manual-block input[type=text]{grid-column:1/-1}
  .group-pref{grid-template-columns:1fr}
}
@media(max-width:620px){
  .topbar{align-items:flex-start;padding:18px;flex-direction:column}
  .topbar h1{font-size:24px}
  .page{padding:0 10px}
  .subjects-grid{grid-template-columns:1fr}
  .form-grid{grid-template-columns:1fr}
  .manual-block{grid-template-columns:1fr 1fr}
  .manual-block .btn{grid-column:1/-1}
  .results-head{display:grid}
  .result-actions{justify-content:flex-start}
  .course-row{grid-template-columns:1fr 1fr}
  .result-top{display:grid}
  .result-stats{justify-content:flex-start}
}


/* ===== Horario visual por rangos oficiales ===== */
.range-calendar-scroll{
  overflow:auto;
  border:1px solid var(--border);
  border-radius:10px;
  background:#fff;
  max-height:720px;
}

.range-calendar{
  display:grid;
  position:relative;
  min-width:850px;
  isolation:isolate;
}

.range-head{
  display:flex;
  align-items:center;
  justify-content:center;
  padding:7px 8px;
  background:#f4f7f9;
  border-right:1px solid var(--border);
  border-bottom:1px solid var(--border);
  font-size:11px;
  font-weight:900;
  color:#2c4551;
  position:sticky;
  top:0;
  z-index:10;
}

.range-corner{
  left:0;
  z-index:12;
}

.range-time{
  display:flex;
  align-items:center;
  justify-content:center;
  padding:5px 8px;
  background:#fafcfd;
  border-right:1px solid var(--border);
  border-bottom:1px solid #e9eef1;
  color:#536a75;
  font-size:10px;
  text-align:center;
  position:sticky;
  left:0;
  z-index:7;
}

.range-time strong{
  white-space:nowrap;
}

.range-cell{
  border-right:1px solid #e7edef;
  border-bottom:1px solid #e7edef;
  background:#fff;
  z-index:1;
}

.range-block{
  margin:4px;
  border-radius:7px;
  padding:6px 7px;
  overflow:hidden;
  display:flex;
  flex-direction:column;
  gap:2px;
  box-sizing:border-box;
  z-index:5;
  font-size:10px;
  line-height:1.15;
  min-height:0;
}

.range-block strong{
  font-size:10px;
  font-weight:900;
}

.range-block span,
.range-block small{
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}

.range-block small{
  opacity:.78;
  font-size:9px;
}

.range-block.course{
  background:var(--course);
  border:2px solid var(--course-border);
  color:#124d63;
}

.range-block.blocked{
  background:var(--block);
  border:1px solid var(--block-border);
  color:#604d2d;
}

.range-block.clash{
  background:#f9dddd;
  border:2px solid #b83d3d;
  color:#812525;
  z-index:6;
}

.range-note{
  margin-top:8px;
  color:var(--muted);
  font-size:11px;
}

@media(max-width:620px){
  .range-calendar{
    min-width:760px;
  }
  .range-calendar-scroll{
    max-height:620px;
  }
}


/* ===== Diagnóstico claro cuando no hay opciones ===== */
.diagnostic-card{
  margin-top:8px;
  padding:15px 16px;
  border-radius:11px;
  border:1px solid #efc9c9;
  background:#fff5f5;
  color:#742828;
}

.diagnostic-title{
  font-weight:900;
  margin-bottom:8px;
}

.diagnostic-subtitle{
  font-size:12px;
  font-weight:850;
  margin-bottom:5px;
}

.diagnostic-card ul{
  margin:6px 0 10px 20px;
  padding:0;
}

.diagnostic-card li{
  margin:5px 0;
  font-size:12px;
  line-height:1.35;
}

.diagnostic-help{
  padding-top:8px;
  border-top:1px solid #efd8d8;
  font-size:11px;
  color:#875050;
}
