/* TinyTools typography system
   One shared type scale for desktop, mobile and WeChat WebView.
   Normal UI text never falls below 14px. */
:root{
  --tt-font-xs:14px;
  --tt-font-sm:15px;
  --tt-font-base:16px;
  --tt-font-control:16px;
  --tt-font-card:17px;
  --tt-font-panel:18px;
  --tt-font-section:24px;
  --tt-font-page:clamp(32px,4vw,42px);
  --tt-line-base:1.6;
}

html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{font-size:var(--tt-font-base);line-height:var(--tt-line-base)}
button,input,textarea,select{font-size:var(--tt-font-control)}

/* Brand and navigation */
.brand b{font-size:18px;line-height:1.2}
.brand small{font-size:var(--tt-font-xs);line-height:1.35}
.topbar nav button,.topbar nav a{font-size:var(--tt-font-base)}

/* Shared hierarchy */
.eyebrow,.hero .eyebrow,.quick-title small,.section .eyebrow{font-size:var(--tt-font-xs);letter-spacing:.04em}
.hero p,.page-head p{font-size:var(--tt-font-base);line-height:1.65}
.page-head h1{font-size:var(--tt-font-page);line-height:1.12}
.quick-title h2,.section-head h2,.next-section h2,.notes h2{font-size:var(--tt-font-section);line-height:1.3}
.muted{font-size:var(--tt-font-xs)}

/* Home cards */
.search-wrap input{font-size:var(--tt-font-base)}
.trust-row{font-size:var(--tt-font-xs)}
.quick-category-card b{font-size:var(--tt-font-card)}
.quick-category-card small{font-size:var(--tt-font-xs);line-height:1.45}
.recipe-card .pill{font-size:var(--tt-font-xs)}
.recipe-card h3,.tool-card h3{font-size:var(--tt-font-card);line-height:1.35}
.recipe-card p,.tool-card p{font-size:var(--tt-font-sm);line-height:1.6}
.recipe-card .arrow,.tool-foot b{font-size:var(--tt-font-sm)}
.filters button{font-size:var(--tt-font-sm)}
.tool-meta,.tool-foot{font-size:var(--tt-font-xs)}

/* Tool workspace */
.back{font-size:var(--tt-font-sm)}
.privacy-card b{font-size:var(--tt-font-sm)}
.privacy-card span{font-size:var(--tt-font-xs);line-height:1.5}
.restore-banner{font-size:var(--tt-font-sm)}
.panel-title h2{font-size:var(--tt-font-panel);line-height:1.35}
.panel-title span,.panel-title div{font-size:var(--tt-font-xs)}
.dropzone label b{font-size:var(--tt-font-card)}
.dropzone label span{font-size:var(--tt-font-xs)}
.text-input{font-size:var(--tt-font-base);line-height:1.65}
.field span{font-size:var(--tt-font-sm)}
.field input[type=text],.field input[type=number],.field select{font-size:var(--tt-font-control);min-height:46px}
.actions button,.panel-title button,.result-actions button,.next-row button{font-size:var(--tt-font-sm);min-height:44px}
.actions .primary{font-size:var(--tt-font-base);min-height:50px}
.steps li{font-size:var(--tt-font-sm)}
.steps em{font-size:var(--tt-font-xs)}
.asset-row b{font-size:var(--tt-font-sm)}
.asset-row small,.asset-icon{font-size:var(--tt-font-xs)}

/* Results: keep output readable, not developer-console sized */
.message{font-size:var(--tt-font-sm);line-height:1.55}
.progress-log span{font-size:var(--tt-font-xs)}
.result-info b{font-size:var(--tt-font-base)}
.result-info small{font-size:var(--tt-font-xs)}
.text-result{font-size:var(--tt-font-sm);line-height:1.6}
.result-actions button{font-size:var(--tt-font-sm)}
.empty-result{font-size:var(--tt-font-sm);line-height:1.6}
.details summary{font-size:var(--tt-font-sm)}
.details pre{font-size:var(--tt-font-xs);line-height:1.55}
.notes p{font-size:var(--tt-font-sm);line-height:1.7}
footer{font-size:var(--tt-font-xs)}

@media(max-width:768px){
  :root{
    --tt-font-xs:14px;
    --tt-font-sm:16px;
    --tt-font-base:17px;
    --tt-font-control:17px;
    --tt-font-card:18px;
    --tt-font-panel:20px;
    --tt-font-section:25px;
    --tt-font-page:30px;
  }
  .brand b{font-size:18px}
  .brand small{font-size:14px}
  .topbar nav button{font-size:16px}
  .search-wrap input{font-size:17px}
  .text-input{font-size:18px}
  .field input[type=text],.field input[type=number],.field select{font-size:17px;min-height:50px}
  .actions .primary{font-size:18px;min-height:56px}
  .result-info b{font-size:17px}
  .text-result{font-size:15px}
}
