/* ============================================================================
   CSICU Educational Simulation Platform — shared base styles
   Extracted from the original iabp-simulator.html so every module shares one
   design language. Theme-aware (light / dark via prefers-color-scheme, with a
   manual [data-theme] override hook). No framework, no build step.
   ========================================================================== */

:root{
  --page-bg:#eef1f0;
  --page-text:#1b2320;
  --panel-bg:#ffffff;
  --panel-border:#d8ded9;
  --muted:#5b665f;
  --accent:#2f6f5e;
  --accent-soft:#e4efec;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --page-bg:#11151a;
    --page-text:#e7ece9;
    --panel-bg:#1a2027;
    --panel-border:#2b333b;
    --muted:#9aa6a0;
    --accent:#6fd7b9;
    --accent-soft:#1d2b28;
  }
}
:root[data-theme="dark"]{
  --page-bg:#11151a;
  --page-text:#e7ece9;
  --panel-bg:#1a2027;
  --panel-border:#2b333b;
  --muted:#9aa6a0;
  --accent:#6fd7b9;
  --accent-soft:#1d2b28;
}

*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  background:var(--page-bg);
  color:var(--page-text);
  font-family:'Inter',system-ui,-apple-system,'Segoe UI',sans-serif;
  padding:20px;
  min-height:100vh;
}
img{max-width:100%;}
.wrap{max-width:1040px;margin:0 auto;display:flex;flex-direction:column;gap:18px;}

a{color:var(--accent);}

/* ---------- Site navigation (shared across every page) ---------- */
.site-nav{
  max-width:1040px;
  margin:0 auto 4px auto;
  display:flex;
  align-items:center;
  gap:14px;
  flex-wrap:wrap;
  font-size:13px;
}
.site-nav .brand{
  font-weight:700;
  letter-spacing:-0.01em;
  text-decoration:none;
  color:var(--page-text);
  font-size:14px;
}
.site-nav .brand .brand-mark{color:var(--accent);}
.site-nav .nav-links{
  display:flex;
  gap:4px;
  flex-wrap:wrap;
  margin-left:auto;
}
.site-nav .nav-links a{
  text-decoration:none;
  color:var(--muted);
  padding:4px 9px;
  border-radius:6px;
  font-weight:600;
}
.site-nav .nav-links a:hover{background:var(--accent-soft);color:var(--accent);}
.site-nav .nav-links a.current{color:var(--accent);background:var(--accent-soft);}

/* ---------- Generic header ---------- */
header h1{
  font-size:22px;
  font-weight:700;
  margin:0 0 4px 0;
  letter-spacing:-0.01em;
}
header p{
  margin:0;
  color:var(--muted);
  font-size:14px;
  max-width:640px;
  line-height:1.5;
}

.panel{
  background:var(--panel-bg);
  border:1px solid var(--panel-border);
  border-radius:10px;
  overflow:hidden;
}

/* ---------- Bedside monitor (fixed dark clinical look, like real hardware) ---------- */
.monitor{
  background:#05100a;
  border-radius:10px;
  padding:14px 14px 10px 14px;
  border:2px solid #232f28;
}
.monitor-title{
  font-family:'JetBrains Mono',monospace;
  font-size:11px;
  color:#5f8f78;
  letter-spacing:0.06em;
  margin-bottom:8px;
  display:flex;
  justify-content:space-between;
}
.channel{
  display:flex;
  align-items:stretch;
  border-top:1px solid #16221c;
  padding:4px 0;
}
.channel:first-of-type{border-top:none;}
.channel-label{
  width:74px;
  flex-shrink:0;
  font-family:'JetBrains Mono',monospace;
  font-size:12px;
  font-weight:700;
  display:flex;
  flex-direction:column;
  justify-content:center;
  padding-left:2px;
}
.channel-label .num{font-size:20px;line-height:1.1;}
.channel-label .unit{font-size:9px;font-weight:400;opacity:0.75;}
.channel canvas{
  flex:1;
  height:74px;
  width:100%;
  display:block;
}
.ecg-color{color:#3ee06a;}
.abp-color{color:#ff5d73;}
.spo2-color{color:#33c9f2;}

/* ---------- Device console (light clinical device chrome, distinct from monitor) ---------- */
.console{
  background:linear-gradient(180deg,#e2e6ea,#c7ced5);
  border:1px solid #aeb7bf;
  border-radius:10px;
  padding:14px;
}
.console-screen{
  background:#0c1720;
  border-radius:6px;
  padding:10px 12px 6px 12px;
  border:3px solid #384450;
}
.console-screen-head{
  display:flex;
  justify-content:space-between;
  align-items:baseline;
  font-family:'JetBrains Mono',monospace;
  color:#e7a53c;
  font-size:11px;
  letter-spacing:0.04em;
  margin-bottom:4px;
}
.console-screen canvas{width:100%;display:block;}
.console-channel{
  display:flex;
  align-items:stretch;
  border-top:1px solid #1c2833;
  padding:3px 0;
}
.console-channel:first-of-type{border-top:none;}
.console-channel-label{
  width:62px;
  flex-shrink:0;
  font-family:'JetBrains Mono',monospace;
  font-size:10.5px;
  font-weight:700;
  letter-spacing:0.03em;
  display:flex;
  align-items:center;
  padding-left:2px;
}
.console-channel canvas{height:66px;}
.aop-color{color:#e7c23c;}
.balloon-color{color:#cfe3ee;}
.console-readouts{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(140px,1fr));
  gap:10px;
  margin-top:12px;
}
.readout{
  background:#f4f6f8;
  border:1px solid #c3cad1;
  border-radius:6px;
  padding:8px 10px;
}
.readout .label{
  font-size:10.5px;
  color:#5a6570;
  font-weight:600;
  letter-spacing:0.03em;
}
.readout .value{
  font-family:'JetBrains Mono',monospace;
  font-size:18px;
  font-weight:700;
  color:#1a2530;
  margin-top:2px;
}
.readout .value.status-optimal{color:#1f8a4c;}
.readout .value.status-off{color:#c94a2e;}

/* ---------- Controls ---------- */
.controls{
  margin-top:14px;
  display:flex;
  flex-direction:column;
  gap:14px;
}
.control-row{
  display:flex;
  flex-wrap:wrap;
  gap:18px;
  align-items:flex-end;
}
.control{
  display:flex;
  flex-direction:column;
  gap:4px;
  min-width:190px;
  flex:1;
}
.control label{
  font-size:12px;
  font-weight:600;
  color:#28323c;
  display:flex;
  justify-content:space-between;
}
.control label .live{
  font-family:'JetBrains Mono',monospace;
  font-weight:700;
}
input[type=range]{
  width:100%;
  accent-color:#3a6b8f;
}
.ratio-group, .preset-group{
  display:flex;
  gap:6px;
  flex-wrap:wrap;
}
.btn{
  border:1px solid #9aa5b0;
  background:#f4f6f8;
  color:#233;
  font-family:'Inter',sans-serif;
  font-size:12.5px;
  font-weight:600;
  padding:7px 12px;
  border-radius:6px;
  cursor:pointer;
}
.btn:hover{background:#e7ebee;}
.btn.active{
  background:#1a3a52;
  color:#fff;
  border-color:#1a3a52;
}
.btn.warn{border-color:#c9714f;color:#9a3f22;}
.btn.warn:hover{background:#fbe9e2;}

footer{
  font-size:12px;
  color:var(--muted);
  line-height:1.5;
  padding:2px 4px 6px 4px;
}

/* ============================================================================
   Hub / landing page — module grid
   ========================================================================== */
.hub-intro{margin-bottom:6px;}
.group-title{
  font-size:13px;
  font-weight:700;
  letter-spacing:0.04em;
  text-transform:uppercase;
  color:var(--muted);
  margin:10px 2px 2px 2px;
}
.card-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(230px,1fr));
  gap:14px;
}
.card{
  display:flex;
  flex-direction:column;
  gap:6px;
  background:var(--panel-bg);
  border:1px solid var(--panel-border);
  border-radius:10px;
  padding:16px;
  text-decoration:none;
  color:var(--page-text);
  position:relative;
  transition:border-color .12s ease, transform .12s ease;
}
a.card:hover{
  border-color:var(--accent);
  transform:translateY(-2px);
}
.card .card-title{
  font-size:16px;
  font-weight:700;
  letter-spacing:-0.01em;
}
.card .card-desc{
  font-size:13px;
  color:var(--muted);
  line-height:1.45;
}
.card.soon{opacity:0.72;cursor:default;}
.badge{
  align-self:flex-start;
  font-size:10.5px;
  font-weight:700;
  letter-spacing:0.04em;
  text-transform:uppercase;
  padding:2px 8px;
  border-radius:999px;
}
.badge.available{background:var(--accent-soft);color:var(--accent);}
.badge.soon{background:rgba(128,128,128,0.16);color:var(--muted);}

/* ---------- Placeholder ("under construction") pages ---------- */
.placeholder{
  background:var(--panel-bg);
  border:1px solid var(--panel-border);
  border-radius:10px;
  padding:40px 24px;
  text-align:center;
}
.placeholder h2{margin:0 0 8px 0;font-size:20px;}
.placeholder p{margin:0 auto;max-width:460px;color:var(--muted);line-height:1.55;font-size:14px;}

/* ---------- Responsive ---------- */
@media (max-width:520px){
  body{padding:14px;}
  .control{min-width:100%;}
}
