543 lines
9.6 KiB
CSS
543 lines
9.6 KiB
CSS
:root {
|
|
--bg: #0b0d10;
|
|
--surface: #12161b;
|
|
--surface-2: #171c22;
|
|
--surface-3: #1d232b;
|
|
--border: #2a3038;
|
|
--border-strong: #39414b;
|
|
--text: #edf1f5;
|
|
--muted: #9aa4af;
|
|
--accent: #d4d8de;
|
|
--accent-ink: #0f1318;
|
|
--success: #66bb8a;
|
|
--danger: #ef8c8c;
|
|
--shadow: 0 20px 48px rgba(0, 0, 0, 0.28);
|
|
--radius-sm: 8px;
|
|
--radius-md: 12px;
|
|
--radius-lg: 16px;
|
|
--space-1: 4px;
|
|
--space-2: 8px;
|
|
--space-3: 12px;
|
|
--space-4: 16px;
|
|
--space-5: 24px;
|
|
--space-6: 32px;
|
|
}
|
|
|
|
html {
|
|
scroll-behavior: smooth;
|
|
}
|
|
|
|
body {
|
|
background: var(--bg);
|
|
color: var(--text);
|
|
font-family: Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
letter-spacing: -0.01em;
|
|
}
|
|
|
|
.shell-header {
|
|
background: rgba(11, 13, 16, 0.88);
|
|
backdrop-filter: blur(12px);
|
|
}
|
|
|
|
.navbar-brand {
|
|
letter-spacing: -0.03em;
|
|
}
|
|
|
|
.panel {
|
|
background: var(--surface);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-lg);
|
|
box-shadow: var(--shadow);
|
|
}
|
|
|
|
.inset-panel {
|
|
background: var(--surface-2);
|
|
box-shadow: none;
|
|
}
|
|
|
|
.hero-panel {
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.hero-panel::after {
|
|
content: "";
|
|
position: absolute;
|
|
inset: 0;
|
|
border: 1px solid rgba(255, 255, 255, 0.03);
|
|
border-radius: inherit;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.display-title {
|
|
font-size: clamp(2rem, 3vw, 3.5rem);
|
|
line-height: 1.02;
|
|
font-weight: 650;
|
|
max-width: 12ch;
|
|
letter-spacing: -0.05em;
|
|
}
|
|
|
|
.eyebrow,
|
|
.small-label {
|
|
color: var(--muted);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.12em;
|
|
font-size: 0.72rem;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.lead,
|
|
.text-secondary,
|
|
.form-text,
|
|
.form-label,
|
|
.form-control::placeholder,
|
|
textarea::placeholder {
|
|
color: var(--muted) !important;
|
|
}
|
|
|
|
.meta-pills,
|
|
.control-stack {
|
|
display: grid;
|
|
gap: var(--space-3);
|
|
}
|
|
|
|
.chip,
|
|
.badge-soft,
|
|
.value-pill,
|
|
.gamepad-state {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: var(--space-2);
|
|
border: 1px solid var(--border-strong);
|
|
background: rgba(255, 255, 255, 0.02);
|
|
color: var(--text);
|
|
border-radius: 999px;
|
|
padding: 0.5rem 0.8rem;
|
|
font-size: 0.85rem;
|
|
}
|
|
|
|
.badge-soft {
|
|
padding: 0.45rem 0.7rem;
|
|
}
|
|
|
|
.spec-list {
|
|
display: grid;
|
|
gap: var(--space-3);
|
|
}
|
|
|
|
.spec-list > div {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: var(--space-4);
|
|
padding-bottom: var(--space-2);
|
|
border-bottom: 1px solid rgba(255, 255, 255, 0.04);
|
|
}
|
|
|
|
.spec-list > div:last-child {
|
|
border-bottom: 0;
|
|
padding-bottom: 0;
|
|
}
|
|
|
|
.spec-list span,
|
|
.mini-stat span,
|
|
.preset-metrics span {
|
|
color: var(--muted);
|
|
font-size: 0.82rem;
|
|
}
|
|
|
|
.spec-list.compact {
|
|
gap: var(--space-2);
|
|
}
|
|
|
|
.status-dot {
|
|
width: 10px;
|
|
height: 10px;
|
|
border-radius: 999px;
|
|
display: inline-block;
|
|
margin-top: 4px;
|
|
}
|
|
|
|
.status-live {
|
|
background: var(--success);
|
|
box-shadow: 0 0 0 8px rgba(102, 187, 138, 0.12);
|
|
}
|
|
|
|
.status-idle {
|
|
background: #66707a;
|
|
box-shadow: 0 0 0 8px rgba(102, 112, 122, 0.12);
|
|
}
|
|
|
|
.recliner-stage {
|
|
position: relative;
|
|
background: #101419;
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-md);
|
|
min-height: 360px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.grid-fade {
|
|
position: absolute;
|
|
inset: 0;
|
|
background-image:
|
|
linear-gradient(to right, rgba(255, 255, 255, 0.04) 1px, transparent 1px),
|
|
linear-gradient(to bottom, rgba(255, 255, 255, 0.04) 1px, transparent 1px);
|
|
background-size: 36px 36px;
|
|
mask-image: linear-gradient(180deg, rgba(0,0,0,0.65), transparent 95%);
|
|
}
|
|
|
|
.axis-label {
|
|
position: absolute;
|
|
top: 18px;
|
|
color: var(--muted);
|
|
font-size: 0.72rem;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.08em;
|
|
}
|
|
|
|
.axis-label-left { left: 18px; }
|
|
.axis-label-right { right: 18px; }
|
|
|
|
.recliner-figure {
|
|
position: absolute;
|
|
left: 50%;
|
|
bottom: 48px;
|
|
width: 320px;
|
|
height: 230px;
|
|
transform: translateX(calc(-50% - (var(--angle) * 0.18px))) translateY(calc(var(--angle) * 0.06px));
|
|
}
|
|
|
|
.recliner-shadow,
|
|
.recliner-seat,
|
|
.recliner-arm,
|
|
.recliner-back,
|
|
.recliner-head,
|
|
.recliner-leg,
|
|
.recliner-base {
|
|
position: absolute;
|
|
background: var(--surface-3);
|
|
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
}
|
|
|
|
.recliner-shadow {
|
|
left: 78px;
|
|
right: 26px;
|
|
bottom: 6px;
|
|
height: 18px;
|
|
border: 0;
|
|
background: rgba(0, 0, 0, 0.32);
|
|
filter: blur(14px);
|
|
border-radius: 999px;
|
|
}
|
|
|
|
.recliner-seat {
|
|
left: 92px;
|
|
bottom: 78px;
|
|
width: 130px;
|
|
height: 52px;
|
|
border-radius: 14px 14px 10px 10px;
|
|
}
|
|
|
|
.recliner-arm {
|
|
left: 120px;
|
|
bottom: 118px;
|
|
width: 82px;
|
|
height: 20px;
|
|
border-radius: 10px;
|
|
}
|
|
|
|
.recliner-back {
|
|
left: 106px;
|
|
bottom: 108px;
|
|
width: 34px;
|
|
height: 116px;
|
|
border-radius: 14px;
|
|
transform-origin: 18px calc(100% - 10px);
|
|
transform: rotate(calc(-92deg + (var(--angle) * 0.5deg)));
|
|
}
|
|
|
|
.recliner-head {
|
|
left: 90px;
|
|
bottom: 188px;
|
|
width: 48px;
|
|
height: 30px;
|
|
border-radius: 14px;
|
|
transform: rotate(calc(-14deg + (var(--angle) * 0.1deg)));
|
|
}
|
|
|
|
.recliner-leg {
|
|
left: 202px;
|
|
bottom: 88px;
|
|
width: 24px;
|
|
height: 96px;
|
|
border-radius: 14px;
|
|
transform-origin: 12px 10px;
|
|
transform: rotate(calc(10deg + (var(--angle) * 0.42deg)));
|
|
}
|
|
|
|
.recliner-base {
|
|
left: 112px;
|
|
bottom: 44px;
|
|
width: 112px;
|
|
height: 14px;
|
|
border-radius: 999px;
|
|
}
|
|
|
|
.angle-indicator {
|
|
position: absolute;
|
|
right: 12px;
|
|
top: 16px;
|
|
display: inline-flex;
|
|
flex-direction: column;
|
|
align-items: flex-end;
|
|
padding: 12px 14px;
|
|
border: 1px solid var(--border-strong);
|
|
border-radius: var(--radius-sm);
|
|
background: rgba(11, 13, 16, 0.74);
|
|
}
|
|
|
|
.angle-indicator span {
|
|
font-size: 1.85rem;
|
|
font-weight: 650;
|
|
line-height: 1;
|
|
}
|
|
|
|
.angle-indicator small {
|
|
color: var(--muted);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.09em;
|
|
margin-top: 4px;
|
|
}
|
|
|
|
.stat-row {
|
|
margin-top: -4px;
|
|
}
|
|
|
|
.mini-stat {
|
|
height: 100%;
|
|
background: rgba(255, 255, 255, 0.02);
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-sm);
|
|
padding: 14px;
|
|
}
|
|
|
|
.mini-stat strong {
|
|
display: block;
|
|
margin-top: 6px;
|
|
font-size: 1rem;
|
|
}
|
|
|
|
.control-group {
|
|
padding-bottom: var(--space-3);
|
|
border-bottom: 1px solid rgba(255, 255, 255, 0.04);
|
|
}
|
|
|
|
.control-group:last-child {
|
|
padding-bottom: 0;
|
|
border-bottom: 0;
|
|
}
|
|
|
|
.form-range::-webkit-slider-runnable-track {
|
|
background: #242a32;
|
|
height: 4px;
|
|
border-radius: 999px;
|
|
}
|
|
|
|
.form-range::-webkit-slider-thumb {
|
|
margin-top: -6px;
|
|
width: 16px;
|
|
height: 16px;
|
|
background: var(--accent);
|
|
border: 0;
|
|
}
|
|
|
|
.form-range::-moz-range-track {
|
|
background: #242a32;
|
|
height: 4px;
|
|
border-radius: 999px;
|
|
}
|
|
|
|
.form-range::-moz-range-thumb {
|
|
width: 16px;
|
|
height: 16px;
|
|
border: 0;
|
|
background: var(--accent);
|
|
}
|
|
|
|
.form-control,
|
|
.form-select,
|
|
textarea {
|
|
background: #0f1318 !important;
|
|
border: 1px solid var(--border-strong) !important;
|
|
color: var(--text) !important;
|
|
border-radius: 10px !important;
|
|
padding: 0.75rem 0.9rem !important;
|
|
}
|
|
|
|
.form-control:focus,
|
|
.form-select:focus,
|
|
textarea:focus,
|
|
.btn:focus,
|
|
.form-range:focus {
|
|
box-shadow: 0 0 0 0.2rem rgba(212, 216, 222, 0.12) !important;
|
|
border-color: #58616d !important;
|
|
}
|
|
|
|
.btn {
|
|
border-radius: 10px;
|
|
padding: 0.78rem 1rem;
|
|
font-weight: 600;
|
|
letter-spacing: -0.01em;
|
|
}
|
|
|
|
.btn-light {
|
|
background: var(--accent);
|
|
color: var(--accent-ink);
|
|
border-color: var(--accent);
|
|
}
|
|
|
|
.btn-light:hover,
|
|
.btn-light:focus {
|
|
background: #e3e7eb;
|
|
border-color: #e3e7eb;
|
|
color: var(--accent-ink);
|
|
}
|
|
|
|
.btn-accent {
|
|
background: #e6eaef;
|
|
color: #11151a;
|
|
border: 1px solid #e6eaef;
|
|
}
|
|
|
|
.btn-accent:hover,
|
|
.btn-accent:focus {
|
|
background: #f2f4f6;
|
|
border-color: #f2f4f6;
|
|
color: #11151a;
|
|
}
|
|
|
|
.btn-outline-light {
|
|
border-color: var(--border-strong);
|
|
}
|
|
|
|
.btn-link {
|
|
color: #cdd3db;
|
|
}
|
|
|
|
.btn-link:hover,
|
|
.btn-link:focus {
|
|
color: #f0f3f6;
|
|
}
|
|
|
|
.preset-list {
|
|
display: grid;
|
|
gap: var(--space-3);
|
|
}
|
|
|
|
.preset-card,
|
|
.empty-state {
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-md);
|
|
padding: 16px;
|
|
background: rgba(255, 255, 255, 0.02);
|
|
}
|
|
|
|
.preset-card.is-active {
|
|
border-color: #5c6570;
|
|
background: rgba(255, 255, 255, 0.03);
|
|
}
|
|
|
|
.preset-metrics {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 12px;
|
|
}
|
|
|
|
.alert-danger {
|
|
background: rgba(239, 140, 140, 0.12);
|
|
color: #ffd9d9;
|
|
}
|
|
|
|
code {
|
|
color: #f4f7fa;
|
|
}
|
|
|
|
.preset-detail-specs > div {
|
|
padding: 12px 0;
|
|
}
|
|
|
|
footer {
|
|
background: rgba(255, 255, 255, 0.01);
|
|
}
|
|
|
|
@media (max-width: 991.98px) {
|
|
.display-title {
|
|
max-width: none;
|
|
}
|
|
|
|
.recliner-stage {
|
|
min-height: 320px;
|
|
}
|
|
|
|
.recliner-figure {
|
|
width: 280px;
|
|
height: 220px;
|
|
}
|
|
|
|
.recliner-seat {
|
|
left: 76px;
|
|
width: 122px;
|
|
}
|
|
|
|
.recliner-base {
|
|
left: 92px;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 575.98px) {
|
|
.recliner-stage {
|
|
min-height: 280px;
|
|
}
|
|
|
|
.recliner-figure {
|
|
width: 240px;
|
|
height: 200px;
|
|
bottom: 36px;
|
|
}
|
|
|
|
.recliner-seat {
|
|
left: 58px;
|
|
bottom: 72px;
|
|
width: 112px;
|
|
height: 46px;
|
|
}
|
|
|
|
.recliner-back {
|
|
left: 68px;
|
|
bottom: 98px;
|
|
height: 104px;
|
|
}
|
|
|
|
.recliner-head {
|
|
left: 56px;
|
|
bottom: 170px;
|
|
}
|
|
|
|
.recliner-leg {
|
|
left: 168px;
|
|
height: 86px;
|
|
}
|
|
|
|
.recliner-base {
|
|
left: 76px;
|
|
width: 100px;
|
|
}
|
|
|
|
.angle-indicator {
|
|
right: 8px;
|
|
top: 8px;
|
|
padding: 10px 12px;
|
|
}
|
|
}
|