/* Material for MkDocs caps its article column at ~810px for prose
   readability (.md-content) and reserves a right-hand column for the
   table-of-contents sidebar (.md-main__inner.md-grid, capped ~1342px)
   -- both far too narrow for a 3-column circuit editor, which is why the
   canvas panel collapsed to ~170px and the Clear-grid button overlapped
   the panel title. Scoped with :has() so only the Composer page (the one
   page containing #de-composer-root) gets the wider layout; every other
   docs page keeps Material's normal reading width untouched. */
.md-content:has(#de-composer-root),
.md-content__inner:has(#de-composer-root) {
  max-width: none;
}
.md-main__inner.md-grid:has(#de-composer-root) {
  max-width: none;
  grid-template-columns: minmax(0, 1fr);
}

/* Palette matches local_site/mkdocs.yml's Material theme config:
   palette.primary = black, palette.accent = cyan. */
:root {
  --de-bg: #ffffff;
  --de-bg-panel: #f5f5f5;
  --de-border: #dcdcdc;
  --de-text: #1c1c1c;
  --de-text-dim: #5a5a5a;
  --de-navbar: #1c1c1c;
  --de-navbar-text: #ffffff;
  --de-accent: #00bcd4;
  --de-accent-dark: #00838f;
  --de-red: #da1e28;
  --de-navy: #3151d9;
  --de-blue: #4589ff;
  --de-purple: #8a3ffc;
  --de-gray: #8d8d8d;
}

@media (prefers-color-scheme: dark) {
  :root {
    --de-bg: #101418;
    --de-bg-panel: #181d23;
    --de-border: #2b323a;
    --de-text: #eef2f6;
    --de-text-dim: #9aa5b1;
    --de-navbar: #0c0f12;
  }
}

* { box-sizing: border-box; }

body {
  margin: 0;
  font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  background: var(--de-bg);
  color: var(--de-text);
}

.topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: var(--de-navbar);
  color: var(--de-navbar-text);
  padding: 0.75rem 1.25rem;
}
.topbar-left { display: flex; align-items: center; gap: 1rem; }
.logo { font-size: 1.4rem; }
.brand { font-weight: 700; font-size: 1.1rem; }
.toplinks { display: flex; gap: 1rem; margin-left: 1rem; }
.toplink { color: var(--de-accent); text-decoration: none; font-size: 0.9rem; }
.toplink:hover { text-decoration: underline; }

.pill {
  border-radius: 999px;
  padding: 0.25rem 0.75rem;
  font-size: 0.8rem;
  background: var(--de-accent-dark);
  color: white;
}

.layout { padding: 1.25rem; max-width: 1500px; margin: 0 auto; }

.toolbar {
  display: flex;
  align-items: end;
  gap: 1.25rem;
  flex-wrap: wrap;
  margin-bottom: 1rem;
  padding: 0.75rem 1rem;
  background: var(--de-bg-panel);
  border: 1px solid var(--de-border);
  border-radius: 8px;
}
.toolbar label {
  display: flex;
  flex-direction: column;
  font-size: 0.75rem;
  color: var(--de-text-dim);
  gap: 0.25rem;
}
.toolbar input, .toolbar select {
  font: inherit;
  padding: 0.35rem 0.5rem;
  border: 1px solid var(--de-border);
  border-radius: 4px;
  background: var(--de-bg);
  color: var(--de-text);
}

.btn {
  border: none;
  border-radius: 6px;
  padding: 0.5rem 1.1rem;
  font-weight: 600;
  cursor: pointer;
}
.btn-primary { background: var(--de-accent); color: #00232a; }
.btn-primary:hover { background: var(--de-accent-dark); color: white; }
.btn-ghost { background: transparent; border: 1px solid var(--de-border); color: var(--de-text); font-weight: 500; padding: 0.3rem 0.7rem; }

.status { font-size: 0.85rem; color: var(--de-text-dim); }
.status.error { color: var(--de-red); }

/* width:100% + minmax(0, 1fr) (not bare 1fr/1fr) -- a flexible grid track's
   automatic minimum is its content's min-content size, which let the
   circuit canvas panel refuse to shrink below ~900px of "free" space it
   never actually had, collapsing to a sliver and pushing the Clear-grid
   button out over the panel title. minmax(0, 1fr) removes that floor. */
.row { display: grid; gap: 1rem; margin-bottom: 1rem; width: 100%; }
.row-top { grid-template-columns: 200px minmax(0, 1fr) 340px; }
.row-bottom { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr); }
.row-extra { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }

/* Grid items default to min-width:auto, which stops them shrinking below
   their content's intrinsic width -- on a narrower window that pushed
   buttons/chips past their panel's edge instead of wrapping. min-width:0
   lets every panel shrink properly; narrow viewports collapse the fixed
   3-column layout to one column instead of overflowing it. */
.row > * { min-width: 0; }
@media (max-width: 900px) {
  .row-top, .row-bottom, .row-extra { grid-template-columns: 1fr; }
}

.panel {
  background: var(--de-bg-panel);
  border: 1px solid var(--de-border);
  border-radius: 8px;
  padding: 0.9rem 1rem;
  min-width: 0;
  overflow-x: auto;
}
.panel h3 {
  margin: 0 0 0.6rem 0;
  font-size: 0.85rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--de-text-dim);
}
.panel-head { display: flex; align-items: center; justify-content: space-between; }
.panel-head h3 { margin: 0; }

.palette {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0.4rem;
}
.chip {
  aspect-ratio: 1 / 1;
  border-radius: 8px;
  color: white;
  font-family: "SFMono-Regular", Consolas, monospace;
  font-weight: 700;
  font-size: 0.8rem;
  cursor: grab;
  display: flex; align-items: center; justify-content: center;
  text-align: center;
  user-select: none;
  box-shadow: 0 1px 2px rgba(0,0,0,0.25);
  transition: transform 0.08s ease;
}
.chip:hover { transform: translateY(-1px); }
.chip:active { cursor: grabbing; transform: scale(0.96); }

.element-palette {
  grid-template-columns: repeat(auto-fill, minmax(2.6rem, 1fr));
  max-height: 220px;
  overflow-y: auto;
}
.element-palette .chip {
  aspect-ratio: 1 / 1;
  cursor: pointer;
  background: var(--de-navy);
  font-size: 0.72rem;
}

/* Circuit canvas: qubit wires with gate tiles sitting on top, not a
   bordered spreadsheet grid -- matches how every real circuit editor
   (IBM Composer included) draws a circuit. */
.grid {
  position: relative;
  display: grid;
  gap: 0;
  overflow-x: auto;
  padding: 0.5rem 0;
}
.qlabel {
  font-size: 0.75rem;
  color: var(--de-text-dim);
  font-family: "SFMono-Regular", Consolas, monospace;
  text-align: right;
  padding-right: 8px;
  align-self: center;
}
.wire-row {
  position: relative;
  height: 38px;
  display: flex;
}
.wire-row::before {
  content: "";
  position: absolute;
  left: 0; right: 0; top: 50%;
  height: 2px;
  background: var(--de-border);
  transform: translateY(-1px);
  z-index: 0;
}
.cell {
  position: relative;
  z-index: 1;
  width: 38px; height: 38px;
  flex: 0 0 38px;
  display: flex; align-items: center; justify-content: center;
  font-size: 0.72rem;
  font-family: "SFMono-Regular", Consolas, monospace;
  cursor: pointer;
}
.cell.filled {
  width: 28px; height: 28px;
  margin: auto;
  border-radius: 6px;
  font-weight: 700;
  color: white;
  box-shadow: 0 1px 2px rgba(0,0,0,0.3);
}
.cell.filled.kind-control, .cell.filled.kind-target { width: 22px; height: 22px; border-radius: 50%; }
.cell.dragover { outline: 2px dashed var(--de-accent); border-radius: 6px; }

.connector {
  position: absolute;
  width: 2px;
  background: var(--de-navy);
  z-index: 0;
  pointer-events: none;
}

.code {
  width: 100%;
  min-height: 320px;
  font-family: "SFMono-Regular", Consolas, monospace;
  font-size: 0.8rem;
  background: var(--de-bg);
  color: var(--de-text);
  border: 1px solid var(--de-border);
  border-radius: 6px;
  padding: 0.6rem;
  resize: vertical;
}

.figure { width: 100%; height: auto; border-radius: 6px; background: white; }
/* Before a real src is set (page just loaded, or large-scale mode hides
   an image on purpose), the plain <img> would otherwise render as a
   blank white box (from the background above) with a broken-image icon
   -- neither is a real result, so hide it until an actual image exists. */
.figure:not([src]), .figure[src=""] { display: none; }

.sv-table { width: 100%; border-collapse: collapse; font-size: 0.8rem; font-family: "SFMono-Regular", Consolas, monospace; }
.sv-table th, .sv-table td { text-align: left; padding: 0.25rem 0.5rem; border-bottom: 1px solid var(--de-border); }

.row-hamiltonian { grid-template-columns: minmax(0, 1fr); }
.row-mitigation { grid-template-columns: minmax(0, 1fr); }
.panel-hamiltonian .hint { font-size: 0.85rem; color: var(--de-text-dim); margin: 0 0 0.8rem 0; }
.ham-row {
  display: flex;
  align-items: end;
  gap: 1rem;
  flex-wrap: wrap;
  margin-bottom: 0.8rem;
}
.ham-row label {
  display: flex;
  flex-direction: column;
  font-size: 0.75rem;
  color: var(--de-text-dim);
  gap: 0.25rem;
}
.ham-row select, .ham-row input {
  font: inherit;
  padding: 0.35rem 0.5rem;
  border: 1px solid var(--de-border);
  border-radius: 4px;
  background: var(--de-bg);
  color: var(--de-text);
}
.ham-geometry { min-height: 70px; width: 220px; font-size: 0.75rem; }
.ham-result {
  font-family: "SFMono-Regular", Consolas, monospace;
  font-size: 0.85rem;
  padding: 0.6rem 0.8rem;
  background: var(--de-bg);
  border: 1px solid var(--de-border);
  border-radius: 6px;
  min-height: 1.5rem;
  white-space: pre-wrap;
}

/* #de-composer-root.locked dims and disables the whole panel (published
   page, no local kernel answering yet) while #de-kernel-banner above it
   stays fully interactive -- the banner is a sibling, inserted just
   before the root, never a child, precisely so .locked's pointer-events:
   none can't also swallow clicks on its own Riprova button. */
#de-kernel-banner {
  margin-bottom: 1rem;
  padding: 0.75rem 1rem;
  border-radius: 8px;
  font-size: 0.85rem;
  line-height: 1.5;
}
#de-kernel-banner code {
  display: inline-block;
  margin: 0.15rem 0;
  padding: 0.1rem 0.5rem;
  border-radius: 4px;
  font-family: "SFMono-Regular", Consolas, monospace;
  font-size: 0.8rem;
}
#de-kernel-banner .btn { margin-top: 0.5rem; padding: 0.35rem 0.9rem; font-size: 0.85rem; }

.de-kernel-locked {
  background: color-mix(in srgb, var(--de-red) 10%, var(--de-bg));
  border: 1px solid color-mix(in srgb, var(--de-red) 35%, var(--de-border));
  color: var(--de-text);
}
.de-kernel-locked code {
  background: color-mix(in srgb, var(--de-red) 14%, var(--de-bg));
  border: 1px solid color-mix(in srgb, var(--de-red) 30%, var(--de-border));
}

.de-kernel-ok {
  background: color-mix(in srgb, var(--de-accent) 10%, var(--de-bg));
  border: 1px solid color-mix(in srgb, var(--de-accent) 35%, var(--de-border));
  color: var(--de-text-dim);
}

#de-composer-root.locked {
  opacity: 0.4;
  pointer-events: none;
  filter: grayscale(0.3);
}
.ham-result.error { color: var(--de-red); }
