Mike0021's picture
Polish Space viewport chrome spacing
f04ce79 verified
Raw
History Blame Contribute Delete
10.5 kB
:root {
color-scheme: dark;
font-family:
Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
--ink: #f4f7fb;
--muted: rgba(244, 247, 251, 0.72);
--quiet: rgba(244, 247, 251, 0.48);
--panel: rgba(8, 14, 18, 0.68);
--panel-strong: rgba(8, 14, 18, 0.86);
--line: rgba(255, 255, 255, 0.16);
--line-strong: rgba(255, 255, 255, 0.28);
--accent: #35e6c9;
--accent-2: #ffcf5a;
--danger: #ff6978;
--shadow: 0 24px 80px rgba(0, 0, 0, 0.36);
}
* {
box-sizing: border-box;
}
html,
body,
#app {
width: 100%;
height: 100%;
margin: 0;
overflow: hidden;
background: #030607;
color: var(--ink);
}
button {
border: 0;
font: inherit;
color: inherit;
}
#viewport {
position: fixed;
inset: 0;
background:
radial-gradient(circle at 30% 18%, rgba(53, 230, 201, 0.12), transparent 28rem),
linear-gradient(180deg, #061114, #010202);
}
#viewport canvas {
display: block;
width: 100% !important;
height: 100% !important;
cursor: crosshair;
}
.grain {
position: fixed;
inset: 0;
pointer-events: none;
opacity: 0.16;
mix-blend-mode: soft-light;
background-image:
linear-gradient(rgba(255, 255, 255, 0.04) 1px, transparent 1px),
linear-gradient(90deg, rgba(255, 255, 255, 0.04) 1px, transparent 1px);
background-size: 6px 6px;
mask-image: linear-gradient(180deg, transparent, #000 16%, #000 84%, transparent);
}
.topbar {
position: fixed;
top: clamp(14px, 3vw, 28px);
left: clamp(14px, 3vw, 32px);
right: clamp(14px, 3vw, 32px);
z-index: 3;
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 18px;
pointer-events: none;
}
.eyebrow {
margin: 0 0 6px;
font-size: 0.72rem;
font-weight: 700;
letter-spacing: 0;
text-transform: uppercase;
color: var(--accent);
}
h1 {
margin: 0;
max-width: min(760px, 70vw);
font-size: clamp(2.1rem, 5vw, 5.3rem);
line-height: 0.94;
letter-spacing: 0;
text-shadow: 0 10px 48px rgba(0, 0, 0, 0.7);
}
.status-strip {
position: fixed;
top: clamp(78px, 9vh, 92px);
right: clamp(14px, 3vw, 32px);
display: flex;
align-items: center;
gap: 8px;
min-height: 38px;
padding: 8px 10px;
border: 1px solid var(--line);
border-radius: 8px;
background: var(--panel);
box-shadow: var(--shadow);
backdrop-filter: blur(18px);
color: var(--muted);
font-size: 0.78rem;
white-space: nowrap;
}
.status-strip span {
display: inline-flex;
align-items: center;
min-height: 20px;
}
.status-strip span:first-child {
color: var(--ink);
font-weight: 700;
}
.status-strip span + span::before {
content: "";
width: 5px;
height: 5px;
margin-right: 8px;
border-radius: 50%;
background: var(--accent);
box-shadow: 0 0 16px var(--accent);
}
.hero-panel {
position: fixed;
left: clamp(14px, 3vw, 32px);
bottom: clamp(138px, 19vh, 210px);
z-index: 3;
display: grid;
gap: 18px;
width: min(450px, calc(100vw - 28px));
pointer-events: none;
}
.hero-copy {
display: grid;
gap: 12px;
}
.pill {
width: fit-content;
padding: 7px 10px;
border: 1px solid rgba(53, 230, 201, 0.42);
border-radius: 999px;
background: rgba(3, 8, 9, 0.52);
color: #a5fff1;
font-size: 0.78rem;
font-weight: 800;
box-shadow: 0 0 34px rgba(53, 230, 201, 0.18);
backdrop-filter: blur(14px);
}
.hero-copy p {
margin: 0;
max-width: 42ch;
color: rgba(244, 247, 251, 0.82);
font-size: clamp(1rem, 1.8vw, 1.2rem);
line-height: 1.45;
text-shadow: 0 6px 28px rgba(0, 0, 0, 0.72);
}
.primary-actions {
display: flex;
flex-wrap: wrap;
gap: 10px;
pointer-events: auto;
}
.primary-button,
.ghost-button,
.icon-button,
.scene-option,
.segment {
min-height: 42px;
border: 1px solid var(--line);
border-radius: 8px;
background: var(--panel);
box-shadow: 0 12px 34px rgba(0, 0, 0, 0.24);
backdrop-filter: blur(18px);
transition:
transform 160ms ease,
border-color 160ms ease,
background 160ms ease,
color 160ms ease;
}
.primary-button,
.ghost-button {
display: inline-flex;
align-items: center;
gap: 10px;
padding: 0 18px;
font-weight: 800;
cursor: pointer;
}
.primary-button {
background: linear-gradient(135deg, rgba(53, 230, 201, 0.96), rgba(95, 172, 255, 0.88));
color: #03100e;
border-color: rgba(255, 255, 255, 0.36);
}
.ghost-button {
color: var(--ink);
}
.button-icon {
display: grid;
place-items: center;
width: 21px;
height: 21px;
border-radius: 999px;
background: rgba(255, 255, 255, 0.18);
font-size: 0.82rem;
line-height: 1;
}
.primary-button:hover,
.ghost-button:hover,
.icon-button:hover,
.scene-option:hover,
.segment:hover {
transform: translateY(-1px);
border-color: var(--line-strong);
}
.controls {
position: fixed;
left: clamp(14px, 3vw, 32px);
right: clamp(14px, 3vw, 32px);
bottom: clamp(14px, 3vw, 28px);
z-index: 4;
display: grid;
grid-template-columns: 1fr auto;
gap: 12px;
align-items: end;
pointer-events: none;
}
.scene-grid {
display: grid;
grid-template-columns: repeat(4, minmax(118px, 1fr));
gap: 10px;
max-width: 760px;
pointer-events: auto;
}
.scene-option {
position: relative;
display: grid;
min-height: 82px;
padding: 10px;
overflow: hidden;
isolation: isolate;
text-align: left;
cursor: pointer;
}
.scene-option::before {
content: "";
position: absolute;
inset: 0;
z-index: -2;
background-image: var(--thumb);
background-position: center;
background-size: cover;
filter: saturate(1.06) contrast(1.05);
transform: scale(1.04);
}
.scene-option::after {
content: "";
position: absolute;
inset: 0;
z-index: -1;
background:
linear-gradient(180deg, rgba(0, 0, 0, 0.08), rgba(0, 0, 0, 0.74)),
linear-gradient(90deg, rgba(0, 0, 0, 0.42), transparent 70%);
}
.scene-option.active {
border-color: rgba(53, 230, 201, 0.72);
box-shadow:
0 0 0 1px rgba(53, 230, 201, 0.18) inset,
0 18px 44px rgba(0, 0, 0, 0.3);
}
.scene-name {
align-self: end;
display: grid;
gap: 2px;
font-weight: 850;
text-shadow: 0 3px 12px rgba(0, 0, 0, 0.72);
}
.scene-name small {
color: rgba(244, 247, 251, 0.72);
font-size: 0.72rem;
font-weight: 650;
}
.control-row {
display: flex;
gap: 10px;
justify-content: flex-end;
pointer-events: auto;
}
.segmented {
display: flex;
min-height: 42px;
overflow: hidden;
border: 1px solid var(--line);
border-radius: 8px;
background: var(--panel);
box-shadow: 0 12px 34px rgba(0, 0, 0, 0.24);
backdrop-filter: blur(18px);
}
.segment {
min-width: 92px;
border: 0;
border-radius: 0;
background: transparent;
box-shadow: none;
color: var(--muted);
cursor: pointer;
}
.segment.active {
background: rgba(255, 255, 255, 0.14);
color: var(--ink);
font-weight: 800;
}
.icon-button {
display: grid;
place-items: center;
width: 44px;
padding: 0;
cursor: pointer;
font-size: 1.15rem;
}
.hud {
position: fixed;
inset: 0;
z-index: 2;
pointer-events: none;
}
.reticle {
position: absolute;
top: 50%;
left: 50%;
width: 18px;
height: 18px;
opacity: 0;
transform: translate(-50%, -50%);
transition: opacity 160ms ease;
}
.reticle::before,
.reticle::after {
content: "";
position: absolute;
background: rgba(255, 255, 255, 0.82);
box-shadow: 0 0 14px rgba(53, 230, 201, 0.45);
}
.reticle::before {
top: 8px;
left: 0;
width: 18px;
height: 2px;
}
.reticle::after {
top: 0;
left: 8px;
width: 2px;
height: 18px;
}
.is-walking .reticle {
opacity: 1;
}
.metrics {
position: absolute;
right: clamp(14px, 3vw, 32px);
bottom: clamp(78px, 12vh, 120px);
display: flex;
gap: 8px;
}
.metrics span {
min-width: 70px;
padding: 8px 10px;
border: 1px solid var(--line);
border-radius: 8px;
background: rgba(8, 14, 18, 0.58);
color: rgba(244, 247, 251, 0.76);
text-align: center;
font-size: 0.76rem;
font-weight: 800;
backdrop-filter: blur(16px);
}
.loading-overlay {
position: fixed;
inset: 0;
z-index: 8;
display: grid;
place-items: center;
background:
radial-gradient(circle at 50% 35%, rgba(53, 230, 201, 0.22), transparent 30rem),
rgba(1, 3, 4, 0.72);
backdrop-filter: blur(10px);
transition:
opacity 280ms ease,
visibility 280ms ease;
}
.loading-overlay.hidden {
visibility: hidden;
opacity: 0;
}
.loader-card {
display: flex;
align-items: center;
gap: 16px;
max-width: min(420px, calc(100vw - 32px));
padding: 18px;
border: 1px solid var(--line);
border-radius: 8px;
background: var(--panel-strong);
box-shadow: var(--shadow);
}
.loader-ring {
width: 52px;
height: 52px;
flex: 0 0 auto;
border: 3px solid rgba(255, 255, 255, 0.12);
border-top-color: var(--accent);
border-radius: 50%;
animation: spin 900ms linear infinite;
}
.loader-title {
margin: 0 0 4px;
font-weight: 850;
}
#loaderText {
margin: 0;
color: var(--muted);
line-height: 1.4;
}
.toast {
position: fixed;
right: clamp(14px, 3vw, 32px);
top: clamp(70px, 12vh, 118px);
z-index: 9;
max-width: min(360px, calc(100vw - 28px));
padding: 12px 14px;
border: 1px solid var(--line);
border-radius: 8px;
background: var(--panel-strong);
box-shadow: var(--shadow);
color: rgba(244, 247, 251, 0.84);
opacity: 0;
transform: translateY(-8px);
pointer-events: none;
transition:
opacity 180ms ease,
transform 180ms ease;
}
.toast.visible {
opacity: 1;
transform: translateY(0);
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
@media (max-width: 820px) {
.topbar {
align-items: flex-start;
}
h1 {
max-width: 100%;
font-size: clamp(2rem, 11vw, 3.6rem);
}
.status-strip {
display: none;
}
.hero-panel {
bottom: 206px;
}
.controls {
grid-template-columns: 1fr;
}
.scene-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
max-width: none;
}
.control-row {
justify-content: stretch;
}
.segmented {
flex: 1;
}
.segment {
flex: 1;
min-width: 0;
}
.metrics {
right: 14px;
bottom: 164px;
}
}
@media (max-width: 520px) {
.topbar {
top: 12px;
left: 14px;
right: 14px;
}
.hero-panel {
bottom: 244px;
}
.hero-copy p {
display: none;
}
.scene-option {
min-height: 70px;
}
.primary-actions {
width: 100%;
}
.primary-button,
.ghost-button {
flex: 1;
justify-content: center;
min-width: 0;
}
.metrics {
display: none;
}
}