/* LECTURES 섹션 — SPEC-LECTURES-DESIGN v1.0 구현.
   원칙: 새 토큰 0·새 색 0(§0) — 전부 noir.css 토큰. 조판 값은 @designer 목업(java.html) 승계.
   학생 페이지 = 노와르 본채의 연장(Playfair 는 과목명 1곳만), 관리자 = 도구(Playfair 0·애니메이션 0). */

body.lect {
  background: var(--bg);
  color: var(--fg);
  font-family: var(--font-sans); /* 2026-09-25 — 고정값이던 것을 변수로(ko 페이지에서 Pretendard 스택을 받게) */
  margin: 0;
}

.lect .wrap { max-width: 920px; margin: 0 auto; padding: 56px var(--margin) 96px; }

/* 상단 바 — 본채 topbar 문법 승계(축약형: 워드마크 + 복귀 링크) */
.lect .topbar { display: flex; justify-content: space-between; align-items: center; padding: 14px var(--margin); border-bottom: 1px solid rgba(154, 160, 168, 0.18); }
.lect .wordmark { color: var(--fg); text-decoration: none; font-size: var(--fs-label); letter-spacing: var(--track-label); font-weight: 600; }
.lect .topnav { display: flex; align-items: center; min-height: 20px; } /* 2026-09-25 — 워드마크·토글 중심(24px)보다 2px 아래(26px)이던 기존 오프셋 정렬. min-height 20px = 기존 인라인 줄상자 높이(바 49px 유지 — 없으면 43px 로 줄어 본문이 6px 올라간다) */
.lect .topnav a { color: var(--fg-mute); text-decoration: none; font-size: var(--fs-label); letter-spacing: var(--track-label); margin-left: 18px; }
.lect .topnav a:hover { color: var(--gold); }

.lect .lbl,
.lect .crumb,
.lect .sub { font-size: var(--fs-label); letter-spacing: var(--track-label); text-transform: uppercase; }
.lect .crumb { color: var(--fg-dim); }
.lect .crumb a { color: var(--fg-dim); text-decoration: none; }
.lect .crumb a:hover { color: var(--gold); }
.lect .crumb b { color: var(--fg); font-weight: 600; }
.lect .sub { color: var(--fg-mute); }

/* ── 인덱스 (/lectures/) — START HERE 카드 문법 재사용 (§1) ── */
.lect .sec-head { display: flex; align-items: center; gap: 12px; margin-bottom: 28px; }
.lect .rule-gold { display: block; width: 56px; height: 3px; background: var(--gold); }
.lect .cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 16px; }
.lect .course-card {
  display: block;
  text-decoration: none;
  background: var(--bg-raise);
  border-top: 3px solid var(--gold);
  padding: 28px;
  min-height: 150px;
}
.lect .course-card .idx { font-size: var(--fs-label); letter-spacing: var(--track-label); color: var(--gold); }
.lect .course-card h2 { margin: 10px 0 4px; font-size: 1.5rem; font-weight: 600; color: var(--fg); } /* 국문 과목명 — §7b-1 산세리프 600 as-built */
.lect .course-card .meta { margin-top: 12px; color: var(--fg-mute); font-size: var(--fs-small); }
.lect .course-card:hover h2 { color: var(--gold); }

/* ── 과목 페이지 헤더 (§2) ── */
.lect h1.course { font-family: "Playfair Display", "Apple SD Gothic Neo", "Malgun Gothic", "Noto Sans KR", sans-serif; /* 2026-09-25 결함 수정 — 끝이 serif 라 한글 과목명이 OS 명조로 떨어졌다. 국문은 산세리프 600 폴백(SPEC-LECTURES) · 영어 페이지는 Pretendard 미로드 */ font-weight: 600; font-size: clamp(1.9rem, 3.4vw, 2.6rem); margin: 18px 0 4px; }
/* §7b-1: Playfair 는 한글 글리프가 없어 국문은 산세리프 600 폴백으로 렌더 — as-built 규칙. 한글 세리프 추가 로드 금지. */
.lect .meta { margin-top: 14px; color: var(--fg-mute); font-size: var(--fs-small); }
.lect .book { margin-top: 6px; color: var(--fg-mute); font-size: var(--fs-small); }
.lect .book a { color: var(--gold); text-decoration: none; }
.lect .ov { margin-top: 16px; max-width: 640px; line-height: 1.7; color: var(--fg); }
.lect .tw-btn {
  display: inline-block; margin-top: 20px; padding: 10px 18px;
  border: 1px solid var(--fg-dim); color: var(--fg); text-decoration: none;
  font-size: var(--fs-label); letter-spacing: var(--track-label);
}
.lect .tw-btn:hover { border-color: var(--gold); color: var(--gold); }

/* ── QR aside (SPEC-LECTURES-QR v1.0) — 헤더 우측·데스크톱 전용 ── */
.lect .course-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 32px; }
.lect .course-head-main { min-width: 0; }
.lect .qr-aside { flex: 0 0 auto; display: flex; flex-direction: column; gap: 8px; margin-top: 18px; }
.lect .qr-card {
  display: block; width: 192px; height: 192px; box-sizing: border-box;
  padding: 12px; /* 콰이엇존 — 카드 192 = QR 168 + 12×2 (헤더 수납 192·스캔 거리 168 두 기준값 유지) */
  background: #ffffff; /* 사이트 유일 순백 면 — 스캔 대비(§2). radius 0·테두리·그림자 없음 */
}
.lect .qr-card img { display: block; width: 100%; height: 100%; }
.lect .qr-cap { font-size: var(--fs-label); letter-spacing: var(--track-label); color: var(--fg-mute); }
.lect .qr-url { font-size: var(--fs-label); letter-spacing: 0.04em; color: var(--fg-dim); }
@media (max-width: 768px) {
  .lect .qr-aside { display: none; } /* 폰으로 이 페이지를 보는 사람에게 이 페이지 QR은 무의미(§1) */
}

/* ── 주차 리스트 (§3) — BOOKS 헤어라인 표 문법의 확장 ── */
.lect .weeks { margin-top: 48px; border-bottom: 1px solid rgba(154, 160, 168, 0.18); }
.lect .wk { border-top: 1px solid rgba(154, 160, 168, 0.18); }
.lect .wk > button {
  all: unset; display: flex; align-items: center; gap: 14px;
  width: 100%; min-height: 56px; cursor: pointer; box-sizing: border-box; padding: 8px 4px;
}
.lect .wk > button:focus-visible { outline: 1px solid var(--gold); outline-offset: 2px; }
.lect .wno { font-size: var(--fs-label); letter-spacing: var(--track-label); color: var(--fg-dim); font-variant-numeric: tabular-nums; min-width: 36px; }
.lect .badge {
  font-size: var(--fs-label); letter-spacing: var(--track-label);
  border: 1px solid var(--fg-dim); color: var(--fg-dim);
  border-radius: 2px; padding: 2px 8px; white-space: nowrap;
}
.lect .badge.remote { border-color: var(--fg-mute); color: var(--fg-mute); }
.lect .badge.exam { border-color: var(--gold); color: var(--gold); } /* 면 채움 금지 — 주홍 면적 규칙(§3.3) */
.lect .topic { font-weight: 500; flex: 1; min-width: 0; }
.lect .ind { font-size: var(--fs-label); letter-spacing: var(--track-label); color: var(--fg-dim); white-space: nowrap; }
.lect .chev { color: var(--fg-dim); transition: transform var(--dur-fast) var(--ease); }
.lect .wk.open .chev { transform: rotate(180deg); }

/* 펼침: max-height 금지(내용 가변, §3.2) — grid-template-rows 0fr→1fr */
.lect .panel { display: grid; grid-template-rows: 0fr; transition: grid-template-rows var(--dur-fast) var(--ease); }
.lect .wk.open .panel { grid-template-rows: 1fr; }
.lect .panel > div { overflow: hidden; }
.lect .pin { padding: 4px 4px 26px 54px; }
.lect .pin.bare { padding: 0; } /* 내용 전무 주차 — 빈 상자 여백 제거(자료 준비 중 문구 삭제에 따른 정리) */
.lect .detail { color: var(--fg-mute); line-height: 1.7; max-width: 600px; }
.lect .weight { margin-top: 10px; }
.lect .weight b { color: var(--gold); font-weight: 600; font-size: var(--fs-small); letter-spacing: 0.04em; }
.lect .bh { margin: 22px 0 8px; font-size: var(--fs-label); letter-spacing: var(--track-label); color: var(--fg-mute); }
.lect .file {
  display: flex; align-items: center; gap: 12px; min-height: 44px;
  text-decoration: none; color: var(--fg); border-top: 1px solid rgba(154, 160, 168, 0.10);
}
.lect .file:first-of-type { border-top: 0; }
.lect .file:hover .fn { color: var(--gold); }
.lect .fn { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lect .fm { font-size: var(--fs-label); letter-spacing: 0.08em; color: var(--fg-dim); white-space: nowrap; }
.lect .asg { line-height: 1.7; }
.lect .asgmeta { margin-top: 8px; font-size: var(--fs-label); letter-spacing: var(--track-label); color: var(--fg-dim); }
.lect .asgmeta b { color: var(--gold); font-weight: 600; }
.lect .notice { color: var(--fg-mute); line-height: 1.7; }
.lect .empty { color: var(--fg-dim); font-size: var(--fs-small); }

/* THIS WEEK (§3.4) — 좌측 3px 주홍 룰(카드 상단 룰의 세로 전개) + bg-raise, 동시에 1행만 */
.lect .wk.now { background: var(--bg-raise); box-shadow: inset 3px 0 0 var(--gold); }
.lect .wk.now .wno { min-width: auto; }
.lect .wk.now .wno::after { content: "THIS WEEK"; color: var(--gold); margin-left: 10px; }

/* ── 모바일 (§4·§7b-2) ── */
@media (max-width: 768px) {
  /**
   * §7c (2026-09-01) — **1행 = 메타 전용, 2행 = 제목 전폭**.
   * ★ 근본 처치: 가변 길이인 것은 제목뿐인데, 그것을 고정 길이 라벨들(W01·THIS WEEK·배지·인디케이터)과
   *   같은 줄에 두어 **좁은 잔여 폭에서 3줄로 감기고 우측으로 밀렸다.** 가변 요소를 고정 요소와
   *   같은 줄에 두지 않는 것이 처방이다(제목을 아래로 내리는 것만으로는 잔여 폭 문제가 남는다).
   * ★ 개정(2026-09-01 사용자 지시 "조건부 하강으로 두지 말고 그냥 한칸 밑으로 내리세요 모두"):
   *   **조건 분기를 두지 않는다.** 폭에 따라 위치가 달라지면 화면이 예측 불가능해진다 —
   *   인디케이터도 무조건 2행으로 내려 모든 주차·모든 뷰포트에서 같은 구조가 된다.
   *   1행 = W01 · THIS WEEK · 배지 · 셰브론(고정 라벨만) / 2행 = 제목 + 인디케이터(전폭 좌측 정렬).
   */
  /**
   * 행 간 숨 간격 — 사용자 지시("한줄 더 내립시다. 좀 답답해 보여서요", 2026-09-01) / §7c.3 확정값.
   * ★ row-gap 만 늘리면 **인접 주차가 서로 섞여 읽힌다** — 주차 행은 헤어라인으로만 구분되므로
   *   행 사이 여백이 행 내부 여백보다 커야 그룹핑이 유지된다. padding-block 을 함께 올려
   *   **부등식 `padding-block × 2 > row-gap`** 을 지킨다(14×2=28 > 8). 조정 시에도 이 부등식이 근거다.
   *   row-gap 은 6/8/10 사이에서 움직일 수 있고, 그 위로 가야 하면 padding-block 을 먼저 올린다.
   */
  .lect .wk > button { flex-wrap: wrap; row-gap: 8px; padding: 14px 4px; position: relative; align-items: baseline; }
  .lect .wno { order: 1; }
  .lect .badge { order: 2; }
  /* 인디케이터 — 2행, 제목 아래. 좌단은 제목과 같은 선에 맞춘다(조건 분기 없음) */
  .lect .ind { order: 6; flex: 0 0 100%; min-width: 100%; margin-left: 0; padding-left: 0; }
  /* §7b-2(셰브론 1행 우단) 유지 — 다만 **absolute + top 고정값을 폐기**하고 1행의 마지막 항목으로 둔다.
     그러면 세로 위치가 1행 baseline 에서 파생되어 어느 폭·어느 글자 크기에서도 정렬이 맞는다
     (고정 top 은 한 조건에서만 맞았고 실측 Δ4.5px 로 어긋났다). */
  /**
   * 셰브론 — 1행 우단(§7b-2). absolute 고정값 대신 1행 마지막 항목이라 정렬이 조판에서 파생된다.
   * ★ Δ 2.00px 은 여유 부족이 아니라 **구조적 상수**였다: 컨테이너가 align-items:baseline 이라
   *   글리프('⌄')와 라벨('W01')의 baseline 이 맞고, 두 글꼴 상자 높이 차(14px vs 11px)의 절반인
   *   1.5~2px 만큼 광학 중심이 어긋난다. 세 폭에서 같은 값이 나온 이유다.
   *   → baseline 대신 **그 flex 라인 안에서 center** 정렬로 바꿔 Δ 를 0 근처로 내린다
   *     (wrap 된 flex 에서 align-self 는 해당 라인 기준이므로 2·3행에 영향이 없다).
   */
  .lect .chev { order: 3; position: static; flex: 0 0 auto; margin-left: auto; align-self: center; }
  /**
   * 제목 — **좁아지면 자기 줄로 내려간다**(조건부 하강).
   * ★ 무조건 전폭으로 내리면 증상이 없는 행(THIS WEEK·긴 배지가 없어 잔여 폭이 넉넉한 행)까지
   *   한 줄씩 더 먹어 15행 목록 높이가 늘어난다(실측 +130px). §7c ④ "높이가 개정 전보다 크지 않을 것"과 충돌.
   * ★ 조건부 하강(min-width 로 잔여 폭이 좁을 때만 내리기)은 **이 구조에서 성립하지 않는다** —
   *   인디케이터가 1행 우측을 점유하므로 어느 행이든 제목 자리가 남지 않아 항상 내려간다(실측).
   *   그래서 스펙 문면대로 전폭 고정으로 둔다. 높이 증가(실측 +130px/15행)는 §7c ④와 충돌하며
   *   판정은 @designer 소관으로 남긴다 — 임의 절충은 의도를 흐린다.
   *   말줄임 금지(넓은 폭에서 2줄은 정상): 결함은 '감김'이 아니라 '좁은 폭에서 감김'이었다.
   */
  .lect .topic { order: 5; flex: 0 0 100%; min-width: 100%; }
  /* 펼침 패널 상단 10px — 첫 내용이 인디케이터에 붙지 않게(4px 은 새 row-gap 8px 보다 작아 역전됐다) */
  .lect .pin { padding-left: 4px; padding-top: 10px; }
  /* 파일 행: 파일명 1행 말줄임 + 메타 2행째 (§4) */
  .lect .file { flex-wrap: wrap; row-gap: 0; padding-block: 6px; }
  .lect .fn { flex-basis: 100%; }
  .lect .fm { padding-left: 18px; }
}

/* ── 관리자 (§5) — 도구: Playfair 0 · 애니메이션 0 · 주홍 면은 저장 버튼만 ── */
.lect.admin * { transition: none !important; animation: none !important; }
.lect .admin-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 28px; }
.lect .login-card {
  max-width: 360px; margin: 18vh auto 0; background: var(--bg-raise); padding: 32px;
  border-top: 3px solid var(--gold);
}
.lect .login-card h1 { font-size: var(--fs-card); font-weight: 600; margin: 0 0 18px; }
.lect input[type="text"],
.lect input[type="password"],
.lect input[type="date"],
.lect textarea {
  width: 100%; box-sizing: border-box; background: var(--bg); color: var(--fg);
  border: 1px solid var(--fg-dim); border-radius: 2px; padding: 10px 12px;
  font: inherit; font-size: var(--fs-small); margin-bottom: 12px;
}
.lect input:focus, .lect textarea:focus { outline: none; border-color: var(--gold); }
.lect .btn-save {
  display: inline-block; border: 0; cursor: pointer;
  background: var(--gold); color: var(--on-gold); /* 관리자 화면의 유일한 면 채움(§5) */
  font-size: var(--fs-label); letter-spacing: var(--track-label); font-weight: 600;
  padding: 10px 20px; border-radius: 2px;
}
.lect .btn-ghost {
  display: inline-block; border: 1px solid var(--fg-dim); background: none; cursor: pointer;
  color: var(--fg-mute); font-size: var(--fs-label); letter-spacing: var(--track-label);
  padding: 8px 14px; border-radius: 2px;
}
.lect .btn-ghost:hover { border-color: var(--gold); color: var(--gold); }
.lect .form-msg { font-size: var(--fs-small); color: var(--fg-mute); min-height: 1.4em; margin-top: 8px; } /* 인라인 피드백 — 토스트 불요(§5) */
.lect .form-msg.err { color: var(--gold); }
.lect .tabs { display: flex; gap: 10px; margin: 22px 0; }
.lect .tab { border: 1px solid var(--fg-dim); background: none; color: var(--fg-mute); cursor: pointer; padding: 8px 16px; font-size: var(--fs-label); letter-spacing: var(--track-label); border-radius: 2px; }
.lect .tab[aria-selected="true"] { border-color: var(--gold); color: var(--gold); }
.lect .vis-row { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; font-size: var(--fs-small); color: var(--fg-mute); }
.lect .wk .cur-radio { display: inline-flex; align-items: center; gap: 6px; font-size: var(--fs-label); letter-spacing: var(--track-label); color: var(--fg-dim); cursor: pointer; white-space: nowrap; }
.lect .dropzone {
  border: 1px dashed var(--fg-dim); border-radius: 2px; padding: 22px; text-align: center;
  color: var(--fg-dim); font-size: var(--fs-small); cursor: pointer; margin: 10px 0;
}
.lect .dropzone.over { border-color: var(--gold); color: var(--gold); }
.lect .file .del { border: 0; background: none; color: var(--fg-dim); cursor: pointer; font-size: var(--fs-label); letter-spacing: var(--track-label); padding: 6px; }
.lect .file .del:hover { color: var(--gold); }

/* ── 과제 제출 (PLAN-ASSIGNMENT-SUBMIT v1.0, 2026-10-07) — 새 토큰 0·새 색 0. 주차 행 버튼은 tw-btn 문법, 제출 화면은 login-card 문법 ── */
.lect .sub-row { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; margin-top: 14px; }
.lect .sub-btn {
  display: inline-block; padding: 10px 18px; border: 1px solid var(--fg-dim); color: var(--fg); text-decoration: none;
  font-size: var(--fs-label); letter-spacing: var(--track-label);
}
.lect .sub-btn:hover { border-color: var(--gold); color: var(--gold); }
.lect .sub-note { font-size: var(--fs-label); letter-spacing: var(--track-label); color: var(--fg-dim); }
.lect .sub-note.late { color: var(--gold); }
.lect .sub-closed { margin-top: 14px; font-size: var(--fs-label); letter-spacing: var(--track-label); color: var(--fg-dim); }

/* 제출 화면 /lectures/{slug}/submit/ — 폼 안 문구는 전부 한국어(§8) */
.lect .submit { max-width: 560px; }
.lect .submit h1 { font-size: var(--fs-card); font-weight: 600; margin: 8px 0 4px; }
.lect .submit .topic { color: var(--fg-mute); font-size: var(--fs-small); }
.lect .submit .asg { margin-top: 14px; }
.lect .submit form { margin-top: 28px; }
.lect .submit .f { display: block; margin-bottom: 16px; font-size: var(--fs-small); color: var(--fg-mute); }
.lect .submit .f > span { display: block; margin-bottom: 6px; }
.lect .submit input[type="text"], .lect .submit textarea { margin-bottom: 0; }
.lect .submit input[type="file"] { display: block; width: 100%; color: var(--fg-mute); font-size: var(--fs-small); }
.lect .submit .hint { font-size: var(--fs-label); color: var(--fg-dim); margin-top: 6px; }
.lect .submit .consent { display: flex; gap: 10px; align-items: flex-start; font-size: var(--fs-small); color: var(--fg-mute); line-height: 1.6; margin: 18px 0; }
.lect .submit .consent input { margin-top: 4px; flex: 0 0 auto; }
.lect .submit .btn-save:disabled { opacity: 0.5; cursor: default; }
.lect .submit .progress { height: 3px; background: var(--bg-raise); margin-top: 14px; overflow: hidden; }
.lect .submit .progress > i { display: block; height: 100%; width: 0; background: var(--gold); }
.lect .submit .back { display: inline-block; margin-top: 22px; color: var(--fg-mute); text-decoration: none; font-size: var(--fs-label); letter-spacing: var(--track-label); }
.lect .submit .back:hover { color: var(--gold); }
/* 접수 확인 — 캡처 전제(접수번호·시각 크게) */
.lect .receipt { background: var(--bg-raise); border-top: 3px solid var(--gold); padding: 28px; margin-top: 24px; }
.lect .receipt .no { font-size: clamp(1.6rem, 5vw, 2.4rem); font-weight: 600; letter-spacing: 0.04em; margin: 6px 0 2px; color: var(--fg); }
.lect .receipt .at { font-size: var(--fs-card); margin: 0 0 14px; color: var(--fg); }
.lect .receipt .late { color: var(--gold); font-weight: 600; }
.lect .receipt p { line-height: 1.7; margin: 8px 0 0; color: var(--fg-mute); font-size: var(--fs-small); }
.lect .receipt p.cap { color: var(--fg); }

/* 관리자 제출 블록 */
.lect .sub-admin .toggle { display: flex; align-items: center; gap: 10px; font-size: var(--fs-small); color: var(--fg-mute); margin: 4px 0 10px; }
.lect .sub-admin .sub-status { font-size: var(--fs-label); letter-spacing: var(--track-label); color: var(--fg-dim); margin-left: 6px; }
.lect .sub-admin .tools { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin: 8px 0 12px; }
.lect .sub-admin .tools a { text-decoration: none; }
.lect .sub-admin table { width: 100%; border-collapse: collapse; font-size: var(--fs-small); }
.lect .sub-admin th { text-align: left; font-size: var(--fs-label); letter-spacing: var(--track-label); color: var(--fg-dim); font-weight: 500; padding: 8px 6px; border-bottom: 1px solid rgba(154, 160, 168, 0.2); }
.lect .sub-admin td { padding: 8px 6px; border-bottom: 1px solid rgba(154, 160, 168, 0.1); vertical-align: top; }
.lect .sub-admin td a { color: var(--fg); text-decoration: none; }
.lect .sub-admin td a:hover { color: var(--gold); }
.lect .sub-admin tr.prev td { color: var(--fg-dim); }
.lect .sub-admin .late { color: var(--gold); }
.lect .sub-admin .memo { color: var(--fg-mute); white-space: pre-wrap; }

/* 관리자 마감일 달력 UX (2026-10-07) — 네이티브 피커 유지, 다크 배경에서 아이콘이 보이게 + 달력 버튼 + 요약 줄 */
.lect .due-row { display: flex; align-items: stretch; gap: 8px; margin-bottom: 6px; }
.lect .due-row input[type="date"] { flex: 1; margin-bottom: 0; color-scheme: dark; min-height: 42px; }
.lect .due-row input[type="date"]::-webkit-calendar-picker-indicator { opacity: 0.85; cursor: pointer; filter: invert(1); }
.lect .due-row .due-pick { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.lect .due-sum { font-size: var(--fs-small); color: var(--fg-mute); margin: 0 0 12px; }
.lect .due-sum.err { color: var(--gold); }

/* 관리자 자료 파일 공개/비공개 (2026-10-13) — 비공개 행은 흐리게 + 라벨, 토글은 DELETE 와 같은 문법의 텍스트 버튼 */
.lect .file.hidden-file .fn, .lect .file.hidden-file .fm { color: var(--fg-dim); }
.lect .file .vis-lbl { font-size: var(--fs-label); letter-spacing: var(--track-label); color: var(--gold); margin-left: 8px; }
.lect .file .vis { border: 1px solid var(--fg-dim); background: none; color: var(--fg-mute); cursor: pointer; font-size: var(--fs-label); letter-spacing: var(--track-label); padding: 5px 8px; border-radius: 2px; white-space: nowrap; }
.lect .file .vis:hover { border-color: var(--gold); color: var(--gold); }
.lect .file .vis:disabled { opacity: 0.5; cursor: default; }
