.favorites-shell{max-width:760px;margin:0 auto;padding:28px 20px 64px}.favorites-back{margin:0 0 28px}.favorites-back a,.favorite-card__link{color:inherit}.favorites-header{margin-bottom:22px}.favorites-header h1{margin:.2rem 0 .6rem}.favorites-header>p:last-child{color:#667085}.eyebrow{letter-spacing:.12em;font-size:.72rem;font-weight:700}.favorites-tabs{display:flex;gap:8px;margin-bottom:16px}.favorites-tabs button{border:1px solid #c8d0dc;border-radius:999px;padding:10px 15px;background:#fff;color:#173b66;font:inherit;cursor:pointer}.favorites-tabs button.is-active{background:#173b66;color:#fff;border-color:#173b66}.favorites-list{display:grid;gap:12px}.favorite-card{display:grid;grid-template-columns:72px 1fr;gap:14px;padding:13px;border:1px solid #d9dee8;border-radius:15px;background:#fff}.favorite-card__image,.favorite-card__placeholder{width:72px;height:72px;border-radius:11px;object-fit:cover;background:#eef1f5;display:grid;place-items:center;color:#667085}.favorite-card__body{min-width:0}.favorite-card__link{text-decoration:none}.favorite-card__title{margin:0 0 6px;font-weight:700}.favorite-card__meta{margin:0;color:#667085;font-size:.86rem}.favorite-card__actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:10px}.favorite-card__actions button,.favorite-card__actions a{border:0;border-radius:8px;padding:8px 10px;background:#eef3f9;color:#173b66;font:inherit;text-decoration:none;cursor:pointer}.favorite-card__actions .is-remove{background:#fff0f0;color:#a33a3a}.favorite-card__actions .is-disabled{background:#f4f4f4;color:#8a919c;cursor:default}.favorites-empty{padding:36px 20px;text-align:center;border:1px dashed #b9c1d0;border-radius:16px}.favorites-empty h2{font-size:1.1rem}.favorites-empty p{color:#667085}.favorites-empty a{color:#173b66}@media(max-width:420px){.favorite-card{grid-template-columns:56px 1fr}.favorite-card__image,.favorite-card__placeholder{width:56px;height:56px}}

/* ★ 2026-09-06 KSK-LOOK 확장(favorites/course/nearby/roadmap/account/benefits) — css/tokens-ksk.css(worker-4 영역, 무접촉)의
   --ksk-* 변수만 쓴다(폴백 색상 리터럴 0개 — R2에서 codex가 지적한 것과 같은 실수를 반복하지 않는다).
   위 구 블록(원본, KSK-LOOK 이전부터 있던 코드)은 이번에 건드리지 않았다 — 신규 블록에서 var(--ksk-*)로
   "재정의(override)"해 실제 렌더 색만 바꾼다(선택자 재사용, 구 규칙 자체는 무변경).
   danger 색(#fff0f0·#a33a3a, 즐겨찾기 해제 버튼)과 is-disabled 회색(#f4f4f4·#8a919c)은 KSK 브랜드색과
   무관한 기존 의미색이라 이번 재스타일 대상에서 제외했다(로드맵 상태색과 동일한 판단 기준). */
.favorites-header h1 { font-family: var(--ksk-font); font-size: var(--ksk-fs-h2); font-weight: var(--ksk-fw-h2); color: var(--ksk-heading-ink); }
.favorites-header > p:last-child { color: var(--ksk-text-muted); }
.favorites-tabs button { border-color: var(--ksk-border); background: var(--ksk-page-bg); color: var(--ksk-brand); }
.favorites-tabs button.is-active { background: var(--ksk-brand); color: var(--ksk-page-bg); border-color: var(--ksk-brand); }
.favorite-card { border-color: var(--ksk-border); background: var(--ksk-page-bg); }
.favorite-card__meta { color: var(--ksk-text-muted); }
.favorite-card__actions button:not(.is-remove):not(.is-disabled), .favorite-card__actions a:not(.is-remove):not(.is-disabled) { background: var(--ksk-brand-light); color: var(--ksk-brand); }
.favorites-empty { border-color: var(--ksk-border); }
.favorites-empty p { color: var(--ksk-text-muted); }
.favorites-empty a { color: var(--ksk-brand); }
@media (min-width: 1024px) {
  .favorites-shell { max-width: var(--ksk-desktop-max); }
  .favorites-list { grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); }
}
