/* GM Forge: one wide notebook spread. Components come from global.css; this file only lays out the workspace. */

/* Workspace */
/* One frame sets the page padding and the sticky tools pane offset, so the pane fits the viewport before and after scrolling. */
body.gm_forge-show, .gm-forge-page { --page-width: 1600px; --gutter: var(--s4); --forge-frame: var(--s4); }
.gm-forge-page { padding-block: var(--forge-frame); }
.gm-forge-layout { --forge-top: calc(57px + var(--forge-frame)); display: flex; align-items: flex-start; gap: var(--s5); }
.gm-forge-main { flex: 1; min-width: 0; }

.gm-forge-header { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: var(--s3) var(--s4); }
.gm-forge-heading { min-width: 0; }
.gm-forge-heading .hint { margin: var(--s1) 0 0; }
.gm-forge-title { margin: 0; font-size: 2rem; }
.gm-forge-title-button { display: inline-flex; align-items: center; gap: var(--s2); padding: 0; border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: text; }
.gm-forge-title-button .ph { font-size: .5em; color: var(--ink-soft); opacity: 0; transition: opacity .15s; }
.gm-forge-title-button:hover .ph, .gm-forge-title-button:focus-visible .ph { opacity: 1; }
.input.gm-forge-title-input { min-height: 0; margin-left: calc(-1 * var(--s2) - var(--border-w)); padding: 0 var(--s2); font: 600 2rem/1.2 var(--font-read); }

.gm-forge-setting { border-block: 1px solid var(--rule); }
.gm-forge-search { max-width: 640px; }
.gm-forge-search input::-webkit-search-cancel-button { appearance: none; }

.gm-forge-columns { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap: var(--s5); align-items: start; }
.gm-forge-column-header { display: flex; align-items: center; justify-content: space-between; gap: var(--s2); margin-bottom: var(--s3); padding-bottom: var(--s2); border-bottom: var(--border-w) solid var(--ink); }
.gm-forge-column-header h2 { display: flex; align-items: center; gap: var(--s2); margin: 0; font-size: 1.2rem; }
.gm-forge-column-header h2 .ph { color: var(--accent); }
.gm-forge-column-empty { width: 100%; font: inherit; text-align: left; cursor: pointer; }

/* Tag colors are user content: a dot carries the color so chips keep their own states. */
.gm-forge-tag { border-color: transparent; cursor: pointer; }

/* Entity cards */
.gm-forge-entity-card { padding: var(--s3) var(--s4); }
.gm-forge-entity-card.is-building { background: transparent; border: var(--border-w) dashed var(--dash); box-shadow: none; }
.gm-forge-entity-card.is-building .generating { padding: 0; border: 0; }
.gm-forge-entity-card.is-failed { box-shadow: inset 4px 0 0 var(--danger), var(--shadow-card); }
.gm-forge-entity-card.is-failed .callout { padding: 0; background: none; box-shadow: none; }
.gm-forge-entity-head { display: flex; align-items: flex-start; gap: var(--s3); }
.gm-forge-entity-thumb { flex: none; width: 48px; height: 48px; }
.gm-forge-entity-thumb img { display: block; width: 100%; height: 100%; object-fit: cover; border-radius: var(--radius); }
.gm-forge-entity-thumb.is-generating img { opacity: .4; }
.gm-forge-entity-identity { flex: 1; min-width: 0; }
.gm-forge-entity-identity > p { margin: 0; }
.gm-forge-entity-title-toggle { display: inline-flex; flex-wrap: wrap; align-items: center; gap: var(--s1) var(--s2); padding: 0; border: 0; background: none; color: var(--ink); font: 600 1.05rem/1.3 var(--font-read); text-align: left; cursor: pointer; }
.gm-forge-entity-title-toggle:hover, .gm-forge-entity-title-toggle[aria-expanded=true] { color: var(--accent); }
.gm-forge-entity-actions { display: flex; flex: none; align-items: center; margin: calc(-1 * var(--s1)) calc(-1 * var(--s2)) 0 0; }
.gm-forge-entity-actions .is-favorite { color: var(--warning); }
.gm-forge-entity-actions .gm-forge-image-error { color: var(--danger); }
.gm-forge-stats { display: flex; flex-wrap: wrap; gap: var(--s1) var(--s4); margin: var(--s3) 0 0; }
.gm-forge-stat { display: flex; align-items: baseline; gap: var(--s2); }
.gm-forge-stat dt.label { margin: 0; }
.gm-forge-stat dd { margin: 0; font-weight: 500; }
.gm-forge-summary-preview { margin: var(--s2) 0 0; font-size: .92rem; line-height: 1.5; color: var(--ink-soft); display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.gm-forge-entity-details { margin-top: var(--s3); font-size: .95rem; }
.gm-forge-entity-details .stat-block { grid-template-columns: repeat(auto-fit, minmax(48px, 1fr)); margin-top: 0; }
.gm-forge-entity-card .card-footer { margin: 0 calc(-1 * var(--s4)) calc(-1 * var(--s3)); padding: var(--s2) var(--s4); }
.gm-forge-detail > :where(p, ul) { margin: 0 0 var(--s2); }
.gm-forge-detail > :last-child { margin-bottom: 0; }
.gm-forge-detail ul { padding-left: var(--s4); }

/* Drawers: generate, edit and aspects float over the page; Spark, dice and the notebook share one tools pane docked beside it. */
.gm-forge-scrim { position: fixed; inset: 0; z-index: 39; padding: 0; border: 0; background: var(--backdrop); cursor: pointer; }
.drawer .drawer-body { min-height: 0; }
.drawer-header > .cluster:first-child { flex-wrap: nowrap; align-items: flex-start; }
.drawer-header .cluster > .ph { margin-top: .15em; color: var(--accent); }
.gm-forge-drawer-form { display: flex; flex-direction: column; flex: 1; min-height: 0; }
.gm-forge-tools { position: sticky; top: var(--forge-top); flex: none; width: 360px; height: calc(100dvh - var(--forge-top) - var(--forge-frame)); border: 1px solid var(--rule); border-radius: var(--radius); box-shadow: var(--shadow-card); overflow: hidden; }
.gm-forge-notebook-body { display: flex; padding: 0; }
.gm-forge-notebook-body textarea { flex: 1; height: 100%; border: 0; border-radius: 0; resize: none; }
.gm-forge-edit-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: var(--s3); }

.dice-panel .button-group > span.button { cursor: default; }
.gm-forge-dice-rolling { opacity: .5; filter: blur(1px); }

.spark-thread-switch { min-width: 0; }
.spark-threads { padding-top: 0; }
.spark-thread-list { list-style: none; margin: 0; padding: 0; }
.spark-thread-item { display: flex; align-items: center; gap: var(--s2); padding-left: var(--s2); border-bottom: 1px solid var(--rule); }
.spark-thread-item.is-active { box-shadow: inset 2px 0 0 var(--accent); }
.spark-thread-link { flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: flex-start; padding: var(--s2) 0; border: 0; background: none; color: var(--ink); font: 500 .85rem/1.35 var(--font-ui); text-align: left; cursor: pointer; }
.spark-thread-link:hover { color: var(--accent); }
.spark-thread-item.is-active .spark-thread-title { font-weight: 600; }
.spark-thread-title { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.facts .spark-cannot { color: var(--ink-soft); }
.spark-messages { display: flex; flex-direction: column; }
.spark-messages .thread { max-width: none; margin-top: auto; }
.spark-messages .thread:has(> .empty:only-child) { margin-top: 0; }
.spark-messages .message > .hint .ph { margin-right: var(--s1); }
.spark-input-form { flex: 1; }

.gm-forge-aspect-list { list-style: none; margin: 0; padding: 0; }
.gm-forge-aspect-item { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: start; gap: var(--s2); border-top: 1px solid var(--rule); }
.gm-forge-aspect-item:last-child { border-bottom: 1px solid var(--rule); }
.gm-forge-aspect-item > form { grid-column: 1 / -1; padding: var(--s3) 0; }
.gm-forge-aspect-actions { display: flex; padding-top: var(--s1); }

@media (max-width: 1100px) {
  .gm-forge-tools { position: fixed; z-index: 40; inset: 0 0 0 auto; width: min(100%, 420px); height: auto; border-width: 0 0 0 1px; border-radius: 0; box-shadow: var(--shadow-float); }
}

/* Session list, tags, new session */
.gm-forge-session { position: relative; display: flex; }
.gm-forge-session > .tile { flex: 1; }
.gm-forge-session > .tile > .cluster { padding-right: var(--s6); }
.gm-forge-session > form { position: absolute; right: var(--s2); bottom: var(--s2); }
.gm-forge-system-choices { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); margin-bottom: var(--s2); }
.gm-forge-system-choices .choice-body { justify-content: center; }
.gm-forge-tag-list { list-style: none; margin: 0; padding: 0; }
.gm-forge-tag-list > li { padding: var(--s3) 0; border-bottom: 1px solid var(--rule); }
.gm-forge-tag-list > li > .cluster > form.button_to { margin-left: auto; }
.gm-forge-tag-list .rows { margin: var(--s2) 0 0; font-size: .95rem; }
.gm-forge-tag-list .rows li:last-child { border-bottom: 0; }

/* Shareable entity page and public galleries */
.gm-forge-entry-header { display: flex; flex-wrap: wrap; align-items: flex-start; gap: var(--s5); }
.gm-forge-entry-header > .stack { flex: 1 1 320px; }
.gm-forge-entry-header .label { margin: 0; }
.gm-forge-portrait { display: block; width: 200px; aspect-ratio: 1; object-fit: cover; border-radius: var(--radius); }
.gm-forge-gallery-row { flex-direction: row; align-items: flex-start; gap: var(--s4); }
.gm-forge-gallery-row > .stack { flex: 1; min-width: 0; }
.gm-forge-thumb { flex: none; width: 88px; height: 88px; object-fit: cover; border-radius: var(--radius); }

/* Card renderer primitives */
.gm-forge-title-block > * { margin: 0; }
.gm-forge-stat-grid .stat-block { grid-template-columns: repeat(var(--stat-columns, 6), minmax(0, 1fr)); margin-top: 0; }
