/* Hallmark · shape: Personal portfolio · genre: modern-minimal · theme: custom · job: hire · idea: "从研究采集到Agent工作流，展示杨天文的产品判断与真实交付" · vibe: "暖纸 森林绿 细衬线 留白 作品证据" · hero: editorial title and capability index · signature: two actual projects, independent case routes · posture: Restrained · v2.0.0 */
/* Hallmark · pre-emit critique: P4 H5 E4 S5 R5 V4 · weakest: evidence, keep owner-reported data bounded and do not fabricate PaperCash usage metrics */
/* Hallmark · waive 59 · reference portfolio rhythm uses 96px sections and 64px document spacing · The portfolio and resume chooser preserve the reference's compact reading rhythm instead of adding landing-page gaps around navigation. */
/* Hallmark · waive 77 · resume page is a document chooser with two genuine actions · The resume options are a compact PDF access hub, not a thin marketing section requiring decorative imagery. */
/* Hallmark · waive 78 · resume option titles are item titles at 32px, not narrative section heads · The resume chooser separates two compact actions and contact information below its 80px display heading. */
/* Hallmark · dismissed 29 · The masthead uses the reference portfolio's translucent paper surface and remains readable over every case. */
/* Hallmark · answered F24 · The floating reference masthead keeps a single boundary and soft elevation; all project cards use only a border. */
/* Hallmark · dismissed 3 · The tablet capability rail is a three-column linked reading index, not icon feature tiles; mobile uses real project links. */
/* Hallmark · answered F15 · The portfolio hero, paired case cards and technical document layouts share their own stable grids across routes. */
/* Hallmark · answered F4 · Legacy button hooks retain equivalent forest primary styling while new portfolio links use the shared folio-button component. */
@font-face { font-family: "Portfolio Serif"; src: url("assets/fonts/portfolio-serif-500.ttf") format("truetype"); font-weight: 500; font-style: normal; font-display: swap; }
@font-face { font-family: "Portfolio Serif"; src: url("assets/fonts/portfolio-serif-600.ttf") format("truetype"); font-weight: 600; font-style: normal; font-display: swap; }
html { scroll-behavior: smooth; scroll-padding-top: 130px; }
body { font-size: var(--text-md); }
a { text-decoration: none; }
button { cursor: pointer; }
button:disabled { cursor: not-allowed; opacity: .55; }
svg { fill: none; stroke: currentColor; stroke-width: 1.5; }
.masthead { position: fixed; top: var(--space-md); left: 50%; transform: translateX(-50%); z-index: var(--z-sticky-nav); display: flex; align-items: center; justify-content: space-between; gap: var(--space-lg); width: min(1500px,calc(100% - 40px)); min-height: 80px; padding: var(--space-sm) var(--space-lg); border: var(--rule-hair) solid var(--color-rule); border-radius: 25px 25px 34px 25px; background: var(--color-nav-glass); backdrop-filter: blur(16px); box-shadow: var(--shadow-floating); }
.wordmark { display: flex; align-items: center; gap: var(--space-lg); flex-shrink: 0; }
.signature { font-family: var(--font-display); font-size: 1.7rem; font-weight: 600; letter-spacing: -.065em; color: var(--color-accent); }
.identity { display: grid; gap: var(--space-2xs); }
.identity strong { font-family: var(--font-display); font-size: 1.125rem; font-weight: 500; }
.identity > span { font-size: .6875rem; color: var(--color-muted); }
.mainnav { display: flex; align-items: center; gap: var(--space-lg); }
.mainnav > a:not(.folio-button) { position: relative; padding-block: var(--space-sm); font-size: var(--text-xs); white-space: nowrap; }
.mainnav > a:not(.folio-button)::after { content: ""; position: absolute; bottom: var(--space-2xs); left: 0; right: 0; height: 1px; background: var(--color-accent); transform: scaleX(0); transform-origin: right; transition: transform var(--dur-short) var(--ease-portfolio); }
.mainnav > a:hover::after,.mainnav > a[aria-current]::after { transform: scaleX(1); transform-origin: left; }
.folio-button { display: inline-flex; align-items: center; justify-content: center; gap: var(--space-sm); min-height: 48px; padding: var(--space-sm) var(--space-lg); background: var(--color-accent); color: var(--color-accent-ink); border: var(--rule-hair) solid var(--color-accent); border-radius: 24px 24px 24px 0; font-size: var(--text-xs); font-weight: 500; white-space: nowrap; transition: transform var(--dur-hover) var(--ease-portfolio),background var(--dur-hover) var(--ease-portfolio),color var(--dur-hover) var(--ease-portfolio),border-color var(--dur-hover) var(--ease-portfolio); }
.folio-button svg,.link-arrow { width: 20px; height: 20px; flex-shrink: 0; transition: transform var(--dur-hover) var(--ease-portfolio); }
.folio-button:hover { transform: translateY(-2px); background: var(--color-accent-hover); }
.folio-button:hover svg { transform: translateX(3px); }
.folio-button:active { transform: translateY(0); }
.folio-button.secondary { border-radius: var(--radius-pill); border-color: var(--color-rule); color: var(--color-ink); background: var(--color-transparent); }
.folio-button.secondary:hover { background: var(--color-sage); border-color: var(--color-sage-strong); }
.mobile-resume,.menu-toggle { display: none; }
.portfolio-home .folio-intro { display: grid; grid-template-columns: minmax(0,1.17fr) minmax(0,.83fr); gap: clamp(48px,6vw,104px); padding-top: 164px; padding-bottom: var(--space-3xl); align-items: center; }
.folio-intro h1 { font-size: var(--text-display); line-height: 1.13; font-weight: 500; letter-spacing: -.045em; max-width: 14ch; }
.folio-intro h1 span { display: block; }
.folio-intro .indent { margin-left: 32px; }
.intro-lead { margin: var(--space-xl) 0 0 32px; max-width: 33em; font-size: var(--text-md); line-height: 1.9; color: var(--color-muted); }
.folio-actions { display: flex; flex-wrap: wrap; gap: var(--space-sm); margin-top: var(--space-xl); }
.intro-copy .folio-actions,.intro-links { margin-left: 32px; }
.intro-links { display: flex; flex-wrap: wrap; gap: var(--space-lg); margin-top: var(--space-lg); color: var(--color-muted); font-size: var(--text-xs); }
.intro-links a:hover { color: var(--color-accent); text-decoration: underline; text-underline-offset: 5px; }
.capability-rail { align-self: center; min-width: 0; padding-top: var(--space-lg); }
.capability-row { display: grid; grid-template-columns: 24px minmax(0,1fr) 20px; gap: var(--space-md); border-top: var(--rule-hair) solid var(--color-rule); padding-block: var(--space-lg); transition: transform var(--dur-hover) var(--ease-portfolio); }
.capability-row > span { color: var(--color-sage-strong); font-size: var(--text-xs); padding-top: var(--space-2xs); }
.capability-row h2 { font-size: var(--text-title); font-weight: 500; line-height: 1.3; }
.capability-row p { margin-top: var(--space-sm); font-size: var(--text-sm); line-height: 1.8; color: var(--color-muted); }
.capability-row small { display: block; margin-top: var(--space-sm); color: var(--color-muted); font-size: var(--text-xs); }
.capability-row .link-arrow { align-self: center; }
.capability-row:hover { transform: translateX(5px); }
.capability-row:hover .link-arrow { transform: translate(2px,2px); }
.intro-evidence { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); margin: 0; border-block: var(--rule-hair) solid var(--color-rule); padding-block: var(--space-lg); }
.intro-evidence > div + div { border-left: var(--rule-hair) solid var(--color-rule); padding-left: var(--space-lg); }
.intro-evidence dt { font-family: var(--font-display); font-size: 2rem; font-weight: 500; font-variant-numeric: tabular-nums; }
.intro-evidence dd { margin: var(--space-xs) 0 0; font-size: var(--text-xs); color: var(--color-muted); }
.folio-section { margin-top: var(--space-3xl); scroll-margin-top: 130px; }
.folio-heading { display: grid; grid-template-columns: minmax(0,1.2fr) minmax(0,.8fr); align-items: end; gap: var(--gap-columns); margin-bottom: var(--space-xl); }
.folio-heading h2 { font-size: clamp(2.375rem,4vw,3.625rem); font-weight: 500; letter-spacing: -.035em; line-height: 1.18; max-width: 18ch; }
.folio-heading > p { color: var(--color-muted); font-size: var(--text-md); line-height: 1.9; max-width: 36em; }
.flagship-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: var(--space-lg); }
.work-card { display: flex; flex-direction: column; min-width: 0; overflow: clip; background: var(--color-paper-3); border: var(--rule-hair) solid var(--color-rule); border-radius: 24px 34px 24px 24px; transition: border-color 280ms var(--ease-portfolio); }
.work-card:hover { border-color: var(--color-sage-strong); }
.work-cover { display: block; overflow: clip; aspect-ratio: 16/10; background: var(--color-sage); }
.work-cover > div { width: 100%; height: 100%; transition: transform var(--dur-image) var(--ease-portfolio); }
.work-card:hover .work-cover > div { transform: scale(1.025); }
.traffic-artifact { display: flex; flex-direction: column; justify-content: center; gap: var(--space-md); padding: var(--space-lg); }
.traffic-artifact img { border-radius: var(--radius-image); width: 100%; height: auto; }
.traffic-artifact span { font-size: var(--text-xs); color: var(--color-accent); }
.paper-artifact { display: flex; flex-direction: column; justify-content: center; padding: var(--space-xl); background: var(--color-sand); color: var(--color-ink); }
.paper-artifact-title { display: flex; align-items: baseline; justify-content: space-between; gap: var(--space-md); }
.paper-artifact-title strong { font-family: var(--font-display); font-size: clamp(1.8rem,2.6vw,2.8rem); font-weight: 500; }
.paper-artifact-title span { font-size: var(--text-xs); color: var(--color-muted); }
.paper-artifact ol { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: var(--space-md); list-style: none; padding: 0; margin: var(--space-xl) 0 var(--space-lg); }
.paper-artifact li { display: grid; gap: var(--space-sm); border-top: var(--rule-hair) solid var(--color-sage-strong); padding-top: var(--space-md); }
.paper-artifact li span { color: var(--color-muted); font-size: var(--text-xs); }
.paper-artifact li strong { font-weight: 500; font-size: var(--text-md); }
.paper-artifact li small,.paper-artifact > p { font-size: var(--text-xs); color: var(--color-muted); }
.work-body { display: flex; flex: 1; flex-direction: column; padding: var(--space-lg); }
.work-category { display: flex; justify-content: space-between; gap: var(--space-md); font-size: var(--text-xs); color: var(--color-accent); }
.work-body h3 { font-size: clamp(1.625rem,2.3vw,2rem); line-height: 1.3; font-weight: 500; margin-top: var(--space-lg); }
.work-summary { color: var(--color-muted); margin-top: var(--space-md); font-size: var(--text-sm); line-height: 1.85; }
.work-role { border-block: var(--rule-hair) solid var(--color-rule); margin-block: var(--space-lg); padding-block: var(--space-md); }
.work-role dt { font-size: var(--text-xs); color: var(--color-muted); }
.work-role dd { font-size: var(--text-sm); margin: var(--space-xs) 0 0; }
.work-proof { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: var(--space-lg); margin-bottom: var(--space-lg); }
.work-proof strong { display: block; font-family: var(--font-display); font-size: var(--text-title); font-weight: 500; font-variant-numeric: tabular-nums; }
.work-proof span { display: block; color: var(--color-muted); font-size: var(--text-xs); margin-top: var(--space-xs); line-height: 1.6; }
.editorial-link { display: inline-flex; align-items: center; gap: var(--space-sm); width: fit-content; position: relative; margin-top: auto; font-size: var(--text-sm); padding-bottom: var(--space-xs); color: var(--color-accent); }
.editorial-link::after { content: ""; position: absolute; height: 1px; bottom: 0; left: 0; right: 0; background: var(--color-accent); transform: scaleX(0); transform-origin: right; transition: transform var(--dur-short) var(--ease-portfolio); }
.editorial-link:hover::after { transform: scaleX(1); transform-origin: left; }
.editorial-link:hover svg { transform: translateX(3px); }
.folio-well { padding: var(--space-2xl); border-radius: 44px 24px 44px 24px; background: var(--color-sage); }
.folio-well.dark { background: var(--color-accent); color: var(--color-ink-on-dark); }
.folio-well.dark .folio-heading p { color: var(--color-forest-soft); }
.system-layers { display: grid; grid-template-columns: minmax(0,.9fr) minmax(0,1.1fr); gap: var(--space-2xl); }
.system-list { margin: 0; }
.system-list > div { display: grid; grid-template-columns: 100px minmax(0,1fr); gap: var(--space-lg); padding-block: var(--space-lg); border-top: var(--rule-hair) solid var(--color-dark-rule); }
.system-list dt { color: var(--color-forest-soft); font-size: var(--text-sm); }
.system-list dd { margin: 0; font-size: var(--text-md); line-height: 1.7; }
.system-projects { display: flex; flex-direction: column; justify-content: center; }
.system-projects a { display: flex; align-items: center; justify-content: space-between; gap: var(--space-md); padding-block: var(--space-lg); border-top: var(--rule-hair) solid var(--color-dark-rule); }
.system-projects a:last-child { border-bottom: var(--rule-hair) solid var(--color-dark-rule); }
.system-projects a strong { font-family: var(--font-display); font-size: var(--text-title); font-weight: 500; }
.system-projects a:hover .link-arrow { transform: translateX(4px); }
.method-grid { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: var(--space-2xl); }
.method-principles { margin: 0; padding: 0; list-style: none; }
.method-principles li { border-top: var(--rule-hair) solid var(--color-rule); padding-block: var(--space-lg); }
.method-principles strong { display: block; font-family: var(--font-display); font-weight: 500; font-size: var(--text-title); }
.method-principles p { margin-top: var(--space-sm); font-size: var(--text-sm); color: var(--color-muted); line-height: 1.85; }
.method-visual { margin: 0; display: flex; flex-direction: column; justify-content: center; background: var(--color-sand-2); padding: var(--space-xl); border-radius: var(--radius-card); }
.method-visual ol { list-style: none; padding: 0; margin: 0; }
.method-visual li { display: grid; grid-template-columns: 36px minmax(0,1fr); gap: var(--space-md); align-items: baseline; border-bottom: var(--rule-hair) solid var(--color-rule); padding-block: var(--space-lg); }
.method-visual li span { font-size: var(--text-xs); color: var(--color-muted); }
.method-visual strong { font-family: var(--font-display); font-size: var(--text-title); font-weight: 500; }
.method-visual figcaption { margin-top: var(--space-lg); font-size: var(--text-sm); color: var(--color-muted); }
.filter-row { display: flex; gap: var(--space-xs); margin-top: var(--space-xl); margin-bottom: var(--space-lg); flex-wrap: wrap; }
.filter-button { border: var(--rule-hair) solid var(--color-rule); color: var(--color-ink); background: var(--color-transparent); border-radius: var(--radius-pill); padding: var(--space-sm) var(--space-md); font-size: var(--text-xs); min-height: 44px; transition: background var(--dur-hover) var(--ease-portfolio),color var(--dur-hover) var(--ease-portfolio),border-color var(--dur-hover) var(--ease-portfolio); }
.filter-button:hover,.filter-button[aria-selected=true] { background: var(--color-accent); color: var(--color-accent-ink); border-color: var(--color-accent); }
.library-summary { display: flex; align-items: baseline; gap: var(--space-md); font-size: var(--text-xs); color: var(--color-muted); margin-bottom: var(--space-lg); }
.library-summary strong { color: var(--color-ink); font-weight: 500; }
.library-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: var(--space-lg); }
.library-item { display: grid; grid-template-columns: 24px minmax(0,1fr) 20px; gap: var(--space-md); align-items: center; padding-block: var(--space-lg); border-top: var(--rule-hair) solid var(--color-rule); transition: transform var(--dur-hover) var(--ease-portfolio); }
.library-item:last-child:nth-child(odd) { grid-column: 1/-1; }
.library-item > span { font-size: var(--text-xs); color: var(--color-muted); }
.library-item small { font-size: var(--text-xs); color: var(--color-muted); }
.library-item h3 { font-size: var(--text-title); font-weight: 500; margin-top: var(--space-sm); }
.library-item p { color: var(--color-muted); font-size: var(--text-sm); line-height: 1.8; margin-top: var(--space-sm); }
.library-item:hover { transform: translateY(-3px); }
.library-item:hover svg { transform: translateX(3px); }
.mobile-library-toggle { display: none; }
.experience-well { background: var(--color-sand); padding: var(--space-2xl); border-radius: 44px 24px 44px 24px; }
.timeline { display: grid; grid-template-columns: minmax(0,1fr); }
.timeline article { display: grid; grid-template-columns: minmax(0,.35fr) minmax(0,1fr); gap: var(--space-xl); padding-block: var(--space-xl); border-top: var(--rule-hair) solid var(--color-rule); }
.timeline time { font-size: var(--text-sm); color: var(--color-muted); font-variant-numeric: tabular-nums; }
.timeline h3 { font-size: var(--text-title); font-weight: 500; line-height: 1.4; }
.timeline p { color: var(--color-muted); font-size: var(--text-sm); line-height: 1.9; margin-top: var(--space-md); }
.contact-layout { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: var(--space-2xl); padding-bottom: var(--space-2xl); }
.contact-layout h2 { font-size: clamp(2.375rem,3.6vw,3.625rem); font-weight: 500; line-height: 1.2; }
.contact-layout p { color: var(--color-muted); line-height: 1.85; margin-top: var(--space-lg); }
.contact-actions { display: grid; }
.contact-actions a { display: grid; grid-template-columns: 70px minmax(0,1fr) 20px; gap: var(--space-lg); padding-block: var(--space-lg); align-items: center; border-top: var(--rule-hair) solid var(--color-rule); }
.contact-actions a > span { color: var(--color-muted); font-size: var(--text-xs); }
.contact-actions strong { font-size: var(--text-md); font-weight: 500; overflow-wrap: anywhere; }
.contact-actions a:hover svg { transform: translateX(3px); }
.folio-footer { display: flex; justify-content: space-between; gap: var(--space-lg); border-top: var(--rule-hair) solid var(--color-rule); padding-block: var(--space-xl); margin-top: var(--space-2xl); font-size: var(--text-xs); color: var(--color-muted); }
.folio-footer div { display: flex; flex-wrap: wrap; gap: var(--space-lg); }
.folio-footer a:hover { color: var(--color-accent); text-decoration: underline; }
.case-page,.doc-page,.flows-page,.resume-page,.practice-page,.traffic-page { padding-top: 112px; }
.case-hero h1,.page-hero h1 { font-size: clamp(3rem,5.6vw,5rem); line-height: 1.15; font-weight: 500; letter-spacing: -.035em; }
.case-section h2,.section-heading h2,.doc-content h2 { font-weight: 500; }
.case-summary { background: var(--color-paper-3); }
.read-progress { display: none; }
.resume-options { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: var(--space-lg); margin-bottom: var(--space-2xl); }
.resume-option { padding: var(--space-xl); background: var(--color-paper-3); border: var(--rule-hair) solid var(--color-rule); border-radius: 24px 34px 24px 24px; }
.resume-option h2 { font-size: 2rem; font-weight: 500; }
.resume-option p { margin-top: var(--space-lg); color: var(--color-muted); line-height: 1.9; }
.resume-option .folio-actions { margin-top: var(--space-lg); }
.resume-preview object { height: 1000px; }
.project-endnav { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: var(--space-xl); margin-block: var(--space-2xl); }
.project-endnav a { border-top: var(--rule-hair) solid var(--color-rule); padding-top: var(--space-lg); }
.project-endnav span { display: block; font-size: var(--text-xs); color: var(--color-muted); }
.project-endnav strong { display: block; margin-top: var(--space-sm); font-family: var(--font-display); font-size: var(--text-title); font-weight: 500; }
.project-endnav a:hover strong { text-decoration: underline; text-underline-offset: 6px; }
.practice-body { padding-block: var(--space-2xl); }
.practice-body .folio-heading { margin-top: var(--space-xl); }
.practice-note { max-width: 58em; font-size: var(--text-md); color: var(--color-muted); line-height: 1.9; }
.artifact-large { min-height: 420px; border-radius: var(--radius-card); overflow: clip; }
.practice-body .overview-grid { margin-block: var(--space-xl); }
.image-dialog { max-width: min(1440px,96vw); }
.image-dialog-actions { display: flex; align-items: center; justify-content: center; gap: var(--space-lg); padding: var(--space-md); }
.image-dialog-actions button { border: var(--rule-hair) solid var(--color-rule); background: var(--color-paper); color: var(--color-ink); padding: var(--space-sm) var(--space-lg); border-radius: var(--radius-pill); min-height: 44px; }
.image-dialog-actions span { font-size: var(--text-sm); font-variant-numeric: tabular-nums; }
@keyframes portfolio-arrive { from { opacity: .35; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } }
.intro-copy,.capability-rail { animation: portfolio-arrive var(--dur-arrive) var(--ease-portfolio) both; }
.capability-rail { animation-delay: 80ms; }
.js .folio-reveal { opacity: 0; transform: translateY(18px); transition: opacity var(--dur-arrive) var(--ease-portfolio),transform var(--dur-arrive) var(--ease-portfolio); }
.js .folio-reveal.is-visible { opacity: 1; transform: none; }
@media (max-width: 75rem) { .mainnav { gap: var(--space-md); } .signature { font-size: 1.4rem; } .wordmark { gap: var(--space-md); } .folio-intro { gap: var(--space-xl); } .portfolio-home .folio-intro { grid-template-columns: minmax(0,1.1fr) minmax(0,.9fr); } .folio-intro h1 { font-size: clamp(3rem,5.7vw,4.5rem); } }
@media (max-width: 60rem) { .masthead { min-height: 68px; padding: var(--space-sm) var(--space-md); } .mainnav { display: none; position: absolute; top: calc(100% + 8px); left: 0; right: 0; padding: var(--space-md); background: var(--color-paper-3); border: var(--rule-hair) solid var(--color-rule); border-radius: var(--radius-card); box-shadow: var(--shadow-floating); } .mainnav.is-open { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: var(--space-xs); animation: portfolio-arrive var(--dur-short) var(--ease-portfolio) both; } .mainnav > a:not(.folio-button) { min-height: 44px; padding: var(--space-sm); } .mainnav .folio-button { display: none; } .mobile-resume { display: block; margin-left: auto; font-size: var(--text-xs); padding: var(--space-sm); min-height: 44px; } .menu-toggle { display: grid; align-content: center; justify-content: center; gap: var(--space-xs); border: 0; width: 44px; height: 44px; border-radius: var(--radius-pill); background: var(--color-paper-2); color: var(--color-ink); flex-shrink: 0; } .menu-toggle span { display: block; width: 20px; height: 1px; background: var(--color-ink); transition: transform var(--dur-hover) var(--ease-portfolio); } .menu-toggle[aria-expanded=true] span:first-child { transform: translateY(4.5px) rotate(45deg); } .menu-toggle[aria-expanded=true] span:last-child { transform: translateY(-4.5px) rotate(-45deg); } .portfolio-home .folio-intro { grid-template-columns: minmax(0,1fr); gap: var(--space-xl); padding-top: 136px; padding-bottom: var(--space-2xl); } .folio-intro h1 { font-size: clamp(3.5rem,8vw,4.5rem); } .intro-lead,.intro-copy .folio-actions,.intro-links { margin-left: 0; } .folio-intro .indent { margin-left: 0; } .capability-rail { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: var(--space-lg); padding-top: 0; } .capability-row { grid-template-columns: minmax(0,1fr); gap: var(--space-sm); } .capability-row .link-arrow { display: none; } .capability-row h2 { font-size: 1.25rem; } .capability-row small { display: none; } .intro-evidence { grid-column: 1/-1; } .folio-heading { gap: var(--space-xl); } .folio-well,.experience-well { padding: var(--space-xl); } .system-layers,.method-grid { gap: var(--space-xl); } .work-cover { aspect-ratio: 1.45; } .paper-artifact { padding: var(--space-lg); } .paper-artifact-title { display: grid; gap: var(--space-xs); } .paper-artifact ol { margin-top: var(--space-lg); gap: var(--space-xs); } .paper-artifact li strong { font-size: var(--text-sm); } .folio-section { margin-top: var(--space-2xl); } }
@media (max-width: 40rem) { :root { --gutter: 18px; --gap-columns: 18px; } html { scroll-padding-top: 96px; } .masthead { top: var(--space-xs); width: calc(100% - 16px); gap: var(--space-xs); border-radius: 20px 20px 28px 20px; padding: var(--space-xs) var(--space-sm); } .wordmark { gap: var(--space-sm); } .signature { font-size: 1.25rem; } .identity strong { font-size: var(--text-md); } .identity > span { display: none; } .mobile-resume { font-size: .75rem; padding-inline: var(--space-xs); } .portfolio-home .folio-intro { padding-top: 120px; padding-bottom: var(--space-xl); } .folio-intro h1 { font-size: clamp(2.375rem,10.7vw,2.6875rem); line-height: 1.16; letter-spacing: -.04em; } .intro-lead { margin-top: var(--space-lg); font-size: var(--text-sm); } .folio-actions { margin-top: var(--space-lg); gap: var(--space-sm); } .folio-button { padding: var(--space-sm) var(--space-md); } .intro-links { gap: var(--space-lg); margin-top: var(--space-lg); } .capability-rail { display: block; } .capability-row { display: none; } .intro-evidence { padding-block: var(--space-lg); } .intro-evidence dt { font-size: 1.75rem; } .folio-section { scroll-margin-top: 106px; } .folio-heading { grid-template-columns: minmax(0,1fr); gap: var(--space-lg); margin-bottom: var(--space-lg); } .folio-heading h2 { font-size: clamp(2rem,8.5vw,2.4375rem); line-height: 1.18; } .folio-heading > p { font-size: var(--text-sm); } .flagship-grid,.system-layers,.method-grid,.library-grid,.contact-layout,.resume-options { grid-template-columns: minmax(0,1fr); } .work-cover { aspect-ratio: 16/10; } .work-body { padding: var(--space-lg); } .work-body h3 { font-size: 1.625rem; } .paper-artifact-title { display: flex; } .paper-artifact-title strong { font-size: 1.75rem; } .paper-artifact ol { margin-top: var(--space-lg); } .paper-artifact li { gap: var(--space-xs); } .paper-artifact li small { font-size: .6875rem; } .work-proof { gap: var(--space-md); } .folio-well,.experience-well { padding: var(--space-lg); border-radius: 28px 20px 28px 20px; } .system-list > div { grid-template-columns: 64px minmax(0,1fr); gap: var(--space-md); } .system-projects a strong { font-size: 1.25rem; } .method-visual { padding: var(--space-lg); } .filter-row { flex-wrap: nowrap; overflow-x: auto; padding-bottom: var(--space-xs); margin-top: var(--space-lg); } .filter-button { flex-shrink: 0; } .library-summary { flex-wrap: wrap; gap: var(--space-xs) var(--space-md); } .library-summary > span:last-child { flex-basis: 100%; } .mobile-library-toggle { display: inline-flex; align-items: center; gap: var(--space-sm); padding: var(--space-sm) 0; color: var(--color-accent); background: var(--color-transparent); border: 0; min-height: 44px; font-size: var(--text-sm); margin-bottom: var(--space-sm); } .js .library-grid:not(.is-expanded) [data-main-project] { display: none; } .library-item:last-child:nth-child(odd) { grid-column: auto; } .library-item h3 { font-size: 1.25rem; } .timeline article { grid-template-columns: minmax(0,1fr); gap: var(--space-md); padding-block: var(--space-lg); } .timeline h3 { font-size: 1.25rem; } .timeline p { font-size: var(--text-sm); } .contact-layout { gap: var(--space-xl); padding-bottom: 0; } .contact-layout h2 { font-size: 2.125rem; } .contact-actions a { grid-template-columns: 48px minmax(0,1fr) 20px; gap: var(--space-md); } .contact-actions strong { font-size: var(--text-sm); } .folio-footer { flex-direction: column; margin-top: var(--space-xl); } .folio-footer div { gap: var(--space-lg); } .case-page,.doc-page,.flows-page,.resume-page,.practice-page,.traffic-page { padding-top: 100px; } .case-hero h1,.page-hero h1 { font-size: 2.65rem; } .resume-option { padding: var(--space-lg); } .resume-option h2 { font-size: 1.625rem; } .resume-preview object { height: 660px; } .project-endnav { grid-template-columns: minmax(0,1fr); gap: var(--space-xl); } .artifact-large { min-height: 300px; } .practice-body { padding-block: var(--space-xl); } .image-dialog-actions { gap: var(--space-sm); } .image-dialog-actions button { padding-inline: var(--space-md); } }
@media(prefers-reduced-motion:reduce) { html { scroll-behavior: auto; } *,*::before,*::after { animation: none !important; transition: none !important; } .js .folio-reveal { opacity: 1; transform: none; } }
.mobile-project-paths { display: none; }
.viewer-open { overflow-y: hidden; }
@media (max-width:40rem) { .mobile-project-paths { display: grid; } .mobile-project-paths a { display: flex; align-items: center; justify-content: space-between; gap: var(--space-md); border-top: var(--rule-hair) solid var(--color-rule); padding-block: var(--space-md); font-size: var(--text-sm); } .mobile-project-paths a span { color: var(--color-accent); } }

@media(min-width:961px) { .intro-copy { padding-top: var(--space-2xl); } }
.practice-page .page-hero { padding-bottom: var(--space-lg); }
.practice-page .case-subnav + .case-section { padding-top: var(--space-xl); }
@media(min-width:961px) { .intro-copy { padding-top: var(--space-3xl); } .intro-links { margin-top: var(--space-xl); } }

.evidence-summary { border-top: var(--rule-hair) solid var(--color-rule); margin-top: var(--space-md); padding-top: var(--space-md); color: var(--color-muted); line-height: 1.8; }
.evidence-summary summary { cursor: pointer; color: var(--color-accent); font-weight: 500; min-height: 44px; padding-block: var(--space-sm); }
.evidence-summary p { font-size: var(--text-sm); margin-block: var(--space-sm); }
.skip-link { position: fixed; top: 0; left: var(--space-md); transform: translateY(-140%); }
.skip-link:focus-visible { transform: translateY(var(--space-md)); }

/* PRD diagrams: readable inline, full-resolution on demand. */
.doc-content .prd-figure { margin: 32px 0 14px; }
.prd-diagram-zoom { display:block; width:100%; padding:0; overflow:hidden; border:1px solid var(--color-rule); border-radius:12px; background:var(--color-paper); cursor:zoom-in; }
.prd-diagram-zoom img { display:block; width:100%; height:auto; }
.prd-diagram-zoom:focus-visible { outline:3px solid var(--color-accent); outline-offset:4px; }
.prd-figure figcaption { margin-top:10px; font-size:13px; color:var(--color-ink-2); }
@media print { .prd-figure { break-inside:avoid; } .prd-figure figcaption { color:#202824; } }
