/* PE-3b128d6d-eb71-4a67-ac72-4a099e50f9b4 | Core(root): CORE-EXECUTION-STANDARD.md | Manifest(root): docs/MD-FILE-MANIFEST.md */
/* Teaching stage. Baseline = complete static reading (no JS, reduced motion, print, narrow).
   Enhanced modes: 'scroll' pins one scene when every year fits; 'flow' keeps the map sticky
   beside stacked years. Mode selection uses rendered geometry, never pointer type. */
.teaching{padding-top:var(--section-space);border-top:1px solid var(--rule)}
.teaching-intro{display:flex;flex-wrap:wrap;align-items:end;justify-content:space-between;gap:24px 48px}
.reading-toggle{min-height:44px;padding:0 18px;border:1px solid var(--ink);background:var(--paper);color:var(--ink);font:600 15px/1 var(--sans);cursor:pointer}
.reading-toggle[aria-pressed=true]{background:var(--ink);color:var(--paper)}
.teaching-track{margin-top:clamp(32px,4vw,56px)}
.teaching-band{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);grid-template-rows:auto minmax(0,1fr);gap:28px clamp(32px,4vw,64px);align-items:start}
.year-tabs{grid-column:1/-1;position:relative;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border-top:1px solid var(--rule)}
.year-tabs button{position:relative;min-height:56px;padding:14px 0 10px;border:0;background:none;color:var(--muted);font:400 22px/1 var(--serif);text-align:left;cursor:pointer;transition:color .3s ease}
.year-tabs button[aria-current]{color:var(--ink)}
.year-tabs button::before{content:"";position:absolute;inset:-1px 0 auto;height:2px;background:var(--ink);transform:scaleX(0);transform-origin:left;transition:transform .5s var(--ease)}
.year-tabs button[aria-current]::before{transform:scaleX(1)}
.year-progress{position:absolute;inset:auto 0 0;height:1px;background:var(--rule);display:none}
.year-progress span{display:block;height:100%;background:var(--ink);transform:scaleX(var(--stage-progress,0));transform-origin:left}

/* Teaching map ---------------------------------------------------------- */
.teaching-map{--term:44px;position:relative}
.map-grid{position:relative;display:grid;grid-template-columns:var(--term) repeat(3,minmax(0,1fr))}
.map-head,.map-row{display:contents}
.map-year{position:relative;z-index:1;padding:0 10px 12px;font:400 20px/1 var(--serif);color:var(--muted);border-bottom:1px solid var(--ink);transition:color .4s ease}
.map-head>.map-term{border-bottom:1px solid var(--ink)}
.map-term{position:relative;z-index:1;padding:12px 0;font-size:13px;font-weight:600;color:var(--muted);border-bottom:1px solid var(--rule)}
.map-cell{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start;gap:6px;min-height:46px;padding:9px 10px;border-bottom:1px solid var(--rule)}
.map-focus{position:absolute;z-index:0;top:0;bottom:0;left:var(--term);width:calc((100% - var(--term)) / 3);background:var(--field);transform:translateX(calc(var(--map-index,2) * 100%));transition:transform .7s var(--ease);opacity:0}
.map-chip{display:inline-flex;align-items:baseline;gap:6px;min-height:28px;padding:3px 9px 3px 8px;border-left:2px solid;background:var(--paper);color:var(--ink);font-size:15px;line-height:1.4;text-decoration:none;white-space:nowrap;transition:background-color .3s ease,box-shadow .3s ease}
.map-chip.deakin{border-color:var(--deakin)}
.map-chip.vu{border-color:var(--vu)}
.chip-code{font-weight:600;font-variant-numeric:lining-nums}
.chip-note{font-size:12px;color:var(--muted)}
.map-chip:hover .chip-code{text-decoration:underline;text-underline-offset:3px}
.map-lanes{display:grid;gap:14px;margin-top:22px;padding-left:var(--term)}
.lane-label{display:flex;flex-wrap:wrap;column-gap:10px;font-size:13px;line-height:1.4}
.lane-title{font-weight:600}
.lane-period{color:var(--muted)}
.lane-track{position:relative;display:block;height:6px;margin-top:6px;background:linear-gradient(90deg,transparent calc(33.333% - .5px),var(--rule) calc(33.333% - .5px) calc(33.333% + .5px),transparent calc(33.333% + .5px) calc(66.667% - .5px),var(--rule) calc(66.667% - .5px) calc(66.667% + .5px),transparent calc(66.667% + .5px)),linear-gradient(var(--rule),var(--rule)) 0 50%/100% 1px no-repeat}
.lane-bar{position:absolute;inset:0 auto 0 var(--start);width:calc(var(--end) - var(--start));min-width:8px;background:var(--ink);border-radius:3px;transform-origin:left}
.lane-bar.continues-before{border-radius:0 3px 3px 0;background:linear-gradient(90deg,rgba(38,38,38,.15),var(--ink) 8%)}
.lane-bar.soft-start{background:linear-gradient(90deg,rgba(38,38,38,.12),var(--ink) 18%)}

/* Map arrival: armed only when the map starts below the viewport. */
.teaching-map.map-armed .map-chip{opacity:0;transform:translateY(8px)}
.teaching-map.map-armed .lane-bar{transform:scaleX(0)}
.teaching-map.map-armed.map-revealed .map-chip{opacity:1;transform:none;transition:opacity .6s var(--ease) calc(var(--c,0) * 28ms),transform .6s var(--ease) calc(var(--c,0) * 28ms)}
.teaching-map.map-armed.map-revealed .lane-bar{transform:none;transition:transform 1.2s var(--ease) .35s}

/* Year records -------------------------------------------------------- */
.year-panels{display:grid;gap:clamp(48px,5vw,72px);min-width:0}
.year-numeral{font:400 clamp(64px,6.4vw,104px)/.9 var(--serif);font-variant-numeric:lining-nums tabular-nums;margin-bottom:20px;overflow:hidden}
.records{width:100%;border-collapse:collapse;table-layout:fixed;font-size:15px;line-height:1.45}
.records col,.records th:nth-child(1){width:24%}.records th:nth-child(2){width:21%}.records th:nth-child(4){width:16%}
.records th{padding:0 10px 10px 0;border-bottom:1px solid var(--ink);color:var(--muted);font-size:13px;font-weight:600;text-align:left;vertical-align:bottom}
.records td{padding:11px 10px 12px 0;border-bottom:1px solid var(--rule);vertical-align:top}
.records th.hours,.records td.hours{text-align:right;padding-right:0}
.records .unit-cell{padding-left:12px;border-left:2px solid}
.records tr.deakin .unit-cell{border-left-color:var(--deakin);background:var(--deakin-field)}
.records tr.vu .unit-cell{border-left-color:var(--vu);background:var(--vu-field)}
.unit-code{font-size:16px;font-weight:600}
.affiliation{color:var(--muted)}
.period{display:block;margin-top:2px;color:var(--muted);font-size:13px}
.activity{display:grid;grid-template-columns:5.9em minmax(0,1fr);gap:8px}
.activity+.activity{margin-top:4px}
.activity-label{font-weight:600}
.hours-value{display:block;font:400 21px/1.15 var(--serif);font-variant-numeric:lining-nums tabular-nums}
.hours-note{display:block;margin-top:3px;color:var(--muted);font-size:12px;line-height:1.35}
.records tr:target td,.records tr.is-target td{box-shadow:inset 0 -2px 0 var(--ink)}

/* Flow mode: sticky map beside stacked years ---------------------------- */
@media(min-width:1100px){.teaching.is-flow .map-column{position:sticky;top:24px;grid-row:2}.teaching.is-flow .year-panels{grid-row:2}}
.teaching.is-flow .map-focus,.teaching.is-enhanced .map-focus{opacity:1}
.teaching.is-flow .map-year[data-active],.teaching.is-enhanced .map-year[data-active]{color:var(--ink)}

/* Scroll mode: one pinned scene ------------------------------------------ */
.teaching.is-enhanced .teaching-track{height:var(--track-height)}
.teaching.is-enhanced .teaching-band{position:sticky;top:var(--sticky-top,16px);height:var(--stage-height);grid-template-rows:auto minmax(0,1fr)}
.teaching.is-enhanced .year-progress{display:block}
.teaching.is-enhanced .year-panels{position:relative;display:block;height:100%}
.teaching.is-enhanced .year-panel{position:absolute;inset:0 0 auto;visibility:hidden}
.teaching.is-enhanced .year-panel.is-active{visibility:visible}
.teaching.is-enhanced .year-panel tbody tr{opacity:0;transform:translateY(10px);transition:opacity .35s ease,transform .35s ease}
.teaching.is-enhanced .year-panel.is-active tbody tr{opacity:1;transform:none;transition:opacity .55s var(--ease) calc(var(--i) * 45ms),transform .55s var(--ease) calc(var(--i) * 45ms)}
.teaching.is-enhanced .map-chip.is-current,.teaching.is-flow .map-chip.is-current{box-shadow:0 1px 0 rgba(38,38,38,.08),0 6px 18px -10px rgba(38,38,38,.45)}

@media(max-width:1099px){
  .teaching-band{grid-template-columns:minmax(0,1fr)}
  .map-column{max-width:620px}
  .year-tabs{display:none}
  .year-panels{margin-top:clamp(24px,4vw,40px)}
}
@media(max-width:700px){
  .teaching-map{--term:34px}
  .map-year{font-size:17px;padding-inline:6px}
  .map-cell{padding:8px 4px}
  .map-chip{padding:2px 6px 2px 6px;font-size:14px}
  .chip-note{display:none}
  .records thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .records,.records tbody,.records tr,.records td{display:block;width:100%}
  .records tr{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 16px;padding:14px 0 16px;border-bottom:1px solid var(--rule)}
  .records td{padding:0;border:0}
  .records td.unit-cell{grid-column:1;padding:6px 10px 7px 12px;border-left:2px solid}
  .records td.hours{grid-column:2;grid-row:1;align-self:start;text-align:right}
  .records td.hours:empty::before{content:none}
  .records td:nth-child(2),.records td:nth-child(3){grid-column:1/-1}
  .records td:nth-child(2)::before,.records td:nth-child(3)::before,.records td.hours::before{content:attr(data-label);display:block;color:var(--muted);font-size:12px;font-weight:600;margin-bottom:2px}
}
@media(prefers-reduced-motion:reduce){.map-focus{transition:none}}
@media print{.year-tabs,.reading-toggle{display:none!important}.teaching-track{height:auto!important}.teaching-band{position:static!important;height:auto!important}.year-panel{position:static!important;visibility:visible!important}.year-panel tbody tr{opacity:1!important;transform:none!important}}
