@import url("/theme.css");

:root {
  --radius: var(--surface-radius);
  --viewer-control-size: var(--control-size);
  --viewer-control-radius: var(--control-radius);
  --viewer-content-max: 1440px;
  --viewer-inspector-min: 15rem;
  --viewer-inspector-max: 19rem;
  --viewer-scene-size: min(66vh, 620px);
  --viewer-scene-min: 300px;
}

*, *::before, *::after { box-sizing: border-box; }
html, body { min-width: 0; margin: 0; }
body.viewer-page {
  min-height: 100dvh;
  color: var(--text);
  background-color: var(--bg);
  background-image: var(--paper-texture);
  background-size: var(--paper-texture-size);
  font: 400 1rem/1.5 ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}
button, input { font: inherit; }
.viewer-page-main { width: min(100%, var(--viewer-content-max)); min-width: 0; margin-inline: auto; padding: clamp(.5rem, 2vw, 1rem); container-name: viewer; container-type: inline-size; }
.viewer-back {
  display: none;
  width: fit-content;
  min-height: 44px;
  align-items: center;
  margin-block-end: .75rem;
  color: var(--accent);
  text-underline-offset: .18em;
}
.is-standalone .viewer-back { display: inline-flex; }
.is-embedded .viewer-page-main { width: 100%; padding: 0; }
.is-embedded .viewer-shell { border: 0; border-radius: 0; box-shadow: none; }
.is-embedded .viewer-shell-heading { display: none; }
.viewer-shell { min-width: 0; overflow: hidden; border: 1px solid var(--line); border-radius: var(--radius); background: var(--paper-surface); background-size: var(--paper-texture-size); box-shadow: var(--shadow-raised); }
.viewer-shell-heading {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: .75rem 1.5rem;
  padding: 1rem 1.1rem;
  border-block-end: 1px solid var(--edge);
}
.viewer-shell-heading h1 { margin: 0; font-size: clamp(1.2rem, 2vw, 1.65rem); line-height: 1.25; }
.viewer-description { max-inline-size: 65ch; margin: .5rem 0 0; color: var(--muted); font-size: 1rem; line-height: 1.5; }
.viewer-status { max-width: 34rem; min-height: 1.5rem; margin: 0; color: var(--muted); overflow-wrap: anywhere; }
.viewer-status[data-state="ready"] { color: var(--accent); }
.viewer-status[data-state="error"], .viewer-motion-error { color: var(--status-error); }
.viewer-layout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(var(--viewer-inspector-min), var(--viewer-inspector-max)); min-width: 0; }
.viewer-primary { min-width: 0; }
.viewer-scene { position: relative; min-width: 0; background-color: var(--stage-bg); background-image: var(--draft-texture); background-size: 32px 32px; }
.viewer-canvas { display: block; width: 100%; height: var(--viewer-scene-size); min-height: var(--viewer-scene-min); touch-action: none; cursor: grab; }
.viewer-canvas:active { cursor: grabbing; }
.viewer-canvas:focus-visible { outline: 3px solid var(--stage-focus); outline-offset: -3px; }
.viewer-camera-group {
  position: absolute;
  --focus: var(--stage-focus);
  z-index: 1;
  inset-block-start: .75rem;
  inset-inline-end: .75rem;
  display: grid;
  grid-template-columns: repeat(4, minmax(var(--viewer-control-size), 1fr));
  gap: .35rem;
  width: min(18.5rem, calc(100% - 1.5rem));
}
.viewer-camera-group #fit { grid-column: span 2; }
.viewer-button {
  display: inline-flex;
  min-width: var(--viewer-control-size);
  min-height: var(--viewer-control-size);
  align-items: center;
  justify-content: center;
  gap: .45rem;
  padding: .5rem .7rem;
  border: 1px solid var(--edge);
  border-radius: var(--viewer-control-radius);
  color: var(--text);
  background: var(--surface-raised);
  cursor: pointer;
  text-align: center;
}
.viewer-button svg { width: 1.1rem; height: 1.1rem; flex: 0 0 auto; }
.viewer-button:disabled { opacity: .5; cursor: not-allowed; }
.viewer-button:focus-visible, .viewer-back:focus-visible, .viewer-range-input:focus-visible,
.viewer-component-select:focus-visible, .viewer-component-visibility input:focus-visible {
  outline: 3px solid var(--focus);
  outline-offset: 2px;
}
.viewer-button-primary { color: var(--accent-ink); border-color: var(--accent); background: var(--accent); font-weight: 650; }
@media (hover: hover) {
  .viewer-button:not(:disabled):hover { border-color: var(--accent); }
}
.viewer-canvas-hint {
  position: absolute;
  inset-inline-start: .75rem;
  inset-block-end: .65rem;
  max-width: calc(100% - 1.5rem);
  margin: 0;
  padding: .3rem .5rem;
  border-radius: 5px;
  color: var(--stage-text);
  background: var(--stage-bg);
  font-size: .78rem;
  pointer-events: none;
}
.viewer-motion-controls {
  display: grid;
  grid-template-columns: minmax(7.5rem, .45fr) minmax(0, 1.55fr);
  align-items: start;
  gap: .75rem 1rem;
  min-width: 0;
  padding: 1rem;
  border-block-start: 1px solid var(--edge);
}
.viewer-transport-group { display: flex; flex-wrap: wrap; gap: .5rem; }
.viewer-capability-group { display: flex; flex-wrap: wrap; align-items: start; gap: .6rem 1rem; min-width: 0; }
.viewer-capability-group > .viewer-button { flex: 0 1 auto; }
.viewer-labeled-range { display: grid; flex: 1 1 12rem; gap: .25rem; min-width: 0; }
.viewer-range-heading { display: flex; align-items: baseline; justify-content: space-between; gap: .6rem; }
.viewer-range-heading label { min-width: 0; color: var(--text); overflow-wrap: anywhere; }
.viewer-range-heading output { flex: 0 0 auto; color: var(--accent); font-variant-numeric: tabular-nums; }
.viewer-range-input { width: 100%; min-width: 0; min-height: 2.5rem; accent-color: var(--accent); }
.viewer-unit-note, .viewer-motion-error { grid-column: 1 / -1; margin: 0; color: var(--muted); font-size: .82rem; }
.viewer-motion-error { color: var(--status-error); }
.viewer-inspector { display: flex; flex-direction: column; min-width: 0; min-height: 0; border-inline-start: 1px solid var(--edge); background: var(--surface); }
.viewer-inspector-heading { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: .4rem .75rem; padding: .9rem .85rem .65rem; }
.viewer-inspector-heading h2 { margin: 0; font-size: 1rem; }
.viewer-inspector-heading output { color: var(--muted); font-variant-numeric: tabular-nums; }
.viewer-component-tools { display: flex; flex-wrap: wrap; gap: .4rem; padding: 0 .65rem .65rem; }
.viewer-component-tools .viewer-button { flex: 1 1 7rem; min-width: 0; padding-inline: .45rem; font-size: .82rem; }
.viewer-component-list { min-height: 0; max-height: var(--viewer-scene-size); overflow-y: auto; padding: 0 .55rem .75rem; overscroll-behavior: contain; }
.viewer-component-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: .45rem; min-width: 0; border-block-start: 1px solid var(--edge); }
.viewer-component-select {
  min-width: 0;
  min-height: var(--viewer-control-size);
  padding: .45rem .4rem;
  border: 1px solid transparent;
  border-radius: 6px;
  color: var(--text);
  background: transparent;
  text-align: start;
  overflow-wrap: anywhere;
  cursor: pointer;
}
.viewer-component-select[aria-pressed="true"] { border-color: var(--accent); background: var(--surface-raised); }
.viewer-component-visibility { display: flex; min-height: var(--viewer-control-size); align-items: center; gap: .35rem; padding-inline: .25rem; color: var(--muted); font-size: .82rem; cursor: pointer; }
.viewer-component-visibility input { width: 20px; height: 20px; accent-color: var(--accent); }
.viewer-motion-error { min-height: 1.4rem; }
.viewer-motion-error:empty { display: none; }

@container viewer (max-width: 760px) {
  .viewer-shell { --viewer-scene-size: min(58vh, 520px); --viewer-scene-min: 260px; }
  .viewer-layout { grid-template-columns: minmax(0, 1fr); }
  .viewer-inspector { border-inline-start: 0; border-block-start: 1px solid var(--edge); }
  .viewer-motion-controls { grid-template-columns: minmax(0, 1fr); }
  .viewer-component-list { max-height: 18rem; }
}
@container viewer (max-width: 420px) {
  .viewer-shell-heading { align-items: start; padding: .8rem; }
  .viewer-camera-group { width: min(16.75rem, calc(100% - 1rem)); inset-block-start: .5rem; inset-inline-end: .5rem; }
  .viewer-camera-group .viewer-button { min-width: var(--viewer-control-size); padding-inline: .35rem; }
  .viewer-motion-controls { padding: .75rem; }
  .viewer-component-tools .viewer-button { flex-basis: 6.5rem; }
}
@media (forced-colors: active) {
  .viewer-shell, .viewer-inspector, .viewer-button, .viewer-component-row, .viewer-component-select { border-color: CanvasText; }
  .viewer-component-select[aria-pressed="true"] { outline: 2px solid Highlight; }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { scroll-behavior: auto !important; transition-duration: .01ms !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; }
}
