Files
personal-website/src/styles/globals.css
T

3483 lines
80 KiB
CSS

@tailwind base;
@tailwind components;
@tailwind utilities;
@keyframes accordion-down {
from {
height: 0;
}
to {
height: var(--radix-accordion-content-height);
}
}
@keyframes accordion-up {
from {
height: var(--radix-accordion-content-height);
}
to {
height: 0;
}
}
@keyframes collapsible-down {
from {
height: 0;
}
to {
height: var(--radix-collapsible-content-height);
}
}
@keyframes collapsible-up {
from {
height: var(--radix-collapsible-content-height);
}
to {
height: 0;
}
}
@keyframes slide-in-from-left {
from {
transform: translateX(-100%);
}
}
@keyframes slide-in-from-right {
from {
transform: translateX(100%);
}
}
@keyframes slide-in-from-top {
from {
transform: translateY(-100%);
}
}
@keyframes slide-in-from-bottom {
from {
transform: translateY(100%);
}
}
@keyframes slide-out-to-left {
to {
transform: translateX(-100%);
}
}
@keyframes slide-out-to-right {
to {
transform: translateX(100%);
}
}
@keyframes slide-out-to-top {
to {
transform: translateY(-100%);
}
}
@keyframes slide-out-to-bottom {
to {
transform: translateY(100%);
}
}
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--card: 0 0% 100%;
--card-foreground: 222.2 84% 4.9%;
--popover: 0 0% 100%;
--popover-foreground: 222.2 84% 4.9%;
--primary: 222.2 47.4% 11.2%;
--primary-foreground: 210 40% 98%;
--secondary: 210 40% 96.1%;
--secondary-foreground: 222.2 47.4% 11.2%;
--muted: 210 40% 96.1%;
--muted-foreground: 215.4 16.3% 46.9%;
--accent: 210 40% 96.1%;
--accent-foreground: 222.2 47.4% 11.2%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 210 40% 98%;
--border: 214.3 31.8% 91.4%;
--input: 214.3 31.8% 91.4%;
--ring: 222.2 84% 4.9%;
--radius: 0.625rem;
--chart-1: 222.2 47.4% 11.2%;
--chart-2: 210 40% 44%;
--chart-3: 210 40% 57.6%;
--chart-4: 182 40% 76.5%;
--chart-5: 340 75% 55%;
}
@media (prefers-color-scheme: dark) {
:root {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
--card: 222.2 84% 4.9%;
--card-foreground: 210 40% 98%;
--popover: 222.2 84% 4.9%;
--popover-foreground: 210 40% 98%;
--primary: 210 40% 98%;
--primary-foreground: 222.2 47.4% 11.2%;
--secondary: 217.2 32.6% 17.5%;
--secondary-foreground: 210 40% 98%;
--muted: 217.2 32.6% 17.5%;
--muted-foreground: 215 20.2% 65.1%;
--accent: 217.2 32.6% 17.5%;
--accent-foreground: 210 40% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 210 40% 98%;
--border: 217.2 32.6% 17.5%;
--input: 217.2 32.6% 17.5%;
--ring: 212.9 100% 50%;
--chart-1: 217.2 91.2% 59%;
--chart-2: 160 84% 39%;
--chart-3: 30 80% 50%;
--chart-4: 280 65% 60%;
--chart-5: 340 75% 55%;
}
}
}
@layer base {
* {
@apply border-border outline-ring/50;
}
body {
@apply bg-background text-foreground;
}
}
.card-hover {
@apply transition-all duration-200 hover:shadow-lg hover:ring-foreground/20;
}
/* grid-equal-height: force every direct child to fill the row */
.grid-equal-height > * {
height: 100%;
}
/* card-full-height: card fills its wrapper */
.card-full-height {
@apply h-full;
}
/* card-content-stretch: CardContent grows to push footer content down */
.card-content-stretch {
@apply flex-1;
}
.sidebar-contact-link {
@apply rounded-lg;
}
@keyframes fade-in-up {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.animate-fade-in-up {
animation: fade-in-up 0.5s ease-out both;
}
.animate-fade-in-up-delay-1 {
animation: fade-in-up 0.5s ease-out 0.1s both;
}
.animate-fade-in-up-delay-2 {
animation: fade-in-up 0.5s ease-out 0.2s both;
}
.animate-fade-in-up-delay-3 {
animation: fade-in-up 0.5s ease-out 0.3s both;
}
.animate-fade-in-up-delay-4 {
animation: fade-in-up 0.5s ease-out 0.4s both;
}
@keyframes blob {
0%,
100% {
transform: scale(1) translate(0px, 0px);
}
25% {
transform: scale(1.08) translate(40px, -30px);
}
50% {
transform: scale(0.94) translate(-25px, 50px);
}
75% {
transform: scale(1.04) translate(35px, 30px);
}
}
.animate-blob {
animation: blob 9s ease-in-out infinite;
}
/* Personal studio */
:root {
color-scheme: light;
--background: 40 20% 98%;
--foreground: 225 15% 15%;
--card: 0 0% 100%;
--card-foreground: 225 15% 15%;
--popover: 0 0% 100%;
--popover-foreground: 225 15% 15%;
--primary: 229 76% 48%;
--primary-foreground: 0 0% 100%;
--secondary: 220 13% 94%;
--secondary-foreground: 225 15% 15%;
--muted: 220 13% 94%;
--muted-foreground: 220 7% 42%;
--accent: 225 35% 94%;
--accent-foreground: 225 15% 15%;
--border: 220 10% 86%;
--input: 220 10% 86%;
--ring: 229 76% 48%;
--studio-blue: #2849d4;
--studio-muted: #62666e;
--studio-rule: #dedfe2;
}
html {
scroll-behavior: smooth;
scroll-padding-top: 110px;
}
body {
-webkit-font-smoothing: antialiased;
}
::selection {
background: #dce3ff;
color: #142675;
}
:focus-visible {
outline: 2px solid var(--studio-blue);
outline-offset: 5px;
}
a,
button {
-webkit-tap-highlight-color: transparent;
}
.skip-link {
position: fixed;
top: 10px;
left: 10px;
transform: translateY(-160%);
background: white;
color: var(--studio-blue);
padding: 12px 20px;
z-index: 100;
}
.skip-link:focus {
transform: none;
}
.site-header {
position: sticky;
top: 0;
z-index: 60;
background: #faf9f7ed;
backdrop-filter: blur(18px);
}
.nav-inner {
max-width: 1160px;
padding: 0 40px;
margin: auto;
height: 90px;
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid var(--studio-rule);
}
.wordmark {
display: inline-flex;
align-items: center;
gap: 15px;
font-size: 17px;
font-weight: 550;
letter-spacing: -0.035em;
}
.monogram {
width: 52px;
height: 52px;
flex-shrink: 0;
}
.accent-text {
color: var(--studio-blue);
}
.wordmark-name {
font-size: 21px;
font-weight: 650;
letter-spacing: -0.055em;
}
.desktop-nav {
display: flex;
align-items: center;
gap: 27px;
font-size: 13px;
color: var(--studio-muted);
}
.desktop-nav a:hover,
.desktop-nav a[aria-current] {
color: var(--studio-blue);
}
.nav-contact {
display: flex;
gap: 8px;
align-items: center;
color: var(--studio-blue);
}
.mobile-toggle {
display: none;
padding: 12px;
}
.mobile-menu {
padding: 10px 24px 24px;
border-bottom: 1px solid var(--studio-rule);
}
.mobile-menu a {
display: flex;
align-items: center;
gap: 10px;
padding: 13px 0;
}
.site-main {
flex: 1;
min-width: 0;
}
.studio-home {
max-width: 1160px;
margin: auto;
padding: 0 40px;
}
.studio-intro {
padding: 68px 0 77px;
}
.intro-topline {
display: flex;
justify-content: space-between;
font-size: 12px;
color: var(--studio-muted);
}
.intro-main {
display: grid;
grid-template-columns: 1fr 180px;
align-items: center;
gap: 60px;
margin-top: 32px;
}
.intro-main h1 {
font-size: clamp(48px, 6.4vw, 79px);
font-weight: 500;
letter-spacing: -0.075em;
line-height: 1.1;
margin-bottom: 27px;
}
.intro-main h1 span {
color: var(--studio-blue);
}
.intro-statement {
font-size: clamp(21px, 2.4vw, 28px);
line-height: 1.5;
letter-spacing: -0.04em;
max-width: 650px;
}
.intro-statement a {
color: var(--studio-blue);
text-decoration: underline;
text-decoration-color: #bcc7f2;
text-underline-offset: 5px;
text-decoration-thickness: 1px;
}
.intro-detail {
font-size: 16px;
line-height: 1.8;
color: var(--studio-muted);
max-width: 550px;
margin-top: 15px;
}
.intro-portrait {
width: 180px;
height: 215px;
object-fit: cover;
object-position: center;
border-radius: 8px;
transform: rotate(3deg);
box-shadow:
0 0 0 7px white,
0 8px 30px #20284010;
}
.intro-links {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 25px;
margin-top: 27px;
font-size: 13px;
}
.intro-links a,
.studio-link {
display: inline-flex;
align-items: center;
gap: 7px;
}
.intro-links a:hover,
.studio-link:hover {
color: var(--studio-blue);
}
.studio-section-heading {
display: flex;
align-items: center;
justify-content: space-between;
border-top: 1px solid var(--studio-rule);
padding: 25px 0 30px;
gap: 20px;
}
.studio-section-heading h2 {
font-size: 18px;
font-weight: 550;
letter-spacing: -0.035em;
}
.studio-section-heading h2 span {
font-size: 11px;
color: var(--studio-muted);
vertical-align: super;
margin-left: 5px;
font-weight: 400;
}
.studio-section-heading > a {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 13px;
color: var(--studio-muted);
}
.studio-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 48px 30px;
}
.studio-project {
min-width: 0;
scroll-margin-top: 115px;
}
.studio-project-image {
position: relative;
display: block;
aspect-ratio: 1.48;
overflow: hidden;
border-radius: 7px;
background: #e8ecf5;
}
.studio-project-image > img {
object-fit: contain;
width: 88% !important;
height: 86% !important;
margin: auto;
transition: transform 0.4s ease;
}
.studio-project-image:hover > img {
transform: scale(1.035);
}
.puter .studio-project-image {
background: #e1e7f2;
}
.beenvoice .studio-project-image {
background: #e8eddf;
}
.hristudio .studio-project-image {
background: #e3edea;
}
.racetix .studio-project-image > img {
width: 100% !important;
height: 100% !important;
object-fit: cover;
}
.studio-project-title {
display: flex;
align-items: center;
justify-content: space-between;
gap: 15px;
margin: 20px 0 11px;
}
.studio-project-title h3 {
font-size: 23px;
font-weight: 550;
letter-spacing: -0.045em;
}
.studio-project-title h3 a {
display: inline-flex;
align-items: center;
gap: 8px;
}
.studio-project-title h3 svg {
color: var(--studio-muted);
}
.studio-project-title > span {
font-size: 11px;
color: var(--studio-muted);
}
.studio-project > p {
font-size: 14px;
line-height: 1.8;
color: var(--studio-muted);
max-width: 480px;
}
.studio-stack {
font-size: 11px;
color: #737780;
margin-top: 17px;
}
.studio-hadlock {
display: grid;
grid-template-columns: 1.25fr 1fr;
gap: 55px;
align-items: center;
background: #edf0f7;
padding: 38px;
border-radius: 8px;
margin: 76px 0;
}
.studio-label {
font-size: 11px;
color: var(--studio-muted);
letter-spacing: 0.08em;
text-transform: uppercase;
}
.studio-hadlock h2 {
font-size: 28px;
font-weight: 500;
letter-spacing: -0.05em;
margin: 15px 0;
}
.studio-hadlock p:not(.studio-label) {
color: var(--studio-muted);
font-size: 14px;
line-height: 1.9;
}
.studio-hadlock > img {
width: 100%;
height: auto;
aspect-ratio: 1.35;
object-fit: cover;
border-radius: 5px;
}
.studio-link {
font-size: 13px;
color: var(--studio-blue);
margin-top: 20px;
}
.studio-about {
display: grid;
grid-template-columns: 0.85fr 1.35fr;
gap: 75px;
padding: 0 0 65px;
}
.studio-about h2 {
font-size: 32px;
letter-spacing: -0.045em;
line-height: 1.3;
margin-top: 18px;
font-weight: 450;
}
.studio-about > div > p:not(.studio-label) {
color: var(--studio-muted);
font-size: 15px;
line-height: 1.9;
margin-bottom: 17px;
}
.studio-contact {
display: flex;
align-items: center;
justify-content: space-between;
gap: 30px;
border-top: 1px solid var(--studio-rule);
padding: 40px 0 60px;
}
.studio-contact h2 {
font-size: 29px;
letter-spacing: -0.05em;
margin-top: 13px;
}
.studio-contact > a {
display: inline-flex;
align-items: center;
gap: 12px;
color: var(--studio-blue);
font-size: 20px;
letter-spacing: -0.03em;
}
.site-footer {
width: 100%;
max-width: 1160px;
margin: auto;
padding: 0 40px 25px;
}
.footer-top {
border-top: 1px solid var(--studio-rule);
padding: 25px 0;
display: flex;
align-items: center;
justify-content: space-between;
gap: 25px;
}
.footer-links {
display: flex;
flex-wrap: wrap;
gap: 17px;
font-size: 11px;
color: var(--studio-muted);
}
.footer-bottom {
display: flex;
justify-content: space-between;
gap: 20px;
font-size: 10px;
color: var(--studio-muted);
}
.interior-page {
max-width: 1160px;
width: 100%;
margin: auto;
padding: 40px 40px 80px;
}
.archive-header {
padding: 25px 0 40px;
}
.eyebrow {
color: var(--studio-muted);
font-size: 12px;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.archive-header h1 {
font-size: clamp(40px, 5vw, 64px);
line-height: 1.1;
letter-spacing: -0.06em;
margin: 20px 0;
}
.archive-header > p:last-child {
color: var(--studio-muted);
max-width: 620px;
font-size: 16px;
line-height: 1.8;
}
.archive-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 25px;
}
.archive-card {
border: 1px solid var(--studio-rule);
border-radius: 8px;
overflow: hidden;
background: white;
display: flex;
flex-direction: column;
}
.archive-image {
aspect-ratio: 1.7;
position: relative;
overflow: hidden;
background: #e8ecf1;
}
.archive-image img {
object-fit: cover;
object-position: top;
}
.archive-body {
padding: 26px;
display: flex;
flex-direction: column;
flex: 1;
}
.archive-body h2 {
font-size: 23px;
letter-spacing: -0.04em;
line-height: 1.2;
}
.archive-body p {
color: var(--studio-muted);
font-size: 14px;
line-height: 1.85;
margin-top: 16px;
}
.project-tags {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-top: 18px;
}
.project-tags span {
font-size: 11px;
border: 1px solid var(--studio-rule);
border-radius: 4px;
padding: 4px 8px;
}
.archive-links {
display: flex;
flex-wrap: wrap;
gap: 18px;
margin-top: auto;
padding-top: 23px;
}
.text-link {
display: inline-flex;
align-items: center;
gap: 7px;
font-size: 13px;
color: var(--studio-blue);
}
@media (max-width: 900px) {
.intro-main {
grid-template-columns: 1fr 140px;
gap: 30px;
}
.intro-portrait {
width: 140px;
height: 180px;
}
.desktop-nav {
gap: 18px;
}
.studio-hadlock {
gap: 30px;
padding: 28px;
}
.studio-about {
gap: 40px;
}
}
@media (max-width: 700px) {
.studio-home,
.site-footer {
padding-left: 23px;
padding-right: 23px;
}
.nav-inner {
height: 75px;
padding: 0 23px;
}
.desktop-nav {
display: none;
}
.mobile-toggle {
display: block;
}
.studio-intro {
padding: 37px 0 44px;
}
.intro-topline {
font-size: 10px;
}
.intro-main {
display: block;
margin-top: 28px;
position: relative;
}
.intro-main h1 {
font-size: clamp(43px, 10vw, 65px);
margin-bottom: 24px;
}
.intro-statement {
font-size: 24px;
max-width: 450px;
}
.intro-detail {
font-size: 15px;
}
.intro-portrait {
width: 72px;
height: 84px;
margin-top: 29px;
border-radius: 5px;
}
.intro-links {
gap: 22px;
font-size: 13px;
}
.studio-grid,
.archive-grid {
grid-template-columns: 1fr;
gap: 36px;
}
.studio-project > p {
font-size: 15px;
}
.studio-project-title > span {
font-size: 10px;
}
.studio-hadlock {
grid-template-columns: 1fr;
margin: 48px 0;
padding: 26px;
gap: 28px;
}
.studio-hadlock > img {
aspect-ratio: 1.7;
}
.studio-about {
grid-template-columns: 1fr;
gap: 25px;
padding-bottom: 35px;
}
.studio-about h2 {
font-size: 30px;
}
.studio-contact {
align-items: flex-start;
flex-direction: column;
padding: 32px 0 40px;
gap: 22px;
}
.studio-contact > a {
font-size: 19px;
}
.footer-top {
align-items: flex-start;
flex-direction: column;
gap: 20px;
}
.footer-links {
gap: 14px;
}
.footer-bottom {
flex-wrap: wrap;
font-size: 9px;
gap: 9px;
}
.interior-page {
padding: 30px 23px 60px;
}
}
@media (prefers-reduced-motion: reduce) {
html {
scroll-behavior: auto;
}
*,
*::before,
*::after {
animation: none !important;
transition: none !important;
}
}
/* Product spotlights and personal experiments */
.beenvoice .studio-project-image {
background: #dce5df;
}
.manyangles .studio-project-image > img {
width: 100% !important;
height: 100% !important;
object-fit: cover;
}
.studio-cms {
border-top: 1px solid #cdd3e0;
margin-top: 24px;
padding-top: 20px;
}
.studio-cms h3 {
font-size: 18px;
font-weight: 550;
margin-bottom: 8px;
letter-spacing: -0.035em;
}
.studio-cms .studio-link {
margin-top: 12px;
}
.archive-card[id] {
scroll-margin-top: 115px;
}
/* Studio identity: expressive display type, quiet working typography. */
.intro-main h1,
.archive-header h1,
.studio-about h2,
.studio-contact h2 {
font-family: var(--font-heading), Georgia, serif;
font-weight: 400;
letter-spacing: -0.035em;
}
.intro-main h1 {
font-size: clamp(62px, 7.4vw, 96px);
line-height: 1.02;
}
.intro-statement {
font-size: clamp(20px, 2.1vw, 25px);
letter-spacing: -0.035em;
}
.studio-about h2 {
font-size: 43px;
line-height: 1.12;
}
.studio-contact h2 {
font-size: 42px;
}
.studio-project-title h3,
.studio-hadlock h2 {
letter-spacing: -0.045em;
font-weight: 600;
}
.coffee-link {
color: var(--studio-blue);
text-decoration: underline;
text-decoration-color: #bcc7f2;
text-underline-offset: 4px;
}
.coffee-link:hover {
text-decoration-color: currentColor;
}
@media (max-width: 700px) {
.intro-main h1 {
font-size: clamp(47px, 12vw, 76px);
letter-spacing: -0.04em;
}
.studio-about h2,
.studio-contact h2 {
font-size: 36px;
}
.monogram {
width: 46px;
height: 46px;
}
}
/* Apple product bezels: screenshots sit beneath the transparent screen apertures. */
.beenvoice-devices {
position: absolute;
inset: 0;
overflow: hidden;
background: #dce5df;
}
.product-device {
position: absolute;
filter: drop-shadow(0 10px 12px #182b2526);
}
.product-ipad {
width: 63%;
aspect-ratio: 2300 / 3000;
top: 9%;
left: 9%;
transform: rotate(-6deg);
}
.product-iphone {
width: 28%;
aspect-ratio: 1350 / 2760;
top: 22%;
right: 8%;
transform: rotate(7deg);
}
.product-device .device-screen {
object-fit: fill;
margin: 0;
}
.product-ipad .device-screen {
left: 5.13% !important;
top: 4.13% !important;
width: 89.74% !important;
height: 91.74% !important;
border-radius: 4% / 3%;
}
.product-iphone .device-screen {
left: 5.33% !important;
top: 2.5% !important;
width: 89.34% !important;
height: 95% !important;
border-radius: 13% / 6%;
}
.product-device .device-bezel {
z-index: 1;
object-fit: contain;
}
.manyangles-preview {
position: absolute;
inset: 0;
overflow: hidden;
padding: 4.5%;
background: radial-gradient(circle at 85% 10%, #313d65 0, #1d2339 42%, #151923 100%);
}
.manyangles-demo {
display: flex;
flex-direction: column;
height: 100%;
overflow: hidden;
border: 1px solid #ffffff22;
border-radius: 10px;
background: #1b1e2a;
box-shadow: 0 14px 35px #05091460;
color: #f5f5f7;
font-family: Arial, Helvetica, sans-serif;
}
.manyangles-demo-bar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
min-height: 13%;
padding: 0 4%;
border-bottom: 1px solid #ffffff1a;
font-size: clamp(8px, .9vw, 12px);
}
.manyangles-demo-bar-title,
.manyangles-demo-share,
.manyangles-demo-bottom > span:first-child {
display: inline-flex;
align-items: center;
gap: 7px;
}
.manyangles-demo-bar-title { font-weight: 700; }
.manyangles-demo-share { color: #b8c6ff; }
.manyangles-demo-content {
display: flex;
flex: 1;
flex-direction: column;
min-height: 0;
padding: 5% 6% 4%;
}
.manyangles-demo-intro > span {
display: block;
margin-bottom: 2.5%;
color: #a7b7f3;
font-size: clamp(7px, .7vw, 10px);
font-weight: 700;
letter-spacing: .18em;
}
.manyangles-demo-intro strong {
display: block;
font-size: clamp(17px, 2.1vw, 31px);
letter-spacing: -.035em;
line-height: 1.1;
}
.manyangles-demo-intro p {
margin: 2.2% 0 0;
color: #b9bdca;
font-size: clamp(8px, .9vw, 12px);
line-height: 1.3;
}
.manyangles-demo-photos {
display: grid;
flex: 1;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 2%;
min-height: 0;
margin-top: 5%;
}
.manyangles-demo-photo {
position: relative;
overflow: hidden;
border-radius: 5px;
background: linear-gradient(165deg, var(--tile-sky), var(--tile-horizon));
}
.manyangles-demo-photo::before,
.manyangles-demo-photo::after {
position: absolute;
content: "";
inset: auto -20% -12%;
height: 65%;
border-radius: 48% 52% 0 0;
background: var(--tile-hill);
transform: rotate(-11deg);
}
.manyangles-demo-photo::after {
inset: auto -25% -35%;
height: 70%;
background: var(--tile-foreground);
transform: rotate(14deg);
}
.manyangles-demo-photo span {
position: absolute;
top: 18%;
right: 19%;
width: 17%;
aspect-ratio: 1;
border-radius: 50%;
background: var(--tile-sun);
box-shadow: 0 0 20px 5px var(--tile-sun);
}
.manyangles-demo-photo--one { --tile-sky: #f0baa3; --tile-horizon: #e5d8c6; --tile-hill: #769b99; --tile-foreground: #3d646f; --tile-sun: #fff0b8; }
.manyangles-demo-photo--two { --tile-sky: #a7bbd9; --tile-horizon: #d8d2bb; --tile-hill: #81948c; --tile-foreground: #576d6d; --tile-sun: #f8e0ae; }
.manyangles-demo-photo--three { --tile-sky: #d9b5be; --tile-horizon: #e8cdb6; --tile-hill: #9f998c; --tile-foreground: #6b797a; --tile-sun: #fff2ce; }
.manyangles-demo-photo--four { --tile-sky: #9eb6cf; --tile-horizon: #cddbd5; --tile-hill: #6c958c; --tile-foreground: #3f6c70; --tile-sun: #f6e9bf; }
.manyangles-demo-bottom {
display: flex;
justify-content: space-between;
gap: 10px;
margin-top: 4%;
color: #b9bdca;
font-size: clamp(7px, .75vw, 10px);
}
.type-study-controls {
padding: 22px 0;
border-block: 1px solid var(--studio-rule);
}
.type-study-controls label {
display: flex;
justify-content: space-between;
max-width: 350px;
font-size: 13px;
}
.type-study-controls output {
color: var(--studio-blue);
}
.type-study-controls input {
display: block;
width: min(100%, 350px);
accent-color: var(--studio-blue);
margin: 16px 0;
}
.type-study-controls p {
font-size: 12px;
color: var(--studio-muted);
}
.type-study-sample {
margin: 34px 0 48px;
}
.type-study-sample h2 {
font-size: 21px;
margin-bottom: 22px;
}
.type-study-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 50px;
}
.type-study-grid h3 {
font-size: 13px;
margin-bottom: 24px;
}
.type-study-grid h3 span {
display: block;
color: var(--studio-muted);
font-size: 11px;
margin-top: 7px;
}
.type-study-column {
width: 100%;
border-right: 1px dashed #cdd3e0;
}
.type-study-paragraph {
margin-bottom: 20px;
font-family: var(--font-sans), sans-serif;
font-size: 15px;
font-weight: 400;
line-height: 1.9;
letter-spacing: 0;
word-spacing: 0;
font-kerning: none;
font-variant-ligatures: none;
color: var(--studio-muted);
}
.justice-line {
display: block;
white-space: nowrap;
}
@media (max-width: 700px) {
.type-study-grid {
grid-template-columns: minmax(0, 1fr);
gap: 25px;
}
}
.type-study-grid > div {
min-width: 0;
}
/* A compact personal workspace, across every section. */
:root {
--background: 204 44% 97%;
--card: 205 45% 99%;
--border: 202 24% 86%;
--studio-rule: #d6e1e7;
}
.site-header {
background: #f6f9fcf5;
}
.nav-inner {
height: 76px;
max-width: 1480px;
padding-inline: 30px;
}
.site-rail {
display: none;
}
.studio-intro {
padding: 36px 0 40px;
}
.intro-main {
margin-top: 20px;
gap: 30px;
grid-template-columns: 1fr 145px;
}
.intro-main h1 {
font-size: clamp(55px, 6vw, 82px);
margin-bottom: 18px;
}
.intro-portrait {
width: 145px;
height: 175px;
}
.intro-links {
margin-top: 20px;
}
.studio-grid {
gap: 30px 24px;
}
.studio-project-image {
aspect-ratio: 1.65;
border-radius: 10px;
}
.studio-project-title {
margin-top: 14px;
}
.studio-project-title h3 {
font-size: 22px;
}
.studio-stack {
margin-top: 10px;
}
.studio-hadlock {
margin: 45px 0;
padding: 28px;
gap: 28px;
background: #e7eada;
}
.studio-about {
gap: 35px;
padding-bottom: 36px;
}
.archive-header {
padding: 12px 0 25px;
}
.archive-header h1 {
font-family: var(--font-heading), Georgia, serif;
font-weight: 400;
font-size: clamp(40px, 5vw, 60px);
margin: 12px 0;
}
.archive-header > p:last-child {
font-size: 15px;
}
.interior-page [data-slot="card"] {
border-radius: 9px;
background: hsl(var(--card));
backdrop-filter: none;
}
.interior-page [data-slot="card-title"] {
font-family: var(--font-sans), sans-serif;
font-weight: 600;
}
.interior-page > article > div > h1 {
font-family: var(--font-heading), Georgia, serif;
font-weight: 400;
font-size: clamp(36px, 5vw, 60px);
}
.justice-paragraph {
font-kerning: none;
font-variant-ligatures: none;
letter-spacing: 0;
word-spacing: 0;
min-width: 0;
}
.personal-corners {
margin: 10px 0 38px;
}
.corners-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 18px;
}
.corner-card {
display: block;
background: #fbfdff;
border: 1px solid var(--studio-rule);
padding: 9px 9px 15px;
border-radius: 4px;
transition: transform 0.2s;
}
.corner-card:nth-child(1) {
transform: rotate(-1.5deg);
}
.corner-card:nth-child(2) {
transform: rotate(1deg);
}
.corner-card:hover {
transform: translateY(-5px) rotate(0);
}
.corner-card > img {
width: 100%;
height: 150px;
object-fit: cover;
}
.corner-card > span {
display: block;
font-weight: 600;
font-size: 15px;
margin: 14px 7px 7px;
}
.corner-card > p {
font-size: 12px;
line-height: 1.7;
color: var(--studio-muted);
margin-inline: 7px;
}
.october-stamp {
height: 150px;
background: #efc9a1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: #6c3518;
}
.october-stamp > span {
letter-spacing: 0.2em;
font-size: 12px;
}
.october-stamp strong {
font-family: var(--font-heading), Georgia, serif;
font-size: 60px;
font-weight: 400;
line-height: 1.05;
}
.october-stamp small {
font-size: 10px;
}
.project-tools {
display: flex;
flex-wrap: wrap;
align-items: flex-end;
gap: 18px;
margin-bottom: 24px;
padding: 18px 0;
border-block: 1px solid var(--studio-rule);
}
.project-tools label {
font-size: 11px;
flex: 1;
min-width: 200px;
}
.project-tools input {
display: block;
width: 100%;
min-width: 0;
border: 1px solid var(--studio-rule);
background: #fbfdff;
padding: 10px 12px;
border-radius: 6px;
margin-top: 8px;
font-size: 13px;
}
.project-filters {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.project-filters button,
.project-empty button {
padding: 9px 12px;
border: 1px solid var(--studio-rule);
border-radius: 6px;
font-size: 12px;
}
.project-filters button[aria-pressed="true"] {
background: var(--studio-blue);
color: white;
border-color: var(--studio-blue);
}
.project-tools > p {
font-size: 11px;
color: var(--studio-muted);
padding-bottom: 10px;
}
.archive-grid {
align-items: start;
gap: 22px;
}
.archive-body {
padding: 22px;
}
.archive-body h2 {
font-size: 21px;
}
.project-detail {
margin-top: 15px;
}
.project-detail summary {
cursor: pointer;
font-size: 12px;
color: var(--studio-blue);
}
.archive-body .project-detail p {
font-size: 14px;
}
.project-empty {
padding: 35px;
border: 1px dashed var(--studio-rule);
}
.project-empty button {
margin-top: 15px;
}
.travel-notes {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 25px;
}
.travel-note {
min-width: 0;
border: 1px solid var(--studio-rule);
border-radius: 8px;
overflow: hidden;
background: #fbfdff;
}
.travel-strip {
display: flex;
overflow-x: auto;
scroll-snap-type: x mandatory;
}
.travel-strip img {
flex: 0 0 90%;
width: 90%;
height: 260px;
object-fit: cover;
scroll-snap-align: start;
}
.travel-caption {
padding: 22px;
}
.travel-caption h2 {
font-size: 22px;
letter-spacing: -0.04em;
margin: 10px 0 15px;
}
.travel-caption .justice-paragraph,
.press-list .justice-paragraph {
font-size: 14px;
line-height: 1.85;
color: var(--studio-muted);
}
.gallery-hint,
.press-byline {
font-size: 11px;
margin-top: 18px;
color: var(--studio-muted);
}
.press-list {
max-width: 800px;
}
.press-list article {
padding: 25px 0;
border-top: 1px solid var(--studio-rule);
}
.press-list h2 {
font-size: 25px;
line-height: 1.4;
margin: 12px 0;
}
.press-list h2 svg {
display: inline;
}
.mobile-menu {
max-height: calc(100dvh - 76px);
overflow-y: auto;
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 15px 25px;
}
.mobile-nav-group > p {
font-size: 10px;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--studio-muted);
padding-top: 10px;
}
.mobile-menu a {
font-size: 14px;
padding: 10px 0;
}
.mobile-menu a[aria-current] {
color: var(--studio-blue);
}
@media (min-width: 1100px) {
.site-rail {
display: block;
position: fixed;
top: 76px;
bottom: 0;
left: 0;
width: 224px;
overflow-y: auto;
padding: 25px 18px;
border-right: 1px solid var(--studio-rule);
background: #edf4f8;
}
.rail-group {
margin-top: 19px;
}
.rail-group:first-child {
margin-top: 0;
}
.rail-group p {
margin: 0 10px 7px;
font-size: 9px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--studio-muted);
}
.rail-group a {
display: flex;
justify-content: space-between;
font-size: 12px;
padding: 8px 10px;
border-radius: 5px;
}
.rail-group a span {
opacity: 0;
}
.rail-group a:hover {
background: #e4edf3;
}
.rail-group a:hover span {
opacity: 1;
}
.rail-group a[aria-current] {
background: #dce3f9;
color: #2849d4;
font-weight: 600;
}
.rail-elsewhere {
border-top: 1px solid var(--studio-rule);
padding: 16px 10px 0;
margin-top: 22px;
}
.rail-elsewhere a {
display: flex;
justify-content: space-between;
font-size: 10px;
margin-bottom: 12px;
color: var(--studio-muted);
}
.site-main {
margin-left: 224px;
width: calc(100% - 224px);
}
.site-main.interior-page {
max-width: 1340px;
padding: 25px 32px 55px;
}
.studio-home {
padding-inline: 32px;
}
.site-footer {
margin-left: 224px;
width: calc(100% - 224px);
max-width: none;
padding: 0 32px 20px;
}
}
@media (max-width: 700px) {
.intro-main {
display: block;
}
.intro-portrait {
width: 72px;
height: 84px;
}
.intro-main h1 {
font-size: clamp(46px, 12vw, 70px);
}
.studio-intro {
padding: 26px 0 32px;
}
.studio-hadlock {
padding: 23px;
margin: 32px 0;
}
.corners-grid,
.travel-notes {
grid-template-columns: 1fr;
}
.corner-card {
display: grid;
grid-template-columns: 105px 1fr;
column-gap: 12px;
transform: none !important;
}
.corner-card > img,
.october-stamp {
grid-row: span 2;
height: 120px;
}
.corner-card > span {
align-self: end;
}
.corner-card > p {
margin-bottom: 8px;
}
.october-stamp strong {
font-size: 43px;
}
.project-tools {
align-items: stretch;
flex-direction: column;
gap: 12px;
}
.project-tools > p {
padding: 0;
}
.studio-project-title {
flex-wrap: wrap;
gap: 5px;
}
}
@media (min-width: 701px) and (max-width: 1099px) {
.mobile-toggle {
display: block;
}
.mobile-menu {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.desktop-nav {
margin-left: auto;
margin-right: 20px;
}
}
.studio-about > div,
.studio-hadlock > div {
min-width: 0;
}
.justice-line {
max-width: 100%;
}
@media (prefers-reduced-motion: reduce) {
.corner-card {
transform: none !important;
}
}
.section-jumps {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.section-jumps a {
font-size: 12px;
padding: 8px 13px;
border: 1px solid var(--studio-rule);
border-radius: 5px;
background: #fbfdff;
color: var(--studio-blue);
}
.mark-live-header {
display: flex;
justify-content: space-between;
align-items: center;
gap: 20px;
border: 1px solid var(--studio-rule);
background: #fbfdff;
padding: 16px 24px;
border-radius: 8px;
}
.mark-live-brand {
display: flex;
gap: 12px;
align-items: center;
font-size: 13px;
font-weight: 600;
}
.mark-live-brand > svg {
width: 42px;
height: 42px;
color: var(--studio-blue);
}
.mark-example-links {
display: flex;
gap: 24px;
font-size: 12px;
color: var(--studio-muted);
}
.mark-helper {
font-size: 12px;
line-height: 1.8;
color: var(--studio-muted);
margin: 16px 0 24px;
max-width: 730px;
}
.mark-choice-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 20px;
}
.mark-choice {
min-width: 0;
text-align: left;
border: 1px solid var(--studio-rule);
border-radius: 9px;
overflow: hidden;
background: #fbfdff;
}
.mark-choice[aria-pressed="true"] {
border-color: var(--studio-blue);
box-shadow: 0 0 0 1px var(--studio-blue);
}
.mark-large {
height: 200px;
display: flex;
justify-content: center;
align-items: center;
background: #edf3f7;
padding: 20px;
}
.mark-large svg {
width: 120px;
height: 120px;
color: var(--studio-blue);
}
.name-only-mark {
font-family: var(--font-sans), sans-serif;
font-weight: 650;
letter-spacing: -0.055em;
white-space: nowrap;
}
.name-only-mark > span {
color: var(--studio-blue);
}
.mark-large .name-only-mark {
font-size: clamp(18px, 2vw, 28px);
}
.mark-choice-body {
padding: 21px;
}
.mark-choice-body h2 {
font-size: 17px;
font-weight: 600;
}
.mark-choice-body h2 > span {
color: var(--studio-blue);
margin-right: 7px;
}
.mark-choice-body > p {
font-size: 12px;
line-height: 1.8;
color: var(--studio-muted);
margin-top: 12px;
min-height: 65px;
}
.mark-samples {
display: flex;
align-items: center;
gap: 18px;
margin-top: 20px;
}
.mark-samples > div {
display: grid;
place-items: center;
min-width: 40px;
height: 40px;
}
.mark-samples svg {
width: 30px;
height: 30px;
}
.mark-samples .name-only-mark {
font-size: 11px;
}
.mark-reversed {
--mark-paper: #2849d4;
padding: 4px 8px;
background: #2849d4;
color: #fff;
border-radius: 5px;
}
.mark-reversed .name-only-mark > span {
color: #fff;
}
@media (max-width: 800px) {
.mark-choice-grid {
grid-template-columns: 1fr;
}
.mark-large {
height: 150px;
}
.mark-choice-body > p {
min-height: 0;
}
.mark-example-links {
display: none;
}
}
/* Coffee lives alongside the rest of the personal site. */
.coffee-toolbar {
display: flex;
align-items: center;
gap: 16px;
margin-bottom: 20px;
flex-wrap: wrap;
}
.coffee-toolbar label {
font-weight: 650;
}
.coffee-toolbar input {
flex: 1;
min-width: 180px;
padding: 12px 15px;
background: var(--studio-paper, #fbfdff);
border: 1px solid var(--studio-rule);
border-radius: 6px;
}
.coffee-toolbar button {
font-size: 13px;
text-decoration: underline;
text-underline-offset: 4px;
padding: 10px 0;
}
.coffee-layout {
display: grid;
grid-template-columns: minmax(0, 1fr) 290px;
border: 1px solid var(--studio-rule);
border-radius: 8px;
overflow: hidden;
}
.coffee-map-panel {
min-width: 0;
position: relative;
background: #e7eff4;
}
.coffee-map {
height: 520px;
z-index: 0;
font-family: inherit;
}
.coffee-map-status {
position: absolute;
top: 55px;
left: 60px;
right: 25px;
padding: 15px;
background: #fbfdff;
}
.coffee-pin {
background: var(--studio-blue);
border: 2px solid #fff;
color: white;
border-radius: 50%;
display: grid;
place-items: center;
font-size: 12px;
font-weight: 700;
box-shadow: 0 2px 6px #0003;
}
.coffee-pin.is-selected {
background: #26251f;
outline: 3px solid #3949c655;
}
.coffee-shop-list {
max-height: 520px;
overflow: auto;
background: #fbfdff;
padding: 18px 12px;
}
.coffee-shop-list > .studio-label {
padding: 0 10px 12px;
}
.coffee-shop {
display: flex;
align-items: center;
gap: 12px;
width: 100%;
text-align: left;
padding: 14px 10px;
border-top: 1px solid var(--studio-rule);
border-radius: 3px;
}
.coffee-shop:hover,
.coffee-shop[aria-pressed="true"] {
background: #edf3f7;
}
.coffee-shop > span:nth-child(2) {
flex: 1;
}
.coffee-shop strong {
display: block;
font-size: 14px;
font-weight: 650;
}
.coffee-shop small {
display: block;
color: var(--studio-muted);
margin-top: 4px;
font-size: 11px;
}
.coffee-shop-number {
color: var(--studio-blue);
font-size: 12px;
}
.coffee-detail {
background: #fbfdff;
padding: 22px;
border-top: 1px solid var(--studio-rule);
}
.coffee-detail-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
}
.coffee-detail h2 {
font-size: 22px;
font-weight: 650;
letter-spacing: -0.035em;
}
.coffee-detail-heading button {
min-width: 40px;
min-height: 40px;
font-size: 26px;
}
.coffee-detail p {
font-size: 14px;
line-height: 1.7;
margin: 8px 0;
}
.coffee-detail .coffee-address {
color: var(--studio-muted);
font-size: 12px;
}
.coffee-detail-links {
display: flex;
gap: 22px;
color: var(--studio-blue);
margin-top: 16px;
font-size: 13px;
}
.coffee-map-note {
color: var(--studio-muted);
font-size: 12px;
line-height: 1.6;
margin-top: 18px;
}
.coffee-empty {
padding: 12px;
font-size: 14px;
}
@media (max-width: 800px) {
.coffee-layout {
grid-template-columns: minmax(0, 1fr);
}
.coffee-map {
height: 340px;
}
.coffee-shop-list {
max-height: 340px;
border-top: 1px solid var(--studio-rule);
}
.coffee-toolbar label {
width: 100%;
}
}
.coffee-pin > span {
position: absolute;
inset: 0;
display: grid;
place-items: center;
}
.parent-page-link {
display: inline-flex;
align-items: center;
min-height: 32px;
font-size: 13px;
color: var(--studio-muted);
}
.parent-page-link:hover {
color: var(--studio-blue);
}
/* Shared editorial rhythm for the background and archive pages. */
.record-intro {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 16px;
margin-bottom: 28px;
}
.record-intro .section-jumps {
margin: 0;
}
.record-section {
margin-bottom: 48px;
scroll-margin-top: 110px;
}
.record-section > h2 {
font-family: var(--font-heading), serif;
font-size: 34px;
margin-bottom: 20px;
letter-spacing: -0.025em;
}
.record-row {
display: grid;
grid-template-columns: 180px minmax(0, 1fr);
gap: 32px;
padding: 28px 0;
border-top: 1px solid var(--studio-rule);
}
.record-meta {
font-size: 12px;
line-height: 1.7;
color: var(--studio-muted);
}
.record-meta p + p {
margin-top: 8px;
}
.record-number {
display: block;
color: var(--studio-blue);
margin-bottom: 12px;
font-size: 15px;
}
.record-body {
max-width: 780px;
min-width: 0;
}
.record-body h2,
.record-body h3 {
font-family: inherit;
font-size: 23px;
line-height: 1.3;
font-weight: 600;
letter-spacing: -0.035em;
margin: 0 0 12px;
text-wrap: balance;
}
.record-body h2 a:hover {
color: var(--studio-blue);
}
.record-body > p,
.record-body details p {
font-size: 14px;
line-height: 1.8;
color: var(--studio-muted);
margin: 10px 0;
}
.record-body .record-kicker,
.record-kicker {
font-size: 12px;
line-height: 1.6;
margin: 0 0 10px;
color: var(--studio-muted);
}
.record-body details {
margin-top: 16px;
font-size: 14px;
}
.record-body summary,
.record-disclosure summary {
cursor: pointer;
color: var(--studio-blue);
padding: 8px 0;
}
.record-body ul,
.record-disclosure ul {
list-style: disc;
padding-left: 20px;
color: var(--studio-muted);
font-size: 14px;
line-height: 1.8;
}
.record-body li + li {
margin-top: 8px;
}
.record-links {
display: flex;
flex-wrap: wrap;
gap: 12px 24px;
font-size: 13px;
color: var(--studio-blue);
margin: 18px 0 8px;
}
.record-links a:hover {
text-decoration: underline;
text-underline-offset: 4px;
}
.skills-index {
border-top: 1px solid var(--studio-rule);
}
.skills-index > div {
display: grid;
grid-template-columns: 180px minmax(0, 1fr);
gap: 32px;
padding: 18px 0;
border-bottom: 1px solid var(--studio-rule);
}
.skills-index h3 {
font-size: 13px;
font-weight: 650;
}
.skills-index p {
font-size: 14px;
line-height: 1.8;
color: var(--studio-muted);
}
.record-disclosure {
border-top: 1px solid var(--studio-rule);
padding: 16px 0;
}
.record-disclosure summary {
font-size: 16px;
}
.record-disclosure summary span {
color: var(--studio-muted);
font-size: 12px;
margin-left: 8px;
}
.record-disclosure article {
padding: 18px 0;
max-width: 780px;
font-size: 14px;
line-height: 1.8;
}
.record-disclosure h3 {
font-weight: 650;
}
.document-reader {
min-width: 0;
}
.document-topbar {
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 16px;
padding-bottom: 20px;
}
.document-topbar .record-links {
margin: 0;
}
.document-switch {
display: flex;
gap: 4px;
padding: 4px;
border: 1px solid var(--studio-rule);
border-radius: 8px;
}
.document-switch button {
padding: 10px 18px;
border-radius: 5px;
font-size: 14px;
}
.document-switch button[aria-pressed="true"] {
background: var(--studio-ink, #292923);
color: #fffdf8;
}
.document-controls {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
gap: 10px;
padding: 12px;
border: 1px solid var(--studio-rule);
border-radius: 8px 8px 0 0;
background: #edf3f7;
}
.control-group {
display: flex;
align-items: center;
gap: 8px;
font-size: 12px;
}
.control-group button {
min-width: 36px;
min-height: 36px;
padding: 6px 10px;
border: 1px solid var(--studio-rule);
border-radius: 4px;
background: #fbfdff;
}
.control-group button:disabled {
opacity: 0.35;
cursor: not-allowed;
}
.control-group span {
min-width: 94px;
text-align: center;
font-variant-numeric: tabular-nums;
}
.document-paper {
position: relative;
height: min(76vh, 1050px);
min-height: 420px;
overflow: auto;
padding: 16px;
background: #e7eff4;
border: 1px solid var(--studio-rule);
border-top: 0;
}
.document-paper canvas {
display: block;
margin: 0 auto;
max-width: none;
background: white;
box-shadow: 0 3px 20px #24231f12;
}
.document-message {
position: absolute;
inset: 0;
display: grid;
place-content: center;
padding: 30px;
text-align: center;
color: var(--studio-muted);
font-size: 14px;
}
.reader-note {
margin-top: 12px;
font-size: 12px;
color: var(--studio-muted);
}
@media (max-width: 700px) {
.record-row {
grid-template-columns: minmax(0, 1fr);
gap: 12px;
padding: 24px 0;
}
.record-meta {
display: flex;
flex-wrap: wrap;
gap: 8px 16px;
}
.record-meta p + p {
margin: 0;
}
.record-number {
margin: 0;
}
.record-body h2,
.record-body h3 {
font-size: 21px;
}
.skills-index > div {
grid-template-columns: minmax(0, 1fr);
gap: 6px;
}
.document-topbar {
align-items: flex-start;
}
.document-paper {
min-height: 360px;
height: 65vh;
}
}
.document-sheet + .document-sheet {
margin-top: 24px;
}
.document-sheet {
width: max-content;
min-width: 100%;
}
/* A centered site with one consistent, compact navigation. */
.site-header {
background: #f6f9fcf5;
backdrop-filter: blur(18px);
border-bottom: 1px solid var(--studio-rule);
}
.nav-inner {
max-width: 1160px;
height: 72px;
padding-inline: 40px;
border-bottom: 0;
}
.primary-links {
display: flex;
align-items: center;
gap: 28px;
font-size: 13px;
}
.primary-links a:hover {
color: var(--studio-blue);
}
.primary-links a {
padding-block: 14px;
}
.site-main {
margin-left: 0;
width: 100%;
}
.site-main.interior-page {
width: 100%;
max-width: 1160px;
margin-inline: auto;
padding: 36px 40px 60px;
}
.studio-home {
max-width: 1160px;
padding-inline: 40px;
}
.studio-home .studio-intro {
padding: 44px 0 40px;
}
.studio-home .intro-topline {
justify-content: space-between;
padding-right: 0;
}
.site-footer {
width: 100%;
max-width: 1160px;
margin-inline: auto;
padding: 0 40px 24px;
}
.studio-home section[id] {
scroll-margin-top: 96px;
}
.background-links {
display: flex;
flex-wrap: wrap;
gap: 12px 24px;
margin-top: 20px;
font-size: 12px;
color: var(--studio-muted);
}
.background-links a:hover {
color: var(--studio-blue);
text-decoration: underline;
text-underline-offset: 4px;
}
@media (max-width: 700px) {
.nav-inner {
height: 64px;
padding-inline: 20px;
}
.nav-inner .wordmark-name {
font-size: 18px;
}
.primary-links {
gap: 16px;
font-size: 12px;
}
.studio-home {
padding-inline: 23px;
}
.studio-home .studio-intro {
padding-top: 28px;
}
.site-main.interior-page {
padding: 28px 23px 44px;
}
.site-footer {
padding: 0 23px 20px;
}
.studio-home section[id] {
scroll-margin-top: 84px;
}
}
@media (max-width: 360px) {
.nav-inner {
padding-inline: 16px;
}
.nav-inner .wordmark-name {
font-size: 16px;
}
.primary-links {
gap: 12px;
}
}
.header-background {
position: relative;
}
.header-background summary {
display: flex;
gap: 7px;
align-items: center;
cursor: pointer;
list-style: none;
padding-block: 14px;
}
.header-background summary::-webkit-details-marker {
display: none;
}
.header-background summary[data-active="true"],
.header-background[open] summary {
color: var(--studio-blue);
}
.header-background summary .menu-chevron {
transition: transform 150ms ease;
}
.header-background[open] summary .menu-chevron {
transform: rotate(180deg);
}
.header-dropdown {
position: absolute;
top: 100%;
right: 0;
width: 190px;
padding: 6px;
border: 1px solid var(--studio-rule);
background: #fbfdff;
border-radius: 8px;
box-shadow: 0 10px 25px #24231f12;
}
.primary-links .header-dropdown a {
display: block;
padding: 12px;
border-radius: 4px;
}
.header-dropdown a:hover,
.header-dropdown a[aria-current="page"] {
background: #edf3f7;
color: var(--studio-blue);
}
.primary-links .header-resume {
color: var(--studio-blue);
font-weight: 650;
white-space: nowrap;
}
@media (max-width: 700px) {
.nav-inner {
position: relative;
height: 102px;
flex-wrap: wrap;
align-content: center;
row-gap: 2px;
}
.nav-inner > .wordmark {
height: 42px;
}
.primary-links {
width: 100%;
justify-content: space-between;
gap: 12px;
}
.primary-links .header-resume {
position: absolute;
top: 12px;
right: 20px;
padding: 10px 0;
}
.primary-links > a,
.header-background summary {
padding-block: 12px;
}
.header-dropdown {
right: -30px;
}
.studio-home section[id],
.record-section {
scroll-margin-top: 122px;
}
}
@media (prefers-reduced-motion: reduce) {
.header-background summary .menu-chevron {
transition: none;
}
}
/* Hadlock palette, with cool blue-white surfaces and lake-blue contour lines. */
:root {
--font-sans: "Helvetica Neue", Helvetica, Arial, sans-serif;
--background: 204 44% 97%;
--foreground: 205 34% 16%;
--card: 205 45% 99%;
--card-foreground: 205 34% 16%;
--primary: 196 100% 31%;
--ring: 196 100% 31%;
--muted-foreground: 207 10% 40%;
--studio-blue: #0076a0;
--studio-muted: #616a6e;
--studio-rule: #d6e1e7;
--studio-ink: #173441;
}
body {
background:
radial-gradient(ellipse at 95% 5%, #e4f2f7 0, transparent 38rem),
radial-gradient(ellipse at 0 65%, #edf4f8 0, transparent 40rem), #f6f9fc;
font-family: var(--font-sans);
}
::selection {
background: #c7e5ed;
color: #163542;
}
.site-header {
background: #f6f9fcf0;
border-color: #d6e1e780;
}
.wordmark-name {
font-weight: 600;
letter-spacing: -0.045em;
}
.primary-links {
font-size: 14px;
}
.header-dropdown {
background: #fbfdff;
box-shadow: 0 14px 40px #17344116;
}
.header-dropdown a:hover,
.header-dropdown a[aria-current="page"] {
background: #e4eff0;
}
.primary-links .header-resume {
padding: 9px 14px;
border: 1px solid #0076a030;
border-radius: 6px;
background: #0076a009;
}
.studio-home {
padding-top: 28px;
}
.studio-home .studio-intro {
position: relative;
isolation: isolate;
overflow: hidden;
padding: 38px 44px 42px;
margin-bottom: 44px;
border: 1px solid #245565;
border-radius: 22px;
color: #173441;
background:
radial-gradient(ellipse at 100% 110%, #8dc4d1aa, transparent 65%),
linear-gradient(115deg, #e9f3f1, #cce5e9);
box-shadow:
0 14px 40px #1734410c,
inset 0 1px 0 #ffffff10;
}
.contour-lines {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: -1;
opacity: 0.45;
}
.contour-lines path {
stroke: #92b8bc;
stroke-width: 1.3;
vector-effect: non-scaling-stroke;
}
.studio-intro .intro-topline {
color: #496f7b;
font-size: 11px;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.studio-intro .intro-main {
grid-template-columns: minmax(0, 1fr) 145px;
gap: 32px;
margin-top: 25px;
}
.studio-intro h1 {
color: #143744;
font-size: clamp(54px, 6vw, 84px);
font-weight: 400;
letter-spacing: -0.04em;
margin-bottom: 22px;
}
.studio-intro h1 span {
color: #0076a0;
}
.studio-intro .intro-statement {
color: #173b49;
font-size: 23px;
line-height: 1.45;
letter-spacing: -0.025em;
}
.studio-intro .intro-statement a {
color: #006c90;
text-decoration-color: #0076a080;
}
.studio-intro .intro-detail {
color: #42606a;
font-size: 15px;
line-height: 1.8;
max-width: 590px;
}
.studio-intro .intro-links {
color: #173b49;
margin-top: 25px;
}
.studio-intro .intro-links a {
font-size: 13px;
}
.studio-intro .intro-links a:first-child {
border: 1px solid #47879b75;
border-radius: 5px;
padding: 9px 13px;
background: #ffffff66;
}
.studio-intro .intro-portrait {
transform: none;
width: 145px;
height: 175px;
border: 6px solid #fff8e9;
border-radius: 12px;
box-shadow: 0 14px 30px #071c2630;
}
.studio-label,
.eyebrow {
letter-spacing: 0.12em;
color: #54717c;
font-size: 10px;
font-weight: 500;
}
.studio-section-heading {
margin-bottom: 22px;
}
.studio-section-heading h2 {
font-family: var(--font-heading), serif;
font-size: 32px;
font-weight: 400;
letter-spacing: -0.025em;
}
.studio-section-heading h2 span {
font-family: var(--font-sans);
font-size: 11px;
}
.studio-grid > article {
background: #fbfdff;
padding: 12px 12px 20px;
border: 1px solid #d6e1e7;
border-radius: 16px;
box-shadow: 0 4px 12px #17344104;
}
.studio-project-image {
border-radius: 9px;
}
.studio-project-title,
.studio-project-description,
.studio-stack {
margin-left: 8px;
margin-right: 8px;
}
.studio-project-title h3 {
font-size: 23px;
letter-spacing: -0.035em;
font-weight: 500;
}
.studio-grid .justice-paragraph {
margin-inline: 8px;
}
.studio-hadlock {
background: linear-gradient(120deg, #e3eceb, #eef0e6);
border: 1px solid #ccd8d5;
border-radius: 18px;
padding: 32px;
}
.studio-hadlock > img {
border-radius: 10px;
}
.studio-about {
padding-top: 20px;
}
.corner-card {
background: #fbfdff;
border: 1px solid #d6e1e7;
box-shadow: 0 5px 16px #17344106;
border-radius: 10px;
}
.october-corner {
background: linear-gradient(145deg, #eee6d4, #f9f5e9);
}
.studio-contact {
position: relative;
isolation: isolate;
overflow: hidden;
padding: 36px;
margin: 40px 0 44px;
border: 1px solid #245565;
border-radius: 18px;
background:
radial-gradient(ellipse at 90% 120%, #0076a065, transparent 70%), #173b49;
color: #fff8e9;
}
.studio-contact .studio-label {
color: #bdd3d6;
}
.studio-contact h2 {
color: #fff8e9;
}
.studio-contact > a {
color: #bee2e8;
font-size: 22px;
}
.archive-header {
position: relative;
padding: 22px 0 30px;
margin-bottom: 26px;
border-bottom: 1px solid var(--studio-rule);
}
.archive-header h1 {
color: #173b49;
}
.record-body h2,
.record-body h3 {
font-weight: 500;
}
.document-controls {
background: #e4ebe8;
}
.document-paper {
background: linear-gradient(135deg, #e4e8e2, #eeebe2);
}
.document-switch button[aria-pressed="true"] {
background: #173b49;
}
.site-footer {
color: #616a6e;
}
@media (max-width: 700px) {
.studio-home {
padding-top: 18px;
}
.studio-home .studio-intro {
padding: 26px 24px 30px;
border-radius: 16px;
margin-bottom: 32px;
}
.studio-intro .intro-main {
display: block;
margin-top: 20px;
}
.studio-intro h1 {
font-size: clamp(42px, 10.5vw, 65px);
}
.studio-intro .intro-statement {
font-size: 20px;
}
.studio-intro .intro-detail {
font-size: 14px;
}
.studio-intro .intro-portrait {
width: 70px;
height: 84px;
margin-top: 24px;
border-width: 4px;
border-radius: 8px;
}
.studio-intro .intro-topline {
font-size: 9px;
gap: 8px;
flex-wrap: wrap;
}
.studio-grid {
gap: 24px;
}
.studio-project-title {
flex-wrap: wrap;
}
.studio-hadlock {
padding: 24px;
}
.studio-contact {
padding: 28px 24px;
}
.studio-contact > a {
font-size: 19px;
}
.primary-links .header-resume {
top: 10px;
padding: 9px 12px;
}
}
.contour-lines {
opacity: 0.3;
mask-image: linear-gradient(120deg, transparent 25%, #000 75%);
}
/* The hero is a full-width backdrop, not an inset card. */
.studio-home {
padding-top: 0;
}
.studio-home .studio-intro {
overflow: visible;
isolation: isolate;
background: none;
border: 0;
border-radius: 0;
box-shadow: none;
padding: 44px 0 48px;
}
.studio-home .studio-intro::before {
content: "";
position: absolute;
inset-block: 0;
left: calc((100% - 100vw) / 2);
width: 100vw;
z-index: -2;
background:
radial-gradient(ellipse at 100% 110%, #8dc4d1aa, transparent 65%),
linear-gradient(115deg, #e9f3f1, #cce5e9);
}
.studio-intro > .contour-lines {
left: calc((100% - 100vw) / 2);
width: 100vw;
}
.studio-intro > .contour-lines path { stroke: #468ca0; }
@media (max-width: 700px) {
.studio-home .studio-intro {
padding: 30px 0 36px;
border-radius: 0;
}
}
.mobile-menu-label,
.primary-links .header-dropdown .mobile-menu-link {
display: none;
}
.nav-inner { flex-wrap: nowrap; }
@media (max-width: 700px) {
.nav-inner {
height: 64px;
gap: 12px;
flex-wrap: nowrap;
}
.nav-inner > .wordmark { flex-shrink: 0; }
.primary-links {
width: auto;
gap: 12px;
}
.primary-links > a:not(.header-resume),
.desktop-menu-label { display: none; }
.mobile-menu-label { display: inline; }
.primary-links .header-resume {
position: static;
order: -1;
padding: 9px 0;
border: 0;
background: none;
}
.header-background summary {
min-height: 44px;
gap: 5px;
}
.header-dropdown { right: 0; }
.primary-links .header-dropdown .mobile-menu-link { display: block; }
.studio-home section[id], .record-section { scroll-margin-top: 84px; }
}
@media (max-width: 360px) {
.nav-inner, .primary-links { gap: 8px; }
}
.hadlock-brand img { width: min(100%, 340px); height: auto; }
/* Personal postcards: photographs, editorial captions, a playful calendar. */
.personal-corners { padding-block: 20px 32px; }
.corners-grid { gap: 22px; align-items: stretch; }
.corner-card {
position: relative;
isolation: isolate;
display: flex;
flex-direction: column;
justify-content: flex-end;
min-height: 350px;
padding: 26px;
overflow: hidden;
border: 1px solid #ffffff40;
border-radius: 14px;
background: #173b49;
box-shadow: 0 12px 26px #17344116;
color: #fff8e9;
}
.corner-card > img {
position: absolute;
inset: 0;
height: 100%;
z-index: -2;
transition: transform 400ms ease;
}
.corner-card::before {
content: "";
position: absolute;
inset: 0;
z-index: -1;
background: linear-gradient(180deg, #102e3c00 15%, #102e3c55 45%, #102e3cf5);
}
.corner-card::after {
content: "↗";
position: absolute;
top: 18px;
right: 18px;
display: grid;
place-items: center;
width: 34px;
height: 34px;
border: 1px solid #fff8e960;
border-radius: 50%;
background: #102e3c30;
}
.corner-card:hover > img { transform: scale(1.04); }
.corner-card:focus-visible { outline: 3px solid var(--studio-blue); outline-offset: 5px; }
.corner-card > span {
margin: 0 0 10px;
font-family: var(--font-heading), Georgia, serif;
font-size: 32px;
line-height: 1.1;
font-weight: 400;
}
.corner-card > p { margin: 0; color: #e2e9e6; font-size: 13px; line-height: 1.65; }
.october-corner {
background: radial-gradient(ellipse at 100% 0, #f0d9a4, transparent 70%), #e5b88b;
color: #623719;
}
.october-corner::before { background: repeating-linear-gradient(0deg, transparent 0 31px, #6237190a 31px 32px); }
.october-corner::after { border-color: #62371950; background: #fff8e930; }
.october-corner > p { color: #744f32; }
.october-stamp { background: none; height: auto; flex: 1; min-height: 170px; padding-bottom: 24px; }
.october-stamp strong { font-size: 82px; }
.october-stamp > span { font-size: 13px; letter-spacing: .3em; }
.october-stamp small { margin-top: 8px; }
/* The closing band echoes the full-bleed hero. */
.studio-contact {
overflow: visible;
border: 0;
border-radius: 0;
background: none;
padding: 48px 0;
margin: 24px 0 0;
}
.site-footer::before {
content: "";
position: absolute;
inset-block: 0;
left: calc((100% - 100vw) / 2);
width: 100vw;
z-index: -2;
background: radial-gradient(ellipse at 100% 110%, #0076a073, transparent 65%), linear-gradient(115deg, #102e3c, #1c4b5b);
}
.site-footer > .contour-lines { left: calc((100% - 100vw) / 2); width: 100vw; }
.site-footer { position: relative; isolation: isolate; color: #fff8e9; padding-top: 0; padding-bottom: 28px; }
.site-footer .footer-top { border-top-color: #b9d4d438; padding-block: 28px; align-items: flex-start; }
.site-footer .wordmark { flex-shrink: 0; }
.site-footer .footer-links { max-width: 660px; gap: 12px 22px; color: #c0d1d6; line-height: 1.8; }
.site-footer .footer-bottom { color: #a5bec6; padding-top: 8px; }
.site-footer a:hover { color: #fff; }
@media (max-width: 700px) {
.corners-grid { gap: 18px; }
.corner-card { display: flex; min-height: 310px; padding: 26px; }
.corner-card > img { height: 100%; }
.corner-card > span { align-self: auto; }
.corner-card > p { margin: 0; }
.october-stamp { height: auto; min-height: 150px; }
.october-stamp strong { font-size: 76px; }
.studio-contact { padding: 36px 0; }
.site-footer .footer-top { flex-direction: column; gap: 20px; }
}
@media (prefers-reduced-motion: reduce) {
.corner-card, .corner-card > img { transition: none; }
}
.hadlock-brand img { filter: brightness(0) saturate(100%) invert(16%) sepia(20%) saturate(1477%) hue-rotate(154deg) brightness(91%) contrast(89%); }
/* Responsive composition of the shadcn navigation primitives. */
.header-desktop-navigation { flex: 0 1 auto; }
.header-mobile-navigation { display: none; align-items: center; gap: 4px; }
@media (max-width: 700px) {
.header-desktop-navigation { display: none; }
.header-mobile-navigation { display: flex; }
}
/* Tailwind 3 equivalents for the registry's Tailwind 4 menu tokens. */
[data-slot="dropdown-menu-content"] {
max-height: var(--radix-dropdown-menu-content-available-height);
transform-origin: var(--radix-dropdown-menu-content-transform-origin);
background: hsl(var(--popover) / .98);
}
[data-slot="dropdown-menu-item"] { min-height: 44px; font-size: 13px; outline: none; }
[data-slot="dropdown-menu-item"][data-highlighted],
[data-slot="dropdown-menu-item"][aria-current="page"] {
background: hsl(var(--accent));
color: hsl(var(--accent-foreground));
}
:root {
--popover: 48 100% 99%;
--popover-foreground: 205 34% 16%;
--accent: 190 20% 91%;
--accent-foreground: 199 47% 20%;
}
/* Brand identity sits in the caption below each unobstructed project image. */
.project-brand { display: inline-flex; align-items: center; gap: 8px; min-height: 30px; max-width: 100%; line-height: 1; }
.project-brand > img { display: block; flex: none; width: auto; height: 27px; max-width: min(45vw, 190px); object-fit: contain; }
.project-brand--racetix > img { filter: brightness(0); }
.project-brand--beenvoice > img { height: 25px; filter: brightness(0); }
.project-brand--puter > img { width: 30px; height: 30px; border-radius: 7px; }
.project-brand--manyangles { font-size: 24px; font-weight: 700; letter-spacing: -.04em; }
.project-brand--manyangles svg { flex: none; width: 29px; height: 29px; }
@media (prefers-color-scheme: dark) {
.project-brand--racetix > img,
.project-brand--beenvoice > img { filter: brightness(0) invert(1); }
}
/* Contact and footer use a single shared backdrop. */
.site-footer .studio-contact { margin: 0; scroll-margin-top: 84px; }
/* The page heading already separates the writing list from its introduction. */
.writing-page .record-row:first-child { border-top: 0; padding-top: 0; }
/* Archive previews use the same proportional logo system as the homepage. */
.archive-image { container-type: inline-size; --project-logo-height: 8cqw; }
.archive-image > img { object-fit: contain; object-position: center; }
.archive-image--photo > img { object-fit: cover; }
/* Puter's real macOS captures, paired with its compiled app icon. */
.puter .studio-project-image { background: #d7e8df; }
.puter-preview {
position: absolute;
inset: 0;
overflow: hidden;
background: radial-gradient(circle at 80% 5%, #eff9f1, #c6dfd0 85%);
}
.puter-preview--dark { background: radial-gradient(circle at 80% 5%, #31574a, #11332a 85%); }
.puter-preview .puter-preview-screen,
.archive-image .puter-preview .puter-preview-screen {
position: absolute !important;
inset: 7% 5% auto !important;
width: 90% !important;
height: 86% !important;
margin: 0 !important;
border: 1px solid #28564222;
border-radius: 9px;
object-fit: cover !important;
object-position: top center;
box-shadow: 0 15px 28px #15352830;
}
.puter-preview--interactive .puter-preview-screen,
.archive-image .puter-preview--interactive .puter-preview-screen { height: 76% !important; }
.puter-preview-controls {
position: absolute;
right: 4%;
bottom: 4%;
left: 4%;
display: flex;
justify-content: center;
gap: 5px;
overflow-x: auto;
scrollbar-width: none;
}
.puter-preview-controls button {
flex: none;
padding: 4px 8px;
border: 1px solid #52756755;
border-radius: 999px;
background: #ffffffb8;
color: #174634;
font-size: 10px;
line-height: 1.2;
cursor: pointer;
}
.puter-preview-controls button[aria-pressed="true"] { background: #0c5d40; border-color: #0c5d40; color: #fff; }
.puter-preview--dark .puter-preview-controls button { background: #173a2f; color: #effcf3; }
.puter-preview--dark .puter-preview-controls button[aria-pressed="true"] { background: #c0efd3; color: #0a3021; }
/* September 10's full-width mobile header panel. */
.restored-header-menu {
width: 100vw;
border-radius: 0;
padding: 16px 20px;
background: hsl(var(--background) / .96);
backdrop-filter: blur(18px);
border-top: 1px solid hsl(var(--border) / .5);
}
.restored-header-menu [data-slot="dropdown-menu-item"] {
gap: 12px;
padding-inline: 12px;
}
.restored-header-menu [data-slot="dropdown-menu-item"] svg { width: 16px; height: 16px; }
.mobile-menu-backdrop {
position: fixed;
inset: 64px 0 0;
z-index: 40;
background: linear-gradient(180deg, #f6f9fc10, #f6f9fc8c 70%);
-webkit-backdrop-filter: blur(14px);
backdrop-filter: blur(14px);
-webkit-mask-image: linear-gradient(180deg, transparent, #000 42%);
mask-image: linear-gradient(180deg, transparent, #000 42%);
}
@media (min-width: 701px) {
.mobile-menu-backdrop { display: none; }
}
/* Portrait beside the introduction on tablets, above the name on phones. */
@media (min-width: 541px) and (max-width: 900px) {
.studio-intro .intro-main {
display: grid;
grid-template-columns: minmax(0, 1fr) 110px;
align-items: start;
gap: 24px;
}
.studio-intro .intro-portrait {
width: 110px;
height: 133px;
margin-top: 0;
border-width: 4px;
}
}
@media (max-width: 540px) {
.studio-intro .intro-main {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 18px;
}
.studio-intro .intro-portrait {
order: -1;
width: 64px;
height: 77px;
margin: 0;
border-width: 3px;
}
}
/* Editorial treatment for the media, writing, and work archives. */
.media-page .archive-header,
.writing-page .archive-header,
.portfolio-page .archive-header {
border-bottom: 0;
margin-bottom: 28px;
padding-bottom: 8px;
}
.media-page .archive-header > p:last-child,
.writing-page .archive-header > p:last-child,
.portfolio-page .archive-header > p:last-child {
max-width: 700px;
font-size: 17px;
line-height: 1.6;
}
.media-feature {
position: relative;
isolation: isolate;
display: flex;
flex-direction: column;
justify-content: space-between;
min-height: 400px;
overflow: hidden;
padding: 32px 38px 36px;
border-radius: 16px;
color: #fff8e9;
background: radial-gradient(ellipse at 100% 100%, #0076a080, transparent 58%), linear-gradient(115deg, #102e3c, #1c4b5b);
}
.media-feature .contour-lines { left: 20%; width: 80%; }
.media-feature-top,
.media-story-top,
.media-story-bottom {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
}
.media-feature-top,
.media-story-top { font-size: 11px; letter-spacing: .11em; text-transform: uppercase; }
.media-feature-top { color: #bad2d8; }
.media-feature-bottom { max-width: 770px; }
.media-feature h2 {
font-family: var(--font-heading), Georgia, serif;
font-size: clamp(42px, 5.2vw, 70px);
font-weight: 400;
line-height: 1.03;
letter-spacing: -.035em;
text-wrap: balance;
}
.media-feature p { max-width: 610px; margin-top: 17px; font-size: 15px; line-height: 1.65; color: #d1e0e1; }
.media-feature a {
display: inline-flex;
align-items: center;
gap: 10px;
margin-top: 25px;
padding-bottom: 6px;
border-bottom: 1px solid #b9d4d48c;
font-size: 13px;
font-weight: 600;
}
.media-feature a:hover { color: #b7e1e8; }
.media-story-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; margin-top: 18px; }
.media-story {
display: flex;
flex-direction: column;
min-height: 335px;
padding: 28px 30px;
border: 1px solid var(--studio-rule);
border-radius: 14px;
background: #fbfdff;
}
.media-story-top { color: #54717c; }
.media-story-top svg { flex-shrink: 0; }
.media-story h2 {
margin-top: 38px;
font-family: var(--font-heading), Georgia, serif;
font-size: clamp(27px, 3vw, 39px);
font-weight: 400;
line-height: 1.13;
letter-spacing: -.025em;
text-wrap: balance;
}
.media-story h2 a:hover { color: var(--studio-blue); }
.media-story > p { margin-top: 14px; color: var(--studio-muted); font-size: 14px; line-height: 1.65; }
.media-story-bottom {
margin-top: auto;
padding-top: 25px;
font-size: 12px;
color: var(--studio-muted);
}
.media-story-bottom a { color: var(--studio-blue); white-space: nowrap; }
.media-story-bottom a:hover { text-decoration: underline; text-underline-offset: 4px; }
.writing-page .record-section {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 18px;
margin: 0;
}
.writing-page .writing-entry {
display: flex;
flex-direction: column;
gap: 22px;
min-height: 275px;
padding: 30px;
border: 1px solid var(--studio-rule);
border-radius: 14px;
background: #fbfdff;
}
.writing-page .writing-entry:first-child {
position: relative;
isolation: isolate;
grid-column: 1 / -1;
min-height: 350px;
padding: 38px;
overflow: hidden;
border: 0;
color: #fff8e9;
background: radial-gradient(ellipse at 100% 100%, #0076a080, transparent 62%), linear-gradient(115deg, #102e3c, #1c4b5b);
}
.writing-entry .record-meta { font-size: 11px; letter-spacing: .08em; text-transform: uppercase; }
.writing-entry:first-child .record-meta { color: #bbd1d5; }
.writing-entry .record-body { display: flex; flex-direction: column; flex: 1; max-width: none; }
.writing-entry .record-body h2 {
max-width: 630px;
margin: 0;
font-family: var(--font-heading), Georgia, serif;
font-size: clamp(29px, 3vw, 39px);
font-weight: 400;
line-height: 1.14;
letter-spacing: -.025em;
}
.writing-entry:first-child .record-body h2 { font-size: clamp(44px, 5vw, 65px); }
.writing-entry .record-body h2 a:hover { color: var(--studio-blue); }
.writing-entry:first-child .record-body h2 a:hover { color: #b7e1e8; }
.writing-entry .record-body > p { margin: 12px 0 0; font-size: 14px; line-height: 1.7; }
.writing-entry:first-child .record-body > p { max-width: 540px; color: #d2e1e3; }
.writing-entry .record-body .record-kicker { margin-top: 15px; font-size: 11px; letter-spacing: .06em; text-transform: uppercase; }
.writing-entry:first-child .record-body .record-kicker { color: #a9c7cd; }
.writing-entry-link { display: inline-flex; align-items: center; gap: 8px; align-self: flex-start; margin-top: auto; padding-top: 22px; color: var(--studio-blue); font-size: 13px; font-weight: 600; }
.writing-entry:first-child .writing-entry-link { color: #fff8e9; }
.writing-entry-link:hover { text-decoration: underline; text-underline-offset: 4px; }
.article-page { max-width: 820px; margin-inline: auto; }
.article-page > .parent-page-link { margin-bottom: 35px; }
.article-page-header { border-bottom: 1px solid var(--studio-rule); padding-bottom: 35px; margin-bottom: 42px; }
.article-page-header h1 {
margin: 14px 0 16px;
font-family: var(--font-heading), Georgia, serif;
font-size: clamp(45px, 6vw, 74px);
font-weight: 400;
line-height: 1.05;
letter-spacing: -.035em;
text-wrap: balance;
}
.article-page-summary { max-width: 680px; font-size: 19px; line-height: 1.55; color: var(--studio-muted); }
.article-page-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 22px; margin-top: 25px; color: var(--studio-muted); font-size: 12px; }
.article-page-tags { display: flex; flex-wrap: wrap; gap: 7px; }
.article-page-body { max-width: 730px; color: var(--studio-ink); font-size: 16px; line-height: 1.85; }
.article-page-body.prose h2,
.article-page-body.prose h3 { font-family: var(--font-heading), Georgia, serif; font-weight: 400; letter-spacing: -.02em; }
.article-page-body.prose h2 { font-size: 36px; }
.article-page-body.prose h3 { font-size: 29px; }
.article-page-body pre { overflow-x: auto; border-radius: 10px; }
.article-page-body img { max-width: 100%; height: auto; border-radius: 8px; }
.article-page-return { display: inline-block; margin-top: 50px; padding-top: 20px; border-top: 1px solid var(--studio-rule); color: var(--studio-blue); font-size: 13px; }
.portfolio-page .archive-header { margin-bottom: 14px; }
.portfolio-page .project-tools {
gap: 12px;
margin-bottom: 42px;
padding: 13px;
border: 1px solid var(--studio-rule);
border-radius: 12px;
background: #fbfdff;
}
.portfolio-page .project-tools label { position: relative; min-width: 260px; }
.portfolio-page .project-tools label > svg { position: absolute; top: 50%; left: 14px; transform: translateY(-50%); color: #67808a; }
.portfolio-page .project-tools input { margin: 0; padding: 11px 13px 11px 41px; border-color: transparent; background: #f4f5f0; }
.portfolio-page .project-tools input:focus { outline: 2px solid var(--studio-blue); outline-offset: 2px; }
.portfolio-page .project-tools > p { padding: 0 5px; white-space: nowrap; }
.portfolio-page .project-filters button { border-radius: 6px; }
.portfolio-section-heading { display: flex; align-items: end; justify-content: space-between; gap: 25px; margin: 0 0 22px; }
.portfolio-section-heading span { order: 2; font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: #54717c; }
.portfolio-section-heading h2 { font-family: var(--font-heading), Georgia, serif; font-size: clamp(32px, 3vw, 43px); line-height: 1.1; font-weight: 400; }
.portfolio-feature-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; }
.portfolio-page .archive-card--featured {
padding: 12px;
border-radius: 16px;
background: #fbfdff;
box-shadow: 0 6px 18px #17344108;
}
.archive-card--featured .archive-image { border-radius: 9px; aspect-ratio: 1.62; }
.archive-card--featured .archive-body { padding: 20px 9px 10px; }
.archive-card-heading { display: flex; align-items: baseline; justify-content: space-between; gap: 20px; }
.archive-card-heading h2 { font-family: var(--font-heading), Georgia, serif; font-size: 31px; font-weight: 400; letter-spacing: -.025em; }
.archive-card-heading > span { font-size: 11px; color: #67808a; }
.portfolio-page .archive-body > p { margin-top: 10px; line-height: 1.6; }
.portfolio-page .project-tags { gap: 6px; margin-top: 19px; }
.portfolio-page .project-tags span { padding: 5px 8px; border: 0; border-radius: 4px; background: #eef1ec; font-size: 10px; color: #54717c; }
.portfolio-page .archive-links { display: flex; gap: 12px 25px; flex-wrap: wrap; margin-top: 22px; }
.portfolio-page .project-detail { border-top: 1px solid var(--studio-rule); margin-top: 20px; padding-top: 10px; }
.portfolio-page .project-detail summary { padding: 5px 0; }
.portfolio-more { margin-top: 65px; }
.portfolio-more-list { border-top: 1px solid var(--studio-rule); }
.portfolio-page .archive-card--compact {
display: grid;
grid-template-columns: 174px minmax(0, 1fr);
gap: 25px;
padding: 20px 0;
border: 0;
border-bottom: 1px solid var(--studio-rule);
border-radius: 0;
background: none;
}
.archive-card--compact .archive-image { aspect-ratio: 1.6; align-self: start; border-radius: 8px; }
.archive-image--fallback { display: grid; place-items: center; padding: 15px; background: radial-gradient(ellipse at 100% 100%, #0076a080, transparent 70%), #173b49; color: #fff8e9; }
.archive-image--fallback > span { font-family: var(--font-heading), Georgia, serif; font-size: clamp(15px, 2cqw, 24px); line-height: 1.1; text-align: center; }
.archive-card--compact .archive-body { padding: 0; }
.archive-card--compact .archive-card-heading h2 { font-size: 27px; }
.archive-card--compact .archive-body > p { margin-top: 6px; }
.archive-card--compact .project-tags { margin-top: 14px; }
.archive-card--compact .archive-links { margin-top: 15px; }
.archive-card--compact .archive-links { padding-top: 0; }
.archive-card--compact .project-detail { margin-top: 13px; }
@media (max-width: 700px) {
.media-feature { min-height: 410px; padding: 25px; }
.media-feature-top { flex-wrap: wrap; gap: 6px 15px; }
.media-feature h2 { font-size: clamp(42px, 11vw, 57px); }
.media-story-grid,
.writing-page .record-section,
.portfolio-feature-grid { grid-template-columns: 1fr; }
.media-story { min-height: 310px; padding: 24px; }
.media-story h2 { margin-top: 28px; }
.writing-page .writing-entry:first-child { grid-column: auto; min-height: 360px; padding: 28px; }
.writing-page .writing-entry { min-height: 270px; padding: 25px; }
.article-page-header h1 { font-size: clamp(43px, 11vw, 62px); }
.article-page-summary { font-size: 17px; }
.article-page-body { font-size: 15px; }
.portfolio-page .project-tools { padding: 12px; }
.portfolio-page .project-tools label { min-width: 100%; }
.portfolio-page .project-tools > p { width: 100%; }
.portfolio-section-heading { align-items: flex-start; flex-direction: column; gap: 8px; }
.portfolio-section-heading span { order: -1; }
.portfolio-page .archive-card--compact { grid-template-columns: 100px minmax(0, 1fr); gap: 15px; padding: 18px 0; }
.archive-card--compact .archive-card-heading h2 { font-size: 22px; }
.archive-card--compact .archive-body > p { font-size: 13px; }
.archive-card--compact .project-tags { display: none; }
.archive-card--compact .archive-links { gap: 9px 15px; }
.portfolio-more { margin-top: 45px; }
}
@media (max-width: 380px) {
.portfolio-page .archive-card--compact { grid-template-columns: 78px minmax(0, 1fr); }
.media-story-bottom { align-items: flex-start; flex-direction: column; gap: 8px; }
}
/* The site follows the operating system's appearance, including every archive. */
@media (prefers-color-scheme: dark) {
:root {
color-scheme: dark;
--background: 202 32% 9%;
--foreground: 43 30% 94%;
--card: 201 28% 14%;
--card-foreground: 43 30% 94%;
--popover: 201 27% 16%;
--popover-foreground: 43 30% 94%;
--primary: 192 65% 66%;
--primary-foreground: 202 35% 11%;
--secondary: 201 23% 21%;
--secondary-foreground: 43 30% 94%;
--muted: 201 23% 21%;
--muted-foreground: 194 18% 70%;
--accent: 198 28% 25%;
--accent-foreground: 43 30% 94%;
--border: 198 19% 30%;
--input: 198 19% 30%;
--ring: 192 65% 66%;
--studio-blue: #83d1e5;
--studio-muted: #afc0c5;
--studio-rule: #38505a;
--studio-ink: #f2eee4;
}
body {
background:
radial-gradient(ellipse at 95% 5%, #1a3540 0, transparent 38rem),
radial-gradient(ellipse at 0 65%, #243039 0, transparent 40rem), #101d25;
color: hsl(var(--foreground));
}
::selection { background: #28586b; color: #f8f4e9; }
.skip-link { background: #1c303a; color: var(--studio-blue); }
.site-header { background: #142832f0; border-color: var(--studio-rule); }
.site-header .wordmark, .site-header a { color: hsl(var(--foreground)); }
.site-header a:hover, .site-header a[aria-current="page"] { color: var(--studio-blue); }
.restored-header-menu, .header-dropdown { background: #1c303a; color: hsl(var(--foreground)); border-color: var(--studio-rule); }
.restored-header-menu [data-slot="dropdown-menu-item"] { color: hsl(var(--foreground)); }
.restored-header-menu [data-slot="dropdown-menu-item"][data-highlighted],
.header-dropdown a:hover, .header-dropdown a[aria-current="page"] { background: #294451; color: var(--studio-blue); }
.mobile-menu-backdrop { background: linear-gradient(180deg, #10263010, #102630b8 70%); }
.studio-home .studio-intro { color: #fff8e9; }
.studio-home .studio-intro::before {
background: radial-gradient(ellipse at 100% 110%, #0076a073, transparent 65%), linear-gradient(115deg, #102e3c, #1c4b5b);
}
.studio-intro > .contour-lines path { stroke: #92b8bc; }
.studio-intro .intro-topline { color: #c0d4d7; }
.studio-intro h1, .studio-intro .intro-statement, .studio-intro .intro-links { color: #fff8e9; }
.studio-intro h1 span { color: #91c2ce; }
.studio-intro .intro-statement a { color: #b3dfe7; text-decoration-color: #8bbacb65; }
.studio-intro .intro-detail { color: #c0d1d6; }
.studio-intro .intro-links a:first-child { border-color: #b9d4d45c; background: #ffffff09; }
.studio-grid > article, .studio-hadlock, .media-story,
.writing-page .writing-entry:not(:first-child),
.portfolio-page .project-tools, .portfolio-page .archive-card--featured,
.travel-note, .mark-live-header, .mark-choice,
.section-jumps a, .project-tools input, .control-group button,
.project-filters button:not([aria-pressed="true"]), .project-empty button {
background: #1a2b34;
color: hsl(var(--foreground));
border-color: var(--studio-rule);
}
.studio-hadlock { background: linear-gradient(120deg, #1d3942, #263734); }
.hadlock-brand img { filter: brightness(0) invert(1); }
.archive-header h1, .archive-card-heading h2, .article-page-body,
.record-body h2, .record-body h3 { color: hsl(var(--foreground)); }
.media-story-top, .portfolio-section-heading span,
.archive-card-heading > span, .portfolio-page .project-tools label > svg,
.portfolio-page .project-tags span { color: var(--studio-muted); }
.portfolio-page .project-tools input { background: #12242e; }
.portfolio-page .project-tools input::placeholder { color: var(--studio-muted); }
.portfolio-page .project-tags span { background: #29434c; }
.mark-large { background: #253842; }
.mark-reversed { --mark-paper: #16323e; background: #83d1e5; color: #112630; }
.mark-reversed .name-only-mark > span { color: #112630; }
.october-corner { background: radial-gradient(ellipse at 100% 0, #774e31, transparent 70%), #573e31; color: #fff1dc; }
.october-corner::before { background: repeating-linear-gradient(0deg, transparent 0 31px, #fff1dc12 31px 32px); }
.october-corner::after { border-color: #fff1dc60; }
.october-corner > p { color: #eed6bd; }
.document-controls, .document-switch { background: #1a2b34; }
.document-paper { background: linear-gradient(135deg, #1c2c34, #293640); }
.document-switch button[aria-pressed="true"] { background: #385d6c; color: #fff; }
.article-page-body.prose { color: hsl(var(--foreground)); }
.article-page-body.prose :is(h2, h3, h4, strong, a, blockquote) { color: hsl(var(--foreground)); }
.article-page-body.prose a { color: var(--studio-blue); }
.article-page-body.prose code:not(pre code) { color: #cbeaf0; }
.article-page-body.prose pre { background: #091821; }
.site-footer::before { background: radial-gradient(ellipse at 100% 110%, #006b8773, transparent 65%), linear-gradient(115deg, #0b202b, #143746); }
.site-footer .footer-links, .site-footer .footer-bottom { color: #b9cbd0; }
}