/* ── COURSE CURRICULUM WIDGET (curriculum.js) ── */
.cv{
  --cv-navy:var(--navy,#071739);
  --cv-gold:var(--gold,#B88E3E);
  --cv-gold-dim:var(--gold-dim,rgba(184,142,62,.12));
  --cv-gold-bdr:var(--gold-bdr,rgba(184,142,62,.3));
  --cv-mid:var(--mid,#4A5870);
  --cv-soft:var(--soft,rgba(7,23,57,.48));
  --cv-surface:var(--surface,#fff);
  --cv-surf2:var(--surf2,#F0F2F6);
  --cv-border:var(--border,rgba(7,23,57,.08));
  --cv-ease:cubic-bezier(.16,1,.3,1);
  --cv-out:cubic-bezier(.22,1,.36,1);
  --cv-spring:cubic-bezier(.34,1.56,.64,1);
  max-width:860px;margin:0 auto;
  font-family:'Outfit','Inter',sans-serif;color:var(--cv-navy);
}
.cv *{box-sizing:border-box}
.cv button{font:inherit;color:inherit}

/* header */
.cv-head{text-align:center;margin-bottom:40px}
.cv-head .label{margin-bottom:14px;justify-content:center}
.cv-head h2{margin-bottom:16px}
.cv-head p{max-width:680px;margin:0 auto}

/* subject switcher */
.cv-subjects{
  position:relative;display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:4px;
  background:var(--cv-surf2);padding:5px;border-radius:18px;margin-bottom:22px;
}
.cv-subj-pill{
  position:absolute;top:0;left:0;border-radius:14px;
  background:var(--cv-navy);box-shadow:0 10px 24px -8px rgba(7,23,57,.45);
  transition:transform .55s var(--cv-out),width .55s var(--cv-out),height .55s var(--cv-out);
  z-index:0;pointer-events:none;will-change:transform;
}
.cv-subj-pill::after{
  content:'';position:absolute;left:18%;right:18%;bottom:-1px;height:2px;border-radius:2px;
  background:linear-gradient(90deg,transparent,var(--cv-gold),transparent);opacity:.9;
}
.cv-subj{
  position:relative;z-index:1;display:flex;align-items:center;gap:14px;
  border:0;background:transparent;cursor:pointer;text-align:left;
  padding:14px 18px;border-radius:14px;color:var(--cv-mid);
  transition:color .35s var(--cv-ease);
}
.cv-subj:hover{color:var(--cv-navy)}
.cv-subj:active{transform:scale(.985)}
.cv-subj.is-active{color:#fff}
.cv-subj:focus-visible{outline:2px solid var(--cv-gold);outline-offset:2px}
.cv-subj-ico{
  width:40px;height:40px;flex-shrink:0;border-radius:12px;display:grid;place-items:center;
  background:var(--cv-surface);color:var(--cv-gold);border:1px solid var(--cv-border);
  transition:background .35s var(--cv-ease),border-color .35s var(--cv-ease),transform .35s var(--cv-ease);
}
.cv-subj:not(.is-active):hover .cv-subj-ico{transform:translateY(-2px) rotate(-4deg)}
.cv-subj-ico.is-pop{animation:cv-ico-pop .6s var(--cv-spring)}
.cv-subj.is-active .cv-subj-ico{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.14)}
.cv-subj-ico svg{width:20px;height:20px}
.cv-subj-text{display:flex;flex-direction:column;min-width:0}
.cv-subj-name{font-family:'Fraunces',serif;font-weight:600;font-size:1.15rem;line-height:1.2}
.cv-subj-sub{font-size:.8rem;opacity:.72;margin-top:2px}

/* stats */
.cv-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-bottom:22px}
.cv-stat{
  background:var(--cv-surface);border:1px solid var(--cv-border);border-radius:16px;
  padding:16px 12px;text-align:center;box-shadow:0 1px 2px rgba(7,23,57,.04);
  transition:transform .3s var(--cv-ease),box-shadow .3s var(--cv-ease),border-color .3s;
}
.cv-stat:hover{transform:translateY(-3px);border-color:var(--cv-gold-bdr);box-shadow:0 12px 24px -10px rgba(7,23,57,.14)}
.cv-stat.is-pop b{animation:cv-num-pop .55s var(--cv-out)}
.cv-stat b{
  display:block;font-family:'Fraunces',serif;font-weight:600;font-size:1.9rem;line-height:1.1;
  color:var(--cv-navy);font-variant-numeric:tabular-nums;
}
.cv-stat span{display:block;font-size:.78rem;color:var(--cv-soft);margin-top:4px}
.cv-stat:nth-child(3) b{color:var(--cv-gold)}

/* toolbar */
.cv-note{margin:0 0 18px;padding:12px 16px;border-left:3px solid var(--gold);border-radius:0 10px 10px 0;background:rgba(229,186,71,.10);color:var(--navy);font-size:14px;line-height:1.55;text-align:left}
.cv-toolbar{display:flex;align-items:center;justify-content:flex-end;gap:16px;margin-bottom:14px}
.cv-toggle-all{
  flex-shrink:0;border:1px solid var(--cv-border);background:var(--cv-surface);cursor:pointer;
  padding:8px 14px;border-radius:999px;font-size:.82rem;font-weight:500;
  display:inline-flex;align-items:center;gap:7px;
  transition:border-color .25s,background .25s,transform .25s var(--cv-ease);
}
.cv-toggle-all:active{transform:scale(.96)}
.cv-toggle-ico{display:grid;place-items:center;width:14px;height:14px;transition:transform .45s var(--cv-spring);color:var(--cv-gold)}
.cv-toggle-ico svg{width:14px;height:14px}
.cv-all-open .cv-toggle-ico{transform:rotate(180deg)}
.cv-toggle-txt{display:inline-block;transition:opacity .16s ease,transform .16s ease}
.cv-toggle-txt.is-swapping{opacity:0;transform:translateY(-4px)}
.cv-toggle-all:hover{border-color:var(--cv-gold-bdr);background:var(--cv-gold-dim)}

/* modules (timeline-style accordion) */
.cv-modules{list-style:none;margin:0;padding:0;position:relative}
.cv-modules.is-morphing{transition:height .55s var(--cv-out);overflow:hidden;margin:0 -16px;padding:0 16px}
.cv-modules::before{
  content:'';position:absolute;left:32px;top:28px;bottom:28px;width:1px;
  background:linear-gradient(to bottom,var(--cv-gold-bdr),rgba(184,142,62,.06));
  transform-origin:top;transform:scaleY(0);transition:transform 1.4s var(--cv-out) .35s;
}
.cv.is-visible .cv-modules::before{transform:scaleY(1)}
.cv-modules.is-morphing::before{left:48px}
.cv-modules.is-leaving .cv-mod{animation:cv-mod-out .26s ease-in both;animation-delay:calc(min(var(--i),6)*22ms)}

.cv-mod{
  position:relative;margin-bottom:10px;
  background:var(--cv-surface);border:1px solid var(--cv-border);border-radius:18px;
  transition:border-color .3s var(--cv-ease),box-shadow .4s var(--cv-ease),transform .4s var(--cv-ease);
}
.cv:not(.is-visible) .cv-mod.cv-anim{opacity:0}
.cv.is-visible .cv-mod.cv-anim{animation:cv-mod-in .7s var(--cv-out) backwards;animation-delay:calc(.32s + var(--i)*60ms)}
.cv.cv-done .cv-mod.cv-anim{animation-delay:calc(var(--i)*55ms)}
.cv-mod:hover{border-color:var(--cv-gold-bdr);transform:translateY(-2px);box-shadow:0 10px 26px -12px rgba(7,23,57,.16)}
.cv-mod.is-open{border-color:var(--cv-gold-bdr);box-shadow:0 18px 40px -12px rgba(7,23,57,.16);transform:none}
.cv-mod::after{
  content:'';position:absolute;left:0;top:18px;bottom:18px;width:3px;border-radius:0 3px 3px 0;
  background:linear-gradient(to bottom,var(--cv-gold),#C9943A);
  transform:scaleY(0);transform-origin:top;transition:transform .5s var(--cv-out);
}
.cv-mod.is-open::after{transform:scaleY(1)}

.cv-mod-head{
  width:100%;display:flex;align-items:center;gap:16px;
  border:0;background:transparent;cursor:pointer;text-align:left;
  padding:14px 18px 14px 12px;border-radius:18px;
}
.cv-mod-head:focus-visible{outline:2px solid var(--cv-gold);outline-offset:2px}
.cv-num{
  width:40px;height:40px;flex-shrink:0;border-radius:50%;display:grid;place-items:center;
  font-family:'Fraunces',serif;font-weight:600;font-size:.95rem;color:var(--cv-gold);
  background:var(--cv-surface);border:1px solid var(--cv-gold-bdr);
  transition:background .4s var(--cv-ease),color .4s var(--cv-ease),transform .45s var(--cv-spring),border-color .4s;
}
.cv-mod-head:hover .cv-num{transform:scale(1.06)}
.cv-mod.is-open .cv-num{background:linear-gradient(135deg,var(--cv-gold),#C9943A);color:#fff;border-color:transparent;transform:scale(1.06);animation:cv-ring .9s var(--cv-out)}
.cv-mod-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.cv-mod-title{font-weight:600;font-size:1.02rem;line-height:1.35}
.cv-mod-meta{font-size:.8rem;color:var(--cv-soft)}
.cv-mod-meta i{font-style:normal;margin:0 7px}
.cv-chev{
  width:30px;height:30px;flex-shrink:0;border-radius:50%;display:grid;place-items:center;
  background:var(--cv-surf2);color:var(--cv-mid);transition:transform .5s var(--cv-spring),background .3s,color .3s;
}
.cv-mod-head:hover .cv-chev{background:var(--cv-gold-dim);color:var(--cv-gold)}
.cv-mod:not(.is-open) .cv-mod-head:hover .cv-chev svg{animation:cv-nudge .7s var(--cv-out)}
.cv-chev svg{width:16px;height:16px}
.cv-mod.is-open .cv-chev{transform:rotate(180deg);background:var(--cv-gold-dim);color:var(--cv-gold)}

/* smooth height via grid rows */
.cv-mod-body{display:grid;grid-template-rows:0fr;transition:grid-template-rows .5s var(--cv-out)}
.cv-mod:not(.is-open) .cv-mod-body{transition-duration:.38s}
.cv-mod.is-open .cv-mod-body{grid-template-rows:1fr}
.cv-mod-inner{overflow:hidden;min-height:0}

.cv-topics{list-style:none;margin:0;padding:2px 18px 16px 68px}
.cv-topic{
  display:flex;align-items:center;gap:12px;padding:10px 0;
  border-top:1px dashed var(--cv-border);
  opacity:0;transform:translate3d(-10px,4px,0);
  transition:opacity .18s ease,transform .3s var(--cv-ease);
}
.cv-mod.is-open .cv-topic{opacity:1;transform:none;transition:opacity .4s ease,transform .55s var(--cv-out);transition-delay:calc(90ms + var(--i)*50ms)}
.cv-tname{transition:transform .3s var(--cv-ease),color .3s}
.cv-tidx{transition:color .3s}
.cv-topic:hover .cv-tname{transform:translateX(4px)}
.cv-topic:hover .cv-tidx{color:var(--cv-gold)}
.cv-tidx{
  min-width:34px;font-size:.78rem;font-weight:600;color:var(--cv-soft);font-variant-numeric:tabular-nums;
}
.cv-tidx-star{color:var(--cv-gold)}
.cv-tname{flex:1;min-width:0;font-size:.93rem;line-height:1.4;display:block}
.cv-badges{display:flex;gap:6px;flex-shrink:0}
.cv-badge{
  font-size:.72rem;font-weight:500;white-space:nowrap;
  padding:4px 10px;border-radius:999px;
  background:var(--cv-surf2);color:var(--cv-navy);
}
.cv-badge-soft{background:transparent;border:1px solid var(--cv-border);color:var(--cv-soft)}
.cv-badge-gold{background:var(--cv-gold-dim);color:#8a6a2c;border:1px solid var(--cv-gold-bdr)}
.cv-topic.is-review{
  margin:6px -10px 0;padding:10px;border:1px solid var(--cv-gold-bdr);border-radius:12px;
  background:linear-gradient(135deg,rgba(184,142,62,.08),rgba(184,142,62,.02));
  position:relative;overflow:hidden;
}
.cv-topic.is-review::after{
  content:'';position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(105deg,transparent 30%,rgba(255,255,255,.75) 50%,transparent 70%);
  transform:translateX(-120%);
}
.cv-mod.is-open .cv-topic.is-review::after{animation:cv-shine 1.1s var(--cv-out) calc(.35s + var(--i)*50ms) 1 both}
.cv-mod.is-open .cv-topic.is-review .cv-tidx-star{animation:cv-star .8s var(--cv-spring) calc(.3s + var(--i)*50ms) both}
.cv-topic.is-review + .cv-topic.is-review{margin-top:8px}
.cv-topic.is-review .cv-tname{font-weight:600}

/* entrance choreography */
.cv:not(.is-visible) .cv-rv{opacity:0}
.cv.is-visible:not(.cv-done) .cv-rv{animation:cv-rise .8s var(--cv-out) backwards;animation-delay:calc(var(--d)*90ms)}

@keyframes cv-rise{from{opacity:0;transform:translate3d(0,18px,0);filter:blur(4px)}to{opacity:1;transform:none;filter:none}}
@keyframes cv-mod-in{from{opacity:0;transform:translate3d(0,16px,0) scale(.985)}to{opacity:1;transform:none}}
@keyframes cv-mod-out{to{opacity:0;transform:translate3d(0,-10px,0) scale(.99)}}
@keyframes cv-ring{0%{box-shadow:0 0 0 0 rgba(184,142,62,.45)}100%{box-shadow:0 0 0 12px rgba(184,142,62,0)}}
@keyframes cv-shine{to{transform:translateX(120%)}}
@keyframes cv-star{0%{transform:scale(.4) rotate(-40deg);opacity:0}60%{transform:scale(1.25) rotate(8deg);opacity:1}100%{transform:none;opacity:1}}
@keyframes cv-nudge{0%,100%{transform:none}40%{transform:translateY(2px)}}
@keyframes cv-ico-pop{0%{transform:scale(.8) rotate(-10deg)}60%{transform:scale(1.12) rotate(4deg)}100%{transform:none}}
@keyframes cv-num-pop{0%{transform:none}30%{transform:translateY(-3px) scale(1.06)}100%{transform:none}}

/* mobile */
@media(max-width:640px){
  .cv-head{margin-bottom:28px}
  .cv-subj{padding:12px 6px;gap:6px;flex-direction:column;justify-content:center;text-align:center;min-width:0}
  .cv-subj-text{align-items:center;max-width:100%}
  .cv-subj-ico{width:34px;height:34px;border-radius:10px}
  .cv-subj-name{font-size:1rem}
  .cv-subj-sub{font-size:.72rem}
  .cv-stats{gap:8px}
  .cv-stat{padding:12px 8px}
  .cv-stat b{font-size:1.55rem}
  .cv-modules::before{left:27px}
  .cv-modules.is-morphing::before{left:43px}
  .cv-mod:hover{transform:none}
  .cv-mod-head{gap:12px;padding:12px 12px 12px 8px}
  .cv-num{width:38px;height:38px;font-size:.88rem}
  .cv-mod-title{font-size:.95rem}
  .cv-topics{padding:0 14px 14px 14px}
  .cv-topic{flex-wrap:wrap;gap:4px 10px}
  .cv-tidx{min-width:28px}
  .cv-tname{flex:1 1 calc(100% - 40px)}
  .cv-badges{margin-left:38px}
  .cv-topic.is-review{margin-left:-6px;margin-right:-6px}
}
@media(max-width:380px){
  .cv-subj-ico{display:none}
}
@media(hover:none){
  .cv-mod:hover,.cv-stat:hover{transform:none}
}
@media(prefers-reduced-motion:reduce){
  .cv *,.cv *::before,.cv *::after{transition:none!important;animation:none!important}
  .cv-topic{opacity:1;transform:none}
  .cv-modules::before{transform:none}
}
