:root{--orbit:#087f8c;--orbit-dark:#075d68;--orbit-pale:#e9f7f6;--sand:#c77720}
html,body{overflow-x:hidden}
.course-mark{display:inline-grid;place-items:center;width:2.2rem;height:2.2rem;border:1px solid currentColor;border-radius:50%;font-size:.7rem;letter-spacing:.08em}
.satellite-hero{position:relative;background:linear-gradient(120deg,#0b2441 0%,#174f69 100%)}
.satellite-hero::after{content:"";position:absolute;width:34rem;height:34rem;right:-9rem;top:-17rem;border:1px solid rgba(255,255,255,.2);border-radius:50%;box-shadow:0 0 0 4rem rgba(255,255,255,.035),0 0 0 8rem rgba(255,255,255,.025);pointer-events:none}
.satellite-hero .hero__grid{position:relative;z-index:1}.orbit-rule{width:240px;height:34px;margin:1.5rem 0;border-top:2px solid #8fe2dc;border-radius:50%;transform:rotate(-3deg)}
.course-note{font-family:Georgia,serif;font-size:1.2rem;color:var(--orbit-dark)}
.course-landscape{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center}.course-landscape span{padding:.55rem .8rem;border:1px solid var(--line);border-radius:999px;background:#fff}.course-landscape b{color:var(--orbit)}
.orbit-elements{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}.orbit-element{padding:1.1rem;border-top:3px solid var(--orbit);background:#fff}.orbit-element strong{display:block;color:var(--orbit-dark);font-size:1.1rem}
.orbit-classes{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}.orbit-class{padding:1.3rem;border:1px solid var(--line);border-radius:var(--radius);background:#fff}.orbit-class h3{color:var(--orbit-dark)}
.satellite-diagram{display:block;width:100%;height:auto;background:linear-gradient(#fbfdff,#f3faf9);border-radius:12px}
.widget svg{display:block;width:100%;min-height:330px}.widget[data-kepler-area-explorer] svg{height:390px}.widget__readout output{font-weight:800;color:var(--orbit-dark)}
.readout-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.8rem;padding:0 1rem 1rem}.readout-grid div{padding:.75rem;border-top:2px solid var(--orbit);color:var(--muted)}.readout-grid strong,.readout-grid output{display:block;color:var(--ink)}
.widget__actions{display:flex;gap:.7rem;flex-wrap:wrap;padding:0 1rem 1rem}.widget__note{padding:0 1rem;color:var(--muted);font-size:.9rem}
.kepler-status{padding:.8rem 1rem;font-weight:750;color:var(--orbit-dark)}
.calculation{padding:1.5rem;border:1px solid var(--line);border-radius:var(--radius);background:#fff}.calculation ol{padding-left:1.3rem}
.comparison{width:100%;border-collapse:collapse;margin:1.5rem 0}.comparison th,.comparison td{text-align:left;padding:.8rem;border-bottom:1px solid var(--line);vertical-align:top}.comparison th{color:var(--orbit-dark)}
.download-list{display:flex;flex-wrap:wrap;gap:.6rem}.download-list a{padding:.55rem .8rem;border:1px solid var(--line);border-radius:999px;background:#fff}
.satellite-hero .button{background:#d8f7f3;color:#083b48!important}.satellite-hero .button:hover{background:#fff}
@media(max-width:800px){.orbit-elements,.orbit-classes{grid-template-columns:1fr}.readout-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:520px){.widget svg{min-height:250px}.widget[data-kepler-area-explorer] svg{height:340px;min-height:340px}.readout-grid{grid-template-columns:1fr}.comparison{font-size:.86rem}.comparison th,.comparison td{padding:.55rem}}

/* Week 1 interactive homework lab */
.homework-lab{margin:2.5rem 0;border:1px solid var(--line);border-radius:var(--radius);background:#f8fbfc;overflow:hidden}
.lab-toolbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;padding:1rem;border-bottom:1px solid var(--line);background:#fff}
.lab-mode,.lab-toolbar__actions,.lab-actions{display:flex;gap:.6rem;flex-wrap:wrap}
.lab-mode__button,.lab-tabs button{border:1px solid var(--line);background:#fff;color:var(--muted);font-weight:800;padding:.65rem .9rem;border-radius:999px}
.lab-mode__button.is-active,.lab-tabs button[aria-selected="true"]{background:var(--orbit-dark);border-color:var(--orbit-dark);color:#fff}
.lab-tabs{display:flex;gap:.5rem;overflow-x:auto;padding:1rem;border-bottom:1px solid var(--line);background:#f1f7f7}
.lab-tabs button{white-space:nowrap;border-radius:10px}
.lab-panel{padding:clamp(1rem,3vw,2rem)}
.lab-panel__header{display:flex;align-items:start;justify-content:space-between;gap:1rem;margin-bottom:1.5rem}
.lab-panel__header h3{margin-top:.2rem}
.lab-given,.lab-step{padding:1.35rem;border:1px solid var(--line);border-radius:14px;background:#fff;margin:1rem 0}
.lab-given{border-top:4px solid var(--orbit)}
.lab-data-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin:0}
.lab-data-grid div{padding:.65rem;border-bottom:1px solid var(--line)}
.lab-data-grid dt{font-size:.78rem;color:var(--muted)}
.lab-data-grid dd{margin:0;font-weight:800}
.lab-step__number{text-transform:uppercase;letter-spacing:.12em;color:var(--orbit-dark);font-size:.72rem;font-weight:900;margin-bottom:.3rem}
.lab-input-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;margin:1rem 0}
.lab-input-grid--wide{grid-template-columns:repeat(3,minmax(0,1fr))}
.lab-input-grid label,.lab-single-input{display:grid;gap:.4rem;font-weight:750;color:var(--ink)}
.lab-input-grid label span,.lab-single-input span{display:flex;align-items:center;gap:.45rem;font-weight:500;color:var(--muted)}
.lab-input-grid input,.lab-single-input input{width:100%;min-width:0;padding:.65rem;border:1px solid #aebbc8;border-radius:8px;background:#fff;color:var(--ink)}
.lab-single-input{max-width:340px;margin:1rem 0}
.lab-step fieldset{display:grid;gap:.6rem;border:0;padding:0;margin:1rem 0}
.lab-step legend{font-weight:800;margin-bottom:.6rem}
.lab-step fieldset label{display:flex;align-items:flex-start;gap:.55rem;padding:.65rem;border:1px solid var(--line);border-radius:8px}
.lab-hints,.lab-feedback{margin-top:1rem}
.lab-hints p,.lab-reveal{padding:.8rem 1rem;background:#fff8e8;border-left:3px solid var(--sand)}
.lab-feedback p{padding:.8rem 1rem;border-radius:8px;background:#eef5ff}
.lab-feedback p[data-feedback="correct"]{background:#eaf8f1;color:#0d6346}
.lab-feedback p[data-feedback="incorrect"],.lab-feedback p[data-feedback="empty"]{background:#fff1f0;color:#8f2119}
.lab-solution{margin-top:1rem;padding:1rem;border:1px dashed var(--orbit);border-radius:10px;background:var(--orbit-pale)}
.homework-lab:not([data-mode="instructor"]):not(.is-revealed) .instructor-only{display:none}
.lab-result{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.7rem;margin-top:1rem}
.lab-result div{padding:.8rem;border-top:2px solid var(--orbit);background:#f7fbfb}
.lab-result span{display:block;color:var(--muted);font-size:.8rem}
.lab-result output{font-weight:850;color:var(--orbit-dark)}
.lab-preview{margin-top:1rem;padding:1rem;border:1px solid var(--line);border-radius:12px;background:#fbfdff}
.lab-preview svg{display:block;width:100%;height:auto;min-height:240px}
.lab-discussion{margin-top:1rem;padding:1rem;border-left:4px solid var(--cyan);background:#ecf9fb}
.lab-integration-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
.lab-integration-grid div{display:grid;gap:.3rem;padding:1rem;border:1px dashed #9fb3c3;border-radius:10px;color:var(--muted)}
.lab-integration-grid strong{color:var(--ink)}
.lab-period-pair{display:flex;gap:.7rem;flex-wrap:wrap;margin:1rem 0}
.lab-period-pair span{padding:.65rem .8rem;border-radius:999px;background:var(--orbit-pale);font-weight:800}
.lab-table-wrap{overflow-x:auto}.lab-comparison{min-width:560px}
.lab-discussion-prompts{margin-top:1.5rem;padding:1rem;border-top:2px solid var(--orbit)}
.lab-discussion-prompts li{margin:.45rem 0}
@media(max-width:800px){.lab-data-grid,.lab-input-grid--wide{grid-template-columns:repeat(2,minmax(0,1fr))}.lab-result{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:520px){.lab-panel__header{display:grid}.lab-data-grid,.lab-input-grid,.lab-input-grid--wide,.lab-integration-grid,.lab-result{grid-template-columns:1fr}.lab-toolbar__actions .button{padding:.65rem .8rem}.lab-panel{padding:1rem}.lab-preview svg{min-height:190px}}

/* Week 2 classical orbital elements laboratory */
.coe-lab{display:grid;grid-template-columns:minmax(280px,340px) minmax(0,1fr);border:1px solid var(--line);border-radius:var(--radius);background:#fff;overflow:hidden;box-shadow:0 18px 45px rgba(18,45,64,.08)}
.coe-controls{padding:1rem;background:#f4f9fa;border-right:1px solid var(--line)}
.coe-control-group{display:grid;gap:.5rem;margin-bottom:1rem}.coe-control-group>label:first-child,.coe-elements legend{font-weight:850;color:var(--orbit-dark)}
.coe-control-group select{width:100%;padding:.65rem;border:1px solid #aebbc8;border-radius:8px;background:#fff;color:var(--ink)}
.coe-elements{border:0;padding:0;margin:0;display:grid;gap:.45rem}.coe-elements legend{margin-bottom:.5rem}
.coe-field{display:grid;grid-template-columns:minmax(0,1fr) 5.2rem;gap:.15rem .55rem;align-items:center;padding:.55rem;border:1px solid transparent;border-radius:9px;transition:opacity .15s,background .15s}
.coe-field label{grid-column:1/-1;font-size:.82rem;font-weight:750}.coe-field label span{font-weight:500;color:var(--muted)}
.coe-field input[type="range"]{width:100%;accent-color:var(--orbit)}.coe-field input[type="number"]{width:100%;min-width:0;padding:.42rem;border:1px solid #aebbc8;border-radius:6px;background:#fff}
.coe-field:focus-within{background:#fff;border-color:#9ccdcc}.coe-field.is-dimmed{opacity:.35}.coe-field input[aria-invalid="true"]{border-color:#b42318;background:#fff4f2}
.coe-error{min-height:1.25rem;margin:.45rem 0;color:#9b2118;font-size:.84rem;font-weight:750}
.coe-check{display:flex;align-items:center;gap:.5rem;font-weight:700}.coe-actions{display:flex;gap:.5rem;flex-wrap:wrap}.coe-actions .button{padding:.6rem .75rem}
.coe-stage-wrap{min-width:0;background:#f7fbfd}.coe-stage{height:clamp(440px,60vw,670px);touch-action:none}.coe-stage canvas{display:block;width:100%;height:100%}.coe-stage--error{display:grid;place-items:center;padding:2rem;color:#8f2119;text-align:center}
.coe-stage-help{margin:0;padding:.55rem 1rem;border-top:1px solid var(--line);border-bottom:1px solid var(--line);color:var(--muted);font-size:.82rem;text-align:center}
.coe-readouts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));margin:0;padding:1rem;gap:.65rem}.coe-readouts div{min-width:0;padding:.65rem;border-top:2px solid var(--orbit);background:#fff}.coe-readouts dt{color:var(--muted);font-size:.75rem}.coe-readouts dd{margin:.2rem 0 0;font-weight:850;color:var(--orbit-dark);overflow-wrap:anywhere}
.coe-explanations{grid-column:1/-1;padding:1rem 1.25rem;border-top:1px solid var(--line);background:var(--orbit-pale)}.coe-explanations p{margin:.35rem 0}.coe-degeneracy{padding:.7rem;border-left:3px solid var(--sand);background:#fff8e8}
.coe-element-cards{grid-template-columns:repeat(2,minmax(0,1fr))}.coe-element-cards p{margin-bottom:0}
.learning-section .calculation mjx-container[display="true"]{max-width:100%;overflow-x:auto;overflow-y:hidden}
@media(max-width:900px){.coe-lab{grid-template-columns:1fr}.coe-controls{border-right:0;border-bottom:1px solid var(--line)}.coe-elements{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:600px){.coe-elements,.coe-readouts,.coe-element-cards{grid-template-columns:1fr}.coe-stage{height:420px}.coe-field{grid-template-columns:minmax(0,1fr) 5rem}}

/* EE 499 course information architecture */
.course-nav{border-bottom:1px solid var(--line);background:#fff}
.course-nav__inner{display:flex;align-items:center;gap:.25rem;min-height:48px;padding-block:.25rem}
.course-nav a{display:inline-flex;align-items:center;min-height:44px;padding:.45rem .7rem;border-radius:8px;color:var(--muted);font-size:.86rem;font-weight:750;text-decoration:none;white-space:nowrap}
.course-nav a:focus-visible{outline:3px solid var(--orbit-dark,#013074);outline-offset:-2px}
/* Pointer-driven course chrome can be tighter than the touch minimum, which
   gives the presentation frame below it more vertical room. */
@media(min-width:1024px){.course-nav a{min-height:38px}}
.course-nav a:hover{background:var(--orbit-pale);color:var(--orbit-dark)}
.course-nav a[aria-current="page"]{background:var(--orbit-dark);color:#fff}
/* EE 499 lecture pages carry this course bar above the deck, so the shared
   viewport-fit budget has one more band to allow for than EE 351 does. The
   shared default assumes site header + deck bar only. */
.course-nav ~ main .lecture-deck{--deck-fit:13rem}
.course-pathways{display:grid;grid-template-columns:1.35fr 1fr 1fr;gap:1rem}
.course-pathway{padding:1.35rem;border:1px solid var(--line);border-radius:var(--radius);background:#fff}
.course-pathway--learn{border-top:4px solid var(--orbit)}
.course-pathway h3{margin-top:0;color:var(--orbit-dark)}
.course-link-list{display:grid;gap:.6rem;margin:0;padding:0;list-style:none}
.course-link-list a{display:block;padding:.7rem .8rem;border-left:3px solid var(--orbit);background:#f5fafb;text-decoration:none;font-weight:750}
.course-link-list span{display:block;color:var(--muted);font-size:.85rem;font-weight:500}
.directory-hero{padding:clamp(3.5rem,7vw,6rem) 0;background:radial-gradient(circle at 85% 20%,#d9eeee 0,transparent 30%),var(--paper)}
.directory-hero h1{max-width:15ch;font-size:clamp(2.6rem,6vw,4.8rem)}
.directory-hero .hero__lede{color:var(--muted)}
.resource-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}
.resource-card{display:flex;flex-direction:column;padding:1.4rem;border:1px solid var(--line);border-radius:var(--radius);background:#fff}
.resource-card h2,.resource-card h3{margin-top:0;color:var(--orbit-dark)}
.resource-card p:last-of-type{flex:1}
.resource-card__meta{margin-bottom:.65rem;color:var(--muted);font-size:.82rem;font-weight:750;text-transform:uppercase;letter-spacing:.08em}
.resource-card--future{background:#f6f8fa;border-style:dashed}
.empty-state{padding:clamp(2rem,5vw,3.5rem);border:1px dashed #9fb3c3;border-radius:var(--radius);background:#f8fbfc;text-align:center}
.empty-state h2{font-size:clamp(1.6rem,3vw,2.3rem)}
.page-actions{display:flex;flex-wrap:wrap;gap:.7rem;margin-top:1.5rem}
@media(max-width:850px){.course-pathways{grid-template-columns:1fr 1fr}.course-pathway--learn{grid-column:1/-1}.course-nav__inner{flex-wrap:wrap;justify-content:center;padding-block:.5rem}}
@media(max-width:560px){.course-pathways,.resource-grid{grid-template-columns:1fr}.course-pathway--learn{grid-column:auto}.course-nav__inner{justify-content:flex-start;gap:.15rem}.course-nav a{font-size:.8rem;padding:.5rem .55rem}.directory-hero{padding-block:3rem}}

/* Shared EE 499 identity and lesson navigation */
.satellite-identity{width:min(100%,310px);margin:0 0 0 auto;align-self:center}.satellite-identity img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;object-position:56% center;border:1px solid rgba(255,255,255,.22);border-radius:12px;box-shadow:0 10px 26px rgba(3,14,32,.18)}.satellite-identity figcaption{margin-top:.45rem;color:rgba(255,255,255,.72);font-size:.72rem;line-height:1.45}.satellite-identity figcaption a{color:inherit;text-decoration:underline}
.lesson-pagination{display:grid;grid-template-columns:1fr auto 1fr;align-items:start;margin:2.5rem 0 0;padding-top:1.1rem;border-top:1px solid var(--line)}.lesson-pagination a{display:flex;flex-direction:column;gap:.1rem;padding:.35rem .85rem;text-decoration:none}.lesson-pagination a:first-child{padding-left:0}.lesson-pagination a:last-child{padding-right:0;text-align:right}.lesson-pagination__course{align-items:center;border-inline:1px solid var(--line);text-align:center!important}.lesson-pagination span{color:var(--muted);font-size:.72rem;font-weight:700}.lesson-pagination strong{color:var(--orbit-dark);font-size:.9rem;line-height:1.4}.lesson-pagination a:hover strong{text-decoration:underline;text-underline-offset:.18em}
.reference-library{grid-template-columns:repeat(3,minmax(0,1fr))}.reference-feature{grid-column:1/-1;display:grid;grid-template-columns:150px minmax(0,1fr);gap:1.25rem;align-items:start;padding:1.25rem;border:1px solid var(--line);border-radius:var(--radius);background:#fff}.reference-feature__image{display:block;width:150px;aspect-ratio:4/3;object-fit:cover;object-position:center;border:1px solid var(--line);border-radius:10px}.reference-feature__body h3{margin:.05rem 0 .45rem;color:var(--orbit-dark)}.reference-feature__body>p:not(.resource-card__meta):not(.muted){max-width:72ch;margin-bottom:.55rem}.reference-feature__body>.muted{margin-bottom:.65rem;font-size:.84rem}.reference-feature__facts{display:flex;gap:.35rem .9rem;flex-wrap:wrap;margin:.15rem 0 .65rem;color:var(--muted);font-size:.82rem}.reference-feature__facts span+span{padding-left:.9rem;border-left:1px solid var(--line)}.reference-actions{display:flex;gap:.45rem;flex-wrap:wrap;margin-top:.7rem}.reference-actions .button{padding:.58rem .85rem;font-size:.84rem}
@media(max-width:900px){.reference-library{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:720px){.lesson-pagination{grid-template-columns:1fr}.lesson-pagination a,.lesson-pagination a:first-child,.lesson-pagination a:last-child{padding:.65rem 0;text-align:left}.lesson-pagination__course{align-items:flex-start;border:0;border-top:1px solid var(--line);text-align:left!important}.lesson-pagination a+ a{border-top:1px solid var(--line)}.reference-library{grid-template-columns:1fr}.reference-feature{grid-template-columns:110px minmax(0,1fr);gap:1rem}.reference-feature__image{width:110px}.satellite-identity{width:min(100%,290px);margin-inline:0}}
@media(max-width:480px){.reference-feature{grid-template-columns:1fr}.reference-feature__image{width:150px}.reference-feature__facts span+span{padding-left:0;border-left:0}.reference-actions{display:grid}.reference-actions .button{width:100%}}

/* Original-note provenance and Week 3 GEO geometry */
.source-note{margin:.8rem 0 1.4rem;color:var(--muted);font-size:.82rem}
.source-note a{font-weight:750}
.historical-note{padding:1rem 1.15rem;border-left:3px solid var(--sand);background:#fff8e8}
.geo-conditions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem;margin:1.25rem 0}
.geo-condition{padding:1rem;border-top:3px solid var(--orbit);background:#fff}
.geo-condition strong{display:block;color:var(--orbit-dark)}
.geo-widget{display:grid;grid-template-columns:minmax(240px,320px) minmax(0,1fr);gap:0;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;background:#fff}
.geo-widget__controls{display:grid;align-content:start;gap:.8rem;padding:1.2rem;background:#f4f9fa;border-right:1px solid var(--line)}
.geo-widget__controls label{display:grid;gap:.35rem;font-weight:750}
.geo-widget__controls input{width:100%;padding:.6rem;border:1px solid #aebbc8;border-radius:8px}
.geo-widget__results{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem;padding:1.2rem;margin:0}
.geo-widget__results div{padding:.75rem;border-top:2px solid var(--orbit);background:#f8fbfc}
.geo-widget__results dt{color:var(--muted);font-size:.78rem}.geo-widget__results dd{margin:.2rem 0 0;color:var(--orbit-dark);font-weight:850}
.geo-widget__status{grid-column:1/-1;padding:.85rem 1.2rem;margin:0;border-top:1px solid var(--line);font-weight:800}
.geo-widget__status[data-visible="false"]{color:#8f2119;background:#fff1f0}
.visibility-figure{margin:1.5rem 0;padding:1rem;border:1px solid var(--line);border-radius:var(--radius);background:#fff}
.visibility-figure svg{display:block;width:100%;height:auto;min-height:320px}.visibility-figure figcaption{color:var(--muted);font-size:.88rem}
.special-cases{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.special-cases article{padding:1rem;border:1px solid var(--line);border-radius:var(--radius);background:#fff}
@media(max-width:800px){.geo-conditions,.special-cases{grid-template-columns:1fr}.geo-widget{grid-template-columns:1fr}.geo-widget__controls{border-right:0;border-bottom:1px solid var(--line)}}
@media(max-width:520px){.geo-widget__results{grid-template-columns:1fr}.visibility-figure svg{min-height:240px}}

/* ---------------------------------------------------------------------------
   EE 499 widgets inside the shared lecture deck.

   These rules only apply within a .lecture-slide, so the continuous Reading
   View pages are untouched. They recompose existing course widgets to the
   canonical 16:9 slide canvas without shrinking type or removing controls.
   --------------------------------------------------------------------------- */

/* Week 2 — classical orbital elements laboratory.
   The slide canvas is narrower than the 900px breakpoint that collapses the lab
   to one column, so restore the two-column instrument and compact its controls. */
.lecture-slide[data-slide-type="interactive"] .slide-body:has(.coe-lab){display:flex;flex-direction:column;gap:.35rem}
/* The 3D instrument needs more height than the canonical canvas offers, so it
   scrolls inside itself rather than being clipped or distorted. This is the
   one interactive that cannot be fully composed into 16:9 -- see report. */
.lecture-slide .coe-lab{grid-template-columns:minmax(0,21rem) minmax(0,1fr);flex:1;min-height:0;overflow:auto;box-shadow:none;margin:0}
.lecture-slide[data-slide-type="interactive"] .slide-body:has(.coe-lab)>p{margin:0;font-size:.86rem;color:var(--muted);max-width:none}
.lecture-slide .coe-controls{padding:.6rem;border-right:1px solid var(--line);border-bottom:0;overflow:auto}
.lecture-slide .coe-control-group{gap:.25rem;margin-bottom:.45rem}
.lecture-slide .coe-control-group select{padding:.35rem}
.lecture-slide .coe-elements{grid-template-columns:repeat(2,minmax(0,1fr));gap:.3rem}
.lecture-slide .coe-elements legend{margin-bottom:.2rem;font-size:.82rem}
.lecture-slide .coe-field{grid-template-columns:minmax(0,1fr) 3.6rem;padding:.25rem;gap:.1rem .35rem}
.lecture-slide .coe-field label{font-size:.72rem}
.lecture-slide .coe-field input[type="number"]{padding:.2rem;font-size:.78rem}
.lecture-slide .coe-error{min-height:0;margin:.2rem 0;font-size:.76rem}
.lecture-slide .coe-check{font-size:.8rem}
.lecture-slide .coe-actions .button{padding:.35rem .55rem;font-size:.78rem}
.lecture-slide .coe-stage-wrap{display:flex;flex-direction:column;min-height:0}
.lecture-slide .coe-stage{flex:1;height:auto;min-height:22.5rem}
.lecture-slide .coe-stage-help{border:0;padding:.2rem 0 .35rem;text-align:left}
.lecture-slide .coe-stage-help{padding:.25rem .5rem;font-size:.72rem}
.lecture-slide .coe-readouts{grid-template-columns:repeat(2,minmax(0,1fr));padding:.4rem 0 0;gap:.3rem;margin:0}
.lecture-slide .coe-readouts div{padding:.3rem}
.lecture-slide .coe-readouts dt{font-size:.65rem}
.lecture-slide .coe-readouts dd{font-size:.82rem}
.lecture-slide .coe-explanations{grid-column:auto;padding:.5rem .6rem;margin-top:.4rem;border-top:1px solid var(--line);font-size:.78rem}
.lecture-slide .coe-explanations p{margin:0}
/* Six-element cards read as three balanced columns on the wide slide canvas. */
.lecture-slide .coe-element-cards{grid-template-columns:repeat(3,minmax(0,1fr))}
.lecture-slide .orbit-element{padding:.7rem .8rem}
.lecture-slide .orbit-element p{margin:.2rem 0 0;font-size:.9rem}
.lecture-slide .callout{margin:.6rem 0 0;padding:.7rem 1rem}
.lecture-slide .callout p{margin:0}
/* Discussion prompts use the full width as a two-column list. */
.lecture-slide .lab-discussion-prompts{margin-top:0;padding-top:0;border-top:0;columns:2;column-gap:2rem}
.lecture-slide .lab-discussion-prompts li{break-inside:avoid;margin:0 0 .6rem}

@media(max-width:800px){
  .lecture-slide[data-slide-type="figure"] .visibility-figure img{max-height:none;width:100%}
  .lecture-slide .coe-lab{grid-template-columns:1fr;height:auto}
  .lecture-slide .coe-controls{border-right:0;border-bottom:1px solid var(--line);overflow:visible}
  .lecture-slide .coe-elements{grid-template-columns:1fr}
  .lecture-slide .coe-stage{min-height:22.5rem}
  .lecture-slide .coe-readouts{grid-template-columns:repeat(2,minmax(0,1fr))}
  .lecture-slide .coe-element-cards{grid-template-columns:1fr}
  .lecture-slide .lab-discussion-prompts{columns:1}
}

/* Opt-in compaction for a closing slide that also carries a summary sentence.
   Week 3 does not use it, so the approved Week 3 summary is unchanged. */
.lecture-slide.is-compact .lesson-pagination{margin-top:.7rem;padding-top:.7rem}
.lecture-slide.is-compact .slide-split{margin-block:.1rem}

/* Week 4 — two perturbation cards side by side on one slide. */
.lecture-slide .orbit-classes--pair{grid-template-columns:repeat(2,minmax(0,1fr))}
.lecture-slide .orbit-class{padding:.9rem 1rem}
.lecture-slide .orbit-class h3{margin:0 0 .35rem}
.lecture-slide .orbit-class p{margin:0 0 .5rem;font-size:.92rem}
.lecture-slide .orbit-class p:last-child{margin-bottom:0}
.lecture-slide.is-compact .quiz__options{margin:.6rem 0}
@media(max-width:800px){.lecture-slide .orbit-classes--pair{grid-template-columns:1fr}}
/* A closing slide that also carries a summary sentence needs a tighter concept
   chain. Opt-in only: Week 3's approved summary does not use .is-compact. */
.lecture-slide.is-compact .concept-bridge{gap:.4rem;margin:.3rem 0}
.lecture-slide.is-compact .concept-bridge li{padding:.4rem .7rem;font-size:.88rem}
/* Week 4 recap: four short summary cards read as one balanced row on a slide. */
.lecture-slide .summary-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:.7rem}
.lecture-slide .summary-grid div{padding:.7rem .8rem}
.lecture-slide .summary-grid p{margin:.25rem 0 0;font-size:.86rem}
@media(max-width:800px){.lecture-slide .summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* ---------------------------------------------------------------------------
   Week 1 widgets inside the lecture deck.
   --------------------------------------------------------------------------- */

/* lecture.css gives <pre> overflow:auto, which makes it a scroll container with
   zero intrinsic height; without this the fixed-height slide would silently
   squash the code instead of reporting that it does not fit. */
.lecture-slide pre{min-height:min-content;margin:0;font-size:.78rem;line-height:1.45;padding:.7rem .9rem}
.lecture-slide pre code{white-space:pre-wrap}

/* Explorers: the widget is the slide, so let it use the canvas. Scoped with
   :has(.widget) so Week 3's geo-widget interactive slide is untouched. */
.lecture-slide .widget{margin:.25rem 0;box-shadow:none}
.lecture-slide .widget svg{min-height:0}
.lecture-slide[data-slide-type="interactive"] .slide-body:has(.widget){display:flex;flex-direction:column;gap:.35rem}
.lecture-slide[data-slide-type="interactive"] .slide-body:has(.widget) .widget{flex:1;min-height:0;display:flex;flex-direction:column}
/* The diagram is the point of these widgets: it takes the leftover height and
   keeps a real floor, while controls and readouts stay at their natural size. */
.lecture-slide[data-slide-type="interactive"] .slide-body:has(.widget) .widget>*{flex:none}
.lecture-slide[data-slide-type="interactive"] .slide-body:has(.widget) .widget svg{flex:1 1 auto;min-height:12rem;height:auto}
.lecture-slide .widget__controls{padding:.4rem .5rem;gap:.4rem}
.lecture-slide .widget__actions,.lecture-slide .widget__readout{padding:.25rem .5rem;gap:.6rem}
.lecture-slide .widget__note,.lecture-slide .kepler-status{padding:.15rem .5rem;font-size:.74rem;margin:0;line-height:1.4}
.lecture-slide .readout-grid{padding:.25rem .5rem;gap:.45rem}
.lecture-slide .readout-grid div{padding:.3rem}

/* EXCEPTIONAL INTERACTIVE (approved): the Interactive Homework Lab is a
   multi-step instrument with its own tab strip and cross-panel state. It cannot
   be composed into the canonical canvas without breaking that architecture, so
   the outer slide stays 16:9 and the instrument scrolls inside its own bounded
   frame. Ordinary lecture slides never scroll. */
.lecture-slide.is-instrument .slide-body{display:flex;flex-direction:column;padding-block:.6rem}
.lecture-slide.is-instrument .homework-lab{flex:1;min-height:0;display:flex;flex-direction:column;margin:0;overflow:hidden}
.lecture-slide.is-instrument .lab-toolbar{flex:none;padding:.5rem .7rem}
.lecture-slide.is-instrument .lab-tabs{flex:none;padding:.5rem .7rem}
.lecture-slide.is-instrument .lab-panel{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:.9rem 1rem}
.lecture-slide.is-instrument .lab-mode__button,.lecture-slide.is-instrument .lab-tabs button{padding:.45rem .7rem;font-size:.85rem}
.lecture-slide.is-instrument .lab-panel__header{margin-bottom:.8rem}
.lecture-slide.is-instrument .lab-given,.lecture-slide.is-instrument .lab-step{padding:.9rem;margin:.7rem 0}
.lecture-slide.is-instrument .lab-preview svg{min-height:180px}

@media(max-width:800px){
  .lecture-slide[data-slide-type="interactive"] .slide-body{display:block}
  .lecture-slide[data-slide-type="interactive"] .widget{display:block}
  .lecture-slide[data-slide-type="interactive"] .widget svg{min-height:250px}
  .lecture-slide.is-instrument .slide-body{display:block}
  .lecture-slide.is-instrument .homework-lab{display:block;overflow:visible}
  .lecture-slide.is-instrument .lab-panel{overflow:visible}
}

/* Download pills are compact on a slide; the Reading View keeps its own size. */
.lecture-slide .download-list{gap:.45rem;margin:.5rem 0 0}
.lecture-slide .download-list a{padding:.4rem .7rem;font-size:.84rem}

/* Interactive slides: keep the framing callout tight so the diagram wins. */
.lecture-slide[data-slide-type="interactive"] .callout{margin:0 0 .3rem;padding:.5rem .8rem}
.lecture-slide[data-slide-type="interactive"] .callout__label{margin-bottom:.2rem}
.lecture-slide[data-slide-type="interactive"] .callout p{font-size:.88rem}

/* Explorer chrome trimmed so the diagram keeps the largest share. */
.lecture-slide[data-slide-type="interactive"] .widget__controls{padding:.3rem .5rem;gap:.3rem}
.lecture-slide[data-slide-type="interactive"] .control{gap:.2rem;font-size:.86rem}
.lecture-slide[data-slide-type="interactive"] .readout-grid{padding:.15rem .5rem;gap:.35rem}
.lecture-slide[data-slide-type="interactive"] .readout-grid div{padding:.2rem .25rem;font-size:.78rem}
.lecture-slide[data-slide-type="interactive"] .widget__note{font-size:.7rem;padding:.05rem .5rem;line-height:1.35}

/* A worked derivation is one coherent block; .is-tight keeps its frame compact
   so the whole calculation fits one canonical slide rather than being split
   mid-arithmetic. Opt-in only, so Week 3's approved derivation is unchanged. */
.lecture-slide.is-tight .calculation{padding:.85rem 1rem}
.lecture-slide.is-tight .calculation p{margin-bottom:.55em}
.lecture-slide.is-tight .calculation p:last-child{margin-bottom:0}
.lecture-slide.is-tight .calculation mjx-container[display="true"]{margin:.4em 0}

/* HW2 reference figure inside a slide: bounded so the surrounding set-up text
   still fits the canonical canvas. */
.lecture-slide .visibility-figure img{display:block;width:auto;max-width:100%;max-height:11rem;margin-inline:auto}
.lecture-slide[data-slide-type="figure"] .visibility-figure img{max-height:19rem}
.lecture-slide .visibility-figure figcaption{font-size:.78rem;text-align:center;margin-top:.3rem}

/* ---------------------------------------------------------------------------
   Orbit flashcards (flashcards/index.html).

   Every rule below is scoped to .flashcards, which exists only on the flashcard
   page, so the weekly lessons, the lecture decks and the other directory pages
   keep exactly the styling they had. Colours come from the existing course
   tokens: --orbit and --blue-dark carry the orbit families, --sand flags the
   commonly confused pairs.
   --------------------------------------------------------------------------- */
.flashcards .directory-hero h1{max-width:18ch}
.flashcards .fc-intro{max-width:var(--reading);color:var(--muted)}
.flashcards .fc-intro b{color:var(--ink)}

/* Altitude reference rail: a real logarithmic scale from the drag floor to the
   HEO apogees, so the deck opens on the numbers the cards keep quoting. */
.flashcards .fc-rail{margin:2.2rem 0 0;max-width:46rem}
.flashcards .fc-rail figcaption{font-size:.72rem;text-transform:uppercase;letter-spacing:.14em;font-weight:800;color:var(--muted);margin-bottom:.5rem}
.flashcards .fc-rail__bar{display:flex;height:1.75rem;border-radius:.4rem;overflow:hidden}
.flashcards .fc-rail__seg{display:flex;align-items:center;padding:0 .6rem;font-size:.7rem;font-weight:750;white-space:nowrap;overflow:hidden}
.flashcards .fc-rail__seg--leo{flex:0 0 39.3%;background:var(--orbit);color:#fff}
.flashcards .fc-rail__seg--meo{flex:0 0 44.8%;background:var(--blue-dark);color:#fff}
.flashcards .fc-rail__seg--high{flex:1 1 auto;justify-content:flex-end;background:var(--orbit-pale);color:var(--orbit-dark)}
.flashcards .fc-rail__ticks{position:relative;height:2.4rem;margin-top:.45rem}
.flashcards .fc-rail__tick{position:absolute;top:0;font-size:.7rem;line-height:1.3;color:var(--muted)}
.flashcards .fc-rail__tick b{display:block;color:var(--ink);font-weight:800}
.flashcards .fc-rail__tick::before{content:"";position:absolute;top:-.5rem;left:50%;width:1px;height:.35rem;background:var(--line)}
.flashcards .fc-rail__tick--start{left:0}
.flashcards .fc-rail__tick--start::before{left:0}
.flashcards .fc-rail__tick--mid{left:39.3%;transform:translateX(-50%);text-align:center}
.flashcards .fc-rail__tick--geo{left:84.1%;transform:translateX(-50%);text-align:center}

/* Filter bar. The course navigation is not sticky, so top:0 is free here. */
.flashcards .fc-controls{position:sticky;top:0;z-index:5;display:grid;gap:.55rem;margin:1.6rem 0 1.4rem;padding:.85rem 0;background:rgba(251,250,247,.94);backdrop-filter:blur(12px);border-block:1px solid var(--line)}
.flashcards .fc-filterrow{display:flex;align-items:flex-start;gap:.75rem;flex-wrap:wrap}
.flashcards .fc-filterrow__label{flex:0 0 3.6rem;padding-top:.3rem;font-size:.7rem;text-transform:uppercase;letter-spacing:.14em;font-weight:800;color:var(--muted)}
.flashcards .fc-chips{display:flex;flex-wrap:wrap;gap:.3rem;flex:1 1 18rem}
.flashcards .fc-chips__rule{width:1px;align-self:stretch;margin:.15rem .25rem;background:var(--line)}
.flashcards .fc-chip{padding:.25rem .7rem;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--muted);font-size:.8rem;font-weight:700;line-height:1.5}
.flashcards .fc-chip:hover{border-color:var(--orbit);color:var(--ink)}
.flashcards .fc-chip[aria-pressed="true"]{background:var(--orbit-dark);border-color:var(--orbit-dark);color:#fff}
.flashcards .fc-tools{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}
.flashcards .fc-btn{padding:.4rem .9rem;border:1px solid var(--line);border-radius:999px;background:#fff;color:var(--ink);font-size:.82rem;font-weight:750}
.flashcards .fc-btn:hover{border-color:var(--orbit)}
.flashcards .fc-btn--flag[aria-pressed="true"]{background:#fdf3e8;border-color:var(--sand);color:#8a4f10}
.flashcards .fc-count{margin-left:auto;font-size:.8rem;font-weight:750;color:var(--muted);font-variant-numeric:tabular-nums}

/* Orbit family tags. The three treatments encode what actually defines the
   orbit, which is the distinction students most often lose. */
.flashcards .fc-tag{padding:.1rem .5rem;border:1px solid transparent;border-radius:.3rem;font-size:.73rem;font-weight:750;white-space:nowrap}
.flashcards .fc-tag--shape{background:var(--orbit);border-color:var(--orbit);color:#fff}
.flashcards .fc-tag--plane{background:#fff;border-color:var(--blue);color:var(--blue)}
.flashcards .fc-tag--locked{background:var(--blue-dark);border-color:var(--blue-dark);color:#fff}
.flashcards .fc-tag--general{background:var(--orbit-pale);border-color:var(--orbit-pale);color:var(--orbit-dark)}
.flashcards .fc-legend{display:flex;flex-wrap:wrap;gap:.5rem 1.6rem;margin:0 0 1.4rem;padding:0;list-style:none;font-size:.85rem;color:var(--muted)}
.flashcards .fc-legend li{display:flex;align-items:center;gap:.45rem}

/* Cards. <details> carries the reveal, so the deck works with JavaScript off
   and prints with every answer visible. */
.flashcards .fc-deck{display:grid;gap:.8rem}
.flashcards .fc-card{border:1px solid var(--line);border-radius:var(--radius);background:#fff}
.flashcards .fc-card[hidden]{display:none}
.flashcards .fc-card.is-pair{border-left:3px solid var(--sand)}
.flashcards .fc-card__details[open]{border-radius:var(--radius)}
.flashcards .fc-card__summary{display:grid;grid-template-columns:2.4rem minmax(0,1fr);gap:0 .9rem;align-items:start;padding:1.05rem 1.2rem;list-style:none;border-radius:var(--radius)}
.flashcards .fc-card__summary::-webkit-details-marker{display:none}
.flashcards .fc-card__n{padding-top:.2rem;font-size:.85rem;font-weight:800;color:var(--muted);font-variant-numeric:tabular-nums}
.flashcards .fc-card__main{display:grid;gap:.5rem;min-width:0}
.flashcards .fc-card__meta{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem}
.flashcards .fc-card__format{font-size:.71rem;text-transform:uppercase;letter-spacing:.11em;font-weight:800;color:var(--muted)}
.flashcards .fc-card__pair{padding:.1rem .55rem;border-radius:999px;background:#fdf3e8;color:#8a4f10;font-size:.69rem;text-transform:uppercase;letter-spacing:.07em;font-weight:800}
.flashcards .fc-card__q{font-size:1.05rem;font-weight:750;line-height:1.45;color:var(--ink)}
.flashcards .fc-card__cue{font-size:.72rem;text-transform:uppercase;letter-spacing:.1em;font-weight:800;color:var(--orbit-dark)}
.flashcards .fc-card__cue::after{content:" \25BE"}
.flashcards .fc-card__details[open] .fc-card__cue::after{content:" \25B4"}
.flashcards [data-fc-cue-hide]{display:none}
.flashcards .fc-card__details[open] [data-fc-cue-show]{display:none}
.flashcards .fc-card__details[open] [data-fc-cue-hide]{display:inline}
.flashcards .fc-card__a{padding:0 1.2rem 1.25rem 4.5rem}
.flashcards .fc-card__a>div{max-width:66ch;padding-left:1rem;border-left:3px solid var(--orbit-pale)}
.flashcards .fc-card__a p{margin:0 0 .75em}
.flashcards .fc-card__a p:last-child{margin-bottom:0}
.flashcards .fc-card__a b{color:var(--orbit-dark)}
.flashcards .fc-card__a .num{font-variant-numeric:tabular-nums;font-weight:750;color:var(--ink)}
.flashcards .fc-empty{padding:2.5rem 1rem;border:1px dashed var(--line);border-radius:var(--radius);text-align:center;color:var(--muted)}

@media(max-width:800px){
  .flashcards .fc-rail__seg--high{color:transparent}
  .flashcards .fc-filterrow__label{flex-basis:100%;padding-top:0}
  .flashcards .fc-count{margin-left:0;width:100%}
}
@media(max-width:520px){
  .flashcards .fc-card__summary{grid-template-columns:1.8rem minmax(0,1fr);gap:0 .6rem;padding:.9rem 1rem}
  .flashcards .fc-card__a{padding:0 1rem 1.1rem 3.4rem}
  .flashcards .fc-card__q{font-size:1rem}
  .flashcards .fc-rail__seg{font-size:.6rem;padding:0 .35rem}
  .flashcards .fc-rail__tick{font-size:.65rem}
}
@media print{
  .flashcards .fc-controls{display:none}
  .flashcards .fc-card{break-inside:avoid}
}
