:root { --bg: #0b1014; --bg-soft: #11191f; --surface: #152029; --surface-2: #1b2831; --paper: #e9e5da; --paper-deep: #d8d2c3; --ink: #11171a; --text: #edf1e9; --muted: #9ba7a5; --muted-dark: #5c6665; --line: rgba(237, 241, 233, 0.16); --line-dark: rgba(17, 23, 26, 0.18); --coral: #f0996e; --coral-bright: #ffad82; --cyan: #8fd4d0; --lime: #c8ee80; --yellow: #f3d277; --display: "Syne", "Avenir Next", sans-serif; --mono: "IBM Plex Mono", "Courier New", monospace; --page-pad: clamp(1.25rem, 4vw, 4.5rem); --max-width: 96rem; --radius-sm: 0.5rem; --radius-md: 1rem; --radius-lg: 1.5rem; } *, *::before, *::after { box-sizing: border-box; } html { overflow-x: clip; scroll-behavior: smooth; scroll-padding-top: 7rem; } body { min-width: 20rem; margin: 0; overflow-x: clip; background: var(--bg); color: var(--text); font-family: var(--mono); font-size: 1rem; line-height: 1.65; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; } body::before { position: fixed; z-index: -2; inset: 0; background: radial-gradient(circle at 82% 10%, rgba(143, 212, 208, 0.11), transparent 28rem), radial-gradient(circle at 9% 36%, rgba(240, 153, 110, 0.09), transparent 25rem), var(--bg); content: ""; pointer-events: none; } ::selection { background: var(--coral); color: var(--ink); } img, svg { display: block; max-width: 100%; } a { color: inherit; text-decoration: none; } button { color: inherit; font: inherit; } p, h1, h2, h3, blockquote, ul { margin-top: 0; } h1, h2, h3 { font-family: var(--display); line-height: 0.98; } code { padding: 0.08em 0.35em; border: 1px solid currentColor; border-radius: 0.3rem; font: 0.85em var(--mono); } :focus-visible { outline: 3px solid var(--lime); outline-offset: 4px; } .skip-link { position: fixed; z-index: 1000; top: 1rem; left: 1rem; padding: 0.75rem 1rem; transform: translateY(-160%); background: var(--lime); color: var(--ink); font-weight: 600; transition: transform 180ms ease; } .skip-link:focus { transform: translateY(0); } .page-grid { position: fixed; z-index: -1; inset: 0; opacity: 0.3; background-image: linear-gradient(rgba(255, 255, 255, 0.025) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.025) 1px, transparent 1px); background-size: 4rem 4rem; pointer-events: none; mask-image: linear-gradient(to bottom, black, transparent 72%); } .site-header { position: fixed; z-index: 100; top: 1rem; left: 50%; display: flex; width: min(calc(100% - 2rem), var(--max-width)); min-height: 4rem; align-items: center; justify-content: space-between; padding: 0.55rem 0.65rem 0.55rem 1rem; transform: translateX(-50%); border: 1px solid rgba(237, 241, 233, 0.14); border-radius: 0.8rem; background: rgba(11, 16, 20, 0.78); box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.16); backdrop-filter: blur(18px); } .brand { display: inline-flex; align-items: center; gap: 0.65rem; font-family: var(--display); font-size: 1.05rem; font-weight: 700; letter-spacing: -0.02em; } /* ShinyText-style sweep, ported to plain CSS (no motion/JS dependency). A blended highlight bar sweeps across the wordmark rather than animating background-clip:text, which is unreliable across engines at small sizes. */ .brand > span:last-child { position: relative; display: inline-block; overflow: hidden; } .brand > span:last-child::after { position: absolute; inset: -20% -10%; background: linear-gradient(100deg, transparent 42%, rgba(255, 255, 255, 0.9) 50%, transparent 58%); content: ""; mix-blend-mode: overlay; pointer-events: none; transform: translateX(-140%); animation: brand-shine 5.5s ease-in-out infinite; } @media (prefers-reduced-motion: reduce) { .brand > span:last-child::after { display: none; } } @keyframes brand-shine { 0%, 18% { transform: translateX(-140%); } 55%, 100% { transform: translateX(140%); } } .brand-mark { display: grid; width: 2.45rem; height: 2.45rem; place-items: center; border-radius: 0.45rem; background: var(--coral); color: var(--ink); font: 600 0.85rem var(--mono); } .site-nav { position: relative; display: flex; align-items: center; gap: clamp(0.8rem, 2vw, 2rem); } /* GooeyNav-style hover highlight, ported to vanilla JS/CSS (no gsap dependency). A solid coral pill snaps to the hovered nav item with a springy squash/stretch, matching the site's flat, opaque badge language (roadmap chips, image labels) instead of a soft blurred glow. */ .nav-gooey { position: absolute; z-index: 0; top: 0; left: 0; width: 0; height: 0; opacity: 0; pointer-events: none; transition: opacity 180ms ease; } .nav-gooey.is-active { opacity: 1; } .nav-gooey-blob { position: absolute; top: 0; left: 0; border-radius: 100vw; background: var(--coral); transition: left 320ms cubic-bezier(0.22, 1, 0.36, 1), top 320ms cubic-bezier(0.22, 1, 0.36, 1), width 320ms cubic-bezier(0.22, 1, 0.36, 1), height 320ms cubic-bezier(0.22, 1, 0.36, 1), transform 320ms cubic-bezier(0.34, 1.56, 0.64, 1); } .nav-gooey.is-jumping .nav-gooey-blob { transform: scaleX(1.18) scaleY(0.86); } .nav-gooey-blob--trail { display: none; } .site-nav > a { position: relative; z-index: 1; transition: color 180ms ease; } .site-nav > a.is-lit { color: var(--ink) !important; } @media (prefers-reduced-motion: reduce) { .nav-gooey { display: none; } } .site-nav a { font-size: 0.78rem; font-weight: 500; letter-spacing: 0.04em; text-transform: uppercase; } .site-nav > a:not(.nav-pill) { position: relative; color: var(--muted); transition: color 180ms ease; } .site-nav > a:not(.nav-pill)::after { position: absolute; right: 0; bottom: -0.4rem; left: 0; height: 1px; transform: scaleX(0); transform-origin: right; background: var(--coral); content: ""; transition: transform 180ms ease; } .site-nav > a:not(.nav-pill):hover { color: var(--text); } .site-nav > a:not(.nav-pill):hover::after { transform: scaleX(1); transform-origin: left; } .nav-pill { display: inline-flex; align-items: center; gap: 0.65rem; padding: 0.72rem 0.9rem; border: 1px solid var(--line); border-radius: 0.45rem; transition: background 180ms ease, color 180ms ease, border-color 180ms ease; } .nav-pill:hover { border-color: var(--lime); background: var(--lime); color: var(--ink); } .hero { display: grid; width: min(100%, var(--max-width)); min-height: 100svh; margin: 0 auto; padding: clamp(8.5rem, 14vh, 11rem) var(--page-pad) clamp(4.5rem, 8vh, 7rem); grid-template-columns: minmax(0, 1.05fr) minmax(30rem, 0.95fr); align-items: center; gap: clamp(3rem, 7vw, 8rem); } .hero-copy { position: relative; z-index: 2; min-width: 0; } .eyebrow, .section-index, .project-kicker, .stack-label { margin-bottom: 1.4rem; font-size: 0.72rem; font-weight: 600; letter-spacing: 0.13em; text-transform: uppercase; } .eyebrow { display: flex; align-items: center; color: var(--cyan); } .status-dot { position: relative; width: 0.52rem; height: 0.52rem; margin-right: 0.7rem; border-radius: 50%; background: var(--lime); box-shadow: 0 0 0 0.3rem rgba(200, 238, 128, 0.11); } .status-dot::after { position: absolute; inset: -0.4rem; border: 1px solid rgba(200, 238, 128, 0.35); border-radius: 50%; content: ""; animation: status-pulse 2.4s ease-out infinite; } .hero h1 { max-width: 11ch; margin-bottom: 2rem; font-size: clamp(3.4rem, 6.5vw, 7.25rem); font-weight: 700; letter-spacing: -0.075em; } .hero h1 span { display: block; color: var(--coral); } .hero-intro { max-width: 43rem; margin-bottom: 2.1rem; color: var(--muted); font-size: clamp(0.93rem, 1.25vw, 1.08rem); } .hero-actions { display: flex; flex-wrap: wrap; gap: 0.8rem; margin-bottom: 3rem; } .button { display: inline-flex; min-height: 3.2rem; align-items: center; justify-content: space-between; gap: 1.5rem; padding: 0.8rem 1.1rem; border: 1px solid var(--line); border-radius: 0.45rem; font-size: 0.78rem; font-weight: 600; letter-spacing: 0.03em; text-transform: uppercase; transition: transform 180ms ease, background 180ms ease, color 180ms ease; } .button:hover { transform: translateY(-3px); } .button-primary { border-color: var(--coral); background: var(--coral); color: var(--ink); } .button-primary:hover { background: var(--coral-bright); } .button-ghost:hover { background: var(--text); color: var(--ink); } .hero-signals { display: flex; max-width: 44rem; margin-bottom: 0; padding: 0; border-top: 1px solid var(--line); list-style: none; } .hero-signals li { flex: 1; padding: 1rem 1rem 0 0; color: var(--muted); font-size: 0.67rem; letter-spacing: 0.06em; text-transform: uppercase; } .hero-signals li + li { padding-left: 1rem; border-left: 1px solid var(--line); } .hero-signals span { display: block; margin-bottom: 0.2rem; color: var(--coral); } .terminal-card { position: relative; z-index: 1; min-width: 0; align-self: center; border: 1px solid rgba(143, 212, 208, 0.25); border-radius: var(--radius-lg); background: linear-gradient(145deg, rgba(25, 38, 47, 0.96), rgba(12, 19, 24, 0.98)); box-shadow: 0 2rem 7rem rgba(0, 0, 0, 0.36), inset 0 1px rgba(255, 255, 255, 0.04); transform: rotate(1.5deg); } .terminal-card::before { position: absolute; z-index: -1; inset: 10% -10% -8% 14%; border-radius: 50%; background: rgba(143, 212, 208, 0.12); filter: blur(4rem); content: ""; } .terminal-chrome { display: grid; min-height: 3.6rem; padding: 0 1.2rem; border-bottom: 1px solid var(--line); grid-template-columns: 1fr auto 1fr; align-items: center; color: var(--muted); font-size: 0.7rem; } .window-dots { display: flex; gap: 0.35rem; } .window-dots i { width: 0.48rem; height: 0.48rem; border-radius: 50%; background: #58636a; } .window-dots i:first-child { background: var(--coral); } .window-dots i:nth-child(2) { background: var(--yellow); } .window-dots i:last-child { background: var(--lime); } .terminal-state { display: flex; align-items: center; justify-self: end; gap: 0.45rem; color: var(--lime); } .terminal-state i, .repo-live i { width: 0.4rem; height: 0.4rem; border-radius: 50%; background: currentColor; } .terminal-body { padding: clamp(1.35rem, 3vw, 2.2rem); font-size: clamp(0.73rem, 1vw, 0.86rem); } .terminal-body > p { margin-bottom: 0.25rem; } .terminal-output { margin-left: 1.4rem; color: var(--muted); } .prompt { margin-right: 0.65rem; color: var(--coral); } .terminal-ok { color: var(--lime); } .infra-map { display: grid; margin-top: 2rem; padding: 1.25rem; border: 1px solid rgba(143, 212, 208, 0.18); border-radius: 0.8rem; background: rgba(0, 0, 0, 0.18); grid-template-columns: auto 1fr auto 1fr auto; align-items: center; } .infra-node { position: relative; z-index: 2; min-width: 4.8rem; padding: 0.65rem; border: 1px solid var(--line); border-radius: 0.45rem; background: var(--surface); text-align: center; } .infra-node small, .infra-node strong { display: block; } .infra-node small { margin-bottom: 0.15rem; color: var(--muted); font-size: 0.52rem; font-weight: 400; letter-spacing: 0.08em; text-transform: uppercase; } .infra-node strong { color: var(--text); font-size: 0.7rem; font-weight: 500; } .node-router { border-color: rgba(240, 153, 110, 0.55); } .node-host { border-color: rgba(200, 238, 128, 0.5); } .infra-line { position: relative; height: 1px; overflow: hidden; background: var(--line); } .infra-line span { position: absolute; top: -1px; left: -0.4rem; width: 0.4rem; height: 3px; border-radius: 1rem; background: var(--cyan); box-shadow: 0 0 0.5rem var(--cyan); animation: packet 2s linear infinite; } .service-row { display: grid; grid-column: 1 / -1; gap: 0.5rem; margin-top: 0.9rem; grid-template-columns: repeat(4, 1fr); } .service-row span { padding: 0.4rem; border-radius: 0.3rem; background: rgba(143, 212, 208, 0.08); color: var(--muted); font-size: 0.55rem; text-align: center; } .profile-chip { position: absolute; right: -1.5rem; bottom: -3.3rem; display: grid; width: min(23rem, 76%); min-height: 5.5rem; padding: 0.7rem 1rem 0.7rem 0.7rem; border: 1px solid rgba(240, 153, 110, 0.35); border-radius: 1rem; background: rgba(13, 19, 23, 0.95); box-shadow: 0 1.3rem 3rem rgba(0, 0, 0, 0.38); grid-template-columns: 4.1rem 1fr auto; align-items: center; gap: 0.85rem; transform: rotate(-3deg); backdrop-filter: blur(12px); } .profile-chip img { width: 4.1rem; height: 4.1rem; border-radius: 0.65rem; background: var(--paper); object-fit: contain; } .profile-chip strong, .profile-chip span { display: block; } .profile-chip strong { font-family: var(--display); font-size: 0.92rem; } .profile-chip div span { margin-top: 0.2rem; color: var(--muted); font-size: 0.6rem; letter-spacing: 0.03em; } .profile-arrow { color: var(--coral); font-size: 1.15rem; } .signal-strip { position: relative; z-index: 3; overflow: hidden; border-top: 1px solid var(--ink); border-bottom: 1px solid var(--ink); background: var(--coral); color: var(--ink); } .signal-track { display: flex; width: max-content; min-height: 3.6rem; align-items: center; animation: marquee 38s linear infinite; } .signal-strip:hover .signal-track { animation-play-state: paused; } .signal-set { display: flex; flex-shrink: 0; align-items: center; gap: 1.4rem; padding-right: 1.4rem; } .signal-item { display: inline-flex; align-items: center; gap: 0.5rem; font-family: var(--display); font-size: 0.82rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; white-space: nowrap; } .signal-icon { width: 1rem; height: 1rem; flex-shrink: 0; object-fit: contain; } .signal-track i { width: 0.42rem; height: 0.42rem; flex-shrink: 0; transform: rotate(45deg); background: var(--ink); } @media (prefers-reduced-motion: reduce) { .signal-track { animation: none; } } .section { width: min(100%, var(--max-width)); margin: 0 auto; padding: clamp(5.5rem, 10vw, 10rem) var(--page-pad); } .section-heading { display: grid; margin-bottom: clamp(3.5rem, 7vw, 6rem); grid-template-columns: minmax(10rem, 0.38fr) minmax(0, 1fr); align-items: start; } .section-index { color: var(--coral); } .section-heading h2 { margin-bottom: 0; font-size: clamp(3rem, 6.4vw, 6.6rem); font-weight: 700; letter-spacing: -0.065em; } .section-heading-row { grid-template-columns: minmax(0, 1fr) minmax(18rem, 0.35fr); gap: 3rem; } .section-heading-row .section-index { margin-bottom: 1.2rem; } .section-heading-row > p { max-width: 28rem; margin: 1.4rem 0 0 auto; color: var(--muted); font-size: 0.86rem; } .section-heading-row > p strong { color: var(--text); } .about-section, .archive-section { position: relative; background: var(--paper); box-shadow: 0 0 0 100vmax var(--paper); color: var(--ink); clip-path: inset(0 -100vmax); } .about-section .section-index, .archive-section .section-index { color: #a74b2c; } .about-layout { display: grid; gap: clamp(3rem, 8vw, 8rem); grid-template-columns: minmax(17rem, 0.7fr) minmax(0, 1fr); } .about-quote { position: relative; margin-bottom: 0; padding-top: 5.5rem; border-top: 1px solid var(--line-dark); } .quote-mark { position: absolute; top: 0; left: 0; color: var(--coral); font-family: var(--display); font-size: 6rem; line-height: 1; } .about-quote p { margin-bottom: 1.7rem; font-family: var(--display); font-size: clamp(2rem, 4vw, 4rem); font-weight: 600; letter-spacing: -0.055em; line-height: 1.05; } .about-quote footer { max-width: 30rem; color: var(--muted-dark); font-size: 0.72rem; } .about-copy { max-width: 48rem; } .about-copy p { color: #3f4848; font-size: 0.92rem; } .about-copy .lead { margin-bottom: 1.8rem; color: var(--ink); font-family: var(--display); font-size: clamp(1.35rem, 2.2vw, 2rem); font-weight: 600; letter-spacing: -0.035em; line-height: 1.25; } .language-line { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 2rem; } .language-line span { padding: 0.5rem 0.7rem; border: 1px solid var(--line-dark); border-radius: 100vw; font-size: 0.62rem; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; } .method-grid { display: grid; margin-top: clamp(4rem, 8vw, 8rem); border-top: 1px solid var(--line-dark); border-bottom: 1px solid var(--line-dark); grid-template-columns: repeat(3, 1fr); } .method-card { min-height: 17rem; padding: 1.5rem clamp(1rem, 3vw, 2.5rem) 2rem; } .method-card + .method-card { border-left: 1px solid var(--line-dark); } .method-card > span { color: #a74b2c; font-size: 0.66rem; } .method-card h3 { max-width: 10ch; margin: 4rem 0 1rem; font-size: clamp(1.55rem, 2.8vw, 2.5rem); letter-spacing: -0.045em; } .method-card p { max-width: 25rem; margin-bottom: 0; color: var(--muted-dark); font-size: 0.74rem; } .work-section { padding-bottom: clamp(6rem, 10vw, 10rem); } .current-project { position: relative; display: grid; min-height: 36rem; overflow: hidden; margin-bottom: 1rem; border: 1px solid rgba(17, 23, 26, 0.22); border-radius: var(--radius-lg); background: radial-gradient(circle at 8% 0, rgba(255, 255, 255, 0.9), transparent 19rem), linear-gradient(135deg, #bcebf1 0%, #9bd5e4 47%, #9ebce9 100%); color: var(--ink); grid-template-columns: minmax(0, 1.15fr) minmax(22rem, 0.7fr); } .current-project::before { position: absolute; top: -65%; left: -10%; width: 115%; height: 85%; transform: rotate(-5deg); border-radius: 50%; background: rgba(255, 255, 255, 0.24); content: ""; filter: blur(0.2rem); } .current-project-main, .current-roadmap { position: relative; z-index: 2; padding: clamp(1.7rem, 4vw, 3.4rem); } .current-project-main { display: flex; flex-direction: column; } .current-meta { display: flex; align-items: center; justify-content: space-between; gap: 1rem; font-size: 0.6rem; font-weight: 600; letter-spacing: 0.07em; text-transform: uppercase; } .current-meta > span:first-child { display: flex; align-items: center; gap: 0.5rem; } .current-meta i { width: 0.45rem; height: 0.45rem; border-radius: 50%; background: #167e72; box-shadow: 0 0 0 0.3rem rgba(22, 126, 114, 0.12); } .current-kicker { margin: auto 0 0.8rem; font-size: 0.68rem; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; } .current-project h3 { margin-bottom: 1.3rem; font-size: clamp(4.5rem, 10vw, 10rem); letter-spacing: -0.085em; } .tide-heading { display: flex; align-items: center; gap: 1rem; } .current-project .tide-heading h3 { margin-bottom: 0; } .tide-mark { width: clamp(2.2rem, 3.4vw, 2.8rem); height: clamp(2.2rem, 3.4vw, 2.8rem); flex-shrink: 0; transition: transform 320ms cubic-bezier(0.2, 0.8, 0.2, 1), filter 320ms ease; will-change: transform; } .tide-mark:hover { transform: scale(1.18) rotate(-6deg); filter: drop-shadow(0 0.4rem 0.6rem rgba(17, 23, 26, 0.28)); } .current-repo-link { margin-top: 0.4rem; } .current-project-main > p:not(.current-kicker) { max-width: 45rem; margin-bottom: 2rem; font-size: 0.8rem; } .current-tags span { border-color: rgba(17, 23, 26, 0.35); } .current-roadmap { display: flex; border-left: 1px solid rgba(17, 23, 26, 0.18); background: rgba(236, 252, 253, 0.24); flex-direction: column; justify-content: center; backdrop-filter: blur(1rem); } .current-roadmap > p { margin-bottom: 1.4rem; font-size: 0.64rem; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; } .current-roadmap ol { margin: 0; padding: 0; border-top: 1px solid rgba(17, 23, 26, 0.2); list-style: none; } .current-roadmap li { display: grid; min-height: 5.4rem; padding: 0.9rem 0; border-bottom: 1px solid rgba(17, 23, 26, 0.2); grid-template-columns: 2rem 1fr auto; align-items: center; gap: 0.8rem; } .current-roadmap li > span, .current-roadmap li > b, .current-roadmap small { font-size: 0.55rem; } .current-roadmap li > span { color: #326570; } .current-roadmap strong, .current-roadmap small { display: block; } .current-roadmap strong { margin-bottom: 0.15rem; font-family: var(--display); font-size: 0.85rem; } .current-roadmap small { color: #3c5d63; } .current-roadmap li > b { padding: 0.3rem 0.45rem; border: 1px solid rgba(17, 23, 26, 0.24); border-radius: 100vw; font-weight: 500; letter-spacing: 0.04em; text-transform: uppercase; } .current-watermark { position: absolute; z-index: 1; bottom: -0.28em; left: 0.25em; color: rgba(255, 255, 255, 0.13); font-family: var(--display); font-size: clamp(8rem, 20vw, 20rem); font-weight: 800; letter-spacing: -0.1em; line-height: 0.7; pointer-events: none; } .project-feature { display: grid; overflow: hidden; min-height: 42rem; margin-bottom: 1rem; border: 1px solid var(--line); border-radius: var(--radius-lg); background: var(--bg-soft); grid-template-columns: minmax(0, 1.5fr) minmax(22rem, 0.62fr); } .project-visual { position: relative; min-height: 35rem; overflow: hidden; } .project-visual::after { position: absolute; inset: 0; background: linear-gradient(90deg, transparent 70%, rgba(17, 25, 31, 0.76)), linear-gradient(0deg, rgba(11, 16, 20, 0.35), transparent 40%); content: ""; transition: opacity 300ms ease; } .project-visual:hover::after { opacity: 0.45; } .project-visual img { width: 100%; height: 100%; transition: transform 700ms cubic-bezier(0.2, 0.7, 0.2, 1); object-fit: cover; } .project-visual:hover img { transform: scale(1.025); } .image-label { position: absolute; z-index: 2; bottom: 1rem; left: 1rem; padding: 0.55rem 0.7rem; border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 0.35rem; background: rgba(11, 16, 20, 0.72); font-size: 0.58rem; letter-spacing: 0.08em; text-transform: uppercase; backdrop-filter: blur(10px); } .flux-frost { display: none; } .project-visual-flux { background: radial-gradient(circle at 8% 0, rgba(255, 255, 255, 0.85), transparent 19rem), linear-gradient(135deg, #ddd1f6 0%, #c0aeee 50%, #aabbe9 100%); } .project-visual-flux::after { background: linear-gradient(0deg, rgba(17, 23, 26, 0.08), transparent 30%); } .project-visual .flux-icon { position: absolute; z-index: 2; top: 50%; left: 50%; width: clamp(5.5rem, 9vw, 8rem); height: auto; border-radius: 22%; box-shadow: 0 1.2rem 2.8rem rgba(4, 9, 13, 0.55); filter: none; object-fit: contain; transform: translate(-50%, -50%); transition: transform 400ms cubic-bezier(0.2, 0.8, 0.2, 1), box-shadow 400ms ease; } .project-visual-flux:hover .flux-icon { box-shadow: 0 1.6rem 3.4rem rgba(4, 9, 13, 0.6); transform: translate(-50%, -50%) scale(1.06) rotate(-2deg); } .flux-watermark { position: absolute; z-index: 1; bottom: -0.16em; left: 0.22em; color: rgba(255, 255, 255, 0.34); font-family: var(--display); font-size: clamp(6rem, 13vw, 13rem); font-weight: 800; letter-spacing: -0.06em; line-height: 0.8; pointer-events: none; transition: transform 700ms cubic-bezier(0.2, 0.75, 0.25, 1); } .project-visual-flux:hover .flux-watermark { transform: translateX(1.2rem); } .flux-chrome { position: absolute; z-index: 2; top: 1rem; left: 1.2rem; display: flex; gap: 0.45rem; } .flux-chrome i { width: 0.7rem; height: 0.7rem; border-radius: 50%; background: rgba(237, 241, 233, 0.28); box-shadow: inset 0 0 0 1px rgba(11, 16, 20, 0.35); } .flux-chrome i:nth-child(1) { background: rgba(240, 153, 110, 0.85); } .flux-chrome i:nth-child(2) { background: rgba(243, 210, 119, 0.85); } .flux-chrome i:nth-child(3) { background: rgba(200, 238, 128, 0.85); } .flux-tags { position: absolute; z-index: 2; top: calc(50% + 4.6rem); left: 50%; display: flex; gap: 0.4rem; transform: translateX(-50%); } .flux-tags span { padding: 0.32rem 0.6rem; border: 1px solid rgba(17, 23, 26, 0.32); border-radius: 100vw; background: rgba(255, 255, 255, 0.22); color: var(--ink); font-family: var(--mono); font-size: 0.55rem; letter-spacing: 0.08em; text-transform: uppercase; backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); } .flux-stack { position: absolute; z-index: 2; top: 50%; right: 1.2rem; width: 12.5rem; padding: 1rem 1.1rem; border: 1px solid rgba(17, 23, 26, 0.2); background: rgba(255, 255, 255, 0.26); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); transform: translateY(-50%); } .flux-stack > b { display: block; margin-bottom: 0.7rem; padding-bottom: 0.6rem; border-bottom: 1px solid rgba(17, 23, 26, 0.2); color: #3c5d63; font-family: var(--mono); font-size: 0.58rem; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; } .flux-stack-row { display: grid; padding: 0.4rem 0; grid-template-columns: 1.6rem 1fr; align-items: baseline; gap: 0.4rem; } .flux-stack-row + .flux-stack-row { border-top: 1px solid rgba(17, 23, 26, 0.12); } .flux-stack-row > span:first-child { color: #326570; font-family: var(--mono); font-size: 0.55rem; } .flux-stack-row > span:last-child { color: var(--ink); font-family: var(--mono); font-size: 0.62rem; letter-spacing: 0.04em; } .flux-stack-row small { display: block; margin-top: 0.1rem; color: #3c5d63; font-size: 0.55rem; } .flux-status { position: absolute; z-index: 2; right: 1.2rem; bottom: 1rem; display: inline-flex; align-items: center; gap: 0.45rem; color: #2f4a44; font-family: var(--mono); font-size: 0.58rem; letter-spacing: 0.08em; text-transform: uppercase; } .flux-status i { width: 0.45rem; height: 0.45rem; border-radius: 50%; background: #167e72; box-shadow: 0 0 0 0.3rem rgba(22, 126, 114, 0.14); animation: flux-pulse 2.4s ease-in-out infinite; } @keyframes flux-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.35; } } @media (max-width: 64rem) { .flux-stack { display: none; } } @media (max-width: 52rem) { .flux-status { display: none; } } @media (max-width: 40rem) { .flux-tags { display: none; } } .project-feature-copy { display: flex; padding: clamp(1.8rem, 4vw, 3.5rem); flex-direction: column; } .project-meta { display: flex; justify-content: space-between; gap: 1rem; color: var(--cyan); font-size: 0.61rem; letter-spacing: 0.07em; text-transform: uppercase; } .project-feature-copy h3 { max-width: 7ch; margin: auto 0 1.4rem; font-size: clamp(2.8rem, 5vw, 5rem); letter-spacing: -0.06em; } .project-feature-copy > p { color: var(--muted); font-size: 0.78rem; } .project-facts { display: grid; margin: 1.7rem 0 2rem; padding: 1.3rem 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); list-style: none; grid-template-columns: repeat(3, 1fr); } .project-facts strong, .project-facts span { display: block; } .project-facts strong { color: var(--coral); font-family: var(--display); font-size: 1.5rem; } .project-facts span { margin-top: 0.15rem; color: var(--muted); font-size: 0.55rem; } .text-link { display: inline-flex; width: fit-content; align-items: center; gap: 0.8rem; border-bottom: 1px solid currentColor; font-size: 0.7rem; font-weight: 600; letter-spacing: 0.03em; text-transform: uppercase; } .text-link span { transition: transform 180ms ease; } .text-link:hover span { transform: translate(0.2rem, -0.2rem); } .project-grid { display: grid; gap: 1rem; margin-bottom: 1rem; grid-template-columns: repeat(2, 1fr); } .project-card { position: relative; display: flex; min-height: 31rem; overflow: hidden; padding: clamp(1.5rem, 4vw, 3rem); border-radius: var(--radius-lg); color: var(--ink); flex-direction: column; justify-content: space-between; } .project-card::after { position: absolute; right: -5rem; bottom: -8rem; width: 19rem; height: 19rem; border: 1px solid rgba(17, 23, 26, 0.22); border-radius: 50%; box-shadow: 0 0 0 3rem rgba(17, 23, 26, 0.05), 0 0 0 6rem rgba(17, 23, 26, 0.035); content: ""; transition: transform 500ms ease; } .project-card:hover::after { transform: scale(1.12); } .project-card-warm { background: var(--coral); } .project-card-cool { background: var(--cyan); } .project-card-top, .card-footer { position: relative; z-index: 2; display: flex; align-items: center; justify-content: space-between; } .project-number { font-size: 0.7rem; } .repo-live { display: flex; align-items: center; gap: 0.45rem; font-size: 0.6rem; letter-spacing: 0.08em; text-transform: uppercase; } .project-card > div:nth-child(2) { position: relative; z-index: 2; max-width: 39rem; } .project-kicker { margin-bottom: 0.9rem; } .project-card h3 { max-width: 10ch; margin-bottom: 1.5rem; font-size: clamp(3rem, 6vw, 6rem); letter-spacing: -0.065em; } .project-card p:last-child { max-width: 39rem; margin-bottom: 0; font-size: 0.8rem; } .tag-row { display: flex; flex-wrap: wrap; gap: 0.4rem; } .tag-row span { padding: 0.42rem 0.58rem; border: 1px solid rgba(17, 23, 26, 0.3); border-radius: 100vw; font-size: 0.54rem; font-weight: 600; text-transform: uppercase; } .card-footer > a { position: relative; z-index: 3; display: grid; width: 3.1rem; height: 3.1rem; place-items: center; border: 1px solid var(--ink); border-radius: 50%; transition: transform 200ms ease, background 200ms ease, color 200ms ease; } .card-footer > a:hover { transform: rotate(45deg); background: var(--ink); color: var(--text); } .project-list { border-top: 1px solid var(--line); } .project-row { display: grid; min-height: 9.4rem; padding: 1.4rem 0; border-bottom: 1px solid var(--line); grid-template-columns: 3rem minmax(12rem, 0.5fr) minmax(16rem, 1fr) minmax(8rem, auto) 3rem; align-items: center; gap: clamp(1rem, 3vw, 3rem); transition: background 180ms ease, padding 180ms ease; } .project-row:hover { padding-right: 1rem; padding-left: 1rem; background: rgba(255, 255, 255, 0.035); } .row-index, .row-tech, .project-row > div > p { color: var(--muted); font-size: 0.61rem; letter-spacing: 0.06em; text-transform: uppercase; } .project-row > div > p { margin-bottom: 0.4rem; } .project-row h3 { margin-bottom: 0; font-size: clamp(1.45rem, 2.4vw, 2.2rem); letter-spacing: -0.04em; } .project-row > p { margin-bottom: 0; color: var(--muted); font-size: 0.73rem; } .project-row > a { font-size: 1.2rem; text-align: right; transition: color 180ms ease, transform 180ms ease; } .project-row:hover > a { transform: translate(0.2rem, -0.2rem); color: var(--coral); } .modrinth-panel { margin-top: 1rem; padding: clamp(1.5rem, 4vw, 3rem); border: 1px solid rgba(96, 222, 139, 0.25); border-radius: var(--radius-lg); background: radial-gradient(circle at 90% 0, rgba(96, 222, 139, 0.12), transparent 24rem), #101814; } .modrinth-heading { display: flex; align-items: end; justify-content: space-between; gap: 2rem; margin-bottom: 3rem; } .modrinth-label { display: flex; align-items: center; gap: 0.65rem; margin-bottom: 1rem; color: #68dc91; font-size: 0.65rem; font-weight: 600; letter-spacing: 0.1em; text-transform: uppercase; } .modrinth-label span { width: 0.55rem; height: 0.55rem; border-radius: 50%; background: #68dc91; box-shadow: 0 0 0 0.3rem rgba(104, 220, 145, 0.1); } .modrinth-heading h3 { max-width: 14ch; margin-bottom: 0; font-size: clamp(2.2rem, 4.5vw, 4.6rem); letter-spacing: -0.055em; } .modrinth-heading .text-link { margin-bottom: 0.4rem; color: #68dc91; } .modrinth-grid { display: grid; border-top: 1px solid rgba(237, 241, 233, 0.14); grid-template-columns: repeat(2, 1fr); } .modrinth-item { display: grid; min-height: 7.8rem; padding: 1.25rem 1.25rem 1.25rem 0; border-bottom: 1px solid rgba(237, 241, 233, 0.14); grid-template-columns: 2.5rem minmax(10rem, 0.75fr) minmax(9rem, 1fr); align-items: center; gap: 1rem; transition: padding 180ms ease, background 180ms ease; } .modrinth-item:nth-child(odd) { padding-right: 2rem; border-right: 1px solid rgba(237, 241, 233, 0.14); } .modrinth-item:nth-child(even) { padding-left: 2rem; } .modrinth-item:hover { padding-right: 1.4rem; padding-left: 1.4rem; background: rgba(104, 220, 145, 0.055); } .catalog-index { color: #68dc91; font-size: 0.62rem; } .modrinth-item strong { font-family: var(--display); font-size: 1.12rem; letter-spacing: -0.025em; } .modrinth-item small, .modrinth-item b { color: var(--muted); font-size: 0.58rem; font-weight: 400; } .modrinth-item small { display: none; } .modrinth-item b { justify-self: end; text-align: right; } .modrinth-summary { max-width: 42rem; margin: 0; padding-top: 2rem; border-top: 1px solid rgba(237, 241, 233, 0.14); color: var(--muted); font-size: 0.86rem; } .modrinth-stats { display: flex; flex-wrap: wrap; gap: clamp(2rem, 6vw, 4rem); margin-top: 2rem; } .modrinth-stats div { display: flex; flex-direction: column; gap: 0.3rem; } .modrinth-stats strong { color: #68dc91; font-family: var(--display); font-size: clamp(2rem, 4vw, 2.8rem); letter-spacing: -0.03em; } .modrinth-stats span { color: var(--muted); font-size: 0.68rem; letter-spacing: 0.04em; text-transform: uppercase; } .archive-section .section-heading { margin-bottom: 4rem; } .archive-section .section-heading-row > .text-link { margin: 1.4rem 0 0 auto; } .archive-grid { display: grid; border-top: 1px solid var(--line-dark); grid-template-columns: repeat(2, 1fr); } .archive-item { display: grid; min-height: 6rem; padding: 1.15rem 1rem 1.15rem 0; border-bottom: 1px solid var(--line-dark); grid-template-columns: minmax(9rem, 0.8fr) 1fr auto; align-items: center; gap: 1rem; transition: padding 180ms ease, background 180ms ease; } .archive-item:nth-child(odd) { padding-right: 2rem; border-right: 1px solid var(--line-dark); } .archive-item:nth-child(even) { padding-left: 2rem; } .archive-item:hover { padding-right: 1.5rem; padding-left: 1.5rem; background: rgba(17, 23, 26, 0.055); } .archive-item span { font-family: var(--display); font-size: 1.1rem; font-weight: 700; letter-spacing: -0.025em; } .archive-item small { color: var(--muted-dark); font-size: 0.62rem; } .archive-item b { color: #a74b2c; font-weight: 400; } .archive-item-paused { opacity: 0.7; } .stack-section { position: relative; } .stack-section::before { position: absolute; z-index: -1; top: 15%; right: -15%; width: 40rem; height: 40rem; border: 1px solid rgba(143, 212, 208, 0.08); border-radius: 50%; box-shadow: 0 0 0 7rem rgba(143, 212, 208, 0.025), 0 0 0 14rem rgba(143, 212, 208, 0.015); content: ""; } .stack-layout { display: grid; gap: 1rem; grid-template-columns: repeat(12, minmax(0, 1fr)); } .stack-card { min-width: 0; min-height: 18rem; padding: clamp(1.4rem, 3vw, 2.5rem); border: 1px solid var(--line); border-radius: var(--radius-lg); background: linear-gradient(145deg, var(--surface), rgba(17, 25, 31, 0.75)); grid-column: span 5; } .stack-card-main { min-height: 37rem; background: linear-gradient(145deg, rgba(240, 153, 110, 0.18), transparent 60%), var(--surface); grid-row: span 2; grid-column: span 7; } .stack-card-learning { display: grid; min-height: 15rem; background: var(--lime); color: var(--ink); grid-column: span 12; grid-template-columns: 0.25fr 0.9fr 1fr; align-items: end; gap: 2rem; } .stack-label { margin-bottom: 1rem; color: var(--coral); } .stack-card-learning .stack-label { color: #496017; } .stack-card h3 { max-width: 15ch; margin: 0 0 2rem; font-size: clamp(2rem, 4vw, 4rem); letter-spacing: -0.05em; } .stack-card-learning h3, .stack-card-learning p { margin-bottom: 0; } /* GradientText-style animated sweep, ported to plain CSS. Stays in dark tones (ink/rust) so it holds contrast against the lime card. */ .stack-card-learning h3 { position: relative; display: inline-block; overflow: hidden; } .stack-card-learning h3::after { position: absolute; inset: -20% -10%; background: linear-gradient(100deg, transparent 40%, rgba(167, 75, 44, 0.8) 50%, transparent 60%); content: ""; mix-blend-mode: multiply; pointer-events: none; transform: translateX(-140%); animation: learning-gradient 7s ease-in-out infinite; } @media (prefers-reduced-motion: reduce) { .stack-card-learning h3::after { display: none; } } @keyframes learning-gradient { 0%, 15% { transform: translateX(-140%); } 60%, 100% { transform: translateX(140%); } } .stack-card-learning p { color: #435020; font-size: 0.76rem; } .stack-tags { display: flex; flex-wrap: wrap; align-content: flex-start; gap: 0.5rem; } .stack-tags span { padding: 0.55rem 0.72rem; border: 1px solid var(--line); border-radius: 0.4rem; background: rgba(0, 0, 0, 0.08); color: var(--muted); font-size: 0.62rem; } /* Small callout for the tools the person is strongest in — a marker plus an animated gradient sweeping through the text fill (ported from React Bits' GradientText, tuned to the coral/yellow/cyan editorial palette). */ .stack-tags span.tag-strong { position: relative; overflow: visible; border-color: var(--coral); font-weight: 600; background-image: linear-gradient(90deg, var(--coral), var(--yellow), var(--cyan), var(--coral-bright), var(--coral)); background-size: 300% 100%; background-position: 0% 50%; background-clip: text; -webkit-background-clip: text; color: transparent; -webkit-text-fill-color: transparent; animation: tag-gradient 6s ease-in-out infinite alternate; } .stack-tags span.tag-strong::before { margin-right: 0.4em; background: none; color: var(--coral); content: "\2726"; font-size: 0.85em; -webkit-text-fill-color: var(--coral); } .stack-tags span.tag-strong:nth-of-type(3n) { animation-delay: -2s; } .stack-tags span.tag-strong:nth-of-type(3n + 1) { animation-delay: -4s; } @keyframes tag-gradient { 0% { background-position: 0% 50%; } 100% { background-position: 100% 50%; } } @media (prefers-reduced-motion: reduce) { .stack-tags span.tag-strong { animation: none; background-position: 30% 50%; } } .stack-intro { grid-column: 2; max-width: 36rem; margin: 1.2rem 0 0; color: var(--muted); font-size: 0.86rem; } .stack-meter { margin-top: 5rem; } .stack-meter span { display: block; margin-bottom: 0.6rem; color: var(--muted); font-size: 0.61rem; } .stack-meter > i { display: block; height: 0.28rem; overflow: hidden; border-radius: 1rem; background: rgba(255, 255, 255, 0.08); } .stack-meter b { display: block; height: 100%; border-radius: inherit; background: var(--coral); } .contact-section { position: relative; width: min(100%, var(--max-width)); margin: 0 auto; overflow: hidden; padding: clamp(5.5rem, 10vw, 10rem) var(--page-pad); background: var(--coral); box-shadow: 0 0 0 100vmax var(--coral); color: var(--ink); clip-path: inset(0 -100vmax); } .contact-section .section-index { color: #71351f; } .contact-section h2 { position: relative; z-index: 2; max-width: 11ch; margin-bottom: 2.5rem; font-size: clamp(3.3rem, 8.8vw, 9rem); letter-spacing: -0.075em; } .contact-section h2 span { color: var(--paper); } .contact-copy { position: relative; z-index: 2; max-width: 44rem; margin-bottom: 4rem; font-size: clamp(0.85rem, 1.5vw, 1rem); } .contact-orbit { position: absolute; top: 6rem; right: -7rem; width: min(44vw, 41rem); aspect-ratio: 1; border: 1px solid rgba(17, 23, 26, 0.22); border-radius: 50%; } .contact-orbit::before, .contact-orbit::after { position: absolute; border: 1px solid rgba(17, 23, 26, 0.15); border-radius: 50%; content: ""; } .contact-orbit::before { inset: 18%; } .contact-orbit::after { inset: 36%; background: rgba(233, 229, 218, 0.12); } .contact-orbit span { position: absolute; z-index: 2; width: 0.75rem; height: 0.75rem; border-radius: 50%; background: var(--ink); } .contact-orbit span:first-child { top: 10%; left: 19%; } .contact-orbit span:nth-child(2) { right: 14%; bottom: 17%; background: var(--paper); } .contact-orbit span:last-child { top: 48%; left: 48%; width: 1rem; height: 1rem; } .contact-links { position: relative; z-index: 2; display: grid; border-top: 1px solid rgba(17, 23, 26, 0.3); grid-template-columns: repeat(3, 1fr); } .contact-links a, .contact-links button { display: grid; min-height: 8.5rem; padding: 1.3rem 1.3rem 1.3rem 0; border: 0; border-bottom: 1px solid rgba(17, 23, 26, 0.3); background: transparent; color: var(--ink); grid-template-columns: 1fr auto; align-content: center; text-align: left; cursor: pointer; transition: padding 180ms ease, background 180ms ease; } .contact-links > * + * { padding-left: 1.5rem; border-left: 1px solid rgba(17, 23, 26, 0.3); } .contact-links a:hover, .contact-links button:hover { padding-right: 1.2rem; padding-left: 1.2rem; background: var(--ink); color: var(--coral); } .contact-links span, .contact-links small { display: block; } .contact-links span { font-family: var(--display); font-size: clamp(1.4rem, 2.5vw, 2.2rem); font-weight: 700; } .contact-links small { margin-top: 0.35rem; color: currentColor; font-size: 0.58rem; opacity: 0.68; } .contact-links b { font-size: 1.3rem; font-weight: 400; grid-column: 2; grid-row: 1 / 3; align-self: center; } .copy-status { min-height: 1.5rem; margin: 1rem 0 0; font-size: 0.65rem; } .site-footer { display: grid; width: min(100%, var(--max-width)); min-height: 8rem; margin: 0 auto; padding: 2rem var(--page-pad); grid-template-columns: 1fr auto auto auto; align-items: center; gap: 3rem; } .site-footer p { margin-bottom: 0; color: var(--muted); font-size: 0.62rem; } .footer-prompt { font-family: var(--mono); letter-spacing: 0.02em; } .footer-prompt .prompt { color: var(--coral); } .cursor-blink { display: inline-block; margin-left: 0.15em; animation: cursor-blink 1.1s steps(1, end) infinite; } @keyframes cursor-blink { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } } .error-page { display: grid; min-height: 100svh; place-items: center; padding: 2rem; } .error-shell { width: min(100%, 56rem); padding: clamp(2rem, 6vw, 5rem); border: 1px solid var(--line); border-radius: var(--radius-lg); background: var(--bg-soft); box-shadow: 0 2rem 6rem rgba(0, 0, 0, 0.32); } .error-code { margin-bottom: 1.5rem; color: var(--coral); font-size: 0.72rem; letter-spacing: 0.12em; text-transform: uppercase; } .error-shell h1 { max-width: 9ch; margin-bottom: 1.5rem; font-size: clamp(3.2rem, 9vw, 7rem); letter-spacing: -0.07em; } .error-shell p { max-width: 38rem; margin-bottom: 2rem; color: var(--muted); } .js .reveal { opacity: 0; transform: translateY(1.8rem); transition: opacity 700ms ease, transform 700ms cubic-bezier(0.2, 0.75, 0.25, 1); } .js .reveal.is-visible { opacity: 1; transform: translateY(0); } .js .method-card:nth-child(2), .js .project-grid > :nth-child(2), .js .archive-item:nth-child(even) { transition-delay: 80ms; } .js .method-card:nth-child(3) { transition-delay: 160ms; } @keyframes status-pulse { 0% { transform: scale(0.55); opacity: 0.8; } 75%, 100% { transform: scale(1.4); opacity: 0; } } @keyframes packet { from { left: -0.4rem; } to { left: 100%; } } @keyframes marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } } @media (max-width: 74rem) { .hero { min-height: auto; padding-top: 9rem; padding-bottom: 8rem; grid-template-columns: minmax(0, 1fr); } .hero-copy { max-width: 68rem; } .hero h1 { max-width: 12ch; } .terminal-card { width: min(100%, 48rem); margin: 0 auto; transform: rotate(0.7deg); } .section-heading, .section-heading-row { grid-template-columns: 1fr; } .section-heading .section-index { margin-bottom: 1.5rem; } .section-heading-row > p, .archive-section .section-heading-row > .text-link { margin: 1.5rem 0 0; } .project-feature { grid-template-columns: 1fr; } .current-project { grid-template-columns: 1fr; } .current-roadmap { border-top: 1px solid rgba(17, 23, 26, 0.18); border-left: 0; } .project-visual { min-height: 31rem; } .project-visual::after { background: linear-gradient(0deg, rgba(17, 25, 31, 0.75), transparent 28%); } .project-feature-copy h3 { margin-top: 4rem; } .project-row { grid-template-columns: 2rem minmax(11rem, 0.5fr) minmax(15rem, 1fr) 2rem; } .modrinth-item { grid-template-columns: 2rem minmax(9rem, 1fr) minmax(8rem, auto); } .row-tech { display: none; } .stack-card-main { grid-column: span 12; } .stack-card:not(.stack-card-main, .stack-card-learning) { grid-column: span 6; } .stack-card-learning { grid-template-columns: 0.3fr 1fr 1fr; } } @media (max-width: 52rem) { .site-header { top: 0.6rem; width: calc(100% - 1.2rem); } .site-nav > a:not(.nav-pill) { display: none; } .hero { padding-top: 8.5rem; } .hero-signals { display: grid; grid-template-columns: repeat(3, 1fr); } .hero-signals li { padding-right: 0.5rem; } .profile-chip { right: 0.6rem; width: min(23rem, 88%); } .about-layout { grid-template-columns: 1fr; } .about-copy { max-width: none; } .method-grid, .project-grid, .archive-grid, .contact-links { grid-template-columns: 1fr; } .method-card { min-height: auto; padding: 1.5rem 0 2rem; } .method-card + .method-card { border-top: 1px solid var(--line-dark); border-left: 0; } .method-card h3 { margin-top: 2rem; } .project-card { min-height: 27rem; } .current-project h3 { font-size: clamp(3.2rem, 16.5vw, 7rem); } .current-kicker { margin-top: 5rem; } .project-row { padding: 1.5rem 0; grid-template-columns: 2rem 1fr 2rem; } .project-row > p, .row-tech { display: none; } .modrinth-heading { display: grid; align-items: start; } .modrinth-grid { grid-template-columns: 1fr; } .modrinth-item:nth-child(odd), .modrinth-item:nth-child(even) { padding-right: 0; padding-left: 0; border-right: 0; } .modrinth-item:hover { padding-right: 0.8rem; padding-left: 0.8rem; } .modrinth-item { grid-template-columns: 2rem minmax(0, 1fr); } .modrinth-item b { grid-column: 2; justify-self: start; text-align: left; } .archive-item:nth-child(odd), .archive-item:nth-child(even) { padding-right: 0; padding-left: 0; border-right: 0; } .archive-item:hover { padding-right: 0.8rem; padding-left: 0.8rem; } .stack-card, .stack-card-main, .stack-card:not(.stack-card-main, .stack-card-learning), .stack-card-learning { min-height: auto; grid-column: span 12; } .stack-card-main { min-height: 31rem; } .stack-card-learning { display: block; } .stack-card-learning h3 { margin-bottom: 1.5rem; } .contact-orbit { top: 3rem; right: -12rem; width: 26rem; } .contact-links > * + * { padding-left: 0; border-left: 0; } .contact-links a:hover, .contact-links button:hover { padding-left: 1rem; } .site-footer { grid-template-columns: 1fr auto; gap: 1rem; } .site-footer p:first-of-type { display: none; } .footer-prompt { display: none; } } @media (max-width: 36rem) { .hero h1 { font-size: clamp(3rem, 14vw, 4.2rem); } .hero-actions { display: grid; } .button { width: 100%; } .hero-signals { grid-template-columns: 1fr; } .hero-signals li { padding: 0.7rem 0; } .hero-signals li + li { padding-left: 0; border-top: 1px solid var(--line); border-left: 0; } .hero-signals span { display: inline; margin-right: 0.7rem; } .terminal-chrome { grid-template-columns: 1fr auto; } .terminal-chrome > span:nth-child(2) { display: none; } .infra-map { grid-template-columns: 1fr; gap: 0.55rem; } .infra-line { width: 1px; height: 0.8rem; margin: 0 auto; } .infra-line span { display: none; } .service-row { grid-template-columns: repeat(2, 1fr); } .profile-chip { position: relative; right: auto; bottom: auto; width: calc(100% - 2rem); margin: 0 1rem -2rem; transform: rotate(-1deg); } .project-visual { min-height: 19rem; } .project-meta { display: grid; } .project-facts { grid-template-columns: repeat(3, 1fr); } .archive-item { grid-template-columns: 1fr auto; } .archive-item small { grid-column: 1; grid-row: 2; } .archive-item b { grid-column: 2; grid-row: 1 / 3; } } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; scroll-behavior: auto !important; transition-duration: 0.01ms !important; } .signal-track { animation: none; } } @media print { .site-header, .signal-strip, .contact-orbit, .page-grid { display: none; } body, .about-section, .archive-section, .contact-section { background: white; box-shadow: none; color: black; } .hero { min-height: auto; padding-top: 2rem; } }