/* Virtual Z Vent device. Every rule is scoped under .zvent.
   Mobile-first; a container query switches to the wide layout. */

.zvent{
  --lcd:#B8BE3A;
  --lcd-grid:#9EA52E;
  --lcd-ink:#1a1e00;
  --lcd-ink-soft:#4a4e20;
  --lcd-sel:#C8CE4A;
  --lcd-press:#A8AE30;
  --housing:#6B6F74;
  --housing-dark:#52555A;
  --housing-light:#7E8288;
  --housing-edge:rgba(0,0,0,0.25);
  --zv-key-ink:#e4e4e4;
  container-type:inline-size;
  container-name:zvent;
  width:100%;
  max-width:760px;
  margin:0 auto;
  font-family:'IBM Plex Mono',ui-monospace,monospace;
  -webkit-text-size-adjust:100%;
}
.zvent *,.zvent *::before,.zvent *::after{box-sizing:border-box;}

@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]) .zvent{--housing-edge:rgba(255,255,255,0.14);}
}
:root[data-theme="dark"] .zvent{--housing-edge:rgba(255,255,255,0.14);}

.zvent button{
  font:inherit;
  touch-action:manipulation;
  -webkit-tap-highlight-color:transparent;
  cursor:pointer;
}
.zvent button:focus-visible{outline:3px solid #ffd23f;outline-offset:2px;}

/* ---------- housing ---------- */
.zvent .zv-housing{
  background:var(--housing);
  border-radius:16px;
  padding:8px;
  border:1px solid var(--housing-edge);
  box-shadow:0 4px 16px rgba(0,0,0,0.3),inset 0 1px 0 var(--housing-light);
  position:relative;
}

/* ---------- LEDs ---------- */
.zvent .zv-leds{display:flex;align-items:center;gap:10px;padding:4px 6px 8px;}
.zvent .zv-led{
  width:16px;height:16px;border-radius:50%;flex-shrink:0;
  border:1.5px solid rgba(0,0,0,0.45);
}
.zvent .zv-red{background:#4a1a1a;}
.zvent .zv-red.on{background:#ff2a2a;box-shadow:0 0 8px 2px rgba(255,0,0,0.6);}
.zvent .zv-yellow{background:#4a4a1a;}
.zvent .zv-yellow.on{background:#ffcc00;box-shadow:0 0 8px 2px rgba(255,204,0,0.5);}
.zvent .zv-green{background:#1a3a1a;}
.zvent .zv-green.on{background:#00cc00;box-shadow:0 0 6px 1px rgba(0,204,0,0.4);}
.zvent .zv-led-label{font-size:11px;font-weight:700;color:#ddd;letter-spacing:0.5px;}
.zvent .zv-brand{margin-left:auto;font-size:12px;font-weight:700;color:#d8d8d8;letter-spacing:2px;}

/* ---------- LCD and side buttons ---------- */
.zvent .zv-lcd-row{display:flex;gap:4px;align-items:stretch;}
.zvent .zv-lcd{
  flex:1;min-width:0;position:relative;
  background:var(--lcd);
  border-radius:8px;
  border:3px solid var(--housing-dark);
  box-shadow:inset 0 2px 6px rgba(0,0,0,0.25);
  overflow:hidden;
  color:var(--lcd-ink);
}

.zvent .zv-side{display:flex;flex-direction:column;gap:3px;width:58px;flex-shrink:0;}
.zvent .zv-side-btn{
  flex:1 1 0;min-height:44px;width:100%;
  padding:2px 4px;border-radius:5px;
  border:1px solid rgba(0,0,0,0.45);
  background:var(--housing-dark);color:var(--zv-key-ink);
  font-size:11px;font-weight:600;line-height:1.1;
  box-shadow:0 1px 0 rgba(0,0,0,0.3),inset 0 1px 0 rgba(255,255,255,0.1);
  display:flex;align-items:center;justify-content:center;text-align:center;
}
.zvent .zv-side-btn:active{box-shadow:none;transform:translateX(1px);}
.zvent .zv-side-btn.sel{background:#2a5a1a;color:#fff;border-color:#3a7a2a;box-shadow:0 0 6px rgba(0,180,0,0.35);}
.zvent .zv-side-alarms{background:#44474c;color:#ffd23f;}

/* ---------- alarm bar ---------- */
.zvent .zv-alarmbar{
  display:flex;align-items:center;gap:6px;
  padding:3px 4px 3px 8px;min-height:46px;
  border-bottom:1px solid var(--lcd-grid);
  background:rgba(0,0,0,0.06);
}
.zvent .zv-alarm-msg{
  flex:1;min-width:0;
  font-size:11px;font-weight:700;line-height:1.25;
  color:var(--lcd-ink);
  overflow-wrap:anywhere;
}
.zvent .zv-mute{
  flex-shrink:0;min-width:56px;min-height:40px;padding:2px 6px;
  background:var(--lcd-grid);border:1px solid var(--lcd-ink-soft);border-radius:4px;
  color:var(--lcd-ink);font-size:11px;font-weight:700;
}
.zvent .zv-mute.on{background:var(--lcd-ink);color:var(--lcd);}

.zvent .zv-alarmbar.pri-medium,
.zvent .zv-alarmbar.pri-high{background:var(--lcd-ink);}
.zvent .zv-alarmbar.pri-medium .zv-alarm-msg,
.zvent .zv-alarmbar.pri-high .zv-alarm-msg{color:var(--lcd);}
.zvent .zv-alarmbar.pri-low .zv-alarm-msg{text-decoration:underline;text-underline-offset:3px;}
.zvent .zv-alarmbar.pri-high{animation:zv-high-pulse 1s steps(1,end) infinite;}
.zvent .zv-red.on{animation:zv-led-pulse 1s steps(1,end) infinite;}
@keyframes zv-high-pulse{
  0%{background:var(--lcd-ink);}
  50%{background:#7a0a0a;}
}
@keyframes zv-led-pulse{
  0%{opacity:1;}
  50%{opacity:0.35;}
}
.zvent[data-state="ventilating"] .zv-alarmbar.pri-high ~ .zv-body{box-shadow:inset 0 0 0 3px #7a0a0a;}

/* ---------- body: waveform and parameters ---------- */
.zvent .zv-body{display:flex;flex-direction:column;position:relative;}
.zvent .zv-wave{display:flex;flex-direction:column;min-width:0;height:150px;padding:2px 4px 0;}
.zvent.zv-teaching .zv-wave{height:270px;}
.zvent .zv-teach-label{
  font-size:10px;font-weight:700;line-height:1.3;
  padding:2px 6px;margin:2px 0;
  border:1px dashed var(--lcd-ink);border-radius:3px;
  color:var(--lcd-ink);background:var(--lcd-sel);
}
.zvent .zv-teach-label[hidden]{display:none;}
.zvent .zv-canvas-wrap{position:relative;flex:1;min-height:0;}
.zvent .zv-canvas-wrap canvas{position:absolute;inset:0;width:100%;height:100%;display:block;}

.zvent .zv-params{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:1px;background:var(--lcd-grid);
  border-top:1px solid var(--lcd-grid);
}
.zvent .zv-cell{
  position:relative;min-height:52px;min-width:0;
  display:flex;flex-direction:column;justify-content:center;align-items:flex-start;
  padding:3px 6px;margin:0;
  background:var(--lcd);color:var(--lcd-ink);
  border:0;border-radius:0;text-align:left;
}
.zvent button.zv-cell:active{background:var(--lcd-press);}
.zvent .zv-cell.sel{outline:2px solid var(--lcd-ink);outline-offset:-2px;background:var(--lcd-sel);}
.zvent .zv-cell-label{font-size:9px;color:var(--lcd-ink-soft);text-transform:uppercase;letter-spacing:0.5px;line-height:1.2;}
.zvent .zv-cell-val{font-size:18px;font-weight:700;line-height:1.1;}
.zvent .zv-cell-val.dim{opacity:0.5;}
.zvent .zv-cell-unit{font-size:8.5px;color:var(--lcd-ink-soft);line-height:1.2;white-space:nowrap;}
.zvent .zv-cell-lim{position:absolute;top:3px;right:4px;font-size:8px;color:var(--lcd-ink-soft);}

/* ---------- alarm menu ---------- */
.zvent .zv-alarm-menu{
  position:absolute;inset:0;z-index:5;
  background:var(--lcd);
  display:flex;flex-direction:column;
  overflow:hidden;
}
.zvent .zv-alarm-menu[hidden]{display:none;}
.zvent .zv-am-head{
  display:flex;align-items:center;justify-content:space-between;
  padding:2px 4px 2px 8px;border-bottom:1px solid var(--lcd-grid);
  font-size:12px;font-weight:700;letter-spacing:1px;
}
.zvent .zv-am-done{
  min-height:44px;min-width:64px;padding:2px 10px;
  border:2px solid var(--lcd-ink);border-radius:5px;
  background:var(--lcd-grid);color:var(--lcd-ink);font-weight:700;font-size:12px;
}
.zvent .zv-am-list{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;display:flex;flex-direction:column;}
.zvent .zv-am-item{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  min-height:44px;padding:4px 8px;
  border:0;border-bottom:1px solid var(--lcd-grid);
  background:var(--lcd);color:var(--lcd-ink);
  font-size:12px;font-weight:600;text-align:left;
}
.zvent .zv-am-item:active{background:var(--lcd-press);}
.zvent .zv-am-item.sel{outline:2px solid var(--lcd-ink);outline-offset:-2px;background:var(--lcd-sel);}
.zvent .zv-am-val{font-weight:700;white-space:nowrap;}
.zvent .zv-am-toggle .zv-am-val{
  min-width:48px;text-align:center;padding:3px 6px;border:2px solid var(--lcd-ink);border-radius:4px;
}
.zvent .zv-am-toggle.on .zv-am-val{background:var(--lcd-ink);color:var(--lcd);}
.zvent .zv-am-hint{font-size:9.5px;color:var(--lcd-ink-soft);padding:3px 8px;border-top:1px solid var(--lcd-grid);}

/* ---------- aux row ---------- */
.zvent .zv-aux{display:flex;gap:1px;background:var(--lcd-grid);border-top:1px solid var(--lcd-grid);}
.zvent .zv-aux-cell{flex:1;min-width:0;background:var(--lcd);padding:2px 2px;text-align:center;display:flex;flex-direction:column;}
.zvent .zv-aux-label{font-size:7.5px;color:var(--lcd-ink-soft);text-transform:uppercase;white-space:nowrap;}
.zvent .zv-aux-val{font-size:12px;font-weight:700;}

/* ---------- overlay: off, POST, start menu ---------- */
.zvent .zv-overlay{position:absolute;inset:0;z-index:10;border-radius:5px;overflow:hidden;}
.zvent .zv-overlay.hidden{display:none;}
.zvent .zv-ostate{display:none;width:100%;height:100%;}
.zvent .zv-ostate.active{display:flex;}
.zvent .zv-off{background:#111;}
.zvent .zv-post{background:#1a2a10;flex-direction:column;align-items:center;justify-content:center;gap:6px;}
.zvent .zv-post-brand{font-size:26px;font-weight:700;color:var(--lcd);letter-spacing:3px;}
.zvent .zv-post-model{font-size:14px;color:#8a9a6a;}
.zvent .zv-post-status{font-size:12px;color:var(--lcd);margin-top:6px;}
.zvent .zv-menu{
  background:var(--lcd);flex-direction:column;align-items:center;justify-content:center;
  padding:16px;gap:10px;
}
.zvent .zv-menu-title{font-size:15px;font-weight:700;letter-spacing:1px;}
.zvent .zv-menu-sub{font-size:11px;color:var(--lcd-ink-soft);margin-bottom:2px;}
.zvent .zv-menu-btn{
  width:85%;max-width:220px;min-height:48px;padding:8px 16px;
  border-radius:6px;border:2px solid var(--lcd-ink);
  background:var(--lcd-grid);color:var(--lcd-ink);
  font-size:14px;font-weight:600;
}
.zvent .zv-menu-btn:hover,.zvent .zv-menu-btn:active{background:var(--lcd-ink);color:var(--lcd);}

/* ---------- control panel ---------- */
.zvent .zv-panel{padding:10px 2px 2px;}
.zvent .zv-standby{display:none;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;padding:2px 0 10px;}
.zvent .zv-standby.active{display:flex;}
.zvent .zv-standby-label{font-size:12px;font-weight:700;color:#ffd23f;}
.zvent .zv-connect{
  min-height:48px;padding:8px 20px;border-radius:6px;
  border:2px solid #2a8a2a;background:#1a6a1a;color:#fff;
  font-family:'Inter',sans-serif;font-size:14px;font-weight:700;
  box-shadow:0 2px 0 rgba(0,0,0,0.3);
  animation:zv-connect-pulse 2s infinite;
}
.zvent .zv-test{min-height:44px;padding:8px 14px;border-radius:8px;border:1px solid rgba(0,0,0,0.4);background:var(--housing-dark);color:#eee;font:600 13px 'Inter',sans-serif;cursor:pointer;}
.zvent .zv-connect:active{box-shadow:none;transform:translateY(1px);}
@keyframes zv-connect-pulse{
  0%,100%{box-shadow:0 2px 0 rgba(0,0,0,0.3);}
  50%{box-shadow:0 2px 0 rgba(0,0,0,0.3),0 0 12px rgba(0,180,0,0.5);}
}

.zvent .zv-dial-row{display:flex;gap:8px;align-items:center;justify-content:center;margin-bottom:10px;}
.zvent .zv-dial-btn{
  width:56px;height:56px;border-radius:50%;flex-shrink:0;
  border:2px solid rgba(0,0,0,0.5);
  background:radial-gradient(circle at 40% 35%,var(--housing-light),var(--housing-dark));
  font-size:24px;font-weight:700;color:#e4e4e4;line-height:1;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 2px 4px rgba(0,0,0,0.4),inset 0 1px 0 rgba(255,255,255,0.15);
  text-shadow:0 1px 2px rgba(0,0,0,0.5);
  user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;
}
.zvent .zv-dial-btn:active{box-shadow:inset 0 2px 4px rgba(0,0,0,0.4);transform:translateY(1px);}
.zvent .zv-dial-display{
  flex:0 1 150px;min-width:110px;text-align:center;
  padding:6px 8px;
  background:var(--lcd);color:var(--lcd-ink);
  border:2px solid var(--housing-dark);border-radius:6px;
  box-shadow:inset 0 1px 3px rgba(0,0,0,0.15);
}
.zvent .zv-dl-name{display:block;font-size:10px;color:var(--lcd-ink-soft);}
.zvent .zv-dl-val{display:block;font-size:20px;font-weight:700;margin-top:1px;}

.zvent .zv-actions{display:flex;gap:6px;justify-content:center;}
.zvent .zv-act{
  flex:1 1 0;min-width:0;max-width:150px;min-height:46px;padding:6px 8px;
  border-radius:6px;border:1px solid rgba(0,0,0,0.45);
  background:var(--housing-dark);color:#e4e4e4;
  font-family:'Inter',sans-serif;font-size:13px;font-weight:600;line-height:1.15;
  box-shadow:0 2px 0 rgba(0,0,0,0.3),inset 0 1px 0 rgba(255,255,255,0.1);
}
.zvent .zv-act:active{box-shadow:none;transform:translateY(1px);}
.zvent .zv-accept{background:#1a6a1a;color:#fff;border-color:#2a8a2a;}
.zvent .zv-accept.flash{background:#2a9a2a;}
.zvent .zv-manual{color:#ffd23f;border-color:rgba(255,204,0,0.45);}
.zvent .zv-cancel{color:#c8c8c8;}

.zvent .zv-power-row{display:flex;align-items:center;gap:10px;justify-content:flex-end;padding:10px 6px 2px;}
.zvent .zv-power-labels{display:flex;flex-direction:column;gap:20px;font-size:11px;font-weight:700;color:#bbb;}
.zvent .zv-power{
  width:58px;height:58px;border-radius:50%;
  border:3px solid rgba(0,0,0,0.5);
  background:radial-gradient(circle at 40% 35%,var(--housing-light),var(--housing-dark));
  box-shadow:0 2px 4px rgba(0,0,0,0.4),inset 0 1px 0 rgba(255,255,255,0.15);
  display:flex;align-items:center;justify-content:center;position:relative;
}
.zvent .zv-power::after{content:'\2223';font-size:20px;font-weight:700;color:#999;text-shadow:0 1px 2px rgba(0,0,0,0.5);}
.zvent .zv-power.on{
  background:radial-gradient(circle at 40% 35%,#5a8a5a,#2a4a2a);
  border-color:rgba(0,180,0,0.5);
  box-shadow:0 0 8px rgba(0,180,0,0.3),0 2px 4px rgba(0,0,0,0.4),inset 0 1px 0 rgba(255,255,255,0.15);
}
.zvent .zv-power.on::after{color:#0c0;}

/* ---------- disabled controls ---------- */
.zvent .controls-off .zv-side-btn,
.zvent .controls-off .zv-dial-btn,
.zvent .controls-off .zv-act,
.zvent .controls-off .zv-mute,
.zvent .controls-limited .zv-side-btn,
.zvent .controls-limited .zv-dial-btn,
.zvent .controls-limited .zv-cancel,
.zvent .controls-limited button.zv-cell{
  opacity:0.35;pointer-events:none;
}

/* ---------- wide layout ---------- */
@container zvent (min-width:600px){
  .zvent .zv-body{flex-direction:row;}
  .zvent .zv-wave{flex:1;height:auto;min-height:300px;}
  .zvent.zv-teaching .zv-wave{height:auto;min-height:380px;}
  .zvent .zv-params{
    width:130px;flex-shrink:0;grid-template-columns:1fr;
    border-top:0;border-left:1px solid var(--lcd-grid);
  }
  .zvent .zv-cell{min-height:44px;flex:1;}
  .zvent .zv-cell-val{font-size:20px;}
  .zvent .zv-side{width:64px;}
  .zvent .zv-side-btn{font-size:12px;}
  .zvent .zv-alarm-msg{font-size:12px;}
  .zvent .zv-aux-label{font-size:8px;}
  .zvent .zv-aux-val{font-size:13px;}
  .zvent .zv-post-brand{font-size:32px;}
}

/* ---------- reduced motion: steady visuals ---------- */
@media (prefers-reduced-motion:reduce){
  .zvent .zv-alarmbar.pri-high{animation:none;background:#7a0a0a;}
  .zvent .zv-red.on{animation:none;}
  .zvent .zv-connect{animation:none;box-shadow:0 0 0 3px rgba(0,180,0,0.45);}
}
