/* Planora semantic typography system — screen UI only.
   Printed/PDF documents keep their own print-specific scale. */
:root{
  /* Brand font system: offline-first, native on every supported platform. */
  --font-family-ui:"Hiragino Sans","Yu Gothic UI","Yu Gothic",-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans JP",Meiryo,sans-serif;
  --font-family-numeric:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --font-family-mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;
  --font-weight-regular:400;
  --font-weight-medium:500;
  --font-weight-semibold:600;
  --font-weight-bold:700;
  --type-letter-body:.005em;
  --type-letter-heading:-.015em;
  --type-letter-label:.01em;
  --type-letter-eyebrow:.12em;

  --type-display-lg:clamp(1.75rem,2.4vw,2.125rem);
  --type-display-md:clamp(1.5rem,2vw,1.6875rem);
  --type-title-lg:1.5rem;
  --type-title-md:1.25rem;
  --type-title-sm:.9375rem;
  --type-body-lg:1.0625rem;
  --type-body:.90rem;
  --type-control:.95rem;
  --type-label:.75rem;
  --type-helper:.80rem;
  --type-meta:.75rem;
  --type-badge:.72rem;
  --type-eyebrow:.625rem;
  --type-line-display:1.22;
  --type-line-heading:1.35;
  --type-line-body:1.6;
  --type-line-control:1.4;
  --type-line-compact:1.35;

  --type-patient-display:clamp(1.75rem,3vw,2.125rem);
  --type-patient-lead:clamp(1rem,1.8vw,1.1875rem);
  --type-patient-title:1.25rem;
  --type-patient-body:1.0625rem;
  --type-patient-meta:.75rem;
}

/* Canonical application hierarchy */
body{font-family:var(--font-family-ui);font-size:var(--type-body);font-weight:var(--font-weight-regular);line-height:var(--type-line-body);letter-spacing:var(--type-letter-body);font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}
button,input,select,textarea{font-family:inherit;font-size:var(--type-control);line-height:var(--type-line-control)}
/* Editable values are content, not emphasis. */
body :is(input,select,textarea){font-weight:var(--font-weight-regular)!important}
button{font-weight:var(--font-weight-medium)}
.brand strong{font-size:var(--type-title-md);font-weight:var(--font-weight-semibold);letter-spacing:var(--type-letter-heading)}
.brand span,.save-status small{font-size:var(--type-meta)}
.main-nav button{font-size:var(--type-control);font-weight:var(--font-weight-medium)}
.field label{font-size:var(--type-label);font-weight:var(--font-weight-medium);letter-spacing:var(--type-letter-label)}
.hint,.helper-text,.internal-only-caption{font-size:var(--type-helper);line-height:var(--type-line-body)}
.eyebrow{font-size:var(--type-eyebrow);font-weight:var(--font-weight-semibold);line-height:var(--type-line-compact);letter-spacing:var(--type-letter-eyebrow)}
.page-heading h2,.section-head h2,.plan-editor-head h2,.dialog-card h2,.dialog-form h2{font-size:var(--type-title-lg);font-weight:var(--font-weight-semibold);line-height:var(--type-line-heading);letter-spacing:var(--type-letter-heading)}
.card h3,.subsection-title,.editor-section-head h3,.app-confirm-panel h3{font-size:var(--type-title-sm);font-weight:var(--font-weight-medium);line-height:var(--type-line-heading)}
.page-heading p,.master-card-summary,.rule-summary,.settings-footer-note{font-size:var(--type-helper);line-height:var(--type-line-body)}
.settings-section-badge,.plan-type-badge,.advanced-badge,.internal-only-badge,.section-number{font-size:var(--type-badge);font-weight:var(--font-weight-medium);line-height:var(--type-line-compact)}
.data-table th,.master-field-labels,.rule-column-head,.category-head{font-size:var(--type-label);font-weight:var(--font-weight-medium);letter-spacing:var(--type-letter-label)}
.save-status,.timeline-meta,.unit-meta,.template-picker-result,.settings-search small{font-size:var(--type-meta)}
.collapsible-card>summary strong{font-size:var(--type-body);font-weight:var(--font-weight-medium)}
.collapsible-card>summary small{font-size:var(--type-meta)}
.dialog-card p,.dialog-form p,.app-confirm-panel p{font-size:var(--type-body);line-height:var(--type-line-body)}

/* Numeric content keeps stable, legible figures without changing the Japanese UI face. */
:is(.total,.subtotal-row,.estimate-summary .total,.estimate-plan-tabs .tab-amount,.patient-total-card strong,.unit-estimate-head,.payment-row,.save-status,.timeline-meta){font-family:var(--font-family-numeric);font-variant-numeric:tabular-nums lining-nums;font-feature-settings:"tnum" 1,"lnum" 1}
.total{font-weight:var(--font-weight-semibold)}
.subtotal-row{font-weight:var(--font-weight-medium)}

/* Workspace / odontogram controls */
#chartWorkspaceControls .chart-scope-caption{font-size:var(--type-helper)}
#chartLegend .chart-legend-title,#chartLegend .chart-legend-item{font-size:var(--type-meta);font-weight:var(--font-weight-medium)}
#chartLegend .chart-legend-symbol{font-size:var(--type-eyebrow);font-weight:var(--font-weight-medium)}
.legend-note{font-size:var(--type-helper)}
.patient-chart-legend>summary,.patient-chart-legend-item,.patient-chart-legend-item i{font-weight:var(--font-weight-medium)}
.patient-chart-legend>summary small{font-weight:var(--font-weight-regular)}

/* Settings inherits the same application roles. */
.settings-card :is(input,select,textarea){font-size:var(--type-control);font-weight:var(--font-weight-regular)!important}
.settings-card :is(.field>label,.current-status-filter label,.current-status-fields label,.current-status-add-grid label,.billing-rule-field,.template-picker-controls label,.master-field-labels,.rule-column-head,.category-head){font-size:var(--type-label);font-weight:var(--font-weight-medium)}
.settings-card :is(.hint,.settings-header-copy p,.settings-search small,.template-picker-result,.master-card-summary,.rule-summary,.settings-footer-note,.billing-breakdown-status,.current-status-form-error){font-size:var(--type-helper)}
.settings-card :is(.settings-section-badge,.advanced-badge){font-size:var(--type-badge);font-weight:var(--font-weight-medium)}
.settings-section-head p{font-size:var(--type-body)}
.settings-sidebar-nav>.settings-toolbar .settings-search>span,.billing-breakdown-toggle{font-size:var(--type-body);font-weight:var(--font-weight-medium)}
.settings-sidebar-nav>[data-settings-target]{font-weight:var(--font-weight-medium)}
.settings-search,.settings-search small,.switch-label,.settings-section[data-settings-section="display-odontogram"] label:has(#settingsShowWisdom){font-weight:var(--font-weight-medium)}
.settings-dirty .settings-footer-note{font-weight:var(--font-weight-semibold)}
.billing-breakdown-summary span,.settings-sidebar-nav:not(.drawer-open)>[data-settings-target].active::after{font-size:var(--type-meta)}
.billing-breakdown-summary strong{font-weight:var(--font-weight-medium)}
.settings-sidebar-nav:not(.drawer-open)>[data-settings-target].active::after{font-weight:var(--font-weight-regular)}
.master-narrative-title{font-weight:var(--font-weight-semibold)}
.auto-master-summary>span,.current-status-add-head strong{font-weight:var(--font-weight-medium)}

/* Treatment Unit and template hierarchy: names identify objects; values and procedures remain quieter. */
.unit-title,#activeUnitTitle,.template-card-head :is(strong,h3),.template-selected-head :is(strong,h3){font-weight:var(--font-weight-semibold)}
.unit-meta,.unit-summary,.selected-sites{font-weight:var(--font-weight-regular)}
.timeline-title,.timeline-internal-memo>summary,.procedure-info summary,.procedure-info p strong,.procedure-editor-tooth span{font-weight:var(--font-weight-medium)}
.template-picker-controls label,.template-picker-group h4,.template-procedure-name,.template-procedure-row>label,.template-picker-item span{font-weight:var(--font-weight-medium)}
.template-picker-result,.template-selected-head small{font-weight:var(--font-weight-regular)}
.treatment-master-name-input,.treatment-master-basics :is(input,select),.treatment-master-narratives textarea{font-weight:var(--font-weight-regular)!important}
.treatment-master-basics label,.treatment-master-narratives label{font-weight:var(--font-weight-medium)}
.target-tooth-chip,.procedure-target-picker>summary strong{font-weight:var(--font-weight-medium)}

/* Treatment planning / estimate */
.plan-validity p,.payment-row p{font-size:var(--type-body)}
.patient-plan-description{font-size:var(--type-body)}
.patient-plan-description strong,.estimate-nonbillable-header span,.unit-estimate-head small,.editor-section-head p{font-size:var(--type-meta)}
.plan-type-badge,.internal-only-field>label,.workspace-procedure-column .field:has(#procedureMemo)>label,.workspace-procedure-column .field:has(#procedureMemo)>label::after,.internal-only-badge,.comparison-nonbillable,.estimate-plan-tabs .nonbillable-label,.estimate-nonbillable-header span,.estimate-nonbillable dt,.payment-row>span,.tabs .add-tab,.section-number,.estimate-plan-tabs .tab-amount{font-weight:var(--font-weight-medium)}
.estimate-summary .total{font-size:var(--type-title-lg);font-weight:var(--font-weight-semibold)}
.estimate-nonbillable-header h3{font-size:var(--type-title-md);font-weight:var(--font-weight-semibold)}
.estimate-plan-tabs .tab-amount,.estimate-plan-tabs .nonbillable-label,.danger-button{font-size:var(--type-meta)}
.unit-estimate-head span:last-child{font-weight:var(--font-weight-semibold)}

/* Comparison cards */
.comparison-card-index,.comparison-card-recommendation>span,.comparison-card-details dt{font-weight:var(--font-weight-medium)}
.comparison-card-amount,.comparison-card-recommendation>strong{font-weight:var(--font-weight-semibold)}

/* Patient explanation uses the same hierarchy with a presentation-sized tier. */
.patient-mode-header strong{font-size:var(--type-patient-title);font-weight:var(--font-weight-semibold)}
.patient-mode-header span,.patient-mode-progress{font-size:var(--type-body)}
.patient-mode-steps button strong{font-size:var(--type-body);font-weight:var(--font-weight-medium)}
.patient-mode-steps button span,.patient-nav-button,.patient-step>span,.patient-legend span{font-weight:var(--font-weight-medium)}
.slide-kicker{font-weight:var(--font-weight-semibold)}
.patient-slide h1{font-size:var(--type-patient-display);font-weight:var(--font-weight-semibold);line-height:var(--type-line-display);letter-spacing:var(--type-letter-heading)}
.slide-lead{font-size:var(--type-patient-lead);line-height:var(--type-line-body)}
.patient-pros-cons p,.presentation-selected-detail>p{font-size:var(--type-patient-body);line-height:1.7}
.patient-summary-grid span,.patient-step p,.patient-cost-group p,.patient-note{font-size:var(--type-body)}
.patient-summary-grid strong,.patient-comparison-heading strong,.presentation-timeline-summary strong{font-size:var(--type-patient-title);font-weight:var(--font-weight-medium)}
.patient-step strong,.patient-total-card span,.patient-cost-group>div{font-size:var(--type-body-lg)}
.patient-comparison-heading span,.presentation-selected-title span,.presentation-metric-grid span,.presentation-timeline-summary span,.patient-comparison-card header span,.presentation-plan-pill span{font-size:var(--type-patient-meta);font-weight:var(--font-weight-medium)}
.patient-comparison-heading small,.patient-comparison-card dt,.patient-comparison-card dd,.presentation-timeline-summary small{font-size:var(--type-body)}
.patient-comparison-card dt{font-weight:var(--font-weight-medium)}
.patient-comparison-card header h3,.presentation-plan-pill strong{font-size:var(--type-body-lg);font-weight:var(--font-weight-medium)}
.patient-comparison-card header>strong{font-size:var(--type-title-md);font-weight:var(--font-weight-semibold)}
.presentation-plan-pill em{font-weight:var(--font-weight-semibold)}
.presentation-selected-title h2{font-size:var(--type-title-lg);font-weight:var(--font-weight-semibold)}
.presentation-selected-title>strong,.patient-total-card strong{font-size:var(--type-display-md);font-weight:var(--font-weight-semibold)}
.presentation-metric-grid strong{font-size:var(--type-title-sm);font-weight:var(--font-weight-medium)}

/* Shared cross-feature semantic emphasis. */
.section-heading.compact span,.internal-report-actions::before{font-weight:var(--font-weight-semibold)}
.save-status small{font-weight:var(--font-weight-regular)}

/* iOS/WebKit auto-zooms focused form controls below 16px. Keep the desktop
   control scale while guaranteeing a non-zooming editable size on narrow UI. */
@media (max-width:820px){
  body :is(input,select,textarea),
  .settings-card :is(input,select,textarea){font-size:1rem}
}

/* Report preview is intentionally excluded: it mirrors printable A4 typography. */
