/* ============================================================ J. Scott Branson — style.css Aesthetic: Warm Broadsheet / Academic Editorial Palette: ivory + deep navy + amber Fonts: Playfair Display · Source Serif 4 · IBM Plex Mono ============================================================ */ @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400;1,700&family=Source+Serif+4:ital,opsz,wght@0,8..60,300;0,8..60,400;1,8..60,300&family=IBM+Plex+Mono:wght@300;400&display=swap'); /* ---------- DESIGN TOKENS ---------- */ :root { --ivory: #FAF8F3; --parchment: #F0EBE0; --parchment-d: #E6DDD0; --navy: #1B2A3B; --navy-mid: #2E4159; --navy-lt: #3E5575; --amber: #C8882A; --amber-lt: #E0A84A; --ink: #1B1B18; --ink-mid: #4A4740; --ink-muted: #7A756E; --rule-dark: #C4BDB2; --rule-light: #E2DDD6; --ff-display: 'Playfair Display', Georgia, serif; --ff-body: 'Source Serif 4', Georgia, serif; --ff-mono: 'IBM Plex Mono', 'Courier New', monospace; --page-max: 1060px; --pad: clamp(1.25rem, 5vw, 3rem); --col-gap: clamp(1.5rem, 4vw, 3.5rem); } /* ---------- RESET & BASE ---------- */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: 17px; background: var(--ivory); color: var(--ink); scroll-behavior: smooth; } body { font-family: var(--ff-body); font-weight: 300; line-height: 1.78; display: flex; flex-direction: column; min-height: 100vh; overflow-x: hidden; } img { display: block; max-width: 100%; height: auto; } a { color: inherit; text-decoration: none; } ul { list-style: none; } /* ---------- SKIP LINK ---------- */ .skip { position: absolute; top: -999px; left: 1rem; background: var(--amber); color: #fff; padding: .4rem .85rem; font-family: var(--ff-mono); font-size: .68rem; letter-spacing: .08em; z-index: 9999; transition: top .15s; } .skip:focus { top: .5rem; } /* ============================================================ MASTHEAD ============================================================ */ .masthead-rule { height: 5px; background: var(--navy); } .masthead { background: var(--ivory); border-bottom: 1px solid var(--rule-dark); position: sticky; top: 0; z-index: 200; transition: box-shadow .3s; } .masthead.scrolled { box-shadow: 0 2px 24px rgba(27,42,59,.09); } .masthead-inner { max-width: var(--page-max); margin: 0 auto; padding: .85rem var(--pad); display: flex; align-items: center; justify-content: space-between; gap: 1rem; } .wordmark { line-height: 1.2; } .wordmark-name { display: block; font-family: var(--ff-display); font-size: 1.2rem; font-weight: 700; color: var(--navy); } .wordmark-sub { display: block; font-family: var(--ff-mono); font-size: .58rem; letter-spacing: .2em; text-transform: uppercase; color: var(--ink-muted); } nav { display: flex; gap: clamp(.65rem, 2.5vw, 2rem); align-items: center; } nav a { font-family: var(--ff-mono); font-size: .63rem; letter-spacing: .14em; text-transform: uppercase; color: var(--ink-mid); padding-bottom: 3px; border-bottom: 1px solid transparent; transition: color .2s, border-color .2s; } nav a:hover, nav a.active { color: var(--navy); border-bottom-color: var(--amber); } /* ============================================================ HERO BAND ============================================================ */ .hero-band { background: var(--parchment); border-bottom: 3px double var(--rule-dark); } .hero-inner { max-width: var(--page-max); margin: 0 auto; padding: clamp(3rem, 8vw, 6rem) var(--pad); display: grid; grid-template-columns: 250px 1fr; gap: var(--col-gap); align-items: center; } /* Portrait */ .portrait-wrap { position: relative; flex-shrink: 0; } .portrait-wrap img { width: 100%; aspect-ratio: 4/5; object-fit: cover; object-position: top center; filter: sepia(6%) contrast(1.05); } .portrait-wrap::before, .portrait-wrap::after { content: ''; position: absolute; width: 26px; height: 26px; border-color: var(--amber); border-style: solid; } .portrait-wrap::before { top: -8px; left: -8px; border-width: 2px 0 0 2px; } .portrait-wrap::after { bottom: -8px; right: -8px; border-width: 0 2px 2px 0; } /* Hero text */ .kicker { font-family: var(--ff-mono); font-size: .63rem; letter-spacing: .22em; text-transform: uppercase; color: var(--amber); margin-bottom: 1.1rem; } .hero-copy h1 { font-family: var(--ff-display); font-size: clamp(2.5rem, 5.5vw, 4.2rem); font-weight: 700; line-height: 1.08; color: var(--navy); margin-bottom: .45rem; } .hero-copy h1 .subname { display: block; font-weight: 400; font-style: italic; font-size: .6em; color: var(--ink-mid); letter-spacing: .02em; } .hero-rule { width: 3rem; height: 2px; background: var(--amber); margin: 1.15rem 0; } .hero-copy p { font-size: 1rem; line-height: 1.88; color: var(--ink-mid); max-width: 52ch; } /* ============================================================ SHARED SECTION SCAFFOLDING ============================================================ */ .page-section { max-width: var(--page-max); margin: 0 auto; padding: clamp(3rem, 7vw, 5.5rem) var(--pad); } .section-head { display: flex; align-items: baseline; gap: 1rem; border-bottom: 2px solid var(--navy); padding-bottom: .65rem; margin-bottom: clamp(2rem, 4vw, 3.2rem); } .section-head h2 { font-family: var(--ff-display); font-size: clamp(1.45rem, 3.5vw, 2.3rem); font-weight: 700; color: var(--navy); line-height: 1.1; } .section-head .tag { font-family: var(--ff-mono); font-size: .58rem; letter-spacing: .18em; text-transform: uppercase; color: var(--amber); margin-left: auto; white-space: nowrap; } /* ============================================================ VENTURE ROWS ============================================================ */ .venture-row { display: grid; grid-template-columns: 210px 1fr; gap: var(--col-gap); padding: 1.75rem 0; border-bottom: 1px solid var(--rule-light); align-items: start; transition: background .18s, padding .18s, margin .18s; border-radius: 2px; } .venture-row:first-of-type { border-top: 1px solid var(--rule-light); } .venture-row:hover { background: var(--parchment-d); padding-left: .8rem; padding-right: .8rem; margin-left: -.8rem; margin-right: -.8rem; } .venture-meta {} .venture-name { font-family: var(--ff-display); font-size: 1.08rem; font-weight: 700; color: var(--navy); line-height: 1.3; } .venture-domain { font-family: var(--ff-mono); font-size: .58rem; letter-spacing: .12em; text-transform: uppercase; color: var(--amber); margin-top: .28rem; } .venture-link { display: inline-block; font-family: var(--ff-mono); font-size: .58rem; letter-spacing: .08em; color: var(--navy-lt); border-bottom: 1px solid var(--rule-dark); margin-top: .45rem; transition: color .2s, border-color .2s; } .venture-link:hover { color: var(--amber); border-bottom-color: var(--amber); } .venture-desc { font-size: .93rem; line-height: 1.85; color: var(--ink-mid); } /* ============================================================ CREDENTIALS BAND (navy) ============================================================ */ .cred-band { background: var(--navy); color: var(--ivory); border-top: 3px double var(--navy-mid); border-bottom: 3px double var(--navy-mid); } .cred-inner { max-width: var(--page-max); margin: 0 auto; padding: clamp(3rem, 7vw, 5.5rem) var(--pad); display: grid; grid-template-columns: 1fr 1fr; gap: var(--col-gap); align-items: start; } .cred-intro-head { font-family: var(--ff-display); font-size: clamp(1.4rem, 3vw, 2.1rem); font-weight: 400; font-style: italic; line-height: 1.35; color: var(--amber-lt); margin-bottom: 1.15rem; } .cred-intro-body { font-size: .91rem; line-height: 1.9; color: rgba(250,248,243,.68); } .cred-entry { padding: .95rem 0; border-bottom: 1px solid rgba(255,255,255,.1); display: grid; grid-template-columns: 1fr auto; gap: 1rem; align-items: start; } .cred-entry:first-child { border-top: 1px solid rgba(255,255,255,.1); } .cred-title { font-size: .91rem; font-weight: 400; color: var(--ivory); line-height: 1.4; } .cred-num { font-family: var(--ff-mono); font-size: .57rem; color: rgba(250,248,243,.38); letter-spacing: .05em; text-align: right; white-space: nowrap; margin-top: .12rem; } /* ============================================================ CONTACT SECTION ============================================================ */ .contact-section { background: var(--parchment); border-top: 1px solid var(--rule-dark); } .contact-inner { max-width: var(--page-max); margin: 0 auto; padding: clamp(3rem, 7vw, 5.5rem) var(--pad); display: grid; grid-template-columns: 1fr auto; gap: var(--col-gap); align-items: center; } .contact-head { font-family: var(--ff-display); font-size: clamp(1.75rem, 4vw, 2.9rem); font-weight: 700; color: var(--navy); line-height: 1.1; } .contact-sub { margin-top: .75rem; font-size: .92rem; color: var(--ink-muted); max-width: 46ch; line-height: 1.78; } /* Contact details grid */ .contact-details { margin-top: 1.6rem; display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 1.2rem 2rem; } .contact-detail-label { font-family: var(--ff-mono); font-size: .58rem; letter-spacing: .18em; text-transform: uppercase; color: var(--amber); margin-bottom: .25rem; } .contact-detail-val { font-size: .9rem; color: var(--ink-mid); line-height: 1.6; } .contact-detail-val a { border-bottom: 1px solid var(--rule-dark); transition: color .2s, border-color .2s; } .contact-detail-val a:hover { color: var(--amber); border-color: var(--amber); } /* ============================================================ FOOTER ============================================================ */ footer { background: var(--navy); padding: 1.4rem var(--pad); display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: .8rem; margin-top: auto; } .foot-copy { font-family: var(--ff-mono); font-size: .58rem; letter-spacing: .07em; color: rgba(250,248,243,.38); } /* ============================================================ REVEAL ANIMATION ============================================================ */ .reveal { opacity: 0; transform: translateY(18px); transition: opacity .6s ease, transform .6s ease; } .reveal.in { opacity: 1; transform: none; } /* ============================================================ RESPONSIVE ============================================================ */ @media (max-width: 700px) { .hero-inner { grid-template-columns: 1fr; } .portrait-wrap { width: 150px; margin-bottom: 1.4rem; } .portrait-wrap::before, .portrait-wrap::after { display: none; } .venture-row { grid-template-columns: 1fr; gap: .5rem; } .cred-inner { grid-template-columns: 1fr; } .contact-inner { grid-template-columns: 1fr; } .section-head .tag { display: none; } }