/* static/lib/travel/travel.css — 유니티 트래블 공용 (시트 틀은 fish.css 의 .ufs-sh 를 그대로 씀) */
:root{--utv:#0e8c7e;--utv-soft:#ecfdf9;--utv-ink:#0f172a;--utv-sub:#64748b;--utv-line:#e2e8f0}
/* 지도 심볼 */
.utv-b{position:relative;display:inline-flex;align-items:center;justify-content:center;flex:none;border-radius:50%;background:var(--c);color:#fff;border:2px solid #fff;box-shadow:0 1px 4px rgba(15,23,42,.35);box-sizing:border-box}
.utv-b i{position:absolute;right:-5px;top:-5px;min-width:14px;height:14px;border-radius:7px;background:#fff;color:var(--c);font:900 10px/14px Pretendard,sans-serif;font-style:normal;text-align:center;box-shadow:0 0 0 1px var(--c)}
.utv-b.fuel::after{content:"";position:absolute;right:-3px;bottom:-3px;width:10px;height:10px;border-radius:50%;background:#ea580c;border:2px solid #fff}
.utv-h,.utv-i,.utv-e{position:relative;transform:scale(var(--nvm-sym,1));transform-origin:center}
.utv-h .utv-b{cursor:pointer}
.utv-l{position:absolute;left:50%;top:100%;transform:translateX(-50%);margin-top:2px;white-space:nowrap;pointer-events:none;font:800 12.5px/1.25 Pretendard,sans-serif;color:#0f172a;
  text-shadow:-1.5px -1.5px 0 #fff,1.5px -1.5px 0 #fff,-1.5px 1.5px 0 #fff,1.5px 1.5px 0 #fff,0 -2px 0 #fff,0 2px 0 #fff,-2px 0 0 #fff,2px 0 0 #fff}
.utv-l.s{font-size:11px;font-weight:700;color:#334155}
.utv-h.k-marina .utv-l{color:#1e3a8a}
.utv-t{position:relative;width:40px;height:40px;border-radius:12px;background:#fff;border:2.5px solid #fff;box-shadow:0 2px 8px rgba(15,23,42,.35);display:flex;align-items:center;justify-content:center;color:var(--utv);overflow:visible;cursor:pointer;transform:scale(var(--nvm-sym,1))}
.utv-t img{width:100%;height:100%;object-fit:cover;border-radius:9px;display:block}
.utv-t.mine{border-color:var(--utv)}
.utv-t::after{content:"";position:absolute;left:50%;bottom:-9px;margin-left:-6px;border:6px solid transparent;border-top-color:#fff;border-bottom:0;filter:drop-shadow(0 2px 1px rgba(15,23,42,.25))}
.utv-t.mine::after{border-top-color:var(--utv)}
.utv-t .utv-tlb{top:auto;bottom:calc(100% + 4px);margin:0}
.utv-t.stack{box-shadow:4px 4px 0 -1px #fff,4px 4px 0 1px rgba(14,140,126,.55),0 2px 8px rgba(15,23,42,.35)}
.utv-tlb{position:absolute;left:50%;top:100%;transform:translateX(-50%);margin-top:3px;white-space:nowrap;pointer-events:none;font:800 11.5px/1.2 Pretendard,sans-serif;color:#08564e;
  text-shadow:-1.5px -1.5px 0 #fff,1.5px -1.5px 0 #fff,-1.5px 1.5px 0 #fff,1.5px 1.5px 0 #fff,0 -2px 0 #fff,0 2px 0 #fff}
.utv-t i{position:absolute;right:-7px;top:-7px;min-width:18px;height:18px;border-radius:9px;background:var(--utv);color:#fff;font:900 11px/18px Pretendard,sans-serif;font-style:normal;text-align:center;border:2px solid #fff}
.utv-ep{width:30px;height:30px;border-radius:9px;border:2px solid #fff;box-shadow:0 1px 5px rgba(0,0,0,.35);overflow:hidden;background:#fff;transform:scale(var(--nvm-sym,1))}
.utv-ep img{width:100%;height:100%;object-fit:cover;display:block}
/* 촬영 위치 핀 — 사진 썸네일 + 꼬리(끝 = 촬영 자리) + 시각 · 묶음 장수 */
.utv-pp{position:relative;width:46px;height:54px;transform:scale(var(--nvm-sym,1));transform-origin:50% 100%;cursor:pointer}
.utv-pp img{position:absolute;left:0;top:0;width:46px;height:46px;box-sizing:border-box;border:3px solid #fff;border-radius:12px;object-fit:cover;display:block;background:#fff;box-shadow:0 2px 8px rgba(0,0,0,.4)}
.utv-pp::after{content:"";position:absolute;left:50%;bottom:0;margin-left:-7px;border:7px solid transparent;border-bottom:0;border-top:9px solid #fff;filter:drop-shadow(0 2px 1px rgba(0,0,0,.25))}
.utv-pp.sea img{border-color:#fff;outline:2px solid var(--utv);outline-offset:0}
.utv-pp i{position:absolute;left:50%;top:31px;transform:translateX(-50%);padding:0 5px;border-radius:7px;background:rgba(8,86,78,.92);color:#fff;font:800 10.5px/15px Pretendard,sans-serif;font-style:normal;white-space:nowrap;pointer-events:none}
.utv-pp b{position:absolute;right:-7px;top:-7px;min-width:19px;height:19px;border-radius:10px;background:var(--utv);color:#fff;font:900 11px/15px Pretendard,sans-serif;text-align:center;border:2px solid #fff;box-sizing:border-box}
.utv-pp.hl{animation:utvPpHl .8s ease-in-out 2}
@keyframes utvPpHl{50%{transform:scale(calc(var(--nvm-sym,1) * 1.25))}}
.utv-e.blur .utv-b{opacity:.85;outline:2px dashed var(--c);outline-offset:2px}
/* 시트 내용 */
.utv-sec{display:flex;flex-direction:column;gap:8px;padding:12px 0;border-bottom:1px solid var(--utv-line)}
.utv-sec:last-child{border-bottom:0}
.utv-sec h4{margin:0;font-size:15px;font-weight:900;color:var(--utv-ink);display:flex;align-items:baseline;gap:6px}
.utv-sec h4 small{font-size:12px;font-weight:600;color:var(--utv-sub)}
.utv-hd{display:flex;align-items:center;gap:12px}
.utv-hd>div{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}   /* 한글 이름 ↔ 영문 이름 */
.utv-hd b{font-size:17px;font-weight:900}
.utv-hd small{font-size:12.5px;color:var(--utv-sub)}
.utv-hd em{font-style:normal;font-size:12px;font-weight:800;padding:4px 9px;border-radius:999px;white-space:nowrap}
.utv-hd em.ok{background:#c9f5ec;color:#0a6e63}.utv-hd em.no{background:#f1f5f9;color:#64748b}
.utv-kv{display:flex;gap:10px;font-size:14px;line-height:1.5}
.utv-kv span{flex:0 0 76px;color:var(--utv-sub);font-weight:700}
.utv-kv b{flex:1;font-weight:700;color:#1e293b;word-break:break-all}
.utv-kv a{color:#1e6fd9}
.utv-chips{display:flex;flex-wrap:wrap;gap:6px}
.utv-chip{font-size:12.5px;font-weight:700;padding:5px 10px;border-radius:999px;background:#f1f5f9;color:#334155}
.utv-note{font-size:12px;line-height:1.6;color:var(--utv-sub)}
.utv-src{font-size:12px;color:var(--utv-sub);display:flex;gap:8px;flex-wrap:wrap}
.utv-src a{color:#64748b;text-decoration:underline}
.utv-src .lo{color:#b45309;font-weight:800}
.utv-empty{padding:18px 0;text-align:center;color:var(--utv-sub);font-size:14px}
.utv-tabs{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}
.utv-tabs::-webkit-scrollbar{display:none}
.utv-tabs button{flex:none;height:36px;padding:0 13px;border-radius:999px;border:1.5px solid var(--utv-line);background:#fff;font:700 13.5px Pretendard,sans-serif;color:#334155;cursor:pointer}
.utv-tabs button.on{background:var(--utv);border-color:var(--utv);color:#fff}
.utv-tabs button small{font-weight:600;opacity:.8}
.utv-list{display:flex;flex-direction:column;gap:6px}
.utv-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--utv-line);border-radius:12px;cursor:pointer;background:#fff}
.utv-row .t{flex:1;min-width:0;display:flex;flex-direction:column}
.utv-row .t b{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.utv-row .t span{font-size:12px;color:var(--utv-sub)}
.utv-row .t small{font-size:12px;color:#475569;margin-top:2px}
.utv-row .ph{flex:none;height:34px;padding:0 12px;border-radius:10px;background:#f1f5f9;color:#334155;font-weight:800;font-size:13px;display:flex;align-items:center;text-decoration:none}
/* 여행기록 목록 — 한 줄에 하나 · 넉넉한 줄 간격 · 글자 12px 이상 */
.utv-tcells{display:flex;flex-direction:column;gap:8px}
.utv-tc{display:flex;align-items:center;gap:12px;width:100%;box-sizing:border-box;min-height:72px;padding:10px 12px;border:1px solid var(--utv-line);border-radius:14px;background:#fff;cursor:pointer;text-align:left;font:inherit;color:inherit;min-width:0}
.utv-tc img,.utv-tc .ph{flex:none;width:52px;height:52px;border-radius:12px;object-fit:cover;background:var(--utv-soft);color:var(--utv);display:flex;align-items:center;justify-content:center}
.utv-tc .tx{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}
.utv-tc b{display:flex;align-items:center;gap:6px;min-width:0;font-size:15px;font-weight:800;color:var(--utv-ink);line-height:1.3}
.utv-tc b .tt{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.utv-tc b em{flex:none;font-style:normal;font-weight:800;color:var(--utv);background:var(--utv-soft);padding:1px 7px;border-radius:999px;font-size:12px}
.utv-tc small{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--utv-sub);line-height:1.4;white-space:nowrap;overflow:hidden;min-width:0}
.utv-tc small em{flex:none;font-style:normal;font-weight:800;color:var(--utv);background:var(--utv-soft);padding:1px 7px;border-radius:999px;font-size:12px}
.utv-tc small i{font-style:normal;opacity:.6}
.utv-tc small .who{min-width:0;overflow:hidden;text-overflow:ellipsis;font-weight:700;color:var(--utv-ink)}
.utv-tc .go{flex:none;color:#94a3b8;display:flex}
.utv-go{height:48px;border:0;border-radius:14px;background:var(--utv);color:#fff;font:800 15px Pretendard,sans-serif;cursor:pointer;width:100%}
.utv-go.alt{background:#fff;color:var(--utv);border:1.5px solid var(--utv)}
.utv-go.del{background:#fff;color:#dc2626;border:1.5px solid #fecaca}
.utv-go.del.arm{background:#dc2626;color:#fff;border-color:#dc2626}
.utv-go:disabled{opacity:.45;cursor:default}
.utv-btns{display:grid;grid-template-columns:2fr 1fr;gap:8px}
.utv-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;padding:4px 0 10px}
.utv-stats div{background:var(--utv-soft);border-radius:12px;padding:9px 8px;display:flex;flex-direction:column;align-items:center;gap:1px}
.utv-stats span{font-size:11px;color:#08564e;font-weight:700}
.utv-stats b{font-size:15px;font-weight:900;color:#073f3a;white-space:nowrap}
.utv-strip{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding:2px 0 8px;overscroll-behavior-x:contain}
.utv-strip::-webkit-scrollbar{display:none}
.utv-strip button{flex:none;width:84px;height:84px;border:0;padding:0;border-radius:12px;overflow:hidden;cursor:pointer;background:#f1f5f9;position:relative}
.utv-strip img{width:100%;height:100%;object-fit:cover;display:block}
.utv-strip .pl{position:absolute;left:4px;bottom:4px;padding:0 5px;border-radius:6px;background:rgba(15,23,42,.72);color:#fff;font:800 10.5px/16px Pretendard,sans-serif;white-space:nowrap}
.utv-strip .pl.sea{background:rgba(8,86,78,.9)}
.utv-phn{display:flex;align-items:center;gap:4px;margin:-2px 0 6px;color:var(--utv)}
.utv-tl .r.ph .pt{flex:none;width:34px;height:34px;border-radius:8px;object-fit:cover;border:2px solid #fff;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.utv-strip button.hid img{opacity:.3}
.utv-strip button.hid::after{content:"숨김";position:absolute;inset:auto 0 0;background:rgba(15,23,42,.7);color:#fff;font:800 11px/20px Pretendard,sans-serif}
.utv-tl{display:flex;flex-direction:column}
.utv-tl .r{display:flex;align-items:center;gap:10px;padding:7px 4px;border-radius:10px;cursor:pointer;position:relative}
.utv-tl .r::before{content:"";position:absolute;left:61px;top:-6px;bottom:-6px;width:2px;background:#a8eee2;z-index:-1}
.utv-tl .r.hl{background:var(--utv-soft)}
.utv-tl .tm{flex:0 0 38px;font:800 12.5px Pretendard,sans-serif;color:#64748b;text-align:right}
.utv-tl .tx{flex:1;min-width:0;font-size:14px;color:#334155}
.utv-tl .tx b{color:var(--utv-ink)}
.utv-tl .tx small{margin-left:6px;font-size:12px;color:var(--utv-sub)}
.utv-tl .tx small.bl{color:#b45309}
.utv-state{background:#fef3c7;color:#92400e;font-weight:800;font-size:13px;border-radius:10px;padding:9px 12px;margin-bottom:8px}
.utv-ask{background:#eff6ff;border-radius:12px;padding:10px 12px;margin-bottom:8px;display:flex;flex-direction:column;gap:8px;font-size:14px}
.utv-ask div{display:flex;gap:6px}
.utv-ask button{flex:1;height:40px;border-radius:10px;border:1.5px solid #1e6fd9;background:#fff;color:#1e6fd9;font:800 14px Pretendard,sans-serif;cursor:pointer}
.utv-ask button:first-child{background:#1e6fd9;color:#fff}
.utv-er{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:14px;font-weight:700;color:#334155}
.utv-seg{display:flex;background:#f1f5f9;border-radius:12px;padding:3px;gap:3px}
.utv-seg button{height:36px;min-width:72px;padding:0 12px;border:0;border-radius:9px;background:transparent;font:800 13.5px Pretendard,sans-serif;color:#64748b;cursor:pointer}
.utv-seg button.on{background:#fff;color:var(--utv);box-shadow:0 1px 4px rgba(15,23,42,.12)}
.utv-ta{height:72px;padding:10px 12px;resize:none;font:600 14px Pretendard,sans-serif}
.utv-link{font-size:13px;font-weight:800;padding:6px 12px;border-radius:999px;background:#fee2e2;color:#b91c1c;text-decoration:none}
.utv-reqb{gap:4px}.utv-reqb svg{flex:none}
.utv-tip{position:fixed;left:50%;bottom:120px;transform:translate(-50%,20px);z-index:9999;background:#0f172a;color:#fff;font:800 14px Pretendard,sans-serif;padding:11px 18px;border-radius:999px;opacity:0;transition:.25s;pointer-events:none;white-space:nowrap}
.utv-tip.on{opacity:1;transform:translate(-50%,0)}
/* 트래블모드 하단 바 — 피싱(.ufs-ms) 틀 · 켜짐 색은 fish.css --um */
/* 트래블 소팅 칸은 어느 화면이든 트래블 색 (트래픽·관리자 지도 안 '유니티 트래블' 묶음 포함) */
.utv-ly,.cm-tvly{--um:#0e8c7e}
body.travel .ufs-sh .hb.pri{background:var(--utv)}
body.travel .ufs-chip.on{background:var(--utv);border-color:var(--utv)}
/* 내 여행 셀 */
.utv-cell{display:flex;align-items:center;gap:10px;padding:8px;border:1px solid var(--utv-line);border-radius:14px;background:#fff;cursor:pointer;position:relative}
.utv-cell .th{flex:none;display:flex;gap:3px}
.utv-cell .th img,.utv-cell .th .ph{width:58px;height:58px;border-radius:10px;object-fit:cover;background:var(--utv-soft);color:var(--utv);display:flex;align-items:center;justify-content:center}
.utv-cell .th img+img{width:40px}
.utv-cell .t{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.utv-cell .t b{font-size:14.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.utv-cell .t span{font-size:12px;color:var(--utv-sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.utv-cell .st{flex:none;font-size:11px;font-weight:800;padding:3px 8px;border-radius:999px;background:#f1f5f9;color:#475569}
.utv-cell .st.sh{background:#c9f5ec;color:#0a6e63}
.utv-cell .ck{flex:none;width:26px;height:26px;border-radius:50%;border:2px solid #cbd5e1;display:none;align-items:center;justify-content:center}
.utv-sel .utv-cell .ck{display:flex}
.utv-cell.on .ck{background:var(--utv);border-color:var(--utv)}
.utv-cell.on .ck::after{content:"";width:6px;height:11px;border:solid #fff;border-width:0 2.5px 2.5px 0;transform:rotate(45deg) translate(-1px,-1px)}
.utv-req{background:#eff6ff;border-radius:12px;padding:10px 12px;display:flex;align-items:center;gap:8px;font-size:13.5px}
.utv-req span{flex:1}
.utv-req button{height:34px;padding:0 12px;border-radius:9px;border:0;font:800 13px Pretendard,sans-serif;cursor:pointer;background:#1e6fd9;color:#fff}
.utv-req button.n{background:#fff;color:#475569;border:1px solid #cbd5e1}
/* 올리기 */
.utv-pg{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:6px}
.utv-pg button{position:relative;aspect-ratio:1;border:0;padding:0;border-radius:10px;overflow:hidden;background:#f1f5f9;cursor:pointer}
.utv-pg img{width:100%;height:100%;object-fit:cover;display:block}
.utv-pg button.off img{opacity:.25}
.utv-pg button i{position:absolute;left:4px;bottom:4px;font:800 10px/1 Pretendard,sans-serif;font-style:normal;padding:3px 5px;border-radius:6px;background:rgba(15,23,42,.7);color:#fff}
.utv-pg button i.sea{background:#1e6fd9}
.utv-pg button i.no{background:#dc2626}
.utv-agree{display:flex;align-items:center;gap:10px;width:100%;min-height:48px;padding:8px 12px;border-radius:12px;border:1.5px solid var(--utv-line);background:#fff;font:700 14px Pretendard,sans-serif;color:#334155;cursor:pointer;text-align:left}
.utv-agree i{flex:none;width:24px;height:24px;border-radius:50%;border:2px solid #cbd5e1;position:relative}
.utv-agree.on{border-color:var(--utv);background:var(--utv-soft);color:#073f3a}
.utv-agree.on i{background:var(--utv);border-color:var(--utv)}
.utv-agree.on i::after{content:"";position:absolute;left:7px;top:3px;width:6px;height:11px;border:solid #fff;border-width:0 2.5px 2.5px 0;transform:rotate(45deg)}
.utv-agree small{display:block;font-size:12px;font-weight:600;color:var(--utv-sub)}
.utv-bar{height:8px;border-radius:4px;background:#f1f5f9;overflow:hidden}.utv-bar i{display:block;height:100%;background:var(--utv);transition:width .3s}
.utv-dev{display:flex;flex-direction:column;gap:8px;padding:12px;border:1px solid var(--utv-line);border-radius:14px}
.utv-dev .n{display:flex;align-items:center;justify-content:space-between;gap:8px;font-weight:900}
.utv-dev .n small{font-weight:700;color:var(--utv-sub);font-size:12px}

/* 범례 */
.utv-leg{display:flex;flex-direction:column;gap:5px;margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid rgba(15,23,42,.1)}
.utv-leg .h{font-size:12px;font-weight:900;color:#0a6e63}
.utv-leg .h.s{margin-top:2px;color:#64748b;font-weight:800}
.utv-leg .it{display:flex;align-items:center;gap:8px}
.utv-leg .row{display:flex;flex-wrap:wrap;gap:4px}
.utv-t.sm{width:20px;height:20px;border-radius:6px;border-width:1.5px;transform:none}
/* 레이어 소팅 (트래블) */
.utv-lyh{display:flex;align-items:center;justify-content:space-between}
.utv-ly .ufs-act .utv-ic,.utv-ic{display:inline-flex}
.ufs-act.utv-on{outline:none}
/* 둘러보기 목록 */
.utv-search{display:flex;gap:6px;margin-bottom:8px}
.utv-search input{flex:1}
.utv-near{font-size:12px;color:#64748b;margin:2px 0 8px}

/* 지도 항포구 — 마리나 부각(크게 + 둘레 띠) · 선석 평균 배지(오른쪽 위) · 최근 갱신(아래 '3d') */
.utv-h.k-marina .utv-b{border-width:2.5px;box-shadow:0 0 0 3px rgba(30,111,217,.32),0 2px 6px rgba(15,23,42,.4)}
.utv-h.k-marina .utv-l{font-size:13.5px;font-weight:900}
.utv-bn{position:absolute;right:-9px;top:-9px;min-width:20px;height:20px;padding:0 5px;box-sizing:border-box;border-radius:10px;background:#0e8c7e;color:#fff;border:2px solid #fff;
  font:900 11px/16px Pretendard,sans-serif;text-align:center;box-shadow:0 1px 3px rgba(15,23,42,.35);pointer-events:none;white-space:nowrap}
.utv-h.has-bn .utv-b i{right:auto;left:-5px}
.utv-ag{position:absolute;left:50%;top:100%;transform:translate(-50%,-5px);font:800 9.5px/13px Pretendard,sans-serif;font-style:normal;color:#0a6e63;background:#fff;
  border:1px solid #7fe6d6;border-radius:7px;padding:0 4px;white-space:nowrap;pointer-events:none}
.utv-h.has-ag .utv-l{margin-top:11px}

/* 항포구 시트 */
.utv-strip.utv-hph{padding:0}
.utv-hph button{width:96px;height:96px}
.utv-hph button i{position:absolute;left:5px;bottom:5px;font:800 10px/1 Pretendard,sans-serif;font-style:normal;padding:3px 5px;border-radius:6px;background:rgba(15,23,42,.7);color:#fff}
.utv-berth{display:flex;align-items:center;gap:8px;min-height:44px}   /* [배] 방문자 선석 ······ 00 척 [선석 공유] */
.utv-berth>svg{flex:none;color:#0a6e63}
.utv-berth .l{font-size:14px;font-weight:800;color:var(--utv-ink)}
.utv-berth .n{flex:1;text-align:right;font-size:20px;font-weight:900;color:#0a6e63;font-variant-numeric:tabular-nums;margin-right:4px}
.utv-berth .n small{font-size:13px;font-weight:800;margin-left:3px}
.utv-sb,.utv-hb{flex:none;height:40px;padding:0 14px;border-radius:12px;border:0;background:var(--utv);color:#fff;font:800 14px Pretendard,sans-serif;cursor:pointer;display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.utv-sb.lk,.utv-hb.lk{background:#f1f5f9;color:#64748b}
.utv-hb{height:34px;padding:0 12px;font-size:13px}
.utv-sec h4 .sp{flex:1}
.utv-cr{display:flex;gap:8px;align-items:stretch}
.utv-call{flex:1;min-width:0;display:flex;align-items:center;gap:12px;min-height:56px;padding:8px 14px;box-sizing:border-box;border-radius:14px;background:var(--utv);color:#fff;text-decoration:none}
.utv-call span{min-width:0;display:flex;flex-direction:column}
.utv-call small{font-size:12px;font-weight:700;opacity:.88;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.utv-call b{font-size:17px;font-weight:900;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.utv-call.off{background:#f1f5f9;color:#94a3b8}
.utv-crt{display:flex;gap:6px;flex-wrap:wrap;margin-top:-2px}
.utv-fl{display:flex;flex-direction:column}
.utv-fr{display:flex;align-items:center;gap:10px;min-height:44px;border-bottom:1px solid #f1f5f9}
.utv-fr:last-child{border-bottom:0}
.utv-fr .l{flex:0 0 96px;font-size:13.5px;font-weight:700;color:var(--utv-sub)}
.utv-fr .v{flex:1;min-width:0;font-size:14px;font-weight:800;color:#1e293b;word-break:break-all;display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px}
.utv-fr .v.dim{color:#cbd5e1;font-weight:700}
.utv-fr .v a{color:#1e6fd9}
.utv-fr i.s,.utv-crt i.s{font-style:normal;font-size:10.5px;font-weight:800;padding:2px 6px;border-radius:6px;background:#f3e8ff;color:#7c3aed}
.utv-fr i.s.u,.utv-crt i.s.u{background:#ecfdf9;color:#0a6e63}
.utv-pd{font-style:normal;font-size:11px;font-weight:800;padding:2px 6px;border-radius:6px;background:#fef3c7;color:#92400e}
.utv-ed{flex:none;height:32px;padding:0 10px;border-radius:9px;border:1.5px solid var(--utv-line);background:#fff;color:#475569;font:800 12px Pretendard,sans-serif;cursor:pointer}
.utv-ed.tall{height:auto;min-width:56px;line-height:1.25}
.utv-lock{display:flex;align-items:center;gap:8px;width:100%;min-height:44px;padding:8px 12px;border:0;border-radius:12px;background:#f1f5f9;color:#64748b;font:700 13px Pretendard,sans-serif;cursor:pointer;text-align:left}
.utv-rvs{display:flex;flex-direction:column;gap:8px}
.utv-rv{border:1px solid var(--utv-line);border-radius:12px;padding:10px 12px;display:flex;flex-direction:column;gap:6px}
.utv-rv .h{display:flex;align-items:center;gap:6px;min-width:0}
.utv-rv .h b{font-size:13.5px;font-weight:900;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.utv-rv .h small{margin-left:auto;flex:none;font-size:11.5px;color:var(--utv-sub)}
.utv-rv .h .tg{flex:none;font-style:normal;font-size:10.5px;font-weight:800;padding:2px 6px;border-radius:6px;background:#ecfdf9;color:#0a6e63}
.utv-rv p{margin:0;font-size:13.5px;line-height:1.55;color:#334155;white-space:pre-wrap;word-break:break-word}
.utv-rv .ph{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none}
.utv-rv .ph button{flex:none;width:64px;height:64px;border:0;padding:0;border-radius:10px;overflow:hidden;background:#f1f5f9;cursor:pointer}
.utv-rv .ph img{width:100%;height:100%;object-fit:cover;display:block}
.utv-star{flex:none;color:#f59e0b;font-size:13px;letter-spacing:-1px}.utv-star i{font-style:normal;color:#e2e8f0}
.utv-admb{flex-direction:row;flex-wrap:wrap}
.utv-admb a{font-size:13px;font-weight:800;color:#b91c1c;text-decoration:none;padding:6px 10px;border-radius:9px;background:#fef2f2}
/* 수정 · 선석 · 후기 작은 시트 */
.utv-cur{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:12px;background:#f8fafc;font-size:14px}
.utv-cur span{font-weight:700;color:var(--utv-sub)}.utv-cur b{font-weight:900;color:#0f172a;word-break:break-all}.utv-cur b.dim{color:#94a3b8}
.utv-opts{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr));gap:8px}
.utv-opts button,.utv-bchips button{height:52px;border-radius:14px;border:1.5px solid var(--utv-line);background:#f8fafc;color:#0f172a;font:800 16px Pretendard,sans-serif;cursor:pointer}
.utv-opts button.on,.utv-bchips button.on{background:var(--utv);border-color:var(--utv);color:#fff}
.utv-bchips{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.utv-bchips button:disabled{cursor:default}
.utv-num{display:flex;align-items:center;gap:8px}.utv-num span{flex:none;font-weight:800;color:var(--utv-sub)}
.utv-rs{display:flex;justify-content:center;gap:6px}
.utv-rs button{width:48px;height:48px;border:0;border-radius:12px;background:#f8fafc;font-size:28px;line-height:1;color:#e2e8f0;cursor:pointer}
.utv-rs button.on{color:#f59e0b}
.utv-pick{display:flex;align-items:center;justify-content:center;gap:6px;cursor:pointer}
.utv-pg button i{background:rgba(220,38,38,.85)}
.utv-rs+.utv-ta{height:120px}
/* 꾹 누른 자리 퀵메뉴 (선박·장비 있는 이용자) — 플로터 퀵메뉴처럼 작게 */
.utv-qm{position:absolute;z-index:955;display:flex;gap:4px;padding:4px;background:#fff;border-radius:16px;box-shadow:0 8px 24px rgba(15,23,42,.28);white-space:nowrap}
.utv-qm button{height:48px;width:118px;padding:0 8px;border:0;border-radius:12px;background:var(--utv-soft);color:#073f3a;font:800 14.5px Pretendard,sans-serif;display:flex;align-items:center;justify-content:center;gap:6px;cursor:pointer}
.utv-qm button svg{width:22px;height:22px;fill:var(--utv);flex:none}
.utv-qm button:active{background:#c9f5ec}
/* 기록 올리기 고르기 */
.utv-pick2{display:flex;flex-direction:column;gap:8px}
.utv-pick2 button{display:flex;align-items:center;gap:14px;width:100%;min-height:76px;padding:12px 16px;border:1.5px solid var(--utv-line);border-radius:16px;background:#fff;cursor:pointer;text-align:left;font:inherit;box-sizing:border-box}
.utv-pick2 button>i{flex:none;width:46px;height:46px;border-radius:14px;background:var(--utv-soft);display:flex;align-items:center;justify-content:center}
.utv-pick2 button>i svg{width:26px;height:26px;fill:var(--utv)}
.utv-pick2 b{display:block;font-size:16px;font-weight:800;color:var(--utv-ink)}
.utv-pick2 small{display:block;font-size:12.5px;color:var(--utv-sub);margin-top:2px}
.utv-pg .utv-padd{aspect-ratio:1;border-radius:10px;background:#f1f5f9;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;cursor:pointer;color:#64748b;font:700 12px Pretendard,sans-serif}
.utv-note.w{color:#b45309;font-weight:700}
.utv-nudge{display:flex;align-items:center;gap:8px;width:100%;min-height:44px;padding:0 4px;border:0;background:none;font:600 13px Pretendard,sans-serif;color:var(--utv-sub);cursor:pointer;text-align:left}
.utv-nudge svg{width:18px;height:18px;fill:var(--utv);flex:none}
.utv-nudge b{color:var(--utv);font-weight:800}
.ufs-pos .hb{border:0;border-radius:10px;background:#fff;font:700 13px Pretendard,sans-serif;color:#334155;padding:0 10px;cursor:pointer}

/* 등대 · 해경 파출소 (UTravel.poiLayer) */
.utv-p{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center;border-radius:50%;background:#fff;box-shadow:0 0 0 1.5px var(--c),0 1px 3px rgba(0,0,0,.3);transform:scale(var(--nvm-sym,1));transform-origin:center}
.utv-p img{width:78%;height:78%;display:block;pointer-events:none}
.utv-pb{flex:0 0 40px;width:40px;height:40px;border-radius:50%;background:#fff;box-shadow:0 0 0 2px var(--c);display:flex;align-items:center;justify-content:center}
.utv-pb img{width:30px;height:30px}
.utv-p.raw{background:none;box-shadow:none;border-radius:0}
.utv-p.raw img{width:100%;height:100%;filter:drop-shadow(0 1px 1.5px rgba(0,0,0,.35))}
.utv-pb.raw{background:none;box-shadow:none;border-radius:0}
.utv-pb.raw img{width:40px;height:40px}
.utv-row.hl{background:var(--utv-soft);border-color:var(--utv)}
/* [여행정보요청] 버튼 — 버튼명 + 아래 강조 'AI가 정보를 찾아드립니다' (항 팝업 머리 버튼 40px · 요청 시트 48px 안에서 두 줄) */
.utv-rq{display:flex;flex-direction:column;align-items:flex-start;line-height:1.15;min-width:0}
.utv-rq b{font-size:13.5px;font-weight:800}
.utv-rq small{font-size:10px;font-weight:800;color:#fde68a;letter-spacing:-.2px;white-space:nowrap}
.utv-go .utv-rq{align-items:center}
.utv-go .utv-rq b{font-size:15px}
.utv-go .utv-rq small{font-size:11px}
.utv-go.alt .utv-rq small{color:#b45309}
/* '더 알고 싶은 것' 프리셋 — 복수 선택 · [더보기] 로 아래에 이어 붙임 */
.utv-qchips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}
.utv-qmore{height:38px;padding:0 14px;border-radius:999px;border:1.5px dashed var(--utv-line);background:#fff;font:800 13.5px Pretendard,sans-serif;color:var(--utv);cursor:pointer}
/* AI 수집정보 — 질의별 답 · 마리나 정보 · 뉴스 · 항해자 이야기 · 사진 (출처 링크) */
.utv-qa{background:var(--utv-soft);border-radius:12px;padding:10px 12px;margin-bottom:8px}
.utv-qa>b{display:block;font-size:13.5px;color:var(--utv)}
.utv-qa p,.utv-ci p{margin:4px 0 0;font-size:14px;line-height:1.55;color:#334155;white-space:pre-wrap}
.utv-csrc{display:flex;flex-wrap:wrap;gap:4px 10px;margin-top:6px}
.utv-csrc a{font-size:12px;font-weight:700;color:#1e6fd9;text-decoration:none;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.utv-cg h5{margin:12px 0 6px;font-size:13px;font-weight:800;color:var(--utv-ink)}
.utv-cg h5 small{font-weight:600;color:var(--utv-sub)}
.utv-ci{padding:8px 0;border-top:1px solid var(--utv-line)}
.utv-ci:first-of-type{border-top:0}
.utv-ci .t{display:block;font-size:14px;font-weight:800;color:var(--utv-ink);text-decoration:none}
.utv-ci .m{display:block;font-size:12px;color:var(--utv-sub);margin-top:2px}
.utv-cph{padding-top:6px}
.utv-cph button{width:64px;height:64px}
/* 항 팝업 [여행정보요청] — (심볼)여행정보요청 / AI가 정보를 찾아드립니다 · 가운데 · 두 줄 글자 크기 비슷하게 · 심볼 크게 */
.ufs-sh .hd .hb.utv-reqb{height:auto;min-height:60px;padding:8px 14px;flex-direction:column;justify-content:center;gap:3px;line-height:1.2;margin-bottom:10px}   /* 아래 항 이름 블록과 띄움 */
.utv-reqb .l1{display:flex;align-items:center;justify-content:center;gap:6px}
.utv-reqb .l1 svg{width:22px;height:22px;flex:none}
.utv-reqb .l1 b{font-size:15px;font-weight:900}
.utv-reqb small{font-size:13.5px;font-weight:800;color:#fde68a;white-space:nowrap}
/* 요청 시트 [요청하기] 도 두 줄 글자 크기 비슷하게 */
.utv-go .utv-rq small{font-size:13.5px}
/* 여행정보요청 진행 표시 (지도) — 낚시포인트 요청과 같은 모양, 도착은 트래블 색 */
.ufs-rq.utv-rqm.done{background:#0e8c7e;color:#fff;cursor:pointer}
.ufs-rq.utv-rqm .ic svg{width:16px;height:16px;fill:#fff;display:block}
/* 여행정보요청 실패 · 관리자 근거 (UTravelReq) */
.utv-failbox{display:flex;flex-direction:column;gap:4px;padding:14px;border-radius:14px;background:#fff7ed;border:1px solid #fed7aa;margin-bottom:10px}
.utv-failbox b{font-size:15px;font-weight:900;color:#9a3412}.utv-failbox small{font-size:13px;font-weight:700;color:#c2410c}
.utv-adm{border-top:2px dashed #fecaca;padding-top:10px}
.utv-adm h4{color:#b91c1c}
.utv-admkv{display:flex;gap:10px;font-size:12.5px;padding:3px 0}.utv-admkv span{flex:0 0 46px;color:#64748b;font-weight:700}.utv-admkv b{font-weight:700;color:#0f172a;word-break:break-all}
.utv-admkv .er{font-style:normal;color:#b91c1c}
.utv-admtries{display:flex;flex-direction:column;gap:4px;margin:6px 0}
.utv-admtry{display:flex;flex-wrap:wrap;gap:4px 8px;padding:6px 8px;border-radius:8px;background:#fef2f2;font-size:12px}.utv-admtry.ok{background:#ecfdf5}
.utv-admtry b{font-weight:800}.utv-admtry span{color:#b91c1c;font-weight:700}.utv-admtry.ok span{color:#047857}.utv-admtry small{flex-basis:100%;color:#475569}
.utv-admd{margin-top:6px;font-size:12px}.utv-admd summary{cursor:pointer;font-weight:800;color:#334155}
.utv-admd pre{white-space:pre-wrap;word-break:break-all;max-height:260px;overflow:auto;background:#f8fafc;border-radius:8px;padding:8px;font-size:11px}
.utv-admlink{display:inline-block;margin-top:8px;font-size:12.5px;font-weight:800;color:#1e6fd9;text-decoration:none}
/* 정보 없는 칸 — 제보 (그 자리 입력 → 확인 → 주황 안내) */
.utv-rep{border:0;background:none;padding:0;font:700 13.5px Pretendard,sans-serif;color:var(--utv);cursor:pointer;text-align:left}
.utv-rep b{font-weight:900}
.utv-rep.done{font-style:normal;color:#ea580c;cursor:default}
.utv-repf{display:flex;align-items:center;gap:6px;flex-wrap:wrap;width:100%}
.utv-repf .ufs-in{flex:1;min-width:120px;height:40px}
.utv-repf .o{display:flex;gap:6px;flex-wrap:wrap}
.utv-repf .o button{height:36px;padding:0 12px;border-radius:999px;border:1.5px solid var(--utv-line);background:#fff;font:800 13px Pretendard,sans-serif;color:#334155;cursor:pointer}
.utv-repf .o button.on{background:var(--utv);border-color:var(--utv);color:#fff}
.utv-repf .ok{flex:none;height:40px;padding:0 14px;border:0;border-radius:10px;background:var(--utv);color:#fff;font:800 13.5px Pretendard,sans-serif;cursor:pointer}
.utv-fr .v[data-ed]{cursor:pointer}
.utv-call.off .utv-rep{font-size:13.5px}
/* AI 수집정보 — 유형마다 3개 + 더보기 10개씩 · 날짜 정렬 */
.utv-cgi.x{display:none}
.utv-cmore{display:block;width:100%;height:40px;margin-top:6px;border-radius:10px;border:1.5px solid var(--utv-line);background:#fff;font:800 13px Pretendard,sans-serif;color:var(--utv);cursor:pointer}
.utv-cmore small{font-weight:700;color:#64748b;margin-left:4px}
.utv-csort{display:flex;gap:4px;padding:3px;border-radius:10px;background:#f1f5f9;margin-bottom:10px}
.utv-csort button{flex:1;height:34px;border:0;border-radius:8px;background:transparent;font:800 13px Pretendard,sans-serif;color:#475569;cursor:pointer}
.utv-csort button.on{background:#fff;color:var(--utv);box-shadow:0 1px 4px rgba(15,23,42,.12)}
.utv-cg.ph .utv-cgl{display:flex;flex-wrap:wrap;gap:6px}
.utv-cg.ph .utv-cgi button{width:84px;height:84px;padding:0;border:0;border-radius:10px;overflow:hidden;background:#f1f5f9;cursor:pointer}
.utv-cg.ph .utv-cgi img{width:100%;height:100%;object-fit:cover;display:block}

/* 비회원 여행정보요청 — 로그인 안내 */
.utv-login{display:flex;flex-direction:column;align-items:center;gap:8px;padding:22px 4px 8px;text-align:center}
.utv-login>svg{width:40px;height:40px;color:var(--utv)}
.utv-login>b{font-size:17px;font-weight:900;color:var(--utv-ink)}
.utv-login>span{font-size:14px;color:var(--utv-sub)}
.utv-login-b{display:flex;gap:8px;width:100%;margin-top:12px}
.utv-login-b .ufs-go{flex:1 1 0;min-width:0;box-sizing:border-box;border:1.5px solid var(--utv);background:var(--utv)}
.utv-login-b .ufs-go.alt{background:#fff;color:var(--utv);border-color:var(--utv)}
/* 항포구 팝업 — [여행정보요청] 은 제목 아래 넓은 한 줄 (플로터 시트도 같게) */
.ufs-sh.utv-hsh .hd{flex-wrap:wrap}
.ufs-sh.utv-hsh .hd .hb.x{order:1}
.ufs-sh.utv-hsh .hd .hbs{order:2;flex:0 0 100%;display:flex;gap:8px;margin:10px 0 0}
.ufs-sh.utv-hsh .hd .hbs .hb.utv-reqb{flex:1 1 0;min-width:0;margin-bottom:0}
.utv-nov{color:var(--ufs-sub,#94a3b8);font-weight:700}

