| :root { |
| color-scheme: light; |
| font-family: |
| ui-sans-serif, |
| system-ui, |
| -apple-system, |
| BlinkMacSystemFont, |
| "Segoe UI", |
| sans-serif; |
| line-height: 1.5; |
| font-weight: 400; |
| --paper: #f4f4f2; |
| --ink: #171717; |
| --muted: #666666; |
| --panel: rgba(250, 250, 248, 0.96); |
| --panel-strong: #ffffff; |
| --border: rgba(23, 23, 23, 0.14); |
| --accent: #2a2a2a; |
| --accent-strong: #111111; |
| --error: #8a1f1f; |
| background: |
| radial-gradient(circle at top, rgba(0, 0, 0, 0.04), transparent 42%), |
| linear-gradient(180deg, #fbfbfa 0%, #f0f0ed 100%); |
| color: var(--ink); |
| } |
|
|
| * { |
| box-sizing: border-box; |
| } |
|
|
| html, |
| body, |
| #app { |
| min-height: 100%; |
| } |
|
|
| body { |
| margin: 0; |
| } |
|
|
| button, |
| input, |
| select, |
| textarea { |
| font: inherit; |
| } |
|
|
| button { |
| border: 0; |
| background: none; |
| color: inherit; |
| } |
|
|
| img, |
| video { |
| display: block; |
| max-width: 100%; |
| } |
|
|
| .shell { |
| display: grid; |
| min-height: 100vh; |
| grid-template-columns: 360px minmax(0, 1fr); |
| gap: 14px; |
| padding: 14px; |
| align-items: start; |
| } |
|
|
| .panel { |
| background: var(--panel); |
| border: 1px solid var(--border); |
| border-radius: 28px; |
| box-shadow: 0 18px 48px rgba(0, 0, 0, 0.06); |
| } |
|
|
| .sidebar { |
| display: flex; |
| flex-direction: column; |
| gap: 10px; |
| min-height: calc(100vh - 28px); |
| padding: 10px 4px 10px 6px; |
| } |
|
|
| .hero { |
| display: grid; |
| gap: 4px; |
| padding: 4px 6px 2px; |
| } |
|
|
| .hero h1 { |
| margin: 0; |
| font-size: 0.95rem; |
| font-weight: 700; |
| letter-spacing: 0.08em; |
| text-transform: uppercase; |
| } |
|
|
| .hero-compact { |
| min-height: auto; |
| } |
|
|
| .hero-copy { |
| margin: 0; |
| color: var(--muted); |
| font-size: 0.95rem; |
| line-height: 1.35; |
| } |
|
|
| .dropzone-copy, |
| .empty-note, |
| .status-text, |
| .editor-empty span, |
| .meta-note { |
| margin: 0; |
| color: var(--muted); |
| } |
|
|
| .status-grid { |
| display: grid; |
| gap: 8px 14px; |
| grid-template-columns: repeat(2, minmax(0, 1fr)); |
| padding: 8px 6px 10px; |
| border-block: 1px solid var(--border); |
| } |
|
|
| .status-wide { |
| grid-column: 1 / -1; |
| } |
|
|
| .label { |
| margin: 0; |
| font-size: 0.76rem; |
| font-weight: 700; |
| letter-spacing: 0.1em; |
| text-transform: uppercase; |
| color: var(--muted); |
| } |
|
|
| .value, |
| .status-text { |
| margin: 0; |
| } |
|
|
| .value { |
| font-size: 0.95rem; |
| } |
|
|
| .section { |
| display: grid; |
| gap: 8px; |
| padding: 4px 6px 8px; |
| } |
|
|
| .section + .section { |
| border-top: 1px solid var(--border); |
| padding-top: 10px; |
| } |
|
|
| .section-row { |
| display: flex; |
| justify-content: space-between; |
| gap: 8px; |
| align-items: center; |
| flex-wrap: wrap; |
| } |
|
|
| .section-title { |
| margin: 0; |
| font-size: 0.82rem; |
| font-weight: 700; |
| letter-spacing: 0.08em; |
| text-transform: uppercase; |
| color: var(--muted); |
| } |
|
|
| .dropzone { |
| display: grid; |
| place-items: center; |
| gap: 8px; |
| min-height: 148px; |
| padding: 16px; |
| border: 1.5px dashed rgba(23, 23, 23, 0.22); |
| border-radius: 24px; |
| background: linear-gradient(180deg, rgba(255, 255, 255, 0.86), rgba(245, 245, 243, 0.96)); |
| text-align: center; |
| cursor: pointer; |
| transition: |
| transform 180ms ease, |
| border-color 180ms ease, |
| box-shadow 180ms ease; |
| } |
|
|
| .dropzone-active { |
| border-color: rgba(23, 23, 23, 0.38); |
| box-shadow: 0 14px 28px rgba(0, 0, 0, 0.07); |
| } |
|
|
| .dropzone-title { |
| margin: 0; |
| font-size: 1.15rem; |
| font-weight: 700; |
| } |
|
|
| .button-row, |
| .layer-actions { |
| display: flex; |
| flex-wrap: wrap; |
| gap: 8px; |
| } |
|
|
| .button, |
| .icon-button { |
| border: 1px solid transparent; |
| border-radius: 999px; |
| padding: 10px 16px; |
| font-weight: 700; |
| cursor: pointer; |
| transition: |
| transform 180ms ease, |
| opacity 180ms ease, |
| background 180ms ease; |
| } |
|
|
| .icon-button { |
| padding: 7px 11px; |
| font-size: 0.83rem; |
| } |
|
|
| .button:disabled, |
| .icon-button:disabled { |
| cursor: not-allowed; |
| opacity: 0.5; |
| } |
|
|
| .button:not(:disabled):hover, |
| .icon-button:not(:disabled):hover { |
| transform: translateY(-1px); |
| } |
|
|
| .button-primary { |
| background: linear-gradient(180deg, #2a2a2a, #111111); |
| color: white; |
| border-color: rgba(0, 0, 0, 0.4); |
| } |
|
|
| .button-secondary, |
| .icon-button { |
| background: rgba(255, 255, 255, 0.92); |
| border: 1px solid rgba(23, 23, 23, 0.18); |
| color: var(--ink); |
| } |
|
|
| .icon-danger { |
| color: var(--error); |
| } |
|
|
| .field { |
| display: grid; |
| gap: 4px; |
| } |
|
|
| .source-options { |
| display: grid; |
| grid-template-columns: minmax(0, 1fr) 180px; |
| gap: 10px; |
| } |
|
|
| .field-toggle { |
| align-content: start; |
| } |
|
|
| .inspector { |
| display: grid; |
| gap: 14px; |
| } |
|
|
| .field-grid { |
| display: grid; |
| column-gap: 10px; |
| row-gap: 24px; |
| grid-template-columns: repeat(2, minmax(0, 1fr)); |
| } |
|
|
| .field-input { |
| appearance: none; |
| width: 100%; |
| border: 1px solid rgba(23, 23, 23, 0.18); |
| border-radius: 16px; |
| padding: 10px 12px; |
| background: rgba(255, 255, 255, 0.92); |
| color: var(--ink); |
| outline: none; |
| box-shadow: none; |
| transition: |
| border-color 160ms ease, |
| box-shadow 160ms ease, |
| background 160ms ease; |
| } |
|
|
| .field-input:focus { |
| border-color: rgba(23, 23, 23, 0.42); |
| box-shadow: 0 0 0 3px rgba(23, 23, 23, 0.08); |
| } |
|
|
| .field-range { |
| appearance: none; |
| width: 100%; |
| height: 8px; |
| margin: 6px 0 0; |
| border-radius: 999px; |
| background: rgba(23, 23, 23, 0.12); |
| outline: none; |
| } |
|
|
| .field-range::-webkit-slider-thumb { |
| appearance: none; |
| width: 18px; |
| height: 18px; |
| border: 1px solid rgba(23, 23, 23, 0.18); |
| border-radius: 999px; |
| background: white; |
| box-shadow: 0 4px 10px rgba(0, 0, 0, 0.12); |
| cursor: pointer; |
| } |
|
|
| .field-range::-moz-range-thumb { |
| width: 18px; |
| height: 18px; |
| border: 1px solid rgba(23, 23, 23, 0.18); |
| border-radius: 999px; |
| background: white; |
| box-shadow: 0 4px 10px rgba(0, 0, 0, 0.12); |
| cursor: pointer; |
| } |
|
|
| .field-note { |
| color: var(--muted); |
| font-size: 0.96rem; |
| } |
|
|
| .field-checkbox { |
| width: 18px; |
| height: 18px; |
| margin: 16px 0 0; |
| accent-color: #171717; |
| } |
|
|
| .field-select { |
| padding-right: 40px; |
| background-image: |
| linear-gradient(45deg, transparent 50%, rgba(23, 23, 23, 0.72) 50%), |
| linear-gradient(135deg, rgba(23, 23, 23, 0.72) 50%, transparent 50%); |
| background-position: |
| calc(100% - 20px) calc(50% - 1px), |
| calc(100% - 14px) calc(50% - 1px); |
| background-size: 6px 6px, 6px 6px; |
| background-repeat: no-repeat; |
| } |
|
|
| .field-textarea { |
| resize: vertical; |
| min-height: 88px; |
| } |
|
|
| .field-color { |
| min-height: 50px; |
| padding: 8px; |
| } |
|
|
| .meta-card { |
| display: grid; |
| gap: 6px; |
| padding: 10px 12px; |
| border: 1px solid rgba(23, 23, 23, 0.12); |
| border-radius: 18px; |
| background: rgba(255, 255, 255, 0.72); |
| } |
|
|
| .meta-card p { |
| display: flex; |
| justify-content: space-between; |
| gap: 16px; |
| margin: 0; |
| } |
|
|
| .meta-card .meta-note { |
| display: block; |
| } |
|
|
| .meta-card span { |
| color: var(--muted); |
| } |
|
|
| .layer-list { |
| display: grid; |
| gap: 8px; |
| padding: 0; |
| margin: 0; |
| list-style: none; |
| } |
|
|
| .layer-row { |
| display: grid; |
| gap: 8px; |
| padding: 10px; |
| border: 1px solid rgba(23, 23, 23, 0.12); |
| border-radius: 18px; |
| background: rgba(255, 255, 255, 0.68); |
| } |
|
|
| .layer-row-selected { |
| border-color: rgba(23, 23, 23, 0.3); |
| box-shadow: inset 0 0 0 1px rgba(23, 23, 23, 0.08); |
| } |
|
|
| .layer-main { |
| display: flex; |
| justify-content: space-between; |
| gap: 10px; |
| width: 100%; |
| padding: 0; |
| text-align: left; |
| cursor: pointer; |
| } |
|
|
| .layer-name { |
| font-weight: 700; |
| } |
|
|
| .layer-kind { |
| color: var(--muted); |
| text-transform: capitalize; |
| } |
|
|
| .error-text { |
| margin: 0; |
| color: var(--error); |
| } |
|
|
| .workspace { |
| display: grid; |
| grid-template-columns: minmax(0, 1fr); |
| align-self: start; |
| position: sticky; |
| top: 14px; |
| } |
|
|
| .editor-panel { |
| display: grid; |
| height: calc(100vh - 28px); |
| padding: 8px; |
| } |
|
|
| .editor-viewport { |
| display: grid; |
| place-items: center; |
| position: relative; |
| overflow: hidden; |
| min-height: 0; |
| height: 100%; |
| padding: 10px; |
| border-radius: 20px; |
| background: |
| radial-gradient(circle at center, rgba(0, 0, 0, 0.035), transparent 56%), |
| rgba(255, 255, 255, 0.82); |
| outline: none; |
| } |
|
|
| .editor-stage-frame { |
| position: relative; |
| overflow: hidden; |
| border-radius: 20px; |
| box-shadow: 0 14px 28px rgba(0, 0, 0, 0.08); |
| } |
|
|
| .editor-stage-surface { |
| position: absolute; |
| inset: 0 auto auto 0; |
| overflow: hidden; |
| transform-origin: top left; |
| background-color: #f7f7f7; |
| } |
|
|
| .stage-media, |
| .stage-layer { |
| position: absolute; |
| } |
|
|
| .stage-media { |
| inset: 0; |
| width: 100%; |
| height: 100%; |
| object-fit: contain; |
| user-select: none; |
| pointer-events: none; |
| } |
|
|
| .stage-layer { |
| cursor: grab; |
| user-select: none; |
| touch-action: none; |
| overflow: visible; |
| } |
|
|
| .stage-layer:active { |
| cursor: grabbing; |
| } |
|
|
| .stage-layer-shell { |
| display: inline-block; |
| } |
|
|
| .stage-layer-content { |
| display: block; |
| width: 100%; |
| height: 100%; |
| } |
|
|
| .stage-selection-overlay { |
| position: absolute; |
| pointer-events: none; |
| z-index: 3; |
| overflow: visible; |
| } |
|
|
| .stage-selection-outline { |
| width: 100%; |
| height: 100%; |
| border: 2px solid rgba(23, 23, 23, 0.72); |
| } |
|
|
| .stage-layer-text { |
| display: block; |
| min-width: 28px; |
| height: auto; |
| width: max-content; |
| max-width: none; |
| white-space: pre; |
| line-height: 1; |
| } |
|
|
| .stage-layer-image { |
| width: 100%; |
| height: 100%; |
| object-fit: contain; |
| } |
|
|
| .layer-handle { |
| position: absolute; |
| width: 24px; |
| height: 24px; |
| display: grid; |
| place-items: center; |
| padding: 0; |
| border: 1px solid rgba(23, 23, 23, 0.18); |
| border-radius: 999px; |
| background: rgba(255, 255, 255, 0.94); |
| box-shadow: 0 6px 14px rgba(0, 0, 0, 0.12); |
| font-size: 0.9rem; |
| line-height: 1; |
| cursor: pointer; |
| z-index: 2; |
| pointer-events: auto; |
| } |
|
|
| .layer-handle-rotate { |
| top: -14px; |
| right: -14px; |
| cursor: crosshair; |
| } |
|
|
| .layer-handle-scale { |
| right: -14px; |
| bottom: -14px; |
| cursor: nwse-resize; |
| } |
|
|
| .editor-empty { |
| display: grid; |
| gap: 6px; |
| max-width: 14rem; |
| text-align: center; |
| } |
|
|
| .editor-empty p { |
| margin: 0; |
| font-weight: 700; |
| } |
|
|
| @media (max-width: 1180px) { |
| .shell { |
| grid-template-columns: 1fr; |
| } |
|
|
| .workspace { |
| position: static; |
| } |
|
|
| .sidebar, |
| .editor-panel { |
| min-height: auto; |
| height: auto; |
| } |
| } |
|
|
| @media (max-width: 720px) { |
| .shell { |
| padding: 10px; |
| gap: 10px; |
| } |
|
|
| .field-grid, |
| .status-grid { |
| grid-template-columns: 1fr; |
| } |
|
|
| .editor-viewport { |
| min-height: 360px; |
| padding: 8px; |
| } |
| } |
|
|