/* Courses: the home page's band (cards) and the /courses/ hub (each course, its lessons in beat order), then the skills split. Light (D-56 (was D-31)). */
.course-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:16px}
.course-card{display:flex;flex-direction:column;height:100%;min-height:44px;border:1px solid var(--pl-hair);border-radius:12px;overflow:hidden;background:#fff;color:var(--pl-fg);text-decoration:none;transition:box-shadow .15s,border-color .15s}
.course-card .pic{aspect-ratio:4/3;background:var(--pl-raised);overflow:hidden}
.course-card .pic img{display:block;width:100%;height:100%;object-fit:cover}
/* the course pictures are one counter scene (studio stage plate); the subject sits mid-frame, so the tile crops in on it */
.course-card .pic img[src*='/assets/courses/'],.course-pic img[src*='/assets/courses/']{transform:scale(1.75);transform-origin:50% 47%}
.course-card .pic{overflow:hidden}
.course-card .body{display:flex;flex-direction:column;gap:6px;padding:12px 14px 16px;flex:1}
.course-card .eyebrow{margin:0;font:600 11px/1.3 var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--pl-champ)}
.course-card .via{margin:auto 0 0;padding-top:6px;font:400 13px/1.4 var(--sans);color:var(--pl-mut)}
.band-head.course-head{display:grid;grid-template-columns:minmax(0,1fr);gap:6px 24px;align-items:center;align-content:center}
.band-head.course-head>*{margin:0}
.course-pic{width:100%;max-width:320px;aspect-ratio:4/3;overflow:hidden;border-radius:12px;border:1px solid var(--pl-hair)}
.course-pic img{display:block;width:100%;height:100%;object-fit:cover}
@media (min-width:900px){.band-head.course-head{grid-template-columns:280px minmax(0,1fr);grid-template-rows:auto auto 1fr}.band-head.course-head .course-pic{grid-row:1/span 3;grid-column:1}.band-head.course-head>:not(.course-pic){grid-column:2}.band-head.course-head h2{align-self:end}}
.course-card:hover,.course-card:focus-visible{border-color:var(--pl-gold);box-shadow:0 6px 18px rgba(31,29,26,.14)}
.course-card h3{margin:0;font:500 21px/1.2 var(--display)}
.course-card .promise{margin:0;font:400 15px/1.45 var(--sans);color:var(--pl-mut)}

.courses-band{background:var(--pl-bg)}
.courses-band .courses-more{margin:20px 0 0}
.courses-band .courses-more a{display:inline-flex;align-items:center;min-height:44px;font-weight:600}
.page-head h1{margin:0 0 12px;font:500 clamp(32px,4.4vw,48px)/1.1 var(--display)}
.lessons{list-style:none;margin:0;padding:0;counter-reset:l}
.lessons li{counter-increment:l;display:grid;grid-template-columns:44px minmax(0,1fr);gap:2px 8px;padding:14px 0;border-top:1px solid var(--pl-hair);scroll-margin-top:16px}
.lessons li::before{content:counter(l);grid-row:1/span 2;font:600 15px/1.5 var(--sans);color:var(--pl-gold)}
.l-t{font:500 18px/1.4 var(--sans)}
.l-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 14px;font:400 14px/1.4 var(--sans);color:var(--pl-mut)}
.l-meta a{display:inline-flex;align-items:center;min-height:44px}
.state{padding:2px 10px;border:1px solid var(--pl-hair);border-radius:999px;font:500 12px/1.6 var(--sans);color:var(--pl-mut)}
.state.ready{border-color:var(--pl-gold);color:var(--pl-gold);font-weight:600}
.course-sec .band-head{align-items:baseline}.course-sec .band-head .lead{flex:1 1 320px}
@media (max-width:1100px){.course-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:640px){.course-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.course-card h3{font-size:17px}.course-card .promise{font-size:14px}}

/* skills: the list is the stage-left, the detail is the workspace */
.split{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:clamp(16px,3vw,40px);align-items:start}
.pane{background:var(--pl-surf);border:1px solid var(--pl-hair);border-radius:16px}
.list-pane{padding:14px}
.grps{display:flex;gap:8px;flex-wrap:wrap;padding:2px 2px 14px}
.grp{min-height:44px;padding:0 16px;border:1px solid var(--pl-hair);border-radius:999px;background:var(--pl-bg);
  font:500 14px/1 var(--sans);color:var(--pl-fg);cursor:pointer}
.grp .t-short{display:none}
.grp[aria-selected="true"]{background:var(--pl-pop);border-color:var(--pl-pop);color:var(--pl-on);}
.sk-list{list-style:none;margin:0;padding:0 4px 0 0;counter-reset:s;max-height:min(560px,70vh);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--pl-hair) transparent}
.sk-list[hidden]{display:none}
.sk-list li{counter-increment:s;border-top:1px solid var(--pl-hair)}
.sk{position:relative;display:flex;align-items:center;gap:14px;width:100%;min-height:52px;padding:8px 10px 8px 0;border:0;background:none;text-align:left;cursor:pointer;color:var(--pl-fg);font:400 16px/1.35 var(--sans)}
.sk::before{content:counter(s,decimal-leading-zero);flex:0 0 34px;padding-left:10px;font:500 14px/1 var(--mono);color:var(--pl-mut)}
.sk.gap{color:var(--pl-mut)}
.sk[aria-pressed="true"]{color:var(--pl-fg);background:var(--pl-surf);box-shadow:inset 3px 0 0 var(--pl-pop)}
.sk[aria-pressed="true"]::before{color:var(--pl-pop);font-size:18px;}
.sk:hover{background:var(--pl-surf)}
.detail-pane{padding:clamp(22px,3vw,40px);min-height:300px;position:sticky;top:16px}
.sk-detail[hidden]{display:none}
.sk-detail .guide{color:var(--pl-pop)}.sk-detail .guide::before{background:var(--pl-pop)}
.sk-detail h3{margin:0 0 22px;font:500 clamp(30px,3.6vw,46px)/1.08 var(--display);color:var(--pl-fg)}
.sk-detail .chips{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 22px}
.sk-detail .src{margin:24px 0 0;font:400 13px/1.55 var(--sans);color:var(--pl-mut)}
.ln-src{margin:28px auto 0;font:400 12.5px/1.6 var(--sans);color:var(--pl-mut)}

@media (max-width:899px){
  .split{grid-template-columns:minmax(0,1fr)}.detail-pane{position:static;min-height:0}.sk-list{max-height:312px}
}
@media (max-width:640px){.grp .t-long{display:none}.grp .t-short{display:inline}}
/* Sessions (D-32): a cook-along is one recipe cooked once, its lessons the stops at its steps; a section is not cooking and says so. */
.sessions{list-style:none;margin:0;padding:0;display:grid;gap:20px}
.session{border:1px solid var(--pl-hair);border-radius:12px;padding:16px;background:var(--pl-raised)}
.session.section{background:#fff;border-style:dashed}
.ca-head{display:grid;grid-template-columns:96px minmax(0,1fr);gap:14px;align-items:center;margin-bottom:6px}
.ca-pic{width:96px;aspect-ratio:4/3;border-radius:8px;overflow:hidden;background:var(--pl-hair)}
.ca-pic.none{background:transparent;border:1px solid var(--pl-hair)}
.ca-pic img{width:100%;height:100%;object-fit:cover;display:block}
.session h3{margin:2px 0;font-size:20px;line-height:1.25}
.session h3 a{color:inherit}
.session .eyebrow{margin:0;font:600 11px/1.3 var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--pl-champ)}
.ca-intro{margin:2px 0;font:400 15px/1.45 var(--sans);color:var(--pl-mut)}
.session .stat{margin:0}
.session .lessons li:first-child{border-top:0}
.course-head .shape{margin:4px 0 0;font:500 15px/1.45 var(--sans);color:var(--pl-fg)}
.stops li{grid-template-columns:44px minmax(0,1fr)}
.stops li::before{content:none}
.stops .at{grid-row:1/span 3;font:600 12px/1.35 var(--sans);color:var(--pl-champ);padding-top:3px}
.l-stop{font:400 15px/1.45 var(--sans);color:var(--pl-mut)}
@media (min-width:900px){.session{padding:20px 24px}.ca-head{grid-template-columns:128px minmax(0,1fr)}.ca-pic{width:128px}.stops li{grid-template-columns:96px minmax(0,1fr)}}
/* Stop cards on a recipe's method (D-32): the course's one-line card at the step it belongs to. */
.stop-card{margin:8px 0 4px 44px;padding:10px 12px;border-left:3px solid var(--pl-gold);background:var(--pl-raised);border-radius:0 8px 8px 0}
.stop-card p{margin:0}
.sc-eyebrow{font:600 11px/1.3 var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--pl-champ)}
.sc-t{font:600 15px/1.4 var(--sans);color:var(--pl-fg)}
.sc-s{font:400 15px/1.45 var(--sans);color:var(--pl-fg)}
.sc-more{display:inline-block;margin-top:4px;min-height:24px;font:500 14px/1.6 var(--sans);color:var(--pl-champ)}
.stops-before,.stops-after{margin:8px 0}
.stops-before .stop-card,.stops-after .stop-card{margin-left:0}
.sb-h{margin:0 0 4px;font:600 13px/1.4 var(--sans);color:var(--pl-mut)}
.sec-head{grid-column:1/-1}
.stop-card{display:none}
.stops-before,.stops-after{display:none}
.ca-switch{border:0;margin:0 0 12px;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.ca-switch legend{padding:0;margin-bottom:6px;font:600 13px/1.4 var(--sans);color:var(--pl-mut)}
.ca-switch .chip{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 14px;border:1px solid var(--pl-hair);border-radius:22px;background:#fff;font:500 14px/1 var(--sans);color:var(--pl-fg);cursor:pointer}
.ca-switch input{accent-color:var(--pl-champ)}
.ca-switch .chip:has(input:checked){border-color:var(--pl-champ);background:var(--pl-raised)}

/* Coming soon (courses.json courses_open:false): a gold-on-ink banner held over the courses while they are inert underneath.
   The words carry the state, not the colour; #ECC974 on #1F1D1A is about 10:1. Sticky, so it stays in view over the long hub. */
.soon-under{opacity:.45;filter:grayscale(.6);pointer-events:none;user-select:none}
.soon-wrap{position:relative;overflow:hidden}
.soon-banner{position:absolute;top:min(50%,320px);left:-25%;width:150%;margin:0;padding:0;transform:translateY(-50%) rotate(-8deg);z-index:2;pointer-events:none}   /* a sash across the whole section (Glen 2026-10-30: "I want a sash going across the whole section") */
.soon-banner span{display:block;text-align:center;padding:clamp(14px,2vw,22px) 0;background:var(--pl-fg);color:var(--pl-fill);font:700 clamp(22px,3.4vw,40px)/1.1 var(--sans);letter-spacing:.18em;text-transform:uppercase;box-shadow:0 8px 28px rgba(31,29,26,.35)}

/* IX-06 (C-27): every animation and transition has an off switch */
@media (prefers-reduced-motion: reduce){*{transition:none !important;animation:none !important}}
/* /courses/ catalogue (D-58, lane G3): 3 a row at desktop, 1 a row at phone (W-10); card = picture, title, one sentence, one line (W-11) */
.course-grid.three{grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}
.courses-list{padding-top:0}
/* gap 70 (2026-11-06, the automated reviewer's HOLD): a 3-line clamp cut every card mid-sentence and its 6px bottom padding showed a sliver
   of the clipped 4th line. The promise is one or two sentences from the record, so it shows whole; cards in a row may differ in height, and nothing is cut. */
.tile.course .promise,.tile.path .promise{margin:0 0 6px;padding:4px 14px 0;font:400 16px/1.5 var(--sans);color:var(--pl-fg)}
/* gap 70: a long state line ("2 courses · 42 lessons · 1 coming") wrapped as two inline fragments and ran past the card's edge; as a block
   it wraps inside the card */
.tile .meta .state{display:inline-block;max-width:100%;box-sizing:border-box;border-radius:12px}
.tile.course .meta{padding:0 14px 14px;margin-top:auto}
.tile.course .meta .state{font:500 13px/1.4 var(--sans);color:var(--pl-mut);letter-spacing:.01em;text-transform:none}
.tile.course .meta .state.live{color:var(--pl-champ)}
.page-head .stat{margin:8px 0 0;font:500 14px/1.4 var(--sans);color:var(--pl-mut)}
@media (max-width:1100px){.course-grid.three{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){.course-grid.three{grid-template-columns:minmax(0,1fr);gap:14px}}
.tile.course.soon{opacity:.82}

/* lane G4 (2026-11-04): W-15 the catalogue opens with a band; W-16 the lede is capped; W-18 the card lifts on hover, never under reduced motion */
.page-head.catalogue{background:var(--pl-surf);border-top:0;border-bottom:1px solid var(--pl-hair);padding-bottom:clamp(28px,4vw,44px)}
.page-head.catalogue .lead{max-width:60ch;font:400 17px/1.5 var(--sans)}
.page-head .lead{max-width:60ch}
.tile.course,.tile.path{transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}
.tile.course:hover,.tile.course:focus-visible,.tile.path:hover,.tile.path:focus-visible{transform:translateY(-3px);box-shadow:0 10px 24px rgba(31,29,26,.12)}
@media (prefers-reduced-motion: reduce){.tile.course:hover,.tile.course:focus-visible,.tile.path:hover,.tile.path:focus-visible{transform:none}}

/* D-60 / lane H1 (2026-11-04): the catalogue shows the program's arc — one heading per level, the planned courses named */
.courses-list.level{padding-top:clamp(20px,3vw,32px);padding-bottom:0}
.courses-list.level:last-of-type{padding-bottom:clamp(36px,5vw,64px)}
h2.lvl{margin:0 0 14px;font:500 clamp(22px,2.6vw,28px)/1.2 var(--display);display:flex;align-items:baseline;gap:12px}
h2.lvl .n{font:600 13px/1 var(--sans);color:var(--pl-champ);letter-spacing:.06em;border:1px solid var(--pl-hair);border-radius:999px;padding:6px 10px}
.soon-line{margin:12px 0 0;font:italic 400 16px/1.5 var(--sans);color:var(--pl-mut);max-width:60ch}

/* lane G5 (2026-11-04): W-20 path cards on the catalogue; W-21 the path page's ordered steps */
.tile.path{display:flex;flex-direction:column;min-height:200px;padding-top:18px;border:1px solid var(--pl-hair);border-radius:12px;background:#fff;color:var(--pl-fg);text-decoration:none}
.tile.path .label{margin:0;padding:0 14px;font:600 12px/1.3 var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--pl-champ)}
.tile.path h3{margin:6px 0 0;padding:0 14px;font:500 22px/1.2 var(--display)}
.tile.path .meta{padding:0 14px 16px;margin-top:auto}
.tile.path .meta .state{font:500 13px/1.4 var(--sans);color:var(--pl-mut);letter-spacing:.01em;text-transform:none}
.tile.path .meta .state.live{color:var(--pl-champ)}
.path-head .crumb{margin:0 0 8px;font:500 13px/1.4 var(--sans);color:var(--pl-mut)}
.path-head .crumb a{color:var(--pl-champ)}
.steps{list-style:none;margin:0;padding:0;max-width:760px}
.steps .step{border-top:1px solid var(--pl-hair)}
.steps .step:last-child{border-bottom:1px solid var(--pl-hair)}
.steps .step>a,.steps .step>.n{display:grid}
.steps .step>a{grid-template-columns:44px minmax(0,1fr) 24px;gap:14px;align-items:start;padding:18px 0;color:inherit;text-decoration:none}
.steps .step:not(:has(a)){display:grid;grid-template-columns:44px minmax(0,1fr);gap:14px;align-items:start;padding:18px 0}
.steps .n{width:36px;height:36px;border-radius:999px;display:grid;place-items:center;font:600 14px/1 var(--sans);color:var(--pl-champ);border:1px solid var(--pl-hair);background:#fff}
.steps .live .n{background:var(--pl-champ);color:#fff;border-color:var(--pl-champ)}
.steps .planned{opacity:.72}
.steps h2{margin:4px 0 2px;font:500 20px/1.25 var(--display)}
.steps .promise{margin:0;font:400 16px/1.5 var(--sans);color:var(--pl-fg);max-width:60ch}
.steps .meta{margin:6px 0 0}
.steps .meta .state{font:500 13px/1.4 var(--sans);color:var(--pl-mut)}
.steps .meta .state.live{color:var(--pl-champ)}
.steps .chev{font:400 28px/1 var(--display);color:var(--pl-mut);align-self:center}
.steps .step>a:hover h2,.steps .step>a:focus-visible h2{color:var(--pl-champ)}

/* Move (D-64, plan step 2): the peaks list — a table a reader scans nearest-first; the attribution is part of the page, not a footnote */
.peaks-list .inner{padding-top:24px;padding-bottom:40px}
table.peaks{width:100%;border-collapse:collapse;font:400 15px/1.45 var(--sans)}
table.peaks th{text-align:left;padding:10px 12px;border-bottom:2px solid var(--pl-hair);font:600 12px/1.3 var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--pl-champ)}
table.peaks td{padding:12px;border-bottom:1px solid var(--pl-hair);vertical-align:top}
table.peaks td.n{font:500 18px/1.2 var(--display);width:6ch}
table.peaks .mut,table.peaks .upd{color:var(--pl-mut);font-size:13px}
table.peaks a.go{display:inline-block;margin-top:4px;color:var(--pl-champ);font-weight:600}
.peaks-list .attribution{margin:28px 0 0;max-width:70ch;font:400 13px/1.5 var(--sans);color:var(--pl-mut)}
@media (max-width:760px){table.peaks thead{position:absolute;left:-9999px}table.peaks tr{display:block;padding:10px 0;border-bottom:1px solid var(--pl-hair)}table.peaks td{display:block;border:0;padding:2px 0}table.peaks td.n{width:auto}table.peaks td.n::after{content:" mi from Boulder";font:400 13px/1.4 var(--sans);color:var(--pl-mut)}}
/* ---- the summit guide + bundle (plan step 3) ---- */
.terrain{margin:0;background:#0A0E10}.terrain img{display:block;width:100%;height:auto;max-height:70vh;object-fit:cover}
.terrain figcaption{max-width:1100px;margin:0 auto;padding:8px 16px 12px;font:400 12px/1.5 var(--sans);color:#C9BFA8}figure.terrain figcaption a,figure.terrain figcaption a:visited{color:#ECC974 !important}
.page-head .stats{list-style:none;display:flex;flex-wrap:wrap;gap:10px 28px;margin:18px 0 0;padding:0}
.page-head .stats li{display:flex;flex-direction:column;font:400 13px/1.3 var(--sans);color:var(--pl-mut)}
.page-head .stats b{font:600 20px/1.2 var(--sans);color:var(--pl-ink);letter-spacing:-.01em}
.route-guide .inner{padding-top:24px;padding-bottom:48px;max-width:70ch;text-transform:none;letter-spacing:0;color:var(--pl-ink)}
.route-guide p,.route-guide li,.route-guide label{text-transform:none;letter-spacing:0;color:var(--pl-ink)}
.route-guide h2{margin:34px 0 10px;font:600 22px/1.2 var(--serif)}
.route-guide p{font:400 16px/1.55 var(--sans);margin:0 0 10px}
.route-guide .mut,.route-guide .upd{color:var(--pl-mut);font-size:14px}.route-guide p.mut{max-width:50ch}
.route-guide .manager{padding:12px 14px;border-left:3px solid var(--pl-champ);background:rgba(0,0,0,.03)}
.route-guide .house{font-size:14px;color:var(--pl-mut);border:1px dashed var(--pl-hair);padding:8px 12px}
.route-guide a.go{font-weight:600;color:var(--pl-champ);text-decoration:underline}
.route-guide .fuel{list-style:none;margin:12px 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}
.route-guide .fuel-card{border:1px solid var(--pl-hair);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:6px;font:400 14px/1.4 var(--sans)}
.route-guide .fuel-card label{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;cursor:pointer}
.route-guide .fuel-card .name{font-weight:600}.route-guide .fuel-card .kcal{color:var(--pl-mut);font-size:13px;flex-basis:100%}
.route-guide .fuel-card img{width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;border-radius:6px}
.route-guide .fuel-card a{font-size:13px;display:inline-block;min-height:24px;line-height:24px}
.route-guide .fuel-card input[type=checkbox]{width:24px;height:24px;margin:0;accent-color:var(--pl-champ)}
.bundle p{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.bundle label{min-width:12ch;font:600 14px/1.3 var(--sans)}
.bundle input{font:400 16px/1.3 var(--sans);padding:8px 10px;border:1px solid var(--pl-hair);border-radius:8px;background:#fff;color:var(--pl-ink)}
.bundle .exits{gap:8px;margin-top:6px}
.bundle button{font:600 14px/1.2 var(--sans);padding:10px 14px;border-radius:999px;border:1px solid var(--pl-champ);background:transparent;color:var(--pl-champ);cursor:pointer;min-height:44px}
.bundle button:hover,.bundle button:focus-visible{background:var(--pl-champ);color:#fff}
.bundle .status{display:block;font:500 14px/1.4 var(--sans);color:var(--pl-ink);padding:8px 12px;border-radius:8px;background:rgba(0,0,0,.04)}.bundle .status[hidden]{display:none}   /* the attribute must win: an empty grey bar showed (reviewer 2026-11-12) */
.route-guide .nearby{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:6px 20px;font:400 15px/1.5 var(--sans)}
.route-guide .attribution{margin:28px 0 0;font:400 13px/1.5 var(--sans);color:var(--pl-mut)}
table.peaks a.guide{color:var(--pl-champ);text-decoration:underline;text-transform:none;letter-spacing:0;font-size:inherit;display:inline-block;min-height:24px;line-height:24px}
@media print{.site-head,.site-foot,.bundle .exits,.bundle .status,.route-guide .fuel-card img,.route-guide .nearby{display:none !important}
  .page-head .stats b{font-size:16px}.route-guide .inner{max-width:none}.route-guide a::after{content:" (" attr(href) ")";font-size:11px;color:#555}
  .route-guide .fuel input:not(:checked)~*{opacity:.45}}
@media (max-width:600px){.page-head .stats{gap:8px 18px}.page-head .stats b{font-size:17px}.bundle label{min-width:100%}}
/* the four kinds of ground (move.py: trails · snow · rivers · workouts) */
.guideline{margin:12px 0 0;padding-left:1.2em;max-width:70ch}.guideline li{margin:0 0 8px;font:400 17px/1.5 var(--sans)}
table.peaks.week th[scope="row"]{text-align:left;width:5em;font:600 15px/1.4 var(--sans)}
.gauge-now{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;margin:16px 0 0}
.gauge-now .btn{min-height:44px;padding:0 18px;border-radius:999px;border:1px solid var(--pl-gold);background:var(--pl-raised,#F6EFE2);color:var(--pl-fg);font:600 15px/1 var(--sans);cursor:pointer}
.gauge-now .btn:hover,.gauge-now .btn:focus-visible{background:var(--pl-surf);outline:2px solid var(--pl-gold);outline-offset:2px}
.gauge-now .btn[disabled]{opacity:.6;cursor:wait}
/* places, not spreadsheets (move.py place_head / place_card; Glen 2026-11-05 "ZOMBIE PAGES") */
.page-head.pictured{position:relative;overflow:hidden;background:#0A0E10;color:#EFE4D0;border:0;padding:clamp(48px,8vw,110px) clamp(16px,3vw,32px) clamp(28px,4vw,48px);min-height:min(52vh,460px);display:flex;align-items:flex-end}
.page-head.pictured .back{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 55%;z-index:0}
.page-head.pictured::after{content:"";position:absolute;inset:0;z-index:0;background:linear-gradient(180deg,rgba(10,14,16,.25) 0%,rgba(10,14,16,.45) 55%,rgba(10,14,16,.85) 100%)}
.page-head.pictured .inner{position:relative;z-index:1}
.page-head.pictured h1,.page-head.pictured .lead,.page-head.pictured .stat,.page-head.pictured .crumb{color:#EFE4D0}
.page-head.pictured .crumb a{color:#ECC974}.page-head.pictured .lead{max-width:60ch;font:400 clamp(17px,1.5vw,20px)/1.5 var(--sans);color:#E3D8C2}
.page-head.pictured .stat{color:#D9CDB6}
.page-head.plain{background:var(--pl-surf)}
.band.places{padding-top:clamp(24px,4vw,40px)}
.place-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px}
.place-grid.three{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}
.place-grid.week{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}
.place{display:flex;flex-direction:column;gap:6px;min-width:0;padding:18px 18px 14px;border:1px solid var(--pl-hair);border-radius:14px;background:var(--pl-raised,#F6EFE2)}
.place h3{margin:0;font:500 clamp(19px,1.6vw,22px)/1.2 var(--display);text-wrap:balance}
.place h3 a{color:inherit;text-decoration:none;text-underline-offset:3px}.place h3 a:hover{text-decoration:underline;color:var(--pl-gold)}
.place .kicker{margin:0;font:500 12px/1.4 var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--pl-mut)}
.place .fig{margin:6px 0 0;font:400 15px/1.2 var(--sans);color:var(--pl-mut)}.place .fig strong{font:500 clamp(30px,3vw,38px)/1 var(--display);color:var(--pl-fg);font-variant-numeric:tabular-nums;letter-spacing:-.01em;margin-right:4px}
.place .meta{margin:0;font:400 14px/1.5 var(--sans);color:var(--pl-fg)}.place .meta .upd,.place .meta .th{color:var(--pl-mut)}
.place .acts{margin:auto 0 0;padding-top:8px;display:flex;flex-wrap:wrap;gap:4px 10px}
.place .acts a{display:inline-flex;align-items:center;min-height:44px;padding:0 12px;border-radius:999px;border:1px solid var(--pl-hair);font:600 14px/1 var(--sans);color:var(--pl-fg);text-decoration:none;background:#fff}
.place .acts a.dir{background:#ECC974;border-color:#ECC974;color:#0A0E10}
.place .acts a:hover,.place .acts a:focus-visible{border-color:var(--pl-gold);color:var(--pl-gold);outline:2px solid var(--pl-gold);outline-offset:2px}.place .acts a.dir:hover{color:#0A0E10;filter:brightness(1.05)}
.place.day h3{font-size:16px;letter-spacing:.08em;text-transform:uppercase}.place.asks .fig strong{font-size:28px}
@media (max-width:480px){.place-grid{grid-template-columns:1fr}.place-grid.week{grid-template-columns:repeat(2,1fr)}}
/* how to choose · what the classifications mean (move.explain_html) */
.band.explain h2{margin:0 0 12px}.choose{margin:0;padding-left:1.3em;max-width:68ch}.choose li{margin:0 0 10px;font:400 17px/1.55 var(--sans)}
dl.classes{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px 24px;margin:0}
dl.classes .cls{padding:12px 14px;border-left:3px solid #ECC974;background:var(--pl-raised,#F6EFE2);border-radius:0 10px 10px 0}
dl.classes dt{margin:0 0 4px;font:600 15px/1.3 var(--sans)}dl.classes dd{margin:0;font:400 15px/1.5 var(--sans);color:var(--pl-fg)}
/* the weather strip (move.alerts_html) */
.band.weather{background:var(--pl-surf);border-top:1px solid var(--pl-hair)}.band.weather h2{margin:0 0 8px;font:600 15px/1.4 var(--sans);letter-spacing:.06em;text-transform:uppercase}
ul.alerts{list-style:none;margin:0;padding:0}ul.alerts li{padding:8px 0;border-top:1px solid var(--pl-hair);font:400 15px/1.5 var(--sans)}ul.alerts li:first-child{border-top:0}
/* a peak's own photograph on its card (Wikimedia Commons, open licences only, credited) */
.place .pic{margin:-18px -18px 6px;aspect-ratio:3/2;overflow:hidden;border-radius:13px 13px 0 0;background:var(--pl-surf)}.place .pic img{width:100%;height:100%;object-fit:cover;display:block}
.place .meta .credit{color:var(--pl-mut);font-size:12px}
/* the guide link inside a place heading keeps the heading's size and a real target (gate 2026-11-05: 16 px tall under the old table rule) */
.place h3 a.guide{display:inline-block;font:inherit;line-height:1.25;padding:6px 0;margin:-6px 0;min-height:24px;color:inherit;text-decoration:underline;text-decoration-color:#ECC974;text-underline-offset:4px}
/* a place's own page (move.place_page_html) */
.stats{display:flex;flex-wrap:wrap;gap:12px 28px;margin:0 0 12px}.stats .stat{display:flex;flex-direction:column;gap:2px}.stats .stat strong{font:500 clamp(26px,2.6vw,34px)/1 var(--display);font-variant-numeric:tabular-nums}.stats .stat span{font:500 12px/1.4 var(--sans);letter-spacing:.12em;text-transform:uppercase;color:var(--pl-mut)}
.band.places .acts{display:flex;flex-wrap:wrap;gap:8px 12px;margin:8px 0 0}.band.places .acts a{display:inline-flex;align-items:center;min-height:44px;padding:0 16px;border-radius:999px;border:1px solid var(--pl-hair);font:600 15px/1 var(--sans);color:var(--pl-fg);text-decoration:none;background:#fff}.band.places .acts a.dir{background:#ECC974;border-color:#ECC974;color:#0A0E10}
ul.reads{list-style:none;margin:0;padding:0}ul.reads li a{display:inline-flex;align-items:center;min-height:44px;font:500 16px/1.4 var(--sans)}
.page-head.pictured .credit{margin:8px 0 0;font:400 12px/1.4 var(--sans);color:#D9CDB6}.page-head.pictured .credit a{color:#ECC974}
.place h3 a.place-link{text-decoration-color:transparent}.place h3 a.place-link:hover{text-decoration-color:#ECC974}
/* the whole card is the door (Glen 2026-11-05 18:3x "our peaks dont actually tile card into their own information page"): the name link stretches over the card; the acts sit above it */
.place{position:relative}.place h3 a.place-link::after,.place h3 a.guide::after{content:"";position:absolute;inset:0;border-radius:14px}
.place .acts,.place .meta a{position:relative;z-index:1}.place:has(h3 a:hover){box-shadow:0 6px 24px rgba(10,14,16,.12);border-color:#ECC974}
/* warnings on the place they matter for; the learning band; the trail map */
.place .warn{display:block;margin:4px 0 0;padding:6px 10px;border-radius:8px;background:#FBE9D8;color:#5A2E00;font:500 13px/1.4 var(--sans)}
.band.learn{background:var(--pl-raised,#F6EFE2);border-bottom:1px solid var(--pl-hair)}.band.learn .course-grid.paths{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}
svg.trail-map{display:block;max-width:100%;height:auto;border-radius:12px;border:1px solid var(--pl-hair);margin:8px 0}
/* place links and the learn lead: the same target and measure rules as the guide link (gate 2026-11-05) */
.place h3 a.place-link{display:inline-block;font:inherit;line-height:1.25;padding:6px 0;margin:-6px 0;min-height:24px}
.band.learn .band-head .lead{max-width:60ch}
.place .meta .credit a{display:inline-block;min-height:24px;line-height:24px}   /* the Commons credit link is a target too (gate 2026-11-05: 20 px) */
/* /courses/all/ — the DataCamp-style catalogue (gap 67): filter bar on the list, text cards, eyebrow · title · level chip · sentence · Start/Continue */
.cat-filters{display:flex;flex-wrap:wrap;gap:14px 24px;align-items:flex-end;margin:0 0 18px;padding:16px;border:1px solid var(--pl-hair);border-radius:12px;background:#fff}
.cat-filters label,.cat-filters legend{font:600 13px/1.3 var(--sans);color:var(--pl-fg)}
.cat-q{flex:1 1 260px;margin:0;display:flex;flex-direction:column;gap:6px}
.cat-q input,.cat-sort select{font:400 16px/1.4 var(--sans);padding:9px 12px;border:1px solid var(--pl-mut);border-radius:8px;background:#fff;color:var(--pl-fg);min-height:44px}
.cat-sort{margin:0;display:flex;flex-direction:column;gap:6px}
.cat-filters .chips{border:0;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.cat-filters .chips legend{width:100%;margin-bottom:6px}
.chip-opt{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:6px 12px;border:1px solid var(--pl-hair);border-radius:999px;background:var(--pl-surf);font:500 14px/1.2 var(--sans)!important;cursor:pointer}
.chip-opt input{position:absolute;opacity:0;width:1px;height:1px}
.chip-opt:has(input:checked){background:var(--pl-fg);border-color:var(--pl-fg);color:#fff}
.chip-opt:has(input:focus-visible){outline:2px solid var(--pl-gold);outline-offset:2px}
.chip-opt .n{font:500 12px/1 var(--sans);opacity:.75}
.cat-count{margin:0 0 14px;font:400 15px/1.4 var(--sans);color:var(--pl-mut)}.cat-count b{color:var(--pl-fg);font-weight:600}
.cat-empty{margin:0 0 18px;font:400 16px/1.5 var(--sans)}
.cat-item[hidden]{display:none}
.cat-filters[hidden]{display:none}
.tile.course.cat-card{display:flex;flex-direction:column;min-height:240px;padding-top:16px;border:1px solid var(--pl-hair);border-radius:12px;background:#fff;color:var(--pl-fg);text-decoration:none}
.cat-card .eyebrow{margin:0;padding:0 14px;font:600 11px/1.3 var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--pl-champ)}
.cat-card.soon .eyebrow{color:var(--pl-mut)}
.cat-card h2{margin:6px 0 0;padding:0 14px;font:500 21px/1.2 var(--display)}
.cat-card .chip-line{margin:8px 0 2px;padding:0 14px;display:flex;flex-wrap:wrap;gap:6px}
.cat-card .chip-line span{font:500 12px/1.2 var(--sans);padding:4px 8px;border-radius:999px;background:var(--pl-raised);color:var(--pl-fg)}
.cat-card .chip-line .lvl{background:var(--pl-fg);color:#fff}
.cat-card .meta{padding:0 14px 8px;margin-top:auto}
.cat-foot{display:flex;align-items:center;gap:12px;padding:10px 14px 14px;border-top:1px solid var(--pl-hair)}
.cat-bar{flex:1;height:6px;border-radius:3px;background:var(--pl-raised);overflow:hidden}.cat-bar span{display:block;height:100%;background:var(--pl-champ)}
.cat-go{margin-left:auto;font:600 14px/1 var(--sans);padding:9px 16px;border-radius:8px;background:var(--pl-fg);color:#fff}
.cat-go.soon{background:transparent;color:var(--pl-mut);border:1px dashed var(--pl-mut)}
.courses-all{margin:18px 0 0}.courses-all a{font:600 15px/1.4 var(--sans);color:var(--pl-champ)}
@media (max-width:640px){.cat-filters{padding:12px}.cat-q{flex-basis:100%}}
.tile.course.cat-card h2,.tile.course.cat-card .eyebrow,.tile.course.cat-card .chip-line{padding-left:14px;padding-right:14px}
.tile.course.cat-card .promise{padding:4px 14px 0;margin:0 0 8px}

/* D-87 section course band (section.py): its own class, never "learn" — recipe.css's ".learn a" (a grid that centres) caught the
   linked course cards (2026-11-07, engine gap 68's cross-stylesheet failure). Room above the heading: the band sat flush on its edge. */
.band.section-courses{background:var(--pl-raised,#F6EFE2);border-bottom:1px solid var(--pl-hair);padding-top:clamp(28px,4vw,48px)}
.band.section-courses .band-head .lead{max-width:60ch}

/* more than three course cards: one row that scrolls sideways (refuter 2026-11-07: nine cards pushed the recipes ~1000 px down); cards equal height */
.section-courses .cat-grid.row{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(260px,1fr);grid-template-columns:none;overflow-x:auto;scroll-snap-type:x proximity;padding-bottom:8px}
.section-courses .cat-grid.row>.cat-item{scroll-snap-align:start}
.section-courses .cat-grid>.cat-item{display:flex}.section-courses .cat-grid>.cat-item>.cat-card{flex:1}
@media (max-width:640px){.section-courses .cat-grid.row{grid-auto-columns:78%}}
.section-courses .cat-card>.cat-foot{margin-top:auto}   /* the foot sits at the bottom whether or not a meta line is above it (coming cards have none) */

/* D-87 the Move map (move.map_html, move-map.js) */
.band.move-map-band{padding-top:clamp(20px,3vw,32px)}
.move-map{width:100%;height:clamp(360px,62vh,620px);border-radius:12px;border:1px solid var(--pl-hair);overflow:hidden;background:#EDE6D8}
.map-legend{list-style:none;margin:12px 0 4px;padding:0;display:flex;flex-wrap:wrap;gap:8px 18px;font:500 15px/1.4 var(--sans)}
.map-legend li{display:inline-flex;align-items:center;gap:8px}
.map-legend .dot{width:14px;height:14px;border-radius:50%;border:1.5px solid #1F1D1A}   /* the same dark edge as the map dots */
.maplibregl-popup-content{font:400 15px/1.4 var(--sans);padding:12px 14px}
.maplibregl-popup-content .pop-kind{margin:0;font:600 11px/1.3 var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--pl-mut)}
.maplibregl-popup-content .pop-name{margin:4px 0 0}.maplibregl-popup-content .pop-name a{display:inline-block;min-height:24px;font-weight:600;color:var(--pl-fg)}
@media (max-width:640px){.move-map{height:clamp(320px,115vw,520px)}}   /* about a screen wide, not a screen tall */

/* press gate 2026-11-07 on the Move map: the in-map credit (OM-17) in a dark ink that clears 4.5:1 and at a 24 px target (IX-03); MapLibre's own transitions stop for a reader who turns motion off (IX-06) */
.move-map .maplibregl-ctrl-attrib a{color:#1F1D1A;display:inline-flex;align-items:center;min-height:24px;padding:0 2px}
.move-map .maplibregl-ctrl-attrib-inner{line-height:24px}
@media (prefers-reduced-motion: reduce){.maplibregl-map *,.maplibregl-map{transition:none !important;animation:none !important}}
/* 2026-11-12 reviewer HOLD (/courses/ @1280, 246 px empty and a wrapped pill): hero.css sizes .paths for the home's five slices; a row of
   exactly four path cards (/courses/) takes four columns at desk width so it fills its row */
@media (min-width:1001px){.course-grid.paths:has(> li:nth-child(4):last-child){grid-template-columns:repeat(4,minmax(0,1fr))}}
/* 2026-11-12: a place head with no picture (workouts, D-92) keeps .pictured for its shape but the page's own ink, never the light-on-photo text (gate contrast 1.18) */
.page-head.pictured.plain{background:var(--pl-surf);color:var(--pl-fg);min-height:0}
.page-head.pictured.plain::after{content:none}
.page-head.pictured.plain h1,.page-head.pictured.plain .lead,.page-head.pictured.plain .stat,.page-head.pictured.plain .crumb{color:var(--pl-fg)}
.page-head.pictured.plain .crumb a{color:var(--pl-champ)}
/* 2026-11-12 reviewer pass on build 48b7b2d982b8: the photo fills its band (player.css .band>* capped img.back at 1216 px: dark side bars), the head's
   text lines up with the page's column instead of centring as a shrink-to-fit flex item, and a section heading keeps air above its card row */
.page-head.pictured .back{max-width:none;margin:0}
.page-head.pictured .inner{width:100%}
.inner>h2+.place-grid{margin-top:16px}
/* D-93 (Glen 2026-11-12 "yep fix"): the guide's card grids (Fuel, Nearby peaks) use the page's width; its prose keeps the 70ch reading measure */
.route-guide .guide-main{max-width:70ch}
.route-guide p{max-width:60ch}   /* 60ch: this face's ch is wider than its average letter, 70ch held 91 a line; each paragraph at its OWN font's 70ch: the column's ch is another font's (gate W-16 measure, 91 chars on 60f59903a356) */
@media (min-width:1000px){.route-guide .guide-top{display:grid;grid-template-columns:minmax(0,70ch) minmax(0,1fr);gap:0 56px;align-items:start}
  .route-guide .guide-side .nearby{grid-template-columns:1fr}}
/* 2026-11-13 (a hold a second session confirmed, D-95): a path card shows a visible way in */
.tile.path .meta{margin-top:auto;padding-bottom:8px}
.tile.path .go{margin:0;padding:0 14px 16px;font:600 14px/1.3 var(--sans);color:var(--pl-champ)}
.tile.path:hover .go span:first-child,.tile.path:focus-visible .go span:first-child{text-decoration:underline;text-underline-offset:3px}
/* 2026-11-13 (D-95 confirmed hold on /move/rivers/): a missing reading is not the loudest thing on the page; each card's reading time, and an old one flagged */
.place[data-reading="none"] .fig strong{font:600 18px/1.3 var(--sans);color:var(--pl-mut)}
.place .meta .read{display:block;color:var(--pl-mut);font-size:13px}
.place .meta .old{display:block;margin:4px 0 0;padding:6px 10px;border-radius:8px;background:#FBE9D8;color:#5A2E00;font:500 13px/1.4 var(--sans)}

