/* 노선 추천 모달(계획서 23-2) — 알약 넷 · 미리 보기 지도 · 비중 · 제약 칸 · 비교값. 색은 전부 테마 토큰을 쓴다(밝음 · 어두움). 계획노선 편집 창(`.b05-routeedit`) 위에 뜬다. */ /* 편집 창 제목 옆 「현재 추천: ○○」. */ .b05-routeedit__rec-now { flex: none; color: var(--color-text-secondary); font-size: var(--text-caption); white-space: nowrap; } /* 곡선 라벨 패널(`.b05-routeedit__label` = 모달 + 1) 위로 — 모달과 뒤 막이 함께 올라간다. */ .ui-modal__backdrop.b05-routerec-backdrop { z-index: calc(var(--z-modal, 1000) + 2); } .ui-modal.b05-routerec { width: min(960px, 94vw); max-height: 92vh; font-size: var(--text-body-sm); } .b05-routerec__body { gap: var(--spacing-12); font-size: var(--text-body-sm); } /* 알약 — 하나만 고른 상태(라디오 묶음). */ /* 여덟 알약 — 네 칸 두 줄로 고르게(좁은 폭은 두 칸 네 줄). */ .b05-routerec__pills { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--spacing-8); } /* 좁은 폭 — 두 줄을 지키려 글자를 줄이고, 글자가 잘릴 만큼 좁으면(560px 이하) 두 칸 네 줄. */ @media (max-width: 720px) { .b05-routerec__pill { padding-inline: 4px; font-size: var(--text-body-sm); } } @media (max-width: 560px) { .b05-routerec__pills { grid-template-columns: repeat(2, minmax(0, 1fr)); } } .b05-routerec__pill { padding: 8px var(--spacing-8); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; border: 1px solid var(--color-border); border-radius: 999px; background: var(--color-surface); color: var(--color-text-body); font-size: var(--text-body); cursor: pointer; } .b05-routerec__pill:hover:not(:disabled) { border-color: var(--color-primary); } .b05-routerec__pill.is-on { border-color: var(--color-primary); background: var(--color-primary); color: var(--color-on-primary, #fff); font-weight: 600; } .b05-routerec__pill:disabled { cursor: progress; opacity: 0.7; } .b05-routerec__main { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: var(--spacing-12); align-items: start; } .b05-routerec__mapbox { display: flex; flex-direction: column; gap: var(--spacing-4, 4px); } /* 미리 보기 지도 — 캔버스 칸(높이 고정). 회전 단추는 편집 창 것(`.b05-routeedit__spin`)과 같은 모양. */ .b05-routerec__mapwrap { position: relative; height: 380px; overflow: hidden; border: 1px solid var(--color-border); border-radius: var(--radius-8, 6px); background: var(--color-surface); } .b05-routerec__map { display: block; width: 100%; height: 100%; touch-action: none; cursor: grab; } .b05-routerec__maphint { color: var(--color-text-secondary); font-size: var(--text-body-sm); } .b05-routerec__legend { display: flex; flex-wrap: wrap; gap: var(--spacing-12); color: var(--color-text-secondary); font-size: var(--text-body-sm); } .b05-routerec__legend i { display: inline-block; width: 22px; margin-right: 6px; vertical-align: middle; } .b05-routerec__legend i.is-expected { border-top: 2px dashed var(--color-text-secondary, #9ca3af); } .b05-routerec__legend i.is-current { border-top: 2px solid var(--map-route, #f97316); opacity: 0.55; } .b05-routerec__legend i.is-preview { border-top: 3px solid var(--color-primary); } .b05-routerec__side { display: flex; flex-direction: column; gap: var(--spacing-12); color: var(--color-text-body); font-size: var(--text-body-sm); } /* 비중 — 세로 막대 셋이 나란히(값 위 · 이름 아래). 슬라이더가 세로로 선다. */ .b05-routerec__weights { display: flex; flex-direction: column; gap: var(--spacing-4, 4px); } .b05-routerec__weights[hidden] { display: none; } .b05-routerec__bars { display: flex; gap: var(--spacing-8); } .b05-routerec__bar { display: flex; flex: 1 1 0; flex-direction: column; align-items: center; gap: var(--spacing-4, 4px); } .b05-routerec__bar input[type="range"] { width: 28px; height: 130px; margin: 0; writing-mode: vertical-lr; direction: rtl; /* 위로 올릴수록 큰 값 */ accent-color: var(--color-primary); } /* 값 칸 — 슬라이더 옆에서 숫자를 직접 넣는다. 합 100 을 못 맞추면 빨간 테두리. */ .b05-routerec__num { width: 100%; min-width: 3.2em; padding: 2px 4px; border: 1px solid var(--color-border); border-radius: var(--radius-4, 4px); background: var(--color-surface); color: var(--color-text-body); font-size: var(--text-body); font-weight: 600; text-align: center; appearance: textfield; -moz-appearance: textfield; } .b05-routerec__num::-webkit-outer-spin-button, .b05-routerec__num::-webkit-inner-spin-button { margin: 0; -webkit-appearance: none; } .b05-routerec__num:disabled { opacity: 0.6; } .b05-routerec__num.is-invalid { border-color: var(--color-danger, #dc2626); box-shadow: 0 0 0 1px var(--color-danger, #dc2626); } /* 고정 단추 — 자물쇠. 눌린 것 = 고정 · 저절로 정해진 비중은 눌린 채 꺼져(잠김 표시). */ .b05-routerec__lock { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 26px; padding: 0; border: 1px solid var(--color-border); border-radius: var(--radius-4, 4px); background: var(--color-surface); color: var(--color-text-secondary); cursor: pointer; } .b05-routerec__lock:hover:not(:disabled) { border-color: var(--color-primary); } .b05-routerec__lock.is-on { border-color: var(--color-primary); background: var(--color-primary); color: var(--color-on-primary, #fff); } .b05-routerec__lock:disabled { cursor: not-allowed; opacity: 0.55; } .b05-routerec__lock.is-auto { opacity: 0.8; border-style: dashed; } .b05-routerec__bar > span { color: var(--color-text-secondary); } .b05-routerec__sum { text-align: center; font-weight: 600; } /* 공통 제약 네 칸 — 한 줄에 하나(이름 · 입력 · 단위). 비우면 placeholder 가 기본값. */ .b05-routerec__criteria { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--spacing-8); } .b05-routerec__criteria label, .b05-routerec__target { display: grid; grid-template-columns: minmax(0, 1fr) 5.5em 1.5em; align-items: center; gap: var(--spacing-8); color: var(--color-text-body); } .b05-routerec__criteria input, .b05-routerec__target input { width: 100%; padding: 4px 8px; border: 1px solid var(--color-border); border-radius: var(--radius-4, 4px); background: var(--color-surface); color: var(--color-text-body); font-size: var(--text-body); text-align: right; } .b05-routerec__criteria input::placeholder, .b05-routerec__target input::placeholder { color: var(--color-text-secondary); } .b05-routerec__side .ui-btn { align-self: flex-start; } .b05-routerec__lines { display: flex; flex-direction: column; gap: 2px; color: var(--color-text-secondary); font-size: var(--text-body-sm); line-height: 1.5; } /* 같은 노선 알림 아래 흐린 글. */ .b05-routerec__lines .is-dim { color: var(--color-text-secondary); font-size: var(--text-caption); opacity: 0.8; } /* 상한을 풀었다는 안내 — 눈에 띄게(계획서 20). */ .b05-routerec__lines .is-warn { color: var(--color-warning); font-weight: 600; } .b05-routerec__foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: var(--spacing-8); } .b05-routerec__state { flex: 1 1 12em; color: var(--color-text-body); font-size: var(--text-body-sm); } /* 좁은 폭 — 지도 아래로 조작 칸. */ @media (max-width: 720px) { .b05-routerec__main { grid-template-columns: minmax(0, 1fr); } .b05-routerec__mapwrap { height: 300px; } } .b05-routerec__target[hidden] { display: none; }