/* Mecha Forge's on-demand 3D inspection sheet. */
.file-links .forge-file { display: flex; flex-wrap: wrap; gap: var(--space-2xs); }
.forge-preview-button {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--space-xs);
  min-height: 44px; padding: var(--space-xs) var(--space-sm);
  border: var(--hair) solid var(--color-border); background: var(--color-primary-light);
  color: var(--color-primary-dark); font: inherit; font-size: var(--text-xs); font-weight: 700;
}
.forge-preview-button svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.4; }
.forge-preview-button:hover { border-color: var(--color-primary); background: var(--color-bg-secondary); }
.forge-dialog {
  width: min(1100px, 94vw); max-width: none; max-height: 94dvh;
  padding: 0; overflow: auto; color: var(--color-heading); background: var(--color-bg);
  border: var(--hair) solid var(--color-border);
}
.forge-dialog::backdrop { background: var(--color-modal-backdrop); }
.forge-dialog-head { display: flex; justify-content: space-between; align-items: start; gap: var(--space-lg); padding: var(--space-lg); border-bottom: var(--hair) solid var(--color-border); }
.forge-dialog-head h2 { font-size: var(--text-xl); margin: 0 0 var(--space-xs); }
.forge-dialog-head p { font-size: var(--text-xs); color: var(--color-body); margin: 0; overflow-wrap: anywhere; }
.forge-stage {
  position: relative; height: min(54dvh, 560px); min-height: 240px; isolation: isolate;
  background-color: var(--color-bg-secondary);
  background-image: linear-gradient(var(--rule-major) 1px, transparent 1px), linear-gradient(90deg, var(--rule-major) 1px, transparent 1px);
  background-size: var(--mod-major) var(--mod-major); border-bottom: var(--hair) solid var(--color-border);
}
.forge-model, .forge-model model-viewer { display: block; width: 100%; height: 100%; }
.forge-model model-viewer { --poster-color: transparent; --progress-bar-color: var(--color-primary); --progress-bar-height: 3px; }
.forge-load-state { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; flex-direction: column; gap: var(--space-md); padding: var(--space-lg); text-align: center; pointer-events: none; }
.forge-load-state p { max-width: 46ch; margin: 0; font-size: var(--text-sm); }
.forge-load-state button { pointer-events: auto; }
.forge-load-mark { font-size: var(--text-3xl); line-height: 1; color: var(--color-primary); }
.forge-dialog[data-state="ready"] .forge-load-mark { display: none; }
.forge-dialog[data-state="ready"] .forge-load-state { inset: auto var(--space-md) var(--space-sm); align-items: end; padding: 0; }
.forge-dialog[data-state="ready"] .forge-load-state p { font-size: var(--text-sheet-label); background: var(--color-bg-secondary); padding: var(--space-2xs) var(--space-xs); }
.forge-axis { position: absolute; left: var(--space-md); bottom: var(--space-sm); padding: var(--space-2xs) var(--space-xs); background: var(--color-bg-secondary); font-size: var(--text-sheet-label); color: var(--color-body); pointer-events: none; }
.forge-toolbar { display: flex; align-items: center; flex-wrap: wrap; gap: var(--space-xs); padding: var(--space-md) var(--space-lg); border-bottom: var(--hair) solid var(--color-border); }
.forge-control { display: grid; place-items: center; min-width: 44px; min-height: 44px; padding: var(--space-xs); font-size: var(--text-lg); color: var(--color-heading); background: var(--color-bg); border: var(--hair) solid var(--color-border); }
.forge-control:hover { border-color: var(--color-primary); background: var(--color-primary-light); }
.forge-control:disabled { opacity: .35; cursor: default; }
.forge-close { flex-shrink: 0; }
.forge-reset { padding-inline: var(--space-md); font-size: var(--text-sm); }
.forge-download { margin-left: auto; }
.forge-viewer-notes { padding: var(--space-md) var(--space-lg); }
.forge-viewer-notes p { margin: 0; font-size: var(--text-xs); color: var(--color-body); }
.forge-viewer-notes p + p { margin-top: var(--space-xs); }
/* The drafting cursor is decorative; the 3D viewer needs its native drag cursor. */
html[data-motion='on'].sheet-pointer-live .forge-dialog,
html[data-motion='on'].sheet-pointer-live .forge-dialog * { cursor: auto !important; }
.forge-dialog model-viewer { cursor: grab; }
@media (max-width: 640px) {
  .forge-dialog { width: 96vw; max-height: 96dvh; }
  .forge-dialog-head, .forge-toolbar, .forge-viewer-notes { padding: var(--space-md); }
  .forge-dialog-head h2 { font-size: var(--text-lg); }
  .forge-stage { height: 42dvh; min-height: 220px; }
  .forge-download { width: 100%; margin-left: 0; }
  .forge-reset { flex: 1; }
}

/* Front / top / side: the three views a drawing is actually read in. Grouped
   so they read as one instrument rather than three loose buttons. */
.forge-views { display: inline-flex; border: var(--hair) solid var(--color-border); }
.forge-views .forge-view { border: 0; border-right: var(--hair) solid var(--color-border); padding-inline: var(--space-md); font-size: var(--text-sm); }
.forge-views .forge-view:last-child { border-right: 0; }
.forge-view[aria-pressed='true'] { background: var(--color-primary); color: var(--color-on-primary); }
.forge-view[aria-pressed='true']:hover { background: var(--color-primary-dark); }
.forge-fullscreen { margin-left: auto; }
.forge-fullscreen svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.6; }
.forge-fullscreen[aria-pressed='true'] { background: var(--color-primary); color: var(--color-on-primary); }

/* Fullscreen fills the screen, so the stage takes the space the page gave up
   and the toolbar stays reachable at the bottom. */
.forge-dialog.is-fullscreen { width: 100vw; max-width: 100vw; max-height: 100dvh; border: 0; display: flex; flex-direction: column; }
.forge-dialog.is-fullscreen .forge-stage { flex: 1; height: auto; max-height: none; }
@media (max-width: 640px) {
  .forge-views { width: 100%; }
  .forge-views .forge-view { flex: 1; }
  .forge-fullscreen { margin-left: 0; }
}

/* ---------- Parts gallery: the part before its name ---------- */
.forge-gallery { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--space-xl); }
@media (min-width: 900px) { .forge-gallery { grid-template-columns: repeat(2, 1fr); } }

.forge-card {
  display: grid;
  border: var(--hair) solid var(--color-border);
  background: var(--color-white);
}
.forge-card-shot {
  position: relative; margin: 0; aspect-ratio: 9 / 7; overflow: hidden;
  border-bottom: var(--hair) solid var(--color-border);
  background-color: var(--color-bg-secondary);
  background-image: linear-gradient(var(--rule-minor) 1px, transparent 1px),
                    linear-gradient(90deg, var(--rule-minor) 1px, transparent 1px);
  background-size: var(--mod) var(--mod);
}
.forge-card-shot img {
  width: 100%; height: 100%; object-fit: contain;
  transition: transform var(--duration-page-morph) var(--ease-standard);
}
html[data-motion='on'] .forge-card-shot:has(.forge-model-link:hover) img { transform: scale(1.03); }
.forge-card-num {
  position: absolute; top: var(--space-sm); left: var(--space-sm);
  font-size: var(--text-sheet-label); font-weight: 700; font-variant-numeric: tabular-nums;
  letter-spacing: .06em; color: var(--color-body);
}
.forge-card-body { display: flex; flex-direction: column; gap: var(--space-sm); padding: var(--space-lg); }
.forge-card-name { margin: 0; font-size: var(--text-lg); }
.forge-card-desc { margin: 0; font-size: var(--text-sm); }
/* The headline action: seeing the part beats reading its file list. */
.forge-explore { align-self: start; gap: var(--space-xs); margin-block: var(--space-2xs); }
.forge-explore svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.5; }
.forge-card .file-links { margin-top: auto; }

@media (prefers-reduced-motion: reduce) {
  .forge-card-shot img { transition: none; }
  .forge-card:hover .forge-card-shot img { transform: none; }
}

/* The model itself is the native, keyboard-accessible preview control. */
.forge-model-link {
  position:absolute; inset:0; width:100%; height:100%; padding:var(--space-md);
  display:flex; align-items:flex-end; justify-content:center;
  border:0; background:transparent; color:var(--color-heading); font:inherit; cursor:zoom-in;
}
.forge-model-link:focus-visible { outline:3px solid var(--color-focus-ring); outline-offset:-3px; }
.forge-model-hint {
  display:inline-flex; align-items:center; gap:var(--space-sm); padding:var(--space-xs) var(--space-sm);
  border:var(--hair) solid var(--color-border); background:var(--color-bg); font-size:var(--text-xs);
}
.forge-model-link:hover .forge-model-hint { color:var(--color-primary-dark); border-color:var(--color-primary); }
.forge-dialog { transform-origin:top left; }
.forge-morph-poster { position:absolute; inset:0; width:100%; height:100%; object-fit:contain; background:var(--color-bg-secondary); pointer-events:none; }
.forge-dialog[data-closing] { pointer-events:none; }
html[data-motion='off'] .forge-card-shot img { transition:none; transform:none; }
@media(prefers-reduced-motion:reduce) {
  html[data-motion='on'] .forge-card-shot:has(.forge-model-link:hover) img { transform:none; }
}
