/* Shared typography: layout and animation remain page-owned. */
:root{--type-latin:'Helvetica Neue',Arial,sans-serif;--type-body:'Helvetica Neue',Arial,'Hiragino Sans','Hiragino Kaku Gothic ProN','Yu Gothic',Meiryo,sans-serif;--type-editorial:var(--type-body);--text-page:48px;--text-lead:32px;--text-section:26px;--text-subheading:20px;--text-body:15px;--text-label:11px;--text-nav:13px}
body{font-family:var(--type-body)}
body .eyebrow,body time,body .page-local-number{font-family:var(--type-body);font-variant-numeric:normal}
body .eyebrow{font-size:var(--text-label);font-weight:400}
body.subpage .subpage-heading h1,body.subpage .news-heading h1{font-size:var(--text-page);font-weight:500}
body.subpage .subpage-heading-row>p{font-size:var(--text-body)}
body.subpage :is(.about-lead,.business-lead,.two-pillars h2,.news-article h2){font-size:var(--text-lead);font-weight:500}
body.subpage :is(.ks-section h2,.ks-working h2,.ks-contact h2,.contact-intro){font-size:var(--text-section);font-weight:500}
body.subpage :is(.ks-service-list h3,.ks-steps h3,.filer-generic-content h2){font-size:var(--text-subheading);font-weight:500}
body.subpage :is(.about-prose p,.business-prose,.ks-prose p,.ks-service-list p,.ks-steps p,.ks-working-intro,.ks-contact p,.news-article p,.contact-form-intro,.filer-generic-content p,.company-facts dd){font-size:var(--text-body)}
body.subpage .page-local-nav a,body.subpage .page-local-nav a:first-child,body.subpage .page-local-nav a+a{font-family:var(--type-body);font-size:var(--text-nav);font-weight:600}
body.subpage :is(.business-label,.about-label,.company-label,.contact-label,.news-page-label)>span:first-child{font-family:var(--type-body);font-size:var(--text-label);font-weight:400}
@media(max-width:800px){:root{--text-page:32px;--text-lead:26px;--text-section:24px;--text-subheading:18px;--text-body:15px;--text-label:10px;--text-nav:12px}}
@media(max-width:360px){:root{--text-lead:24px}}
/* Override earlier page-scoped label rules with one shared role. */
html body .eyebrow,html body.subpage .eyebrow{font-family:var(--type-body);font-size:var(--text-label);font-weight:400}
html body time{font-family:var(--type-body);font-size:12px}
@media(max-width:800px){html body time{font-size:11px}}

/* Role rules take precedence over legacy page-specific typography. */
:root{--text-compact:15px;--text-note:12px;--text-badge:10px}
html body.page-home .eyebrow{font-family:var(--type-body);font-size:var(--text-label);font-weight:400}
html body.subpage .about-label .about-lead{font-size:var(--text-lead)}
html body.page-home .purpose-content p{font-size:var(--text-body);line-height:2}
html body.page-home .brand-description p,
html body.page-home .company-link p,
html body.page-home .hero-copy small,
html body.page-home .company-title>span:not(.eyebrow){font-size:var(--text-compact);line-height:1.9}
html body.page-home .brand-description h3,
html body.page-home .brand-description .brand-heading-phrase{font-size:var(--text-section);line-height:1.65}
html body.page-home .brand-description small{font-size:var(--text-note);line-height:1.8}
html body.page-home .brand-caption{font-size:var(--text-note);line-height:1.8}
html body.page-home .brand-stage-bottom,
html body.page-home .hero-scroll,
html body.page-home .hero-index,
html body.page-home .business-pagination,
html body.page-home .business-pagination span,
html body.page-home .business-index small{font-family:var(--type-body);font-size:var(--text-label);line-height:1.6}
html body.page-home .text-link,
html body.page-home .business-index>a{font-size:var(--text-nav)}
html body.subpage .ks-service-list article>span,
html body.subpage .ks-steps article>span{font-family:var(--type-body);font-size:var(--text-label)}
html body .news-new,
html body .summary-status,
html body .contact-field label>span{font-size:var(--text-badge)}
html body.subpage .form-privacy,
html body.subpage .preview-form-note{font-size:var(--text-note);line-height:1.8}
@media(max-width:800px){:root{--text-compact:15px;--text-note:11px}
 html body.page-home .brand-description h3,
 html body.page-home .brand-description .brand-heading-phrase{font-size:22px}
}
/* Compact panel titles sit below full-width section headings. */
@media(min-width:801px){html body.page-home .brand-description h3,html body.page-home .brand-description .brand-heading-phrase{font-size:24px;letter-spacing:.015em}}

/* Body copy: one readable 15px / 30px rhythm across desktop and mobile. */
html body.subpage :is(.subpage-heading-row>p,.about-prose p,.business-prose,.two-pillars>p,.ks-hero-copy>p,.ks-prose p,.ks-service-list p,.ks-steps p,.ks-working-intro,.ks-contact p,.news-article p,.filer-article-body p,.contact-form-intro,.filer-generic-content p){font-size:var(--text-body);line-height:2}
html body.page-home :is(.purpose-content p,.brand-description p,.company-link p){font-size:var(--text-body);line-height:2}

/* Shared roles take precedence over legacy component-specific exceptions. */
html body.page-about .about-philosophy .about-lead{font-size:var(--text-lead)}
html body.subpage .news-row time,
html body.subpage .news-article time,
html body.subpage .news-category{font-size:var(--text-note)}
/* Compact card labels are a distinct role, with a 10px floor on mobile. */
html body.page-home .company-link small,
html body.page-home .company-contact small,
html body.page-home .company-home-links small,
html body.subpage a.filer-card-standard small{font-size:10px}
html body.page-news .news-new,
html body.page-home .purpose-news .news-new,
html body.page-contact .contact-field label>span{font-size:var(--text-badge)}

/* Kasane opening copy follows the shared lead scale. */
html body.page-kasane .ks-hero h1{font-size:var(--text-lead)}
