Spaces:
Configuration error
Configuration error
| :root { | |
| --bg: #fbfbfd; | |
| --surface: #ffffff; | |
| --surface-2: #f5f5f7; | |
| --ink: #1d1d1f; | |
| --ink-soft: #515154; | |
| --ink-faint: #86868b; | |
| --line: rgba(0, 0, 0, 0.1); | |
| --line-strong: rgba(0, 0, 0, 0.18); | |
| --accent: #0071e3; | |
| --accent-hover: #0062c4; | |
| --accent-soft: rgba(0, 113, 227, 0.1); | |
| --green: #34c759; | |
| --yellow: #ff9f0a; | |
| --red: #ff3b30; | |
| --danger: #ff3b30; | |
| --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04), 0 1px 3px rgba(0, 0, 0, 0.06); | |
| --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.06), 0 1px 3px rgba(0, 0, 0, 0.04); | |
| --panel-radius: 14px; | |
| --control-radius: 10px; | |
| --font-system: | |
| -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'SF Pro Text', system-ui, 'Segoe UI', Roboto, sans-serif; | |
| } | |
| * { | |
| box-sizing: border-box; | |
| } | |
| body { | |
| margin: 0; | |
| color: var(--ink); | |
| font-family: var(--font-system); | |
| font-feature-settings: 'ss01', 'ss02'; | |
| -webkit-font-smoothing: antialiased; | |
| -moz-osx-font-smoothing: grayscale; | |
| background: #000; | |
| } | |
| #root { | |
| min-height: 100vh; | |
| } | |
| /* Fullscreen stage: the splat preview fills the viewport and everything else | |
| floats over it (DialKit panel + overlays). */ | |
| .stage { | |
| position: fixed; | |
| inset: 0; | |
| overflow: hidden; | |
| background: #000; | |
| } | |
| /* Preview panel becomes edge-to-edge; its panel chrome is stripped. */ | |
| .preview-panel { | |
| position: absolute; | |
| inset: 0; | |
| margin: 0; | |
| padding: 0; | |
| border: none; | |
| border-radius: 0; | |
| background: #000; | |
| } | |
| .splat-canvas-shell { | |
| position: absolute; | |
| inset: 0; | |
| min-height: 0; | |
| border-radius: 0; | |
| overflow: hidden; | |
| background: #000; | |
| } | |
| .splat-canvas-host { | |
| position: absolute; | |
| inset: 0; | |
| } | |
| .splat-canvas-host canvas { | |
| width: 100% ; | |
| height: 100% ; | |
| display: block; | |
| } | |
| .splat-empty { | |
| position: absolute; | |
| inset: 0; | |
| display: grid; | |
| place-items: center; | |
| color: rgba(255, 255, 255, 0.7); | |
| font-size: 0.95rem; | |
| padding: 1.5rem; | |
| text-align: center; | |
| z-index: 3; | |
| } | |
| /* The preview component's own toolbar becomes a subtle viewer-status hint. */ | |
| .preview-toolbar { | |
| position: absolute; | |
| bottom: 16px; | |
| left: 50%; | |
| transform: translateX(-50%); | |
| display: flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| max-width: min(90vw, 520px); | |
| padding: 0.4rem 0.8rem; | |
| border-radius: 999px; | |
| background: rgba(20, 20, 22, 0.6); | |
| backdrop-filter: blur(12px); | |
| -webkit-backdrop-filter: blur(12px); | |
| border: 1px solid rgba(255, 255, 255, 0.12); | |
| z-index: 4; | |
| pointer-events: none; | |
| } | |
| .preview-title { | |
| display: none; | |
| } | |
| .preview-status { | |
| color: rgba(255, 255, 255, 0.78); | |
| font-size: 0.76rem; | |
| white-space: nowrap; | |
| overflow: hidden; | |
| text-overflow: ellipsis; | |
| } | |
| /* Floating overlays over the preview. */ | |
| .overlays { | |
| position: absolute; | |
| inset: 0; | |
| z-index: 5; | |
| pointer-events: none; | |
| } | |
| .overlays a, | |
| .overlays button, | |
| .status-overlay, | |
| .thumb-overlay, | |
| .links-overlay { | |
| pointer-events: auto; | |
| } | |
| .status-overlay { | |
| position: absolute; | |
| top: 16px; | |
| left: 16px; | |
| max-width: 340px; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 0.5rem; | |
| padding: 0.65rem 0.8rem; | |
| border-radius: 12px; | |
| background: rgba(20, 20, 22, 0.72); | |
| backdrop-filter: blur(14px); | |
| -webkit-backdrop-filter: blur(14px); | |
| border: 1px solid rgba(255, 255, 255, 0.12); | |
| box-shadow: 0 8px 30px rgba(0, 0, 0, 0.35); | |
| color: #fff; | |
| } | |
| .status-overlay-row { | |
| display: flex; | |
| align-items: center; | |
| gap: 0.5rem; | |
| } | |
| .status-dot { | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 50%; | |
| background: var(--green); | |
| flex: 0 0 auto; | |
| } | |
| .status-dot.is-busy { | |
| background: var(--yellow); | |
| animation: status-pulse 1s ease-in-out infinite; | |
| } | |
| @keyframes status-pulse { | |
| 0%, | |
| 100% { | |
| opacity: 1; | |
| } | |
| 50% { | |
| opacity: 0.35; | |
| } | |
| } | |
| .status-overlay-text { | |
| font-size: 0.8rem; | |
| line-height: 1.35; | |
| } | |
| .status-overlay-error { | |
| margin: 0; | |
| color: #ff6b6b; | |
| font-size: 0.76rem; | |
| line-height: 1.35; | |
| } | |
| .status-overlay-summary { | |
| margin: 0; | |
| color: rgba(255, 255, 255, 0.72); | |
| font-size: 0.74rem; | |
| } | |
| .status-overlay-save { | |
| margin: 0; | |
| color: var(--green); | |
| font-size: 0.74rem; | |
| } | |
| .progress-bar { | |
| height: 4px; | |
| border-radius: 999px; | |
| background: rgba(255, 255, 255, 0.16); | |
| overflow: hidden; | |
| } | |
| .progress-bar-fill { | |
| height: 100%; | |
| background: var(--accent); | |
| transition: width 0.2s ease; | |
| } | |
| .thumb-overlay { | |
| position: absolute; | |
| bottom: 16px; | |
| left: 16px; | |
| margin: 0; | |
| width: 168px; | |
| border-radius: 10px; | |
| overflow: hidden; | |
| background: rgba(0, 0, 0, 0.55); | |
| border: 1px solid rgba(255, 255, 255, 0.14); | |
| box-shadow: 0 8px 30px rgba(0, 0, 0, 0.35); | |
| } | |
| .thumb-overlay img { | |
| width: 100%; | |
| display: block; | |
| max-height: 130px; | |
| object-fit: cover; | |
| } | |
| .thumb-overlay figcaption { | |
| padding: 5px 7px; | |
| font-size: 0.66rem; | |
| color: rgba(255, 255, 255, 0.78); | |
| line-height: 1.3; | |
| } | |
| .links-overlay { | |
| position: absolute; | |
| bottom: 16px; | |
| right: 16px; | |
| display: flex; | |
| align-items: center; | |
| gap: 0.35rem; | |
| padding: 0.25rem 0.4rem; | |
| border-radius: 999px; | |
| background: rgba(20, 20, 22, 0.55); | |
| backdrop-filter: blur(12px); | |
| -webkit-backdrop-filter: blur(12px); | |
| border: 1px solid rgba(255, 255, 255, 0.1); | |
| } | |
| .links-overlay a { | |
| display: inline-grid; | |
| place-items: center; | |
| width: 30px; | |
| height: 30px; | |
| border-radius: 8px; | |
| color: rgba(255, 255, 255, 0.72); | |
| text-decoration: none; | |
| transition: background-color 120ms ease, color 120ms ease; | |
| } | |
| .links-overlay a:hover { | |
| background: rgba(255, 255, 255, 0.1); | |
| color: #fff; | |
| } | |
| .links-overlay a svg { | |
| width: 17px; | |
| height: 17px; | |
| } | |
| .links-overlay-license { | |
| width: auto ; | |
| padding: 0 0.5rem; | |
| font-size: 0.72rem; | |
| color: rgba(255, 255, 255, 0.6); | |
| } | |
| .links-overlay-license:hover { | |
| text-decoration: underline; | |
| } | |
| /* DialKit button accents (classes applied by App via label matching). */ | |
| .dialkit-button.dialkit-button--primary { | |
| background: var(--accent); | |
| color: #fff; | |
| font-weight: 600; | |
| box-shadow: 0 0 0 1px var(--accent), 0 6px 18px rgba(0, 113, 227, 0.35); | |
| } | |
| .dialkit-button.dialkit-button--primary:hover { | |
| background: var(--accent-hover); | |
| } | |
| .dialkit-button.dialkit-button--ok { | |
| color: var(--green); | |
| font-weight: 600; | |
| cursor: default; | |
| } | |
| @media (max-width: 640px) { | |
| .thumb-overlay { | |
| width: 120px; | |
| } | |
| .status-overlay { | |
| max-width: calc(100vw - 32px); | |
| } | |
| } | |