/* hub_palette.css — 옴니바·커맨드 팰릿 스타일 정본 (2026-07-20 정적화)
   유래: hub_palette.js 내 PALETTE_CSS 런타임 주입 문자열을 실파일로 추출 — 옴니바 마크업 정적화와 짝.
   계약: ★단일 정본 — hub_palette.js 에는 CSS 문자열이 더 이상 없다(주입 폐지). 전 소비 페이지 head 에서
        <link href="./hub_palette.css?v=..."> 로 로드(★첫 페인트 전 적용 = 탑바 FOUC/점프 근절의 본체).
        링크 위치 = </head> 직전(구 런타임 주입이 head 말미 append 였던 캐스케이드 순서 보존).
   소비: hub_palette.js 로드 25페이지 전부(inbar 22 + index 인라인 + qid·study_drill float).
   변경 시: 본 파일만 수정 + 소비 페이지 ?v 일괄 bump(feedback_shared_file_css_cache_version_bump). */
/* ★어휘 예산(2026-09-13 design-pass §1-a) — 계약 5단(--fs-title/h3/body/caption)에 «배지 12px» 한 칸이
   더 붙는데 repo 에 12px 토큰이 없다. :root 에 새 전역 이름을 더하면 31페이지의 어휘가 늘므로
   컴포넌트 스코프에 가둔다. 여기 밖에서는 이 이름이 존재하지 않는다. */
.omni-zone,.omni-panel{--omni-badge:.75rem}
/* ===== 커맨드 팰릿 — omni-box 단일 노드를 scrim 위 중앙으로 승격(별도 컴포넌트·이중 state machine 없음) ===== */
.palette-scrim{position:fixed;inset:0;background:var(--scrim);z-index:var(--z-overlay);display:none}
.palette-scrim.on{display:block}
/* 팰릿 열림 = 배경 스크롤 락(뒤 페이지 스크롤 차단) · 패널 자체는 omni-panel max-height 내부 스크롤 */
/* ★실제 스크롤러는 html(문서) — body만 overflow:hidden 이면 뒤 페이지 휠 스크롤이 안 막힘 → html 도 잠금 */
html:has(body.palette-on){overflow:hidden}
body.palette-on{overflow:hidden}
body.palette-on .omni-zone{position:fixed;inset:0;z-index:var(--z-palette);background:none;border-bottom:0;padding:0;pointer-events:none;overflow:auto}
body.palette-on .omni-box{margin:9vh auto 0;width:min(640px,92vw);max-width:none;pointer-events:auto}/* 팰릿 포즈(구 inbar 절대중심 리셋은 전면 전환으로 소멸 2026-07-02) */
body.palette-on .omni-input{border-color:var(--ink)}
body.palette-on .omni-panel{position:static;margin-top:8px;max-height:min(64vh,560px);box-shadow:var(--shadow-2)}

/* ===== ① omnibox (Hero Discovery Spine) ===== */
.omni-zone{position:sticky;top:var(--topbar-h);z-index:var(--z-sticky,30);background:var(--surface);padding:var(--sp-3) var(--gutter) var(--sp-1)}/* 가로 구분선 제거 · 하단 갭 축소(콘텐츠가 박스 외곽선 바로 밑으로) 2026-06-28 */
.omni-zone.stuck .omni-input{box-shadow:0 14px 36px -2px rgba(16,24,40,.30)}/* 스크롤 고정 시 검색창 박스 그림자 — 넓고 진하게 */
@media (prefers-color-scheme:dark){:root:not([data-theme]) .omni-zone.stuck .omni-input{box-shadow:0 16px 40px 0 rgba(0,0,0,.9)}}
:root[data-theme="dark"] .omni-zone.stuck .omni-input{box-shadow:0 16px 40px 0 rgba(0,0,0,.9)}/* 다크: 검정 배경 위 가시성 확보 · 토글 미러(2026-07-18) */
.omni-box{position:relative;max-width:1108px;margin:0 auto}
.omni-input{position:relative;display:flex;align-items:center;gap:var(--inline-gap);background:var(--canvas);border:var(--hair) solid var(--line-strong);box-shadow:0 14px 36px -2px rgba(16,24,40,.30);/* 검색창 박스 자체 그림자 — 발산량=index stuck 동형 통일(2026-07-02) */
  border-radius:var(--r-md);padding:var(--sp-3) var(--sp-4);transition:box-shadow var(--dp-dur) var(--dp-ease),border-color var(--dp-dur) var(--dp-ease);--mark-blue:#5488CC}
.omni-input:focus-within{border-color:var(--ink)}
.omni-input input{flex:1;border:none;outline:none;background:none;font:inherit;font-size:var(--fs-lede);color:var(--ink);font-weight:var(--fw-med);caret-color:var(--brand-deep);min-width:0}/* 검색어=잉크·중간굵기, 캐럿만 민트(2026-06-29 ①안 — 과부하 해소·유채색 예산을 trail/캐럿에 집약) */
.omni-input input:focus-visible{box-shadow:none}/* 전역 :focus-visible 초록 ring 무력화 — 포커스 표시는 래퍼 navy 테두리가 담당 */
.omni-input input::placeholder{color:var(--ink-faint);font-weight:var(--fw-reg)}
/* 모바일 = 안내문구 잘림 방지(2026-07-12) — 문구는 짧은 쌍(OMNI_PH .m)으로, 폰트는 한 단 축소.
   입력 글자는 16px 미만이면 iOS 가 확대(zoom)하므로 본문(1rem) 유지 · placeholder 만 줄인다. */
@media (max-width:760px){
  .omni-input{padding:var(--sp-2) var(--sp-3)}
  /* ★2026-07-31 옴니 통합 3단계 — 모바일 입력 글자를 16px(1rem)에서 데스크톱과 같은 --fs-lede(18px)로 올렸다.
     구 값의 근거는 바로 윗줄 주석의 「16px 미만이면 iOS 가 확대한다」인데 그건 **하한**이지 권장값이 아니다.
     search·curiosity 는 이 규칙이 없어 줄곧 18px 이었고(2026-07-31 실측: index 16 / 두 페이지 18),
     통합하면서 16 으로 맞추면 두 페이지가 조용히 퇴행한다 → 큰 쪽으로 수렴. 학습자는 모바일에서
     조문번호·용어처럼 오타 확인이 필요한 짧은 문자열을 친다. 잘림은 placeholder 축소(아랫줄)가 이미 담당한다. */
  .omni-input input{font-size:var(--fs-lede)}
  .omni-input input::placeholder{font-size:var(--fs-caption)}
  /* 터치 타깃 — 구판은 이 규칙이 «모바일에만» 있어 데스크톱 행이 37px 이었다(2026-09-13 실측).
     44 는 기기가 아니라 손가락의 하한이라 base 로 승격했다(파일 말미 구조 블록) — 여기서는 삭제. */
  body.palette-on .omni-box{margin-top:2vh}/* 모바일 팰릿 = 상단 근접(키보드 위 가용고 확보) */
}
.omni-input .hint{display:none}/* 힌트 텍스트(↵이동·N선지·의미검색) 숨김 — [→] 버튼만 노출(2026-06-22) */
.omni-input input,.omni-panel{word-break:keep-all}/* 한국어 조판(§1-f) — 어절 중간 끊김 방지 */
/* ===== ①안 트레이드마크 — "그어지는 길(trail) + ㄴ 출발 닻(mark)" (2026-06-29) =====
   ★모션 1곡선(design-pass §1-h) «면제» — 이 트레일·런아웃·아래 CTA 모핑(.omni-go/#authSlot 스프링)은 상태 토글이 아니라
     승인된 «서명 모션»(2026-06-29 ①안 · 2026-07-02 모핑)이다. 곡선·시간이 곧 디자인이라 --dp 로 모으면 모티프가 죽는다.
     모션 감소 가드는 이 파일 말미의 컴포넌트 전역 두 벌(OS @media + html[data-motion])이 끈다 — hub_ui 를 안 싣는 qid 에서도. (2026-09-13 판정 — 다시 수렴 대상으로 올리지 말 것) */
.omni-input .omni-trail{position:absolute;left:46px;bottom:-1px;height:2px;width:24px;border-radius:var(--r-pill);background:var(--brand);transform-origin:left center;pointer-events:none;transition:width .26s cubic-bezier(.22,.61,.36,1),background .3s ease,transform .22s cubic-bezier(.7,0,.84,0),opacity .22s ease}/* B안: 글자 구간(46px)부터 씨앗24px→확장, 민트→초록 */
.omni-input:focus-within .omni-trail{width:calc(100% - 98px);background:var(--brand-deep)}
.omni-input.omni-fire .omni-trail{transform:translateX(60%) scaleX(.25);opacity:0;transition:transform .22s cubic-bezier(.7,0,.84,0),opacity .22s cubic-bezier(.7,0,.84,0)}/* Enter/[→] 런아웃 — goSearch()가 .omni-fire 부착 후 180ms 지연 이동(reduced-motion=즉시) */
.omni-input .omni-mark{position:absolute;left:-1px;bottom:-2px;width:52px;height:30px;pointer-events:none;z-index:2}/* 브랜드 vertical SVG ㄴ(M171 81 V161 H… stroke24) 비율 — 좌하단 출발 닻 */
.omni-input .omni-mark svg{width:100%;height:100%;overflow:visible}
.omni-input .omni-mark path{stroke:var(--ink-faint);fill:none;opacity:.92;transition:opacity var(--dp-dur) var(--dp-ease),stroke var(--dp-dur) var(--dp-ease)}/* 기본=회색(의미검색 off) */
.omni-input.sem-on .omni-mark path{stroke:var(--mark-blue)}/* 의미검색 작동 중 = 종전 브랜드 색 */
.omni-input:focus-within .omni-mark path{opacity:1}
.omni-input.loading .omni-mark path{stroke-dasharray:100 130;opacity:1;animation:omniMarkLoad 1.1s linear infinite}/* 검색 로딩 중 = ㄴ 마크 위를 흐르는 선(그어지는 길 모티프 계승) · dash는 발 길이(H320)에 맞춰 재보정 */
@keyframes omniMarkLoad{to{stroke-dashoffset:-230}}
@media (prefers-color-scheme:dark){:root:not([data-theme]) .omni-input{--mark-blue:#6FA0E0;box-shadow:0 16px 40px 0 rgba(0,0,0,.9)}}
:root[data-theme="dark"] .omni-input{--mark-blue:#6FA0E0;box-shadow:0 16px 40px 0 rgba(0,0,0,.9)}/* 다크 발산량=index stuck 동형 · 토글 미러(2026-07-18) — 로고 SVG 파일 불변, UI 파생 마크만 */
@media (prefers-reduced-motion:reduce){.omni-input .omni-trail{transition:none}.omni-input.loading .omni-mark path{animation:none;stroke-dasharray:none}}
.omni-panel{position:absolute;left:0;right:0;top:calc(100% + 4px);max-height:min(70vh,640px);overflow-y:auto;overscroll-behavior:contain;z-index:35;/* contain=패널 스크롤 끝나도 배경 문서로 체이닝 금지(인라인 모드는 body 잠금이 없다 · 2026-07-15) */
  background:var(--canvas);border:var(--hair) solid var(--line-strong);border-radius:var(--r-md);box-shadow:var(--shadow-2);padding:var(--card-pad) 0;display:none}
.omni-panel.open{display:block}
/* iOS 주소창 포함 vh → 키보드/툴바에 패널 하단 잘림 — dvh 지원 브라우저는 동적 뷰포트 기준(2026-07-15).
   ★반드시 .omni-panel base 규칙 뒤에(동일 명시도 후행 우선 — 앞에 두면 vh 가 dvh 를 되덮음) */
@supports (height:1dvh){
  .omni-panel{max-height:min(70dvh,640px)}
  body.palette-on .omni-panel{max-height:min(64dvh,560px)}
}
/* ★스크롤 그림자(2026-07-31) — 패널은 max-height 로 잘리는데 "아래 더 있음" 신호가 없었다(모바일 390 실측:
   메뉴 6그룹 중 2그룹째에서 잘림·표시 0). background-attachment local/scroll 조합 = 내용이 실제로 넘칠 때만
   그림자가 보이고 끝까지 스크롤하면 사라진다(JS 0·상태 0). 위 base 규칙의 `background:` 단축형이 image 를
   비우므로 **반드시 그 뒤에** 롱핸드로 얹는다. 표·코드가 아니라 단색 패널이라 페이드 금지 축(3-H)과 무관. */
.omni-panel{
  background-image:
    linear-gradient(to bottom, var(--canvas) 45%, rgba(0,0,0,0)),
    linear-gradient(to top,    var(--canvas) 45%, rgba(0,0,0,0)),
    radial-gradient(farthest-side at 50% 0,    rgba(16,24,40,.13), rgba(16,24,40,0)),
    radial-gradient(farthest-side at 50% 100%, rgba(16,24,40,.13), rgba(16,24,40,0));
  background-repeat:no-repeat;
  background-size:100% 30px, 100% 30px, 100% 12px, 100% 12px;
  background-position:top, bottom, top, bottom;
  background-attachment:local, local, scroll, scroll;
}
/* 다크 짝(2026-07-31 실촬영 보강) — 어두운 잉크 그림자는 딥 배경에서 거의 안 보여 신호가 죽는다.
   ★OS 자동 + 토글 강제 두 선택자 모두 필요(테마 토글 미러 규약 — 한쪽만 쓰면 다른 경로에서 안 먹는다). */
@media (prefers-color-scheme:dark){
  :root:not([data-theme]) .omni-panel{background-image:
    linear-gradient(to bottom, var(--canvas) 45%, rgba(0,0,0,0)),
    linear-gradient(to top,    var(--canvas) 45%, rgba(0,0,0,0)),
    radial-gradient(farthest-side at 50% 0,    rgba(255,255,255,.16), rgba(255,255,255,0)),
    radial-gradient(farthest-side at 50% 100%, rgba(255,255,255,.16), rgba(255,255,255,0))}
}
:root[data-theme=dark] .omni-panel{background-image:
  linear-gradient(to bottom, var(--canvas) 45%, rgba(0,0,0,0)),
  linear-gradient(to top,    var(--canvas) 45%, rgba(0,0,0,0)),
  radial-gradient(farthest-side at 50% 0,    rgba(255,255,255,.16), rgba(255,255,255,0)),
  radial-gradient(farthest-side at 50% 100%, rgba(255,255,255,.16), rgba(255,255,255,0))}
/* 단축키 안내(2026-07-31) — 구판은 #omniHint 가 유일한 키 고지였는데 그 자리가 2026-06-22 부터
   `display:none` 이라 ⌘K·/ 를 **어디에도 알리지 않았다**(omni_dropdown_navigator.md:94 는 그 자리에 넣지
   말라고만 했지 대체처를 안 줬다). 물리 키보드 있는 환경에만 노출 — 터치 전용 기기엔 무의미. */
.pal-kbd{display:none}
@media (hover:hover) and (pointer:fine){
  .pal-kbd{display:block;margin-top:var(--block-gap);padding-top:0;border-top:0;
    font-size:var(--fs-caption);color:var(--ink-faint);text-align:center}
  .pal-kbd kbd{font-family:var(--font-mono);font-size:var(--omni-badge);background:var(--surface-sunken);
    border:var(--hair) solid var(--line);border-radius:var(--r-xs);padding:.15em .55em;color:var(--ink-muted)}
}
.facet-lab{font-size:var(--fs-caption);font-weight:var(--fw-bold);color:var(--ink-muted);margin:var(--sp-3) 0 var(--label-gap)}
.facet-lab:first-child{margin-top:0}
/* ★.omni-panel 스코프 필수(2026-07-10) — 무스코프 .chips/.chip 이 페이지 자체 칩(amend_news #subjChips flex-wrap 등)을 덮은 충돌.
   .row 동류 사고(2026-07-08 · :143)와 동일 처방: 주입 CSS 일반명은 컨테이너 스코프. */
.omni-panel .chips{display:flex;gap:var(--inline-gap);flex-wrap:wrap}
.omni-panel .chip{border:1px solid var(--line);background:var(--canvas);border-radius:var(--r-pill);padding:4px 12px;min-height:38px;font-size:var(--fs-caption);color:var(--ink-muted)} /* W3-4 탭 타깃 38px */
.omni-panel .chip:hover{border-color:var(--brand-deep);color:var(--ink)}
.omni-panel .chip.on{background:var(--ink);color:var(--canvas);border-color:var(--ink)}
.omni-panel .chip .n{font-family:var(--font-mono);font-size:var(--omni-badge);opacity:.75;margin-left:var(--tight-gap)}
.omni-panel .chip-more{margin-top:var(--sp-1)}
.omni-panel .chip-more>summary{cursor:pointer;font-size:var(--fs-caption);color:var(--ink-faint);list-style:none}
.omni-panel .chip-more>summary::-webkit-details-marker{display:none}
.omni-panel .chip-more>summary:hover{color:var(--ink)}
.omni-panel .chip-more[open]>summary{margin-bottom:var(--sp-1)}
.yr-row{display:flex;align-items:center;gap:var(--block-gap);font-size:var(--fs-caption);color:var(--ink-muted)}
.yr-row input[type=range]{flex:1;accent-color:var(--brand-deep)}
.yr-row .yv{font-family:var(--font-mono);min-width:84px;text-align:center;color:var(--ink)}
.tgl{display:inline-flex;align-items:center;gap:var(--tight-gap);font-size:var(--fs-caption);color:var(--ink-muted);cursor:pointer}
.tgl input{accent-color:var(--brand-deep)}
.grp{margin-top:var(--sp-4)}
.grp:first-child{margin-top:0}
.grp h4{font-size:var(--fs-caption);font-weight:var(--fw-bold);color:var(--ink-muted);text-transform:uppercase;letter-spacing:.04em;
  padding-bottom:var(--sp-1);border-bottom:1px solid var(--line);margin-bottom:var(--sp-2)}
.grp h4 .n{font-family:var(--font-mono);font-weight:var(--fw-reg)}
.grp h4{display:flex;align-items:baseline;gap:var(--label-gap)}
.grp h4 .grp-ic{flex:0 0 auto;font-size:var(--fs-caption);line-height:1;color:var(--brand-deep);position:relative;top:1px}/* 카테고리 선행 아이콘(pal-menu 전용) — 광학 정렬 top:1px */
.norm-note{font-size:var(--fs-caption);color:var(--ink-muted);margin-bottom:var(--sp-2)}
.norm-note b{color:var(--ink);font-weight:var(--fw-med)}
/* ── 드랍다운 재편(2026-07-02): 이해줄 · 간소 문항/바로가기 한 줄 · footer ──
   ★2026-09-13 청소: facet 계층(.facet-bar/.filter-toggle/.facet-collapse)·의도 띠(.intent-strip)·
     조문 행(.amd-art-*)·그룹 전체보기(.grp-all) 16선언 제거 — public/ 전수 grep 발행 0건.
     facet UI 는 2026-07-09/07-31 에 search 워크벤치로 이관되며 호출 코드가 지워졌는데 CSS 만 남아 있었다. */
.omni-und{font-size:var(--fs-caption);color:var(--ink-muted);line-height:1.55;padding:2px 2px 8px;margin-bottom:var(--sp-2);border-bottom:1px solid var(--line)}
.omni-und b{color:var(--ink);font-weight:var(--fw-med)}
.omni-und .und-link{color:var(--brand-deep);font-weight:var(--fw-med)}
.omni-und .und-sep{color:var(--ink-faint);margin:0 var(--tight-gap)}
.q-row .body,.nav-row .body{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.q-row .meta,.nav-row .meta{font-family:var(--font-body);padding-top:1px}
.q-row .m-qn{display:inline-block;min-width:2.5em;text-align:right}/* 문항번호 고정폭 우측정렬 — 1↔2자릿수(4번↔42번) body 밀림 봉합(2026-07-03) */
.q-subj{font-size:var(--omni-badge);font-weight:var(--fw-med);color:var(--ink-muted);letter-spacing:.02em;padding:8px 2px 2px}/* 기출 문항 과목 소제목(그룹화 2026-07-03) */
.grp>.q-subj:first-of-type{padding-top:2px}/* 첫 과목 상단여백 축소 */
.omni-foot{display:flex;align-items:center;gap:var(--inline-gap);flex-wrap:wrap;margin-top:var(--block-gap);padding-top:var(--block-gap);border-top:var(--hair) solid var(--line)}
.omni-foot .of-all{display:inline-flex;align-items:center;min-height:var(--row-h);box-sizing:border-box;font-size:var(--fs-caption);font-weight:var(--fw-med);color:var(--on-brand-deep);background:var(--brand-deep);border-radius:var(--r-pill);padding:.7em 1.1em;white-space:nowrap}
.omni-foot .of-all:hover{filter:brightness(1.08)}
.omni-foot .of-intent{display:inline-flex;align-items:center;min-height:var(--row-h);box-sizing:border-box;font-size:var(--fs-caption);font-weight:var(--fw-med);color:var(--color-correct);background:var(--color-correct-bg);border:var(--hair) solid var(--color-correct-bg);border-radius:var(--r-pill);padding:.5em .9em;white-space:nowrap}
.omni-foot .of-intent b{font-family:var(--font-mono)}
.omni-foot .of-intent:hover{border-color:var(--color-correct)}
.omni-panel .row{display:flex;gap:var(--sp-3);align-items:flex-start;padding:var(--sp-2) var(--sp-2);border-radius:var(--r-sm);cursor:pointer}/* ★.omni-panel 스코프 필수 — 무스코프 .row 가 페이지 자체 .row(amend_news 그리드행 등) display 를 덮은 충돌(2026-07-08) */
.omni-panel .row:hover{background:var(--surface-sunken)}
.omni-panel .row .meta{font-family:var(--font-mono);font-size:var(--omni-badge);color:var(--ink-faint);flex:0 0 auto;padding-top:3px;white-space:nowrap}
.omni-panel .row .body{font-size:var(--fs-caption);line-height:1.55;color:var(--ink)}
.omni-panel .row .body .dim{color:var(--ink-muted)}
.sem-b{font-family:var(--font-mono);font-size:var(--omni-badge);color:var(--color-brand-cite);border:1px solid currentColor;
  border-radius:var(--r-pill);padding:.15em .55em;margin-top:2px;white-space:nowrap;flex:0 0 auto}
.sem-b.flip-b{color:var(--color-warn);font-family:var(--font-body);font-weight:var(--fw-med)}
/* 자연어 의도 확인 카드 (omni 기둥⑥ · 2026-06-28 · NomuVerbs.intentCard) */
.intent-card{border:1px solid var(--brand-deep);background:var(--surface-sunken);border-radius:var(--r-md);padding:var(--sp-3);margin-bottom:var(--sp-3)}
.intent-card .ic-lab{font-size:var(--fs-caption);color:var(--ink-muted);margin-bottom:var(--sp-2);font-weight:var(--fw-med)}
.intent-card .ic-main{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}
.intent-card .ic-tags{display:flex;gap:var(--tight-gap);flex-wrap:wrap}
.intent-card .ic-tag{font-size:var(--fs-caption);background:var(--canvas);border:var(--hair) solid var(--line);border-radius:var(--r-pill);padding:.35em .75em;color:var(--ink)}
.intent-card .ic-edit-hint{color:var(--ink-faint);font-weight:var(--fw-reg)}
.intent-card button.ic-tag{appearance:none;-webkit-appearance:none;font-family:inherit;cursor:pointer;display:inline-flex;align-items:center;gap:var(--tight-gap);line-height:1.45}
.intent-card .ic-tag-rm .ic-x{color:var(--ink-faint);font-size:var(--omni-badge);line-height:1}
.intent-card .ic-tag-rm:hover{border-color:var(--brand-deep)}
.intent-card .ic-tag-rm:hover .ic-x{color:var(--brand-deep)}
.intent-card .ic-tag-add{border-color:var(--ink-faint);background:transparent;color:var(--ink-muted)}/* 점선→solid: _tokens.css 머리말 「점선 폐기·solid 1px 전용」 */
.intent-card .ic-tag-add .ic-plus{color:var(--brand-deep);font-size:var(--fs-caption);line-height:1}
.intent-card .ic-tag-add:hover{color:var(--ink);border-color:var(--brand-deep)}
.intent-card.ic-busy{opacity:.55;pointer-events:none}
.intent-card .ic-count{font-family:var(--font-mono);font-size:var(--fs-caption);color:var(--ink-muted)}
.intent-card .ic-main>.ic-go:first-of-type{margin-left:auto}
.intent-card .ic-modes{flex-basis:100%;display:flex;gap:var(--tight-gap);flex-wrap:wrap;margin-top:2px}
.intent-card .ic-alts{display:flex;gap:var(--inline-gap);flex-wrap:wrap;align-items:center}
.intent-card .ic-alt{font-size:var(--fs-caption);color:var(--brand-deep);text-decoration:none}
.intent-card .ic-alt:hover{text-decoration:underline}
.intent-card .ic-relax{font-size:var(--fs-caption);color:var(--ink-faint);margin-top:var(--sp-2)}
/* 결과 행동 카드 + 동사 칩 (omni 동선 혁신 기둥①④ · 2026-06-28 · NomuVerbs 정본) */
.res-card{padding:var(--sp-2);border-radius:var(--r-sm)}
.res-card:hover{background:var(--surface-sunken)}
.res-card+.res-card{margin-top:2px}
.res-card .rc-head{display:flex;align-items:baseline;gap:var(--sp-2);flex-wrap:wrap}
.res-card .rc-meta{font-family:var(--font-mono);font-size:var(--omni-badge);color:var(--ink-faint);white-space:nowrap}
.res-card .rc-body{font-size:var(--fs-caption);line-height:1.55;color:var(--ink);margin:2px 0 var(--sp-1)}
.res-card .rc-body .dim{color:var(--ink-muted)}
.res-verbs{display:flex;gap:var(--tight-gap);flex-wrap:wrap;margin-top:var(--tight-gap)}
.vchip{display:inline-flex;align-items:center;gap:var(--tight-gap);box-sizing:border-box;height:var(--bdg-h-m);padding:0 var(--bdg-px-m);border-radius:var(--r-pill);font-size:var(--fs-caption);line-height:1;font-weight:var(--fw-med);white-space:nowrap;border:var(--hair) solid var(--line)}/* 배지 M 티어 정본(2026-07-12) — 구 min-height:32 (search 는 28) 불일치 해소 */
.vchip-primary{background:var(--color-correct-bg);color:var(--color-correct);border-color:var(--color-correct-bg)}/* 톤다운(2026-07-02) — solid brand-deep 필이 결과 텍스트와 시선경쟁 → 연한 그린 소프트필(correct 토큰 재사용·curiosity .ccta 동형) */
.vchip-primary:hover{border-color:var(--color-correct)}
.vchip-ghost{background:var(--canvas);color:var(--ink-muted)}
.vchip-ghost:hover{border-color:var(--brand-deep);color:var(--ink)}
.vchip-gated{opacity:.92}
/* term-card/art-chip 골격 = hub_ui.css 합류(D-1 보류분) — 본 페이지 변형: 버튼형 칩 커서만 */
.art-chip{cursor:pointer}

/* === hub_palette 추가: 서브페이지 떠있는 omni(숨김·팰릿 전용) + 탑바 [⌕] 트리거 === */
/* 링크 리셋 — hub_ui 미로드 페이지(study_drill·census 등)서 기본 밑줄·파랑 누출 차단(팰릿 범위 한정) */
/* :where() = 명시도 0 — vchip/is-all 등 자체 배경색 버튼 클래스가 항상 이겨야 함(과거 :not() 은 인자만큼 명시도를 더해 역전 유발) */
:where(.omni-zone, .omni-panel) a,.palette-trigger{color:inherit;text-decoration:none}
/* 최근 검색 칩 (옴니 빈 상태 · 클릭=재검색) + 최근 열람 칩(.rp-chip=내비 링크 · 클래스 분리=재검색 핸들러 오발 방지 2026-07-15) */
.rsch-wrap{display:flex;flex-wrap:wrap;gap:var(--tight-gap);padding:2px var(--row-px)}
.rsch-chip,.rp-chip{display:inline-flex;align-items:center;gap:var(--tight-gap);max-width:100%;padding:.35em .75em;border:var(--hair) solid var(--line);border-radius:var(--r-pill);background:var(--canvas);color:var(--ink-muted);font-size:var(--fs-caption);cursor:pointer}
.rsch-chip:hover,.rp-chip:hover{border-color:var(--brand-deep);color:var(--ink)}
.rsch-chip .fi,.rp-chip .fi{font-size:var(--ic-sm);opacity:.7}
/* 메뉴 멀티컬럼(2026-07-15) — columns=그룹 세로흐름 유지 masonry(그리드 행높이 불균형 회피) · 폭따라 1~2열 자동(250px 미만=1열) */
.pal-menu{columns:2 250px;column-gap:var(--sp-5);margin-top:var(--zone-gap)}/* 앞 「빠른 동작」 grp 과의 여백 = 여타 섹션(--sp-4)보다 조금 더(--sp-6) — 구분선 없이 여백만으로 메뉴 존 구획(2026-07-18) */
.pal-menu .grp{break-inside:avoid}
.rsch-clear{margin-left:var(--inline-gap);border:none;background:none;color:var(--ink-faint);font-size:var(--fs-caption);text-decoration:underline;cursor:pointer;padding:0}
.rsch-clear:hover{color:var(--ink-muted)}
/* .fi 아이콘 = icons.css 단일정본(2026-06-30 통일) — 주입 정의 폐지(전 페이지 icons.css 링크) */
/* 메뉴 행 [+] 핀 — 상시 노출(연하게) · 홈 #desks 개인 고정 토글.
   ★2026-07-12: 구판 hover-reveal(opacity 0→1)은 스크롤/재렌더 시 호버 상태가 갱신되지 않아 [+] 잔상이 남았다.
   상시 노출(기본 .45 → 호버/고정 1)로 전환 = 숨김 상태 자체를 제거해 잔상 원천 차단 + 발견성 개선. */
.navrow{position:relative;display:flex;align-items:center;gap:0}
.omni-panel .navrow>.row{flex:1;min-width:0}
/* 상한(PINS_CAP개) 말풍선 — 상한 초과 추가 시도 시 [+] 왼쪽에 뜨는 안내(2.6초 자동 소멸).
   테마 = 토큰만(하드코딩 0) — 표면=canvas 에 brand 살짝 틴트 · 테두리/꼬리=brand-deep · 글자=ink → 라이트/다크 자동 대응.
   꼬리 = 45° 회전 정사각(배경·테두리 모두 상속 → 다크에서 삼각형만 색 어긋나는 문제 없음). */
.pin-cap{position:absolute;right:36px;top:50%;transform:translateY(-50%);z-index:3;white-space:nowrap;pointer-events:none;
  padding:.5em .9em;border-radius:var(--r-sm);font-size:var(--fs-caption);font-weight:var(--fw-med);line-height:1.45;
  background:color-mix(in srgb, var(--brand-deep) 8%, var(--canvas));color:var(--ink);
  border:1px solid var(--brand-deep);box-shadow:var(--shadow-2);animation:pinCapIn .16s cubic-bezier(.22,.61,.36,1)}
.pin-cap::after{content:"";position:absolute;right:-5px;top:50%;width:8px;height:8px;transform:translateY(-50%) rotate(45deg);
  background:color-mix(in srgb, var(--brand-deep) 8%, var(--canvas));border-top:1px solid var(--brand-deep);border-right:1px solid var(--brand-deep)}
@keyframes pinCapIn{from{opacity:0;transform:translate(6px,-50%)}to{opacity:1;transform:translate(0,-50%)}}
@media (prefers-reduced-motion:reduce){.pin-cap{animation:none}}
@media (max-width:760px){.pin-cap{white-space:normal;max-width:62vw;right:34px}}
.pin-btn{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;
  border:1px solid transparent;border-radius:var(--r-sm);background:transparent;color:var(--ink-faint);cursor:pointer;
  opacity:.45;transition:opacity var(--dp-dur) var(--dp-ease),color var(--dp-dur) var(--dp-ease),background-color var(--dp-dur) var(--dp-ease)}
.navrow:hover .pin-btn,.pin-btn:focus-visible,.pin-btn.on{opacity:1}
.pin-btn:hover{background:var(--surface-sunken);color:var(--brand-deep)}
.pin-btn.on{color:var(--brand-deep)}
.pin-btn .fi{font-size:var(--ic-sm)}
/* 검색 실행 [→] 버튼 — CTA 슬롯 안. 클릭=Enter 와 동일(검색 결과 페이지 이동) */
.omni-go{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border:0;
  border-radius:var(--r-sm);background:var(--brand-deep);color:var(--on-brand-deep);cursor:pointer;padding:0;position:relative}
.omni-go::after{content:"";position:absolute;inset:-5px}/* 시각 34 유지 + 히트 44 · 입력칸 상하 패딩(12) 안 · 유휴(pointer-events:none)에서는 확장도 함께 꺼진다 · 2026-09-13 */
.omni-go:hover{filter:brightness(1.08)}
.omni-go .fi{font-size:var(--ic-md)}
/* ===== CTA 슬롯(2026-07-02 승인 · 모핑축=포커스/패널 열림) — 유휴=계정/로그인 원(#authSlot·auth.js) · 열림=[→].
   진짜 패스 모핑: 유휴 [→]는 원 테두리(반원 2획·d:path) 상태로 접혀 있고, 열리면 획이 화살표(샤프트+살)로 전개
   + 컨테이너 원→둥근사각(border-radius). d 미지원 브라우저 = SVG 속성값(화살표)이 최종형 → 모핑만 생략(상태 정확).
   계정 원 미마운트(:has 불일치 — float 바·auth off)면 [→] 상시(구 동작 보존). ===== */
.omni-cta{position:relative;display:grid;place-items:center;flex:0 0 auto;width:34px;height:34px}
.omni-cta>*{grid-area:1/1}
.omni-cta #authSlot{transition:opacity .14s ease,transform .26s cubic-bezier(.3,1.36,.4,1)}
.omni-cta .omni-go{transition:opacity .14s ease,transform .26s cubic-bezier(.3,1.36,.4,1),border-radius .3s cubic-bezier(.3,1.2,.4,1)}
.omni-go .go-morph{width:20px;height:20px;display:block}
.omni-go .go-morph path{stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;transition:d .32s cubic-bezier(.3,1.2,.4,1)}
.omni-box:not(:has(.omni-panel.open)) .omni-cta:has(#authSlot) .omni-go{opacity:0;transform:scale(.8);border-radius:50%;pointer-events:none}
.omni-box:not(:has(.omni-panel.open)) .omni-cta:has(#authSlot) .omni-go .mA{d:path("M5 12 C5 8.13 8.13 5 12 5 C15.87 5 19 8.13 19 12")}
.omni-box:not(:has(.omni-panel.open)) .omni-cta:has(#authSlot) .omni-go .mB{d:path("M5 12 C5 15.87 8.13 19 12 19 C15.87 19 19 15.87 19 12")}
.omni-box:has(.omni-panel.open) .omni-cta #authSlot{opacity:0;transform:scale(.62);pointer-events:none}
.omni-zone.omni-float{display:none;border-bottom:0}
body.palette-on .omni-zone.omni-float{display:block}
/* ===== 전면 검색창 단일 헤더(2026-07-02 전면 전환) — 탑바=검색창 전부(index 문법). back/h1 은 주입기가 .page-crumb 강등 · 모바일도 상주(⌕ 은퇴) ===== */
.topbar .omni-zone{position:static;flex:1;min-width:0;padding:0;background:none}/* 주입 정본 sticky+패딩의 헤더 내부 변형 — 폭 = 기본 .omni-box(1108 중앙) */
/* 상하 breathing = index 문법 완전 동형(8px · 2026-07-02 사용자) — 실높이 76(바60+8×2) → sticky 오프셋 소비자(.fbar·.subject-tabbar·scroll-margin) 변수 동기 */
.topbar:has(.omni-zone.omni-inbar){height:auto;min-height:var(--topbar-h);padding-top:8px;padding-bottom:0}/* 그림자=박스(.omni-input) 자체 · 하단 패딩 0=콘텐츠가 박스선 바로 밑으로(2026-07-02) — index 인라인·search/curiosity 로컬과 동기 */
body:has(.topbar .omni-zone.omni-inbar){--topbar-h:68px}/* 바60+상8·하0(2026-07-02 갭 제거) */
/* 로고 = 돋보기 자리(유휴) · 패널 열리면 왼쪽 슬라이드 아웃 + 돋보기 등장(자연폭·여백 0 — 닫기=Esc/바깥클릭) */
.omni-brand{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:46px;max-width:46px;overflow:hidden;
  transition:max-width var(--dp-dur) var(--dp-ease),opacity var(--dp-dur) var(--dp-ease),transform var(--dp-dur) var(--dp-ease),margin-right var(--dp-dur) var(--dp-ease)}
/* 로고 = 인라인 SVG 1장(2026-07-18 전환). 구 방식(라이트/다크 img 2장 display 스왑)은 (1) 두 로고 겹침 (2) SVG-as-img 마스크 콜드로드시 ㄹ 구멍 미렌더 두 결함이 있어 인라인화. 박스(ㅁ)색만 테마 전환·ㄴ은 양테마 #5488cc 고정. */
.omni-brand .nlogo{height:22px;width:auto;display:block}
:root{--nlogo-box:#3a4150}/* ㅁ 박스 라이트=짙은회 · 다크=크림. 미러 규약(@media:not([data-theme]) + [data-theme=dark]) */
@media(prefers-color-scheme:dark){:root:not([data-theme]){--nlogo-box:#c4bdb0}}
:root[data-theme="dark"]{--nlogo-box:#c4bdb0}
.omni-mag{flex:0 0 auto;display:none;align-items:center;color:var(--ink-faint);font-size:var(--ic-md);pointer-events:none}/* 장식 — 클릭은 label 통과=입력 포커스 */
@keyframes omniMagIn{from{opacity:0;transform:translateX(8px)}to{opacity:1;transform:none}}
/* 접힌 로고(폭 0)가 flex 항목으로 남아 gap 8px 유령 잔존 → 음수 마진으로 상쇄(돋보기=입력 패딩 위치 밀착 · 2026-07-02) */
.omni-box:has(.omni-panel.open) .omni-brand{max-width:0;opacity:0;transform:translateX(-10px);margin-right:calc(-1 * var(--sp-2))}
.omni-box:has(.omni-panel.open) .omni-mag{display:inline-flex;animation:omniMagIn .2s ease}
/* 유휴 = 로고가 브랜드 앵커 → ㄴ마크·트레일 숨김(이중 브랜드 회피) · 열림 상태 무개입(트레일 런아웃 .omni-fire 보존) */
.omni-box:not(:has(.omni-panel.open)) .omni-mark,
.omni-box:not(:has(.omni-panel.open)) .omni-trail{opacity:0}
@media (prefers-reduced-motion:reduce){.omni-brand{transition:none}}
/* 전면 전환(2026-07-02): ≤880 은닉·⌕ 승격 분기 폐기 — inbar 페이지는 ⌕ 미주입(주입기 canInbar 분기), 바가 전 뷰포트 상주 */
a.omni-brand{align-self:stretch}/* 로고=홈 링크(🏠 back 은퇴 대체) — 히트영역을 바 높이로 */
.topbar .topbar-actions:empty{display:none!important}/* 계정원 CTA 이주 후 빈 껍데기가 flex gap 12px 유령으로 남는 레이스 가드 — !important=auth.js 인라인 display:flex 상쇄(2026-07-02) */
.page-crumb{display:flex;align-items:center;gap:var(--inline-gap);width:100%;max-width:1108px;margin:0 auto;padding:var(--sp-3) var(--gutter) 0;color:var(--ink-muted)}/* 탑바 잔존물(타이틀·스탬프) 강등 위치줄 — 비고정(스크롤 시 퇴장) · width:100%=flex-column body(study_drill)에서 auto 마진 수축 가드 */
.page-crumb h1{font-size:var(--fs-caption);font-weight:var(--fw-med);color:inherit;margin:0}
/* 페이지 lede — hub_ui.css .page-lede 와 동일 3규칙(hub_ui 미링크 inbar 페이지 폴백: amend_*·census_home·coordinator·study_drill). 변경 시 양쪽 동기(2026-07-02). */
.page-lede{margin:0 0 var(--sp-4);padding:0}
.page-lede h1,.page-lede .pl-main{font-size:var(--fs-title);font-weight:var(--fw-bold);color:var(--ink);line-height:1.45;margin:0}
.page-lede .pl-sub{font-size:var(--fs-body);color:var(--ink-muted);line-height:1.55;margin:var(--tight-gap) 0 0}
html[data-lede="hide"] .page-lede .pl-sub{display:none}/* 부제 숨김 토글 폴백 — hub_ui.css 미러(2026-07-18) */
.palette-trigger{display:inline-flex;align-items:center;gap:var(--tight-gap);height:var(--bdg-h-l);padding:0 var(--bdg-px-l);border:var(--hair) solid var(--line);border-radius:var(--r-sm);background:var(--canvas);color:var(--ink-muted);font-size:var(--fs-caption);font-weight:var(--fw-med);line-height:1;cursor:pointer}/* margin-left:auto 제거 — .topbar-actions 가 정렬 전담(2026-06-27) */
.palette-trigger:hover{background:var(--surface-sunken);color:var(--ink)}
@media(max-width:560px){.palette-trigger .pt-lab{display:none}.palette-trigger{padding:0 12px;font-size:var(--ic-md)}}
.term-card{border:var(--hair) solid var(--line);border-radius:var(--r-sm);padding:var(--sp-3);margin-bottom:var(--label-gap)}
.term-card .tt{font-weight:var(--fw-bold)}.term-card .syn{font-size:var(--fs-caption);color:var(--ink-muted);margin:2px 0 var(--sp-2)}
.term-card .def{font-size:var(--fs-caption);line-height:1.55;color:var(--ink)}.term-card .arts{display:flex;gap:var(--tight-gap);flex-wrap:wrap;margin-top:var(--label-gap)}


/* ═══════════════════ 드롭다운 구조 재편 (2026-09-13 · design-pass 4단계) ═══════════════════
   진단(1280 실촬영·프로브): 패널은 1108px 폭인데 내용은 왼쪽 ~300px 에만 있었다. 행이 «내용 폭»이라
     ① 호버 바닥이 글자 뒤에서 끊기고 ② 메뉴 행의 [+] 핀이 500px 떨어진 오른쪽 끝에 붕 떠 있으며
     ③ 결과 상태(2행)에서는 오른쪽 3분의 2가 통째로 죽은 여백이었다.
   처방 = 행을 «면»으로 만든다. 행이 패널 전폭을 쓰고, 뒤따르는 것(종류 태그·핀)은 그 면의 오른쪽 끝에 산다.
   ★오너 확정 계약 3건을 하나도 안 건드린다(docs/reference/omni_dropdown_navigator.md):
     ① B안 순수화 — 드롭다운=네비게이터. 접기류(details/탭) 0.
     ② C안 기각 — 배경 블록으로 감싸기 0. 여기서 더하는 것은 «행의 해부»뿐이고 새 면은 안 만든다.
     ③ 「여백만으로 구획」(2026-07-18) — 오히려 이 방향으로 더 갔다(그룹 헤더 밑줄 제거).
   ★파일 «말미»에 두는 이유 = 해제·재배치 규칙이 위쪽 기본 규칙과 특이도 동률이라 순서로 이겨야 한다
     (design-pass §3-C ⑥ⓐ). 레이아웃 축(칸 비율·폭·방향)은 안 건드리므로 @media 를 순서로 이기지 않는다. */

/* ① 좌우 패딩을 패널에서 «행»으로 이관 — 그래야 호버·선택 바닥이 가장자리까지 닿는다.
      직계 자식은 전부 같은 들여쓰기를 받아야 한다(§3-C ② 「여백을 못 받는 자식」 예방). */
.omni-panel>*{padding-left:var(--row-px);padding-right:var(--row-px)}
.omni-panel .grp,.omni-panel .pal-menu{padding-left:0;padding-right:0}   /* 행이 직접 준다 */
.omni-panel{--row-py:var(--sp-3)}
/* ★--row-py 를 배정표 기본(16)이 아니라 12 로 둔 이유: 이 패널은 max-height 640 안에 메뉴 27행을
   담는다. 16 이면 행 54px×14(2열) = 750px 로 첫 화면에서 두 그룹이 잘린다. 12 면 46px 로 터치
   하한 44 를 넘기면서 640 에 들어온다 — 하한을 지키는 선에서 가장 촘촘한 값이다. */

/* ② 행 = 면. 전폭·터치 44·뒤따르는 것은 오른쪽 끝 */
.omni-panel .row{position:relative;width:100%;box-sizing:border-box;
  padding:var(--row-py) var(--row-px);min-height:var(--row-h);border-radius:0;
  gap:var(--block-gap);transition:background-color var(--dp-dur) var(--dp-ease)}
.omni-panel .row .body{flex:1 1 auto;min-width:0}
.omni-panel .navrow{width:100%}
.omni-panel .navrow>.row{width:auto}                         /* 핀과 한 행을 나눠 쓴다 */
.omni-panel .navrow:hover{background:var(--surface-sunken)}  /* 행과 [+] 가 «한 덩어리»로 밝아진다 */
.omni-panel .navrow:hover>.row{background:none}
.pin-btn{margin-right:var(--row-px)}

/* ③ 종류 태그(용어·조문·소주제·기출·페이지)를 오른쪽 끝으로 + 색면 해제.
   ★2026-07-15 이 태그에 붙은 계약은 「min-width:4.5em 으로 body 열을 정렬한다」였다. 그 목적은
     유지되고 수단만 바뀐다 — 태그가 오른쪽으로 가면 body 가 왼쪽 0 에서 시작해 «저절로» 열이 선다.
     되살리지 말 것(고정폭 칸은 §3-C ④ 「고정 폭 칸이 본문을 민다」의 원인이기도 하다).
   ★색면 해제 근거 = §1-b(카드 «안»에는 배경칠을 두지 않는다). 스캔 앵커 기능은 «오른쪽 한 열에
     세로로 정렬된 색 글자»가 그대로 수행한다 — 오히려 pill 이 왼쪽에서 이름을 밀던 때보다 낫다. */
.omni-panel .nav-row .meta{order:2;margin-left:auto;background:none;border-radius:0;padding:0;
  min-width:0;text-align:right;color:var(--ink-muted);font-weight:var(--fw-med);
  font-size:var(--omni-badge);line-height:1.45;flex:0 0 auto}
.omni-panel .nav-row .body{white-space:normal}   /* 오른쪽 칸이 좁던 시절의 nowrap+ellipsis 해제 */

/* ④ 그룹 헤더 = 여백과 굵기로만. 전폭 밑줄 7개가 패널을 표처럼 잘라 놓고 있었다. */
.omni-panel .grp h4{padding:0 var(--row-px) var(--label-gap);border-bottom:0;margin-bottom:0;
  text-transform:none;letter-spacing:0;font-size:var(--fs-caption);color:var(--ink-muted)}
.omni-panel .grp{margin-top:var(--block-gap)}
.omni-panel .grp:first-child{margin-top:0}
.omni-panel .q-subj{padding:var(--label-gap) var(--row-px) 2px}

/* ⑤ 산문·고지 줄은 읽기 레일 안으로(§1-f 상한 38em) */
.omni-panel .omni-und,.omni-panel .empty-hint,.pal-kbd{max-width:38em}
.pal-kbd{margin-left:auto;margin-right:auto}

/* ⑥ ★독창 요소 — 「그어지는 길」이 목록으로 이어진다 (design-pass §3-B)
   이 컴포넌트의 트레이드마크는 입력칸 밑을 «그어지는» 브랜드 획(.omni-trail)이다. 그런데 그 길은
   입력칸에서 끝나고, 정작 그 길을 따라 «고르는» 목록에는 아무 표식이 없었다(호버=회색 바닥뿐,
   ArrowDown 키보드 진입은 hub_palette.js:680 에 배선돼 있는데 화면이 그 사실을 말하지 않는다).
   → 같은 색·같은 두께·같은 곡선의 획을 행 왼쪽에 세운다. 가로로 그어진 길이 세로로 이어지는 꼴.
   새 색 0 · 새 데이터 0 · 새 클래스 0 · 새 글리프 0 — 이미 있는 토큰과 이미 있는 상태를 쓴다. */
/* 2026-09-21 오너: 행 왼쪽 획(hover 3px 바) 폐기 — 가장자리 바 금지. hover 는 행 배경만. */

/* ⑦ 칩·버튼 히트영역 44 — 시각 치수는 그대로 두고 ::after 로만 넓힌다.
   ★조상에 overflow:hidden 이 없어야 먹는다(design-pass §1-g). .omni-panel 은 overflow-y:auto 라
     세로는 클리핑되지 않는다(auto 는 넘칠 때만 자른다) — 그래서 칩 줄에 상하 여백을 함께 준다. */
.rsch-wrap{padding-top:var(--tight-gap);padding-bottom:var(--tight-gap)}
.rsch-chip,.rp-chip,.omni-panel .chip{position:relative;min-height:var(--bdg-h-l)}
.rsch-chip::after,.rp-chip::after,.omni-panel .chip::after{content:"";position:absolute;inset:-4px 0}
.pin-btn{position:relative}
.pin-btn::after{content:"";position:absolute;inset:-8px}

/* ⑧ 패널 = «떠 있는 한 물건». 인라인 패널이 입력칸 폭(1108)을 그대로 따라가서, 결과 2행짜리 화면이
   페이지 전폭 시트로 펼쳐졌다(오른쪽 3분의 2가 빈칸). 팰릿 모드는 이미 640 이라 같은 컴포넌트가
   모드에 따라 두 폭을 갖고 있던 셈이다 — 인라인도 레일 안으로 들여 둘을 합류시킨다.
   760 = 표준 브레이크포인트 3단의 가운데 값(§1-c-2) · left:0 과 짝이라 입력 글자 아래에 왼쪽 정렬로 매달린다.
   ★팰릿 모드는 .omni-box 가 이미 min(640,92vw) 라 여기 영향 없음(패널은 그 안에서 100%). */
.omni-panel{max-width:760px}

/* ⑨ 모션 감소 — 공유 컴포넌트는 «자기 가드»를 들고 다닌다.
   ★사유(2026-09-13 실측): 이 파일을 싣는 31페이지 중 amend_news·coordinator·qid·study_drill·track
     다섯은 hub_ui.css 를 안 실어 전역 가드(hub_ui.css:47)가 없다. 종전엔 드롭다운 행에 전이가 아예
     없어 문제가 안 보였는데, 이번 개편이 행 바닥·획 전이를 «더했으므로» 그 다섯 페이지에서 OS
     「동작 줄이기」가 무시된다. 호스트 페이지에 기대지 말고 컴포넌트가 스스로 끈다.
   ★두 벌 필요 = OS 자동(@media) + 앱 토글(html[data-motion]) — 한쪽만 쓰면 다른 경로에서 안 먹는다. */
@media (prefers-reduced-motion:reduce){
  .omni-zone *,.omni-zone *::before,.omni-zone *::after,
  .omni-panel *,.omni-panel *::before,.omni-panel *::after{transition:none!important;animation:none!important}
}
html[data-motion="reduce"] .omni-zone *,html[data-motion="reduce"] .omni-zone *::before,html[data-motion="reduce"] .omni-zone *::after,
html[data-motion="reduce"] .omni-panel *,html[data-motion="reduce"] .omni-panel *::before,html[data-motion="reduce"] .omni-panel *::after{transition:none!important;animation:none!important}

/* 검색어 표식(kz.js kzMarkHtml) 모양 — 정본은 hub_ui.css mark.kz-hit. 여기 같은 한 줄을 두는 이유: 팰릿은 hub_ui.css 를
   안 싣는 자족 페이지에도 뜨므로(그 페이지에선 <mark> 가 브라우저 기본 노란 칠로 나온다) 컴포넌트가 자기 모양을 들고 다닌다.
   ★두 줄은 한 벌 — 값을 바꾸면 hub_ui.css 도 같이. */
.omni-panel mark.kz-hit{background:none;color:var(--brand-deep);font-weight:var(--fw-bold);padding:0}
