39282-vm/assets/css/custom.css
Flatlogic Bot 16b7d41fc5 v1
2026-03-23 19:19:15 +00:00

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;
}
}