mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-19 05:26:47 +00:00
10bfad97da
The beacon is now a dark cinema card: a small canvas paints a breathing night-world with golden travel arcs on loop, colored glows drift over it, the title carries a gold sheen sweep and the copy sits on a bottom scrim. Core colors ride inline so no dashboard widget CSS can wash the card out again.
428 lines
9.7 KiB
CSS
428 lines
9.7 KiB
CSS
/* TREK 4.0.0 "KEINE ANGST" — styles for the beacon and the show.
|
|
Temporary by design: remove together with the FourZero folder. */
|
|
|
|
.fz-overlay {
|
|
position: fixed;
|
|
inset: 0;
|
|
z-index: 9999;
|
|
background: #05060a;
|
|
overflow: hidden;
|
|
color: #f5f2ea;
|
|
font-family: inherit;
|
|
}
|
|
|
|
.fz-canvas {
|
|
position: absolute;
|
|
inset: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
.fz-vignette {
|
|
position: absolute;
|
|
inset: 0;
|
|
pointer-events: none;
|
|
background: radial-gradient(ellipse at center, transparent 52%, rgba(160, 25, 25, 0.28) 100%);
|
|
animation: fzVignettePulse 2.6s ease-in-out infinite;
|
|
}
|
|
|
|
@keyframes fzVignettePulse {
|
|
0%, 100% { opacity: 0.55; }
|
|
50% { opacity: 1; }
|
|
}
|
|
|
|
/* ── the lines ── */
|
|
|
|
.fz-line-wrap {
|
|
position: absolute;
|
|
inset: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 0 12vw;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.fz-line {
|
|
max-width: 900px;
|
|
text-align: center;
|
|
font-size: clamp(22px, 3.2vw, 40px);
|
|
font-weight: 300;
|
|
line-height: 1.45;
|
|
letter-spacing: 0.015em;
|
|
text-shadow: 0 2px 24px rgba(0, 0, 0, 0.85);
|
|
animation: fzLineIn 1.6s cubic-bezier(0.19, 1, 0.22, 1) both;
|
|
}
|
|
|
|
.fz-line-hard {
|
|
font-weight: 700;
|
|
font-size: clamp(26px, 3.8vw, 50px);
|
|
letter-spacing: 0.01em;
|
|
}
|
|
|
|
@keyframes fzLineIn {
|
|
from { opacity: 0; transform: translateY(14px); filter: blur(6px); }
|
|
to { opacity: 1; transform: translateY(0); filter: blur(0); }
|
|
}
|
|
|
|
/* Staccato words strobing to the heartbeat in the late fear act. */
|
|
.fz-flash-wrap {
|
|
position: absolute;
|
|
inset: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.fz-flash {
|
|
font-size: clamp(52px, 9vw, 130px);
|
|
font-weight: 900;
|
|
letter-spacing: 0.08em;
|
|
color: #ff4b3e;
|
|
text-shadow: 0 0 42px rgba(235, 50, 45, 0.65), 0 2px 18px rgba(0, 0, 0, 0.9);
|
|
animation: fzFlashIn 0.65s cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
}
|
|
|
|
@keyframes fzFlashIn {
|
|
0% { opacity: 0; transform: scale(1.28); filter: blur(8px); }
|
|
18% { opacity: 1; transform: scale(1); filter: blur(0); }
|
|
80% { opacity: 1; }
|
|
100% { opacity: 0; }
|
|
}
|
|
|
|
/* ── anthem ── */
|
|
|
|
.fz-anthem {
|
|
position: absolute;
|
|
inset: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 4vh;
|
|
pointer-events: none;
|
|
padding: 0 6vw;
|
|
}
|
|
|
|
.fz-anthem-word {
|
|
font-size: clamp(48px, 9vw, 128px);
|
|
font-weight: 800;
|
|
letter-spacing: 0.06em;
|
|
text-align: center;
|
|
margin: 0;
|
|
text-shadow: 0 0 60px rgba(255, 200, 120, 0.35), 0 2px 30px rgba(0, 0, 0, 0.9);
|
|
animation: fzAnthemIn 2.8s cubic-bezier(0.19, 1, 0.22, 1) both;
|
|
}
|
|
|
|
.fz-anthem-word-small {
|
|
font-size: clamp(34px, 5vw, 64px);
|
|
}
|
|
|
|
@keyframes fzAnthemIn {
|
|
from { opacity: 0; transform: scale(0.94); letter-spacing: 0.18em; filter: blur(10px); }
|
|
to { opacity: 1; transform: scale(1); letter-spacing: 0.06em; filter: blur(0); }
|
|
}
|
|
|
|
.fz-cascade {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
justify-content: center;
|
|
gap: 6px 26px;
|
|
max-width: 1000px;
|
|
}
|
|
|
|
.fz-cascade-item {
|
|
font-size: clamp(13px, 1.35vw, 19px);
|
|
font-weight: 500;
|
|
opacity: 0;
|
|
color: rgba(245, 235, 215, 0.92);
|
|
animation: fzCascadeIn 1.4s ease-out both;
|
|
}
|
|
|
|
@keyframes fzCascadeIn {
|
|
from { opacity: 0; transform: translateY(8px); }
|
|
to { opacity: 0.92; transform: translateY(0); }
|
|
}
|
|
|
|
/* ── credits ── */
|
|
|
|
.fz-credits {
|
|
position: absolute;
|
|
inset: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 14px;
|
|
padding: 0 8vw;
|
|
text-align: center;
|
|
animation: fzLineIn 1.8s ease-out both;
|
|
}
|
|
|
|
.fz-credit-lead {
|
|
font-size: clamp(16px, 1.7vw, 23px);
|
|
font-weight: 300;
|
|
font-style: italic;
|
|
opacity: 0.95;
|
|
margin: 6px 0 4px;
|
|
max-width: 680px;
|
|
}
|
|
|
|
.fz-credit-title {
|
|
font-size: clamp(17px, 1.8vw, 24px);
|
|
font-weight: 700;
|
|
margin: 10px 0 0;
|
|
}
|
|
|
|
.fz-credit-body {
|
|
font-size: clamp(14px, 1.4vw, 18px);
|
|
font-weight: 300;
|
|
opacity: 0.85;
|
|
margin: 0;
|
|
max-width: 640px;
|
|
}
|
|
|
|
.fz-credit-link {
|
|
font-size: 13px;
|
|
color: rgba(255, 200, 120, 0.9);
|
|
text-decoration: none;
|
|
border-bottom: 1px solid rgba(255, 200, 120, 0.4);
|
|
padding-bottom: 1px;
|
|
margin-top: 6px;
|
|
pointer-events: auto;
|
|
}
|
|
|
|
.fz-credit-link:hover { color: #ffd58a; border-color: #ffd58a; }
|
|
|
|
.fz-close-btn {
|
|
margin-top: 26px;
|
|
padding: 11px 34px;
|
|
border-radius: 999px;
|
|
border: 1px solid rgba(245, 240, 225, 0.35);
|
|
background: transparent;
|
|
color: #f5f2ea;
|
|
font-size: 14px;
|
|
font-weight: 600;
|
|
font-family: inherit;
|
|
letter-spacing: 0.04em;
|
|
cursor: pointer;
|
|
transition: background 0.2s, border-color 0.2s;
|
|
}
|
|
|
|
.fz-close-btn:hover {
|
|
background: rgba(245, 240, 225, 0.12);
|
|
border-color: rgba(245, 240, 225, 0.7);
|
|
}
|
|
|
|
/* ── chrome ── */
|
|
|
|
.fz-chrome {
|
|
position: absolute;
|
|
right: 18px;
|
|
bottom: 16px;
|
|
display: flex;
|
|
gap: 8px;
|
|
align-items: center;
|
|
opacity: 0;
|
|
animation: fzChromeIn 1s ease-out 2.5s both;
|
|
}
|
|
|
|
@keyframes fzChromeIn { to { opacity: 1; } }
|
|
|
|
.fz-chrome-btn {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 8px 12px;
|
|
border-radius: 999px;
|
|
border: 1px solid rgba(245, 240, 225, 0.22);
|
|
background: rgba(10, 12, 18, 0.55);
|
|
color: rgba(245, 240, 225, 0.75);
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
backdrop-filter: blur(6px);
|
|
transition: color 0.15s, border-color 0.15s;
|
|
}
|
|
|
|
.fz-chrome-btn:hover { color: #fff; border-color: rgba(245, 240, 225, 0.55); }
|
|
|
|
/* ── beacon (dashboard trigger) ── */
|
|
|
|
/* Wrapper is a div so the dismiss can be a real sibling <button> — a button
|
|
may not contain another interactive element. Core colors also ride inline in
|
|
the component so no dashboard widget CSS can wash them out. */
|
|
.fz-beacon {
|
|
position: relative;
|
|
display: none;
|
|
width: 100%;
|
|
min-height: 196px;
|
|
border-radius: 16px;
|
|
overflow: hidden;
|
|
isolation: isolate;
|
|
box-shadow: 0 12px 34px -14px rgba(0, 0, 0, 0.55), inset 0 0 0 1px rgba(255, 190, 110, 0.14);
|
|
transition: box-shadow 0.35s ease, transform 0.35s ease;
|
|
}
|
|
|
|
.fz-beacon:hover {
|
|
box-shadow: 0 16px 44px -14px rgba(220, 80, 50, 0.35), inset 0 0 0 1px rgba(255, 190, 110, 0.3);
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
@media (min-width: 1024px) {
|
|
.fz-beacon { display: block; }
|
|
}
|
|
|
|
/* The living night-world painted by TeaserCanvas. */
|
|
.fz-beacon-canvas {
|
|
position: absolute;
|
|
inset: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
z-index: 0;
|
|
}
|
|
|
|
/* Slow-breathing colored glows drifting over the canvas. */
|
|
.fz-beacon-glow {
|
|
position: absolute;
|
|
inset: -30%;
|
|
z-index: 1;
|
|
pointer-events: none;
|
|
background:
|
|
radial-gradient(45% 40% at 22% 18%, rgba(235, 60, 55, 0.2), transparent 70%),
|
|
radial-gradient(50% 45% at 82% 78%, rgba(255, 170, 80, 0.16), transparent 70%);
|
|
animation: fzGlowDrift 9s ease-in-out infinite alternate;
|
|
}
|
|
|
|
@keyframes fzGlowDrift {
|
|
from { transform: translate(-2%, -2%) scale(1); opacity: 0.8; }
|
|
to { transform: translate(2%, 3%) scale(1.08); opacity: 1; }
|
|
}
|
|
|
|
.fz-beacon-play {
|
|
position: relative;
|
|
z-index: 2;
|
|
display: block;
|
|
width: 100%;
|
|
min-height: 196px;
|
|
border: none;
|
|
text-align: start;
|
|
cursor: pointer;
|
|
padding: 78px 18px 16px;
|
|
font-family: inherit;
|
|
/* Scrim so the copy always sits on darkness, whatever the canvas draws. */
|
|
background: linear-gradient(180deg, rgba(7, 8, 13, 0) 0%, rgba(7, 8, 13, 0.55) 46%, rgba(7, 8, 13, 0.92) 100%) !important;
|
|
}
|
|
|
|
.fz-beacon-eyebrow {
|
|
font-size: 10px;
|
|
font-weight: 800;
|
|
letter-spacing: 0.16em;
|
|
color: rgba(255, 150, 110, 0.95);
|
|
margin: 0 0 7px;
|
|
}
|
|
|
|
.fz-beacon-title {
|
|
font-size: 27px;
|
|
font-weight: 900;
|
|
letter-spacing: 0.045em;
|
|
line-height: 1.05;
|
|
margin: 0 0 6px;
|
|
background: linear-gradient(100deg, #f7f3e8 0%, #f7f3e8 38%, #ffd98f 50%, #f7f3e8 62%, #f7f3e8 100%);
|
|
background-size: 240% 100%;
|
|
-webkit-background-clip: text;
|
|
background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
animation: fzTitleSheen 4.5s ease-in-out infinite;
|
|
text-shadow: none;
|
|
}
|
|
|
|
@keyframes fzTitleSheen {
|
|
0%, 25% { background-position: 120% 0; }
|
|
60%, 100% { background-position: -60% 0; }
|
|
}
|
|
|
|
.fz-beacon-pulse {
|
|
position: absolute;
|
|
top: 16px;
|
|
inset-inline-end: 16px;
|
|
z-index: 2;
|
|
width: 10px;
|
|
height: 10px;
|
|
border-radius: 999px;
|
|
background: #ff5a4e;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.fz-beacon-pulse::before,
|
|
.fz-beacon-pulse::after {
|
|
content: '';
|
|
position: absolute;
|
|
inset: 0;
|
|
border-radius: 999px;
|
|
border: 1.5px solid rgba(255, 90, 78, 0.75);
|
|
animation: fzPulse 2.6s cubic-bezier(0.16, 1, 0.3, 1) infinite;
|
|
}
|
|
|
|
.fz-beacon-pulse::after { animation-delay: 1.3s; }
|
|
|
|
@keyframes fzPulse {
|
|
from { transform: scale(1); opacity: 0.9; }
|
|
to { transform: scale(3.6); opacity: 0; }
|
|
}
|
|
|
|
.fz-beacon-sub {
|
|
font-size: 12.5px;
|
|
font-weight: 400;
|
|
color: rgba(245, 240, 225, 0.72);
|
|
margin: 0;
|
|
}
|
|
|
|
.fz-beacon-cta {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 7px;
|
|
margin-top: 13px;
|
|
font-size: 12.5px;
|
|
font-weight: 800;
|
|
letter-spacing: 0.03em;
|
|
color: #ffcf8e;
|
|
transition: color 0.2s, gap 0.25s;
|
|
}
|
|
|
|
.fz-beacon:hover .fz-beacon-cta { color: #ffe6b8; gap: 10px; }
|
|
|
|
.fz-beacon-dismiss {
|
|
position: absolute;
|
|
top: 8px;
|
|
inset-inline-start: 8px;
|
|
z-index: 2;
|
|
display: inline-flex;
|
|
padding: 5px;
|
|
border: none;
|
|
border-radius: 999px;
|
|
background: transparent;
|
|
color: rgba(245, 240, 225, 0.4);
|
|
cursor: pointer;
|
|
}
|
|
|
|
.fz-beacon-dismiss:hover { color: rgba(245, 240, 225, 0.85); }
|
|
|
|
/* While the show runs: no floating dashboard chrome above it, no page scroll. */
|
|
body.fz-show-open { overflow: hidden; }
|
|
body.fz-show-open .fab-new-trip { display: none; }
|
|
|
|
/* Accessibility: with reduced motion the component renders a single static
|
|
frame and skips straight to the credits; flatten every looping accent too. */
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.fz-overlay *,
|
|
.fz-beacon-pulse::before,
|
|
.fz-beacon-pulse::after,
|
|
.fz-vignette {
|
|
animation-duration: 0.01s !important;
|
|
animation-iteration-count: 1 !important;
|
|
}
|
|
}
|