.builder-shell { min-width: 320px; } .builder-header { position: sticky; z-index: 20; top: 0; } .header-actions, .workspace-tools, .runtime-line { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; min-width: 0; max-width: 100%; } .button { display: inline-flex; align-items: center; justify-content: center; min-height: 38px; padding: 9px 14px; border: 1px solid var(--line); border-radius: 11px; color: var(--text); background: var(--surface-raised); cursor: pointer; font-size: 0.82rem; font-weight: 720; text-decoration: none; transition: border-color 140ms ease, background 140ms ease, transform 140ms ease; } .button:hover, .button:focus-visible { border-color: var(--mint); outline: none; transform: translateY(-1px); } .button:disabled { cursor: wait; opacity: 0.55; transform: none; } .button--primary { border-color: rgb(101 242 191 / 55%); color: #06130f; background: var(--mint); } .button--ghost { background: rgb(255 255 255 / 3%); } .button--danger { border-color: rgb(255 123 115 / 35%); color: var(--danger); background: rgb(255 123 115 / 7%); } .button--full { width: 100%; } .file-button input { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); } .builder-layout { --control-panel-width: 430px; display: grid; grid-template-columns: minmax(0, 1fr) 12px var(--control-panel-width); min-height: calc(100vh - 65px); } .scene-workspace { min-width: 0; padding: clamp(22px, 3vw, 42px); } .workspace-heading, .source-strip-heading, .asset-shelf { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; } .workspace-heading { margin-bottom: 22px; } .workspace-heading h1 { margin-bottom: 0; font-size: clamp(1.8rem, 4vw, 3.2rem); letter-spacing: -0.055em; } .workspace-heading .eyebrow { margin-bottom: 7px; } .canvas-card { position: relative; overflow: hidden; min-height: 520px; border: 1px solid var(--line); border-radius: 22px; background: #0a1512; box-shadow: var(--shadow); } #scene-canvas { display: block; width: 100%; height: clamp(520px, 61vh, 720px); cursor: crosshair; touch-action: none; } .canvas-empty { position: absolute; top: 34px; left: 50%; display: grid; width: min(430px, calc(100% - 48px)); gap: 7px; color: var(--muted); text-align: center; pointer-events: none; transform: translateX(-50%); } .canvas-empty strong { color: #cfe2db; font-size: 0.95rem; } .canvas-empty strong, .canvas-empty span { overflow-wrap: anywhere; } .canvas-empty.is-hidden { display: none; } .canvas-badge { position: absolute; right: 14px; bottom: 14px; padding: 7px 10px; border: 1px solid rgb(255 255 255 / 10%); border-radius: 999px; color: #d7e8e2; background: rgb(8 17 15 / 78%); backdrop-filter: blur(10px); font: 650 0.72rem ui-monospace, SFMono-Regular, Consolas, monospace; pointer-events: none; overflow: hidden; max-width: calc(100% - 28px); text-overflow: ellipsis; white-space: nowrap; } .source-strip-heading { margin-top: 32px; } .source-actions { display: flex; flex: 0 0 auto; flex-wrap: wrap; justify-content: flex-end; gap: 10px; } .source-strip-heading h2, .asset-shelf h2 { margin-bottom: 5px; font-size: 1rem; } .source-strip-heading p, .asset-shelf p { margin-bottom: 0; color: var(--muted); font-size: 0.78rem; line-height: 1.55; } .source-strip { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 11px; margin-top: 13px; } .source-card { display: grid; gap: 10px; padding: 15px; border: 1px solid var(--line); border-radius: 15px; color: inherit; background: rgb(255 255 255 / 2%); text-align: left; cursor: pointer; } .source-card:hover, .source-card:focus-visible, .source-card.is-selected { border-color: var(--source-color, var(--mint)); outline: none; background: rgb(255 255 255 / 5%); } .source-card__heading { display: flex; min-width: 0; align-items: center; gap: 8px; } .source-card__dot { width: 10px; height: 10px; flex: 0 0 auto; border-radius: 50%; background: var(--source-color, var(--mint)); box-shadow: 0 0 0 4px color-mix(in srgb, var(--source-color, var(--mint)) 16%, transparent); } .source-card strong { min-width: 0; overflow-wrap: anywhere; } .source-card small { min-width: 0; color: var(--muted); font: 600 0.72rem ui-monospace, SFMono-Regular, Consolas, monospace; overflow-wrap: anywhere; } .asset-shelf { align-items: flex-start; margin-top: 28px; padding: 20px; border: 1px solid var(--line); border-radius: 18px; background: rgb(255 255 255 / 2%); } .asset-shelf > div:first-child { max-width: 470px; } .asset-list { display: flex; flex: 1 1 320px; flex-wrap: wrap; justify-content: flex-end; gap: 8px; } .asset-chip { display: flex; align-items: center; gap: 8px; max-width: 100%; padding: 8px 9px 8px 11px; border: 1px solid var(--line); border-radius: 13px; background: var(--surface); } .asset-chip__label { min-width: 0; max-width: min(320px, 50vw); font-size: 0.74rem; overflow-wrap: anywhere; } .asset-chip__state { color: var(--muted); font-size: 0.66rem; } .asset-chip__remove { display: grid; width: 23px; height: 23px; padding: 0; border: 0; border-radius: 50%; place-items: center; color: var(--muted); background: rgb(255 255 255 / 5%); cursor: pointer; } .asset-chip__remove:disabled { cursor: not-allowed; opacity: 0.35; } .control-panel { position: sticky; top: 65px; min-width: 0; align-self: start; overflow-y: auto; max-height: calc(100vh - 65px); padding: 18px; border-left: 1px solid var(--line); background: rgb(12 24 21 / 86%); backdrop-filter: blur(18px); container-name: builder-controls; container-type: inline-size; } .builder-layout > .split-handle { position: sticky; top: 59px; height: calc(100vh - 59px); align-self: start; } .runtime-line { justify-content: space-between; margin-bottom: 12px; } .save-state { min-width: 0; color: var(--muted); font-size: 0.7rem; overflow-wrap: anywhere; } .control-section, .validation-card { padding: 17px; border: 1px solid var(--line); border-radius: 16px; background: rgb(255 255 255 / 2%); } .control-section + .control-section, .validation-card { margin-top: 12px; } .section-title { display: flex; align-items: center; gap: 9px; margin-bottom: 14px; } .section-title > span { color: var(--mint); font: 750 0.68rem ui-monospace, SFMono-Regular, Consolas, monospace; } .section-title h2 { margin: 0; font-size: 0.9rem; } .field { display: grid; min-width: 0; gap: 6px; } .field > span { color: var(--muted); font-size: 0.69rem; font-weight: 650; } .field input, .field select { width: 100%; min-height: 38px; padding: 8px 9px; border: 1px solid var(--line); border-radius: 9px; color: var(--text); background: #0b1714; } .field input:focus, .field select:focus { border-color: var(--mint); outline: 2px solid rgb(101 242 191 / 11%); } .field input:disabled, .field select:disabled { cursor: not-allowed; opacity: 0.45; } .check-field { display: flex; align-items: center; align-self: end; min-height: 38px; gap: 8px; color: var(--muted); font-size: 0.72rem; font-weight: 650; } .check-field input { width: 17px; height: 17px; accent-color: var(--mint); } .field--wide + .field--wide, .field-grid + .field--wide, .field--wide + .field-grid, #tone-fields, #noise-fields, #asset-fields, .button--full { margin-top: 10px; } .field-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-top: 10px; } .field-grid--three { grid-template-columns: repeat(3, minmax(0, 1fr)); } .inline-note { padding: 12px; border: 1px dashed var(--line); border-radius: 10px; color: var(--muted); font-size: 0.78rem; text-align: center; } .section-note { margin: 11px 0 0; color: var(--muted); font-size: 0.68rem; line-height: 1.5; } .trajectory-editor { margin: 12px 0; padding: 12px; border: 1px solid rgb(101 242 191 / 16%); border-radius: 12px; background: rgb(101 242 191 / 3%); } .trajectory-toggle { min-height: 28px; } .trajectory-preview { margin-top: 12px; } .trajectory-preview output { color: var(--mint); font: 700 0.7rem ui-monospace, SFMono-Regular, Consolas, monospace; } .trajectory-preview input[type="range"] { min-height: 28px; padding: 0; accent-color: var(--mint); } .trajectory-list { display: grid; gap: 8px; margin: 12px 0 10px; } .trajectory-row { display: grid; grid-template-columns: 42px repeat(4, minmax(0, 1fr)) 30px; gap: 5px; align-items: end; } .trajectory-row__select, .trajectory-row__remove { min-height: 36px; padding: 6px; border: 1px solid var(--line); border-radius: 8px; color: var(--muted); background: #0b1714; cursor: pointer; } .trajectory-row__select.is-selected { border-color: var(--mint); color: var(--mint); } .trajectory-row__remove:disabled { cursor: not-allowed; opacity: 0.3; } .trajectory-row .field > span { font-size: 0.6rem; } .trajectory-row .field input { min-height: 36px; padding: 6px; } .is-hidden { display: none !important; } .validation-card { display: flex; align-items: flex-start; gap: 11px; } .validation-card > :last-child { min-width: 0; } .validation-dot { width: 10px; height: 10px; flex: 0 0 auto; margin-top: 4px; border-radius: 50%; background: var(--muted); box-shadow: 0 0 0 5px rgb(145 170 162 / 8%); } .validation-card strong { font-size: 0.82rem; overflow-wrap: anywhere; } .validation-card p { margin: 4px 0 0; color: var(--muted); font-size: 0.72rem; line-height: 1.5; overflow-wrap: anywhere; } .validation-card.is-valid .validation-dot { background: var(--mint); box-shadow: 0 0 0 5px rgb(101 242 191 / 10%); } .validation-card.is-invalid .validation-dot { background: var(--danger); box-shadow: 0 0 0 5px rgb(255 123 115 / 10%); } @media (max-width: 1100px) { .builder-layout { grid-template-columns: minmax(0, 1fr); } .builder-layout > .split-handle { display: none; } .control-panel { position: static; max-height: none; border-top: 1px solid var(--line); border-left: 0; } } @media (max-width: 760px) { .builder-header, .workspace-heading, .source-strip-heading, .asset-shelf { align-items: stretch; flex-direction: column; } .builder-header { position: static; } .header-actions .button, .workspace-tools .button { min-width: 0; flex: 1 1 calc(50% - 5px); } .header-actions, .workspace-tools, .source-actions { width: 100%; } .source-actions .button { min-width: 0; flex: 1 1 calc(50% - 5px); } .scene-workspace { padding: 18px; } .canvas-card { min-height: 420px; } #scene-canvas { height: 420px; } .asset-list { justify-content: flex-start; } } @media (max-width: 430px) { .field-grid--three { grid-template-columns: 1fr; } .trajectory-row { grid-template-columns: 38px repeat(2, minmax(0, 1fr)) 30px; } .trajectory-row .field:nth-of-type(3), .trajectory-row .field:nth-of-type(4) { grid-row: 2; } } /* Task-first Builder navigation and progressive disclosure. */ .builder-header { min-height: 58px; padding-block: 9px; gap: 16px; } .builder-workflow { min-width: 0; margin-left: auto; } .builder-workflow ol { display: flex; align-items: center; margin: 0; padding: 0; list-style: none; } .builder-workflow li { display: flex; align-items: center; gap: 6px; color: var(--muted); font-size: 0.68rem; font-weight: 680; white-space: nowrap; } .builder-workflow li + li::before { width: 18px; height: 1px; margin: 0 7px; background: var(--line); content: ""; } .builder-workflow li span { display: grid; width: 20px; height: 20px; border: 1px solid rgb(101 242 191 / 34%); border-radius: 50%; place-items: center; color: var(--mint); font: 750 0.6rem ui-monospace, SFMono-Regular, Consolas, monospace; } .header-more { position: relative; } .header-more > summary { list-style: none; } .header-more > summary::-webkit-details-marker, .inline-disclosure > summary::-webkit-details-marker, .section-summary::-webkit-details-marker, .asset-help > summary::-webkit-details-marker { display: none; } .header-more__menu { position: absolute; z-index: 30; top: calc(100% + 8px); right: 0; display: grid; width: max-content; min-width: 210px; gap: 8px; padding: 10px; border: 1px solid var(--line); border-radius: 12px; background: #0b1714; box-shadow: 0 18px 48px rgb(0 0 0 / 35%); } .header-more__menu .button { width: 100%; } .builder-layout { min-height: calc(100vh - 59px); } .scene-workspace { padding: clamp(20px, 2.5vw, 34px); } .workspace-heading { margin-bottom: 16px; } .workspace-heading h1 { font-size: clamp(1.55rem, 3vw, 2.35rem); } .source-strip-heading .eyebrow { margin-bottom: 5px; font-size: 0.64rem; } .source-strip-heading { margin-top: 24px; } .asset-shelf { align-items: center; margin-top: 20px; padding: 14px 16px; } .asset-help { color: var(--muted); font-size: 0.7rem; } .asset-help summary { width: fit-content; margin-top: 4px; color: var(--mint); cursor: pointer; } .asset-help p { max-width: 520px; margin-top: 9px; } .control-panel { top: 59px; max-height: calc(100vh - 59px); padding: 14px; } .control-section--primary { border-color: rgb(101 242 191 / 28%); background: rgb(101 242 191 / 3%); } .validation-card { margin-top: 0; margin-bottom: 12px; padding: 13px 15px; } .control-section + .validation-card { margin-top: 12px; } .inline-disclosure { margin-top: 12px; border-top: 1px solid var(--line); } .inline-disclosure > summary { padding: 12px 0 0; color: var(--muted); cursor: pointer; font-size: 0.7rem; font-weight: 700; } .inline-disclosure > summary::after { float: right; color: var(--mint); content: "+"; } .inline-disclosure[open] > summary::after { content: "−"; } .disclosure-section { padding: 0; } .section-summary { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 9px; padding: 15px 17px; cursor: pointer; list-style: none; } .section-summary > span { color: var(--mint); font: 750 0.62rem ui-monospace, SFMono-Regular, Consolas, monospace; } .section-summary > strong { font-size: 0.82rem; } .section-summary > small { color: var(--muted); font-size: 0.62rem; } .disclosure-section[open] { padding: 0 17px 17px; } .disclosure-section[open] .section-summary { margin: 0 -17px 14px; border-bottom: 1px solid var(--line); } @media (max-width: 1180px) { .builder-workflow li { font-size: 0; gap: 0; } .builder-workflow li + li::before { width: 12px; margin-inline: 5px; } } @media (max-width: 1100px) { .builder-layout { grid-template-columns: minmax(0, 1fr); } .builder-layout > .split-handle { display: none; } .control-panel { position: static; max-height: none; border-top: 1px solid var(--line); border-left: 0; } } @media (max-width: 760px) { .builder-header { gap: 10px; } .builder-workflow { order: 3; width: 100%; margin: 0; } .builder-workflow ol { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); } .builder-workflow li { display: grid; grid-template-columns: 20px minmax(0, 1fr); gap: 5px; font-size: 0.64rem; } .builder-workflow li + li::before { display: none; } .header-actions { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); } .header-actions > .button, .header-actions > .header-more, .header-more > summary { width: 100%; } .header-more__menu { top: calc(100% + 6px); } .asset-shelf { align-items: stretch; } } @media (max-width: 430px) { .builder-header, .scene-workspace, .control-panel { padding-inline: 14px; } .builder-workflow li { grid-template-columns: 18px minmax(0, 1fr); font-size: 0.59rem; } .builder-workflow li span { width: 18px; height: 18px; } .header-actions { gap: 6px; } .header-actions .button { min-height: 36px; padding-inline: 7px; font-size: 0.72rem; } .header-more__menu { right: -2px; min-width: 190px; } .canvas-card { min-height: 360px; } #scene-canvas { height: 360px; } .workspace-tools .button, .source-actions .button { font-size: 0.74rem; } .trajectory-row { grid-template-columns: 34px repeat(2, minmax(0, 1fr)) 30px; grid-template-rows: repeat(2, auto); } .trajectory-row__select, .trajectory-row__remove { grid-row: 1 / 3; align-self: stretch; } .trajectory-row .field:nth-of-type(1) { grid-column: 2; grid-row: 1; } .trajectory-row .field:nth-of-type(2) { grid-column: 3; grid-row: 1; } .trajectory-row .field:nth-of-type(3) { grid-column: 2; grid-row: 2; } .trajectory-row .field:nth-of-type(4) { grid-column: 3; grid-row: 2; } .trajectory-row__remove { grid-column: 4; } } @container builder-controls (max-width: 440px) { .field-grid--three { grid-template-columns: repeat(2, minmax(0, 1fr)); } .trajectory-row { grid-template-columns: 34px repeat(2, minmax(0, 1fr)) 30px; grid-template-rows: repeat(2, auto); } .trajectory-row__select, .trajectory-row__remove { grid-row: 1 / 3; align-self: stretch; } .trajectory-row .field:nth-of-type(1) { grid-column: 2; grid-row: 1; } .trajectory-row .field:nth-of-type(2) { grid-column: 3; grid-row: 1; } .trajectory-row .field:nth-of-type(3) { grid-column: 2; grid-row: 2; } .trajectory-row .field:nth-of-type(4) { grid-column: 3; grid-row: 2; } .trajectory-row__remove { grid-column: 4; } } @container builder-controls (max-width: 340px) { .field-grid--three { grid-template-columns: minmax(0, 1fr); } }