/* Interactive cluster map for the Kubernetes course. Colors come from the site theme via diagrams.css. */
.k8s-map {
  border: 1px solid var(--border);
  border-radius: 10px;
  background: var(--surface);
  padding: 0.75rem;
}

.k8s-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: center;
  margin-bottom: 0.6rem;
}

.k8s-toolbar .hint {
  color: var(--muted);
  font-size: 0.85rem;
  margin-right: auto;
}

.k8s-btn {
  font: inherit;
  font-size: 0.85rem;
  padding: 0.35rem 0.75rem;
  border-radius: 6px;
  border: 1px solid var(--border);
  background: var(--surface-2);
  color: var(--text);
  cursor: pointer;
}

.k8s-btn:hover {
  border-color: var(--accent);
}

.k8s-btn.primary {
  background: var(--color-accent-fill);
  border-color: var(--color-accent-fill);
  color: var(--color-accent-contrast);
  font-weight: 650;
}

.k8s-btn[disabled] {
  opacity: 0.45;
  cursor: default;
}

.k8s-map .fig {
  margin: 0;
}

.k8s-map .dg {
  border: 0;
}

/* Nodes */
.dg .k8s-node {
  cursor: pointer;
  outline: none;
}

.dg .k8s-node rect.bx {
  transition: stroke-width 0.15s, opacity 0.2s;
}

.dg .k8s-node:hover rect.bx {
  stroke-width: 2;
}

.dg .k8s-node:focus-visible rect.bx {
  stroke: var(--focus);
  stroke-width: 3;
}

.dg .k8s-node.is-sel rect.bx {
  stroke: var(--accent);
  stroke-width: 2.6;
}

.dg .k8s-root text {
  fill: #fff;
}

.dg .k8s-root rect.bx {
  fill: #3949ab;
  stroke: #3949ab;
}

.dg .k8s-badge {
  font-size: 10.5px;
  fill: var(--muted);
  font-weight: 650;
}

.dg .k8s-root .k8s-badge {
  fill: #dfe3ff;
}

.dg .k8s-link {
  stroke: var(--muted);
  stroke-width: 1.3;
  fill: none;
  transition: opacity 0.2s;
}

/* Trace mode: everything not in the current step fades back */
.dg.is-tracing .k8s-node.is-dim,
.dg.is-tracing .k8s-link.is-dim {
  opacity: 0.25;
}

.dg .k8s-node.is-lit rect.bx {
  stroke: var(--warn);
  stroke-width: 3;
  fill: color-mix(in srgb, var(--warn) 22%, var(--surface));
}

.dg .k8s-root.is-lit rect.bx {
  fill: #3949ab;
}

.dg .k8s-link.is-lit {
  stroke: var(--warn);
  stroke-width: 2.2;
}

@media (prefers-reduced-motion: no-preference) {
  .dg .k8s-node.is-new {
    animation: k8s-in 0.28s ease-out;
  }

  .dg .k8s-node.is-lit rect.bx {
    animation: k8s-pulse 1.4s ease-in-out infinite;
  }
}

@keyframes k8s-in {
  from { opacity: 0; transform: translateX(-12px); }
  to { opacity: 1; transform: none; }
}

@keyframes k8s-pulse {
  50% { stroke-width: 1.5; }
}

/* Detail panel */
.k8s-detail {
  margin-top: 0.6rem;
  border-top: 1px solid var(--border);
  padding: 0.75rem 0.25rem 0.25rem;
  min-height: 9.5rem;
}

.k8s-detail h3 {
  margin: 0.1rem 0 0.35rem;
}

.k8s-detail p {
  margin: 0.35rem 0;
  max-width: 75ch;
}

.k8s-kind {
  display: inline-block;
  font-size: 0.75rem;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--muted);
  margin: 0;
}

.k8s-crumbs {
  font-size: 0.8rem;
  color: var(--muted);
}

.k8s-crumbs button {
  font: inherit;
  color: var(--accent);
  background: none;
  border: 0;
  padding: 0;
  cursor: pointer;
  text-decoration: underline;
}

.k8s-detail pre {
  margin: 0.5rem 0 0;
}

.k8s-step-nav {
  display: flex;
  gap: 0.5rem;
  align-items: center;
  margin-top: 0.6rem;
}

.k8s-step-count {
  font-size: 0.85rem;
  color: var(--muted);
  margin-right: auto;
}

/* Text version of the map */
.k8s-outline ul {
  margin: 0.25rem 0 0.25rem;
}

.k8s-outline li {
  margin: 0.2rem 0;
}

.k8s-outline .d {
  color: var(--muted);
}

.k8s-outline li > code {
  display: none;
}

ol.k8s-flow > li {
  margin: 0.45rem 0;
}

/* ── Shared widgets (k8s-ui.js) ─────────────────────────── */
.k8s-panel {
  border: 1px solid var(--border);
  border-radius: 10px;
  background: var(--surface);
  padding: 0.9rem;
  margin: 1rem 0 1.5rem;
}

.k8s-panel > .k8s-panel-title {
  margin: 0 0 0.6rem;
  font-weight: 650;
  font-size: 0.95rem;
}

/* Replica simulator */
.sim-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 0.75rem;
  align-items: center;
  margin-bottom: 0.9rem;
}

.sim-stat {
  font-size: 0.9rem;
  color: var(--muted);
}

.sim-stat b {
  color: var(--text);
  font-size: 1.1rem;
  margin-left: 0.2rem;
}

.sim-sq {
  width: 2rem;
  padding-inline: 0;
  font-weight: 700;
}

.sim-state {
  font-size: 0.85rem;
  font-weight: 650;
  padding: 0.15rem 0.55rem;
  border-radius: 999px;
  margin-right: auto;
}

.sim-state:empty {
  padding: 0;
}

.sim-state.is-ok {
  color: var(--good);
  background: color-mix(in srgb, var(--good) 12%, var(--surface));
}

.sim-state.is-busy {
  color: var(--warn);
  background: color-mix(in srgb, var(--warn) 14%, var(--surface));
}

.sim-stage {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.25rem;
}

.sim-box {
  display: flex;
  flex-direction: column;
  align-items: center;
  border-radius: 8px;
  padding: 0.45rem 1.1rem;
  min-width: 14rem;
  text-align: center;
  border: 1px solid;
}

.sim-box span {
  font-size: 0.78rem;
  color: var(--muted);
}

.sim-owner {
  background: color-mix(in srgb, #6d5fd8 14%, var(--surface));
  border-color: #6d5fd8;
}

.sim-owner.is-none {
  background: var(--surface-2);
  border-color: var(--border);
  border-style: dashed;
}

.sim-svc {
  background: color-mix(in srgb, var(--warn) 16%, var(--surface));
  border-color: var(--warn);
}

.sim-client {
  background: var(--surface-2);
  border-color: var(--border);
}

.sim-arrow {
  font-size: 0.78rem;
  color: var(--muted);
  min-height: 1.1rem;
}

.sim-pods {
  list-style: none;
  margin: 0.2rem 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 0.6rem;
}

.sim-pod,
.sim-empty {
  width: 9.5rem;
  border: 1px solid var(--good);
  background: color-mix(in srgb, var(--good) 12%, var(--surface));
  border-radius: 8px;
  padding: 0.45rem 0.55rem 0.5rem;
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
  font-size: 0.8rem;
  transition: transform 0.2s, opacity 0.3s, background 0.3s, border-color 0.3s;
}

.sim-empty {
  border-style: dashed;
  border-color: var(--border);
  background: none;
  color: var(--muted);
  text-align: center;
  justify-content: center;
}

.sim-pod-tag {
  font-size: 0.65rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--muted);
}

.sim-pod-name {
  font-weight: 700;
  font-size: 0.9rem;
}

.sim-pod-name em {
  font-style: normal;
  font-size: 0.68rem;
  font-weight: 650;
  color: var(--color-accent-contrast);
  background: var(--color-accent-fill);
  border-radius: 4px;
  padding: 0 0.3rem;
  vertical-align: 1px;
}

.sim-pod-ip,
.sim-pod-ctr {
  font-family: var(--mono);
  font-size: 0.72rem;
  color: var(--muted);
}

.sim-pod-st {
  font-weight: 650;
  color: var(--good);
}

.sim-crash {
  font: inherit;
  font-size: 0.75rem;
  margin-top: 0.25rem;
  border: 1px solid var(--bad);
  color: var(--bad);
  background: var(--surface);
  border-radius: 5px;
  padding: 0.15rem 0;
  cursor: pointer;
}

.sim-crash:hover {
  background: color-mix(in srgb, var(--bad) 10%, var(--surface));
}

.sim-pod.is-pending {
  border-style: dashed;
  border-color: var(--warn);
  background: color-mix(in srgb, var(--warn) 12%, var(--surface));
}

.sim-pod.is-pending .sim-pod-st {
  color: var(--warn);
}

.sim-pod.is-crashed,
.sim-pod.is-stopping {
  border-color: var(--bad);
  background: color-mix(in srgb, var(--bad) 12%, var(--surface));
  opacity: 0.7;
}

.sim-pod.is-crashed .sim-pod-st,
.sim-pod.is-stopping .sim-pod-st {
  color: var(--bad);
}

.sim-pod.is-hit {
  border-color: var(--warn);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--warn) 45%, transparent);
}

@media (prefers-reduced-motion: no-preference) {
  .sim-pod.is-hit {
    transform: translateY(-4px);
  }

  .sim-pod.is-fresh.is-pending {
    animation: k8s-in 0.3s ease-out;
  }
}

.sim-log {
  list-style: none;
  margin: 0.9rem 0 0;
  padding: 0.5rem 0.75rem;
  border-radius: 8px;
  background: var(--sunken, var(--surface-2));
  font-family: var(--mono);
  font-size: 0.78rem;
  min-height: 6.5rem;
}

.sim-log li {
  margin: 0.15rem 0;
  color: var(--muted);
}

.sim-log li:first-child {
  color: var(--text);
}

.sim-log li.is-bad:first-child { color: var(--bad); }
.sim-log li.is-good:first-child { color: var(--good); }
.sim-log li.is-warn:first-child { color: var(--warn); }

/* Pick-one quiz */
.k8s-quiz {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  gap: 0.5rem;
}

.k8s-quiz > li {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 0.35rem 0.75rem;
  align-items: center;
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 0.5rem 0.7rem;
  background: var(--surface);
}

.k8s-quiz .opts {
  display: flex;
  gap: 0.35rem;
}

.k8s-quiz [aria-pressed="true"] {
  font-weight: 700;
}

.k8s-quiz li.is-right {
  border-color: var(--good);
}

.k8s-quiz li.is-wrong {
  border-color: var(--bad);
}

.k8s-quiz .why {
  grid-column: 1 / -1;
  margin: 0;
  font-size: 0.88rem;
  color: var(--muted);
}

.k8s-quiz .is-right .mark { color: var(--good); font-weight: 700; }
.k8s-quiz .is-wrong .mark { color: var(--bad); font-weight: 700; }

.k8s-score {
  font-size: 0.85rem;
  color: var(--muted);
  margin: 0.5rem 0 0;
  min-height: 1.2em;
}

@media (max-width: 560px) {
  .k8s-quiz > li {
    grid-template-columns: 1fr;
  }
}

/* Explore + views */
.dg [data-part] {
  cursor: pointer;
  outline: none;
}

.dg [data-part]:hover .bx,
.dg [data-part]:hover.bx {
  stroke-width: 2;
}

.dg [data-part]:focus-visible .bx {
  stroke: var(--focus);
  stroke-width: 3;
}

.dg [data-part].is-sel .bx {
  stroke: var(--accent);
  stroke-width: 2.6;
}

.k8s-info {
  border-top: 1px solid var(--border);
  margin-top: 0.6rem;
  padding: 0.6rem 0.25rem 0;
  min-height: 6rem;
}

.k8s-info h3 {
  margin: 0 0 0.3rem;
}

.k8s-info p {
  margin: 0.3rem 0;
  max-width: 75ch;
}

.k8s-switch {
  display: inline-flex;
  border: 1px solid var(--border);
  border-radius: 8px;
  overflow: hidden;
  margin-bottom: 0.75rem;
}

.k8s-switch button {
  font: inherit;
  font-size: 0.88rem;
  border: 0;
  background: var(--surface);
  color: var(--muted);
  padding: 0.4rem 0.85rem;
  cursor: pointer;
}

.k8s-switch button + button {
  border-left: 1px solid var(--border);
}

.k8s-switch button[aria-pressed="true"] {
  background: var(--color-accent-fill);
  color: var(--color-accent-contrast);
  font-weight: 650;
}

.k8s-cards {
  display: grid;
  gap: 0.75rem;
  grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
  margin: 1rem 0 1.5rem;
}

.k8s-cards .card h3 {
  margin-bottom: 0.25rem;
}

.k8s-cards .card p {
  margin: 0.25rem 0 0;
  color: var(--muted);
  font-size: 0.92rem;
}

.k8s-cards pre {
  margin: 0.5rem 0 0;
  font-size: 0.8rem;
}

.k8s-roadmap {
  counter-reset: road;
  list-style: none;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  margin: 0.75rem 0 1rem;
}

.k8s-roadmap li {
  counter-increment: road;
  border: 1px solid var(--border);
  border-radius: 999px;
  padding: 0.2rem 0.75rem 0.2rem 0.3rem;
  font-size: 0.88rem;
  background: var(--surface);
}

.k8s-roadmap li::before {
  content: counter(road);
  display: inline-grid;
  place-items: center;
  width: 1.4rem;
  height: 1.4rem;
  border-radius: 50%;
  margin-right: 0.4rem;
  font-size: 0.75rem;
  font-weight: 700;
  background: var(--surface-2);
}

.k8s-roadmap li.is-done::before {
  background: var(--good);
  color: #fff;
}

.k8s-panel .dg {
  border: 0;
}

.k8s-switch {
  flex-wrap: wrap;
}

/* Clickable YAML */
.yaml-x [data-part] {
  cursor: pointer;
  border-radius: 3px;
  outline: none;
  box-shadow: inset 0 -1px 0 color-mix(in srgb, currentColor 35%, transparent);
}

.yaml-x [data-part]:hover,
.yaml-x [data-part]:focus-visible {
  background: color-mix(in srgb, var(--warn) 30%, transparent);
}

.yaml-x [data-part].is-sel {
  background: color-mix(in srgb, var(--warn) 45%, transparent);
  box-shadow: none;
}

/* Lifecycle stepper */
.lc-phases {
  list-style: none;
  padding: 0;
  margin: 0.25rem 0 0.75rem;
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.lc-phases li {
  border: 1px solid var(--border);
  border-radius: 999px;
  padding: 0.25rem 0.8rem;
  font-size: 0.85rem;
  color: var(--muted);
  background: var(--surface);
}

.lc-phases li.is-past {
  color: var(--text);
  border-style: dashed;
}

.lc-phases li.is-now {
  color: var(--text);
  font-weight: 700;
  border-width: 2px;
  border-color: var(--accent);
  background: color-mix(in srgb, var(--accent) 12%, var(--surface));
}

.lc-phases li.lc-failed.is-now {
  border-color: var(--bad);
  background: color-mix(in srgb, var(--bad) 12%, var(--surface));
}

.lc-phases li.lc-succeeded.is-now,
.lc-phases li.lc-running.is-now {
  border-color: var(--good);
  background: color-mix(in srgb, var(--good) 12%, var(--surface));
}

.lc-phases li.lc-pending.is-now,
.lc-phases li.lc-unknown.is-now {
  border-color: var(--warn);
  background: color-mix(in srgb, var(--warn) 14%, var(--surface));
}

.lc-get {
  margin: 0.25rem 0;
}

.lc-text {
  min-height: 3em;
}

/* Port clash lab */
.ports-pod {
  border: 1px dashed var(--border);
  border-radius: 12px;
  padding: 0.75rem 1rem 1rem;
}

.ports-title {
  margin: 0 0 0.6rem;
  font-weight: 650;
  color: var(--accent);
}

.ports-row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
}

.ports-ctr {
  flex: 1 1 12rem;
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 0.6rem 0.75rem;
  background: var(--surface-2);
}

.ports-ctr span {
  font-size: 0.8rem;
  color: var(--muted);
}

.ports-ctr select {
  font: inherit;
  font-family: var(--mono);
  padding: 0.25rem;
  border-radius: 5px;
  border: 1px solid var(--border);
  background: var(--surface);
  color: var(--text);
  width: 7rem;
}

.ports-ctr.is-good {
  border-color: var(--good);
  background: color-mix(in srgb, var(--good) 12%, var(--surface));
}

.ports-ctr.is-bad {
  border-color: var(--bad);
  background: color-mix(in srgb, var(--bad) 12%, var(--surface));
}

.ports-out {
  margin: 0.75rem 0 0;
  padding: 0.5rem 0.75rem;
  border-radius: 8px;
  font-size: 0.92rem;
}

.ports-out.is-bad {
  background: color-mix(in srgb, var(--bad) 10%, var(--surface));
}

.ports-out.is-good {
  background: color-mix(in srgb, var(--good) 10%, var(--surface));
}

/* Labels lab */
.lab-rs {
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem 1rem;
  align-items: baseline;
  border: 1px solid #6d5fd8;
  background: color-mix(in srgb, #6d5fd8 12%, var(--surface));
  border-radius: 8px;
  padding: 0.5rem 0.8rem;
  margin-bottom: 0.75rem;
}

.lab-rs span {
  font-size: 0.85rem;
  color: var(--muted);
}

.lab-rs .lab-count {
  margin-left: auto;
  color: var(--text);
  font-weight: 650;
}

.lab-pods {
  justify-content: flex-start;
}

.lab-pod.is-nomatch {
  border-color: var(--border);
  border-style: dashed;
  background: var(--surface-2);
}

.lab-label {
  font-family: var(--mono);
  font-size: 0.78rem;
  margin-top: 0.25rem;
}

.lab-label select {
  font: inherit;
  border: 1px solid var(--border);
  border-radius: 4px;
  background: var(--surface);
  color: var(--text);
}

.sim-hint {
  font-size: 0.85rem;
  color: var(--muted);
  margin-right: auto;
}

/* Rollout simulator */
.ro-dep {
  margin: 0 auto 0.75rem;
  max-width: 26rem;
}

.ro-rss {
  display: grid;
  gap: 0.6rem;
}

.ro-rs {
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 0.5rem 0.7rem;
  background: var(--surface);
  transition: opacity 0.3s;
}

.ro-rs.is-active {
  border-color: var(--accent);
  border-width: 2px;
}

.ro-rs.is-empty {
  opacity: 0.6;
}

.ro-rs-head {
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem 0.75rem;
  align-items: baseline;
  margin-bottom: 0.4rem;
}

.ro-rs-head span {
  font-size: 0.8rem;
  color: var(--muted);
  font-family: var(--mono);
}

.ro-pods {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.ro-pod,
.ro-none {
  font-family: var(--mono);
  font-size: 0.75rem;
  border-radius: 6px;
  padding: 0.25rem 0.5rem;
  border: 1px solid var(--good);
  background: color-mix(in srgb, var(--good) 12%, var(--surface));
  display: flex;
  flex-direction: column;
}

.ro-pod span {
  font-family: var(--font);
  font-weight: 650;
  font-size: 0.72rem;
  color: var(--good);
}

.ro-pod.is-pending {
  border-style: dashed;
  border-color: var(--warn);
  background: color-mix(in srgb, var(--warn) 12%, var(--surface));
}

.ro-pod.is-pending span { color: var(--color-warning-text); }

.ro-pod.is-crash,
.ro-pod.is-stopping {
  border-color: var(--bad);
  background: color-mix(in srgb, var(--bad) 12%, var(--surface));
}

.ro-pod.is-crash span,
.ro-pod.is-stopping span { color: var(--bad); }

.ro-none {
  border: 1px dashed var(--border);
  background: none;
  color: var(--muted);
}

.sim-state.is-bad {
  color: var(--bad);
  background: color-mix(in srgb, var(--bad) 12%, var(--surface));
}

/* Story */
.story-step {
  min-height: 9rem;
}

.story-step pre {
  margin: 0.25rem 0 0.5rem;
}

.story-step p {
  margin: 0.35rem 0;
}

/* Comparison table: highlight a column */
.cmp-table td:first-child {
  font-weight: 650;
  white-space: nowrap;
}

.table-scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

.table-scroll .cmp-table {
  min-width: 40rem;
}

/* Let code blocks scroll inside grid cards instead of widening the page on phones */
.grid > *,
.k8s-cards > * {
  min-width: 0;
}

/* Env var playground */
.env-grid {
  display: grid;
  gap: 1rem;
  grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
}

.env-grid > * {
  min-width: 0;
}

.env-grid pre {
  margin: 0;
  min-height: 9rem;
}

.env-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1.3fr) auto;
  gap: 0.35rem;
  align-items: center;
  margin-bottom: 0.4rem;
}

.env-row input {
  font: inherit;
  font-family: var(--mono);
  font-size: 0.82rem;
  padding: 0.3rem 0.4rem;
  border: 1px solid var(--border);
  border-radius: 5px;
  background: var(--surface);
  color: var(--text);
  min-width: 0;
}

.env-row .k8s-btn {
  padding: 0.25rem 0.5rem;
}

.env-notes {
  list-style: none;
  padding: 0;
  margin: 0.75rem 0 0;
  display: grid;
  gap: 0.35rem;
  font-size: 0.88rem;
}

.env-notes li {
  border-radius: 6px;
  padding: 0.35rem 0.6rem;
}

.env-notes .is-bad { background: color-mix(in srgb, var(--bad) 12%, var(--surface)); }
.env-notes .is-warn { background: color-mix(in srgb, var(--warn) 14%, var(--surface)); }
.env-notes .is-tip { background: color-mix(in srgb, var(--accent) 10%, var(--surface)); }

/* ConfigMap update widget */
.cmu {
  display: grid;
  gap: 0.75rem;
  justify-items: center;
}

.cmu-pods {
  display: grid;
  gap: 0.75rem;
  grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
  width: 100%;
}

.cmu-pod {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
  border: 1px solid var(--good);
  background: color-mix(in srgb, var(--good) 10%, var(--surface));
  border-radius: 8px;
  padding: 0.6rem 0.75rem;
  transition: background 0.3s, border-color 0.3s;
}

.cmu-pod code {
  font-size: 0.8rem;
}

.cmu-val {
  font-family: var(--mono);
}

.cmu-pod.is-stale {
  border-color: var(--bad);
  background: color-mix(in srgb, var(--bad) 10%, var(--surface));
}

/* base64 widget */
.b64-in {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: center;
  margin-bottom: 0.4rem;
}

.b64-in input {
  font: inherit;
  font-family: var(--mono);
  padding: 0.3rem 0.5rem;
  border: 1px solid var(--border);
  border-radius: 5px;
  background: var(--surface);
  color: var(--text);
  min-width: 12rem;
}

.b64-chk {
  display: inline-flex;
  gap: 0.4rem;
  align-items: center;
  font-size: 0.9rem;
  margin-bottom: 0.75rem;
}

.b64-note {
  margin: 0.75rem 0 0;
  padding: 0.5rem 0.75rem;
  border-radius: 8px;
  background: color-mix(in srgb, var(--warn) 12%, var(--surface));
}

/* Scheduler + quota */
.sched-form label {
  display: inline-flex;
  gap: 0.35rem;
  align-items: center;
  font-size: 0.88rem;
}

.sched-form select,
.lim-col select,
.qos-grid select {
  font: inherit;
  font-family: var(--mono);
  font-size: 0.85rem;
  padding: 0.2rem 0.3rem;
  border: 1px solid var(--border);
  border-radius: 5px;
  background: var(--surface);
  color: var(--text);
}

.sched-nodes {
  display: grid;
  gap: 0.75rem;
  grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
}

.sched-node {
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 0.6rem 0.75rem;
  background: var(--surface-2);
}

.sched-bar {
  margin: 0.35rem 0;
}

.sched-lbl {
  display: block;
  font-size: 0.78rem;
  color: var(--muted);
  font-family: var(--mono);
}

.meter {
  position: relative;
  display: block;
  height: 0.6rem;
  border-radius: 999px;
  background: var(--sunken, var(--border));
  overflow: visible;
}

.meter > span {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: var(--good);
  transition: width 0.25s;
}

.meter > span.is-full,
.meter > span.is-warn {
  background: var(--warn);
}

.meter > span.is-bad {
  background: var(--bad);
}

.sched-node .ro-pods {
  margin-top: 0.5rem;
}

.sched-node .ro-pod .sim-crash,
[data-quota] .ro-pod .sim-crash {
  padding: 0 0.4rem;
  font-size: 0.7rem;
}

.sched-pending {
  margin-top: 0.75rem;
}

.quota-meters {
  display: grid;
  gap: 0.25rem 1rem;
  grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
  margin-bottom: 0.75rem;
}

.quota-lr {
  display: inline-flex;
  gap: 0.35rem;
  align-items: center;
  font-size: 0.85rem;
  color: var(--text);
}

/* Limits widget */
.lim-grid {
  display: grid;
  gap: 1rem;
  grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
}

.lim-col {
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 0.6rem 0.75rem;
}

.lim-col label {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  align-items: center;
  font-size: 0.88rem;
  margin-bottom: 0.4rem;
}

.lim-col input[type="range"] {
  width: 100%;
}

.lim-col output {
  font-family: var(--mono);
  font-weight: 700;
}

.lim-meter {
  height: 0.9rem;
  margin: 0.4rem 0;
}

.lim-meter i {
  position: absolute;
  top: -0.3rem;
  bottom: -0.3rem;
  width: 3px;
  margin-left: -1px;
  background: var(--text);
  border-radius: 2px;
}

.lim-out {
  font-size: 0.88rem;
  min-height: 3.6em;
  margin: 0.25rem 0 0;
}

.lim-get {
  margin: 0.75rem 0 0;
}

/* QoS widget */
.qos-grid {
  display: grid;
  gap: 0.5rem 1rem;
  grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
  margin-bottom: 0.75rem;
}

.qos-grid label {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
  font-family: var(--mono);
  font-size: 0.82rem;
}

.qos-badge {
  display: inline-block;
  margin: 0;
  padding: 0.25rem 0.75rem;
  border-radius: 999px;
  font-weight: 700;
}

.qos-guaranteed { background: color-mix(in srgb, var(--good) 18%, var(--surface)); color: var(--color-success-text); }
.qos-burstable { background: color-mix(in srgb, var(--warn) 18%, var(--surface)); color: var(--color-warning-text); }
.qos-besteffort,
.qos-badge.is-bad { background: color-mix(in srgb, var(--bad) 15%, var(--surface)); color: var(--color-danger-text); }

.qos-out {
  min-height: 6rem;
}

.qos-ladder {
  list-style: none;
  padding: 0;
  margin: 0.5rem 0 0;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0.35rem;
}

.qos-ladder li {
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 0.35rem 0.5rem;
  text-align: center;
  font-weight: 650;
  font-size: 0.85rem;
  color: var(--muted);
}

.qos-ladder li span {
  display: block;
  font-weight: 400;
  font-size: 0.75rem;
}

.qos-ladder li.is-now {
  color: var(--text);
  border: 2px solid var(--accent);
  background: color-mix(in srgb, var(--accent) 10%, var(--surface));
}

/* Phones: wide tables scroll sideways instead of widening the page */
@media (max-width: 640px) {
  main .def-table {
    display: block;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
}

.steps > li,
.steps pre {
  min-width: 0;
  max-width: 100%;
}

/* Networking widgets */
.bind-code {
  font-size: 0.9rem;
}

.bind-list {
  list-style: none;
  padding: 0;
  margin: 0.5rem 0 0;
  display: grid;
  gap: 0.4rem;
}

.bind-list li {
  display: flex;
  gap: 0.6rem;
  align-items: flex-start;
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 0.45rem 0.7rem;
}

.bind-list li > span:last-child {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  min-width: 0;
}

.bind-list code {
  font-size: 0.8rem;
}

.bind-list em {
  font-style: normal;
  font-family: var(--mono);
  font-size: 0.78rem;
  color: var(--color-danger-text);
}

.bind-list li.is-ok { border-color: var(--good); background: color-mix(in srgb, var(--good) 8%, var(--surface)); }
.bind-list li.is-bad { border-color: var(--bad); background: color-mix(in srgb, var(--bad) 8%, var(--surface)); }

.bind-mark {
  font-weight: 700;
  font-size: 1.1rem;
}

.is-ok > .bind-mark { color: var(--good); }
.is-bad > .bind-mark { color: var(--color-danger-text); }

.cidr-form {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1.25rem;
  margin-bottom: 0.75rem;
}

.cidr-form label {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
  font-size: 0.85rem;
  min-width: 0;
}

.cidr-form select,
.cidr-form input {
  font: inherit;
  font-family: var(--mono);
  font-size: 0.85rem;
  padding: 0.3rem 0.4rem;
  border: 1px solid var(--border);
  border-radius: 5px;
  background: var(--surface);
  color: var(--text);
  max-width: 100%;
}

.cidr-out pre {
  font-size: 0.75rem;
}

.dns-tries {
  margin: 0;
  padding-left: 1.2rem;
  display: grid;
  gap: 0.3rem;
  font-size: 0.85rem;
}

.dns-tries code {
  font-size: 0.78rem;
  word-break: break-all;
}

.dns-tries .is-miss { color: var(--muted); }
.dns-tries .is-ok { color: var(--good); }

/* Ingress router */
.ing-table tr.is-hit td {
  background: color-mix(in srgb, var(--good) 16%, var(--surface));
  font-weight: 650;
}

.b64-in input[data-url] {
  flex: 1 1 18rem;
}

/* NetworkPolicy grid */
.np-pols {
  display: grid;
  gap: 0.4rem;
  grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
  margin-bottom: 0.75rem;
}

.np-pol {
  display: flex;
  gap: 0.5rem;
  align-items: flex-start;
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 0.45rem 0.6rem;
  cursor: pointer;
}

.np-pol span {
  display: flex;
  flex-direction: column;
  min-width: 0;
}

.np-pol code {
  font-size: 0.8rem;
}

.np-pol small {
  color: var(--muted);
  font-size: 0.78rem;
}

.np-pol:has(input:checked) {
  border-color: var(--accent);
  background: color-mix(in srgb, var(--accent) 8%, var(--surface));
}

.np-grid th,
.np-grid td {
  text-align: center;
}

.np-cell {
  font: inherit;
  font-weight: 700;
  width: 2.2rem;
  height: 2rem;
  border-radius: 6px;
  cursor: pointer;
  border: 1px solid;
}

.np-cell.is-ok { color: var(--good); border-color: var(--good); background: color-mix(in srgb, var(--good) 12%, var(--surface)); }
.np-cell.is-bad { color: var(--bad); border-color: var(--bad); background: color-mix(in srgb, var(--bad) 12%, var(--surface)); }
.np-cell.is-sel { outline: 3px solid var(--accent); outline-offset: 1px; }
.np-self { color: var(--muted); }

/* What survives */
.sv-grid {
  display: grid;
  gap: 0.6rem;
  grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
  margin: 0.5rem 0;
}

.sv-card {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  border: 1px solid;
  border-radius: 8px;
  padding: 0.6rem 0.7rem;
}

.sv-card em {
  font-style: normal;
  font-size: 0.78rem;
  color: var(--warn);
}

.sv-card.is-ok { border-color: var(--good); background: color-mix(in srgb, var(--good) 10%, var(--surface)); }
.sv-card.is-bad { border-color: var(--border); border-style: dashed; background: var(--surface-2); }

/* PV table */
.pv-table tr.pv-bound td { background: color-mix(in srgb, var(--good) 12%, var(--surface)); }
.pv-table tr.pv-released td { background: color-mix(in srgb, var(--warn) 14%, var(--surface)); }

/* Long Kubernetes words (PersistentVolumeClaims) must wrap on phones */
main h1,
main h2,
main h3 {
  overflow-wrap: anywhere;
}

/* Shutdown timeline */
.sd-time {
  margin: 0.5rem 0;
}

.sd-axis {
  position: relative;
  height: 2.6rem;
  margin-left: 5.5rem;
}

.sd-mark {
  position: absolute;
  top: 0;
  bottom: -6.5rem;
  border-left: 2px dashed var(--muted);
  padding-left: 0.25rem;
  font-size: 0.72rem;
  white-space: nowrap;
  pointer-events: none;
}

.sd-mark.is-term { border-color: var(--warn); }
.sd-mark.is-kill { border-color: var(--bad); top: 1.2rem; }
.sd-mark.is-right {
  border-left: 0;
  border-right: 2px dashed var(--muted);
  padding-left: 0;
  padding-right: 0.25rem;
  transform: translateX(-100%);
  text-align: right;
}

.sd-mark.is-term.is-right { border-right-color: var(--warn); }
.sd-mark.is-kill.is-right { border-right-color: var(--bad); }

.sd-time {
  overflow-x: hidden;
}

.sd-row {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin: 0.35rem 0;
}

.sd-lbl {
  width: 5rem;
  flex: none;
  font-size: 0.8rem;
  font-weight: 650;
}

.sd-track {
  position: relative;
  flex: 1;
  height: 1.7rem;
  background: var(--surface-2);
  border-radius: 6px;
}

.sd-seg {
  position: absolute;
  top: 0;
  bottom: 0;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  font-size: 0.72rem;
  line-height: 1.7rem;
  padding: 0 0.35rem;
  border-radius: 6px;
}

.sd-seg.is-ok { background: color-mix(in srgb, var(--good) 30%, var(--surface)); }
.sd-seg.is-warn { background: color-mix(in srgb, var(--warn) 35%, var(--surface)); }
.sd-seg.is-off { background: var(--surface-2); color: var(--muted); }
.sd-seg.is-purple { background: color-mix(in srgb, #6d5fd8 30%, var(--surface)); }
.sd-seg.is-drain { background: color-mix(in srgb, var(--accent) 25%, var(--surface)); }

.sd-none {
  font-size: 0.75rem;
  color: var(--muted);
  padding-left: 0.4rem;
  line-height: 1.7rem;
}

/* Course home: chapter groups */
.lesson-part {
  margin: 1.75rem 0 0.25rem;
  font-size: 0.85rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--muted);
}

/* ── daemonsets widget ── */
/* DaemonSet nodes widget (also used by the PDB drain widget) */
.ds-opts {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem 1.2rem;
  font-size: 0.88rem;
  margin-bottom: 0.6rem;
}

.ds-opts label {
  display: inline-flex;
  gap: 0.35rem;
  align-items: center;
}

.ds-nodes {
  display: grid;
  gap: 0.6rem;
  grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
}

.ds-node {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 0.55rem 0.7rem;
  background: var(--surface-2);
  min-width: 0;
}

.ds-node.is-cp {
  border-style: dashed;
}

.ds-pod {
  font-family: var(--mono);
  font-size: 0.78rem;
  border: 1px solid var(--good);
  background: color-mix(in srgb, var(--good) 14%, var(--surface));
  border-radius: 6px;
  padding: 0.2rem 0.4rem;
  overflow-wrap: anywhere;
}

.ds-pod.is-wait {
  border-style: dashed;
  border-color: var(--warn);
  background: color-mix(in srgb, var(--warn) 14%, var(--surface));
}

.ds-skip {
  font-size: 0.78rem;
  color: var(--muted);
}

.ds-sum {
  grid-column: 1 / -1;
  margin: 0.2rem 0 0;
}

/* ── deployment-strategies widget ── */
/* Canary traffic widget */
.cn-lbl {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  align-items: center;
  font-size: 0.88rem;
}
.cn-lbl input[type="range"] { width: 100%; }
.cn-lbl output { font-family: var(--mono); font-weight: 700; }
.cn-dots {
  display: grid;
  grid-template-columns: repeat(20, 1fr);
  gap: 0.3rem;
  margin: 0.5rem 0;
}
.cn-dots span {
  aspect-ratio: 1;
  border-radius: 50%;
  border: 1px solid;
}
.cn-dots .is-v1 { background: color-mix(in srgb, var(--good) 35%, var(--surface)); border-color: var(--good); }
.cn-dots .is-v2 { background: color-mix(in srgb, var(--warn) 55%, var(--surface)); border-color: var(--warn); }

/* ── health-probes widget ── */
/* Probe simulator */
.pr-out.is-good { background: color-mix(in srgb, var(--good) 12%, var(--surface)); }
.pr-out.is-bad { background: color-mix(in srgb, var(--bad) 12%, var(--surface)); }
.pr-out.is-warn { background: color-mix(in srgb, var(--warn) 14%, var(--surface)); }

/* ── jobs-and-cronjobs widget ── */
/* Cron schedule explainer */
.cron-fields {
  display: grid;
  gap: 0.5rem;
  grid-template-columns: repeat(auto-fit, minmax(7.5rem, 1fr));
  margin: 0.5rem 0 0.75rem;
}

.cron-f {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 0.45rem 0.6rem;
  background: var(--surface);
}

.cron-f code {
  font-size: 1.05rem;
  font-weight: 700;
}

.cron-f span {
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--muted);
}

.cron-f small {
  font-size: 0.8rem;
}

.cron-f.is-bad {
  border-color: var(--bad);
  background: color-mix(in srgb, var(--bad) 10%, var(--surface));
}

/* ── rbac widget ── */
/* RBAC checker */
[data-rbac] .rbac-yes { background: color-mix(in srgb, var(--good) 14%, var(--surface)); }
[data-rbac] .rbac-no { background: color-mix(in srgb, var(--bad) 12%, var(--surface)); }
[data-rbac] .sched-form label { flex-wrap: wrap; }

/* ── scheduling widget ── */
.pl-form { display: flex; flex-wrap: wrap; gap: 0.5rem 1.25rem; margin-bottom: 0.75rem; font-size: 0.88rem; }
.pl-form label { display: inline-flex; gap: 0.35rem; align-items: center; }
.pl-form select { font: inherit; font-family: var(--mono); font-size: 0.85rem; border: 1px solid var(--border); border-radius: 5px; background: var(--surface); color: var(--text); }
.pl-nodes { display: grid; gap: 0.6rem; grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); }
.pl-node { display: flex; flex-direction: column; gap: 0.25rem; border: 1px solid; border-radius: 8px; padding: 0.55rem 0.7rem; min-width: 0; }
.pl-node.is-ok { border-color: var(--good); background: color-mix(in srgb, var(--good) 8%, var(--surface)); }
.pl-node.is-win { border: 2px solid var(--good); background: color-mix(in srgb, var(--good) 18%, var(--surface)); }
.pl-node.is-win .sim-hint { color: color-mix(in srgb, var(--text) 25%, var(--muted)); }
.pl-node.is-bad { border-color: var(--border); border-style: dashed; background: var(--surface-2); }
.pl-taint { font-size: 0.72rem; color: var(--color-warning-text); word-break: break-all; }
.pl-verdict { font-size: 0.82rem; font-weight: 650; }
.pl-node.is-bad .pl-verdict { color: var(--color-danger-text); font-weight: 400; }

/* ── security-context widget ── */
.sc-ladder { grid-template-columns: 1fr; }

/* ── statefulsets widget ── */
/* StatefulSet scale widget */
.sts-pol {
  display: inline-flex;
  gap: 0.35rem;
  align-items: center;
  font-size: 0.85rem;
  font-family: var(--mono);
}

.ro-pod.sts-orphan {
  border-style: dashed;
  border-color: var(--warn);
  background: color-mix(in srgb, var(--warn) 12%, var(--surface));
}

.ro-pod.sts-orphan span {
  color: var(--warn);
}

/* Widget forms: long option labels and inline code must not widen the page on phones */
.sched-form label {
  min-width: 0;
  max-width: 100%;
}

.sched-form select {
  max-width: 100%;
}

.k8s-panel .checklist code,
.k8s-panel .b64-note code {
  overflow-wrap: anywhere;
}
