TripoSplat-WebGPU / src /e2e-lab.css
Yosun's picture
Deploy TripoSplat WebGPU demo
31c7d49 verified
Raw
History Blame Contribute Delete
15.9 kB
:root {
color: #eef2ff;
background: #070a12;
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-synthesis: none;
--ink: #eef2ff;
--muted: #8b93a7;
--line: rgba(174, 190, 228, 0.13);
--line-bright: rgba(174, 190, 228, 0.25);
--panel: rgba(14, 18, 31, 0.78);
--panel-strong: #101523;
--lime: #c6ff4a;
--cyan: #58e6ff;
--violet: #8f7cff;
--danger: #ff6f91;
--mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
}
* { box-sizing: border-box; }
html { min-width: 320px; scroll-behavior: smooth; }
body {
min-width: 320px;
min-height: 100vh;
margin: 0;
overflow-x: hidden;
background:
linear-gradient(rgba(255,255,255,.018) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,.018) 1px, transparent 1px),
radial-gradient(circle at 76% 12%, rgba(87, 71, 188, .17), transparent 32rem),
#070a12;
background-size: 48px 48px, 48px 48px, auto, auto;
}
a { color: inherit; }
button, input, select { font: inherit; }
button, a, input, select { -webkit-tap-highlight-color: transparent; }
.ambient {
position: fixed;
z-index: -1;
width: 24rem;
height: 24rem;
border-radius: 50%;
filter: blur(110px);
opacity: .16;
pointer-events: none;
}
.ambient-one { top: -10rem; left: -8rem; background: var(--cyan); }
.ambient-two { right: -8rem; bottom: 4rem; background: var(--violet); }
.topbar {
display: flex;
align-items: center;
justify-content: space-between;
width: min(100% - 40px, 1500px);
min-height: 76px;
margin: 0 auto;
border-bottom: 1px solid var(--line);
}
.brand, .topbar-meta { display: flex; align-items: center; }
.brand {
gap: 12px;
color: var(--ink);
font-size: .78rem;
font-weight: 800;
letter-spacing: .16em;
text-decoration: none;
}
.brand b { color: var(--lime); font-weight: 800; }
.brand-mark {
position: relative;
display: grid;
width: 28px;
height: 28px;
place-items: center;
border: 1px solid rgba(198, 255, 74, .55);
transform: rotate(45deg);
}
.brand-mark::before, .brand-mark::after, .brand-mark span {
content: "";
position: absolute;
border: 1px solid var(--lime);
}
.brand-mark::before { inset: 5px; }
.brand-mark::after { inset: 9px; background: var(--lime); }
.brand-mark span { inset: -5px 11px; border-width: 0 1px; opacity: .5; }
.topbar-meta { gap: 28px; font: 500 .68rem/1 var(--mono); letter-spacing: .08em; text-transform: uppercase; }
.topbar-meta a { color: var(--muted); text-decoration: none; transition: color .2s ease; }
.topbar-meta a:hover { color: var(--ink); }
.capability { display: flex; align-items: center; gap: 8px; color: var(--muted); }
.capability i { width: 6px; height: 6px; border-radius: 50%; background: #e0b23b; box-shadow: 0 0 12px currentColor; }
.capability.is-ready { color: var(--lime); }
.capability.is-ready i { background: var(--lime); }
.capability.is-missing { color: var(--danger); }
.capability.is-missing i { background: var(--danger); }
.app-shell { width: min(100% - 40px, 1500px); margin: 0 auto; }
.hero { padding: clamp(62px, 9vw, 130px) 0 clamp(52px, 7vw, 96px); }
.eyebrow, .section-index {
color: var(--muted);
font: 500 .66rem/1 var(--mono);
letter-spacing: .14em;
text-transform: uppercase;
}
.eyebrow { display: flex; align-items: center; gap: 12px; margin-bottom: 28px; }
.eyebrow span { color: var(--lime); }
.eyebrow::after { content: ""; width: 72px; height: 1px; background: var(--line-bright); }
.hero h1 {
max-width: 1000px;
margin: 0;
color: #f5f7ff;
font-size: clamp(3.45rem, 8.1vw, 8.6rem);
font-weight: 500;
letter-spacing: -.07em;
line-height: .88;
}
.hero h1 em { color: transparent; font-style: normal; -webkit-text-stroke: 1px rgba(225, 232, 255, .48); }
.hero > p { max-width: 670px; margin: 38px 0 0; color: #a9b0c1; font-size: clamp(.98rem, 1.4vw, 1.17rem); line-height: 1.8; }
.pipeline { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-top: 38px; color: #c4cad8; font: 500 .66rem/1 var(--mono); letter-spacing: .08em; text-transform: uppercase; }
.pipeline span { padding: 9px 12px; border: 1px solid var(--line); background: rgba(255,255,255,.02); }
.pipeline i { color: var(--lime); font-style: normal; }
.workspace-grid { display: grid; grid-template-columns: minmax(310px, .78fr) minmax(0, 1.45fr); gap: 14px; align-items: stretch; }
.panel {
position: relative;
border: 1px solid var(--line);
background: linear-gradient(145deg, rgba(18, 23, 39, .86), rgba(9, 13, 23, .82));
box-shadow: 0 30px 80px rgba(0,0,0,.18);
backdrop-filter: blur(24px);
}
.panel::before { content: ""; position: absolute; inset: -1px auto auto -1px; width: 34px; height: 34px; border-top: 1px solid var(--lime); border-left: 1px solid var(--lime); pointer-events: none; }
.control-panel { padding: clamp(24px, 3.2vw, 44px); }
.panel-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 20px; }
.panel-heading h2 { margin: 10px 0 0; font-size: clamp(1.35rem, 2vw, 1.8rem); font-weight: 600; letter-spacing: -.035em; }
.local-badge { padding: 7px 9px; border: 1px solid rgba(198,255,74,.28); color: var(--lime); background: rgba(198,255,74,.06); font: 500 .6rem/1 var(--mono); letter-spacing: .14em; }
.panel-copy { margin: 22px 0 30px; color: var(--muted); font-size: .82rem; line-height: 1.7; }
.field-stack, .advanced-fields { display: grid; gap: 10px; }
.field-stack label, .advanced-fields label, #e2e-generation-controls label { display: grid !important; gap: 4px !important; margin-top: 12px; }
label span, #e2e-generation-controls label span { color: #d9deeb; font-size: .76rem; font-weight: 600; }
label small { color: #6f778b; font: .58rem/1.4 var(--mono); }
input, select {
width: 100%;
min-width: 0;
height: 45px;
border: 1px solid var(--line-bright);
border-radius: 0;
outline: none;
color: #dce2f1;
background: rgba(3, 6, 12, .58);
padding: 0 13px;
font: .68rem/1 var(--mono);
transition: border-color .2s ease, box-shadow .2s ease, background .2s ease;
}
input:focus, select:focus { border-color: rgba(88,230,255,.62); background: rgba(4,10,17,.86); box-shadow: 0 0 0 3px rgba(88,230,255,.08); }
select { appearance: none; background-image: linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%); background-position: calc(100% - 17px) 19px,calc(100% - 12px) 19px; background-size: 5px 5px; background-repeat: no-repeat; }
.advanced { margin-top: 24px; border-block: 1px solid var(--line); }
.advanced summary { display: flex; justify-content: space-between; padding: 18px 0; color: #cdd3e0; cursor: pointer; list-style: none; font-size: .76rem; font-weight: 600; }
.advanced summary::-webkit-details-marker { display: none; }
.advanced summary::before { content: "+"; margin-right: 10px; color: var(--lime); font: 500 .9rem var(--mono); }
.advanced[open] summary::before { content: "−"; }
.advanced summary small { margin-left: auto; color: var(--muted); font: .6rem var(--mono); letter-spacing: .08em; text-transform: uppercase; }
.advanced-fields { padding-bottom: 22px; }
.run-actions { display: grid; grid-template-columns: 1fr auto; gap: 8px; margin-top: 26px; }
button { min-height: 44px; border: 1px solid var(--line-bright); color: #dfe4f0; background: rgba(255,255,255,.035); cursor: pointer; transition: transform .2s ease, border-color .2s ease, background .2s ease, color .2s ease; }
button:hover:not(:disabled) { transform: translateY(-1px); border-color: rgba(198,255,74,.5); }
button:focus-visible { outline: 2px solid var(--cyan); outline-offset: 2px; }
button:disabled { opacity: .38; cursor: not-allowed; }
.run-button { display: flex; align-items: center; justify-content: space-between; min-height: 54px; padding: 0 18px; border-color: var(--lime); color: #0b0e0a; background: var(--lime); font-size: .77rem; font-weight: 800; }
.run-button:hover:not(:disabled) { color: #080a07; background: #d6ff79; box-shadow: 0 10px 35px rgba(198,255,74,.12); }
.run-button b { font-size: 1.1rem; }
.cancel-button { padding-inline: 17px; font: .65rem var(--mono); text-transform: uppercase; }
.status-card { display: grid; grid-template-columns: auto 1fr; gap: 12px; margin-top: 14px; padding: 14px; border: 1px solid var(--line); background: rgba(0,0,0,.2); }
.status-pulse { width: 7px; height: 7px; margin-top: 4px; border-radius: 50%; background: var(--lime); box-shadow: 0 0 14px rgba(198,255,74,.55); animation: pulse 2.2s ease-in-out infinite; }
.status-card small { color: #697186; font: 500 .56rem/1 var(--mono); letter-spacing: .12em; }
.status-card p { margin: 7px 0 0; color: #aeb5c5; font: .63rem/1.65 var(--mono); }
#e2e-generation-controls { display: grid !important; gap: 18px !important; margin: 28px 0 0 !important; padding: 28px 0 0 !important; border: 0 !important; border-top: 1px solid var(--line) !important; border-radius: 0 !important; }
#e2e-generation-controls h2 { margin: 0 !important; font-size: .8rem !important; font-weight: 700; text-transform: uppercase; letter-spacing: .08em; }
#e2e-generation-controls > div { gap: 8px !important; }
#e2e-generation-controls > div:first-of-type { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
#e2e-generation-controls button { min-height: 36px; padding: 7px 10px; font: .62rem var(--mono); }
#e2e-generation-controls [data-steps-preset] { min-width: 36px; color: var(--lime); }
#e2e-generation-controls [data-testid="e2e-storage-status"], #e2e-generation-controls [data-testid="e2e-image-status"] { padding-left: 12px; border-left: 1px solid var(--line-bright); color: var(--muted); font: .59rem/1.6 var(--mono); }
#e2e-generation-controls table { min-width: 760px; font: .55rem/1.5 var(--mono); }
#e2e-generation-controls th, #e2e-generation-controls td { padding: 9px 8px; border-bottom: 1px solid var(--line); text-align: left; white-space: nowrap; }
#e2e-generation-controls th { color: #7f8799; font-weight: 500; text-transform: uppercase; }
#e2e-generation-controls td { color: #b7bece; }
.viewer-panel { display: flex; min-height: 790px; padding: clamp(24px, 3.2vw, 44px); flex-direction: column; overflow: hidden; }
.viewer-heading { margin-bottom: 22px; }
.viewer-heading > p { margin: 0; padding: 8px 10px; border: 1px solid var(--line); color: #8d95a7; background: rgba(0,0,0,.18); font: .58rem/1 var(--mono); letter-spacing: .06em; text-transform: uppercase; }
.viewer-heading > p::before { content: "●"; margin-right: 7px; color: #555e71; }
.viewer-heading > p[data-viewer-state="ready"] { color: var(--lime); border-color: rgba(198,255,74,.28); }
.viewer-heading > p[data-viewer-state="ready"]::before { color: var(--lime); }
.viewer-heading > p[data-viewer-state="loading"] { color: var(--cyan); }
#e2e-preview-root { position: relative; width: 100%; min-height: 620px; flex: 1; overflow: hidden; border: 1px solid var(--line); background: radial-gradient(circle at center, rgba(91,79,172,.15), transparent 38%), #030509; }
#e2e-preview-root::before, #e2e-preview-root::after { content: ""; position: absolute; z-index: 3; pointer-events: none; }
#e2e-preview-root::before { inset: 14px; border: 1px solid rgba(255,255,255,.035); }
#e2e-preview-root::after { inset: 50% 0 auto; height: 1px; background: linear-gradient(90deg,transparent,rgba(88,230,255,.12),transparent); }
#e2e-preview-root .preview-panel { display: flex; width: 100%; height: 100%; min-height: 620px; flex-direction: column; }
#e2e-preview-root .preview-toolbar { position: absolute; z-index: 4; right: 18px; bottom: 18px; left: 18px; display: flex; justify-content: space-between; gap: 1rem; color: #9ba3b5; font: .6rem var(--mono); }
#e2e-preview-root .splat-canvas-shell { position: relative; flex: 1; min-height: 600px; overflow: hidden; background: #030509; }
#e2e-preview-root .splat-canvas-host { position: absolute; inset: 0; }
#e2e-preview-root .splat-canvas-host canvas { display: block; width: 100% !important; height: 100% !important; }
#e2e-preview-root .splat-empty { position: absolute; inset: 0; display: grid; place-items: center; color: #b8bfce; }
.viewer-placeholder { position: absolute; inset: 0; display: grid; z-index: 0; place-content: center; justify-items: center; text-align: center; background-image: radial-gradient(circle, rgba(255,255,255,.08) 1px, transparent 1px); background-size: 18px 18px; mask-image: radial-gradient(circle, #000, transparent 68%); }
.orbital { position: relative; width: 170px; height: 170px; border: 1px solid rgba(88,230,255,.18); border-radius: 50%; animation: rotate 18s linear infinite; }
.orbital::before, .orbital::after { content: ""; position: absolute; border-radius: 50%; border: 1px solid rgba(143,124,255,.28); transform: rotate(62deg); }
.orbital::before { inset: 20px -14px; }
.orbital::after { inset: -14px 20px; transform: rotate(-35deg); }
.orbital span { position: absolute; inset: 54px; border-radius: 50%; background: radial-gradient(circle at 38% 30%, #e8ffb5, var(--lime) 14%, #725fff 48%, transparent 70%); filter: blur(.3px); box-shadow: 0 0 55px rgba(143,124,255,.35); }
.orbital i { position: absolute; top: 50%; left: -3px; width: 6px; height: 6px; border-radius: 50%; background: var(--cyan); box-shadow: 0 0 12px var(--cyan); }
.viewer-placeholder p { margin: 32px 0 5px; color: #d9deeb; font-size: .8rem; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; }
.viewer-placeholder small { color: #6e7689; font: .6rem var(--mono); }
.preview-panel + .viewer-placeholder, #e2e-preview-root:has(.preview-panel) > .viewer-placeholder { display: none; }
.viewer-footer { display: flex; justify-content: space-between; padding: 13px 2px 0; color: #626a7d; font: .55rem/1 var(--mono); letter-spacing: .09em; }
.notice { display: grid; grid-template-columns: auto 1fr; gap: 20px; margin: 14px 0 70px; padding: 22px 24px; border: 1px solid var(--line); color: var(--muted); background: rgba(13,17,29,.56); }
.notice span { color: var(--lime); font: .6rem var(--mono); letter-spacing: .12em; }
.notice p { max-width: 920px; margin: 0; font-size: .72rem; line-height: 1.7; }
.error { margin: 14px 0; padding: 18px; overflow: auto; border: 1px solid rgba(255,111,145,.36); color: #ff9bb3; background: rgba(75,14,33,.22); font: .7rem/1.7 var(--mono); white-space: pre-wrap; }
footer { display: flex; justify-content: space-between; width: min(100% - 40px, 1500px); margin: 0 auto; padding: 24px 0 36px; border-top: 1px solid var(--line); color: #596174; font: .55rem/1 var(--mono); letter-spacing: .1em; }
@keyframes pulse { 50% { opacity: .35; box-shadow: 0 0 3px rgba(198,255,74,.2); } }
@keyframes rotate { to { transform: rotate(360deg); } }
@media (max-width: 980px) {
.workspace-grid { grid-template-columns: 1fr; }
.viewer-panel { min-height: 680px; }
#e2e-preview-root, #e2e-preview-root .preview-panel { min-height: 520px; }
#e2e-preview-root .splat-canvas-shell { min-height: 500px; }
}
@media (max-width: 620px) {
.topbar, .app-shell, footer { width: min(100% - 24px, 1500px); }
.topbar { min-height: 66px; }
.topbar-meta { gap: 12px; }
.topbar-meta > a { display: none; }
.hero { padding-top: 58px; }
.hero h1 { font-size: clamp(3.1rem, 16vw, 5rem); }
.pipeline i { display: none; }
.workspace-grid { margin-inline: -12px; }
.panel { border-inline: 0; }
.viewer-panel { min-height: 570px; }
#e2e-preview-root, #e2e-preview-root .preview-panel { min-height: 400px; }
#e2e-preview-root .splat-canvas-shell { min-height: 380px; }
.viewer-heading { display: grid; }
.viewer-heading > p { margin-top: 12px; width: fit-content; }
.viewer-footer span:nth-child(2) { display: none; }
.notice { grid-template-columns: 1fr; }
footer { gap: 20px; line-height: 1.5; }
}
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; }
}