/* YOSS type roles: system text, rounded numerals only for metrics. */
:root{
 --type-page:calc(32px * var(--font-scale,1));
 --type-state:calc(36px * var(--font-scale,1));
 --type-section:calc(21px * var(--font-scale,1));
 --type-body:calc(16px * var(--font-scale,1));
 --type-secondary:calc(15px * var(--font-scale,1));
 --type-caption:calc(13px * var(--font-scale,1));
 --type-meta:calc(11px * var(--font-scale,1));
 --type-control:calc(16px * var(--font-scale,1));
 font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
 font-kerning:normal;font-optical-sizing:auto;
 -webkit-text-size-adjust:100%;text-size-adjust:100%;
}
body{font-size:var(--type-body);line-height:1.5;letter-spacing:normal}
button,input,select,textarea{letter-spacing:normal}
h1,h2,h3,h4{letter-spacing:-.02em;font-weight:600;overflow-wrap:break-word}
p{letter-spacing:normal;text-wrap:pretty}
.view-head h1{font-size:var(--type-page);line-height:1.16}
.view-head p{font-size:var(--type-secondary);line-height:1.5;margin-top:8px}
.view-head{margin-bottom:24px}
.hero-copy h1{font-size:var(--type-state);line-height:1.16;letter-spacing:-.025em;margin-block:8px 14px}
.hero-copy>p{font-size:var(--type-body);line-height:1.5}
.eyebrow,.number-tag,.score-label{font-size:var(--type-meta);line-height:1.4;letter-spacing:.08em;font-weight:500}
.page-top .eyebrow,.page-top .pill{font-size:var(--type-meta);line-height:1.4}
.score-number strong{font-weight:600;letter-spacing:-.045em}
.score-number span{line-height:1.4;letter-spacing:.06em}
.score-bottom{font-size:var(--type-caption);line-height:1.35;letter-spacing:normal;gap:7px}
.action-title{font-size:calc(19px * var(--font-scale,1));line-height:1.35;font-weight:500;letter-spacing:-.015em}
.next-action .eyebrow{font-size:var(--type-meta);line-height:1.4;letter-spacing:.08em}
.primary,.secondary{font-size:var(--type-control);line-height:1.3;max-width:100%;white-space:normal;overflow-wrap:break-word}
.primary{font-weight:600}.secondary{font-weight:500}
.text-btn{font-size:var(--type-caption);line-height:1.4;white-space:normal;text-align:start;max-width:100%}
.section-card>h3,:root[data-theme=light] .section-card>h3,.account-card>h2{font-size:var(--type-section);line-height:1.3;letter-spacing:-.02em;margin:0 0 12px;font-weight:600}
.section-card>p,:root[data-theme=light] .section-card>p,.account-card p{font-size:var(--type-secondary);line-height:1.5}
.account-identity{gap:4px;padding:20px 0}
.account-identity>.account-name{font-size:var(--type-body);line-height:1.4;font-weight:600;overflow-wrap:anywhere}
.account-identity>.account-provider{font-size:var(--type-caption);line-height:1.4}
.account-details{display:grid;gap:10px;margin:16px 0 0}
.account-details>div{display:grid;grid-template-columns:minmax(68px,auto) minmax(0,1fr);gap:12px;align-items:baseline}
.account-details dt{font-size:var(--type-caption);line-height:1.45;color:var(--muted)}
.account-details dd{font-size:var(--type-secondary);line-height:1.45;color:var(--text);margin:0;min-width:0;overflow-wrap:anywhere}
.public-user-id{font-family:inherit;font-size:inherit;letter-spacing:0;font-variant-numeric:tabular-nums}
.account-method h3{font-size:var(--type-section);line-height:1.3}
.account-method{padding-top:20px;margin-top:20px}
.profile-tabs{margin-bottom:24px}.profile-tabs button{font-size:var(--type-caption);line-height:1.3;font-weight:500;letter-spacing:normal;white-space:normal;overflow-wrap:break-word;min-width:0}
.profile-panel .footnote,.footnote{font-size:var(--type-caption)!important;line-height:1.5}
.modal-header{align-items:flex-start;gap:16px;margin-bottom:24px}
.modal-header h2{font-size:calc(24px * var(--font-scale,1));line-height:1.25;letter-spacing:-.02em;min-width:0;padding-top:4px}
.modal-header .icon-btn{width:44px;height:44px;min-width:44px;min-height:44px;padding:12px;margin:-4px -4px 0 0;flex:0 0 44px;align-items:center;justify-content:center;display:flex}
.modal-header .icon-btn:focus-visible{outline-width:2px;outline-offset:2px}
dialog>p,dialog form>p{font-size:var(--type-secondary);line-height:1.5}
.record-grid{gap:12px;align-items:stretch}
.record-option,:root[data-theme=light] .record-option{font-size:var(--type-caption);line-height:1.35;font-weight:400;min-width:0;min-height:110px;padding:18px 10px;gap:12px;justify-content:center;white-space:normal;text-wrap:balance}
.record-option-label{display:block;max-width:100%;overflow-wrap:anywhere}
label{font-size:var(--type-secondary);line-height:1.4}
input,select,textarea{font-size:max(16px,var(--type-control));line-height:1.4}
.quick,:root[data-theme=light] .quick{font-size:var(--type-caption);line-height:1.3;letter-spacing:normal;white-space:normal;min-width:0}
.quick>span:not(.icon-badge){max-width:100%;overflow-wrap:break-word}
.page-hint{font-size:var(--type-meta);line-height:1.4;letter-spacing:.06em;text-transform:none}
.core-name{font-size:var(--type-body);line-height:1.35}.core-sub{font-size:var(--type-caption);line-height:1.4}
.subscription-dates dt,.subscription-dates dd{font-size:var(--type-secondary);line-height:1.45}
@media(max-width:760px){
 :root{--type-page:calc(28px * var(--font-scale,1));--type-state:calc(28px * var(--font-scale,1));--type-section:calc(20px * var(--font-scale,1))}
 .view-scroll{padding:24px 20px 32px}
 .hero-copy h1{font-size:var(--type-state);max-width:340px;line-height:1.17;margin:6px auto 12px}
 .hero-copy>p{font-size:var(--type-secondary);line-height:1.45;max-width:330px}
 .action-title{font-size:var(--type-body);line-height:1.35;margin-top:6px}
 .next-action .primary{font-size:calc(14px * var(--font-scale,1));line-height:1.3;padding:12px 14px;min-width:0;max-width:160px}
 .score-label{font-size:var(--type-meta)}.score-bottom{font-size:calc(12px * var(--font-scale,1))}
 .section-card{padding:20px}
 .profile-tabs{gap:2px;margin-bottom:24px;padding:4px}.profile-tabs button{padding:10px 4px;font-size:var(--type-caption);line-height:1.3;min-height:44px}
 .account-card .settings-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
 .account-card .settings-actions .primary,.account-card .settings-actions .secondary{grid-column:1/-1;width:100%;margin:0}
 .account-card .settings-actions .text-btn{justify-content:center;text-align:center;padding:10px 4px}
 .modal-header h2{font-size:calc(22px * var(--font-scale,1));line-height:1.25}
 .quick,:root[data-theme=light] .quick{font-size:calc(11px * var(--font-scale,1));line-height:1.3;padding:10px 3px;gap:8px}
 .sidebar .nav button{font-size:calc(10px * var(--font-scale,1));line-height:1.25;letter-spacing:normal;padding:7px 2px;min-width:0}
 .sidebar .nav button>span{max-width:100%;white-space:normal;overflow-wrap:break-word}
 .page-hint{font-size:calc(10px * var(--font-scale,1));letter-spacing:.05em}
}
@media(max-width:560px){
 .record-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
 .record-option,:root[data-theme=light] .record-option{font-size:calc(14px * var(--font-scale,1));line-height:1.35;min-height:100px;padding:16px 12px;gap:12px}
}
@media(max-width:360px){
 :root{--type-page:calc(26px * var(--font-scale,1));--type-state:calc(26px * var(--font-scale,1))}
 .profile-tabs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
 .next-action{grid-template-columns:1fr}.next-action .primary{grid-column:1;grid-row:auto;max-width:none;width:100%;margin-top:12px}
}

@media(max-width:760px){:root[data-text-size=large] .profile-tabs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}:root[data-text-size=large] .quickbar{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}}
/* Preserve whole words in the fixed six-item tab bar and quick-entry row. */
@media(max-width:760px){

 .quick>span:not(.icon-badge){overflow-wrap:normal;word-break:normal}
 .sidebar .nav{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:0}
 .sidebar .nav button{font-size:calc(11px * var(--font-scale,1));min-height:58px;padding:8px 2px;min-width:44px;gap:5px}
 .sidebar .nav button>span{white-space:normal;overflow-wrap:anywhere;hyphens:auto;min-width:0}
 :root[data-text-size=large] .page-hint{position:static;margin-top:16px;flex:0 0 auto}
 :root[data-text-size=large] .page{padding-bottom:16px}
}
@media(max-width:360px){.quickbar{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.page-hint{position:static;margin-top:16px}.page{padding-bottom:16px}}

/* Equal quick-entry tiles; override the legacy .quick span display:block. */
.quick>.icon-badge{display:inline-flex;align-items:center;justify-content:center;align-self:center}
.quick>.icon-badge>.icon{display:block;margin:0;flex:none}
@media(max-width:760px){
 .quickbar{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));align-items:stretch;gap:8px}
 .quick,:root[data-theme=light] .quick{width:100%;min-height:92px;padding:12px 3px 10px;justify-content:flex-start;gap:8px}
 .quick>span:not(.icon-badge){display:flex;align-items:center;justify-content:center;min-height:2.6em;line-height:1.3;text-align:center;hyphens:manual;overflow-wrap:normal}
}
@media(max-width:360px){.quickbar{grid-template-columns:repeat(3,minmax(0,1fr))}}

/* Reserve the same two-line label area so glyphs align across each row. */
.record-option,:root[data-theme=light] .record-option{min-height:128px;justify-content:flex-start}
.record-option-label{display:flex;align-items:center;justify-content:center;min-height:2.7em;width:100%;text-align:center}

/* System/notch and Telegram controls occupy separate inset regions. */
:root.telegram{
 --yoss-safe-top:calc(max(env(safe-area-inset-top,0px),var(--tg-safe-area-inset-top,var(--tg-device-safe-top,0px))) + var(--tg-content-safe-area-inset-top,var(--tg-content-safe-top,0px)));
 --yoss-safe-bottom:calc(max(env(safe-area-inset-bottom,0px),var(--tg-safe-area-inset-bottom,var(--tg-device-safe-bottom,0px))) + var(--tg-content-safe-area-inset-bottom,var(--tg-content-safe-bottom,0px)));
 --yoss-safe-left:calc(max(env(safe-area-inset-left,0px),var(--tg-safe-area-inset-left,var(--tg-device-safe-left,0px))) + var(--tg-content-safe-area-inset-left,var(--tg-content-safe-left,0px)));
 --yoss-safe-right:calc(max(env(safe-area-inset-right,0px),var(--tg-safe-area-inset-right,var(--tg-device-safe-right,0px))) + var(--tg-content-safe-area-inset-right,var(--tg-content-safe-right,0px)));
}
.telegram dialog{position:fixed;top:calc(var(--yoss-safe-top) + 12px);bottom:calc(var(--yoss-safe-bottom) + 12px);left:var(--yoss-safe-left);right:var(--yoss-safe-right);margin:auto;height:fit-content;width:min(500px,calc(100% - var(--yoss-safe-left) - var(--yoss-safe-right) - 24px));max-height:calc(100dvh - var(--yoss-safe-top) - var(--yoss-safe-bottom) - 24px)}
@media(max-width:760px){
 .telegram .topbar{padding-top:calc(8px + var(--yoss-safe-top));padding-left:max(16px,var(--yoss-safe-left));padding-right:max(16px,var(--yoss-safe-right));min-height:calc(64px + var(--yoss-safe-top))}
 .telegram .sidebar{padding-left:max(4px,var(--yoss-safe-left));padding-right:max(4px,var(--yoss-safe-right));padding-bottom:max(6px,var(--yoss-safe-bottom))}
 .telegram .view-scroll{padding-left:max(20px,var(--yoss-safe-left));padding-right:max(20px,var(--yoss-safe-right))}
 .telegram .page{padding-left:max(24px,var(--yoss-safe-left));padding-right:max(24px,var(--yoss-safe-right))}
 .telegram .page-top{left:max(24px,var(--yoss-safe-left));right:max(24px,var(--yoss-safe-right))}
}
@media(min-width:761px){
 .telegram .topbar{height:auto;min-height:calc(96px + var(--yoss-safe-top));padding-top:calc(16px + var(--yoss-safe-top));padding-bottom:16px;padding-right:max(52px,var(--yoss-safe-right))}
 .telegram .sidebar{padding-top:calc(40px + var(--yoss-safe-top));padding-bottom:max(25px,var(--yoss-safe-bottom));padding-left:max(25px,var(--yoss-safe-left))}
}

button.logo{border:0;background:none;padding:0;text-align:left;cursor:pointer;min-height:44px}
.day-label-row{display:flex;align-items:center;gap:10px;min-width:0}
.day-label-row .access-badge{margin:0;flex:0 0 auto}
.day-label-row .eyebrow{min-width:0;white-space:normal}
@media(max-width:760px){
 .header-date{display:grid;grid-template-columns:minmax(0,1fr);grid-template-areas:'logo' 'summary';row-gap:0;min-width:0}
 .header-date .day-label-row{grid-area:summary;gap:8px}
 .topbar button.logo{min-height:44px;justify-self:start}
 .header-date .day-label-row .eyebrow{display:block;font-size:var(--type-meta);line-height:1.3}
 .header-date .date{padding-top:2px}
}

.admin-period-presets,.admin-role-filters{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}
.admin-period-presets .secondary,.admin-role-filters .secondary{font-size:var(--type-caption);min-height:44px;padding:9px 12px}
.admin-role-filters [aria-pressed=true]{background:var(--wash);border-color:var(--ink-teal)}
.admin-period{margin-top:24px}.admin-team{margin-top:32px}.admin-period h4{margin-top:24px}
.admin-period .form-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.admin-period input{min-width:0;width:100%}
:root[data-theme=light]{--text:#1c1c1e;--muted:#505057;--panel:rgba(118,118,128,.08);--panel2:rgba(118,118,128,.13);--line:rgba(60,60,67,.16);--ink-teal:#17665e;--text-surface:rgba(118,118,128,.07)}
:root[data-theme=light] .hero-copy>p,:root[data-theme=light] .view-head p{background:var(--text-surface);border-radius:12px;padding:12px 14px}
:root[data-theme=light] .notice{background:var(--text-surface);color:var(--muted);border-radius:12px}
:root[data-theme=light] dialog,:root[data-theme=light] .pwa-update{background:#f7f7fa}
:root[data-theme=light] #toast{background:#e7e7ed}
@media(max-width:420px){.admin-period .form-row{grid-template-columns:minmax(0,1fr)}}

.day-copy{min-width:0}.day-copy .date{margin-top:2px}.header-date .day-copy .eyebrow{display:block}

/* Locale controls remain a single compact hit target in the host header. */
.language{display:inline-flex;align-items:center;justify-content:center;gap:5px;min-width:44px;min-height:44px;white-space:nowrap}
.language>.icon{width:14px;height:14px}
html:lang(ja){font-family:-apple-system,BlinkMacSystemFont,"Hiragino Kaku Gothic ProN","Yu Gothic",Meiryo,system-ui,sans-serif}
html:lang(ja) :is(h1,h2,h3,p,.eyebrow,.score-label,.brand-note,.nav,.quick,.page-hint){letter-spacing:normal;line-break:strict;word-break:normal}
html:lang(ja) :is(p,.quick,.nav){line-height:1.6}
:lang(es) .quick>span:not(.icon-badge),:lang(tr) .quick>span:not(.icon-badge),:lang(pt-BR) .quick>span:not(.icon-badge),:lang(kk) .quick>span:not(.icon-badge),:lang(uz-Latn) .quick>span:not(.icon-badge){hyphens:auto;overflow-wrap:anywhere}

/* Keep all six destinations readable when text grows. Intrinsic rows occupy
   real shell space; the content above remains independently scrollable. */
@media(max-width:760px){
 :root[data-text-size=large] .sidebar .nav{grid-template-columns:repeat(3,minmax(0,1fr))}
 :root[data-text-size=large] .sidebar .nav button{flex-direction:row;min-height:54px;padding:9px 6px;gap:8px}
 .pwa-update,#toast{bottom:calc(var(--yoss-navigation-height,calc(76px + var(--yoss-safe-bottom,0px))) + 12px)}
}
@media(max-width:360px){
 .sidebar .nav{grid-template-columns:repeat(3,minmax(0,1fr))}
 .sidebar .nav button{flex-direction:row;min-height:54px;padding:9px 6px;gap:8px}
}
@media(max-width:280px){
 .sidebar .nav,:root[data-text-size=large] .sidebar .nav{grid-template-columns:repeat(2,minmax(0,1fr))}
}
.startup{text-align:center}.startup-progress{display:inline-block;width:32px;height:32px;margin:20px auto;border:2px solid var(--line);border-top-color:var(--ink-teal);border-radius:50%}

/* Programmatic destination focus is visible inside the viewport. */
#content:focus-visible{outline:2px solid var(--ink-teal);outline-offset:-2px}

/* Role terms remain readable inside the administrator sheet at large text. */
.admin-tester-term{border:1px solid var(--line);border-radius:12px;padding:16px;margin:20px 0 0;min-width:0}
.admin-tester-term legend{padding:0 6px;color:var(--text);font-size:var(--type-secondary);font-weight:500}
.admin-tester-term .checkline{margin-top:0}.admin-tester-term[hidden]{display:none}
.admin-tester-term input[type=datetime-local]{min-width:0;max-width:100%}
.admin-user-card form+form{border-top:1px solid var(--line);margin-top:28px;padding-top:24px}
.admin-panel .admin-table{max-width:100%;overflow-x:auto}.admin-panel caption{text-align:start}


/* Keep the vertical page controls outside the content's touch/reading area. */
@media(max-width:1100px) and (min-width:761px){
 .page{padding-right:76px}.page-top{right:76px}
}
@media(max-width:760px){
 .page{padding-right:52px}.page-top{right:52px}.pager-nav{right:2px}
}

/* Large text grows the metric container and lets Score pages flow vertically. */
:root[data-text-size=large] .page{height:auto;justify-content:flex-start;overflow:visible}
:root[data-text-size=large] .page-hint{position:static;margin-top:20px;flex:0 0 auto}
:root[data-text-size=large] .page-top{position:static;flex-wrap:wrap;align-items:flex-start;margin-bottom:16px}
:root[data-text-size=large] .page-top .pill{white-space:normal;max-width:100%}
:root[data-text-size=large] .page-top .eyebrow{min-width:0;overflow-wrap:anywhere}
:root[data-text-size=large] .score-visual{width:min(100%,calc(280px * var(--font-scale,1)))}
:root[data-text-size=large] .pwa-update{flex-wrap:wrap}
:root[data-text-size=large] .bot-login-code{letter-spacing:.12em;overflow-wrap:anywhere}
:root[data-text-size=large] .core-row{grid-template-columns:32px minmax(0,1fr) auto;gap:10px 14px}
:root[data-text-size=large] .core-row>div:nth-child(2){min-width:0}
:root[data-text-size=large] .core-name,:root[data-text-size=large] .core-sub{overflow-wrap:anywhere}
:root[data-text-size=large] .core-row .core-value{grid-column:3;grid-row:1}
:root[data-text-size=large] .core-row .bar{grid-column:2/-1;grid-row:2}
@media(max-width:1100px){
 :root[data-text-size=large] .hero{grid-template-columns:minmax(0,1fr);gap:24px}
 :root[data-text-size=large] .hero-copy{max-width:100%;text-align:center}
 :root[data-text-size=large] .form-row{grid-template-columns:minmax(0,1fr)}
}
@media(max-width:760px){
 :root[data-text-size=large] .score-visual{width:min(100%,calc(184px * var(--font-scale,1)))}
 :root[data-text-size=large] .next-action{grid-template-columns:minmax(0,1fr)}
 :root[data-text-size=large] .next-action .primary{grid-column:1;grid-row:4;width:100%;max-width:none;margin-top:12px}
 :root[data-text-size=large] .next-action p{grid-column:1;grid-row:3}
}


/* At 150–200%, a reading column preserves whole words even on wide screens. */
:root[data-text-layout=stacked] .hero{grid-template-columns:minmax(0,1fr);gap:24px}
:root[data-text-layout=stacked] .hero-copy{max-width:100%;text-align:center}
:root[data-text-layout=stacked] .hero-copy h1{max-width:20ch;margin-inline:auto}
:root[data-text-layout=stacked] .hero-copy>p{max-width:40ch;margin-inline:auto}
.demo-banner{font-size:var(--type-caption);line-height:1.5;flex-wrap:wrap;gap:8px 16px}
.demo-banner button{font-size:inherit;min-height:44px}

/* Empty fields remain identifiable without relying on placeholder text. */
:root{--control-edge:#87938f}
:root[data-theme=light]{--control-edge:#737b78}
