/* =========================================================
   공용 레이아웃 — 헤더(GNB) · 페이지 머리 · 2차 메뉴 · 푸터

   이 파일은 모든 화면에 로드됩니다(_Layout.cshtml). 이관한 화면이든
   아니든 껍데기는 똑같이 이것을 씁니다.

   common.css 의 header / footer / .subvisual / .submenu 규칙을 걷어내고
   그 자리를 대신합니다. 그쪽을 지웠기 때문에 여기서 특이도를 올려
   싸울 필요가 없습니다.

   ── 바꾼 것 중 결과가 큰 하나 ──────────────────────────────
   예전 헤더는 position: fixed 로 본문 위에 떠 있었고, 본문은
   .no-subvisual main > .container { padding-top: 100px } 로 그만큼
   자리를 비워 줬습니다. 새 헤더는 문서 흐름 안에 있습니다(sticky).
   그래서 그 100px 장치와 .no-subvisual 클래스 자체가 필요 없습니다.

   ── 마크업을 건드리지 않은 이유 ────────────────────────────
   .subvisual 과 .submenu 는 87개 / 51개 화면이 각자 들고 있는
   마크업입니다. 구조를 바꾸면 그 파일을 전부 고쳐야 해서, 클래스
   이름을 그대로 두고 스타일만 갈아 끼웠습니다. 배경 사진을 걸던
   #SubpageMypage 같은 ID 규칙은 common.css 에서 지웠으므로 사진은
   자동으로 사라집니다.
   ========================================================= */

:root {
  /* 2차 메뉴가 헤더 아래에 붙으려면 헤더 높이를 알아야 한다. */
  --pd-gnb-h: 72px;

  /* z 값은 기존과 같은 숫자를 씁니다. 아직 이관하지 않은 90개 화면의
     팝업·오버레이가 예전 헤더(1000)를 기준으로 쌓여 있어서, 여기만
     디자인 시스템의 낮은 z 스케일로 내리면 그쪽이 헤더를 덮습니다. */
  --pd-gnb-z: 1000;
  --pd-submenu-z: 500;

  /*
     디자인 시스템의 겹침 순서를 이 헤더 위로 올립니다.

     tokens.css 의 z 스케일은 0~500 입니다(overlay 200, modal 300,
     toast 400, tooltip 500). 그대로 두면 **모달이 헤더 아래로 깔립니다.**
     헤더가 위에서 말한 이유로 1000 을 쓰기 때문입니다. 배경막이 헤더를
     덮지 못하고, 가운데 뜬 모달의 윗부분이 헤더에 잘립니다.

     드롭다운도 같은 문제입니다. 본문에서 열린 드롭다운(100)이 위에 붙어
     있는 2차 메뉴(500) 아래로 들어갑니다.

     그래서 순서를 값이 아니라 관계로 적습니다. 헤더가 나중에 낮은 값으로
     내려가면 이것들도 함께 내려갑니다.

     드롭다운은 헤더보다 아래입니다 — 본문에서 연 목록이 헤더를 덮을
     이유는 없습니다. 대신 2차 메뉴보다는 위여야 합니다.
  */
  --pd-z-dropdown: calc(var(--pd-submenu-z) + 100);
  --pd-z-overlay: calc(var(--pd-gnb-z) + 100);
  --pd-z-modal: calc(var(--pd-gnb-z) + 200);
  --pd-z-toast: calc(var(--pd-gnb-z) + 300);
  --pd-z-tooltip: calc(var(--pd-gnb-z) + 400);
}

@media (max-width: 960px) {
  :root { --pd-gnb-h: 60px; }
}

/* =========================================================
   0. 페이지 바탕

   common.css 가 body 에 #fafafa 를 깔고 있었습니다. 디자인 시스템의 페이지
   배경은 --pd-surface-sunken(#F7F8FA)입니다. 두 값이 비슷해 보이지만 성질이
   다릅니다 — #fafafa 는 중성 회색이고, 토큰 쪽은 다른 회색들과 같은 남색조
   (ink)에서 나옵니다. 카드(흰색)·표 머리·비활성 입력이 모두 그 계열이라,
   바탕만 중성이면 그 위의 회색들이 미세하게 누렇게 보입니다.

   common.css 보다 뒤에 실리므로 특이도를 올리지 않아도 이깁니다.
   ========================================================= */

body { background-color: var(--pd-surface-sunken); }

/* =========================================================
   1. 헤더 (GNB)

   가로 배치는 .pd-gnb__inner 가, 세로 정렬은 각 칸이 맡습니다.
   메뉴·도구·계정·연락처는 모두 .pd-gnb__menus 안에 한 번만 그립니다.
   좁은 화면에서 이 덩어리가 통째로 서랍이 되고, order 로 순서만
   바뀝니다. (예전에는 _LoginPartial 을 두 번 그려서 id 가 중복됐습니다.)
   ========================================================= */

.pd-gnb {
  position: sticky;
  top: 0;
  z-index: var(--pd-gnb-z);
  background-color: var(--pd-surface);
  border-bottom: 1px solid var(--pd-border);
}

.pd-gnb__inner {
  max-width: 1280px;
  margin-inline: auto;
  padding-inline: var(--pd-space-5);
  height: var(--pd-gnb-h);
  display: flex;
  align-items: center;
  gap: var(--pd-space-8);
}

.pd-gnb__logo {
  flex: 0 0 auto;
  display: block;
  line-height: 0;
}
.pd-gnb__logo img {
  display: block;
  height: 18px;
  width: auto;
}

.pd-gnb__menus {
  flex: 1 1 auto;
  min-width: 0;
  /* 1차 메뉴 항목이 헤더 높이를 다 쓰게 합니다. 하위 메뉴 띠가 항목의
     아래(top: 100%)에 붙으므로, 항목이 글자 높이만큼만 크면 띠가 헤더
     한가운데서 열립니다. 현재 메뉴 밑줄(bottom: -1px)도 이래야 헤더의
     아래 선 위에 앉습니다. */
  align-self: stretch;
  display: flex;
  align-items: center;
  gap: var(--pd-space-6);
}

/* ---- 1차 메뉴 ---- */

.pd-gnb__nav {
  order: 1;
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: var(--pd-space-1);
  height: 100%;
}

/* 항목에 position 을 주지 않습니다. 하위 메뉴 띠가 항목이 아니라 헤더를
   기준으로 자리를 잡아야 어느 메뉴를 가리켜도 같은 자리에서 열립니다. */
.pd-gnb__item {
  height: 100%;
  display: flex;
  align-items: center;
}

.pd-gnb__link {
  /* 현재 메뉴 밑줄(::after)이 잡을 기준. 예전에는 항목이 이 역할을 했습니다. */
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: var(--pd-space-1);
  height: 100%;
  /* 좌우 여백을 변수로 둡니다. 현재 메뉴 밑줄과 Beta 배지가 글자 끝을 이 값으로
     찾아서, 좁은 폭에서 여백이 줄면 셋이 함께 움직여야 합니다. */
  --gnb-link-px: var(--pd-space-3);
  padding-inline: var(--gnb-link-px);
  font-size: 16px;
  font-weight: var(--pd-weight-semibold);
  color: var(--pd-text-secondary);
  white-space: nowrap;
  /* base.css 의 :where(.pd-root) a:hover 가 밑줄을 그으려 합니다. 1차 메뉴는
     현재 위치를 아래 민트 선으로 알리고 있어서, 밑줄이 그어지면 선이 두 줄로
     겹칩니다. 가리켰다는 것은 글자색으로 알립니다. */
  text-decoration: none;
  transition: color var(--pd-dur) var(--pd-ease);
}
.pd-gnb__link:hover,
.pd-gnb__link:focus-visible { color: var(--pd-accent); text-decoration: none; }
.pd-gnb__link:focus-visible {
  outline: none;
  box-shadow: var(--pd-focus-ring);
  border-radius: var(--pd-radius-sm);
}

/* 현재 위치. 글자색과 아래 선을 함께 바꿔야 색만으로 구분하지 않게 된다. */
.pd-gnb__item.is-current > .pd-gnb__link,
.pd-gnb__link.is-current {
  color: var(--pd-accent);
}
.pd-gnb__item.is-current > .pd-gnb__link::after,
.pd-gnb__link.is-current::after {
  content: "";
  position: absolute;
  left: var(--gnb-link-px);
  right: var(--gnb-link-px);
  bottom: -1px;
  height: 2px;
  background-color: var(--pd-accent);
}

.pd-gnb__link .pd-icon { width: var(--pd-icon-sm); height: var(--pd-icon-sm); }

/* Beta 배지는 글자 오른쪽 위에 띄웁니다(PILLDOC-2451).
   글자 옆에 줄지어 두면 배지 폭만큼 메뉴 단추가 넓어집니다. 입고관리가 들어와
   1차 메뉴가 일곱 개가 되면서 그 폭을 낼 자리가 없어, 흐름에서 빼고 오른쪽
   여백 위에 얹습니다. 단추 폭은 글자 길이만큼이 됩니다. 서랍(좁은 화면)에서는
   한 줄을 통째로 쓰므로 아래 미디어쿼리에서 다시 글자 옆에 둡니다. */
.pd-gnb__badge {
  position: absolute;
  top: calc(50% - 19px);
  left: calc(100% - var(--gnb-link-px) - 4px);
  font-size: 10px;
  font-weight: var(--pd-weight-bold);
  font-style: italic;
  line-height: 1;
  color: var(--pd-cta);
  letter-spacing: 0;
  pointer-events: none;
}

/* ---- 하위 메뉴 ----
   예전에는 화면 폭을 가로지르는 어두운 판이 열렸고, 높이를
   menu-count7 { height: 308px } 처럼 항목 수마다 픽셀로 박아 뒀습니다.
   항목을 하나 늘리면 잘렸습니다.

   그 뒤 한동안 떠 있는 카드(세로 목록)였는데, 다시 **헤더 아래에 붙는
   가로 띠**로 돌립니다. 이유는 서브페이지와 짝을 맞추기 위해서입니다 —
   서브페이지는 헤더 바로 아래에 같은 모양의 2차 메뉴(.submenu)를 늘 펼쳐
   두고 있습니다. hover 로 열리는 것과 머물러 있는 것이 다른 모양·다른
   자리면 같은 메뉴로 읽히지 않습니다.

   그래서 띠는 **항목이 아니라 헤더**를 기준으로 놓습니다. 어느 메뉴를
   가리켜도 같은 자리에서 열리고, 왼쪽 끝이 서브페이지의 2차 메뉴와
   맞습니다(.container 와 같은 1280 + 20 여백 셈).

   ── 안에 무엇이 들어가는가 ──────────────────────────────────
   링크 줄 자체는 .pd-subnav 입니다(아래 4-1절). Views/Shared/_SubNav.cshtml
   이 그리며, 서브페이지의 2차 메뉴도 **같은 파샬**이 그립니다. 여기는
   자리와 배경, 여닫는 몸짓만 맡습니다. */

.pd-gnb__sub {
  position: absolute;
  /* 100% 는 헤더의 패딩 상자(72px)라 아래 보더 1px 이 빠져 있습니다.
     그대로 두면 띠의 첫 1px 이 보더와 겹칩니다. */
  top: calc(100% + 1px);
  left: 0;
  right: 0;
  /* 서브페이지의 .submenu > .container 와 같은 셈. 두 띠의 왼쪽 끝이 맞습니다. */
  padding-inline: max(var(--pd-space-5), calc((100% - 1280px) / 2 + var(--pd-space-5)));
  /* 왼쪽 끝은 그 위의 1차 메뉴 글자에 맞춥니다 — 아래 4-2절.
     --pd-subnav-x 는 layout.js 가 재서 넣습니다. 없으면 위 셈 그대로입니다. */
  padding-inline-start: var(--pd-subnav-x, max(var(--pd-space-5), calc((100% - 1280px) / 2 + var(--pd-space-5))));
  background-color: var(--pd-surface);
  /* .submenu 와 **똑같이** 아래 선 하나뿐입니다. 한동안 여기에만 드리운
     그림자를 얹었는데, 서브페이지에서 hover 하면 머물러 있던 띠 아래로
     그림자가 새로 생겨 같은 메뉴가 다른 것으로 보였습니다(측정: 폭 전체
     11줄 차이). 띠는 헤더에 붙어 있지 떠 있는 것이 아니라 그림자가 할 일이
     없습니다. */
  box-shadow: inset 0 -1px 0 var(--pd-border);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-4px);
  transition:
    opacity var(--pd-dur) var(--pd-ease),
    transform var(--pd-dur) var(--pd-ease),
    visibility var(--pd-dur) var(--pd-ease);
}

/*
   이미 펼쳐져 있는 갈래는 hover 로 또 열지 않는다

   서브페이지에는 지금 갈래의 띠가 이미 헤더 밑에 머물러 있습니다. 그 1차
   메뉴를 가리키면 **똑같은 띠**가 그 위에 한 벌 더 덮입니다. 지금은 둘이
   픽셀까지 같아서 눈에 띄지 않지만, 없는 편이 맞습니다 — 열 것이 없는데
   여는 셈이고, 링크가 한 문서에 두 벌이라 키보드 이동에도 같은 항목이
   두 번 걸립니다.

   .is-current 만으로 정하지 않고 `main > .submenu` 가 실제로 있는지 함께
   봅니다. 그 갈래인데 띠가 없는 화면이 있으면 하위 메뉴로 가는 길이 통째로
   막히기 때문입니다.

   서랍(≤960px)에는 걸지 않습니다. 거기서는 눌러서 여는 방식이고 화면에
   띠가 함께 보이지 않습니다.
*/
@media (min-width: 961px) {
  body:has(main > .submenu) .pd-gnb__item.is-current > .pd-gnb__sub {
    opacity: 0;
    visibility: hidden;
  }
}

.pd-gnb__item:hover > .pd-gnb__sub,
.pd-gnb__item:focus-within > .pd-gnb__sub,
.pd-gnb__item.is-open > .pd-gnb__sub {
  opacity: 1;
  visibility: visible;
  /* 다 열린 뒤에는 항등 변환을 남기지 않습니다(translateY(0) 아님).
     남은 변환은 합성 레이어를 붙잡아 둘 이유가 없는데도 붙잡습니다. */
  transform: none;
}

/* 가운데로 모으는 띠(고객센터·내정보). 맞출 1차 메뉴 글자가 없어서
   layout.js 가 왼쪽 여백을 재지 않고, 띠는 1280 컨테이너 가운데에 놓입니다.
   좁은 화면(서랍)에서는 세로 목록이라 걸지 않습니다. */
@media (min-width: 961px) {
  .pd-gnb__sub .pd-subnav--center { justify-content: center; }
}

/* 넓은 화면에서만 여는 삼각형. 좁은 화면에서는 서랍이 대신한다. */
.pd-gnb__caret {
  display: none;
  width: var(--pd-icon-sm);
  height: var(--pd-icon-sm);
  color: var(--pd-text-placeholder);
}

/* ---- 도구 줄 ----

   고객센터 · 필독 에이전트 · 광고문의 · 원격지원. 서비스를 쓰다가 찾는 곳이라
   1차 메뉴보다 한 급 작고 가볍게 둡니다(16 → 14px, 굵기 한 단계 아래). 같은
   무게로 두면 서비스와 도구가 다시 한 줄로 섞여 읽힙니다.

   항목·링크·하위 띠는 1차 메뉴와 같은 마크업(.pd-gnb__item)이라 여닫기,
   현재 위치 밑줄, 서랍 모양을 그대로 물려받습니다. 여기서는 크기만 바꿉니다. */

.pd-gnb__tools {
  order: 2;
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  height: 100%;
}

.pd-gnb__tools .pd-gnb__link {
  padding-inline: var(--pd-space-2);
  font-size: 14px;
  font-weight: var(--pd-weight-medium);
}
.pd-gnb__tools .pd-gnb__item.is-current > .pd-gnb__link::after {
  left: var(--pd-space-2);
  right: var(--pd-space-2);
}


/* 프로그램 설치 — 도구 줄에서 가장 먼저 보이는 자리입니다. 옅은 민트 바탕의 알약 모양에
   내려받기 아이콘을 붙여 「설치하러 가는 곳」으로 읽히게 합니다. 채운 단추(주 단추)는
   화면 본문의 할 일 몫이라 쓰지 않습니다. 원격지원(테두리)과 모양이 달라 둘이 섞이지 않습니다. */
.pd-gnb__tools .pd-gnb__install {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 32px;
  margin-inline-end: var(--pd-space-2);
  padding-inline: var(--pd-space-3);
  border-radius: var(--pd-radius-pill);
  background-color: var(--pd-accent-subtle);
  color: var(--pd-accent-on-subtle);
  font-size: 13px;
  font-weight: var(--pd-weight-semibold);
  white-space: nowrap;
  text-decoration: none;
  transition: background-color var(--pd-dur) var(--pd-ease);
}
.pd-gnb__tools .pd-gnb__install .pd-icon { width: 14px; height: 14px; }
.pd-gnb__tools .pd-gnb__install:hover { text-decoration: none; filter: brightness(0.96); }
.pd-gnb__tools .pd-gnb__install:focus-visible { outline: none; box-shadow: var(--pd-focus-ring); }
/* 알약 모양이라 현재 위치 밑줄 대신 테두리로 알립니다. */
.pd-gnb__tools .pd-gnb__item.is-current > .pd-gnb__install::after { display: none; }
.pd-gnb__tools .pd-gnb__item.is-current > .pd-gnb__install { box-shadow: inset 0 0 0 1px var(--pd-accent); }

/* ---- 계정 ---- */

/* 계정 영역은 로그아웃 POST 때문에 form 으로 한 겹 싸여 있습니다.
   그 form 도 같은 줄로 세워야 안쪽 항목이 나란히 놓입니다. */
.pd-gnb__account,
.pd-gnb__account > form {
  order: 3;
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: var(--pd-space-3);
}

/* 펼침을 여는 자리이자 내정보로 가는 링크. 헤더 오른쪽에 보이는 계정 정보는
   이 한 줄이 전부입니다(마일리지·로그아웃은 펼침 안으로 들어갔습니다). */
.pd-gnb__user {
  display: flex;
  align-items: center;
  gap: var(--pd-space-1);
  padding: var(--pd-space-1) var(--pd-space-2);
  border-radius: var(--pd-radius-sm);
  font-size: 14px;
  /* base.css 가 .pd-root 안의 a:hover 에 밑줄을 긋습니다. 이 줄은 링크보다
     메뉴 손잡이에 가까워서, 가리켰다는 것은 배경으로 알립니다. */
  text-decoration: none;
  transition: background-color var(--pd-dur) var(--pd-ease);
}
.pd-gnb__user:hover { background-color: var(--pd-surface-sunken); text-decoration: none; }
.pd-gnb__user:focus-visible { outline: none; box-shadow: var(--pd-focus-ring); }
.pd-gnb__menu:hover > .pd-gnb__user,
.pd-gnb__menu:focus-within > .pd-gnb__user { background-color: var(--pd-surface-sunken); }

.pd-gnb__user-caret {
  width: var(--pd-icon-sm);
  height: var(--pd-icon-sm);
  color: var(--pd-text-placeholder);
  transition: transform var(--pd-dur) var(--pd-ease);
}
.pd-gnb__menu:hover .pd-gnb__user-caret,
.pd-gnb__menu:focus-within .pd-gnb__user-caret { transform: rotate(180deg); }

.pd-gnb__rank {
  display: inline-flex;
  align-items: center;
  height: 22px;
  padding-inline: var(--pd-space-2);
  border-radius: var(--pd-radius-sm);
  font-size: 11px;
  font-weight: var(--pd-weight-bold);
  background-color: var(--pd-surface-muted);
  color: var(--pd-text-secondary);
}
.pd-gnb__rank[data-rank="premium"] {
  background-color: var(--pd-gold-50);
  color: var(--pd-gold-700);
}

.pd-gnb__name { color: var(--pd-text); font-weight: var(--pd-weight-semibold); }
.pd-gnb__name em { font-style: normal; font-weight: var(--pd-weight-regular); color: var(--pd-text-secondary); margin-inline-start: 2px; }

/* 펼침 맨 위의 마일리지 줄. 아래 목록에도 "마일리지" 항목이 있지만, 그쪽은
   가는 길이고 이쪽은 잔액입니다 — 펼치자마자 숫자가 보이는 것이 목적이라
   목록 위에 따로 둡니다. */
.pd-gnb__mileage {
  display: flex;
  align-items: center;
  gap: var(--pd-space-2);
  /* 아래 목록(.pd-subnav--stack .pd-subnav__link)과 같은 여백·반경 */
  padding: var(--pd-space-2) var(--pd-space-3);
  border-radius: var(--pd-radius-md);
  font-size: 14px;
  color: var(--pd-text-secondary);
  text-decoration: none;
}
/* 약국명. 예전에는 이름 위 hover 툴팁이었습니다(위 _LoginPartial 주석).
   누를 것이 아니라 지금 어느 약국으로 들어와 있는지 알려 주는 줄입니다. */
.pd-gnb__menu-pharm {
  display: flex;
  align-items: center;
  gap: var(--pd-space-2);
  padding: var(--pd-space-1) var(--pd-space-3) var(--pd-space-2);
  font-size: 13px;
  color: var(--pd-text-muted);
  word-break: keep-all;
}
.pd-gnb__menu-pharm .pd-icon {
  flex: 0 0 auto;
  width: var(--pd-icon-sm);
  height: var(--pd-icon-sm);
  color: var(--pd-text-placeholder);
}

/* 잔액 줄은 목록과 하는 일이 달라 아래에 선을 하나 둡니다. */
.pd-gnb__mileage {
  margin-inline: calc(var(--pd-space-2) * -1);
  padding-inline: var(--pd-space-5);
  margin-bottom: var(--pd-space-2);
  padding-bottom: var(--pd-space-3);
  border-bottom: 1px solid var(--pd-border);
  border-radius: 0;
}
.pd-gnb__mileage:hover { color: var(--pd-gold-700); text-decoration: none; }
.pd-gnb__mileage .pd-icon {
  width: var(--pd-icon-sm);
  height: var(--pd-icon-sm);
  color: var(--pd-gold-500);
}
.pd-gnb__mileage-num {
  margin-inline-start: auto;
  font-weight: var(--pd-weight-bold);
  font-variant-numeric: tabular-nums;
  color: var(--pd-gold-700);
}

.pd-gnb__auth {
  display: flex;
  align-items: center;
  gap: var(--pd-space-1);
}
.pd-gnb__auth-link {
  padding: var(--pd-space-1) var(--pd-space-2);
  border-radius: var(--pd-radius-sm);
  font-size: 14px;
  color: var(--pd-text-secondary);
  background: none;
  border: none;
  cursor: pointer;
}
.pd-gnb__auth-link:hover { color: var(--pd-text); }
.pd-gnb__auth-link:focus-visible { outline: none; box-shadow: var(--pd-focus-ring); }

/* 내정보 펼침 */
.pd-gnb__menu { position: relative; }
/* 패널의 **왼쪽**을 손잡이(이름)의 왼쪽에 맞춥니다. right: 0 이었을 때는
   패널이 이름보다 81px 더 왼쪽으로 삐져나와, 이름과 상관없는 자리에서
   떠오르는 것처럼 보였습니다(오른쪽 정렬은 손잡이가 화면 맨 끝에 있을 때
   쓰는 것인데, 여기는 오른쪽에 고객센터 번호와 원격지원이 더 있습니다). */
.pd-gnb__menu-panel {
  position: absolute;
  top: 100%;
  left: 0;
  right: auto;
  min-width: 200px;
  padding: var(--pd-space-2);
  /* 손잡이와 패널 사이 8px. 이 틈 위에서는 커서가 둘 다 벗어나므로 그대로
     두면 패널이 닫혀 로그아웃까지 못 갑니다. 아래 ::before 로 틈을 덮습니다. */
  margin-top: var(--pd-space-2);
  background-color: var(--pd-surface);
  border: 1px solid var(--pd-border);
  border-radius: var(--pd-radius-lg);
  box-shadow: var(--pd-shadow-md);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-4px);
  transition:
    opacity var(--pd-dur) var(--pd-ease),
    transform var(--pd-dur) var(--pd-ease),
    visibility var(--pd-dur) var(--pd-ease);
}
/* 손잡이와 패널 사이 8px 를 잇는 다리. 눈에 보이지 않지만 패널의 일부라
   여기 있는 동안에도 .pd-gnb__menu:hover 가 유지됩니다. */
.pd-gnb__menu-panel::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: calc(var(--pd-space-2) * -1);
  height: var(--pd-space-2);
}

/* 왼쪽 정렬은 오른쪽에 여유가 있을 때만 성립합니다. 1280px 화면에서는 200px 패널이 화면 끝을
   6px 넘어, 닫혀 있어도 모든 로그인 화면에 가로 스크롤이 생겼습니다(2026-09-24 E2E 실측).
   화면 끝에 닿는 폭에서만 오른쪽 정렬로 되돌립니다. 960px 이하는 서랍 안이라 static 입니다.
   그 폭은 전화번호 칸(.pd-gnb__tels)이 빠지는 1400px 과 같습니다 — 번호 칸이 빠지면 계정이 맨 오른쪽
   칸이 됩니다. 1299px 로 두었을 때 1300~1400px 에서 패널이 다시 화면 끝을 넘었습니다(2026-10-19 실측). */
@media (max-width: 1400px) {
  .pd-gnb__menu-panel { left: auto; right: 0; }
}

.pd-gnb__menu:hover > .pd-gnb__menu-panel,
.pd-gnb__menu:focus-within > .pd-gnb__menu-panel {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

/* 로그아웃. 목록과 같은 줄로 보이되 하는 일이 달라 위에 선을 하나 긋습니다.
   선은 패널 안쪽 여백(8px)을 가로질러야 칸을 나누는 것으로 읽혀서, 좌우로
   그만큼 빼내고 그만큼 다시 padding 으로 채웁니다. */
.pd-gnb__menu-logout {
  display: flex;
  align-items: center;
  gap: var(--pd-space-2);
  /* 폼 요소는 display:flex 를 줘도 폭이 내용만큼입니다(글자 폭 112px). 그래서
     위 선이 패널 가운데서 끊겨 보였습니다. 패널 안쪽 폭 + 좌우로 빼낸 8px 씩. */
  width: calc(100% + var(--pd-space-2) * 2);
  margin-inline: calc(var(--pd-space-2) * -1);
  margin-top: var(--pd-space-2);
  padding: var(--pd-space-3) var(--pd-space-5);
  border: none;
  border-top: 1px solid var(--pd-border);
  background: none;
  font-size: 14px;
  color: var(--pd-text-secondary);
  text-align: start;
  cursor: pointer;
  transition: color var(--pd-dur) var(--pd-ease);
}
/* 패널 안 목록의 글자 시작점을 위아래 줄과 맞춥니다. 약국명·마일리지·로그아웃은
   아이콘을 달고 있어 글자가 그만큼 안쪽에서 시작하는데, 아이콘 없는 메뉴 줄만
   24px 왼쪽에서 시작해 목록이 들쭉날쭉했습니다. 아이콘 자리만큼 들여씁니다.
   (범위를 패널 안으로 좁혀, 이 목록이 다른 자리에 놓일 때는 건드리지 않습니다.
   좁은 화면 서랍은 같은 패널을 쓰지만 안쪽 여백이 없어서 2절에서 이 값을
   다시 잡습니다.) */
.pd-gnb__menu-panel .pd-subnav--stack .pd-subnav__link {
  padding-inline-start: calc(var(--pd-space-3) + var(--pd-icon-sm) + var(--pd-space-2));
}

.pd-gnb__menu-logout:hover { color: var(--pd-text); }
.pd-gnb__menu-logout:focus-visible { outline: none; box-shadow: var(--pd-focus-ring); }
.pd-gnb__menu-logout .pd-icon {
  width: var(--pd-icon-sm);
  height: var(--pd-icon-sm);
  color: var(--pd-text-placeholder);
}

/* ---- 연락처와 원격지원 ---- */

.pd-gnb__contact {
  order: 4;
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: var(--pd-space-4);
}

.pd-gnb__tels {
  display: grid;
  gap: 2px;
}
.pd-gnb__tel {
  display: flex;
  align-items: center;
  gap: var(--pd-space-2);
  font-size: 13px;
  color: var(--pd-text-secondary);
  white-space: nowrap;
}
.pd-gnb__tel-label {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  color: var(--pd-accent);
  font-size: 12px;
  font-weight: var(--pd-weight-semibold);
}
.pd-gnb__tel-label .pd-icon { width: 14px; height: 14px; }
.pd-gnb__tel-num {
  font-variant-numeric: tabular-nums;
  color: var(--pd-text);
  font-weight: var(--pd-weight-medium);
}
/* 고객센터 번호 옆 원격지원 — 서랍 전용(아래 좁은 화면 규칙). 넓은 화면에서는 도구 줄에 있습니다. */
.pd-gnb__tel-remote { display: none; }

/* 원격지원 — 채운 단추가 아니라 테두리 단추입니다.

   한동안 민트로 채워 두었더니, 바로 아래 2차 메뉴의 [복약안내문 설정]과
   같은 무게로 보였습니다. 둘은 하는 일이 다릅니다 — 이쪽은 막혔을 때 부르는
   보조 통로(외부 원격지원 사이트)이고, 아래쪽이 이 화면에서 할 일입니다.
   한 화면에 같은 세기의 단추가 둘이면 어느 것이 본줄기인지 알 수 없습니다.

   같은 이유로 한 급 작습니다(34 → 30px, 13 → 12px).

   도구 줄의 마지막 항목입니다(PILLDOC-2694). 링크(.pd-gnb__link)이기도 해서
   도구 줄 글자 규칙보다 세게 걸어야 단추 모양이 남습니다. */
.pd-gnb__tools .pd-gnb__remote {
  display: inline-flex;
  gap: 4px;
  margin-inline-start: var(--pd-space-2);
  align-items: center;
  justify-content: center;
  height: 30px;
  padding-inline: var(--pd-space-3);
  border: 1px solid var(--pd-border-strong);
  border-radius: var(--pd-radius-md);
  background-color: transparent;
  color: var(--pd-text-secondary);
  font-size: 12px;
  font-weight: var(--pd-weight-semibold);
  white-space: nowrap;
  /* base.css 의 :where(.pd-root) a:hover 가 밑줄을 그으려 합니다. 단추 모양인데
     글자에 밑줄이 그어지면 링크와 단추 사이 어디쯤으로 보입니다. */
  text-decoration: none;
  transition:
    background-color var(--pd-dur) var(--pd-ease),
    border-color var(--pd-dur) var(--pd-ease),
    color var(--pd-dur) var(--pd-ease);
}
.pd-gnb__tools .pd-gnb__remote:hover {
  background-color: var(--pd-surface-sunken);
  border-color: var(--pd-border-hover);
  color: var(--pd-text);
  text-decoration: none;
}
.pd-gnb__tools .pd-gnb__remote:focus-visible { outline: none; box-shadow: var(--pd-focus-ring); }
/* 바깥 링크 아이콘은 글자(12px)와 같은 크기. 도구 줄 공통 크기(16px)면 글자보다 커 보였습니다. */
.pd-gnb__tools .pd-gnb__remote .pd-icon { width: 12px; height: 12px; }

/*
   1차 메뉴의 「내정보」 줄은 좁은 화면 전용입니다.

   넓은 화면에서는 같은 것이 헤더 오른쪽 계정 영역에 있습니다(이름에 가져다
   대면 펼쳐지는 패널). 둘을 함께 두면 같은 메뉴가 한 화면에 두 번 나옵니다.
   기본을 감춤으로 두고 서랍 절에서만 되살립니다 — 넓은 화면이 기본값이라
   좁은 화면 전용 요소는 이렇게 두는 편이 안전합니다.
*/
.pd-gnb__item--profile { display: none; }

/* ---- 햄버거와 덮개 ---- */

.pd-gnb__toggle {
  display: none;
  flex: 0 0 auto;
  width: 40px;
  height: 40px;
  align-items: center;
  justify-content: center;
  margin-inline-start: auto;
  border: none;
  border-radius: var(--pd-radius-md);
  background: none;
  color: var(--pd-text);
  cursor: pointer;
}
.pd-gnb__toggle:focus-visible { outline: none; box-shadow: var(--pd-focus-ring); }
.pd-gnb__toggle .pd-icon { width: 24px; height: 24px; }
.pd-gnb__toggle .pd-gnb__toggle-close { display: none; }

.pd-gnb__scrim { display: none; }

/* ---- 넓은 화면에서 좁아질 때 순서대로 덜어낸다 ---- */

@media (min-width: 961px) and (max-width: 1400px) {
  .pd-gnb__tels { display: none; }
}
@media (min-width: 961px) and (max-width: 1180px) {
  .pd-gnb__mileage,
  .pd-gnb__rank { display: none; }
  .pd-gnb__link { --gnb-link-px: var(--pd-space-2); font-size: 15px; }

  /*
     도구 줄이 생기면서(PILLDOC-2694) 이 폭에서 서비스 메뉴와 도구 줄이 겹쳤습니다.
     항목이 하나(필독 에이전트) 늘었기 때문입니다. 서랍으로 바뀌는 폭(960)은
     그대로 두고, 빈자리부터 덜어냅니다 — 칸 사이 간격, 도구 줄 글자 옆 여백,
     바깥 링크 아이콘 순서입니다. 아이콘을 빼도 새 창이라는 것은 낭독기 글자
     「(새 창)」가 남아 알립니다.
  */
  .pd-gnb__inner { gap: var(--pd-space-4); }
  .pd-gnb__menus { gap: var(--pd-space-3); }
  .pd-gnb__tools .pd-gnb__link { padding-inline: 6px; }
  .pd-gnb__tools .pd-gnb__remote .pd-icon { display: none; }

  /* 이름 길이는 회원마다 다릅니다. 긴 이름이 메뉴를 밀어 겹치지 않게 이 폭에서만
     줄임표로 자릅니다. 전체 이름은 펼침 패널과 내정보 화면에 있습니다. */
  .pd-gnb__name {
    display: inline-block;
    max-width: 7em;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    vertical-align: bottom;
  }
}
@media (min-width: 961px) and (max-width: 1040px) {
  /* 서랍 직전 폭. 위에서 덜어내고도 서비스와 도구가 12px 겹쳐 서비스 글자 옆
     여백을 한 번 더 줄입니다(8 → 6px). */
  .pd-gnb__nav .pd-gnb__link { --gnb-link-px: 6px; }
  .pd-gnb__name { max-width: 6em; }
}

/* =========================================================
   2. 좁은 화면 — 서랍

   .pd-gnb__menus 가 통째로 오른쪽에서 밀려 들어옵니다. 안의 순서만
   order 로 바뀝니다(계정 → 메뉴 → 도구 → 연락처).
   ========================================================= */

@media (max-width: 960px) {
  /* 로고도 본문(.container 20px)과 같은 선에 세웁니다. */
  .pd-gnb__inner { gap: var(--pd-space-4); padding-inline: var(--pd-space-5); }
  /*
     서랍보다 위에 있어야 합니다.

     서랍(.pd-gnb__menus)은 position: fixed 에 z-index 가 헤더와 같은 값이고,
     오른쪽에서 300px 폭으로 들어옵니다. 햄버거 단추는 바로 그 자리(오른쪽 끝)에
     있어서, 열리면 서랍이 단추를 덮었습니다 — **닫는 X 가 보이지 않았습니다.**
     둘은 같은 쌓임 문맥(헤더) 안이라 z 값 하나로 올라옵니다.

     지금은 서랍이 헤더 아래에서 시작해(아래 top 참조) 단추와 겹칠 일이
     없지만, 이 값은 그대로 둡니다 — 덮개(.pd-gnb__scrim)가 헤더까지 덮으므로
     단추는 덮개보다 위에 있어야 눌립니다.
  */
  .pd-gnb__toggle {
    display: inline-flex;
    position: relative;
    z-index: calc(var(--pd-gnb-z) + 1);
  }

  .pd-gnb__scrim {
    display: block;
    position: fixed;
    inset: 0;
    z-index: calc(var(--pd-gnb-z) - 1);
    background-color: rgba(19, 28, 45, 0.4);
    opacity: 0;
    visibility: hidden;
    transition:
      opacity var(--pd-dur) var(--pd-ease),
      visibility var(--pd-dur) var(--pd-ease);
  }

  /*
     서랍은 화면 맨 위부터 그립니다. 닫는 X 자리는 계정 칸이 자기 위쪽 여백으로
     비워 둡니다(아래 .pd-gnb__account).

     여기까지 오는 데 두 번 돌아갔습니다. 처음에는 서랍 첫 칸이 계정 줄이라
     닫는 X 가 이름 위에 겹쳐 앉았습니다. 그래서 서랍을 top: var(--pd-gnb-h) 로
     내렸더니 위쪽이 뚫려 보였습니다 — 헤더의 아래 선이 서랍 위를 가로지르고
     그림자가 거기 다시 얹혀 이음매가 생겼습니다. 다음에는 헤더 높이만큼을 흰
     테두리로 뒀는데, 이번에는 그 흰 띠와 바로 아래 회색 계정 칸이 서로 다른
     칸처럼 갈라져 보였습니다.

     지금은 그 자리를 계정 칸에 넘겼습니다. 계정 칸이 회색 바탕째로 맨 위까지
     올라오고 위쪽 여백으로 X 자리를 비우니, X 가 앉은 줄부터 마일리지까지가
     한 덩어리로 읽힙니다.
  */
  .pd-gnb__menus {
    position: fixed;
    top: 0;
    bottom: 0;
    right: 0;
    z-index: var(--pd-gnb-z);
    width: min(300px, 85vw);
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    overflow-y: auto;
    overscroll-behavior: contain;
    background-color: var(--pd-surface);
    /* 그림자는 열렸을 때만 둡니다. 닫힌 서랍은 화면 오른쪽 밖에 붙어 있어서,
       그림자가 있으면 번짐(34px)이 화면 안으로 비쳐 오른쪽 끝이 어둡게 보입니다. */
    box-shadow: none;
    transform: translateX(100%);
    transition: transform var(--pd-dur-slow) var(--pd-ease), box-shadow var(--pd-dur-slow) var(--pd-ease);
  }

  /* 열린 상태 */
  .pd-gnb.is-open .pd-gnb__menus { transform: translateX(0); box-shadow: var(--pd-shadow-lg); }
  .pd-gnb.is-open .pd-gnb__scrim { opacity: 1; visibility: visible; }
  .pd-gnb.is-open .pd-gnb__toggle-open { display: none; }
  .pd-gnb.is-open .pd-gnb__toggle-close { display: block; }

  /* 서랍이 열려 있는 동안 뒤 배경이 따라 스크롤되지 않게 한다. */
  body.pd-menu-open { overflow: hidden; }

  /*
     순서: 계정 칸 → 메인 메뉴 → 도구 줄 → 연락처

     ---- 계정 칸이 위에 붙어 있고, 그 아래가 스크롤된다 ----

     계정 칸(이름·약국명·마일리지·로그아웃)은 지금 누구로 들어와 있는지를
     말해 주는 자리라, 메뉴를 내리는 동안에도 자리를 지키는 편이 맞습니다.
     position: sticky 로 스크롤 상자(.pd-gnb__menus)의 위쪽에 붙입니다. 메인
     메뉴부터 연락처까지가 이 칸 **아래로** 지나갑니다.

     sticky 는 **칸 단위**로 붙습니다 — 그래서 이 칸을 통째로 유지해야 합니다.
     한동안 껍데기들을 display: contents 로 빼내 로그아웃만 메뉴 아래로 보냈는데,
     그러면 붙일 칸 자체가 없어집니다. 로그아웃은 계정 정보와 함께 이 안에
     둡니다 — 넓은 화면 펼침 패널의 순서(이름 → 약국명 → 마일리지 → 로그아웃)와
     같아져 두 화면이 같은 이야기를 합니다.

     이 칸의 회색 바탕이 맨 위까지 올라가므로 X 가 앉은 줄도 이 칸의 일부로
     보입니다. 스크롤된 메뉴가 이 칸 뒤로 지나가려면 바탕이 불투명해야 하고
     (가라앉은 회색이라 이미 불투명합니다) 겹칠 때 위로 와야 합니다(z-index).

     위쪽 여백은 0 입니다 — X 자리를 비워 두지 않습니다.

     한동안 헤더 높이만큼(60px) 위를 비워 두고 그 아래에 이름을 놓았습니다.
     그런데 칸 전체가 한 회색이 되고 나니, 그 60px 이 **아무것도 없는 여백**으로
     보였습니다(회색이라 칸이 갈라져 보이지도 않으니 더 그렇습니다). 그래서
     이름을 그 띠에 함께 앉힙니다 — X 는 오른쪽 끝, 이름은 왼쪽입니다. 서랍
     제목 줄에 닫기 단추가 붙어 있는 흔한 모양이고, 60px 을 통째로 아낍니다.
  */
  .pd-gnb__account {
    order: 1;
    position: sticky;
    top: 0;
    z-index: 1;
    flex: 0 0 auto;
    flex-direction: column;
    align-items: stretch;
    padding-inline: var(--pd-space-5);
    padding-block: 0 var(--pd-space-2);
    background-color: var(--pd-surface-sunken);
    border-bottom: 1px solid var(--pd-border);
  }
  /*
     계정을 싸고 있는 form 도 함께 세로로 세웁니다.

     넓은 화면에서는 이 form 이 계정 항목을 한 줄로 세우는 가로 상자입니다
     (위 .pd-gnb__account > form). 서랍에서 계정 칸만 세로로 바꿨더니 form 은
     여전히 가로 상자여서, 그 안의 내정보 덩어리가 **내용 폭까지 쪼그라들었습니다**
     — 서랍 안쪽 260px 중 153px 만 쓰고 오른쪽 100px 이 비었습니다.
  */
  .pd-gnb__account > form { flex-direction: column; align-items: stretch; }

  /*
     이름 줄이 닫는 X 와 같은 줄에 앉습니다.

     오른쪽 여백은 X 자리입니다 — 단추 폭 40px(.pd-gnb__toggle)에 숨 쉴 자리를
     더한 값입니다. 이름이 길어 줄이 바뀌어도 이 여백은 모든 줄에 걸리므로
     글자가 X 밑으로 파고들지 않습니다.

     이름은 이 칸에서 가장 중요한 정보라 한 급 키웁니다(14 → 16px). 반대로
     약국명은 "지금 어느 약국인지" 알려 주는 보조 정보라 한 급 낮춥니다.
  */
  .pd-gnb__user {
    justify-content: flex-start;
    flex-wrap: wrap;
    min-height: var(--pd-gnb-h);
    padding-block: 0;
    padding-inline: 0 calc(40px + var(--pd-space-4));
  }
  .pd-gnb__name { font-size: 16px; }
  .pd-gnb__user-caret { display: none; }
  /*
     로그인 전에는 이 줄이 계정 칸의 유일한 내용입니다. 그래서 이름 줄과 똑같이
     X 자리를 비우고 같은 높이를 가져야 합니다 — 안 그러면 계정 칸이 이 줄
     높이(31px)로 끝나 버리고, X(18~58)가 칸을 삐져나와 첫 메뉴 줄과 겹칩니다.
  */
  .pd-gnb__auth {
    flex-wrap: wrap;
    gap: var(--pd-space-2);
    align-items: center;
    min-height: var(--pd-gnb-h);
    padding-inline: 0 calc(40px + var(--pd-space-4));
  }
  /* 손가락 목표 44px. 글자 줄 높이(30px)만으로는 서랍의 다른 줄(52~56px)보다
     낮아 빗맞히기 쉬웠습니다. 아래 전화번호도 같은 까닭입니다. */
  .pd-gnb__auth-link {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
    padding-inline: 0;
  }
  .pd-gnb__tel-num {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
  }

  /*
     서랍에서는 펼치는 것이 아니라 그냥 놓입니다.

     예전에는 이 패널을 통째로 감췄습니다 — 같은 항목이 내정보 화면 안의
     2차 메뉴에 다시 나오고, 로그아웃은 패널 **밖에** 따로 있었기 때문입니다.
     이제 로그아웃과 마일리지가 이 안으로 들어왔으므로 감추면 로그아웃으로
     가는 길이 사라집니다. 그래서 패널은 살리고, 안의 목록만 아래에서
     따로 감춥니다.

     넓은 화면 패널과 손잡이를 잇던 다리(::before)는 여기서 필요 없습니다 —
     가져다 대서 여는 것이 아니라 그냥 놓여 있습니다.
  */
  .pd-gnb__menu-panel {
    position: static;
    min-width: 0;
    margin: 0;
    padding: 0;
    border: none;
    border-radius: 0;
    box-shadow: none;
    background: none;
    opacity: 1;
    visibility: visible;
    transform: none;
  }
  .pd-gnb__menu-panel::before { content: none; }

  /* 아래쪽 여백은 약국명과 마일리지를 갈라 놓기 위한 것입니다. 둘은 성격이
     다릅니다 — 위는 「어느 약국으로 들어와 있나」, 아래는 누르면 마일리지
     화면으로 가는 줄입니다. 붙여 두면 두 줄이 한 덩어리로 읽힙니다.
     (마일리지 쪽 위 여백과 합쳐 글자 사이가 12 → 26px 로 벌어집니다.) */
  .pd-gnb__menu-pharm {
    padding-inline: 0;
    padding-block: 0 var(--pd-space-3);
    font-size: 12px;
  }

  /*
     마일리지와 로그아웃 사이에 선이 **하나만** 있어야 합니다.

     둘 다 선을 갖고 있었습니다 — 마일리지는 아래 선, 로그아웃은 위 선. 넓은
     화면 패널에서는 그 사이에 목록 7개가 들어가서 각자 제 칸을 나누는 선이지만,
     서랍에서는 목록을 감추므로 두 선이 8px 간격으로 나란히 놓여 이중선으로
     보였습니다. 마일리지 쪽을 지웁니다 — 로그아웃의 위 선이 "여기부터 하는 일이
     다르다"를 말하는 쪽이라 그것을 남깁니다.

     좌우 여백을 0 으로 되돌릴 때 **음수 margin 도 함께** 되돌립니다. 이 줄은
     넓은 화면에서 선을 패널 안쪽 여백까지 늘리려고 좌우로 8px 씩 빼내
     놓았습니다 — 되돌리지 않으면 이 줄만 위아래보다 넓어집니다.
  */
  .pd-gnb__mileage {
    margin: 0;
    padding-inline: 0;
    padding-block: var(--pd-space-2);
    border-bottom: none;
  }

  /*
     펼침 패널 안의 목록은 여기서 감춥니다 — 대신 1차 메뉴에 「내정보」 줄이
     있습니다(_Header.cshtml).

     좁은 화면에서 이 목록으로 가는 길이 없었던 것이 이 작업의 시작이었는데,
     길을 내는 방법이 둘이었습니다. 이 패널을 그냥 펼쳐 놓는 것과, 1차 메뉴에
     여닫는 줄을 두는 것. 뒤쪽을 골랐습니다 — 서랍은 이미 복약안내 서비스·
     고객센터를 꺾쇠로 여닫고 있어서, 내정보만 늘 펼쳐 두면 같은 서랍 안에서
     같은 성격의 메뉴가 서로 다르게 동작합니다. 게다가 항목 7개를 늘 펼쳐 두면
     서랍이 첫 화면을 넘겨(내용 837 / 창 784) 연락처·원격지원이 밀려납니다.

     이 목록 자체는 감추지만 로그아웃과 계정 정보는 남습니다 — 그 둘은 다른
     어디에도 없습니다.
  */
  .pd-gnb__menu-panel .pd-subnav--stack { display: none; }

  /* 로그아웃은 자주 누르는 것이 아니라 가끔 찾는 것이라, 계정 정보보다 한 급
     작게 둡니다(14 → 13px, 위아래 여백 12 → 8px). 위 선만 남기고 그 위의
     margin 도 걷어내 마일리지 바로 아래에 붙입니다. */
  .pd-gnb__menu-logout {
    width: 100%;
    margin: 0;
    padding-inline: 0;
    padding-block: var(--pd-space-2);
    font-size: 13px;
  }

  /* 서비스 목록이 남는 높이를 먹지 않습니다. 먹으면 바로 아래 도구 줄이 서랍
     맨 밑으로 떨어져 사이가 텅 빕니다. 남는 높이는 연락처 위(margin-top: auto)로
     보냅니다 — 연락처는 예전처럼 서랍 바닥에 붙습니다. */
  .pd-gnb__nav {
    order: 2;
    flex: 0 0 auto;
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    height: auto;
    /* 아래 여백은 두지 않습니다 — 마지막 서비스 줄(약학정보)과 도구 줄 윗선 사이가 다른 줄 사이보다
       8px 넓어 보였습니다. 마지막 줄은 아랫선이 없어 도구 줄 윗선이 그 줄의 아랫선 노릇을 합니다. */
    padding: var(--pd-space-2) 0 0;
  }

  .pd-gnb__item {
    /* 서랍에서는 여는 삼각형이 항목 오른쪽에 절대 위치로 붙으므로
       여기서만 항목이 기준이 됩니다. */
    position: relative;
    display: block;
    height: auto;
    border-bottom: 1px solid var(--pd-border);
  }
  .pd-gnb__item:last-child { border-bottom: none; }
  /* 좁은 화면 전용인 「내정보」 줄을 되살립니다(기본은 감춤 — 위
     .pd-gnb__item--profile). 위 .pd-gnb__item 규칙과 클래스 수가 같아
     순서만으로도 이기지만, 순서에 기대지 않고 여기 적어 둡니다. */
  .pd-gnb__item--profile { display: block; }

  .pd-gnb__link {
    height: auto;
    padding: var(--pd-space-4) var(--pd-space-5);
    font-size: 15px;
    color: var(--pd-text);
  }
  .pd-gnb__badge {
    position: static;
    margin-left: 2px;
    vertical-align: super;
  }
  .pd-gnb__item.is-current > .pd-gnb__link::after,
  .pd-gnb__link.is-current::after { content: none; }

  /* 여는 삼각형이 여기서만 보인다. 링크와 겹치지 않게 별도 버튼이다. */
  .pd-gnb__caret {
    display: block;
    position: absolute;
    top: 0;
    right: 0;
    width: 56px;
    height: 52px;
    padding: 14px 16px;
    border: none;
    background: none;
    color: var(--pd-text-muted);
    cursor: pointer;
  }
  .pd-gnb__caret:focus-visible { outline: none; box-shadow: var(--pd-focus-ring); }
  /*
     도는 것은 **삼각형뿐**입니다. 단추째로 돌리지 않습니다.

     예전에는 단추(.pd-gnb__caret)에 transform: rotate(180deg) 를 걸었습니다.
     그런데 이 단추는 눌린 뒤 초점 테두리(--pd-focus-ring, 민트색 3px)를 갖고
     있어서, 단추가 도는 동안 **그 네모난 테두리가 함께 빙 돌았습니다.**
     56×52 짜리 사각형이 화면에서 회전하니 눈에 크게 걸립니다.

     테두리를 지우는 대신 도는 대상을 좁혔습니다 — 초점 테두리는 키보드로
     쓰는 사람에게 지금 어디에 있는지 알려 주는 표시라 없앨 것이 아닙니다.
     단추는 제자리에 있고 안의 삼각형만 돕니다.
  */
  .pd-gnb__caret .pd-icon { transition: transform var(--pd-dur) var(--pd-ease); }
  .pd-gnb__item.is-open > .pd-gnb__caret .pd-icon { transform: rotate(180deg); }

  /* 서랍 안에서는 띠가 아니라 세로 목록입니다. 폭이 좁아 가로로 늘어놓을
     자리가 없고, 부모 항목 아래에 들여쓰는 편이 관계를 더 잘 보여 줍니다.
     내정보 펼침 패널과 같은 모양이라 .pd-subnav--stack 의 규칙을 빌려 씁니다. */
  .pd-gnb__sub {
    position: static;
    display: none;
    min-width: 0;
    padding: 0 0 var(--pd-space-3) 0;
    border: none;
    border-radius: 0;
    box-shadow: none;
    opacity: 1;
    visibility: visible;
    transform: none;
    background: none;
  }

  /* 좁은 화면에서는 hover 로 열리지 않는다. 눌러서 연다. */
  .pd-gnb__item:hover > .pd-gnb__sub,
  .pd-gnb__item:focus-within > .pd-gnb__sub { display: none; }
  .pd-gnb__item.is-open > .pd-gnb__sub { display: block; }

  .pd-gnb__sub .pd-subnav {
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    overflow: visible;
    white-space: normal;
  }
  /* 손가락으로 누를 자리입니다. 8px 여백 + 14px 글자로는 한 줄이 37px 밖에
     안 돼서 눌러야 할 곳을 빗맞히기 쉬웠습니다. 여백을 12px, 글자를 15px 로
     올리고 최소 높이를 못박습니다 — 손가락 목표는 44px 로 봅니다. 여백만
     키우면 글꼴의 줄 높이에 따라 42px 처럼 몇 px 모자라게 나옵니다. 글자
     크기는 바로 위 1차 메뉴(.pd-gnb__link)와 같아지고, 굵기로 층을 구분합니다. */
  .pd-gnb__sub .pd-subnav__link {
    height: auto;
    min-height: 44px;
    padding: var(--pd-space-3) var(--pd-space-5);
    font-size: 15px;
    font-weight: var(--pd-weight-regular);
    border-bottom: none;
  }
  .pd-gnb__sub .pd-subnav__link.is-current {
    color: var(--pd-accent);
    font-weight: var(--pd-weight-semibold);
  }
  .pd-gnb__sub .pd-subnav__sep {
    width: auto;
    height: 1px;
    margin: var(--pd-space-1) var(--pd-space-5);
  }

  /*
     진입 단추(복약안내문 설정)는 목록의 **왼쪽 끝**에 맞춥니다.

     넓은 화면에서 이 단추는 가로 띠의 오른쪽 끝에 떨어져 있어야 해서
     margin-inline-start: auto 로 밀어 놓았습니다(.pd-subnav__cta). 그런데
     서랍에서는 그 띠가 세로 목록이라, 같은 규칙이 단추를 **오른쪽 벽에**
     붙여 버립니다 — 위의 다른 항목들은 다 왼쪽에서 시작하는데 이것만 혼자
     오른쪽에 가 있었습니다. 밀어내기를 걷어내고 항목들과 같은 선에 세웁니다.
  */
  .pd-gnb__sub .pd-subnav__cta {
    align-self: flex-start;
    /* 위쪽 여백은 이 단추가 목록의 한 줄이 아니라는 표시입니다 — 나머지는
       화면을 옮기는 링크고 이것만 누르면 작업 레이아웃으로 통째로 바뀝니다.
       바로 붙여 두면 목록의 마지막 항목처럼 읽힙니다. */
    margin-block: var(--pd-space-3) 0;
    margin-inline: var(--pd-space-5) 0;
    /* 같은 목록 안의 다른 줄과 같은 손가락 목표(44px). 디자인 시스템 단추의
       기본 높이는 40px 이라 여기서만 올립니다. */
    min-height: 44px;
  }

  /*
     도구 줄은 서비스 목록 아래에 같은 모양의 줄로 이어집니다.

     위 선 하나로 「여기부터는 서비스가 아니다」를 가릅니다. 줄 모양·여닫기는
     .pd-gnb__item 규칙을 그대로 받고, 넓은 화면에서 작게 줄였던 글자만 서비스
     줄과 같은 크기로 되돌립니다 — 손가락으로 누를 자리라 크기를 낮추지 않습니다.
  */
  .pd-gnb__tools {
    order: 3;
    /* 서랍의 남는 높이를 받습니다 — 설치 줄을 연락처 윗선 바로 위에 붙이려고(아래 --install). */
    flex: 1 0 auto;
    flex-direction: column;
    align-items: stretch;
    height: auto;
    /* 위 여백 없이 윗선에 바로 붙입니다 — 서비스 줄도 여백 없이 줄과 선이 이어져, 8px 를 두면 고객센터
       줄만 떠 보였습니다(2026-10-20 검토). 아래 여백은 설치 단추의 몫입니다. */
    padding-block: 0 var(--pd-space-2);
    border-top: 1px solid var(--pd-border);
  }
  .pd-gnb__tools .pd-gnb__link {
    padding: var(--pd-space-4) var(--pd-space-5);
    font-size: 15px;
    font-weight: var(--pd-weight-semibold);
  }

  /* 고객센터 줄은 서비스 줄과 같은 아랫선을 둡니다 — 같은 높이 · 같은 선이어야 같은 종류의 줄로
     읽힙니다. 설치 줄은 단추라 선을 두지 않습니다(아래는 연락처 윗선이 가릅니다). */
  .pd-gnb__tools .pd-gnb__item--install { border-bottom: none; }

  /* 원격지원은 서랍에서 고객센터 번호 옆으로 갑니다(.pd-gnb__tel-remote · _Header 주석). */
  .pd-gnb__tools .pd-gnb__item--remote { display: none; }

  /* 프로그램 설치 — 도구 줄 맨 아래, 연락처 윗선 바로 위. 넓은 화면의 알약(옅은 민트 · 내려받기
     아이콘)을 폭 가득 늘려 서랍에서 가장 먼저 눈에 들어오게 합니다. 손가락 목표는 48px. */
  /* 도구 줄이 남는 높이를 받으므로 설치 줄은 그 맨 아래(margin-top: auto)에 붙습니다. 연락처가 서랍
     바닥에 붙어 있어(.pd-gnb__contact margin-top: auto) 그냥 두면 둘 사이가 화면 반만큼 벌어졌습니다. */
  .pd-gnb__tools .pd-gnb__item--install {
    order: 1;
    margin-top: auto;
    padding: var(--pd-space-2) var(--pd-space-5);
  }
  .pd-gnb__tools .pd-gnb__install {
    display: flex;
    justify-content: center;
    gap: var(--pd-space-2);
    width: 100%;
    height: 48px;
    margin: 0;
    padding: 0 var(--pd-space-4);
    font-size: 15px;
  }
  .pd-gnb__tools .pd-gnb__install .pd-icon { width: 18px; height: 18px; }

  /* 고객센터 번호 옆 원격지원 — 넓은 화면 도구 줄의 테두리 단추와 같은 모양, 손가락 목표 44px. */
  .pd-gnb__tel-remote {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    min-height: 44px;
    margin-left: auto;
    padding-inline: var(--pd-space-4);
    border: 1px solid var(--pd-border-strong);
    border-radius: var(--pd-radius-md);
    color: var(--pd-text-secondary);
    font-size: 14px;
    font-weight: var(--pd-weight-semibold);
    text-decoration: none;
  }
  .pd-gnb__tel-remote:hover { background-color: var(--pd-surface-sunken); color: var(--pd-text); text-decoration: none; }
  .pd-gnb__tel-remote:focus-visible { outline: none; box-shadow: var(--pd-focus-ring); }
  .pd-gnb__tel-remote .pd-icon { width: 14px; height: 14px; }

  .pd-gnb__contact {
    order: 4;
    margin-top: auto;
    flex-direction: column;
    align-items: stretch;
    gap: var(--pd-space-3);
    padding: var(--pd-space-5);
    border-top: 1px solid var(--pd-border);
  }
}

/* =========================================================
   3. 페이지 머리 (.subvisual)

   87개 화면이 <div class="subvisual"><h2>상위</h2><h1>제목</h1></div>
   모양으로 들고 있습니다. 마크업은 그대로 두고 배경 사진과 200px
   높이를 걷어냈습니다.
   ========================================================= */

/*
   제목 줄과 2차 메뉴는 헤더와 같은 흰 판 위에 놓아 한 덩어리로 읽히게
   합니다. 그래서 밴드는 화면 폭을 다 쓰고, 글자만 본문 컨테이너(1280)에
   맞춰 안쪽 여백으로 밀어 넣습니다. 마크업에 감쌀 칸이 없어서
   (h1/h2 가 .subvisual 의 직계 자식입니다) padding 으로 맞춥니다.
*/
.subvisual {
  display: block;
  padding-block: var(--pd-space-8) var(--pd-space-5);
  padding-inline: max(var(--pd-space-5), calc((100% - 1280px) / 2 + var(--pd-space-5)));
  text-align: start;
  /* 배경을 두지 않습니다 — 페이지 배경이 그대로 비칩니다.
     한동안 헤더·2차 메뉴와 같은 흰 판을 깔아 셋을 한 덩어리로 보이게 했는데,
     그러면 **머물러 있는 것**(헤더·메뉴)과 **화면마다 바뀌는 것**(제목)이
     같은 판 위에 놓여 경계가 사라집니다. 흰 판은 위의 두 줄까지입니다. */
  height: auto;
}

/*
   감추는 제목 줄 — 두 가지입니다

   같은 이름이 두 번 나오는 화면을 감추는데, **문서에서도 지울 수 있는지**가
   갈립니다. 어느 쪽인지는 "본문이 제목을 갖고 있는가"로 정합니다.

   ① --quiet : 아예 지운다 (내정보 7 · 상품구매 4 · 마일리지 2 = 13개)

   이 화면들은 본문이 **이미 제목을 갖고 있습니다**(`<h1 class="t-h2">비밀번호</h1>`
   같은 줄). 밴드까지 두면 같은 이름이 위아래로 두 번 나오고, 낭독기도 두 번
   읽습니다. 그래서 화면에서만 감추는 것(sr-only)이 아니라 아예 지웁니다 —
   문서의 h1 은 본문 쪽이 갖고 있습니다.

   ② --menu : 화면에서만 감추고 문서에는 남긴다 (13개)

   2차·3차 메뉴 띠에 그 이름이 이미 켜져 있어 화면에서는 군더더기입니다.
   그런데 이 화면들은 **본문에 제목이 없습니다** — 밴드가 유일한 제목입니다.
   여기에 --quiet 를 쓰면 문서에 h1 이 하나도 남지 않아, 검색엔진과 낭독기가
   화면 이름을 잃습니다. 눈에만 안 보이게 합니다.

   .pd-sr-only(base.css) 와 같은 방식이지만 유틸리티를 겹쳐 붙이지 않습니다 —
   .subvisual 의 padding 이 뒤에 실려 그 클래스의 padding: 0 을 덮기 때문입니다.

   두 경우 모두 마크업은 남겨 둡니다. 되돌리려면 뷰에서 클래스 하나만 뺍니다.
*/
.subvisual--quiet { display: none; }

.subvisual--menu {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

/* 2차 메뉴가 좁은 컨테이너(.container-sm)를 쓰는 8개 화면에서는 제목도 같이
   좁힌다. :has() 를 못 읽는 브라우저에서는 제목이 어긋날 뿐 깨지지 않는다.

   지금은 두 컨테이너 폭이 같아져(둘 다 1280) 이 규칙이 옮기는 것이 없다.
   .container-sm 을 다시 좁히면 되살아난다. 클래스 자체를 걷어내는 정리는
   뷰 8개를 함께 고쳐야 해서 후속으로 남긴다. */
.subvisual:has(+ .submenu > .container-sm) {
  padding-inline: max(var(--pd-space-5), calc((100% - 1280px) / 2 + var(--pd-space-5)));
}

/* 상위(섹션) 이름 — 작게, 흐리게

   혼자 있는 h1 을 섹션 이름으로 보는 이유는 아래 "왜 h1 하나뿐일 때 작게
   두는가"에 적었습니다. --page 는 그 짐작이 틀린 경우라 빼 둡니다. */
.subvisual h2,
.subvisual:not(.subvisual--page) > h1:first-child:last-child {
  display: block;
  margin-bottom: var(--pd-space-1);
  font-size: 14px;
  font-weight: var(--pd-weight-semibold);
  color: var(--pd-text-muted);
  letter-spacing: normal;
  line-height: 1.4;
}

/* 화면 제목 — 크게 */
.subvisual h2 + h1,
.subvisual--page > h1 {
  display: block;
  margin-bottom: 0;
  font-size: 28px;
  font-weight: var(--pd-weight-bold);
  color: var(--pd-text);
  letter-spacing: -0.02em;
  line-height: 1.3;
}

/*
   --page : 섹션 줄 없이 제목 한 줄만

   메뉴가 이미 영역을 말해 주는데 그 영역 이름을 제목 위에 또 적으면
   같은 말이 세 번 나옵니다(1차 메뉴 · 섹션 줄 · 2차 메뉴). 섹션 줄을
   지우고 제목만 남깁니다.

   그러면서 화면 이름은 **메뉴에 없는 것으로 새로 짓습니다.** 예전에는
   "문의 게시판 · 등록" 처럼 메뉴 항목 이름에 상태를 덧붙였는데, 앞부분이
   탭과 겹쳐 읽는 사람이 두 번 훑어야 했습니다. "문의 등록하기" 처럼
   이 화면에서만 쓰는 이름을 뷰가 직접 적습니다.

   부르는 법
       <div class="subvisual subvisual--page">
           <h1>문의 등록하기</h1>
       </div>

   섹션 줄이 없어도 제목이 큰 스타일을 유지하는 것이 이 표시의 전부입니다.
   위의 :not() 이 그것을 맡습니다.
*/

/*
   왜 h1 하나뿐일 때 작게 두는가

   87개 화면 중 45개는 밴드에 <h1>고객센터</h1> 처럼 **섹션 이름**만 넣고,
   실제 화면 제목("공지사항")은 본문이 다시 그립니다. 사진 배경일 때는
   장식으로 읽혀서 문제가 없었지만, 이제 둘 다 글자라 큰 쪽이 섹션이면
   위계가 뒤집힙니다. 그래서 혼자 있는 h1 은 상위로 취급합니다.

   나머지 12개는 <h2>내정보</h2><h1>마일리지</h1> 처럼 상위와 제목을 모두
   갖고 있어 그대로 두 줄로 나옵니다. 각 영역을 이관할 때 앞의 45개도
   이 모양으로 맞춥니다. (복약안내 22개는 맞췄습니다 — 남은 23개)
*/

@media (max-width: 768px) {
  .subvisual {
    padding-block: var(--pd-space-6) var(--pd-space-4);
    /* .container 는 어느 폭에서나 20px 입니다(common.css). 16px 을 쓰면
       제목만 4px 왼쪽으로 튀어나옵니다. */
    padding-inline: var(--pd-space-5);
  }
  .subvisual h2,
  .subvisual:not(.subvisual--page) > h1:first-child:last-child { font-size: 13px; }
  .subvisual h2 + h1,
  .subvisual--page > h1 { font-size: 22px; }
}

/* =========================================================
   4. 2차 메뉴 (.submenu)

   흰 판에 그림자를 얹고 사진 밴드 위로 -40px 끌어올리던 것을,
   헤더 밑에 붙는 탭 줄로 바꿉니다. 모양은 디자인 시스템의 Tabs 와
   같습니다(선 하나 + 현재 항목만 강조).
   ========================================================= */

/*
   순서 — 2차 메뉴가 제목보다 **위**에 온다

   마크업은 62개 화면이 <div class="subvisual"> 다음에 <div class="submenu">
   순서로 들고 있습니다. 그대로 그리면 서브페이지에 들어섰을 때 제목이
   먼저 나오고 메뉴가 그 아래에 뜹니다. 헤더에서 hover 로 열리는 띠와
   같은 메뉴인데 자리가 달라, 페이지를 옮길 때마다 메뉴가 위아래로
   널뜁니다.

   헤더 바로 아래에 2차 메뉴가 붙어 있고 그 아래부터 화면 내용이 시작하는
   것이 이 사이트가 원래 쓰던 방식이고, 3차 탭을 제목 아래로 뺄 자리도
   그래야 생깁니다:

     헤더 → 2차 메뉴 → 제목 → 3차 탭 → 본문

   마크업 62곳을 옮기는 대신 main 을 세로 flex 로 두고 order 로 뒤집습니다.
   :has() 로 2차 메뉴가 있는 화면에만 겁니다.
*/
main:has(> .submenu) {
  display: flex;
  flex-direction: column;
}
main > .submenu { order: -1; }

/* 3차 탭은 제목 아래에 그대로 둡니다(기본 order 0 + DOM 순서). */
main > .submenu--tabs { order: 0; }

/*
   flex 로 바꾼 값 — 본문 컨테이너가 내용 폭으로 쪼그라들었다

   .container 는 common.css 에서 `margin-left: auto; margin-right: auto` 로
   가운데 정렬합니다. 그런데 main 이 세로 flex 가 되면 그 두 값이 **교차축의
   auto 여백**이 되고, 교차축 auto 여백은 stretch 를 막습니다. 그래서 컨테이너가
   내용 폭으로 줄어들고 남은 자리로 몰렸습니다.

   눈에 띈 모습: 고객센터 화면마다 폭이 달랐습니다(컨테이너가 1440 이던 때 재면
   공지사항 449 · 뉴스 514 · 제휴문의 546 · 문의 게시판 876). 표나 카드가
   차지하는 폭이 그대로 컨테이너 폭이 된 것입니다.

   폭은 max-width(컨테이너 폭)가 정하고 auto 여백은 그 뒤 남는 자리를 나누게 합니다.
*/
main:has(> .submenu) > .container { width: 100%; }

/* 제목 위가 이제 탭 줄이라 여백을 줄입니다. 2차 메뉴가 없는 화면은
   그대로 넉넉하게 둡니다.

   24px 로 줄였던 것을 32px 로 되돌립니다. 2차 메뉴는 흰 판이고 제목부터
   페이지 배경이라, 둘 사이가 좁으면 제목이 메뉴 띠에 딸린 글자처럼 붙어
   읽힙니다. 제목은 아래 내용의 머리이므로 위쪽이 넉넉해야 그 묶음이
   드러납니다. 좁은 화면은 맨 아래 768px 블록에서 24px 로 되돌립니다. */
main:has(> .submenu) > .subvisual {
  padding-block: var(--pd-space-8) var(--pd-space-4);
}

.submenu {
  position: sticky;
  /* --pd-gnb-h 는 헤더 안쪽 높이라 아래 보더 1px 이 빠져 있다. 그대로 쓰면
     2차 메뉴의 첫 1px 이 헤더 뒤로 들어간다. */
  top: calc(var(--pd-gnb-h) + 1px);
  z-index: var(--pd-submenu-z);
  margin-top: 0;
  background-color: var(--pd-surface);
  box-shadow: inset 0 -1px 0 var(--pd-border);
}

.submenu > .container {
  background: none;
  box-shadow: none;
  text-align: start;
}

/* =========================================================
   4-2. 띠의 왼쪽 끝은 1차 메뉴 글자에 맞춘다

   한동안 두 띠 모두 왼쪽 끝을 본문 컨테이너(로고·화면 제목과 같은 x)에
   맞춰 뒀습니다. 그런데 2차 메뉴는 본문이 아니라 **1차 메뉴에 딸린 것**
   입니다. "복약안내 서비스" 아래에서 열리는데 글자가 로고 밑에서 시작하면
   어느 메뉴의 하위인지가 자리로 드러나지 않습니다.

   그래서 넓은 화면에서는 띠의 첫 글자를 그 1차 메뉴의 첫 글자에 맞춥니다.
   머물러 있는 띠(서브페이지)도 같은 자리라야 hover 로 열리는 띠와 겹쳐
   보입니다.

   ── 왜 스크립트로 재는가 ────────────────────────────────────
   로고 그림 폭이 정해져 있지 않고(height 만 고정) 1차 메뉴 글자 폭도
   글꼴에 따라 달라져서, CSS 만으로는 그 x 를 알 방법이 없습니다.
   layout.js 가 재서 --pd-subnav-x 로 넣습니다. 값이 없으면(스크립트 실패,
   좁은 화면) 예전처럼 컨테이너 왼쪽입니다.

   3차 탭(.submenu--tabs)은 옮기지 않습니다. 그것은 1차 메뉴가 아니라
   바로 위의 화면 제목에 딸린 것이라 제목과 같은 x 여야 합니다.
   ========================================================= */
main > .submenu:not(.submenu--tabs) > .container {
  padding-inline-start: var(--pd-subnav-x, var(--pd-space-5));
}

/* =========================================================
   4-1. 2차 메뉴 줄 (.pd-subnav) — 헤더와 서브페이지가 **함께 쓰는** 것

   Views/Shared/_SubNav.cshtml 이 그리는 링크 줄입니다. 감싸는 껍데기만
   다릅니다.

     헤더        .pd-gnb__sub  > .pd-subnav     (hover 로 열림)
     서브페이지  .submenu > .container > .pd-subnav  (머물러 있음)
     내정보 펼침 .pd-gnb__menu-panel > .pd-subnav--stack

   예전에는 이 줄이 곳마다 따로 있었습니다 — 헤더는 .pd-gnb__sub-link,
   서브페이지는 .submenu-1d a. 값을 손으로 맞춰 놓아도 한쪽만 고치면
   갈라졌습니다. 이제 규칙이 하나라 갈라질 수가 없습니다.

   .submenu-2d 는 아직 옛 마크업을 쓰는 3차 탭(뷰 13개)입니다. 규칙을
   따로 쓰지 않고 같은 블록에 선택자만 얹습니다.
   ========================================================= */

/*
   여백을 링크 안이 아니라 링크 사이에 둡니다

   예전에는 링크마다 padding-inline: 12px 이 있었습니다. 그래서
     · 첫 항목의 **글자**가 컨테이너 왼쪽 끝에서 12px 안으로 들어가
       로고·화면 제목과 세로로 어긋났고,
     · 아래 강조선이 글자보다 24px 넓게 그어졌습니다.

   안쪽 여백을 걷어 글자를 컨테이너 끝에 맞추고, 강조선은 글자 너비가
   됩니다. 항목 사이가 붙지 않도록 그만큼을 gap 으로 옮겼습니다
   (12 + 4 + 12 = 28 → 32).
*/
.pd-subnav,
.submenu .submenu-2d {
  position: relative;
  display: flex;
  align-items: stretch;
  gap: var(--pd-space-8);
  height: auto;
  overflow-x: auto;
  overflow-y: hidden;
  scrollbar-width: thin;
  white-space: nowrap;
}

.pd-subnav__link,
.submenu .submenu-2d a {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: var(--pd-space-1);
  flex: 0 0 auto;
  height: 52px;
  line-height: normal;
  padding-inline: 0;
  font-size: 15px;
  font-weight: var(--pd-weight-semibold);
  color: var(--pd-text-secondary);
  letter-spacing: normal;
  /* 탭이므로 밑줄을 긋지 않습니다. base.css 의 :where(.pd-root) a:hover 가
     밑줄을 그으려 하는데, 아래 강조선과 겹쳐 두 줄이 됩니다. */
  text-decoration: none;
  border-bottom: 2px solid transparent;
  transition:
    color var(--pd-dur) var(--pd-ease),
    border-color var(--pd-dur) var(--pd-ease);
}
.pd-subnav__link:hover,
.submenu .submenu-2d a:hover { text-decoration: none; }

/* 옛 CSS 가 링크 뒤에 붙이던 장식을 끕니다. */
.pd-subnav__link::after,
.submenu .submenu-2d a::after { content: none; }

.pd-subnav__link:hover,
.submenu .submenu-2d a:hover {
  color: var(--pd-text);
  border-bottom-color: var(--pd-border-strong);
}
.pd-subnav__link:focus-visible,
.submenu .submenu-2d a:focus-visible {
  outline: none;
  box-shadow: var(--pd-focus-ring);
  border-radius: var(--pd-radius-sm);
}

/* 현재 항목. 탭과 같은 규칙으로 강조선이 회색 선 위에 온다.
   .current 는 3차 탭이 아직 쓰는 옛 이름입니다. */
.pd-subnav__link.is-current,
.pd-subnav__link.is-current:hover,
.submenu .submenu-2d a.current,
.submenu .submenu-2d a.current:hover {
  color: var(--pd-accent);
  border-bottom-color: var(--pd-accent);
  z-index: 1;
}

.pd-subnav__link .pd-icon {
  width: var(--pd-icon-sm);
  height: var(--pd-icon-sm);
}

/* 새로 생긴 항목 표시 */
.pd-subnav__link.is-new::after {
  content: "";
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background-color: var(--pd-cta);
  flex: 0 0 auto;
}

/* 묶음 구분자. 예전에는 마크업에 <span>|</span> 글자가 들어 있어 탭 줄에서
   위로 떠 보였습니다. 이제 빈 span 을 세로선으로 그립니다.

   양옆의 gap(32px)만으로도 이미 넓어서 여백을 더 주지 않고 조금 당깁니다.
   묶음 사이(24+1+24=49px)가 항목 사이(32px)보다 넓기만 하면 됩니다. */
.pd-subnav__sep {
  flex: 0 0 auto;
  align-self: center;
  width: 1px;
  height: 16px;
  margin-inline: calc(var(--pd-space-2) * -1);
  background-color: var(--pd-border);
}

/* 탭 줄 안의 진입 단추(복약안내문 설정). 탭이 아니라 단추인 것은,
   누르면 탭이 바뀌는 게 아니라 화면이 통째로 작업 레이아웃으로 바뀌기
   때문입니다. 오른쪽 끝에 붙어 탭과 섞이지 않게 합니다. */
.pd-subnav__cta {
  flex: 0 0 auto;
  align-self: center;
  margin-inline-start: auto;
}
/* 아이콘도 단추 크기를 따라 키웁니다. .pd-btn 의 기본은 16px 인데, 이 단추는
   줄에서 혼자 채워진 것이라 아이콘이 작으면 글자만 커 보입니다.
   (52px 줄 안에 40px 단추 — 위아래로 6px 씩 남습니다.) */
.pd-subnav__cta .pd-icon {
  width: var(--pd-icon);
  height: var(--pd-icon);
}

/*
   가운데 변형 — 내정보 띠.

   다른 갈래의 띠는 헤더의 1차 메뉴 글자에 왼쪽 끝을 맞춥니다(4-2절).
   "내정보"는 1차 메뉴가 아니라 헤더 오른쪽 끝 계정 영역에 있어서 맞출 곳이
   없습니다. 가운데에 둡니다.

   좁은 화면에서는 걸지 않습니다. 이 줄은 넘치면 가로로 스크롤되는데,
   가운데 정렬한 flex 줄은 넘칠 때 **앞쪽이 스크롤 밖으로 밀려나** 첫 항목에
   닿을 수 없게 됩니다.
*/
@media (min-width: 961px) {
  .submenu .pd-subnav--center { justify-content: center; }
}

/*
   세로 변형 — 헤더 계정 영역의 "내정보" 펼침 패널.

   같은 목록을 좁은 카드 안에 세워야 해서 탭이 아니라 목록으로 그립니다.
   목록이 다른 것이 아니라 **놓이는 자리**가 다를 뿐이라 같은 파샬을 씁니다.
*/
.pd-subnav--stack {
  flex-direction: column;
  align-items: stretch;
  gap: 0;
  overflow: visible;
  white-space: normal;
}
.pd-subnav--stack .pd-subnav__link {
  height: auto;
  padding: var(--pd-space-2) var(--pd-space-3);
  border-radius: var(--pd-radius-md);
  border-bottom: 0;
  font-size: 14px;
  font-weight: var(--pd-weight-regular);
  transition:
    background-color var(--pd-dur) var(--pd-ease),
    color var(--pd-dur) var(--pd-ease);
}
.pd-subnav--stack .pd-subnav__link:hover {
  background-color: var(--pd-surface-sunken);
  color: var(--pd-text);
  border-bottom-color: transparent;
}
.pd-subnav--stack .pd-subnav__link.is-current {
  color: var(--pd-accent);
  font-weight: var(--pd-weight-semibold);
  border-bottom-color: transparent;
}
.pd-subnav--stack .pd-subnav__sep {
  width: auto;
  height: 1px;
  margin: var(--pd-space-1) var(--pd-space-3);
}

.submenu .submenu-2d a i { font-size: 14px; font-weight: 400; }

/* 2차는 한 단계 작게 */
.submenu .submenu-2d {
  border-top: 1px solid var(--pd-border);
}
.submenu .submenu-2d a { height: 44px; font-size: 14px; }

/*
   3차 탭 (.submenu--tabs)

   2차 메뉴 줄에 얹혀 있던 3차 항목을 제목 아래로 내린 띠입니다.
   같은 줄에 겹쳐 있을 때는 "2차의 곁가지"였지만, 제목 아래로 오면
   **이 화면의 탭**입니다. 그래서 헤더에 붙지 않고(sticky 아님) 화면
   내용과 함께 흐릅니다. 위 경계선도 없앱니다 — 제목이 이미 경계입니다.

   ── 모양을 밑줄 탭에서 알약 칩으로 바꿨다 ──────────────────
   1차(헤더) · 2차(머무는 띠) · 3차가 **모두 같은 밑줄 탭**이었습니다.
   프로그램 설치 화면을 위에서 아래로 보면 민트 밑줄이 세 줄 이어지는데,
   층이 세 개라는 것이 아니라 같은 줄이 세 번 반복되는 것처럼 읽힙니다.

   3차만 칩으로 바꿉니다. 3차는 "이 화면의 어느 갈래를 보는가"라서
   위치 이동이 아니라 **고르기**에 가깝고, 칩은 그 뜻에 맞는 모양입니다.
   1·2차의 밑줄은 그대로 둡니다 — 그쪽은 실제로 다른 화면으로 갑니다.
*/
.submenu--tabs {
  position: static;
  top: auto;
  z-index: auto;
  /* 아래 hairline 을 없앱니다. 선이 남으면 칩으로 바꿔도 "세 번째 탭 줄"
     로 보입니다. 흰 띠와 본문 배경의 색 차이가 이미 경계입니다. */
  box-shadow: none;
  background-color: transparent;
}

.submenu--tabs .submenu-2d {
  border-top: 0;
  gap: var(--pd-space-2);
  /* 칩이 둥근 모양이라 위아래로 숨 쉴 자리가 필요합니다.
     이 줄은 overflow-y: hidden 이므로 여백을 안쪽에 둡니다. */
  padding-block: var(--pd-space-1) var(--pd-space-5);
}

.submenu--tabs .submenu-2d a {
  height: 34px;
  padding-inline: var(--pd-space-4);
  border: 1px solid var(--pd-border);
  border-radius: var(--pd-radius-pill);
  background-color: var(--pd-surface);
  font-size: 14px;
  font-weight: var(--pd-weight-medium);
  color: var(--pd-text-secondary);
  transition:
    background-color var(--pd-dur) var(--pd-ease),
    border-color var(--pd-dur) var(--pd-ease),
    color var(--pd-dur) var(--pd-ease);
}
.submenu--tabs .submenu-2d a:hover {
  border-color: var(--pd-border-strong);
  background-color: var(--pd-surface);
  color: var(--pd-text);
}
.submenu--tabs .submenu-2d a:focus-visible {
  outline: none;
  box-shadow: var(--pd-focus-ring);
}
.submenu--tabs .submenu-2d a.current,
.submenu--tabs .submenu-2d a.current:hover {
  background-color: var(--pd-accent);
  border-color: var(--pd-accent);
  color: var(--pd-text-on-accent);
  font-weight: var(--pd-weight-semibold);
}

@media (max-width: 768px) {
  /* 좁은 화면에서는 항목 사이도 함께 좁힙니다(32 → 20). */
  .submenu .pd-subnav,
  .submenu .submenu-2d { gap: var(--pd-space-5); }
  .submenu .pd-subnav__link { height: 46px; font-size: 14px; }
  .submenu .submenu-2d a { height: 40px; font-size: 13px; }

  /*
     한동안 여기에 `.submenu .pd-subnav__cta { display: none }` 이 있었습니다.
     2차 메뉴 띠 오른쪽 끝의 「복약안내문 설정」 단추가 좁은 화면에서 줄 밖으로
     잘려 나가 글자가 안 읽혔기 때문입니다.

     그 단추 자체가 없어졌습니다 — 진입은 화면 아래 띠(`.pd-settings-bar`)
     하나가 넓은 화면·좁은 화면 모두에서 맡습니다. 폭에 따라 진입점이 바뀌던
     구조가 사라져서, 경계에서 문이 둘이 되거나 하나도 없게 되는 일도
     없어졌습니다.
  */

  /* 3차 칩은 gap 을 줄이지 않습니다 — 칩끼리 붙으면 한 덩어리로 보입니다. */
  .submenu--tabs .submenu-2d {
    gap: var(--pd-space-2);
    padding-block: var(--pd-space-1) var(--pd-space-4);
  }
  .submenu--tabs .submenu-2d a { height: 32px; font-size: 13px; padding-inline: var(--pd-space-3); }
}

/* =========================================================
   5. 푸터
   ========================================================= */

.pd-footer {
  margin-top: var(--pd-space-16);
  padding-block: var(--pd-space-10);
  background-color: #ffffff;
  border-top: 1px solid var(--pd-border);
  color: var(--pd-text-muted);
}

.pd-footer__inner {
  max-width: 1280px;
  margin-inline: auto;
  padding-inline: var(--pd-space-5);
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: var(--pd-space-10);
  align-items: start;
}

.pd-footer__logo { display: block; line-height: 0; }
.pd-footer__logo img { display: block; height: 50px; width: auto; }

.pd-footer__menu {
  display: flex;
  flex-wrap: wrap;
  gap: var(--pd-space-2) var(--pd-space-5);
  margin-bottom: var(--pd-space-4);
}
.pd-footer__menu a {
  font-size: 14px;
  font-weight: var(--pd-weight-semibold);
  color: var(--pd-text-secondary);
  text-decoration: none;
}
.pd-footer__menu a:hover { color: var(--pd-text); text-decoration: underline; }
.pd-footer__menu a:focus-visible { outline: none; box-shadow: var(--pd-focus-ring); border-radius: var(--pd-radius-sm); }

/* 사업자 정보. 예전에는 span 사이에 세로선을 그렸는데, 줄이 바뀌면
   선이 줄 끝에 남았습니다. flex 로 감싸고 구분선을 항목 앞에 둡니다. */
.pd-footer__company {
  display: flex;
  flex-wrap: wrap;
  gap: 2px var(--pd-space-3);
  margin-bottom: var(--pd-space-2);
}
.pd-footer__company span {
  position: relative;
  font-size: 12px;
  color: var(--pd-text-muted);
  word-break: keep-all;
  padding: 0;
  border: none;
}
.pd-footer__company span + span::before {
  content: "";
  position: absolute;
  left: calc(var(--pd-space-3) / -2);
  top: 4px;
  bottom: 4px;
  width: 1px;
  background-color: var(--pd-border);
}
.pd-footer__company a { color: var(--pd-text-secondary); text-decoration: underline; }

.pd-footer__copyright { font-size: 12px; color: var(--pd-text-placeholder); }

.pd-footer__contact {
  padding-inline-start: var(--pd-space-8);
  border-inline-start: 1px solid var(--pd-border);
}
.pd-footer__contact-title {
  font-size: 13px;
  font-weight: var(--pd-weight-semibold);
  color: var(--pd-text-secondary);
  margin-bottom: var(--pd-space-1);
}
.pd-footer__contact-num {
  display: block;
  font-size: 22px;
  font-weight: var(--pd-weight-bold);
  font-variant-numeric: tabular-nums;
  color: var(--pd-text);
  text-decoration: none;
}
.pd-footer__contact-num:hover { color: var(--pd-accent); }
.pd-footer__contact p { font-size: 13px; color: var(--pd-text-muted); margin-top: 2px; }

@media (max-width: 960px) {
  .pd-footer { margin-top: var(--pd-space-10); padding-block: var(--pd-space-8); }
  .pd-footer__inner {
    grid-template-columns: minmax(0, 1fr);
    gap: var(--pd-space-6);
    padding-inline: var(--pd-space-4);
  }
  .pd-footer__logo { display: none; }
  .pd-footer__contact {
    order: -1;
    padding-inline-start: 0;
    border-inline-start: none;
  }
  .pd-footer__contact-num { font-size: 20px; }
}

/* =========================================================
   6. 푸터를 화면 아래로 밀기

   내용이 짧은 화면(약사 어드바이스 목록, 계정 안내 화면 등)에서 푸터가
   화면 중간에 떠 있고 그 아래로 400px 넘게 빈 바닥이 남았습니다. 페이지가
   덜 그려진 것처럼 보입니다.

   common.css 에는 .wrap 에 min-height: 100% 가 있었지만 주석 처리된
   상태였습니다. 높이를 100% 로 주려면 html, body 까지 높이를 물려야 해서
   그때는 손대기 어려웠을 것입니다. 이제 dvh 를 쓸 수 있습니다.
   (dvh 는 모바일에서 주소창이 접힐 때 vh 가 튀는 문제도 함께 없앱니다)

   .wrap 의 자식은 호환성 알림 · 헤더 · 알림 배너 · main · 푸터입니다.
   헤더는 sticky, 알림 배너는 fixed 라 둘 다 flex 배치에 영향을 받지
   않습니다. 나머지는 세로로 쌓이던 그대로입니다.
   ========================================================= */

.wrap {
  display: flex;
  flex-direction: column;
  min-height: 100dvh;
}
/* 남는 높이는 본문이 받는다. 줄어들지는 않게(1 0 auto) 해서 내용이 긴
   화면의 스크롤 동작은 그대로 둔다. */
.wrap > main { flex: 1 0 auto; }

/* =========================================================
   7. 본문 여백

   예전에는 헤더가 떠 있어서 .no-subvisual main > .container 가
   padding-top: 100px 로 자리를 비웠습니다. 헤더가 흐름 안으로
   들어왔으므로 그 보정이 필요 없습니다. 제목 줄이 없는 화면
   (계정·약관 등)만 위 여백을 스스로 갖습니다.
   ========================================================= */

main > .container { padding-block: var(--pd-space-10); }

/* =========================================================
   7-1. 가운데로 모으는 화면 (body 에 pd-center)

   본문이 컨테이너보다 좁은 화면들입니다. 왼쪽에 붙여 두면 오른쪽이
   통째로 비어 화면이 한쪽으로 쏠려 보입니다.

   **지금은 이 절이 아무것도 옮기지 않습니다.** 읽는 폭(--pd-read-w)을
   본문 컨테이너와 같은 값으로 올렸기 때문에 아래 max-width 가 걸리지
   않습니다. 규칙을 지우지 않고 남겨 두는 이유는, 읽는 폭을 다시 좁히면
   그때 다시 필요해지기 때문입니다 — 값 하나(tokens.css 의 --pd-read-w)만
   내리면 이 절이 되살아납니다.

   제목 줄도 **같이** 옮깁니다. 본문만 가운데로 가고 제목이 왼쪽 끝에 남으면
   둘이 다른 화면처럼 읽힙니다. 그래서 폭을 변수 하나로 두고 본문과 제목이
   같은 값을 씁니다.

   3차 탭이 있는 화면에는 걸지 않습니다. 탭으로 오가는 옆 화면들과 폭이
   다르면 탭을 누를 때마다 제목과 탭 줄이 좌우로 흔들립니다. 필독 프로그램
   설정을 1280 으로 줄여 봤다가 그 이유로 되돌렸습니다.

   되돌리려면 뷰의 ViewData["BodyClass"] 한 줄만 지우면 됩니다.
   ========================================================= */

body.pd-center { --pd-page-w: var(--pd-read-w); }

body.pd-center main > .container > .pd-root {
  max-width: var(--pd-page-w);
  margin-inline: auto;
}

/* 제목 줄을 본문 칸의 왼쪽 끝으로 옮기는 규칙이 여기 있었습니다.
   `padding-inline: max(20px, calc((100% - var(--pd-page-w)) / 2))` 였습니다.

   읽는 폭이 본문 컨테이너보다 **좁을 때만** 맞는 셈입니다. 그때는 본문
   칸이 컨테이너 안에서 가운데로 모이므로 왼쪽 끝이 (100% - 본문폭) / 2 에
   놓입니다. 그런데 두 폭이 같아지면 본문 칸은 더 이상 모이지 않고
   컨테이너의 안쪽 여백(20px)까지 채우므로, 이 셈은 제목만 20px 왼쪽으로
   밀어 본문과 어긋나게 합니다. 그래서 걷어냈습니다 — 위의 기본 .subvisual
   규칙이 컨테이너와 같은 셈을 쓰고 있어 그대로 맞습니다.

   읽는 폭을 다시 좁히면 이 규칙을 되살려야 합니다. 그때 --menu 는 다시
   빼 두어야 합니다(감춘 제목에 여백을 되돌리게 되므로). */

/* 제목 줄과 2차 메뉴가 이미 위 여백을 만든 화면에서는 본문이 한 번 더
   40px 를 벌리지 않게 한다. 셋은 형제로 나란히 놓인다. */
.submenu + .container,
.subvisual + .container { padding-top: var(--pd-space-6); }

/* 제목 줄을 감춘 화면(.subvisual--quiet · --menu)에서는 위의 24px 이 2차 메뉴와
   본문 사이의 전부가 됩니다. 인접 선택자는 감춰진 형제도 세기 때문에 그대로
   걸립니다. 제목이 없어진 만큼 원래 여백으로 되돌립니다.
   (인접이 아니라 :has 로 잡는 것은, 그 사이에 2차 메뉴가 끼어 있어서
   .subvisual--quiet + .container 로는 닿지 않기 때문입니다.)

   --menu 도 같이 걸어야 합니다. 자리를 비우는 방식이 다를 뿐(지우기 대
   화면에서만 감추기) 본문 위에 제목이 없다는 결과는 같습니다. */
main:has(> .subvisual--quiet) > .container,
main:has(> .subvisual--menu) > .container { padding-top: var(--pd-space-10); }

/*
   제목을 감춘 화면에서는 본문 칸이 자기 위 여백을 갖지 않는다

   화면별 CSS 몇 개가 본문 칸에 위 여백을 두고 있습니다 —
   `.page-profile` · `.page-mileage` · `.page-point` 의
   `padding-block: var(--pd-space-6) var(--pd-space-12)` 가 그것입니다.
   그 24px 은 **본문 맨 위에 있던 화면 제목의 머리 여백**이었습니다.

   제목을 감추면서 그 자리가 빈 자리로 남고, 바로 위 .container 의 여백에
   더해집니다(좁은 화면 24+24=48, 넓은 화면 40+24=64). 첫 카드가 그만큼
   아래로 밀려 2차 메뉴와 내용 사이가 텅 빕니다.

   화면별 CSS 를 고치지 않고 여기서 끊는 이유는, 같은 클래스를 **제목이
   남아 있는 화면**도 쓰기 때문입니다(`.page-profile` 은 회원정보 조회/변경과
   이전 주문내역이, `.page-point` 은 상품 상세가 같이 씁니다). 그쪽에서는
   24px 이 여전히 제목의 머리 여백이라 그대로 있어야 합니다.

   제목을 감춘 화면에만 걸어야 하므로 --menu 를 조건으로 씁니다. 이미 위
   여백이 0 인 화면들(page-inquiry · page-news 는 `padding-block: 0 …` 로
   명시돼 있습니다)에는 아무 영향이 없습니다.
*/
main:has(> .subvisual--menu) > .container > .pd-root { padding-block-start: 0; }

/*
   제목 줄이 만들던 여백을 대신 잡는다

   제목 줄은 화면 이름을 적는 것만 하고 있지 않았습니다. **2차 메뉴와 그
   아래 사이의 여백**도 그 줄의 padding 과 글자 높이가 만들고 있었습니다.
   그래서 줄을 감추거나(--menu) 한 줄로 줄이면(--page) 그 여백이 함께
   사라지거나 한쪽으로 쏠립니다.

   갈림길은 **제목 아래에 무엇이 오는가** 하나입니다. 3차 탭이 있는 화면은
   탭이, 없는 화면은 본문이 제목 바로 밑입니다. 위의 :has 규칙이 본문만
   보고 있어서 탭이 있는 화면에서 어긋났습니다.
*/

/* ① 제목 아래가 넓어 보이던 것

   제목 줄의 아래 여백은 **자기 padding 과 본문의 padding 이 더해집니다.**
   16px + 24px = 40px 이 되어, 위(32px)보다 아래가 넓었습니다. 제목은 아래
   내용의 머리라 그 반대여야 합니다.

   아래 몫을 본문 쪽 하나에 넘겨 32/24 로 맞춥니다. 한 줄 제목(--page)에서
   먼저 드러났지만 두 줄 제목(섹션+제목)도 같은 셈이라 `.subvisual` 전체에
   겁니다.

   3차 탭이 있는 화면은 뺍니다 — 거기서는 이 아래 여백이 본문과의 간격이
   아니라 **탭과의 간격**이라, 0 으로 만들면 제목과 탭이 붙습니다. */
main:not(:has(> .submenu--tabs)) > .subvisual { padding-bottom: 0; }

/* ② 3차 탭이 제목을 잃은 화면 (프로그램 설치·설정 4개)

   3차 탭은 위 경계선을 일부러 없앤 띠입니다 — "제목이 이미 경계"라는
   전제였습니다(.submenu--tabs 주석). --menu 로 제목이 흐름에서 빠지면서
   그 전제가 깨져, 2차 메뉴 바로 밑에 칩이 4px 간격으로 붙었습니다.
   경계는 2차 메뉴의 아래 hairline 이 대신하고, 간격만 되돌립니다.

   값은 위 `main:has(> .submenu) > .subvisual` 의 위 여백과 같은 32px 입니다.
   이 화면에서 탭 줄은 감춘 제목이 있던 자리를 물려받은 것이라, 제목이
   보이는 화면의 제목 위 여백과 같아야 층이 같게 읽힙니다. */
main:has(> .subvisual--menu) > .submenu--tabs .submenu-2d {
  padding-block-start: var(--pd-space-8);
}

/* ③ ②의 화면에서는 본문 위 여백을 탭이 혼자 갖는다

   위의 40px 은 "제목이 있던 자리를 본문이 물려받는다"는 셈입니다. 그런데
   탭이 있는 화면에서 본문 바로 위는 제목이 아니라 탭입니다. 그리고 탭은
   자기 아래 여백 20px 을 이미 갖고 있어서(.submenu--tabs .submenu-2d)
   본문 쪽 값이 그 위에 **더해집니다** — 24px 을 두면 44px 이 되어 탭과
   본문이 서로 딴 덩어리로 떨어집니다.

   탭은 아래 내용을 고르는 컨트롤이라 그 내용과 붙어 있어야 합니다. 본문
   쪽을 0 으로 두고 탭의 20px 만 남깁니다. */
main:has(> .subvisual--menu):has(> .submenu--tabs) > .container {
  padding-top: 0;
}

/* 좁은 화면 몫. 위의 규칙들이 기존 768px 블록보다 파일에서 뒤에 있어 그
   블록으로는 덮이지 않습니다. 그래서 여기에 따로 둡니다.

   넓은 화면에서 키운 32px 을 좁은 화면에서는 24px 로 되돌립니다 — 세로가
   귀한 화면에서 머리 여백이 화면의 한 뭉치를 차지합니다. */
@media (max-width: 768px) {
  main:has(> .submenu) > .subvisual { padding-block-start: var(--pd-space-6); }

  main:has(> .subvisual--menu) > .submenu--tabs .submenu-2d {
    padding-block-start: var(--pd-space-6);
  }
  /* 탭의 아래 여백이 좁은 화면에서 16px 이라 그것만 남습니다. */
  main:has(> .subvisual--menu):has(> .submenu--tabs) > .container {
    padding-top: 0;
  }
}

@media (max-width: 768px) {
  main > .container { padding-block: var(--pd-space-8); }
  .submenu + .container,
  .subvisual + .container { padding-top: var(--pd-space-5); }
  main:has(> .subvisual--quiet) > .container { padding-top: var(--pd-space-8); }

  /*
     --menu 는 좁은 화면에서 한 단계 더 줄입니다(32px → 24px).

     이 값은 "제목이 없어진 만큼 본문이 물려받는다"는 셈인데, 두 표시의
     사정이 다릅니다. --quiet 화면은 본문 맨 위에 제목이 있어서 그 여백이
     **제목의 머리 여백**으로 쓰입니다. --menu 화면은 제목이 아예 없어서
     같은 값이 그냥 빈 자리로 남습니다. 좁은 화면에서는 그 빈 자리가 첫
     화면의 한 뭉치를 차지해, 붙어 있는 2차 메뉴와 내용 사이가 텅 빕니다.

     24px 은 좁은 화면에서 메뉴 줄 다음에 오는 다른 여백과 같은 층입니다.
  */
  main:has(> .subvisual--menu) > .container { padding-top: var(--pd-space-6); }
}


/* =========================================================
   떠 있는 알림 카드 (_Layout.cshtml `.pd-prior`)

   아직 하지 않은 준비(약국정보 등록 · 프로그램 설치)를 알립니다. 로그인한
   사람에게만, RestUserCheck 응답으로 켜집니다.

   옛 규칙(.prior / .prior-warning, style.css·admin.css)은 코랄 판에 흰 글자
   였습니다. 코랄은 이 시스템에서 전환 유도(CTA) 색이라 "지금 눌러야 하는 것"
   으로 읽히는데, 이 카드는 하던 일을 멈출 만큼 급하지 않습니다. 흰 판에
   경고색 아이콘으로 낮춥니다. 마크업 이름을 바꿨으므로 옛 규칙은 더 이상
   어디에도 걸리지 않습니다.
   ========================================================= */

.pd-prior {
  position: fixed;
  z-index: 30;
  inset-block-end: var(--pd-space-6);
  inset-inline-end: var(--pd-space-6);
  display: flex;
  flex-direction: column;
  gap: var(--pd-space-2);
  /* 본문 위에 떠 있지만 본문을 가리는 폭이 되면 안 됩니다. */
  max-width: 340px;
}

/*
   진입 띠 위에 나란히 쌓입니다.

   화면 아래 띠(`.pd-settings-bar`)가 **맨 아래**에 있고, 이 카드가 그 위에
   놓입니다. 겹치지 않으므로 둘 다 온전히 보이고, 위아래로 쌓인 한 덩어리로
   읽힙니다. 카드가 물러나면 아래 띠만 남습니다.

   올리는 높이는 **띠의 높이 + 띠가 떠 있는 높이**입니다. 띠는 화면 바닥에
   붙어 있지 않고 `--pd-settings-bar-lift` 만큼 떠 있으므로, 그 값을 빼면
   카드가 띠 위에 얹히는 대신 20px 겹칩니다.

   띠의 높이는 글자 크기 설정에 따라 달라지므로 숫자를 적어 두지 않고
   `_MedicationSettingsBar.cshtml` 이 재서 `--pd-settings-bar-measured`
   로 넣습니다. 스크립트가 실패해도 기본값으로 겹치지 않을 만큼은 띄웁니다.

   이 규칙은 진입 띠가 있는 화면에서만 켜집니다 — 같은 파샬이 클래스를
   붙입니다. 띠가 없는 화면에서는 카드가 예전 자리에 그대로 있습니다.
*/
.pd-prior--stacked {
  inset-block-end: calc(var(--pd-settings-bar-lift) + var(--pd-settings-bar-measured, 76px) + var(--pd-space-2));
}

/*
   들어올 때.

   스크립트가 `.show()` 로 켜므로, 켜지는 순간 이 애니메이션이 한 번 돕니다.
   아래에서 밀려 올라오게 해서 어디에서 나타난 것인지 눈으로 따라가게 합니다.
*/
@keyframes pd-prior-in {
  from { opacity: 0; transform: translateY(var(--pd-space-4)); }
  to { opacity: 1; transform: translateY(0); }
}
.pd-prior__item { animation: pd-prior-in var(--pd-dur-slow) var(--pd-ease) backwards; }

/*
   물러나는 상태.

   이 카드는 화면에 들어올 때 한 번 알리고 물러납니다. 계속 붙어 있으면
   오른쪽 아래 모서리를 영구히 차지해, 그 자리에 깔린 진입 단추를 덮습니다.

   들어올 때와 **같은 방향으로** 내려가며 사라집니다 — 왔던 길로 돌아가는
   것이라 「사라졌다」가 읽히고, 그 자리에 남는 것이 뒤 층의 단추임이
   분명해집니다.

   opacity 만 0 으로 두면 **보이지 않는 채로 클릭을 계속 가로챕니다.**
   그래서 pointer-events 를 함께 끄고, 사라진 뒤에는 스크립트가 hidden 을
   붙여 자리도 비웁니다.
*/
.pd-prior.is-leaving {
  opacity: 0;
  transform: translateY(var(--pd-space-4));
  pointer-events: none;
  transition:
    opacity var(--pd-dur-slow) var(--pd-ease),
    transform var(--pd-dur-slow) var(--pd-ease);
}

/* 움직임을 원치 않는 사람에게는 옮기지 않고 그냥 사라지게 합니다.
   시간은 tokens.css 가 이미 전역으로 1ms 로 줄이므로 여기서 다시 정하지
   않습니다 — 자리를 옮기는 것만 뺍니다. */
@media (prefers-reduced-motion: reduce) {
  .pd-prior.is-leaving { transform: none; }
}

/*
   hidden 을 되받습니다.

   base.css 의 일괄 규칙은 `.pd-root [hidden]` 로 **껍데기 안에서만** 걸립니다.
   이 카드는 _Layout 의 <main> 앞에 있고 그 껍데기 밖이라 규칙이 닿지 않습니다.
   브라우저 기본 [hidden] { display: none } 은 위 `.pd-prior { display: flex }`
   에 지므로, 스크립트가 hidden 을 붙여도 카드가 그대로 보입니다.
*/
.pd-prior[hidden] { display: none; }

.pd-prior__item {
  display: flex;
  align-items: center;
  gap: var(--pd-space-3);
  padding: var(--pd-space-4);
  background: var(--pd-surface);
  border: 1px solid var(--pd-border);
  border-radius: var(--pd-radius-lg);
  box-shadow: var(--pd-shadow-lg);
  color: inherit;
  text-decoration: none;
  transition:
    border-color var(--pd-dur) var(--pd-ease),
    box-shadow var(--pd-dur) var(--pd-ease),
    transform var(--pd-dur) var(--pd-ease);
}
/* 시스템의 가장 큰 그림자가 --pd-shadow-lg 이고 이 카드가 이미 그것을 씁니다.
   가리켰을 때는 그림자를 더 키우는 대신 살짝 들어 올려 반응을 알립니다. */
.pd-prior__item:hover {
  color: inherit;
  text-decoration: none;
  border-color: var(--pd-border-hover);
  transform: translateY(-2px);
}
.pd-prior__item:focus-visible { outline: none; box-shadow: var(--pd-focus-ring); }

/* 아이콘은 경고색 판에 올립니다. 판이 흰색이라 아이콘만으로도 눈이 갑니다. */
.pd-prior__icon {
  flex: 0 0 auto;
  display: grid;
  place-items: center;
  width: 36px;
  height: 36px;
  border-radius: var(--pd-radius-md);
  background: var(--pd-warning-subtle);
  color: var(--pd-warning-on-subtle);
}
.pd-prior__icon .pd-icon { width: var(--pd-icon); height: var(--pd-icon); }

.pd-prior__body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.pd-prior__title {
  font-size: 14px;
  font-weight: var(--pd-weight-semibold);
  color: var(--pd-text);
  word-break: keep-all;
}
.pd-prior__desc {
  font-size: 12px;
  line-height: 1.5;
  color: var(--pd-text-muted);
  word-break: keep-all;
}

.pd-prior__go {
  flex: 0 0 auto;
  width: var(--pd-icon-sm);
  height: var(--pd-icon-sm);
  color: var(--pd-text-placeholder);
}

/* 좁은 화면에서는 설명을 접고 한 줄로 만듭니다. 카드 두 장이 세로로 서면
   화면 아래 절반을 먹습니다. 오른쪽 끝 여백도 한 급 줄입니다. */
@media (max-width: 768px) {
  .pd-prior {
    inset-block-end: var(--pd-space-4);
    inset-inline-end: var(--pd-space-4);
    inset-inline-start: var(--pd-space-4);
    max-width: none;
    align-items: flex-end;
  }
  /* 위 `.pd-prior--stacked` 를 여기서 다시 적습니다. **값은 같습니다.**
     그래도 적어야 하는 것은, 바로 위 `.pd-prior` 의 좁은 화면 규칙이
     `inset-block-end` 를 다시 정하는데 두 규칙의 특정도가 같아 뒤에 오는
     쪽이 이기기 때문입니다. 여기에 없으면 좁은 화면에서 쌓임이 풀려
     카드가 띠 위로 내려앉습니다. */
  .pd-prior--stacked {
    inset-block-end: calc(var(--pd-settings-bar-lift) + var(--pd-settings-bar-measured, 76px) + var(--pd-space-2));
  }
  .pd-prior__item { padding: var(--pd-space-3); gap: var(--pd-space-2); }
  .pd-prior__desc { display: none; }
  .pd-prior__icon { width: 30px; height: 30px; }
  .pd-prior__title { font-size: 13px; }
}

:root {
  /*
     떠 있는 높이.

     세 곳이 이 값을 읽습니다 — 띠 자신(sticky 오프셋과 멈출 때의 아래
     여백), 그 위에 쌓이는 알림 카드(`.pd-prior--stacked`), 그리고
     「여는 중」 판이 출발하는 자리. 서로 다른 요소라 :root 에 둡니다.

     20px 은 컨테이너 좌우 여백과 같은 값입니다. 떠 있는 것은 사방이 같은
     만큼 떠 있어야 「띄운 것」으로 보입니다 — 아래만 다르면 잘못 붙은
     것으로 읽힙니다.
  */
  --pd-settings-bar-lift: var(--pd-space-5);
}

/* =========================================================
   화면 아래 진입 띠 (`.pd-settings-bar`)

   복약안내 서비스의 일반 화면에서 「복약안내문 설정」으로 들어가는 길입니다.
   마크업과 그렇게 만든 이유는 `Views/Shared/_MedicationSettingsBar.cshtml`
   머리에 적었습니다. 여기에는 배치 규칙만 둡니다.

   ── 이 띠는 목적지의 윗줄과 **같은 것**입니다 ───────────────
   어두운 면(`--pd-surface-inverted`) · 76px · 왼쪽 제목 · 가운데 네 갈래 ·
   오른쪽 단추. 전부 작업 레이아웃 윗줄(`studio.css` 의 `.studio-bar`)에서
   가져온 것입니다. 설정을 열면 이 띠 자리에서 그 윗줄이 올라오므로, 둘이
   달라 보이면 「띠가 올라왔다」가 아니라 「띠가 사라지고 남이 왔다」가
   됩니다. **한쪽을 고치면 다른 쪽도 같이 봅니다.**

   같은 것을 두 번 적지 않으려고, 나눠 쓸 수 있는 곳은 나눠 씁니다.
     · 높이   `--pd-studio-bar-h` (studio.css 의 :root)
     · 제목   `.studio-bar__title` 을 마크업에서 그대로 씁니다
   갈래(`.studio-nav__link`)만 여기서 다시 적습니다 — 목적지에서는 넷 중
   하나가 「현재」인데 여기서는 아무것도 현재가 아닙니다. 색·크기는 같은
   값을 씁니다.

   `studio.css` 는 이 띠가 있는 화면에도 실립니다(파샬이 싣습니다).
   그 파일의 선택자는 전부 `.studio-*` 안쪽이라 일반 화면에 영향이 없습니다.

   ── 폭은 다릅니다 ──────────────────────────────────────────
   이 띠는 컨테이너 폭(1280px)이고 작업 레이아웃 윗줄은 화면 폭입니다.
   그래서 「여는 중」 판이 **띠의 자리에서 출발해 화면 폭으로 벌어지며**
   올라옵니다(아래 `.pd-settings-open`). 벌어지지 않고 처음부터 화면 폭이면,
   올라오기 시작하는 첫 프레임에 양옆으로 어두운 자투리가 튀어나옵니다.

   ── `.pd-prior` 와의 관계 ───────────────────────────────────
   떠 있는 알림 카드는 이 띠를 **덮지 않고 그 위에 쌓입니다**(z-index 30 대
   29, 그리고 `.pd-prior--stacked` 의 바닥 여백). 예전 떠 있는 단추는 같은
   모서리를 다퉜지만, 이 띠는 컨테이너 폭을 가로로 다 쓰므로 카드가 비켜
   앉을 곳이 위밖에 없습니다.
   ========================================================= */

.pd-settings-bar {
  /*
     떠 있지 않고 **흐름 안에 있으면서** 화면 아래에 붙습니다.

     fixed 였습니다. 그때는 문서 어디에 있든 화면 바닥에 붙어 있어서,
     끝까지 내려가면 푸터를 덮었습니다. 푸터 안쪽 여백을 띠 높이만큼
     늘려 가려지는 부분을 비우는 것으로 버텼는데, 그건 「가려도 되는
     빈 칸」을 만들어 둔 것이지 띠가 멈춘 것이 아닙니다.

     sticky 는 **컨테이닝 블록 안에서만** 움직입니다. 이 파샬은 `<main>`
     의 마지막 자식이고 푸터는 `main` 의 형제이므로(_Layout 참조),
     스크롤하는 동안은 화면 아래에 떠 있다가 **main 바닥 = 푸터 시작점**
     에서 저절로 멈춥니다. 자바스크립트가 하나도 필요 없고, 「푸터보다 더
     내려가지 않는다」가 구조로 보장됩니다.

     ── 대신 포기한 것 ──────────────────────────────────────
     내용이 짧아 스크롤이 없는 화면에서는 **화면 바닥에 붙지 않습니다.**
     `.wrap` 이 `min-height: 100dvh` 이고 `main` 이 남는 높이를 받으므로
     (`flex: 1 0 auto`), 그런 화면에서는 푸터가 화면 바닥에 오고 main
     바닥은 푸터 높이만큼 위입니다. sticky 는 제자리보다 **위로만** 당길
     수 있지 아래로 밀 수는 없으니, 띠는 푸터 바로 위에 섭니다.
     그 화면은 어차피 전체가 한눈에 보이므로 띠도 함께 보입니다 —
     「항상 화면 바닥」보다 「푸터를 덮지 않는다」를 택했습니다. 사방을
     띄우고 그림자를 준 것도 그래서입니다: 화면 바닥에 닿아 있지 않은
     자리에 서 있어도 **떠 있는 것**으로 읽히면 어색하지 않습니다.

     `z-index` 는 그대로 29 입니다. 앞선 내용이 이 띠 **뒤로** 지나가야
     하고(스크롤), 떠 있는 알림 카드(30)에는 자리를 내줍니다.
  */
  position: sticky;
  z-index: 29;
  /*
     바닥에 붙이지 않고 **띄웁니다.**

     `inset-block-end` 는 붙어 있는 동안의 자리이고, `margin-block-end` 는
     푸터 위에 멈췄을 때의 자리입니다. **둘 다 있어야** 합니다 — sticky 의
     오프셋은 붙어 있는 동안에만 쓰이고, 멈추는 지점은 컨테이닝 블록
     (`main`) 바닥에서 **자기 아래 여백만큼** 안쪽이기 때문입니다. 하나만
     주면 스크롤 중에는 떠 있다가 끝에서 푸터에 내려앉거나, 그 반대가
     됩니다.

     안전영역(iOS 홈 인디케이터)은 이제 **띠 안쪽이 아니라 띠 밑**에
     더합니다. 떠 있는 카드는 안쪽을 늘리면 카드가 두꺼워질 뿐이고,
     인디케이터를 피해야 하는 것은 카드 자체입니다.
  */
  inset-block-end: calc(var(--pd-settings-bar-lift) + env(safe-area-inset-bottom, 0px));
  margin-block-end: calc(var(--pd-settings-bar-lift) + env(safe-area-inset-bottom, 0px));
  /*
     폭은 본문 컨테이너(common.css 의 `.container`, layout.css 의
     `.pd-gnb__inner`·`.pd-footer__inner`)와 같은 1280px 입니다. 화면 끝까지
     늘리면 이 띠만 다른 자를 쓰게 되어, 헤더·본문·푸터가 맞춰 놓은 세로선
     밖으로 혼자 삐져나갑니다. 좌우 여백(20px)도 컨테이너와 같은 값을
     `__inner` 에 줘서 제목이 본문 첫 글자와 같은 자리에서 시작합니다.

     `width: 100%` 를 **반드시** 적습니다. 2차 메뉴가 있는 화면에서는
     `main` 이 세로 flex 이고(위 `main:has(> .submenu)`), 그러면
     `margin-inline: auto` 가 교차축 auto 여백이 되어 stretch 를 막습니다.
     폭을 적어 두지 않으면 그 화면들에서만 띠가 글자 폭으로 쪼그라듭니다.
     `.container` 가 같은 이유로 `width: 100%` 를 받고 있습니다.

     `min()` 은 **좁은 화면에서 좌우도 띄우려고** 씁니다. 화면이 1320px
     보다 넓으면 1280px 이라 컨테이너와 세로선이 맞고, 그보다 좁으면
     화면 양옆에서 20px 씩 떨어집니다. 떠 있는 카드가 화면 끝에 닿으면
     둥근 모서리가 잘린 것처럼 보여 「띄웠다」가 무너집니다.

     그 폭에서는 제목이 본문 첫 글자보다 20px 안쪽에서 시작합니다.
     떠 있는 카드는 본문과 다른 층이므로 세로선을 같이 쓰지 않는 것이
     오히려 맞습니다.
  */
  width: 100%;
  max-width: min(1280px, 100% - var(--pd-space-10));
  margin-inline: auto;
  background-color: var(--pd-surface-inverted);
  color: var(--pd-text-inverted);
  /*
     모서리 넷을 다 둥글립니다.

     한동안 위 두 곳만 둥글렸습니다. 바닥에 붙어 있을 때는 그것이 맞습니다 —
     아래가 화면 밖으로 이어지므로 각져야 「붙어 있다」로 읽힙니다. 지금은
     사방이 떠 있으므로 한쪽만 각지면 잘린 것처럼 보입니다.

     「여는 중」 판도 같은 모서리에서 출발합니다(아래 keyframes). 판이
     화면을 다 채우면서 넷이 함께 펴집니다.
  */
  border-radius: var(--pd-radius-lg);
  /*
     그림자도 사방입니다.

     위로만 내던 그림자(`0 -6px 24px`)는 「아래에서 올라온 판」의 그림자라,
     떠 있는 카드에는 맞지 않습니다. 시스템의 `--pd-shadow-lg` 를 쓰지
     않는 것은 그 값이 **밝은 면 위의 밝은 카드**를 위한 것이라, 어두운
     면이 얹히면 거의 보이지 않기 때문입니다. 같은 형태(큰 것 + 붙는 것
     두 겹)를 유지하되 더 진하게 냅니다.
  */
  box-shadow: 0 12px 32px rgb(0 0 0 / 0.24), 0 3px 10px rgb(0 0 0 / 0.16);

  /*
     높이.

     목적지 윗줄(`--pd-studio-bar-h`, 60px)과 같은 값을 쓰다가 76px 로
     올렸습니다. 60px 짜리 띠는 화면 아래에서 「경계선」처럼 읽혀, 가로로
     화면을 다 쓰는데도 눈에 걸리지 않고 지나갔습니다. 76px 은 어두운 면이
     한 덩어리로 보이기 시작하는 높이입니다.

     목적지 윗줄은 그대로 60px 입니다 — 그쪽은 **일하는 화면의 도구줄**이라
     세로를 한 픽셀이라도 본문에 줘야 하고, 이 띠처럼 스스로를 알릴 일이
     없습니다. 둘이 16px 어긋나지만, 「여는 중」 판은 어두운 한 장이 통째로
     자라 올라오는 것이라 그 안의 윗줄 경계는 보이지 않습니다. 어긋나는 것이
     보이는 곳은 오른쪽 단추 하나뿐이고, 그건 양쪽 다 `--pd-control-h` 로
     같은 크기라 **세로로만** 조금 움직입니다.
  */
  --pd-settings-bar-h: 76px;

  /*
     들어올 때 아래에서 올라옵니다.

     화면이 그려질 때 이미 자리에 있으면 처음부터 거기 있던 붙박이로 읽혀
     눈이 그냥 지나갑니다. 움직이는 것에는 눈이 갑니다.

     늦게(`--pd-dur-slow` 만큼) 시작합니다 — 페이지가 뜨는 순간에는 볼 것이
     많아 여기까지 눈이 오지 않습니다. 본문이 자리를 잡은 뒤에 올라와야
     「하나가 더 생겼다」가 됩니다.

     `backwards` 로 시작 전에도 접혀 있게 합니다. 없으면 딜레이 동안 제자리에
     보였다가 내려갔다 다시 올라옵니다.

     모션을 줄이는 설정에서는 tokens.css 가 시간을 1ms 로 줄이지만, 그래도
     자리를 옮기는 부분은 아래에서 따로 걷습니다.
  */
  animation: pd-settings-bar-in var(--pd-dur-slow) var(--pd-ease) var(--pd-dur-slow) backwards;
}

@keyframes pd-settings-bar-in {
  from {
    /* 자기 높이 + 떠 있는 높이만큼 내려갑니다. `100%` 만으로는 띄운
       20px 때문에 카드 윗부분이 화면 아래 끝에 걸쳐 보인 채로 시작합니다. */
    transform: translateY(calc(100% + var(--pd-settings-bar-lift)));
    opacity: 0;
  }
  to {
    transform: translateY(0);
    opacity: 1;
  }
}

/* 움직임을 원치 않는 사람에게는 옮기지 않고 그냥 나타나게 합니다.
   `.pd-prior` 와 같은 방식입니다. */
@media (prefers-reduced-motion: reduce) {
  .pd-settings-bar { animation-name: pd-settings-bar-in-quiet; }
}

@keyframes pd-settings-bar-in-quiet {
  from { opacity: 0; }
  to { opacity: 1; }
}

/*
   격자로 놓습니다.

   넓은 화면  [제목]        [네 갈래]        [설정 열기]
   좁은 화면  [제목 + 설명]                  [설정 열기]

   둘 다 한 줄 76px 입니다(`--pd-settings-bar-h`).

   넓은 화면의 `1fr auto 1fr` 은 목적지 윗줄과 같은 셈입니다 — 양옆이 무엇을
   담든 갈래가 **화면 한가운데**에 옵니다. 양옆 폭에 끌려다니게 두면 판이
   올라올 때 갈래가 가로로 미끄러집니다.

   위아래 여백을 주지 않습니다. 갈래가 띠 높이를 꽉 채워야 밑줄이 띠 바닥에
   붙어, 목적지 윗줄의 밑줄과 같은 자리에 옵니다. 36px 짜리인 단추 둘은
   `align-self` 로 가운데에 둡니다.
*/
.pd-settings-bar__inner {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  grid-template-areas: "lead links go";
  align-items: stretch;
  /* 목적지 윗줄(.studio-bar)과 같은 값입니다 — 좌우 여백도 간격도. */
  gap: var(--pd-space-5);
  min-height: var(--pd-settings-bar-h, 76px);
  /* 컨테이너(.container)의 좌우 여백과 같은 20px. 위 주석 참조. */
  padding-inline: var(--pd-space-5);
}

.pd-settings-bar__lead {
  grid-area: lead;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 1px;
  min-width: 0;
}

/*
   네 갈래.

   `studio.css` 의 `.studio-nav` 와 같은 셈입니다 — 여백은 링크 안이 아니라
   사이에 두고, 강조선은 글자 너비입니다. 한동안 테두리 친 단추였는데
   걷었습니다: 목적지에서는 글자 탭이라, 판이 올라와 이 자리를 지나는 순간
   단추가 탭으로 바뀌는 것이 그대로 보였습니다. **목적지를 고칠 수는 없으니
   (그것이 진짜입니다) 이쪽이 맞춥니다.**

   테두리가 없어도 찾는 데는 지장이 없습니다 — 이 띠가 있는 이유는 네
   「낱말」을 보이는 것이지 네 「단추」를 보이는 것이 아니었고, 어두운 띠와
   민트색 아이콘과 「설정 열기」가 누를 자리라는 말을 이미 하고 있습니다.

   자리가 모자라면 줄바꿈이 아니라 가로 스크롤입니다. 줄이 바뀌면 띠 높이가
   달라져 한 줄 약속이 깨지고, 글자를 줄이면 이 띠가 있는 이유가 사라집니다.
*/
.pd-settings-bar__links {
  grid-area: links;
  display: flex;
  align-items: stretch;
  gap: var(--pd-space-8);
  min-width: 0;
  overflow-x: auto;
  scrollbar-width: none;
}
.pd-settings-bar__links::-webkit-scrollbar { display: none; }

/* 값은 studio.css 의 `.studio-nav__link` 와 같습니다. 위 주석 참조. */
.pd-settings-bar__links a {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  color: rgb(255 255 255 / 0.62);
  font-size: 14px;
  font-weight: var(--pd-weight-semibold);
  white-space: nowrap;
  text-decoration: none;
  border-bottom: 2px solid transparent;
  transition:
    color var(--pd-dur) var(--pd-ease),
    border-color var(--pd-dur) var(--pd-ease);
}
.pd-settings-bar__links a:hover {
  color: var(--pd-text-inverted);
  text-decoration: none;
  border-bottom-color: rgb(255 255 255 / 0.3);
}
.pd-settings-bar__links a:focus-visible {
  outline: none;
  box-shadow: var(--pd-focus-ring);
}

/*
   오른쪽 단추.

   치수는 목적지 윗줄의 오른쪽 단추(`studio.css` 의 `.studio-bar__back`)와
   같습니다 — 40px(--pd-control-h) · 14px. 36px · 13px 이었는데, 띠 높이는
   양쪽 다 60px 로 같아도 그 안의 단추가 4px 씩 달라서 판이 올라오는 순간
   오른쪽 끝만 커졌습니다. 두 단추는 같은 자리에서 서로를 바꿔 놓습니다.

   색은 일부러 다릅니다. 여기 것은 들어가는 길이라 accent(민트)로 부르고,
   저기 것은 나오는 길이라 흰 면입니다. 같은 자리·같은 크기에서 색만 바뀌면
   「같은 단추가 역할을 바꿨다」로 읽힙니다.
*/
.pd-settings-bar__go {
  grid-area: go;
  justify-self: end;
  align-self: center;
  height: var(--pd-control-h);
  padding-inline: var(--pd-space-4);
  font-size: 14px;
}
.pd-settings-bar__go .pd-icon {
  width: var(--pd-icon-sm);
  height: var(--pd-icon-sm);
}

/*
   푸터와의 사이.

   띠가 흐름 안에 있으므로 **문서 끝에 자리를 따로 만들 필요가 없습니다.**
   fixed 였을 때는 띠가 푸터를 덮어서, 푸터 안쪽 아래 여백을 띠 높이만큼
   늘려 가려질 빈 칸을 만들어 뒀습니다(`padding-block-end` 에 측정값을
   더하던 규칙). sticky 가 되면서 그 규칙은 지웠습니다 — 남겨 두면 문서
   끝이 띠 높이만큼 두 번 비워집니다.

   지우는 것은 푸터의 **위** 여백입니다. `.pd-footer` 는 본문과 떨어지려고
   `margin-top: var(--pd-space-16)` (64px)을 갖는데, 띠는 main 바닥에서
   멈추므로 그 64px 이 띠와 푸터 **사이**에 남습니다. 그러면 스크롤 중에
   20px 떠 있던 카드가 끝에서만 84px 로 벌어집니다 — 멈추는 순간 아래로
   한 번 더 떨어지는 것처럼 보입니다.

   0 으로 두면 띠 자신의 아래 여백(`--pd-settings-bar-lift`)만 남아,
   붙어 있을 때와 멈췄을 때의 아래 간격이 같습니다. 떠 있는 카드가
   푸터 위에서 **그대로 멈춘** 것으로 읽힙니다.

   본문과 푸터가 붙어 버리는 것은 아닙니다. 그 사이에는 이제 76px 짜리
   띠와 그 아래 20px 이 실제로 들어 있습니다.

   `:has()` 를 쓰면 레이아웃을 고치지 않고도 「띠가 있는 화면에서만」이
   됩니다. `:has()` 를 모르는 브라우저에서는 띠와 푸터 사이가 64px 벌어진
   채로 보입니다(기능은 그대로입니다).
*/
body:has(.pd-settings-bar) .pd-footer {
  margin-top: 0;
}

/*
   한 줄이지만 자리가 빠듯한 구간(769~819px) — 제목을 뺍니다.

   넓은 화면 배치가 성립하려면 778px 이 필요합니다(좌우 여백 40 + 갈래 430 +
   간격 40 + 양옆 칸 134×2). 그 아래에서는 양옆 칸이 제목보다 좁아져
   「복약안내문 설…」로 잘립니다.

   **버릴 것은 제목입니다.** 이 띠가 있는 이유는 네 갈래 이름을 보이는 것이고,
   제목은 그 넷이 어디에 속하는지 말할 뿐입니다. 넷이 남아 있으면 무슨
   자리인지는 그대로 전해집니다. 목적지 윗줄도 좁아지면 같은 것을 먼저
   버립니다(studio.css 의 `.studio-bar__lead`).

   820px 은 실측 임계(778px + 스크롤바)에 글꼴이 늦게 와서 글자가 넓어질
   경우를 더한 값입니다. 경계를 딱 맞춰 두면 글꼴 하나 바뀔 때 조용히 잘립니다.
   칸(1fr)은 그대로 두므로 갈래는 계속 화면 한가운데입니다.
*/
@media (min-width: 769px) and (max-width: 819px) {
  .pd-settings-bar__lead { display: none; }
}

/*
   좁은 화면 — 네 갈래를 감춥니다.

   여기서는 제목 한 줄 + 네 갈래 2×2 로 159px 을 썼고, 접으면 60px 이 되는
   토글이 따로 있었습니다. 둘 다 걷었습니다.

   ── 왜 갈래를 버리나 ────────────────────────────────────────
   2×2 에서는 네 이름이 한 칸 136px 안에 들어가느라 12~13px 로 작아지고,
   그렇게 작아진 글자 넷은 「무엇이 있는지」를 알려 주기보다 **화면 아래
   1/4 을 상시 점유하는 덩어리**가 됩니다. 좁은 화면은 세로가 밑천인데
   본문이 그만큼 줄어듭니다. 넓은 화면에서 네 이름을 싣는 이유(찾는 사람이
   「설정」이 아니라 그 네 낱말을 찾는다)는 그대로지만, 그 값은 자리가
   있을 때에만 남는 이득입니다.

   ── 왜 접기 토글까지 버리나 ─────────────────────────────────
   토글은 갈래를 감추려고 있던 것입니다. 갈래가 늘 감춰지면 토글이 여닫을
   것이 없습니다. 남겨 두면 「무엇이 열리는지 모르는 단추」가 되고, 기억해
   두던 상태(localStorage)도 읽는 곳이 없어집니다.

   남는 것은 제목과 「설정 열기」뿐입니다. 높이는 76px —
   **어느 폭에서나 같은 값입니다.** 예전에는 좁은 화면에서만 159px 이라,
   판이 그 자리에서 올라올 때 높이가 한 번 줄어드는 것이 보였습니다.
*/
@media (max-width: 768px) {
  /*
     두 칸입니다. `1fr auto 1fr` 을 그대로 두고 갈래만 감추면, 항목이 없어도
     칸과 그 사이 간격(20px 두 번)이 남아 단추가 가운데로 끌려옵니다.
  */
  .pd-settings-bar__inner {
    grid-template-columns: minmax(0, 1fr) auto;
    grid-template-areas: "lead go";
    /*
       320px 에서 제목 135 + 단추 108 = 243 이고 안쪽이 280 입니다. 남는 37 을
       간격으로 다 쓰면 글꼴이 늦게 와서 글자가 몇 % 넓어질 때 바로 잘립니다.
       12px 로 두어 실제 여유를 남깁니다(대체 글꼴에서도 잘리지 않습니다).
    */
    gap: var(--pd-space-3);
  }

  .pd-settings-bar__links { display: none; }
}


/* =========================================================
   「여는 중」 판 (`.pd-settings-open`)

   설정을 열 때 **이 문서 안에서** 아래에서 위로 올라오는 판입니다.
   왜 브라우저의 문서 간 전환이 아니라 이것인지는
   `Views/Shared/_MedicationSettingsBar.cshtml` 머리에 적었습니다.
   요약하면: 문서 간 전환은 새 문서가 도착한 **뒤에야** 움직이기 시작해서,
   누르고 나서 도착할 때까지가 통째로 멈춘 화면이 됩니다.

   판은 목적지를 그대로 흉내 냅니다 — 위 60px 은 진짜 `.studio-bar` 클래스로
   그린 어두운 윗줄이고, 아래는 목적지 작업 칸과 같은 바탕색입니다. 그래서
   페이지가 도착해 문서가 바뀌어도 **바뀌는 것은 가운데뿐**입니다.
   돌아가는 표시가 내용으로 바뀌는 것으로 보입니다.

   ── 어디에서 출발하는가 ────────────────────────────────────
   띠가 지금 있는 자리(좌우 · 둥근 모서리)에서 출발해 화면 폭 · 각진 모서리로
   벌어지며 올라옵니다. 그 출발 좌표는 스크립트가 띠를 재서
   `--pd-open-left` · `--pd-open-right` 로 넣습니다. `100vw` 를 쓰지 않는
   이유는 그 값이 스크롤바를 포함해 실제보다 넓기 때문입니다.
   ========================================================= */

.pd-settings-open {
  position: fixed;
  inset: 0;
  /* 헤더(1000)보다 위, 모달(1200)보다 아래. 이 판이 떠 있는 동안 화면에
     남아 있어야 할 것은 없습니다. */
  z-index: 1100;
  display: grid;
  grid-template-rows: var(--pd-studio-bar-h, 60px) minmax(0, 1fr);
  /*
     판은 **어두운 한 장**입니다 — 윗줄과 같은 색이라 둘 사이에 이음매가
     없습니다.

     한동안 아래쪽을 목적지 작업 칸과 같은 밝은 색(--pd-surface-sunken)으로
     뒀습니다. 도착한 화면과 똑같이 만들어 두면 문서가 바뀌는 순간이 안
     보인다는 계산이었는데, 정작 **올라오는 동안**이 어긋났습니다. 아래 띠는
     어두운 면이고 그 자리에서 올라오는 것이 밝은 종이라, 「띠가 커진다」가
     아니라 「띠 위로 흰 판이 올라온다」로 보입니다.

     어두운 한 장이면 띠가 그대로 자라 화면을 채우는 것으로 읽힙니다. 대신
     페이지가 도착할 때 가운데가 어두운 데서 밝은 데로 한 번 바뀌는데, 그건
     **내용이 도착한 것**이라 기다린 사람이 기대하는 변화입니다.
  */
  background-color: var(--pd-surface-inverted);
  overflow: hidden;
  overscroll-behavior: contain;

  /*
     평소에는 화면 밖에 접혀 있습니다. `visibility: hidden` 이라 눌리지도
     읽히지도 않습니다. `hidden` 특성이나 `display: none` 을 쓰지 않는 것은,
     그러면 애니메이션을 시작하기 전에 한 번 그려 줘야(reflow) 하기 때문입니다.
  */
  visibility: hidden;
  transform: translateY(100%);
}

.pd-settings-open.is-open {
  visibility: visible;
  /*
     `--pd-dur-slow` 를 그대로 씁니다. 모션을 줄이는 설정에서는 이 값이 1ms 라
     판이 즉시 제자리에 서고 바로 페이지를 부릅니다 — 움직임 없이 「여는 중」
     표시만 남습니다. 예전 문서 간 전환에서는 이 토큰이 닿지 않아 따로
     막아야 했는데, 평범한 요소가 되면서 저절로 맞습니다.
  */
  animation: pd-settings-open-up var(--pd-dur-slow) var(--pd-ease) forwards;
}

@keyframes pd-settings-open-up {
  from {
    transform: translateY(100%);
    left: var(--pd-open-left, 0px);
    right: var(--pd-open-right, 0px);
    /* 띠가 떠 있는 만큼 아래에서 띄워 출발합니다. 0 에서 출발하면 첫
       프레임이 띠보다 20px 아래에 그려져, 카드가 제자리에서 자라는 대신
       화면 끝에서 한 장이 더 올라오는 것으로 보입니다. */
    bottom: var(--pd-settings-bar-lift);
    /* 출발 모서리는 띠와 같습니다 — 넷 다 둥급니다. */
    border-radius: var(--pd-radius-lg);
  }
  to {
    transform: translateY(0);
    left: 0;
    right: 0;
    bottom: 0;
    border-radius: 0;
  }
}

/*
   기다리는 자리. 판이 다 올라온 **뒤에** 나타납니다 — 올라오는 도중에 같이
   떠 있으면 무엇이 움직이는지가 둘이 되어 어수선합니다.
*/
.pd-settings-open__wait {
  display: grid;
  place-items: center;
  align-content: center;
  gap: var(--pd-space-4);
  margin: 0;
  /* 어두운 바탕 위입니다. 흰색을 그대로 쓰면 가운데 글자가 윗줄 제목만큼
     세져서 어디를 봐야 하는지가 흐려집니다. */
  color: rgb(255 255 255 / 0.72);
  font-size: 14px;
  opacity: 0;
  animation: pd-settings-open-wait var(--pd-dur) var(--pd-ease) var(--pd-dur-slow) forwards;
}

@keyframes pd-settings-open-wait {
  to { opacity: 1; }
}

/*
   돌아가는 표시.

   자바스크립트로 돌리지 않습니다 — 페이지를 부른 뒤 브라우저가 이 문서의
   프레임을 아낄 수 있는데, 그때 멈추면 하필 이것만 남은 화면에서 멈춥니다.
   CSS 로 `transform` 만 돌리면 합성기가 계속 돌립니다.

   모션을 줄이는 설정에서도 돕니다. 이건 장식이 아니라 「아직 하는 중」이라는
   유일한 신호입니다.
*/
.pd-settings-open__spinner {
  width: 28px;
  height: 28px;
  /* 밝은 바탕이었을 때는 --pd-border 였습니다. 어두운 바탕에서는 그 회색이
     오히려 흰 고리로 보여, 도는 쪽(mint)보다 눈에 띕니다. */
  border: 3px solid rgb(255 255 255 / 0.18);
  border-top-color: var(--pd-accent);
  border-radius: 50%;
  animation: pd-settings-open-spin 700ms linear infinite;
}

@keyframes pd-settings-open-spin {
  to { transform: rotate(360deg); }
}
