/* Shared viewport layout. Component styles remain responsible for colours and controls.
   Width grows with the display; rem-based grids also respect the reading preference. */
:root{--lab-page-width:1680px;--lab-gutter:32px}
@media screen and (min-width:1200px){
  .site-header,.site-footer,.home-page main,.topic-page main.home-page,
  .dashboard-main,.personal-main,.challenge-main{max-width:var(--lab-page-width)}
  .student-bar{max-width:calc(var(--lab-page-width) - 2 * var(--lab-gutter));margin-left:max(var(--lab-gutter),calc((100% - var(--lab-page-width)) / 2 + var(--lab-gutter)));margin-right:max(var(--lab-gutter),calc((100% - var(--lab-page-width)) / 2 + var(--lab-gutter)))}
  .site-header{padding-top:18px;padding-bottom:18px}
  .home-page .exercise-grid,.topic-page .exercise-grid,.personal-topic-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,21rem),1fr))}
  .exercise-card{padding:20px}
  .exercise-card .card-top{margin-bottom:16px}
  .exercise-card>p{margin-bottom:18px}
  .dashboard-main,.personal-main{padding-top:26px}
}
/* Home: reduce the distance to the actual learning paths. */
.home-overview{display:flow-root}
@media screen and (min-width:1100px){
  body.home-page .hero{padding:30px 0;gap:32px}
  body.home-page .hero h1{font-size:clamp(2rem,2.5vw,2.75rem)}
  body.home-page .hero-copy>p:not(.eyebrow){line-height:1.65;margin-bottom:18px;max-width:650px}
  body.home-page .hero-facts{margin-top:20px}
  body.home-page .hero-visual{max-width:460px;justify-self:end;width:100%}
  body.home-page .student-welcome{padding:20px 24px;margin-bottom:24px;display:grid;grid-template-columns:1fr 1.6fr;gap:12px 28px;align-items:center}
  body.home-page .student-welcome h2{font-size:1.3rem}
  body.home-page .welcome-steps{margin:0;gap:16px}
  body.home-page .student-welcome>.secondary-button{justify-self:start}
  body.home-page.has-account .hero{padding:20px 0}
  body.home-page.has-account .hero-copy{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px 24px;align-items:center}
  body.home-page.has-account .hero .eyebrow{margin:0;grid-column:1/-1}
  body.home-page.has-account .hero h1{font-size:1.75rem;margin:0}
  body.home-page.has-account .hero h1 br{display:none}
  body.home-page.has-account .hero h1 span::before{content:' '}
  body.home-page.has-account .hero-copy>p:not(.eyebrow){grid-row:3;margin:0;font-size:.875rem;max-width:780px}
  body.home-page.has-account .hero-actions{grid-column:2;grid-row:2/4;margin:0}
  body.home-page .home-overview{display:grid;grid-template-columns:minmax(0,2.2fr) minmax(280px,1fr);gap:18px;align-items:stretch;margin-bottom:24px}
  body.home-page .home-overview:not(:has(>section:not([hidden]))){grid-template-columns:1fr}
  body.home-page #home-journey,body.home-page #last-activity{min-block-size:0}
  body.home-page #home-journey{min-height:280px}
  body.home-page #home-journey>.loading-panel{min-block-size:280px;margin:0}
  body.home-page #home-journey>.journey-panel{min-height:280px;margin:0;padding:18px 20px}
  body.home-page #home-journey .journey-heading{gap:14px;margin-bottom:14px}
  body.home-page #home-journey .journey-heading h2{font-size:1.2rem}
  body.home-page #home-journey .journey-heading .eyebrow{margin-bottom:4px}
  body.home-page #home-journey .journey-avatar{width:48px;height:48px;flex-basis:48px;border-radius:14px;box-shadow:0 3px 0 var(--line)}
  body.home-page #home-journey .journey-avatar svg{width:40px;height:40px}
  body.home-page #home-journey .journey-grid{gap:14px}
  body.home-page #home-journey .journey-level,body.home-page #home-journey .journey-daily{padding:12px 16px}
  body.home-page #home-journey .journey-amount{margin-bottom:8px}
  body.home-page #home-journey .journey-amount strong{font-size:1.65rem}
  body.home-page #home-journey .journey-caption{margin-top:6px;line-height:1.5}
  body.home-page #home-journey .journey-next-goal{margin-top:10px;padding-top:10px}
  body.home-page #home-journey .journey-next-goal .journey-caption{margin-top:2px}
  body.home-page #home-journey .journey-daily h3{font-size:1rem}
  body.home-page #home-journey .journey-steps{gap:8px;margin:10px 0}
  body.home-page #home-journey .journey-steps>span{width:30px;height:30px}
  body.home-page #home-journey .journey-actions{margin-top:12px;gap:10px}
  body.home-page #home-journey .journey-actions>a{padding:10px 14px;font-size:.8125rem}
  body.home-page #home-journey .journey-rules{margin-top:8px}
  body.home-page #last-activity{margin:0;padding:22px;flex-direction:column;align-items:stretch;justify-content:space-between;gap:14px}
  body.home-page #last-activity h2{font-size:1.3rem}
  body.home-page #last-activity .last-activity-actions{flex-direction:row;flex-wrap:wrap;gap:10px}
  body.home-page #last-activity .last-activity-actions>a{font-size:.8125rem;padding:10px 14px;flex:1 1 auto;text-align:center}
  .home-page .catalog{padding-top:24px}
  .home-page .section-intro{margin-bottom:18px}
  .home-catalog-tools{grid-template-columns:minmax(200px,1.4fr) minmax(180px,.8fr) minmax(0,2.5fr);padding:16px;gap:12px 18px;align-items:start}
  .home-audience-filters{grid-column:auto;grid-template-columns:minmax(0,.9fr) minmax(0,1.2fr);gap:12px}
  .home-catalog-tools .catalog-audience-filter{padding:6px 8px 8px}
  .home-catalog-tools .catalog-filter-options{gap:6px}
  .home-catalog-tools .catalog-filter-options label{gap:5px;padding:5px 7px}
  .home-catalog-tools .home-audience-help{font-size:.75rem;line-height:1.6}
  .home-catalog-tools .home-filter-actions{grid-column:1;grid-row:2;align-self:center}
  .home-catalog-tools .home-audience-help{grid-column:2/-1;grid-row:2;align-self:center}
}
@media screen and (min-width:1500px){
  body.home-page #home-journey>.journey-panel{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.7fr);gap:10px 18px;align-content:center}
  body.home-page #home-journey .journey-heading{grid-column:1;grid-row:1;margin:0}
  body.home-page #home-journey .journey-grid{grid-column:2;grid-row:1/4}
  body.home-page #home-journey .journey-actions{grid-column:1;grid-row:2;margin:0}
  body.home-page #home-journey .journey-rules{grid-column:1;grid-row:3;margin:0}
  .home-catalog-tools{grid-template-columns:minmax(220px,.8fr) minmax(180px,.6fr) minmax(0,3.4fr)}
  .home-audience-filters{grid-template-columns:minmax(0,1fr) minmax(0,1.5fr)}
  .home-catalog-tools .audience-badge{padding-inline:6px}
}
/* Topic tools share a row; filters still wrap instead of truncating labels. */
@media screen and (min-width:1100px){
  .topic-page .topic-breadcrumb{padding-top:18px}
  .topic-page main.home-page>.hero{padding:18px 0 24px}
  .topic-page .hero h1{font-size:2.4rem;line-height:1.2;margin-bottom:12px}
  .topic-page .hero-copy>p:not(.eyebrow){max-width:1000px;line-height:1.65}
  .topic-page .hero .eyebrow{margin-bottom:12px}
  .topic-page .catalog-audience{display:flex;flex-wrap:wrap;gap:12px 24px;margin-bottom:0}
  .topic-page .catalog{padding-top:24px}
  .topic-page .topic-next{padding:18px 20px;margin-bottom:18px}
  .topic-page .catalog-tools{grid-template-columns:minmax(240px,1fr) minmax(0,1.5fr);align-items:start;gap:12px 24px;margin-bottom:20px}
  .topic-page .search-box{grid-column:1;max-width:none}
  .topic-page .topic-practice-tools{grid-column:2;grid-row:1;grid-template-columns:minmax(200px,1fr) minmax(180px,.8fr);gap:8px 14px}
  .topic-page .topic-quick-filter{min-height:46px;padding:6px 12px}
  .topic-page .topic-practice-help{font-size:.75rem}
  .topic-page .filters{grid-column:1/-1}
}
/* Practical work needs width; reading exercises deliberately retain their measure. */
@media screen and (min-width:1200px){
  .exercise-main.is-practical,body.exercise-focus .exercise-main.is-practical{max-width:var(--lab-page-width)}
  .exercise-main.is-practical .exercise-nav{margin-bottom:14px}
  .exercise-main.is-practical .Titles{padding-top:6px;padding-bottom:10px}
  .exercise-main.is-practical .Titles h1{font-size:2rem;margin-bottom:8px}
  .exercise-main.is-practical .Titles .eyebrow{margin-bottom:10px}
  .exercise-main.is-practical .exercise-description{margin:0 0 10px}
  .exercise-main.is-practical .instructions-panel{padding:12px 18px;margin-bottom:12px}
  .exercise-main.is-practical #activity-root{padding:20px}
  .practical-workspace{gap:22px}
  .practical-code{min-height:clamp(360px,46vh,600px)}
  .practical-prompt{margin-bottom:16px;max-width:110ch}
  .practical-checks{grid-template-columns:repeat(2,minmax(0,1fr))}
  .practical-checks li{grid-template-columns:92px minmax(0,1fr) auto}
  .practical-panel-heading{padding:12px 16px}
}
.practical-jumps{display:flex;flex-wrap:wrap;gap:10px;margin-right:auto}
.exercise-main.is-practical .exercise-toolbar{align-items:center;flex-wrap:wrap}
.exercise-focus .practical-jumps{pointer-events:auto;background:var(--paper);border-radius:8px}
.practical-code,.practical-requirements{scroll-margin-top:76px}
.practical-requirements:focus-visible{outline:3px solid var(--focus);outline-offset:5px}
@media screen and (max-width:600px){.practical-jumps{width:100%}.practical-jumps>*{flex:1 1 150px}.practical-code,.practical-requirements{scroll-margin-top:190px}.exercise-main.is-practical .exercise-toolbar{flex-direction:column}}
/* Teacher workspace: show the primary results before the charts and reports. */
@media screen and (min-width:1200px){
  .dashboard-heading{margin-bottom:18px}
  .dashboard-jump-nav{margin-bottom:18px}
  .dashboard-stats>div{padding:16px 20px}
  .dashboard-stats span{margin-bottom:8px}
  #dashboard-filters{padding:20px}
  #dashboard-filters h2{font-size:1.3rem;margin:0 0 8px}
  #dashboard-filters .dashboard-note{margin:0 0 14px}
  .dashboard-filters{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px 18px}
  .dashboard-filter-actions{flex-wrap:wrap;align-items:center}
  .dashboard-filter-actions>a{padding:0}
  .dashboard-results{margin-top:24px}
  #dashboard-results .dashboard-table-scroll{max-height:65vh;overscroll-behavior-x:contain}
  #dashboard-results .dashboard-table thead th{position:sticky;top:0;z-index:2;box-shadow:0 1px 0 var(--line)}
  .dashboard-table th,.dashboard-table td{padding:12px}
  .dashboard-visuals-heading{margin-top:24px}
}
@media screen and (min-width:1500px){
  .dashboard-chart-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
  .dashboard-chart{padding:18px}
  .dashboard-chart-wide{grid-column:1/-1}
  .chart-donut-layout{flex-direction:column;gap:4px;min-height:0}
  .chart-donut{width:170px}
  .chart-legend-stacked{flex-direction:row;gap:14px}
  .chart-legend-stacked strong{margin-top:4px}
  .chart-bars{gap:12px}
  .chart-histogram{margin-top:28px}
}
/* Personal page: optional avatar editing and easier access to each section. */
.personal-avatar-details>summary{cursor:pointer;min-height:44px;padding:12px 0;font-weight:700;color:var(--accent)}
@media screen and (min-width:1200px){
  .personal-heading{position:relative;padding-right:240px;margin-bottom:16px}
  .personal-heading>button{position:absolute;right:0;top:30px}
  .personal-heading h1{font-size:2.1rem;margin-bottom:8px}
  .personal-nav{margin:16px 0;gap:8px}
  .personal-main .journey-panel{padding:22px;margin-bottom:22px}
  .personal-main .journey-heading{margin-bottom:16px}
  .personal-main .journey-grid{gap:16px}
  .personal-main .journey-level,.personal-main .journey-daily{padding:16px 20px}
  .personal-main .badge-grid{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px}
  .personal-main .journey-badge{padding:16px 12px}
  .personal-main .journey-badge p:not(.badge-state){min-height:0}
  .personal-main .journey-badges{margin-top:20px;padding-top:20px}
  .personal-main .journey-actions{margin-top:16px}
  .personal-main .avatar-picker{padding:20px 24px}
  .personal-main .avatar-picker h2{margin:0 0 8px}
  .personal-main .avatar-picker>p{margin:0;max-width:100ch}
  [data-personal-page] .avatar-options{max-width:none;grid-template-columns:repeat(auto-fill,minmax(96px,1fr))}
}
@media print{.practical-jumps,.personal-avatar-details{display:none}.home-overview{display:block}}

/* Breadcrumb shared by topics, games and tools: section / page. */
.site-breadcrumb{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;padding-top:22px;font-size:.8125rem;color:var(--muted)}.site-breadcrumb a{font-weight:650}.site-breadcrumb [aria-current]{color:var(--ink)}
