/* 노선 추천 모달(계획서 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); } /* 오른쪽 설명 칸(계획서 48-2)만큼 넓힘 — 왼쪽 기존 칸은 예전 폭 그대로. */ .ui-modal.b05-routerec { width: min(1320px, 96vw); --modal-max: 92vh; font-size: var(--text-body-sm); } .b05-routerec__body { gap: var(--spacing-12); font-size: var(--text-body-sm); } /* 왼쪽 = 기존 칸 넷(알약 · 지도 · 결과 줄 · 바닥) · 오른쪽 = 세로 구분선 + 설명 칸. */ .ui-modal.b05-routerec .b05-routerec__body { display: grid; grid-template-columns: minmax(0, 1fr) minmax(280px, 340px); align-content: start; column-gap: var(--spacing-16, 16px); } .b05-routerec__body > :not(.b05-routerec__help) { grid-column: 1; } /* 설명 칸 — 왼쪽 높이를 따라가고(제 글 길이로 창을 키우지 않음) 넘치면 제 안에서 굴림. */ .b05-routerec__help { grid-column: 2; grid-row: 1 / span 4; contain: size; overflow-y: auto; padding-left: var(--spacing-16, 16px); border-left: 1px solid var(--color-border); color: var(--color-text-body); font-size: var(--text-body-sm); line-height: 1.55; } .b05-routerec__help h3 { margin: var(--spacing-12) 0 var(--spacing-4, 4px); color: var(--color-text-heading, var(--color-text-body)); font-size: var(--text-body); font-weight: 700; } .b05-routerec__help h3:first-child { margin-top: 0; } .b05-routerec__help-lead { margin: 0 0 var(--spacing-8); color: var(--color-text-secondary); } .b05-routerec__help-item { margin-bottom: var(--spacing-8); padding: var(--spacing-8); border: 1px solid transparent; border-radius: var(--radius-8, 6px); } /* 고른 갈래 — 알약과 같은 강조색 테두리. */ .b05-routerec__help-item.is-on { border-color: var(--color-primary); background: var(--color-surface); } .b05-routerec__help-item h4 { margin: 0 0 2px; font-size: var(--text-body-sm); font-weight: 700; } .b05-routerec__help-item.is-on h4 { color: var(--color-primary); } .b05-routerec__help-item p, .b05-routerec__help dd { margin: 2px 0; } .b05-routerec__help-item ul { margin: 2px 0; padding-left: 1.1em; } .b05-routerec__help-summary { font-weight: 600; } .b05-routerec__help-caution { color: var(--color-text-secondary); } .b05-routerec__help dl { margin: 0; } .b05-routerec__help dt { margin-top: var(--spacing-8); font-weight: 600; } .b05-routerec__help dd { color: var(--color-text-secondary); } /* 좁은 폭 — 설명 칸은 아래로(가로 구분선 · 제 높이 한도 안에서 굴림). */ @media (max-width: 1000px) { .ui-modal.b05-routerec .b05-routerec__body { grid-template-columns: minmax(0, 1fr); } .b05-routerec__help { grid-column: 1; grid-row: auto; contain: none; max-height: 280px; padding-top: var(--spacing-12); padding-left: 0; border-top: 1px solid var(--color-border); border-left: none; } } /* 알약 — 하나만 고른 상태(라디오 묶음). */ /* 여덟 알약 — 네 칸 두 줄로 고르게(좁은 폭은 두 칸 네 줄). */ .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; }