@import url('https://fonts.googleapis.com/css2?family=Raleway:wght@400;500;600;700;800;900&family=Open+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&display=swap');
:root{
  --navy:#02155a;--navy2:#02155a;--red:#d32f23;--gold:#d32f23;
  --slate:#64748b;--lt:#f8fafc;--border:#e8edf2;--text:#0f172a;
  --green:#16a34a;--amber:#d32f23;
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;}
html{scroll-behavior:smooth;}
body{padding-top:68px;font-family:'Open Sans',sans-serif;color:var(--text);background:#fff;line-height:1.6;-webkit-font-smoothing:antialiased;}

/* PAGE CONTAINMENT.
   Nothing is allowed to widen the document. Anything that runs past the right
   edge gets clipped instead of adding scrollable width, which is what let the
   page drift sideways under a swipe on a phone. Box sizing is border-box
   everywhere (set above), so padding can never push a box past its parent. */
html{overflow-x:hidden;max-width:100%;}
/* clip rather than hidden on the body: a hidden axis forces the other axis to
   auto, which would turn <body> into its own scroll container — and the
   full-page snap scrolling further down is anchored to the document, not to
   the body. clip contains the overflow without creating a scroll box. Older
   engines that do not know clip fall back to hidden on the line before. */
body{overflow-x:hidden;overflow-x:clip;max-width:100%;}
img{max-width:100%;height:auto;}

/* NAV */
nav{position:fixed;top:0;left:0;right:0;z-index:999;background:var(--navy2);height:68px;padding:0 48px;display:flex;align-items:center;justify-content:space-between;}
.nav-brand{display:flex;align-items:center;gap:9px;text-decoration:none;flex-shrink:0;}
.nav-brand .brand-mark{height:20px;width:auto;display:block;}
.nav-brand .brand-word{font-family:'Raleway',sans-serif;font-size:17px;font-weight:900;letter-spacing:1px;line-height:1;color:#fff;white-space:nowrap;}
.nav-links{display:flex;align-items:center;gap:6px;list-style:none;}
.nav-links>li{position:relative;}
.nav-links a{font-size:12.5px;font-weight:600;color:rgba(255,255,255,.65);text-decoration:none;padding:6px 12px;display:block;transition:color .2s;white-space:nowrap;}
.nav-links a:hover{color:#fff;}
.nav-cta{background:var(--red)!important;color:#fff!important;font-weight:700!important;}
.dropdown{position:absolute;top:100%;left:0;background:var(--navy);min-width:200px;padding:8px 0;display:none;z-index:100;border-top:2px solid var(--red);}
.dropdown a{font-size:12px;padding:8px 18px;color:rgba(255,255,255,.7);}
.dropdown a:hover{background:rgba(255,255,255,.05);color:#fff;}
.nav-links>li:hover .dropdown{display:block;}
.has-dropdown>a::after{content:' ▾';font-size:9px;opacity:.6;}

/* HERO */
#hero{min-height:calc(100vh - 68px);background:var(--navy);display:flex;align-items:center;padding:70px 56px 80px;position:relative;overflow:hidden;}
.hero-grid{display:grid;grid-template-columns:1fr 380px;gap:72px;align-items:center;width:100%;max-width:1200px;margin:0 auto;}
.hero-label{font-size:10px;font-weight:700;letter-spacing:4px;text-transform:uppercase;color:var(--gold);margin-bottom:20px;}
.hero-title{font-family:'Raleway',sans-serif;font-size:clamp(48px,5.5vw,78px);font-weight:900;color:#fff;line-height:.96;margin-bottom:28px;}
.hero-title em{color:var(--red);font-style:normal;}
.hero-body{font-size:16px;color:rgba(255,255,255,.65);line-height:1.8;max-width:500px;margin-bottom:40px;}
.hero-btns{display:flex;gap:12px;flex-wrap:wrap;}
.btn-red{background:var(--red);color:#fff;text-decoration:none;padding:13px 28px;font-size:13px;font-weight:700;letter-spacing:.5px;transition:opacity .2s;display:inline-block;}
.btn-red:hover{opacity:.88;}
.btn-ghost{border:1px solid rgba(255,255,255,.25);color:rgba(255,255,255,.75);text-decoration:none;padding:13px 28px;font-size:13px;font-weight:600;transition:border-color .2s,color .2s;display:inline-block;}
.btn-ghost:hover{border-color:rgba(255,255,255,.6);color:#fff;}
.hero-stats{display:flex;flex-direction:column;}
.hero-stat{padding:20px 28px;border-bottom:1px solid rgba(255,255,255,.08);}
.hero-stat:last-child{border-bottom:none;}
.stat-n{font-family:'Raleway',sans-serif;font-size:38px;font-weight:900;color:#fff;line-height:1;}
.stat-n span{color:var(--red);}
.stat-l{font-size:13.5px;font-weight:600;color:rgba(255,255,255,.85);margin-top:3px;line-height:1.4;max-width:170px;}
.hero-divider{position:absolute;bottom:0;left:0;right:0;height:4px;background:linear-gradient(90deg,var(--red) 0%,var(--gold) 100%);}

/* STRIP */
.strip{background:var(--navy2);padding:18px 56px;display:flex;align-items:center;justify-content:center;gap:40px;flex-wrap:wrap;}
.strip-item{font-size:10.5px;font-weight:700;letter-spacing:2.5px;text-transform:uppercase;color:rgba(255,255,255,.4);}
.strip-dot{width:4px;height:4px;background:var(--red);border-radius:50%;flex-shrink:0;}

/* SECTIONS */
.s{padding:88px 56px;}
.s-lt{background:var(--lt);}
.s-navy{background:var(--navy);}
.s-white{background:#fff;}
.s-dark{background:#02155a;}
.s-inner{max-width:1200px;margin:0 auto;}
.label{font-size:10px;font-weight:700;letter-spacing:4px;text-transform:uppercase;color:var(--red);margin-bottom:12px;}
.s-navy .label,.s-dark .label{color:var(--gold);}
.h2{font-family:'Raleway',sans-serif;font-size:clamp(34px,3.5vw,48px);font-weight:900;color:var(--navy);line-height:1.05;margin-bottom:18px;}
.s-navy .h2,.s-dark .h2{color:#fff;}
.h2 em{color:var(--red);font-style:normal;}
.s-lead{font-size:16px;color:var(--slate);line-height:1.85;max-width:640px;}
.s-navy .s-lead,.s-dark .s-lead{color:rgba(255,255,255,.65);}
.accent-line{width:44px;height:3px;background:var(--red);margin:18px 0 28px;}
.s-navy .accent-line,.s-dark .accent-line{background:var(--gold);}

/* PROBLEM */
.problem-split{display:grid;grid-template-columns:1fr 1fr;gap:2px;margin-top:48px;background:var(--border);}
.p-side{background:#fff;padding:44px;}
.p-side:last-child{background:var(--lt);}
.p-side h3{font-family:'Raleway',sans-serif;font-size:19px;font-weight:800;margin-bottom:24px;}
.p-side:first-child h3{color:var(--red);}
.p-side:last-child h3{color:var(--navy);}
.p-list{list-style:none;}
.p-list li{font-size:13.5px;color:var(--slate);padding:10px 0;padding-left:22px;border-bottom:1px solid var(--border);position:relative;line-height:1.5;}
.p-list li:last-child{border-bottom:none;}
.p-list li::before{position:absolute;left:0;top:10px;font-size:14px;font-weight:700;}
.p-side:first-child .p-list li::before{content:'✗';color:var(--red);}
.p-side:last-child .p-list li::before{content:'✓';color:var(--navy);}
.blockq{font-family:'Raleway',sans-serif;font-size:18px;font-weight:600;color:var(--navy);border-left:4px solid var(--red);padding-left:24px;line-height:1.6;margin-top:48px;max-width:620px;}

/* THREE PILLARS */
.pillars-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:2px;margin-top:56px;background:var(--border);}
.pillars-grid.pillars-2{grid-template-columns:repeat(2,1fr);}
.pillar-card{background:#fff;padding:40px;transition:background .2s;position:relative;}
.pillar-card:hover{background:var(--lt);}
.pillar-bar{position:absolute;top:0;left:0;right:0;height:4px;}
.pillar-card:nth-child(1) .pillar-bar{background:var(--navy);}
.pillar-card:nth-child(2) .pillar-bar{background:var(--red);}
.pillar-card:nth-child(3) .pillar-bar{background:var(--gold);}
.pillar-num{font-size:9px;font-weight:700;letter-spacing:3px;text-transform:uppercase;color:var(--slate);margin-bottom:10px;}
.pillar-card h3{font-family:'Raleway',sans-serif;font-size:26px;font-weight:900;color:var(--navy);margin-bottom:4px;}
.pillar-type{font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:var(--red);margin-bottom:16px;}
.pillar-card p{font-size:13.5px;color:var(--slate);line-height:1.8;margin-bottom:18px;}
.pillar-features{list-style:none;border-top:1px solid var(--border);padding-top:16px;}
.pillar-features li{font-size:12.5px;color:var(--slate);padding:6px 0;border-bottom:1px solid var(--border);padding-left:14px;position:relative;}
.pillar-features li::before{content:'→';position:absolute;left:0;color:var(--red);font-size:11px;top:7px;}
.pulse-badge{display:inline-block;background:var(--gold);color:var(--navy2);font-size:9px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;padding:4px 10px;margin-top:14px;border-radius:2px;}

/* PROCESS */
.process-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:0;margin-top:48px;}
.proc{padding:40px 36px;border-right:1px solid rgba(255,255,255,.08);}
.proc:last-child{border-right:none;}
.proc-n{font-family:'Raleway',sans-serif;font-size:60px;font-weight:900;color:rgba(255,255,255,.06);line-height:1;margin-bottom:-14px;}
.proc h3{font-family:'Raleway',sans-serif;font-size:20px;font-weight:800;color:#fff;margin-bottom:10px;}
.proc p{font-size:13px;color:rgba(255,255,255,.55);line-height:1.75;}
.proc-row2{display:grid;grid-template-columns:repeat(3,1fr);gap:0;border-top:1px solid rgba(255,255,255,.08);}

/* ECOSYSTEM MAPS */
#ecosystem{background:var(--navy2);padding:88px 56px;}
.eco-tabs{display:flex;gap:0;margin-bottom:40px;border-bottom:1px solid rgba(255,255,255,.12);}
.eco-tab{padding:12px 28px;font-size:12px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;color:rgba(255,255,255,.45);cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-1px;transition:all .2s;font-family:'Open Sans',sans-serif;}
.eco-tab.active{color:#fff;border-bottom-color:var(--red);}
.eco-tab:hover:not(.active){color:rgba(255,255,255,.75);}
.eco-panel{display:none;}
.eco-panel.active{display:block;}
.map-wrap{position:relative;width:100%;max-width:940px;margin:0 auto;}
.pathway-btns{display:flex;gap:10px;justify-content:center;margin-top:28px;flex-wrap:wrap;}
.pathway-btn{padding:9px 20px;font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;border:1px solid rgba(255,255,255,.2);color:rgba(255,255,255,.55);background:transparent;cursor:pointer;transition:all .2s;font-family:'Open Sans',sans-serif;}
.pathway-btn:hover,.pathway-btn.active{background:var(--red);border-color:var(--red);color:#fff;}
.eco-legend{display:flex;gap:20px;justify-content:center;margin-top:20px;flex-wrap:wrap;}
.legend-item{display:flex;align-items:center;gap:7px;font-size:10.5px;color:rgba(255,255,255,.45);font-weight:600;letter-spacing:1px;text-transform:uppercase;}
.legend-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0;}

/* WA STATE RESOURCES */
#wa-state{background:var(--lt);padding:88px 56px;}
.county-tabs{display:flex;gap:0;margin-bottom:36px;border-bottom:2px solid var(--border);}
.county-tab{padding:10px 24px;font-size:12px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:var(--slate);cursor:pointer;border-bottom:3px solid transparent;margin-bottom:-2px;transition:all .2s;font-family:'Open Sans',sans-serif;}
.county-tab.active{color:var(--navy);border-bottom-color:var(--red);}
.county-panel{display:none;}
.county-panel.active{display:block;}
.resource-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:8px;}
.resource-sector h4{font-family:'Raleway',sans-serif;font-size:14px;font-weight:800;color:var(--navy);margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid var(--red);}
.resource-list{list-style:none;}
.resource-list li{font-size:12px;color:var(--slate);padding:6px 0;border-bottom:1px solid var(--border);line-height:1.4;}
.resource-list li strong{color:var(--navy);display:block;font-size:12.5px;}
.resource-list li span{font-size:11px;color:#94a3b8;}
.coming-soon-banner{background:var(--navy);padding:24px 32px;display:flex;align-items:center;justify-content:space-between;gap:24px;margin-top:32px;}
.coming-soon-banner p{color:rgba(255,255,255,.7);font-size:13px;line-height:1.6;}
.coming-soon-banner .tag{flex-shrink:0;font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:var(--gold);border:1px solid var(--gold);padding:6px 14px;white-space:nowrap;}

/* ROADMAP (client paths) */
#roadmap{background:#fff;padding:88px 56px;}
.roadmap-inner{max-width:1280px;margin:0 auto;}
.client-profiles{display:grid;grid-template-columns:repeat(3,1fr);gap:2px;background:var(--border);margin-bottom:2px;}
.client-card{padding:30px;}
.client-card.connected{background:var(--navy);}
.client-card.disconnected{background:#1e1e2e;}
.client-badge{display:inline-block;font-size:9px;font-weight:700;letter-spacing:2px;text-transform:uppercase;padding:4px 11px;margin-bottom:12px;}
.connected .client-badge{background:var(--green);color:#fff;}
.disconnected .client-badge{background:#444;color:rgba(255,255,255,.7);}
.client-name{font-family:'Raleway',sans-serif;font-size:22px;font-weight:900;color:#fff;margin-bottom:3px;}
.client-role{font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:rgba(255,255,255,.4);margin-bottom:12px;}
.client-desc{font-size:12.5px;color:rgba(255,255,255,.65);line-height:1.7;}
.phase-block{display:grid;grid-template-columns:110px repeat(3,1fr);gap:2px;background:var(--border);margin-bottom:2px;}
.phase-label-col{background:var(--navy2);padding:22px 16px;display:flex;flex-direction:column;justify-content:center;}
.phase-tag{font-size:8.5px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:var(--gold);margin-bottom:5px;}
.phase-title{font-family:'Raleway',sans-serif;font-size:16px;font-weight:800;color:#fff;line-height:1.1;}
.phase-time{font-size:9.5px;color:rgba(255,255,255,.35);margin-top:4px;}
.phase-cell{padding:24px;background:#fff;}
.phase-cell.c1{border-top:3px solid var(--green);}
.phase-cell.c2{border-top:3px solid var(--red);}
.phase-cell.c3{border-top:3px solid #888;background:#fafafa;}
.phase-cell h4{font-family:'Raleway',sans-serif;font-size:13.5px;font-weight:700;color:var(--navy);margin-bottom:7px;}
.phase-cell.c3 h4{color:#555;}
.phase-cell p{font-size:12px;color:var(--slate);line-height:1.7;margin-bottom:7px;}
.phase-cell.c3 p{color:#888;}
.ptags{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px;}
.ptag{font-size:10px;font-weight:600;padding:3px 8px;}
.pg{background:#dcfce7;color:#15803d;}
.pb{background:#dbeafe;color:#02155a;}
.py{background:#fdecea;color:#a3221a;}
.pr{background:#fdecea;color:#a3221a;}
.pgr{background:#f3f4f6;color:#6b7280;}
.outcome-row{display:grid;grid-template-columns:110px repeat(3,1fr);gap:2px;background:var(--border);}
.outcome-label{background:var(--navy2);padding:22px 16px;display:flex;align-items:center;}
.outcome-label span{font-family:'Raleway',sans-serif;font-size:13px;font-weight:800;color:#fff;}
.outcome-cell{padding:26px;}
.outcome-cell.o1{background:#f0fdf4;}
.outcome-cell.o2{background:#fdf2f1;}
.outcome-cell.o3{background:#fafafa;}
.outcome-icon{font-size:26px;margin-bottom:9px;}
.outcome-cell h4{font-family:'Raleway',sans-serif;font-size:15px;font-weight:800;margin-bottom:6px;}
.outcome-cell.o1 h4{color:var(--green);}
.outcome-cell.o2 h4{color:var(--red);}
.outcome-cell.o3 h4{color:#888;}
.outcome-cell p{font-size:12.5px;color:var(--slate);line-height:1.65;}

/* JOIN THE ECOSYSTEM */
#join{background:var(--lt);padding:88px 56px;}
.join-grid{display:grid;grid-template-columns:1fr 1.4fr;gap:72px;align-items:start;margin-top:48px;}
.join-left h3{font-family:'Raleway',sans-serif;font-size:18px;font-weight:800;color:var(--navy);margin-bottom:10px;}
.join-left p{font-size:13.5px;color:var(--slate);line-height:1.8;margin-bottom:16px;}
.join-types{display:flex;flex-direction:column;gap:2px;margin-top:20px;}
.join-type{padding:16px 20px;background:#fff;border-left:3px solid var(--red);}
.join-type:nth-child(2){border-left-color:var(--navy);}
.join-type:nth-child(3){border-left-color:var(--gold);}
.join-type:nth-child(4){border-left-color:var(--slate);}
.join-type h4{font-family:'Raleway',sans-serif;font-size:14px;font-weight:700;color:var(--navy);margin-bottom:4px;}
.join-type p{font-size:12px;color:var(--slate);margin-bottom:0;line-height:1.5;}
.join-form{background:#fff;padding:36px;border-top:4px solid var(--navy);}
.jf-label{display:block;font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:var(--navy);margin-bottom:6px;font-family:'Open Sans',sans-serif;}
.jf-input,.jf-select,.jf-textarea{width:100%;padding:11px 14px;border:1px solid var(--border);font-family:'Open Sans',sans-serif;font-size:13.5px;color:var(--text);outline:none;transition:border-color .2s;margin-bottom:16px;}
.jf-input:focus,.jf-select:focus,.jf-textarea:focus{border-color:var(--navy);}
.jf-select{appearance:none;background:#fff;cursor:pointer;}
.jf-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
.jf-submit{width:100%;padding:14px;background:var(--navy);color:#fff;border:none;font-family:'Open Sans',sans-serif;font-size:13px;font-weight:700;letter-spacing:.5px;cursor:pointer;transition:background .2s;}
.jf-submit:hover{background:var(--red);}

/* SERVE */
.serve-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-top:56px;}
.serve-card{padding:32px 24px;background:#fff;border:1px solid var(--border);border-top:3px solid var(--navy);}
.serve-card:nth-child(2){border-top-color:var(--red);}
.serve-card:nth-child(3){border-top-color:var(--gold);}
.serve-card:nth-child(4){border-top-color:var(--slate);}
.serve-card h3{font-family:'Raleway',sans-serif;font-size:16px;font-weight:800;color:var(--navy);margin-bottom:16px;}
.serve-list{list-style:none;}
.serve-list li{font-size:12.5px;color:var(--slate);padding:5px 0;border-bottom:1px solid var(--border);padding-left:12px;position:relative;line-height:1.4;}
.serve-list li::before{content:'›';position:absolute;left:0;color:var(--red);font-weight:700;}

/* ABOUT */
/* FOUNDER: lighter weights than the rest of the site, and body copy sized to
   match the home page hero copy (16px / 1.8). */
.about-grid{display:grid;grid-template-columns:0.85fr 1.15fr;gap:64px;align-items:start;margin-top:56px;}
.about-left{background:var(--navy);padding:52px;}
.about-left .label{color:var(--gold);}
.founder-photo{display:block;width:100%;max-width:280px;height:auto;border-radius:4px;margin-bottom:30px;}
.about-name{font-family:'Raleway',sans-serif;font-size:40px;font-weight:500;letter-spacing:-.5px;color:#fff;line-height:1.1;margin-bottom:8px;}
.about-title{font-size:10px;font-weight:600;letter-spacing:3px;text-transform:uppercase;color:rgba(255,255,255,.45);margin-bottom:26px;}
.about-p{font-size:15px;color:rgba(255,255,255,.7);line-height:1.85;}
.about-stat-row{display:flex;gap:36px;margin-top:32px;padding-top:24px;border-top:1px solid rgba(255,255,255,.1);}
.about-stat-n{font-family:'Raleway',sans-serif;font-size:38px;font-weight:600;color:var(--red);line-height:1;}
.about-stat-l{font-size:10.5px;color:rgba(255,255,255,.4);margin-top:3px;line-height:1.4;}
.about-right p{font-size:16px;color:var(--slate);line-height:1.85;margin-bottom:20px;}
.about-quote{font-family:'Raleway',sans-serif;font-size:20px;font-weight:500;color:var(--navy);border-left:3px solid var(--red);padding-left:22px;line-height:1.5;margin:28px 0 0;}

/* CONTACT */
#contact{background:var(--navy);padding:88px 56px;}
.contact-inner{max-width:1200px;margin:0 auto;display:grid;grid-template-columns:1fr 1fr;gap:72px;align-items:start;}
.contact-left .label{color:var(--gold);}
.contact-left .h2{color:#fff;}
.contact-left .accent-line{background:var(--gold);}
.contact-left .s-lead{color:rgba(255,255,255,.6);margin-bottom:32px;}
.contact-cards{display:flex;flex-direction:column;gap:2px;}
.contact-card{background:rgba(255,255,255,.05);padding:20px 24px;border-left:3px solid var(--red);}
.contact-card:nth-child(2){border-left-color:var(--gold);}
.contact-card:nth-child(3){border-left-color:rgba(255,255,255,.2);}
.contact-card h4{font-family:'Raleway',sans-serif;font-size:15px;font-weight:700;color:#fff;margin-bottom:4px;}
.contact-card p{font-size:12.5px;color:rgba(255,255,255,.5);line-height:1.6;}
.form-field{margin-bottom:14px;}
.form-field label{display:block;font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:var(--gold);margin-bottom:6px;}
.form-field input,.form-field select,.form-field textarea{width:100%;padding:12px 14px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);color:#fff;font-family:'Open Sans',sans-serif;font-size:13.5px;outline:none;transition:border-color .2s;}
.form-field input:focus,.form-field select:focus,.form-field textarea:focus{border-color:var(--red);}
.form-field select{background:#02155a;appearance:none;cursor:pointer;}
.form-field select option{background:var(--navy);}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
input::placeholder,textarea::placeholder{color:rgba(255,255,255,.25);}
.form-submit{width:100%;padding:14px;background:var(--red);color:#fff;border:none;font-family:'Open Sans',sans-serif;font-size:13.5px;font-weight:700;letter-spacing:.5px;cursor:pointer;transition:opacity .2s;margin-top:4px;}
.form-submit:hover{opacity:.88;}

/* FOOTER */
footer{background:var(--navy2);padding:32px 56px;display:flex;align-items:center;justify-content:space-between;border-top:1px solid rgba(255,255,255,.06);flex-wrap:wrap;gap:16px;}
.foot-brand{display:flex;align-items:center;gap:8px;text-decoration:none;}
.foot-brand .brand-mark{height:17px;width:auto;display:block;}
.foot-brand .brand-word{font-family:'Raleway',sans-serif;font-size:14px;font-weight:900;letter-spacing:1px;line-height:1;color:#fff;white-space:nowrap;}
.foot-links{display:flex;gap:24px;list-style:none;}
.foot-links a{font-size:11.5px;color:rgba(255,255,255,.35);text-decoration:none;transition:color .2s;}
.foot-links a:hover{color:rgba(255,255,255,.7);}
.foot-meta{display:flex;flex-direction:column;align-items:flex-end;gap:5px;}
.foot-mail{font-size:11.5px;font-weight:700;letter-spacing:.3px;color:rgba(255,255,255,.55);text-decoration:none;transition:color .2s;}
.foot-mail:hover{color:var(--gold);}
.foot-copy{font-size:10.5px;color:rgba(255,255,255,.25);}

/* DIRECT EMAIL BLOCKS */
.direct-mail{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;}
.direct-mail .dm-label{font-size:10px;font-weight:700;letter-spacing:2.5px;text-transform:uppercase;color:var(--red);}
.direct-mail a{font-family:'Raleway',sans-serif;font-size:17px;font-weight:800;color:var(--navy);text-decoration:none;border-bottom:2px solid var(--red);padding-bottom:1px;transition:color .2s;}
.direct-mail a:hover{color:var(--red);}
.direct-mail p{font-size:12.5px;color:var(--slate);line-height:1.6;flex-basis:100%;}
.direct-mail.on-dark .dm-label{color:var(--gold);}
.direct-mail.on-dark a{color:#fff;border-bottom-color:var(--gold);}
.direct-mail.on-dark a:hover{color:var(--gold);}
.direct-mail.on-dark p{color:rgba(255,255,255,.5);}
.form-alt{font-size:12px;color:var(--slate);line-height:1.6;margin-top:12px;text-align:center;}
.form-alt a{color:var(--red);font-weight:700;text-decoration:none;}
.form-alt a:hover{text-decoration:underline;}
.form-alt.on-dark{color:rgba(255,255,255,.45);}
.form-alt.on-dark a{color:var(--gold);}

@media(max-width:960px){
  nav{padding:0 20px;}
  .s,#roadmap,#contact,#ecosystem,#join,#wa-state{padding:60px 20px;}
  #hero{padding:40px 20px 60px;}
  .hero-grid,.problem-split,.pillars-grid,.about-grid,.contact-inner,.join-grid{grid-template-columns:1fr;}
  .pillars-grid.pillars-2{grid-template-columns:1fr;}
  .serve-grid,.process-grid,.proc-row2{grid-template-columns:1fr 1fr;}
  .client-profiles,.phase-block,.outcome-row{grid-template-columns:1fr;}
  .phase-label-col,.outcome-label{display:none;}
  .resource-grid{grid-template-columns:1fr 1fr;}
  footer{padding:20px;flex-direction:column;align-items:flex-start;}
  .foot-meta{align-items:flex-start;}
  .form-grid,.jf-grid{grid-template-columns:1fr;}
  .nav-links{gap:2px;}
  .nav-links a{padding:6px 8px;font-size:11.5px;}
}
/* NAV: current page + non-clickable dropdown entries */
.nav-links>li>a.active{color:#fff;}
.nav-links>li>a.active:not(.nav-cta)::before{content:'';position:absolute;left:12px;right:12px;bottom:-2px;height:2px;background:var(--red);}
.nav-links>li>a{position:relative;}
.dropdown span{display:block;font-size:12px;padding:8px 18px;color:rgba(255,255,255,.35);}

/* NAV: responsive.
   Ten top-level links need roughly 1400px of bar. Below that the row tightens
   once, then collapses into a drawer — otherwise the links sit off the right
   edge and the site reads as one unreachable scroll. Rules live at the end of
   the file so they win over the older 960px block above. */
.nav-toggle{display:none;width:42px;height:42px;padding:10px 8px;margin-right:-8px;background:transparent;border:0;cursor:pointer;flex-direction:column;justify-content:space-between;flex-shrink:0;}
.nav-toggle span{display:block;width:100%;height:2px;background:#fff;border-radius:2px;transition:transform .2s ease,opacity .2s ease;}
nav.nav-open .nav-toggle span:nth-child(1){transform:translateY(10px) rotate(45deg);}
nav.nav-open .nav-toggle span:nth-child(2){opacity:0;}
nav.nav-open .nav-toggle span:nth-child(3){transform:translateY(-10px) rotate(-45deg);}

@media(max-width:1400px){
  nav{padding:0 24px;}
  .nav-brand .brand-word{font-size:15px;}
  .nav-links{gap:2px;}
  .nav-links a{font-size:11.5px;padding:6px 7px;}
  .nav-links>li>a.active:not(.nav-cta)::before{left:7px;right:7px;}
}

@media(max-width:1119px){
  .nav-toggle{display:flex;}
  .nav-links{display:none;}
  nav.nav-open .nav-links{display:flex;flex-direction:column;align-items:stretch;gap:0;position:fixed;top:68px;left:0;right:0;bottom:0;background:var(--navy2);padding:4px 0 48px;overflow-y:auto;overscroll-behavior:contain;}
  nav.nav-open .nav-links>li{border-bottom:1px solid rgba(255,255,255,.07);}
  nav.nav-open .nav-links a{font-size:15px;font-weight:600;padding:14px 24px;color:rgba(255,255,255,.78);}
  nav.nav-open .nav-links>li>a.active{color:#fff;}
  nav.nav-open .nav-links>li>a.active:not(.nav-cta)::before{left:0;right:auto;top:0;bottom:0;width:3px;height:auto;}
  nav.nav-open .dropdown{position:static;display:block;min-width:0;background:rgba(0,0,0,.2);border-top:0;padding:2px 0 6px;}
  nav.nav-open .dropdown a,nav.nav-open .dropdown span{font-size:13px;font-weight:500;padding:9px 24px 9px 42px;}
  body.nav-open{overflow:hidden;}
}


/* SITE BANNER / TICKER STRIP.
   The strip used to be a static, centred row of labels. It is now a
   continuously scrolling ticker of links: two identical groups sit side by
   side inside the track and the track slides exactly one group-width, so the
   seam is invisible and the loop never resets visibly.

   The track starts fractionally left of zero so the first item begins hard
   against the left edge, in line with the brand mark, rather than reading as
   centred. The travel distance stays exactly one group-width, so the loop is
   still seamless and the scroll speed is unchanged. */
.strip.marquee{padding:0;display:block;overflow:hidden;position:relative;background:var(--navy2);}
.marquee-track{display:flex;width:max-content;animation:marquee-scroll 38s linear infinite;}
.strip.marquee:hover .marquee-track{animation-play-state:paused;}
.marquee-group{display:flex;align-items:center;gap:34px;padding:20.5px 17px;flex-shrink:0;}
.marquee-item{font-size:12.5px;font-weight:700;letter-spacing:2.5px;text-transform:uppercase;color:#fff;text-decoration:none;white-space:nowrap;transition:color .2s;}
.marquee-item:hover,.marquee-item:focus-visible{color:var(--red);}
.marquee-sep{width:4px;height:4px;background:var(--red);border-radius:50%;flex-shrink:0;}
@keyframes marquee-scroll{from{transform:translateX(-0.4%);}to{transform:translateX(-50.4%);}}
@media(prefers-reduced-motion:reduce){
  .marquee-track{animation:none;flex-wrap:wrap;width:100%;justify-content:center;}
  .marquee-group[aria-hidden="true"]{display:none;}
}

/* ECOSYSTEM MAP NODES.
   Every node is an anchor now. Labels sit in a top layer above the background
   shapes so nothing paints over them, and the whole node turns red on hover so
   it reads as clickable. */
.eco-node{cursor:pointer;}
.eco-node circle,.eco-node text{transition:fill .18s,stroke .18s;}
.eco-node:hover circle,.eco-node:focus-visible circle{stroke:var(--red);stroke-width:2.5;fill:#0a1f6e;}
.eco-node:hover text,.eco-node:focus-visible text{fill:var(--red)!important;}
.eco-node:focus{outline:none;}
.map-wrap svg text{pointer-events:none;}
/* PANNABLE MAP VIEWPORT
   The regional and national maps are drawn larger than the page so their
   labels stay legible. They live in a fixed-height window the visitor drags. */
.map-pan{position:relative;width:100%;max-width:940px;height:620px;margin:0 auto;overflow:hidden;background:#02155a;border:1px solid rgba(255,255,255,.08);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;}
.map-pan.is-dragging{cursor:grabbing;}
.map-pan svg{display:block;-webkit-user-select:none;user-select:none;}
.map-pan svg text{pointer-events:none;}
.map-pan-hint{max-width:940px;margin:10px auto 0;font-size:11px;letter-spacing:1.5px;text-transform:uppercase;color:rgba(255,255,255,.4);text-align:center;}
@media(max-width:700px){.map-pan{height:440px;}}
.eco-node text{paint-order:stroke fill;}
.eco-note{font-size:11px;color:rgba(255,255,255,.45);text-align:center;margin-top:14px;letter-spacing:.3px;}

/* ECOSYSTEM: NATIONAL RESOURCE NODES.
   Same visual language as the SVG nodes, laid out as a wrapping grid so the
   list can grow without a hand-placed coordinate for every organization. */
.eco-national-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:10px;margin-top:24px;}
.eco-nat-node{display:flex;flex-direction:column;justify-content:center;gap:3px;padding:14px 16px;background:var(--navy);border:1.5px solid rgba(255,255,255,.18);border-radius:6px;text-decoration:none;transition:border-color .18s,background .18s;}
.eco-nat-node strong{font-family:'Open Sans',sans-serif;font-size:12px;font-weight:700;color:#fff;line-height:1.3;transition:color .18s;}
.eco-nat-node span{font-size:10.5px;color:rgba(255,255,255,.45);transition:color .18s;}
.eco-nat-node:hover,.eco-nat-node:focus-visible{border-color:var(--red);background:#0a1f6e;}
.eco-nat-node:hover strong,.eco-nat-node:focus-visible strong,.eco-nat-node:hover span,.eco-nat-node:focus-visible span{color:var(--red);}

/* WA STATE DIRECTORY: website links under each organization name. */
.resource-list li .res-url{display:block;font-size:11px;font-weight:600;color:var(--red);text-decoration:none;margin:1px 0 2px;word-break:break-word;}
.resource-list li .res-url:hover,.resource-list li .res-url:focus-visible{text-decoration:underline;}

/* APPLY PAGE: how it works, tiers, advisor, sample roadmaps.
   All of it reuses the site's card language — navy headings, red accents,
   1px slate borders, a coloured top rule — rather than introducing a new one. */
.how-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:2px;margin-top:40px;background:var(--border);}
.how-step{background:#fff;padding:34px 30px;border-top:4px solid var(--navy);}
.how-step:nth-child(2){border-top-color:var(--red);}
.how-step:nth-child(3){border-top-color:var(--navy);}
.how-step .how-n{font-family:'Raleway',sans-serif;font-size:44px;font-weight:900;color:rgba(2,21,90,.10);line-height:1;margin-bottom:-8px;}
.how-step h3{font-family:'Raleway',sans-serif;font-size:19px;font-weight:800;color:var(--navy);margin-bottom:10px;}
.how-step p{font-size:13.5px;color:var(--slate);line-height:1.8;}

.tier-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:40px;}
.tier-card{display:flex;flex-direction:column;background:#fff;border:1px solid var(--border);border-top:3px solid var(--navy);padding:30px 26px;}
.tier-card:nth-child(2){border-top-color:var(--red);}
.tier-card:nth-child(3){border-top-color:var(--navy);}
.tier-label{font-size:9.5px;font-weight:700;letter-spacing:2.5px;text-transform:uppercase;color:var(--slate);margin-bottom:10px;}
.tier-badge{display:inline-block;align-self:flex-start;background:var(--red);color:#fff;font-size:9px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;padding:4px 10px;margin-bottom:10px;border-radius:2px;}
.tier-card h3{font-family:'Raleway',sans-serif;font-size:22px;font-weight:900;color:var(--navy);margin-bottom:12px;line-height:1.15;}
.tier-card p{font-size:13px;color:var(--slate);line-height:1.8;margin-bottom:22px;}
.tier-card .btn-red{margin-top:auto;align-self:flex-start;font-size:12px;padding:12px 22px;}

.advisor-grid{display:grid;grid-template-columns:1fr 1.15fr;gap:24px;margin-top:40px;align-items:start;}
.advisor-form{background:#fff;border:1px solid var(--border);border-top:4px solid var(--navy);padding:32px;}
.advisor-field{margin-bottom:16px;}
.advisor-field label{display:block;font-size:10px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:var(--navy);margin-bottom:6px;}
.advisor-field select,.advisor-field input,.advisor-field textarea{width:100%;padding:11px 14px;border:1px solid var(--border);background:#fff;font-family:'Open Sans',sans-serif;font-size:13.5px;color:var(--text);outline:none;transition:border-color .2s;}
.advisor-field select:focus,.advisor-field input:focus,.advisor-field textarea:focus{border-color:var(--red);}
.advisor-field select{appearance:none;cursor:pointer;background-image:linear-gradient(45deg,transparent 50%,var(--navy) 50%),linear-gradient(135deg,var(--navy) 50%,transparent 50%);background-position:calc(100% - 18px) 50%,calc(100% - 13px) 50%;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:36px;}
.advisor-field textarea{resize:vertical;line-height:1.7;}
.advisor-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:22px;}
.advisor-submit{background:var(--red);color:#fff;border:none;padding:13px 28px;font-family:'Open Sans',sans-serif;font-size:13px;font-weight:700;letter-spacing:.5px;cursor:pointer;transition:opacity .2s;}
.advisor-submit:hover{opacity:.88;}
.advisor-reset{background:transparent;color:var(--navy);border:1px solid var(--navy);padding:13px 28px;font-family:'Open Sans',sans-serif;font-size:13px;font-weight:700;letter-spacing:.5px;cursor:pointer;transition:background .2s,color .2s;}
.advisor-reset:hover{background:var(--navy);color:#fff;}

.advisor-output{background:var(--navy);padding:32px;min-height:100%;}
.advisor-output .label{color:var(--gold);}
.advisor-empty h3{font-family:'Raleway',sans-serif;font-size:24px;font-weight:900;color:#fff;margin-bottom:12px;line-height:1.15;}
.advisor-empty p{font-size:13.5px;color:rgba(255,255,255,.62);line-height:1.8;}
.advisor-empty .advisor-note{margin-top:18px;padding-top:16px;border-top:1px solid rgba(255,255,255,.12);font-size:12.5px;color:rgba(255,255,255,.45);}
.advisor-phase{background:rgba(255,255,255,.05);border-left:3px solid var(--red);padding:20px 22px;margin-bottom:12px;}
.advisor-phase .phase-tag{color:var(--gold);}
.advisor-phase h4{font-family:'Raleway',sans-serif;font-size:16.5px;font-weight:800;color:#fff;margin:2px 0 8px;line-height:1.25;}
.advisor-phase p{font-size:12.5px;color:rgba(255,255,255,.68);line-height:1.75;}
.advisor-phase .ptags{margin-top:10px;}
.advisor-phase .ptag{background:rgba(255,255,255,.1);color:#fff;font-weight:600;}
.advisor-summary{background:rgba(255,255,255,.04);padding:18px 22px;margin-top:16px;border-top:2px solid var(--gold);}
.advisor-summary p{font-size:12.5px;color:rgba(255,255,255,.68);line-height:1.75;margin-bottom:8px;}
.advisor-summary p:last-child{margin-bottom:0;}
.advisor-summary strong{color:#fff;}
.advisor-cta{margin-top:16px;padding-top:18px;border-top:1px solid rgba(255,255,255,.12);}
.advisor-cta p{font-size:12.5px;color:rgba(255,255,255,.62);line-height:1.75;margin-bottom:14px;}
.advisor-closing{font-size:11.5px;color:var(--slate);line-height:1.7;margin-top:20px;max-width:900px;}
.advisor-closing.on-dark{color:rgba(255,255,255,.45);}

.sample-btns{display:flex;flex-wrap:wrap;gap:8px;margin-top:32px;}
.sample-btn{padding:10px 18px;font-family:'Open Sans',sans-serif;font-size:11.5px;font-weight:700;letter-spacing:.8px;border:1px solid var(--border);background:#fff;color:var(--slate);cursor:pointer;transition:all .2s;}
.sample-btn:hover{border-color:var(--red);color:var(--navy);}
.sample-btn.active,.sample-btn.active:hover{background:var(--red);border-color:var(--red);color:#fff;}
.sample-card{display:none;background:#fff;border:1px solid var(--border);border-top:4px solid var(--red);padding:36px;margin-top:20px;opacity:1;transition:opacity .2s ease;}
.sample-card.active{display:block;}
/* Set for one frame as a card is revealed, then removed, so the swap between
   profiles fades in rather than cutting. Never set without JS, so the default
   card stays visible if the script does not run. */
.sample-card.is-entering{opacity:0;}
.sample-card>.label{margin-bottom:8px;}
.sample-card h3{font-family:'Raleway',sans-serif;font-size:26px;font-weight:900;color:var(--navy);margin-bottom:22px;line-height:1.1;}
.sample-block{margin-bottom:22px;padding-left:18px;border-left:3px solid var(--red);}
.sample-block h4{font-family:'Raleway',sans-serif;font-size:14px;font-weight:800;color:var(--navy);text-transform:uppercase;letter-spacing:1.2px;margin-bottom:8px;}
.sample-block p{font-size:13.5px;color:var(--slate);line-height:1.85;}
.sample-card .advisor-closing{border-top:1px solid var(--border);padding-top:16px;}

@media(max-width:960px){
  .how-grid,.tier-grid,.advisor-grid{grid-template-columns:1fr;}
  .advisor-form,.advisor-output,.sample-card{padding:24px;}
}

/* FULL-PAGE SNAP SCROLL.
   Every page reads as full-viewport panels that snap as you scroll, at every
   width. The document element is the snap container; each major section, the
   banner strip and the footer are snap targets of their own so trailing
   content stays reachable under mandatory snapping. Snap targets carry
   scroll-margin-top so the fixed 68px nav does not cover the top of the panel
   they snap to.

   Several sections here genuinely run past one viewport — the resource
   directory, the ecosystem maps, the roadmap advisor. Per the spec's own
   exception those take height:auto / min-height:100vh / overflow-y:auto
   instead of a hard 100vh clip — with height:100vh and overflow:hidden they
   would swallow most of their own content. An oversized snap area only snaps
   at its edges, so nothing becomes unreachable. */
html{scroll-snap-type:y mandatory;}
section,.section,[class*="section"]{scroll-snap-align:start;scroll-snap-stop:always;min-height:100vh;height:auto;overflow-y:auto;}
.strip,footer{scroll-snap-align:start;scroll-snap-stop:always;}
section,.section,[class*="section"],.strip,footer{scroll-margin-top:68px;}

/* FORGE FEATURED STORY */
.forge-story-card{background:#fff;border:1px solid var(--border);border-top:3px solid var(--red);padding:44px 48px;margin-top:32px;max-width:860px;}
.forge-story-card p{font-size:15.5px;color:var(--slate);line-height:1.9;margin-bottom:20px;}
.forge-story-card p:last-of-type{margin-bottom:0;}
.forge-story-note{font-size:12px!important;font-style:italic;color:#94a3b8!important;line-height:1.6!important;margin-top:28px!important;padding-top:18px;border-top:1px solid var(--border);}
.forge-story-cta{margin-top:28px;display:flex;flex-direction:column;align-items:flex-start;gap:14px;}
.forge-story-link{font-size:13px;font-weight:600;color:var(--red);text-decoration:none;border-bottom:1px solid rgba(211,44,35,.4);padding-bottom:2px;}
.forge-story-link:hover{color:var(--navy);border-bottom-color:var(--navy);}
@media(max-width:700px){.forge-story-card{padding:30px 24px;}}

/* ECOSYSTEM TABS: state / region / county selectors and their sub-panels.
   Reuses the existing dark form-field controls, resource-list directory
   styling and coming-soon banner rather than introducing new components. */
.eco-selectors{display:grid;grid-template-columns:1fr 1fr;gap:18px;max-width:660px;margin-bottom:28px;}
.eco-selectors.single{grid-template-columns:1fr;max-width:330px;}
.eco-selectors .form-field{margin-bottom:0;}
.eco-selectors .form-field[hidden]{display:none;}
@media(max-width:700px){.eco-selectors{grid-template-columns:1fr;max-width:none;}}
.eco-subpanel{display:none;}
.eco-subpanel.active{display:block;}
/* The statewide directory keeps the light directory styling it shares with the
   resources page, so it sits on a light card inside the dark section. */
.eco-state-resources{background:#fff;border-top:4px solid var(--red);padding:32px;}
@media(max-width:700px){.eco-state-resources{padding:24px 20px;}}
.eco-coming{margin-top:0;align-items:flex-start;}
.eco-coming h3{font-family:'Raleway',sans-serif;font-size:19px;font-weight:800;color:#fff;margin-bottom:8px;}
.eco-coming p{margin:0;max-width:760px;}
.eco-coming .btn-red{flex-shrink:0;font-size:12px;padding:11px 24px;}
@media(max-width:700px){.eco-coming{flex-direction:column;align-items:stretch;padding:22px 24px;}.eco-coming .btn-red{text-align:center;}}

/* RESOURCES DIRECTORY: the National / State / County selectors. Same grid and
   field styling as the ecosystem selectors so the two pages stay consistent. */
.dir-selectors{display:grid;grid-template-columns:1fr;gap:18px;max-width:330px;margin:0 0 28px;}
.dir-selectors.two{grid-template-columns:1fr 1fr;max-width:680px;}
.dir-selectors .form-field{margin-bottom:0;}
.dir-selectors .form-field[hidden]{display:none;}
@media(max-width:700px){.dir-selectors.two{grid-template-columns:1fr;max-width:none;}}
.dir-panel{display:none;}
.dir-panel.active{display:block;}
.dir-panel .acc{margin-top:22px;}

/* RESOURCES DIRECTORY: section anchors and the county accordions. Toggles
   borrow the site's card language — white card, navy top rule, red tag. */
.dir-heading{font-family:'Raleway',sans-serif;font-size:clamp(22px,2.4vw,32px);font-weight:900;color:var(--navy);margin:60px 0 0;scroll-margin-top:88px;}
.dir-heading:first-of-type{margin-top:36px;}
.dir-rule{width:44px;height:3px;background:var(--red);margin:16px 0 26px;}
.acc,#pierce{scroll-margin-top:88px;}
.acc{background:#fff;border:1px solid var(--border);border-top:3px solid var(--navy);margin-top:14px;}
.acc-toggle{width:100%;display:flex;align-items:center;justify-content:space-between;gap:16px;background:none;border:none;padding:18px 24px;cursor:pointer;font-family:'Raleway',sans-serif;font-size:15px;font-weight:800;color:var(--navy);text-align:left;transition:background .2s;}
.acc-toggle:hover{background:var(--lt);}
.acc-toggle:focus-visible{outline:2px solid var(--red);outline-offset:-2px;}
.acc-right{display:flex;align-items:center;gap:14px;flex-shrink:0;}
.acc-tag{font-family:'Open Sans',sans-serif;font-size:9px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:var(--red);border:1px solid var(--red);padding:4px 10px;white-space:nowrap;}
.acc-caret{font-size:11px;color:var(--slate);transition:transform .2s;}
.acc-toggle[aria-expanded="true"] .acc-caret{transform:rotate(180deg);}
.acc-panel{padding:4px 24px 20px;border-top:1px solid var(--border);}
.acc-panel[hidden]{display:none;}
@media(max-width:700px){.acc-toggle{padding:16px 18px;font-size:14px;}.acc-panel{padding:4px 18px 18px;}}

/* ============================================================================
   MOBILE — 320px to 768px.

   Everything below this line is scoped to the phone breakpoint; the desktop
   layout above is untouched. Three things were making the site unusable on a
   phone, and they are grouped in that order below:

   1. Sideways drift. Under the snap-scroll block every <section> is given
      overflow-y:auto, and a box that scrolls on one axis quietly becomes
      scrollable on the other one too. So each panel was its own horizontal
      scroller — the page frame stood still while the content slid under the
      thumb. Clipping the cross axis on the panels, on top of the document
      level clip added at the top of this file, is what stops the drift.
   2. Boxes wider than the screen. Grid and flex children default to
      min-width:auto, so a long word or a nowrap chip could push a track past
      the viewport instead of wrapping. Several rows were also still laid out
      as two tracks or as a single non-wrapping line at this width.
   3. Zoom that never comes back. iOS zooms the whole page when a form control
      with a sub-16px font takes focus, and leaves it zoomed — which reads as
      the layout having shifted. 16px controls are the threshold where it
      stops happening.
   ========================================================================= */
@media (max-width:768px){

  /* 1. CONTAINMENT ------------------------------------------------------- */
  /* clip, not hidden, on <main> for the same reason as on <body>. The panels
     themselves already scroll on the y axis, so hidden is correct there and
     only takes the sideways axis away from them. */
  main{overflow-x:clip;}
  section,.section,[class*="section"]{overflow-x:hidden;}
  /* Layout wrappers only. Their caps (940-1280px) are all wider than any
     phone, so pinning them to 100% here changes nothing but guarantees they
     can never contribute width. Prose max-widths are left alone: they are
     reading measures, not overflow. */
  .s-inner,.roadmap-inner,.contact-inner,.map-wrap,.map-pan,.map-pan-hint{max-width:100%;}

  /* Let every track shrink below the intrinsic width of its content. */
  .hero-grid>*,.problem-split>*,.pillars-grid>*,.process-grid>*,.proc-row2>*,
  .serve-grid>*,.resource-grid>*,.about-grid>*,.contact-inner>*,.join-grid>*,
  .client-profiles>*,.phase-block>*,.outcome-row>*,.how-grid>*,.tier-grid>*,
  .advisor-grid>*,.eco-national-grid>*,footer>*{min-width:0;}

  /* Addresses and URLs are the one kind of content with no break opportunity
     of its own, so they get an explicit one. */
  .direct-mail a,.foot-mail,.res-url{overflow-wrap:anywhere;}

  /* 2. LAYOUT ------------------------------------------------------------ */

  /* Nav. The drawer is a fixed full-height panel, but body{overflow:hidden}
     cannot hold the page still behind it because the scroll container is
     <html>, not <body> — the snap-scroll block puts it there. */
  nav{padding:0 16px;}
  .nav-brand{min-width:0;}
  .nav-brand .brand-word{font-size:14px;letter-spacing:.6px;}
  html:has(body.nav-open){overflow:hidden;}

  /* Hero. The title's floor was 48px, which is wider than a 320px screen for
     a word like "Connecting"; the new ramp meets the desktop value exactly at
     768px so nothing jumps at the breakpoint. */
  #hero{padding:32px 20px 48px;}
  .hero-grid{gap:36px;}
  .hero-title{font-size:clamp(32px,8.5vw,48px);line-height:1.02;margin-bottom:20px;}
  .hero-body{font-size:15px;line-height:1.75;margin-bottom:28px;}
  .hero-btns{gap:10px;}
  .hero-btns .btn-red,.hero-btns .btn-ghost{flex:1 1 auto;text-align:center;}

  /* Stats. Already a vertical stack; the side padding and the label clamp
     were desktop measurements that wasted a third of a phone screen. */
  .hero-stats{width:100%;}
  .hero-stat{padding:16px 0;}
  .stat-n{font-size:32px;}
  .stat-l{max-width:none;font-size:13px;}

  /* "Emma Seymour" at 40px is wider than the card it sits in on a 320px
     screen; the ramp meets the desktop value at the breakpoint. */
  .about-name{font-size:clamp(28px,8vw,40px);}

  /* Ticker strip. Both marquee groups keep identical metrics, so the track
     still travels exactly one group-width and the loop stays seamless. */
  .strip{padding:16px 20px;gap:16px;}
  .strip.marquee{width:100%;max-width:100%;padding:0;overflow:hidden;}
  .marquee-group{gap:22px;padding:15px 11px;}
  .marquee-item{font-size:11px;letter-spacing:1.6px;}

  /* Section rhythm and card padding. Desktop card padding ate up to 88px of a
     320px screen, leaving too little for the text to wrap into. */
  .s,#roadmap,#contact,#ecosystem,#join,#wa-state{padding:56px 20px;}
  .h2{font-size:clamp(26px,7vw,34px);}
  .p-side,.pillar-card,.proc,.join-form,.about-left,.how-step,.tier-card,
  .forge-story-card{padding:26px 22px;}
  .client-card{padding:24px 22px;}
  .phase-cell{padding:20px;}
  .outcome-cell,.serve-card{padding:22px 20px;}
  .eco-state-resources{padding:22px 18px;}

  /* Grids still holding two tracks at this width. */
  .serve-grid,.process-grid,.proc-row2,.resource-grid{grid-template-columns:1fr;}
  .serve-grid{gap:14px;}
  .resource-grid{gap:24px;}
  .proc{border-right:none;border-bottom:1px solid rgba(255,255,255,.08);}
  .proc:last-child{border-bottom:none;}

  /* Rows that were a single non-wrapping line. */
  .eco-tabs,.county-tabs{flex-wrap:wrap;}
  .eco-tab,.county-tab{flex:1 1 auto;text-align:center;padding:10px 12px;font-size:11px;letter-spacing:1px;}
  .coming-soon-banner{flex-direction:column;align-items:flex-start;gap:14px;padding:22px 20px;}
  .about-stat-row{flex-wrap:wrap;gap:20px 28px;}
  .eco-legend{gap:10px 16px;}
  .pathway-btns{gap:8px;}

  /* Footer. Ten links on one flex line ran roughly 700px wide — the single
     largest overflow on the site. They stack as full-width rows instead. */
  footer{padding:24px 20px;align-items:stretch;gap:20px;}
  .foot-links{flex-direction:column;gap:0;width:100%;}
  .foot-links li{border-bottom:1px solid rgba(255,255,255,.07);}
  .foot-links li:last-child{border-bottom:none;}
  .foot-links a{display:block;width:100%;padding:11px 0;font-size:13px;}
  .foot-meta{width:100%;align-items:flex-start;}

  /* 3. FORM CONTROLS ----------------------------------------------------- */
  /* !important is needed only because the Forge signup form carries its font
     size in inline style attributes, which no selector can outrank. */
  .jf-input,.jf-select,.jf-textarea,
  .form-field input,.form-field select,.form-field textarea,
  .advisor-field input,.advisor-field select,.advisor-field textarea,
  input,select,textarea{font-size:16px!important;}
}
