/* /s/stay 목업 주입분 — 헤더 미니 플레이어 · 캐치프레이즈 전환. ★ 색·테두리·서체를 전부 템플릿 변수(--tpl-*)에서 가져온다. 값을 박으면 템플릿을 바꿀 때 플레이어만 옛 색으로 남는다. ★ 플레이어는 헤더 **안**이다. 하단 바는 모바일 탭바(fixed bottom:0 · 61px)를 덮었고, 상단 바는 헤더와 두 줄이 됐다. 헤더 안이면 화면에서 차지하는 줄이 늘지 않는다. */ /* ── 헤더에 꽂는 아이콘 세 개 ─────────────────────────────────────── */ #w4d-mini { display: inline-flex; align-items: center; gap: 2px; margin-right: 6px; padding-right: 8px; border-right: 1px solid var(--tpl-border, #bcb49e); } #w4d-mini button { display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; padding: 0; color: var(--tpl-text, #1b1a15); background: transparent; border: 0; border-radius: var(--tpl-radius, 0); cursor: pointer; opacity: 0.75; } #w4d-mini button:hover { opacity: 1; background: rgb(27 26 21 / 0.06); } #w4d-mini svg { width: 16px; height: 16px; } /* 지금 나오는 곡명. 좁은 화면에서는 헤더에 자리가 없어 접는다 — 실측(390px): 상호 115px + 오른쪽 묶음 94px 이라 남는 폭이 55px 뿐이다. 그 화면에서는 목록을 열면 재생 중인 줄에 곡명과 시간이 있다. */ #w4d-now { max-width: 150px; overflow: hidden; font-size: 11.5px; font-weight: 700; white-space: nowrap; text-overflow: ellipsis; color: var(--tpl-accent, #bf2f1b); padding-right: 2px; } #w4d-mini[data-playing='0'] #w4d-now { opacity: 0.55; font-weight: 400; } @media (max-width: 860px) { #w4d-now { display: none; } } /* 카세트 — 단추가 아니라 표지다. 이 자리가 무엇인지 한눈에 말해 준다. */ #w4d-tape { display: inline-flex; align-items: center; padding: 0 4px 0 2px; color: var(--tpl-text, #1b1a15); opacity: 0.8; } #w4d-tape svg { width: 20px; height: 20px; } #w4d-mini[data-playing='1'] #w4d-tape { color: var(--tpl-accent, #bf2f1b); opacity: 1; } /* 재생 중에는 릴이 돈다 — 소리가 나고 있다는 것을 글자 없이 말한다. */ #w4d-mini[data-playing='1'] .w4d-reel { transform-box: fill-box; transform-origin: center; animation: w4d-reel 2.6s linear infinite; } @keyframes w4d-reel { to { transform: rotate(360deg); } } @media (prefers-reduced-motion: reduce) { .w4d-reel { animation: none !important; } } /* 재생 중일 때만 강조색 — 헤더에 곡명을 안 두므로 색이 유일한 '지금 나온다' 표시다. */ #w4d-mini button[data-playing='1'] { color: var(--tpl-accent, #bf2f1b); opacity: 1; } @media (max-width: 400px) { #w4d-mini { margin-right: 2px; padding-right: 4px; } #w4d-mini button { width: 27px; height: 27px; } } /* ── 목록 패널 (헤더 아래에 떠 있다) ────────────────────────────── ★ 좁은 화면에서는 좌우 8px 만 남기고 펼친다. 320px 고정이었을 때 390px 화면에서 제목이 두 줄로 접히고 시간이 잘렸다(2026-09-11 사장님: "모바일 대응이 안 되어 있음"). */ #w4d-panel { position: fixed; z-index: 45; /* 사이트 헤더가 z-40 이라 그 위 */ width: 344px; max-width: calc(100vw - 16px); max-height: min(64vh, 520px); display: flex; flex-direction: column; overflow: hidden; font-family: var(--tpl-font-body, serif); color: var(--tpl-text, #1b1a15); background: var(--tpl-card, #efe7d3); border: var(--tpl-border-width, 2px) solid var(--tpl-primary, #1b1a15); box-shadow: var(--tpl-shadow, 4px 4px 0 rgb(27 26 21 / 0.16)); } #w4d-panel[hidden] { display: none; } @media (max-width: 640px) { #w4d-panel { width: auto; } } #w4d-panel .w4d-head { display: flex; align-items: center; gap: 8px; flex: 0 0 auto; padding: 11px 8px 11px 14px; border-bottom: var(--tpl-border-width, 2px) solid var(--tpl-primary, #1b1a15); } .w4d-head-t { font-size: 12px; font-weight: 700; letter-spacing: 0.06em; } .w4d-head-n { flex: 1 1 auto; font-size: 11px; opacity: 0.5; } #w4d-panel .w4d-head button { display: inline-flex; width: 28px; height: 28px; flex: 0 0 auto; align-items: center; justify-content: center; color: inherit; background: transparent; border: 0; cursor: pointer; opacity: 0.6; } #w4d-panel .w4d-head button:hover { opacity: 1; } #w4d-panel .w4d-head svg { width: 14px; height: 14px; } #w4d-panel ol { flex: 1 1 auto; margin: 0; padding: 4px 0; overflow-y: auto; list-style: none; -webkit-overflow-scrolling: touch; } /* 한 줄 = 판 + 제목/가수 + 시간. 48px 아래로 내리지 않는다 — 손가락으로 누르는 자리다. */ .w4d-item { display: flex; width: 100%; min-height: 52px; align-items: center; gap: 11px; padding: 8px 14px; color: inherit; background: transparent; border: 0; font: inherit; text-align: left; cursor: pointer; } .w4d-item + .w4d-item { border-top: 1px dashed var(--tpl-border, #bcb49e); } .w4d-item:hover { background: rgb(27 26 21 / 0.05); } .w4d-item[aria-current='true'] { background: rgb(27 26 21 / 0.06); } .w4d-item[aria-current='true'] .w4d-t { color: var(--tpl-accent, #bf2f1b); } /* 판 자리. 재생 중인 줄에서는 판 대신 막대가 뛴다. */ .w4d-mark { position: relative; flex: 0 0 26px; height: 26px; } .w4d-disc-sm { position: absolute; inset: 0; border-radius: 50%; background: radial-gradient(circle at 50% 50%, var(--w4d-lbl, #bf2f1b) 0 34%, transparent 34%), repeating-radial-gradient(circle at 50% 50%, rgb(255 255 255 / 0.12) 0 1px, transparent 1px 3px), #14110f; } .w4d-disc-sm::after { content: ''; position: absolute; inset: 45%; border-radius: 50%; background: var(--tpl-card, #efe7d3); } .w4d-eq { position: absolute; inset: 0; display: none; align-items: flex-end; justify-content: center; gap: 3px; padding-bottom: 4px; } .w4d-eq i { width: 3px; height: 6px; background: var(--tpl-accent, #bf2f1b); animation: w4d-eq 0.9s ease-in-out infinite; } .w4d-eq i:nth-child(2) { animation-delay: 0.18s; } .w4d-eq i:nth-child(3) { animation-delay: 0.36s; } @keyframes w4d-eq { 0%, 100% { height: 5px; } 50% { height: 17px; } } .w4d-item[data-playing='1'] .w4d-disc-sm { display: none; } .w4d-item[data-playing='1'] .w4d-eq { display: flex; } @media (prefers-reduced-motion: reduce) { .w4d-eq i { animation: none; height: 11px; } } .w4d-info { min-width: 0; flex: 1 1 auto; } .w4d-t { display: block; overflow: hidden; font-size: 13.5px; font-weight: 700; white-space: nowrap; text-overflow: ellipsis; } .w4d-sub { display: block; margin-top: 2px; overflow: hidden; font-size: 11px; white-space: nowrap; text-overflow: ellipsis; opacity: 0.55; } .w4d-time { flex: 0 0 auto; font-size: 11px; opacity: 0.6; font-variant-numeric: tabular-nums; } /* 가사 — 우리 곡만. 종이 위 인쇄물처럼 둔다. */ #w4d-lyrics-box { padding: 10px 12px 14px; border-top: 1px dashed var(--tpl-border, #bcb49e); white-space: pre-line; font-size: 12px; line-height: 1.9; } #w4d-lyrics-box[hidden] { display: none; } /* ★ 이용 정보 맨 아래 가로선을 지운다 (2026-09-10 사장님 지시).