/* ============================================
   KALEIDOSCOPE TOOL
   Hosted inside the Work / dark theme.
   Scope every rule under `.kaleidoscope-page` so none of this leaks.
   ============================================ */

.kaleidoscope-page .page-wrap {
  padding-top: calc(var(--nav-h) + 48px);
  padding-bottom: 48px;
}

/* The tool needs more horizontal room than the default 672px column — widen
   the container just on this page. Overriding --container-w means the site
   nav also picks up the wider value so the name stays aligned with the left
   edge of the content. */
.kaleidoscope-page {
  --container-w: 960px;
}

.kaleidoscope-page .kaleidoscope-header {
  padding-bottom: 36px;
  margin: 0 0 40px;
  border-bottom: 1px solid var(--w-border);
}

.kaleidoscope-page .kaleidoscope-header h1 {
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.35em;
  text-transform: uppercase;
  color: var(--w-muted);
  margin: 0 0 24px;
}

.kaleidoscope-page .kaleidoscope-intro {
  color: var(--w-muted);
  font-size: 14px;
  line-height: 1.6;
}

.kaleidoscope-page .kale-layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr);
  gap: 20px;
  align-items: start;
}

/* Panel spans the two right-hand columns of the outer layout. Inside, it's a
   2-column grid with auto row heights so each fieldset stays its own content
   height. Fieldsets explicitly pick a column via .kale-col-left; anything
   unmarked flows into the next available slot in the right column. */
.kaleidoscope-page .kale-panel {
  grid-column: span 2;
  display: grid;
  grid-template-columns: 1fr 1fr;
  column-gap: 20px;
  row-gap: 0;
  align-content: start;
}

.kaleidoscope-page .kale-panel fieldset {
  grid-column: 2;
}

.kaleidoscope-page .kale-panel fieldset.kale-col-left {
  grid-column: 1;
}

/* Pattern spans both columns and sub-divides its sliders into two columns
   so its controls aren't a tall single stack. */
.kaleidoscope-page .kale-panel fieldset.kale-wide {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: 1fr 1fr;
  column-gap: 20px;
  row-gap: 0;
}
.kaleidoscope-page .kale-panel fieldset.kale-wide legend {
  grid-column: 1 / -1;
}

/* Width + Height on one row inside Output size. */
.kaleidoscope-page .kale-panel .kale-inline {
  display: flex;
  gap: 12px;
}
.kaleidoscope-page .kale-panel .kale-inline label {
  flex: 1;
  min-width: 0;
}
.kaleidoscope-page .kale-panel .kale-inline input[type="number"] {
  width: 100%;
}

@media (max-width: 900px) {
  .kaleidoscope-page .kale-layout {
    grid-template-columns: minmax(0, 1fr) 260px;
  }
  .kaleidoscope-page .kale-panel {
    grid-column: auto;
    column-count: 1;
  }
}

@media (max-width: 720px) {
  .kaleidoscope-page .kale-layout {
    grid-template-columns: 1fr;
  }
}

.kaleidoscope-page .kale-stage {
  border: 1px solid var(--w-border);
  border-radius: 3px;
  padding: 12px;
  margin: 0;
  background: var(--w-bg);
  min-width: 0;
}

.kaleidoscope-page .kale-stage legend {
  margin-left: 6px;
}

.kaleidoscope-page .kale-stage #preview {
  display: block;
  margin: 0 auto;
}

.kaleidoscope-page #preview {
  display: block;
  max-width: 100%;
  max-height: 70vh;
  width: auto;
  height: auto;
  image-rendering: pixelated;
  image-rendering: crisp-edges;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.55);
  background: #000;
}

.kaleidoscope-page .kale-stage-controls {
  display: flex;
  gap: 12px;
  align-items: center;
  color: var(--w-muted);
  margin-top: 12px;
}

.kaleidoscope-page .kale-readout {
  font-variant-numeric: tabular-nums;
  font-size: 12px;
  color: var(--w-muted);
}

.kaleidoscope-page .kale-panel {
  padding: 0;
  color: var(--w-cream);
}

.kaleidoscope-page .kale-panel h2 {
  font-size: 13px;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--w-muted);
  margin: 0 0 14px;
}

.kaleidoscope-page .kale-panel fieldset {
  border: 1px solid var(--w-border);
  border-radius: 3px;
  padding: 12px;
  margin: 0 0 14px;
  background: var(--w-bg);
}

.kaleidoscope-page .kale-panel legend,
.kaleidoscope-page .kale-stage legend {
  padding: 0 6px;
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--w-muted);
}

.kaleidoscope-page .kale-panel label {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 4px;
  margin: 10px 0;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--w-muted);
}

/* Inline the value readout span back onto the label title row. */
.kaleidoscope-page .kale-panel label .kale-val {
  float: right;
  text-transform: none;
  letter-spacing: 0;
}

/* Checkbox labels use the same uppercase small-caps title as the sliders.
   The checkbox itself is restyled (muted square, cream check) to sit
   comfortably on the dark panel. Structure: <label>Title<input></label>,
   so the title stays above and the control below via the inherited
   flex-direction: column on .kale-panel label. */
.kaleidoscope-page .kale-panel label.kale-check input[type="checkbox"] {
  -webkit-appearance: none;
  appearance: none;
  width: 16px;
  height: 16px;
  border: 1px solid var(--w-border);
  background: var(--w-bg);
  border-radius: 2px;
  cursor: pointer;
  display: inline-block;
  position: relative;
  margin: 4px 0 0;
  transition: border-color 0.12s, background 0.12s;
}
.kaleidoscope-page .kale-panel label.kale-check input[type="checkbox"]:hover {
  border-color: var(--w-muted);
}
.kaleidoscope-page .kale-panel label.kale-check input[type="checkbox"]:checked {
  background: var(--w-muted);
  border-color: var(--w-muted);
}
.kaleidoscope-page .kale-panel label.kale-check input[type="checkbox"]:checked::after {
  content: "";
  position: absolute;
  left: 4px;
  top: 0;
  width: 5px;
  height: 10px;
  border: solid var(--w-cream);
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}

/* Dark-theme range sliders: muted track, cream thumb, low overall contrast. */
.kaleidoscope-page .kale-panel input[type="range"] {
  -webkit-appearance: none;
  appearance: none;
  width: 100%;
  min-width: 0;
  height: 18px;
  background: transparent;
  cursor: pointer;
  padding: 0;
  margin: 0;
}

.kaleidoscope-page .kale-panel input[type="range"]::-webkit-slider-runnable-track {
  height: 3px;
  background: var(--w-border);
  border-radius: 2px;
}
.kaleidoscope-page .kale-panel input[type="range"]::-moz-range-track {
  height: 3px;
  background: var(--w-border);
  border-radius: 2px;
  border: 0;
}
.kaleidoscope-page .kale-panel input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: var(--w-muted);
  margin-top: -4.5px;
  border: 0;
  transition: background 0.12s;
}
.kaleidoscope-page .kale-panel input[type="range"]::-moz-range-thumb {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  background: var(--w-muted);
  border: 0;
}
.kaleidoscope-page .kale-panel input[type="range"]:hover::-webkit-slider-thumb,
.kaleidoscope-page .kale-panel input[type="range"]:focus::-webkit-slider-thumb {
  background: var(--w-cream);
}
.kaleidoscope-page .kale-panel input[type="range"]:hover::-moz-range-thumb,
.kaleidoscope-page .kale-panel input[type="range"]:focus::-moz-range-thumb {
  background: var(--w-cream);
}
.kaleidoscope-page .kale-panel input[type="range"]:focus { outline: none; }

.kaleidoscope-page .kale-panel input[type="number"],
.kaleidoscope-page .kale-panel select {
  background: var(--w-surface);
  color: var(--w-cream);
  border: 1px solid var(--w-border);
  border-radius: 3px;
  padding: 4px 8px;
  font: inherit;
  font-family: var(--w-font);
  font-size: 11px;
}

.kaleidoscope-page .kale-panel input[type="number"] { width: 80px; }
.kaleidoscope-page .kale-panel select { width: 100%; }

.kaleidoscope-page .kale-val {
  font-variant-numeric: tabular-nums;
  color: var(--w-muted);
  min-width: 28px;
  text-align: right;
  font-size: 11px;
}

.kaleidoscope-page .kale-row {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin-top: 8px;
}

.kaleidoscope-page .kale-panel button {
  font-family: var(--w-font);
  font-size: 12px;
  cursor: pointer;
  border-radius: 3px;
  padding: 8px 12px;
  border: 1px solid var(--w-border);
  background: transparent;
  color: var(--w-cream);
  transition: border-color 0.12s, background 0.12s;
}

.kaleidoscope-page .kale-panel button:hover { border-color: var(--w-muted); }
.kaleidoscope-page .kale-panel button:disabled { opacity: 0.5; cursor: not-allowed; }

.kaleidoscope-page .kale-panel button.primary {
  background: var(--w-coral);
  border-color: var(--w-coral);
  color: var(--w-cream);
  width: 100%;
  padding: 10px;
  font-weight: 500;
  margin-top: 6px;
}
.kaleidoscope-page .kale-panel button.primary:hover {
  background: var(--w-cream);
  color: var(--w-bg);
  border-color: var(--w-cream);
}

.kaleidoscope-page .kale-panel button.small { padding: 4px 8px; font-size: 11px; }

.kaleidoscope-page .kale-swatches {
  display: flex;
  gap: 4px;
  margin-top: 8px;
  margin-left: 12px;
  flex-wrap: wrap;
}

.kaleidoscope-page .kale-swatches .kale-swatch {
  position: relative;
  width: 22px;
  height: 22px;
  border-radius: 2px;
  display: inline-block;
}

.kaleidoscope-page .kale-swatches .kale-swatch.editable {
  cursor: pointer;
}
.kaleidoscope-page .kale-swatches .kale-swatch.editable:hover {
  outline: 1px solid var(--w-cream);
  outline-offset: 1px;
}

.kaleidoscope-page .kale-swatch-remove {
  position: absolute;
  inset: 0;
  width: auto;
  height: auto;
  border: 0;
  background: transparent;
  color: #fff;
  font-size: 14px;
  line-height: 1;
  padding: 0;
  cursor: pointer;
  font-family: var(--w-font);
  text-shadow: 0 0 2px rgba(0, 0, 0, 0.85);
  display: flex;
  align-items: center;
  justify-content: center;
}

.kaleidoscope-page .kale-custom-controls {
  display: flex;
  gap: 6px;
  margin-top: 10px;
}

.kaleidoscope-page .kale-progress {
  margin-top: 10px;
  font-size: 11px;
  color: var(--w-muted);
}

.kaleidoscope-page .kale-progress .bar {
  background: var(--w-surface);
  border: 1px solid var(--w-border);
  border-radius: 999px;
  height: 6px;
  overflow: hidden;
  margin-bottom: 6px;
}

.kaleidoscope-page .kale-progress .fill {
  height: 100%;
  width: 0%;
  background: var(--w-coral);
  transition: width 0.12s;
}

/* Custom color picker popover. Lives in <body> (not scoped to .kaleidoscope-page)
   so positioning math doesn't have to fight the page wrap; theme tokens are
   inlined since they aren't inherited from the page-scoped tree. */
.kale-color-popover {
  position: fixed;
  z-index: 1000;
  width: 220px;
  padding: 10px;
  background: var(--w-surface);
  border: 1px solid var(--w-border);
  border-radius: 4px;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.55);
  display: flex;
  flex-direction: column;
  gap: 8px;
  font-family: var(--w-font);
  color: var(--w-cream);
}
.kale-color-popover[hidden] { display: none; }

.kale-color-popover .kcp-sv {
  position: relative;
  width: 100%;
  aspect-ratio: 1 / 1;
  border-radius: 3px;
  border: 1px solid var(--w-border);
  cursor: crosshair;
  user-select: none;
  touch-action: none;
  overflow: hidden;
}
.kale-color-popover .kcp-sv-handle {
  position: absolute;
  width: 12px;
  height: 12px;
  margin: -6px 0 0 -6px;
  border: 2px solid #fff;
  border-radius: 50%;
  pointer-events: none;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.55);
}

.kale-color-popover .kcp-hue {
  position: relative;
  width: 100%;
  height: 12px;
  border-radius: 6px;
  background: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00);
  cursor: ew-resize;
  user-select: none;
  touch-action: none;
}
.kale-color-popover .kcp-hue-handle {
  position: absolute;
  top: 50%;
  width: 6px;
  height: 18px;
  margin: -9px 0 0 -3px;
  border: 2px solid #fff;
  border-radius: 2px;
  pointer-events: none;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.55);
}

.kale-color-popover .kcp-row {
  display: flex;
  align-items: center;
  gap: 8px;
}
.kale-color-popover .kcp-preview {
  width: 24px;
  height: 24px;
  border: 1px solid var(--w-border);
  border-radius: 3px;
  flex: 0 0 auto;
}
.kale-color-popover .kcp-hex {
  flex: 1;
  background: var(--w-bg);
  color: var(--w-cream);
  border: 1px solid var(--w-border);
  border-radius: 3px;
  padding: 4px 8px;
  font: inherit;
  font-family: var(--w-font);
  font-size: 11px;
  text-transform: uppercase;
}
.kale-color-popover .kcp-hex:focus {
  outline: none;
  border-color: var(--w-muted);
}
