Add the approved name animation, rounded docking navigation, localized keyboard focus cue, unified builds card, and destination copy hierarchy.
Introduce lightweight one-shot meteors and a sun ring that repeats every three seconds at Contact. Open the email action in a separate browsing context. Preserve reduced-motion behavior and keep private handoff and visual-check artifacts out of version control.
Validation: 649 tests passed; all 20 failures in world-models and SceneCanvas reproduce on baseline 103427f. Typecheck, artifact verification, and transfer budgets passed. Client/SSR preview build passed before this commit. Existing baseline test failures remain unchanged.
134 lines
2.1 KiB
CSS
134 lines
2.1 KiB
CSS
* {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
html {
|
|
min-width: 0;
|
|
background: var(--canvas);
|
|
color: var(--text);
|
|
font-family: var(--sans);
|
|
font-size: 100%;
|
|
line-height: 1.55;
|
|
scroll-behavior: auto;
|
|
text-size-adjust: 100%;
|
|
}
|
|
|
|
body {
|
|
min-width: 0;
|
|
min-height: 100vh;
|
|
margin: 0;
|
|
overflow-wrap: anywhere;
|
|
background: var(--canvas);
|
|
}
|
|
|
|
button,
|
|
input,
|
|
textarea,
|
|
select {
|
|
font: inherit;
|
|
}
|
|
|
|
a {
|
|
color: var(--cyan);
|
|
overflow-wrap: anywhere;
|
|
text-decoration-color: color-mix(in srgb, currentcolor 55%, transparent);
|
|
text-underline-offset: 0.18em;
|
|
}
|
|
|
|
a:hover {
|
|
color: var(--text);
|
|
text-decoration-color: currentcolor;
|
|
}
|
|
|
|
a:focus-visible,
|
|
button:focus-visible,
|
|
input:focus-visible,
|
|
textarea:focus-visible,
|
|
select:focus-visible,
|
|
summary:focus-visible,
|
|
[tabindex]:focus-visible {
|
|
outline: 3px solid var(--focus);
|
|
outline-offset: 3px;
|
|
}
|
|
|
|
.portfolio-main:focus-visible {
|
|
/* The localized cue lives outside the reading mask. Keep the main landmark
|
|
focusable for native skip links without outlining the entire document. */
|
|
outline: none;
|
|
box-shadow: none;
|
|
}
|
|
|
|
::selection {
|
|
background: var(--amber);
|
|
color: #14100a;
|
|
}
|
|
|
|
h1,
|
|
h2,
|
|
h3,
|
|
p,
|
|
dl,
|
|
ul,
|
|
ol,
|
|
figure {
|
|
margin-block: 0;
|
|
}
|
|
|
|
h1,
|
|
h2,
|
|
h3 {
|
|
color: var(--text);
|
|
font-weight: 680;
|
|
letter-spacing: -0.025em;
|
|
line-height: 1.08;
|
|
text-wrap: balance;
|
|
}
|
|
|
|
p,
|
|
li,
|
|
dd,
|
|
dt,
|
|
a {
|
|
max-inline-size: 72ch;
|
|
}
|
|
|
|
svg,
|
|
img,
|
|
video,
|
|
canvas {
|
|
display: block;
|
|
max-inline-size: 100%;
|
|
}
|
|
|
|
.skip-link {
|
|
position: fixed;
|
|
z-index: 10;
|
|
inset: var(--space-2) auto auto var(--space-2);
|
|
min-block-size: 44px;
|
|
padding: var(--space-1) var(--space-2);
|
|
transform: translateY(-160%);
|
|
background: var(--amber);
|
|
color: #171006;
|
|
font-weight: 700;
|
|
transition: transform var(--transition);
|
|
}
|
|
|
|
.skip-link:focus {
|
|
transform: translateY(0);
|
|
}
|
|
|
|
.print-portfolio-label {
|
|
display: none;
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
*,
|
|
*::before,
|
|
*::after {
|
|
scroll-behavior: auto !important;
|
|
transition-duration: 0.001s !important;
|
|
animation-duration: 0.001s !important;
|
|
animation-iteration-count: 1 !important;
|
|
}
|
|
}
|