/* 캘린더 컴포넌트(월/주/일 + 시간축 + 칩 + 범례) — 단일 출처.
   사용처: 빌더(PAGE)·공유뷰(SHARE_PAGE). theme.css 토큰(--shift-*/--line/--sh*) 뒤에 로드할 것. */
 .legend{font-size:12px;color:var(--sub);margin-top:10px;display:flex;flex-wrap:wrap;align-items:center;gap:4px 2px}
 .legend .lg{display:inline-flex;align-items:center;gap:5px;margin-right:12px}
 .legend .pill{display:inline-flex;width:20px;height:20px;border-radius:6px;font-size:11px;font-weight:700;align-items:center;justify-content:center}
 .legend .pill.d{background:var(--shift-d-bg);color:var(--shift-d-fg)}
 .legend .pill.e{background:var(--shift-e-bg);color:var(--shift-e-fg)}
 .legend .pill.n{background:var(--shift-n-bg);color:var(--shift-n-fg)}
 .legend .pill.off{background:#f1f3f4;color:#9aa3b2}
 .legend.hint{display:block;margin-top:8px;font-size:11.5px;line-height:1.7}
 /* ── 뷰 토글 + 📅 캘린더(구글 캘린더식) ── */
 .viewbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:2px 0 14px}
 /* 모던 세그먼트(iOS식): 인셋 트레이 + 활성=흰 알약 + 그림자 */
 .vseg{display:inline-flex;border:0;border-radius:12px;background:#e9edf5;padding:3px;gap:2px}
 .vsegb{background:transparent;border:0;padding:7px 17px;border-radius:9px;font-family:inherit;font-size:14px;font-weight:700;color:var(--sub);cursor:pointer;transition:background .13s,color .13s,box-shadow .13s}
 .vsegb:hover{color:var(--ink)}
 .vsegb.on{background:#fff;color:var(--ink);box-shadow:0 1px 3px rgba(16,24,40,.18)}
 .calwho{margin-left:auto;padding:8px 12px;border:1px solid var(--line);border-radius:20px;background:#fff;font-family:inherit;font-size:13px;font-weight:600;color:var(--ink);cursor:pointer}
 .cal{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
 .calhd{text-align:center;font-size:12px;font-weight:700;color:var(--sub);padding:4px 0}
 .calhd.we{color:#c0392b}
 .calcell{min-height:100px;border:1px solid var(--line);border-radius:12px;background:#fff;padding:6px 7px;display:flex;flex-direction:column;gap:4px;overflow:hidden}
 .calcell.blank{background:transparent;border:0}
 .calcell.we{background:#fdf6f7}
 .calcell.hol{background:#fff4f4;border-color:#f6cdcf}
 .cald{font-size:12px;font-weight:700;color:#3c4a63;display:flex;align-items:center;gap:5px;flex:none}
 .calcell.we .cald{color:#c0392b}
 .holdot{font-size:9px;font-weight:700;background:#fde7e9;color:#c0392b;border-radius:8px;padding:0 5px}
 .calbody{display:flex;flex-direction:column;gap:3px;flex:1;justify-content:center}
 .calrow{display:flex;align-items:center;gap:5px;font-size:11.5px;line-height:1.3;border-radius:7px;padding:2px 6px}
 .calrow.d{background:var(--shift-d-bg);color:var(--shift-d-fg)}
 .calrow.e{background:var(--shift-e-bg);color:var(--shift-e-fg)}
 .calrow.n{background:var(--shift-n-bg);color:var(--shift-n-fg)}
 .calk{font-weight:800;width:12px;text-align:center;flex:none}
 .calnum{font-weight:800;flex:none;min-width:14px}
 .calnm{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
 .caloff{color:var(--shift-off);font-size:12px;text-align:center;margin:auto}
 .calchip{border-radius:10px;padding:9px 6px;text-align:center;font-size:13.5px;font-weight:700;width:100%}
 .calchip .calt{font-size:11px;font-weight:600;opacity:.85}
 .calchip.d{background:var(--shift-d-bg);color:var(--shift-d-fg)}
 .calchip.e{background:var(--shift-e-bg);color:var(--shift-e-fg)}
 .calchip.n{background:var(--shift-n-bg);color:var(--shift-n-fg)}
 @media(max-width:640px){.cal{gap:3px}.calhd{font-size:11px}.calcell{min-height:62px;padding:4px 4px;border-radius:9px}.calnm{display:none}.calrow{padding:2px 4px;gap:3px}.calchip{font-size:12px;padding:6px 3px}}
 /* 월 뷰 날짜칸 클릭(→일 뷰) */
 .calcell.click{cursor:pointer;transition:box-shadow .12s,transform .05s}
 .calcell.click:hover{box-shadow:0 2px 10px rgba(26,115,232,.18);border-color:var(--blue)}
 .calcell.click:active{transform:scale(.99)}
 /* 주/일 네비게이션 */
 .calnav{display:flex;align-items:center;gap:8px}
 .navb{background:#fff;border:1px solid var(--line);border-radius:50%;width:36px;height:36px;font-size:14px;cursor:pointer;color:var(--ink);box-shadow:var(--sh1);transition:box-shadow .13s,background .13s}
 .navb:hover{background:#f6f8fc;box-shadow:var(--sh2)}
 .navlbl{font-weight:700;font-size:14px;color:var(--ink);min-width:120px;text-align:center}
 /* 주 뷰: 7 요일 컬럼 */
 .calw{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;align-items:start}
 .calwcol{border:1px solid var(--line);border-radius:12px;background:#fff;overflow:hidden;min-height:120px}
 .calwcol.we{background:#fdf6f7}
 .calwcol.hol{background:#fff4f4;border-color:#f6cdcf}
 .calwh{font-size:12px;font-weight:700;color:var(--sub);text-align:center;padding:6px 4px;border-bottom:1px solid var(--line);background:#f7f9fc}
 .calwh.we{color:#c0392b}
 .calwd{display:block;font-size:13px;color:#3c4a63;font-weight:800}
 .calwbody{padding:5px}
 /* 일 뷰: 한 날 풀디테일 */
 .cald1{display:flex;flex-direction:column;gap:10px;max-width:720px;margin:0 auto}
 /* 교대 레인(주/일 공용) + 편집 칩 */
 .lane{border:1px solid var(--line);border-radius:10px;padding:6px 8px;margin-bottom:6px;background:#fff}
 .lane.d{border-left:4px solid var(--shift-d-fg)} .lane.e{border-left:4px solid var(--shift-e-fg)}
 .lane.n{border-left:4px solid var(--shift-n-fg)} .lane.off{border-left:4px solid var(--shift-off)}
 .lanehd{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:700;color:#3c4a63;margin-bottom:5px}
 .lanek{font-weight:800;width:15px;text-align:center}
 .lanet{font-weight:600;color:var(--sub);font-size:11px}
 .lanecnt{margin-left:auto;font-weight:800;font-size:12px;background:#eef2f8;color:#4a5568;border-radius:10px;padding:1px 8px}
 .lanecnt.short{background:#fde7e9;color:#c0392b}
 .lanechips{display:flex;flex-wrap:wrap;gap:5px}
 .lanemute{color:var(--shift-off);font-size:12px}
 .nchip{display:inline-flex;align-items:center;gap:3px;border:1px solid transparent;border-radius:16px;padding:3px 11px;font-family:inherit;font-size:13px;font-weight:600;cursor:pointer;transition:filter .1s,box-shadow .1s}
 .nchip:disabled{cursor:default}
 .nchip.d{background:var(--shift-d-bg);color:var(--shift-d-fg)} .nchip.e{background:var(--shift-e-bg);color:var(--shift-e-fg)}
 .nchip.n{background:var(--shift-n-bg);color:var(--shift-n-fg)} .nchip.off{background:#eef1f5;color:#8a94a6}
 .nchip:not(:disabled):hover{filter:brightness(.95)}
 .nchip.lk{box-shadow:inset 0 0 0 2px #1a73e8}
 .nchip.chg{box-shadow:inset 0 0 0 2px #fbbc04}
 .lkdot{font-size:10px}
 .legend .lkdot{font-size:13px}
 @media(max-width:640px){.calw{grid-template-columns:repeat(7,1fr);gap:2px}.calwcol{min-height:auto}.calwh{font-size:10px;padding:4px 1px}.calwd{font-size:11px}.calwbody{padding:2px}.lane{padding:4px 5px}.lanehd{font-size:11px;gap:4px}.lanet{display:none}.nchip{padding:2px 8px;font-size:12px}.navlbl{min-width:88px;font-size:13px}}
 /* ── 시간축 그리드(주/일 뷰 = 구글 캘린더식) ── */
 .tweek{display:flex;flex-direction:column;gap:0}
 .wkrow{display:grid;grid-template-columns:38px repeat(7,1fr);gap:5px}
 .wkrow.head{margin-bottom:5px}
 .wkhc{text-align:center;font-size:12px;font-weight:700;color:var(--sub);padding:5px 2px;border-radius:8px;background:#f7f9fc;line-height:1.25}
 .wkhc b{display:block;font-size:14px;color:#3c4a63}
 .wkhc.we{color:#c0392b} .wkhc.we b{color:#c0392b}
 .wkhc.hol{background:#fff4f4}
 .railcell{position:relative}
 .trh{position:absolute;right:4px;font-size:10px;color:#9aa3b2;transform:translateY(-7px)}
 .tday{display:grid;grid-template-columns:44px 1fr;gap:6px}
 .tday .trh{font-size:11px}
 .ttrack{position:relative;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}
 .ttrack.wide{min-height:0}
 .tout{position:absolute;top:50%;left:0;right:0;transform:translateY(-50%);text-align:center;color:var(--shift-off);font-size:12px}
 .tblock{position:absolute;left:3px;right:3px;border-radius:8px;padding:3px 7px 3px 9px;overflow:hidden;box-shadow:0 1px 2px rgba(16,24,40,.10)}
 /* 구글캘린더식 좌측 악센트 바 — 교대 식별 강화 */
 .tblock.d{background:var(--shift-d-bg);color:var(--shift-d-fg);border-left:3px solid var(--shift-d-fg)}
 .tblock.e{background:var(--shift-e-bg);color:var(--shift-e-fg);border-left:3px solid var(--shift-e-fg)}
 .tblock.n{background:var(--shift-n-bg);color:var(--shift-n-fg);border-left:3px solid var(--shift-n-fg)}
 .tblock.ctx{opacity:.62;background-image:repeating-linear-gradient(45deg,rgba(255,255,255,.35) 0,rgba(255,255,255,.35) 6px,transparent 6px,transparent 12px)}
 .tbh{display:flex;align-items:baseline;gap:5px;font-size:11.5px;font-weight:800;line-height:1.3;white-space:nowrap}
 .tbh b{flex:none} .tbt{font-weight:600;font-size:10px;opacity:.9;overflow:hidden;text-overflow:ellipsis}
 .tbc{margin-left:auto;font-weight:800;font-size:11px;background:rgba(255,255,255,.55);border-radius:9px;padding:0 6px;flex:none}
 .tbc.short{background:#fde7e9;color:#c0392b}
 .tbchips{display:flex;flex-wrap:wrap;gap:3px;margin-top:3px}
 .dtcol .tbchips{margin-top:5px;gap:5px}
 .nchip.ro{cursor:default;font-weight:600;padding:2px 9px}
 .nchip.ro:hover{filter:none}
 .toffrow{margin-top:8px;border:1px dashed var(--line);border-radius:10px;padding:8px 10px;display:flex;align-items:flex-start;gap:10px;flex-wrap:wrap;background:#fafbfd}
 .toffk{font-weight:700;font-size:12px;color:var(--sub);flex:none;padding-top:2px}
 .tweekscroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
 @media(max-width:640px){.tweekscroll .tweek{min-width:640px}.wkrow{grid-template-columns:30px repeat(7,1fr);gap:3px}.wkhc{font-size:10px;padding:3px 1px}.wkhc b{font-size:12px}.trh{font-size:9px;right:2px}.tblock{padding:2px 5px;left:2px;right:2px}.tbh{font-size:10px;gap:3px}.tbt{display:none}.dtcol .tbt{display:inline}.nchip{padding:2px 8px;font-size:11px}.tday{grid-template-columns:34px 1fr}}
