/* ==========================================================================
   01. Reset, Design Tokens & Base
   ========================================================================== */
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent;
  -webkit-text-size-adjust:100%;text-size-adjust:100%}
:root{
  --green:#60795a; --green-d:#4e6449; --tint:#edf3e9; --tint-line:#cfdec4;
  --cream:#fbf4e4; --todo:#fff6e0; --card:#fff; --sh:0 4px 18px rgba(40,50,38,.08);
  --surface:#f5f6f7; --ink:#20241f; --muted:#8d928b; --line:#ededed;
  --shadow:0 8px 30px rgba(32,36,31,.10);
  --ai-a:#8b7cf0; --ai-b:#4f9fe0; --ai-tint:#f2f0fd;
  --nav-content-height:56px;
  --safe-bottom:clamp(0px,env(safe-area-inset-bottom,0px),34px);
  --stable-app-height:100svh;
}
/* Android는 Material 기본 56dp, iOS는 탭 콘텐츠 49pt를 사용하고
   홈 인디케이터·제스처 영역은 safe-area로 별도 확보한다. */
@supports (-webkit-touch-callout:none){:root{--nav-content-height:49px}}
html,body{width:100%;height:100%;overflow:hidden;background:#fffaf0}
body{
  font-family:'Pretendard Variable',Pretendard,'Noto Sans KR',-apple-system,BlinkMacSystemFont,
    'Apple SD Gothic Neo','Malgun Gothic',sans-serif;
  font-weight:400;letter-spacing:-.01em;
  background:#fff;color:var(--ink);-webkit-font-smoothing:antialiased;
  font-size:16px;line-height:1.4;
  overscroll-behavior:none;
}
/* 로딩 중에는 iPhone 홈 인디케이터·Android 제스처 영역까지 같은 베이지색으로 잇는다. */
body.splashing{background:#fffaf0}
button,input,textarea,select{font:inherit;color:inherit}
button{cursor:pointer}
/* 모바일 브라우저의 더블 탭 확대와 iPhone의 16px 미만 입력창 자동 확대를 막는다.
   화면 글자 체계는 그대로 두고 실제 입력 컨트롤만 iOS 안전 크기를 사용한다. */
button,a,input,textarea,select,[role="button"]{touch-action:manipulation}
@supports (-webkit-touch-callout:none){
  input,textarea,select{font-size:16px!important}
}
/* 전체 터치 피드백 — 버튼/카드류를 누르면 살짝 눌리는 느낌으로 반응(스크롤 중 실수로 누르는 건
   :active가 스크롤 제스처와는 별개로 실제 탭에만 걸리므로 문제없음). 이미 자체 :active 효과가
   있는 요소(.myreset, .bq 등)는 각자 규칙이 이 규칙보다 나중에 선언돼 있어 그대로 우선 적용됨 */
button,a,.mytrip,.mypastrow,.dcard,.hero,.qi,.bq,.stamp,.rc-item,.mysec-more,.prepchip{
  transition:transform .12s ease,opacity .12s ease}
button:active,a:active,.mytrip:active,.mypastrow:active,.dcard:active,.hero:active,
.qi:active,.bq:active,.stamp:active,.rc-item:active,.mysec-more:active{
  transform:scale(.96);opacity:.85}
.mytrip:active,.mypastrow:active,.dcard:active,.hero:active{transform:scale(.985)}
img{max-width:100%;display:block}

/* ---------- 앱 시작 로딩 화면 ----------
   제공받은 원본 이미지는 그대로 사용하고, 실제 앱 초기화가 끝난 뒤 짧게 페이드아웃한다. */
.app-splash{position:fixed;z-index:2000;top:0;bottom:0;left:50%;width:100%;max-width:430px;
  transform:translateX(-50%);overflow:hidden;background:#fffaf0;
  display:flex;align-items:stretch;justify-content:center;opacity:1;visibility:visible;
  transition:opacity .26s ease,visibility .26s ease}
.app-splash.is-leaving{opacity:0;visibility:hidden;pointer-events:none}
.app-splash-img{width:100%;height:100%;object-fit:cover;object-position:center center;
  transform:none;transform-origin:center center}
.app-splash-copy{position:absolute;left:50%;bottom:8.8%;width:40%;max-width:176px;height:44px;
  transform:translateX(-50%);display:flex;align-items:center;justify-content:center}
/* 시안 이미지에 포함된 온글잎 의청수 다경체 로고와 Pretendard Medium 카피를 그대로 사용한다. */
.app-splash-brand,.app-splash-copy p{position:absolute;width:1px;height:1px;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
.app-splash-loader{position:relative;width:100%;height:4px;border-radius:99px;background:#f6dda0;
  overflow:visible;display:block}
.splash-fries{position:absolute;left:0;top:50%;font-size:29px;line-height:1;
  transform:translateY(-50%);filter:drop-shadow(0 1px 1px rgba(139,80,28,.12));
  transition:left .72s cubic-bezier(.22,.75,.28,1)}
.app-splash.is-progressing .splash-fries{left:calc(82% - 24px)}
.app-splash.is-complete .splash-fries{left:calc(100% - 29px);transition-duration:.16s}
@media(prefers-reduced-motion:reduce){
  .app-splash{transition:none}.splash-fries{transition:none}
}

/* ---------- shell ----------
   웹페이지처럼 화면 전체가 스크롤되지 않고, 앱처럼 헤더·하단 네비는 고정된 채
   현재 탭의 내용(.page.on)만 그 안에서 스크롤되도록 만든 고정 프레임 구조.
   .app은 뷰포트 높이에 딱 맞춰 자르고(overflow:hidden), 실제 스크롤은 .page.on 하나가 담당함 */
.app{
  width:100%;max-width:430px;margin:0 auto;height:100vh;height:100svh;height:100dvh;
  background:#fff;position:relative;overflow:hidden;
}
@media(min-width:900px){
  body{padding:24px 0;background:#dfe3dd}
  .app{height:calc(100svh - 48px);height:calc(100dvh - 48px);border-radius:32px;box-shadow:var(--shadow)}
  .app-splash{position:absolute;inset:0;width:auto;max-width:none;transform:none}
}
.page{display:none}
.page.on{display:block;height:100%;overflow-y:auto;overflow-x:hidden;
  -webkit-overflow-scrolling:touch;overscroll-behavior:contain;box-sizing:border-box;
  padding-bottom:calc(var(--nav-content-height) + var(--safe-bottom) + 24px);
  animation:fade .28s cubic-bezier(.22,.9,.32,1)}
@keyframes fade{from{opacity:0;transform:translateY(10px) scale(.99)}to{opacity:1;transform:none}}

.head{padding:calc(26px + env(safe-area-inset-top)) 22px 14px}
.head.boxhead{display:flex;align-items:center;gap:4px;padding-top:calc(14px + env(safe-area-inset-top))}
.backbtn{width:44px;height:44px;min-width:44px;margin:0 0 0 -10px;border:0;background:none;
  color:var(--ink);display:flex;align-items:center;justify-content:center;border-radius:50%;flex:0 0 auto}
.backbtn:active{background:var(--surface)}
.head.boxhead h1{margin:0}
@media(display-mode:standalone){.head{padding-top:calc(20px + env(safe-area-inset-top))}}
.head h1{font-size:29px;font-weight:700;letter-spacing:-.02em}
.rule{height:1px;background:var(--line)}

/* ---------- search ---------- */
.search{margin:6px 22px 20px;height:58px;border:1.6px solid var(--line);border-radius:18px;
  display:flex;align-items:center;gap:12px;padding:0 20px}
.search svg{flex:0 0 auto;color:var(--muted)}
.search input{border:0;outline:0;background:none;width:100%;font-size:15.5px;font-weight:400}
.search input::placeholder{color:#b3b8b2}

/* ---------- home ---------- */
.topgap{height:calc(18px + env(safe-area-inset-top))}
.hero{display:block;width:calc(100% - 44px);margin:14px 22px 0;
  background:linear-gradient(125deg,#fbfcf7 0%,#edf3e8 58%,#f8f7ee 100%);
  border-radius:24px;padding:20px 22px 16px;position:relative;overflow:hidden;color:#263b2a;
  border:1px solid #e3e9dc;text-align:left;min-height:168px;height:168px}
.hero .hchar{position:absolute;right:8px;top:14px;width:39%;height:140px;max-width:158px;
  object-fit:contain;border-left:1px dashed rgba(69,96,64,.28);padding-left:12px;box-sizing:border-box;
  opacity:1;transition:opacity .45s ease,transform .45s ease;z-index:2}
.hero .hchar.swap{opacity:0;transform:scale(.96)}
.hero .hname{font-size:18px;font-weight:700;letter-spacing:-.03em;max-width:58%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hero .hmeta{font-size:12px;font-weight:500;color:#687968;margin-top:5px;max-width:58%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hero .hdday{display:inline-block;font-size:32px;font-weight:800;letter-spacing:-.02em;line-height:1.1;margin-top:12px;color:#315b36}
.hero .hafter{display:inline-block;font-size:11px;font-weight:500;color:#738273;margin-left:7px}
.hero-notch{position:absolute;top:50%;width:18px;height:18px;border-radius:50%;background:#fff;transform:translateY(-50%);z-index:5}
.hero-notch.left{left:-9px}.hero-notch.right{right:-9px}
.hero-holo{position:absolute;right:8px;top:14px;width:39%;height:140px;max-width:158px;z-index:3;pointer-events:none;
  background:linear-gradient(108deg,transparent 28%,rgba(255,255,255,.04) 38%,rgba(221,242,231,.34) 47%,rgba(244,225,235,.22) 53%,transparent 66%);
  background-size:260% 100%;background-position:180% 0;mix-blend-mode:screen;animation:stampHolo 7s ease-in-out infinite}
@keyframes stampHolo{0%,58%{background-position:180% 0}88%,100%{background-position:-80% 0}}
@media(prefers-reduced-motion:reduce){.hero-holo{animation:none;background-position:46% 0}}
.hero-stamp-frame{position:absolute;right:8px;top:14px;width:39%;height:140px;max-width:158px;
  border-left:1px dashed rgba(69,96,64,.28);padding-left:12px;box-sizing:border-box;z-index:2}
.hero-stamp-frame .hchar{position:static;width:100%;height:100%;max-width:none;padding:0;border:0;
  border-radius:50%;clip-path:circle(50%);object-fit:contain}
.hero-stamp-frame .hero-holo{inset:0 0 0 12px;width:auto;height:100%;max-width:none;border-radius:50%;clip-path:circle(50%)}
.hpills{display:flex;gap:6px;margin-top:10px;flex-wrap:nowrap;max-width:58%}
.hp{background:var(--cream);color:#3d4a39;border-radius:999px;padding:5px 10px;
  font-size:11px;font-weight:500;display:inline-flex;align-items:center;gap:5px;white-space:nowrap;
  letter-spacing:-.02em}
.hp img{width:13px;height:13px;flex:0 0 auto}

.quick{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:22px 22px 0}
.quick .qi{background:var(--card);border:0;border-radius:22px;aspect-ratio:1;box-shadow:var(--sh);
  display:grid;place-items:center;width:100%}
.quick .qi svg{width:29px;height:29px;color:#93a58c}
.quick .ql{text-align:center;font-size:12.5px;font-weight:500;margin-top:9px;color:#828a7e}

.aiflat{width:calc(100% - 44px);box-sizing:border-box;background:linear-gradient(90deg,#fdfefd,var(--tint));border:0;border-radius:18px;
  margin:18px 22px 0;padding:16px 16px 16px 16px;position:relative;text-align:left;min-height:134px;overflow:hidden}
.aiflat-row{display:flex;gap:11px;align-items:flex-start;padding-right:96px}
.aiflat-ico{width:38px;height:38px;border-radius:11px;flex:0 0 auto;display:block;object-fit:contain}
.aiflat-tt{flex:1;min-width:0}
.aiflat-h{font-size:15px;font-weight:700;letter-spacing:-.02em;color:var(--ink)}
.aiflat-s{font-size:12px;font-weight:400;color:var(--muted);margin-top:3px;line-height:1.5}
.aiflat-char{position:absolute;right:4px;top:2px;width:118px;height:auto;pointer-events:none}
.aiflat-cta{position:absolute;right:14px;bottom:12px;display:flex;align-items:center;gap:2px;
  font-size:11px;font-weight:600;color:var(--green-d)}
.aiflat-cta svg{width:11px;height:11px}
.prepchip{display:flex;align-items:center;gap:5px;background:var(--surface);color:var(--muted);
  border-radius:999px;padding:8px 12px;font-size:12px;font-weight:600;white-space:nowrap}
.prepchip .dot{width:16px;height:16px;border-radius:50%;flex:0 0 auto;display:grid;place-items:center}
.prepchip .dot svg{width:10px;height:10px}
.prepchip.on{background:var(--tint);color:var(--green-d)}
.prepchip.on .dot{background:var(--green);color:#fff}
.prepchip.off .dot{border:1.6px solid #d5d9d1}
.prepchip.more{margin-left:auto;color:var(--muted);padding:8px 12px}
.prepstat{width:calc(100% - 44px);box-sizing:border-box;background:none;border:0;text-align:left;
  margin:16px 22px 0;padding:0;display:block}
.prepstat-top-btn{width:100%;background:none;border:0;padding:0;text-align:left;display:block}
.prepstat-top{display:flex;justify-content:space-between;align-items:baseline}
.prepstat-h{font-size:15px;font-weight:700;color:var(--ink);letter-spacing:-.02em;line-height:1.35}
.prepstat-frac{font-size:12px;color:var(--muted);font-weight:500}
.prepstat-barwrap{position:relative;margin-top:34px}
.prepstat-bar{height:10px;border-radius:99px;background:var(--surface);overflow:hidden}
.prepstat-bar i{display:block;height:100%;width:0%;background:var(--green);border-radius:99px;
  transition:width .4s ease}
.prepstat-walk{position:absolute;bottom:2px;left:0%;width:54px;height:auto;
  transform:translateX(-38%);transition:left .4s ease;pointer-events:none}
.prepstat-chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px}

.today-home{margin:22px 22px 0}
.today-home-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:11px}
.today-home-title{font-size:15px;font-weight:700;letter-spacing:-.02em;color:var(--ink);line-height:1.35}
.today-home-count{font-size:12px;font-weight:500;color:var(--muted);white-space:nowrap}
.today-home-card{background:transparent;border-radius:18px;padding:0}
.today-home-track{display:flex;gap:8px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;
  padding:1px 22px 8px 0;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.today-home-track::-webkit-scrollbar{display:none}
.today-home-row{width:100%;border:0;background:#fff;border-radius:14px;padding:10px 12px;
  display:grid;grid-template-columns:72px minmax(0,1fr) 34px;align-items:center;gap:11px;text-align:left;
  flex:0 0 calc(100% - 28px);scroll-snap-align:start;box-shadow:0 3px 12px rgba(35,44,32,.055)}
.today-home-row+.today-home-row{margin-top:0}
.today-home-row.is-first{position:relative;min-height:76px;padding:14px 12px 14px 16px;
  background:linear-gradient(100deg,var(--tint),#fff);box-shadow:var(--sh);overflow:hidden}
.today-home-row.is-first::before{content:"";position:absolute;left:0;top:13px;bottom:13px;width:4px;
  border-radius:0 4px 4px 0;background:var(--green)}
.today-home-row.is-first .today-home-time{background:var(--green);color:#fff}
.today-home-row.is-first .today-home-name{font-size:15px}
.today-home-time{min-height:42px;border-radius:11px;background:var(--tint);color:var(--green-d);
  display:grid;place-items:center;font-size:15px;font-weight:700;letter-spacing:-.01em}
.today-home-copy{min-width:0}
.today-home-name{display:block;font-size:14px;font-weight:700;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.today-home-sub{display:block;margin-top:3px;font-size:11.5px;font-weight:400;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.today-home-map{width:34px;height:34px;border:0;border-radius:11px;background:#fff;color:var(--green-d);display:grid;place-items:center}
.today-home-map svg{width:18px;height:18px}
.today-home-more{width:100%;min-height:38px;border:0;background:transparent;color:var(--green-d);
  font-size:12.5px;font-weight:700;display:flex;align-items:center;justify-content:center;gap:2px;margin-top:3px}
.today-home-more svg{width:13px;height:13px}
.today-home-empty{width:100%;border:0;background:var(--surface);border-radius:14px;min-height:58px;
  color:var(--muted);font-size:12.5px;font-weight:500;display:flex;align-items:center;justify-content:center;gap:5px}
.aiflat{display:none}

/* 일정 추가 시트의 AI 입력: 보조 기능이므로 기본 접힘 + 앱 전체 세이지 톤과 통일
   (보라/파랑 강조는 홈 화면 .aiflat 타일에만 남겨두고 여기서는 쓰지 않음) */
.aifillbox{background:var(--tint);border:0;border-radius:14px;overflow:hidden}
.aifilltoggle{width:100%;display:flex;align-items:center;gap:7px;background:none;border:0;
  padding:12px 12px;font-size:13.5px;font-weight:600;color:var(--green-d);text-align:left}
.aifilltoggle svg{width:16px;height:16px;flex:0 0 auto}
.aifilltoggle .chev{margin-left:auto;transition:transform .15s ease}
.aifillbox.open .aifilltoggle .chev{transform:rotate(180deg)}
.aifillbody{display:none;padding:0 12px 12px}
.aifillbox.open .aifillbody{display:block}
.aifillbtn{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;
  background:var(--green);color:#fff;border:0;
  border-radius:12px;padding:10.5px;font-size:13.5px;font-weight:600;margin-top:8px}
.aifillbtn svg{width:16px;height:16px;flex:0 0 auto}
.itemmode{display:grid;grid-template-columns:1fr 1fr;gap:4px;background:var(--surface);border-radius:13px;padding:4px;margin-bottom:14px}
.itemmode button{min-height:42px;border:0;border-radius:10px;background:transparent;color:var(--muted);font-size:13px;font-weight:600}
.itemmode button.on{background:#fff;color:var(--green-d);box-shadow:0 2px 8px rgba(55,70,50,.08)}
/* 일정 입력은 선 대신 옅은 면으로 묶는다. 날짜와 시작·종료 시간은 모바일에서도
   한 줄의 2열로 보이되, 실제 date/time input과 기존 저장 데이터 형식은 그대로 유지한다. */
.schedule-form{padding-bottom:0}
.schedule-form .f{margin-bottom:16px}
.schedule-form .f label{font-size:12.5px;font-weight:600;color:#676d65;margin-bottom:7px}
.schedule-form .f>input,.schedule-form .f>textarea,.schedule-form .f>select,
.schedule-form .field-surface{width:100%;border:0;background:#f5f6f3;border-radius:14px;box-shadow:none}
.schedule-form .f>input,.schedule-form .f>textarea,.schedule-form .f>select{padding:15px 16px}
.schedule-form .aifillbody textarea{width:100%;border:0;background:rgba(255,255,255,.86);
  border-radius:12px;padding:13px 14px;outline:0;resize:vertical}
.schedule-form .f>input:focus,.schedule-form .f>textarea:focus,.schedule-form .f>select:focus{
  border:0;box-shadow:0 0 0 2px rgba(96,121,90,.16)}
.schedule-form .field-surface{display:flex;align-items:center;min-height:52px;padding:0 13px;overflow:hidden}
.schedule-form .field-surface>svg{width:18px;height:18px;flex:0 0 auto;color:#697068;margin-right:9px;pointer-events:none}
.schedule-form .field-surface input{min-width:0;width:100%;height:52px;border:0;background:transparent;
  padding:0;font-size:14px;outline:0;-webkit-appearance:none;appearance:none;color:var(--ink)}
.schedule-form .field-surface:focus-within{box-shadow:0 0 0 2px rgba(96,121,90,.16)}
.schedule-datetime-row{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:10px}
.schedule-datetime-row .f{min-width:0}
.schedule-date-control input{font-size:13.5px}
.schedule-time-control{padding-left:11px;padding-right:9px}
.schedule-time-control>svg{margin-right:5px}
.schedule-time-control input{flex:1 1 0;width:0;text-align:center;font-size:13px;letter-spacing:-.025em}
.schedule-time-control .time-arrow{flex:0 0 auto;color:#9aa097;font-size:15px;margin:0 1px;pointer-events:none}
.schedule-form input[type="date"],.schedule-form input[type="time"]{color-scheme:light}
.schedule-form input[type="date"]::-webkit-calendar-picker-indicator,
.schedule-form input[type="time"]::-webkit-calendar-picker-indicator{margin:0;padding:0;opacity:.48}
.kind-chips{display:flex;flex-wrap:wrap;gap:7px}
.kind-chip{border:0;background:#f5f6f3;color:#343934;border-radius:999px;min-height:38px;
  padding:0 14px;font-size:12.5px;font-weight:600}
.kind-chip.on{background:var(--tint);color:var(--green-d);box-shadow:inset 0 0 0 1px rgba(96,121,90,.12)}
.kind-chip.custom{color:var(--green-d)}
.kind-chip.custom svg{width:13px;height:13px;vertical-align:-2px;margin-right:3px}
.schedule-form .detailbox{margin-top:2px;margin-bottom:16px}
.schedule-form .detailbox summary{background:#f7f7f4;border-radius:13px;padding:12px 14px;color:#686e66}
.schedule-form .detailbox .detailbody{padding-top:12px}
.schedule-form .acts.sticky{border-top:0;margin-top:16px;padding-top:10px}
@media(max-width:370px){
  .schedule-datetime-row{grid-template-columns:minmax(0,.88fr) minmax(0,1.12fr);gap:7px}
  .schedule-form .field-surface{padding-left:10px;padding-right:8px}
  .schedule-form .field-surface>svg{width:16px;height:16px;margin-right:5px}
  .schedule-time-control input{font-size:12px}
}
.importstatus{display:none;min-width:0;margin:10px 0 12px;padding:12px 13px;border-radius:14px;background:var(--tint);
  color:var(--green-d);font-size:12.5px;line-height:1.45;align-items:center;gap:10px;overflow:hidden}
.importstatus:not(:empty){display:flex}
.importstatus .import-spin{width:18px;height:18px;border-radius:50%;border:2px solid rgba(82,109,77,.18);border-top-color:var(--green);animation:importSpin .8s linear infinite;flex:0 0 auto}
.importstatus .import-status-copy{min-width:0;flex:1;overflow-wrap:anywhere}
.importstatus button{border:0;background:rgba(255,255,255,.72);color:var(--green-d);border-radius:999px;padding:7px 10px;font:inherit;font-weight:650;flex:0 0 auto}
@keyframes importSpin{to{transform:rotate(360deg)}}
.importpreview{min-width:0;max-width:100%;margin:14px 0;overflow:hidden}
.importpreview-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 1px 10px}
.importpreview-head h3{min-width:0;font-size:15px;margin:0;letter-spacing:-.02em}
.importpreview-head button{border:0;background:var(--surface);color:var(--green-d);border-radius:999px;padding:7px 10px;font-size:11.5px;font-weight:650;white-space:nowrap}
.importrow{min-width:0;max-width:100%;box-sizing:border-box;background:#f6f8f3;border:0;border-radius:18px;padding:13px;margin-bottom:10px;overflow:hidden}
.importrow-top{display:flex;align-items:center;gap:9px;margin-bottom:11px}.importrow-top input{width:20px;height:20px;accent-color:var(--green);flex:0 0 auto}
.importrow-top b{font-size:13px;flex:1;min-width:0}.importrow-top button{border:0;background:#fff;color:var(--muted);border-radius:999px;padding:7px 10px;font-size:11.5px;flex:0 0 auto}
.importrow-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;min-width:0}
.importfield{display:block;min-width:0}.importfield.full{grid-column:1/-1}.importfield>span{display:block;margin:0 2px 5px;color:#747b72;font-size:10.5px;font-weight:650}
.importfield input,.importfield select,.importfield textarea{display:block;width:100%;max-width:100%;min-width:0;box-sizing:border-box;border:0;border-radius:11px;background:#fff;color:var(--ink);font-family:inherit;font-size:12px;outline:0}
.importfield input,.importfield select{height:42px;padding:0 10px}.importfield textarea{min-height:64px;padding:10px;resize:vertical;line-height:1.45}
.importfield input:focus,.importfield select:focus,.importfield textarea:focus{box-shadow:0 0 0 2px rgba(96,121,90,.16)}
.needcheck{display:inline-flex;max-width:100%;box-sizing:border-box;font-size:10.5px;color:#84683e;background:#fff6df;border-radius:999px;padding:6px 9px;margin-top:9px;overflow-wrap:anywhere}
.import-add{position:sticky;bottom:0;width:100%;min-height:50px;border:0;border-radius:14px;background:var(--green);color:#fff;font-size:14px;font-weight:700;box-shadow:0 8px 22px rgba(70,90,60,.18)}
@media(max-width:350px){.importrow-grid{grid-template-columns:1fr}.importfield.full{grid-column:auto}}
.stamp-only-btn{border:0;background:none;color:var(--muted);border-radius:999px;padding:4px 6px;font-size:11px;font-weight:600;text-decoration:underline;text-underline-offset:2px}
.stamp-only-preview{display:grid;place-items:center;min-height:180px}.stamp-only-preview img{width:160px;height:160px;border-radius:50%;object-fit:contain;clip-path:circle(50%)}
/* 상세 정보 accordion (예약번호·전화번호·비용) */
.detailbox{margin-bottom:14px}
.detailbox summary{list-style:none;cursor:pointer;display:flex;align-items:center;
  font-size:13.5px;font-weight:600;color:var(--ink);padding:2px 0}
.detailbox summary::-webkit-details-marker{display:none}
.detailbox summary .chev{margin-left:auto;width:16px;height:16px;color:var(--muted);transition:transform .15s ease}
.detailbox[open] summary .chev{transform:rotate(180deg)}
.detailbox .detailbody{padding-top:14px}
.acts.sticky{position:sticky;bottom:0;margin:20px -22px 0;background:#fff;
  /* 이 버튼바는 항상 .sheetin(모달) 안에서만 쓰이고, .sheetin이 이미 하단 safe-area 여백을
     padding-bottom으로 확보하고 있음 — 여기서 또 더하면 안전영역이 중복 적용돼 버튼 아래
     공백이 과도하게 커짐. 그래서 여기는 고정 여백만 사용 */
  padding:14px 22px 14px;border-top:1px solid var(--line)}
.acts.sticky button{min-height:52px}

/* ---------- AI 일정 추천 결과 ---------- */
.airec{margin-top:14px;background:var(--ai-tint);border:1.4px solid rgba(139,124,240,.28);
  border-radius:16px;padding:14px}
.airec-h{display:flex;align-items:center;gap:6px;font-size:13.5px;font-weight:700;color:#6a5fc4;margin-bottom:10px}
.airec-h svg{width:16px;height:16px;flex:0 0 auto}
.airec-day{font-size:12px;font-weight:700;color:#6a5fc4;margin:14px 0 6px;letter-spacing:-.01em}
.airec-day:first-of-type{margin-top:0}
.airec-item{display:flex;gap:10px;align-items:flex-start;padding:9px 10px;border-radius:12px;
  background:#fff;margin-bottom:6px}
.airec-item input[type=checkbox]{width:18px;height:18px;margin-top:1px;accent-color:var(--ai-a);flex:0 0 auto}
.airec-item .ait{font-size:13.5px;font-weight:600;color:var(--ink);line-height:1.5}
.airec-item .aia{font-size:12px;color:var(--muted);font-weight:400;margin-top:2px}
.airecApply{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;
  background:linear-gradient(120deg,var(--ai-a),var(--ai-b));color:#fff;border:0;
  border-radius:14px;padding:14px;font-size:14.5px;font-weight:700;margin-top:12px;
  box-shadow:0 8px 18px -6px rgba(107,92,220,.45)}

/* ---------- 홈 AI 도우미: 필요한 기능을 고른 뒤에만 내용을 펼친다 ---------- */
.ai-assistant-sheet{position:relative;max-height:92vh;max-height:92svh;padding-top:10px}
.ai-assistant-sheet>.grab{margin-bottom:2px}
.ai-assistant-sheet>img:first-of-type{display:block!important;width:146px!important;height:112px!important;
  object-fit:contain!important;margin:0 auto 4px!important}
.ai-sheet-close{position:absolute;right:18px;top:28px;border:0;background:none;padding:8px;
  color:#737971;font-size:13.5px;font-weight:600;font-family:inherit}
.ai-assistant-head{text-align:center;padding:0 38px}
.ai-assistant-head h2{margin:0;font-size:23px;font-weight:800;letter-spacing:-.035em}
.ai-assistant-head p{margin-top:5px;color:var(--muted);font-size:13px;font-weight:400}
.ai-mode-tabs{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:20px auto 0;max-width:310px}
.ai-mode-tab{min-height:48px;border:1.3px solid var(--line);border-radius:999px;background:#fff;
  color:#525a50;font-size:14px;font-weight:650;font-family:inherit;display:flex;align-items:center;
  justify-content:center;gap:7px;transition:background .16s,border-color .16s,color .16s}
.ai-mode-tab svg{width:19px;height:19px;flex:0 0 auto}
.ai-mode-tab.on{background:var(--tint);border-color:var(--tint-line);color:var(--green-d)}
.ai-mode-empty{padding:34px 12px 18px;text-align:center;color:#9ba197;font-size:13px;line-height:1.6}
.ai-mode-panel{display:none;margin-top:20px}
.ai-mode-panel.on{display:block}
.ai-guide{background:var(--surface);border-radius:18px;padding:16px 17px;margin-bottom:14px}
.ai-guide b{display:block;font-size:15px;color:var(--ink);font-weight:700;letter-spacing:-.02em}
.ai-guide span{display:block;font-size:12px;color:var(--muted);line-height:1.55;margin-top:4px}
.ai-recommend-fields{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.ai-recommend-field{min-width:0;border:1.3px solid var(--line);border-radius:16px;background:#fff;padding:11px 10px}
.ai-recommend-field label{display:flex;align-items:center;gap:5px;color:var(--green-d);font-size:11.5px;
  font-weight:700;margin-bottom:5px;white-space:nowrap}
.ai-recommend-field label svg{width:15px;height:15px;flex:0 0 auto}
.ai-recommend-field input{display:block;width:100%;min-width:0;border:0;outline:0;background:transparent;
  color:var(--ink);font-family:inherit;font-size:12px;font-weight:500;letter-spacing:-.02em;padding:0}
.ai-recommend-field input::placeholder{color:#a7ada4}
.ai-primary{width:100%;min-height:52px;margin-top:13px;border:0;border-radius:16px;background:var(--green);
  color:#fff;font-family:inherit;font-size:15px;font-weight:700;display:flex;align-items:center;
  justify-content:center;gap:8px}
.ai-primary:disabled{opacity:.58}
.ai-primary svg{width:18px;height:18px}
.ai-rec-output{font-size:13px;line-height:1.6;margin-top:10px;white-space:pre-wrap}
.ai-assistant-sheet .airec{background:var(--tint);border-color:var(--tint-line)}
.ai-assistant-sheet .airec-h,.ai-assistant-sheet .airec-day{color:var(--green-d)}
.ai-assistant-sheet .airecApply{background:var(--green);box-shadow:none}
.ai-chat-list{height:min(38vh,290px);min-height:210px;overflow-y:auto;padding:4px 2px 12px;
  display:flex;flex-direction:column;gap:10px;overscroll-behavior:contain}
.ai-msg{display:flex;align-items:flex-end;gap:7px;max-width:90%}
.ai-msg.user{align-self:flex-end;justify-content:flex-end}
.ai-msg.bot{align-self:flex-start}
.ai-msg-avatar{width:28px;height:28px;border-radius:50%;background:var(--tint);display:grid;
  place-items:center;color:var(--green-d);font-size:15px;flex:0 0 auto}
.ai-msg-bubble{padding:11px 13px;border-radius:16px;font-size:13px;line-height:1.55;white-space:pre-wrap;
  word-break:break-word;background:var(--surface);color:var(--ink)}
.ai-msg.user .ai-msg-bubble{background:var(--green);color:#fff;border-bottom-right-radius:5px}
.ai-msg.bot .ai-msg-bubble{border-bottom-left-radius:5px}
.ai-chat-compose{display:flex;align-items:flex-end;gap:8px;padding:7px;border:1.3px solid var(--line);
  border-radius:18px;background:#fff}
.ai-chat-compose textarea{flex:1;min-width:0;min-height:38px;max-height:104px;resize:none;border:0;outline:0;
  padding:9px 8px;background:none;font-family:inherit;font-size:14px;line-height:1.4;color:var(--ink)}
.ai-chat-compose textarea::placeholder{color:#a9aea6}
.ai-chat-send{width:42px;height:42px;border:0;border-radius:14px;background:var(--green);color:#fff;
  display:grid;place-items:center;flex:0 0 auto}
.ai-chat-send:disabled{opacity:.55}
.ai-chat-send svg{width:19px;height:19px}
@media(max-width:360px){
  .ai-recommend-fields{grid-template-columns:1fr 1fr}
  .ai-recommend-field:last-child{grid-column:1/-1}
}

.row2{display:grid;grid-template-columns:1.05fr 1fr;gap:13px;margin:20px 22px 0;align-items:stretch}
.row2>*{min-width:0}
.dcard{background:var(--card);border:0;border-radius:16px;box-shadow:var(--sh);padding:18px 18px 18px;
  text-align:left;display:flex;flex-direction:column;justify-content:space-between;min-height:186px;gap:16px;min-width:0}
.dtop{border-left:4px solid var(--green);padding-left:12px}
.dow{display:block;font-size:17px;font-weight:400;color:#9aa396;letter-spacing:.02em}
.dnum{display:block;font-size:46px;font-weight:700;line-height:1.05;letter-spacing:-.03em;color:#2b3328}
.dline{height:1px;background:var(--line);margin:2px 0}
.dinfo{display:flex;align-items:flex-start;gap:6px;color:#9aa396;font-size:10.5px;font-weight:500;line-height:1.5;word-break:keep-all;letter-spacing:-.02em}
.dinfo svg{width:14px;height:14px;flex:0 0 auto;margin-top:1px}
.dcta{display:block;text-align:center;background:var(--tint);color:var(--green-d);
  border-radius:11px;padding:9px;font-size:12.5px;font-weight:700}
.todo{background:var(--card);border:0;border-radius:16px;box-shadow:var(--sh);padding:16px 16px 18px;text-align:left;min-width:0;
  display:flex;flex-direction:column;gap:0}
.todo .th{display:flex;align-items:baseline;justify-content:space-between;
  font-size:15px;font-weight:700;color:var(--ink);padding-bottom:10px}
.todo .thfrac{font-size:12px;font-weight:600;color:var(--muted)}
.todo .prog{height:4px;border-radius:2px;background:var(--surface);overflow:hidden}
.todo .prog i{display:block;height:100%;background:var(--green);border-radius:2px;transition:width .35s ease}
.todo ul{list-style:none;margin-top:12px;flex:1}
.todo li{display:flex;align-items:center;gap:9px;padding:6px 0;font-size:12.5px;font-weight:400;color:#6f7568;min-width:0}
.todo li .cc{width:19px;height:19px;border-radius:50%;background:#fff;border:1.5px solid var(--line);
  flex:0 0 auto;display:grid;place-items:center;color:transparent}
.todo li.done .cc{background:var(--green);border-color:var(--green);color:#fff}
.todo li.done span{text-decoration:line-through;color:#b4b8ae}
.todo li span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;flex:1 1 auto}
.todo .tmore{display:flex;align-items:center;justify-content:center;gap:2px;margin-top:10px;
  background:var(--surface);color:var(--green-d);border-radius:11px;padding:9px;font-size:12.5px;font-weight:700}
.todo .tmore svg{width:13px;height:13px}

.wx{background:var(--card);border-radius:22px;box-shadow:var(--sh);margin:18px 22px 0;
  padding:18px;display:grid;grid-template-columns:118px 1fr;gap:14px;align-items:center}
.wxnow{position:relative;padding-right:6px;min-width:0}
.wxc{font-size:12.5px;color:#8d9489;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.wxt{font-size:38px;font-weight:700;letter-spacing:-.03em;color:#7b8278;line-height:1.1}
.wxs{font-size:11.5px;color:#a2a89e;font-weight:400;margin-top:2px}
.wxi{position:absolute;right:-14px;top:16px;font-size:30px}
.wxh{display:grid;grid-template-columns:repeat(5,1fr);gap:2px;text-align:center}
.wxh .hh{font-size:11px;color:#8d9489;font-weight:400}
.wxh .hi{font-size:19px;margin:3px 0 1px}
.wxh .hp2{font-size:9.5px;color:#7fb6d8;font-weight:500}
.wxh .ht{font-size:12.5px;font-weight:400;color:#4c5348;margin-top:1px}

/* ---------- schedule ---------- */
.shead{display:flex;align-items:flex-start;gap:8px;padding:calc(22px + env(safe-area-inset-top)) 22px 12px}
.sh-l{flex:1;min-width:0}
.shead h1{font-size:24px;font-weight:700;letter-spacing:-.03em}
.ssub{font-size:13px;color:var(--muted);font-weight:400;margin-top:4px}
.ibtn{width:40px;height:40px;border-radius:14px;border:0;background:var(--surface);
  display:grid;place-items:center;color:#5c6359;flex:0 0 auto}
.ibtn svg{width:19px;height:19px}
.ibtn.solid{background:var(--green);color:#fff}
.searchwrap{display:none;padding:0 22px 4px}
.searchwrap.on{display:block}
.searchwrap .search{margin:0 0 12px;height:52px;border-radius:16px}
.search .clr{background:none;border:0;color:#b6bbb2;font-size:15px;padding:4px}

.days{display:flex;gap:9px;overflow-x:auto;padding:6px 22px 14px;scrollbar-width:none}
.days::-webkit-scrollbar{display:none}
.day{flex:0 0 auto;border:1.5px solid var(--line);background:#fff;border-radius:16px;
  padding:9px 15px;white-space:nowrap;color:#6d7469;text-align:center;line-height:1.25}
.day .dd{display:block;font-size:15px;font-weight:500;letter-spacing:-.02em}
.day .dl{display:block;font-size:10.5px;color:#a7ada3;font-weight:400;margin-top:2px}
.day.on{background:var(--tint);border-color:var(--tint-line);color:#33452b}
.day.on .dd{font-weight:700}
.day.on .dl{color:#6d8560}
.day.today .dl{color:var(--green);font-weight:600}

.daysum{padding:0 22px 14px;font-size:12.5px;color:var(--muted);font-weight:400;
  display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.daysum b{font-weight:600;color:#5c6359}
.daysum .dot{width:3px;height:3px;border-radius:50%;background:#cfd4cb;flex:0 0 auto}

/* 지금/다음 카드 */
.now{margin:0 22px 18px;border-radius:20px;padding:16px 18px;background:var(--green);color:#fff;
  display:block;border:0;text-align:left;cursor:pointer}
.now.next{background:var(--tint);color:#2f3d29}
.now .nl{font-size:11.5px;font-weight:600;letter-spacing:.04em;opacity:.85;
  display:flex;align-items:center;gap:6px}
.now .nl .pulse{width:7px;height:7px;border-radius:50%;background:#fff;
  box-shadow:0 0 0 0 rgba(255,255,255,.7);animation:pl 2s infinite}
.now.next .nl .pulse{background:var(--green);box-shadow:0 0 0 0 rgba(96,121,90,.5)}
@keyframes pl{70%{box-shadow:0 0 0 9px rgba(255,255,255,0)}100%{box-shadow:0 0 0 0 rgba(255,255,255,0)}}
@media(prefers-reduced-motion:reduce){.now .nl .pulse{animation:none}}
.now h3{font-size:20px;font-weight:700;letter-spacing:-.03em;margin-top:8px}
.now .nm2{font-size:13px;opacity:.9;margin-top:5px;font-weight:400}
.now .nacts{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap}
.nact{background:rgba(255,255,255,.18);border:0;color:#fff;border-radius:12px;
  padding:9px 13px;font-size:12.5px;font-weight:500;display:inline-flex;align-items:center;gap:6px}
.now.next .nact{background:#fff;color:#3f5236}
.nact svg{width:14px;height:14px}

/* 타임라인 */
.ev{display:grid;grid-template-columns:52px 16px 1fr;gap:10px;padding:0 22px;
  align-items:start;position:relative}
.ev .t{font-weight:500;font-size:13.5px;color:#5c6359;padding-top:16px;text-align:right;
  font-variant-numeric:tabular-nums}
.ev .axis{position:relative;padding-top:16px}
.ev .axis i{display:block;width:9px;height:9px;border-radius:50%;background:#d7dcd3;
  margin:5px auto 0;position:relative;z-index:1}
.ev .axis::before{content:"";position:absolute;left:50%;top:0;bottom:-2px;width:1.5px;
  background:var(--line);transform:translateX(-50%)}
.ev:first-of-type .axis::before{top:22px}
.ev:last-of-type .axis::before{bottom:auto;height:26px}
.ev .body{padding:14px 0 16px;border-bottom:1px solid var(--line);min-width:0}
.ev:last-of-type .body{border-bottom:0}
.ev h3{font-size:17px;font-weight:600;letter-spacing:-.03em}
.ev .kind{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:13px;
  margin-top:6px;font-weight:400}
.ev.past{opacity:.45}
.ev.live .axis i{background:var(--green);box-shadow:0 0 0 4px var(--tint)}
.ev.live h3{color:var(--green-d);font-weight:700}
.ev.upnext .axis i{background:var(--green)}
.badges{display:flex;gap:7px;flex-wrap:wrap;margin-top:9px}
.badge{background:var(--surface);border-radius:10px;padding:7px 11px;font-size:12px;
  font-weight:400;color:#5c6359;border:0}
.badge.res{background:var(--tint);color:#3f5236;font-weight:500}
.badge.go{background:var(--green);color:#fff;font-weight:500;display:inline-flex;
  align-items:center;gap:5px;text-decoration:none}
.badge.go svg{width:12px;height:12px}
.badge.tel{background:var(--surface);color:#5c6359;display:inline-flex;align-items:center;
  gap:5px;text-decoration:none}
.badge.tel svg{width:12px;height:12px}
.notes{list-style:none;margin-top:9px}
.notes li{position:relative;padding-left:11px;font-size:12.5px;color:#8a908650;
  color:#8a9086;font-weight:400;line-height:1.65}
.notes li::before{content:"";position:absolute;left:0;top:9px;width:3px;height:3px;
  border-radius:50%;background:#c3c9bf}
.notes .rest{display:none}
.notes.open .rest{display:block}
.notes .more{background:none;border:0;color:var(--green);font-size:12px;font-weight:500;
  padding:5px 0 0;margin-left:11px}
.pax{display:flex;gap:7px;flex-wrap:wrap;margin-top:8px}
.paxchip{border:1.4px solid var(--line);border-radius:12px;padding:8px 12px;font-size:12.5px;
  font-weight:400;background:#fff}
.paxchip b{color:var(--green);font-weight:600;margin-right:6px}
.ev{cursor:pointer}
.empty{padding:56px 30px;text-align:center;color:var(--muted);font-size:15px;font-weight:400;line-height:1.8}
.empty img{display:block;width:112px;height:auto;margin:0 auto 14px;opacity:.95}

.expTop{display:flex;flex-direction:column;align-items:center;text-align:center;
  padding:22px 20px 20px;margin:0 0 6px;border:0;background:none;width:100%}
.expTop .expicon{width:88px;height:88px;object-fit:contain;margin-bottom:8px}
.expTop .expamt{font-size:29px;font-weight:800;letter-spacing:-.03em;color:var(--ink)}
.expTop .explabel{font-size:13px;color:var(--muted);margin-top:5px;font-weight:500}
.expTop .explabel b{color:var(--green-d);font-weight:700}

/* ---------- segment ---------- */
.seg{margin:16px 22px 6px;background:var(--surface);border-radius:20px;padding:7px;
  display:grid;grid-template-columns:repeat(4,1fr);gap:5px}
.seg button{border:0;background:none;padding:14px 0;border-radius:15px;font-size:15px;
  font-weight:500;color:#8b908a;letter-spacing:-.02em}
.seg button.on{background:var(--tint);color:#3f5236;font-weight:700}
.subhead{display:flex;align-items:center;padding:22px 22px 12px}
/* 정보 탭은 화면 맨 위(헤더 없이)부터 시작하는 유일한 subhead라, 다른 화면의 .head처럼
   상태바 높이(safe-area-inset-top)만큼 위쪽 여백을 더해줌 — 보관함 안쪽의 subhead(바우처/장소 등)는
   이미 그 위에 별도 헤더가 있으므로 영향 없게 #infoPage 하위로 한정 */
#infoPage>.subhead{padding-top:calc(26px + env(safe-area-inset-top))}
@media(display-mode:standalone){#infoPage>.subhead{padding-top:calc(20px + env(safe-area-inset-top))}}
.subhead h2{font-size:21px;font-weight:700;letter-spacing:-.02em}
.subhead .act{margin-left:auto;font-size:13.5px;color:var(--muted);font-weight:400;background:none;border:0}
.subhead .act:disabled{opacity:.4}
/* ---------- 여행 정보 ---------- */
.info-empty{text-align:center;padding:40px 30px;color:var(--muted);font-size:12.5px;line-height:1.7}
.info-loading{text-align:center;padding:36px 30px}
.info-loading-char{width:72px;margin:0 auto 12px;display:block;animation:infobob 1.1s ease-in-out infinite}
.info-loading p{font-size:13px;color:var(--muted);font-weight:600}
@keyframes infobob{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}
.info-lead{font-size:12px;color:var(--muted);line-height:1.6;padding:0 22px 4px}
.infodests{display:none;gap:7px;overflow-x:auto;padding:0 22px 12px;scrollbar-width:none}
.infodests::-webkit-scrollbar{display:none}
.infodest{flex:0 0 auto;border:0;border-radius:999px;background:var(--surface);color:var(--muted);
  padding:8px 13px;font-size:12px;font-weight:700;white-space:nowrap}
.infodest.on{background:var(--green);color:#fff}
.infotabs-wrap{background:linear-gradient(135deg,rgba(96,121,90,.14),rgba(96,121,90,.03));
  border-radius:20px;margin:2px 22px 18px;padding:7px}
.infotabs{display:flex;gap:6px}
.infotab{flex:1;padding:11px 0;border-radius:14px;background:rgba(255,255,255,.5);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  border:1px solid rgba(255,255,255,.7);color:var(--muted);
  font-size:13px;font-weight:700;transition:background .2s ease,color .2s ease,box-shadow .2s ease}
.infotab.on{background:#fff;color:var(--green-d);border-color:transparent;box-shadow:var(--sh)}
.infosort{display:none;gap:8px;margin:-10px 22px 16px}
.infosort-btn{padding:6px 13px;border-radius:999px;background:none;border:1.4px solid var(--line);
  color:var(--muted);font-size:11.5px;font-weight:600}
.infosort-btn.on{background:var(--tint);border-color:var(--tint-line);color:var(--green-d)}
.infocard-rating{display:inline-flex;align-items:center;gap:2px;margin-left:7px;font-size:11.5px;
  font-weight:700;color:#c98a1c;vertical-align:middle}
.infocard-rating svg{width:12px;height:12px}
.infocard{background:var(--card);border-radius:16px;box-shadow:var(--sh);margin:0 22px 10px;padding:14px 16px}
.infocard-row{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.infocard-tt{font-size:14.5px;font-weight:700;color:var(--ink)}
.infocard-dest{display:inline-block;margin-right:6px;padding:3px 7px;border-radius:999px;
  background:var(--tint);color:var(--green-d);font-size:10.5px;font-weight:700;vertical-align:2px}
.infocard-addr{font-size:11.5px;color:var(--muted);margin-top:2px}
.infocard-desc{font-size:12.5px;color:var(--muted);line-height:1.55;margin-top:8px}
.infocard-btns{flex:0 0 auto;display:flex;gap:8px}
.infocard-link{flex:0 0 auto;width:34px;height:34px;border-radius:50%;background:var(--tint);
  display:grid;place-items:center;color:var(--green-d)}
.infocard-link svg{width:16px;height:16px}
.infocard-add{flex:0 0 auto;width:34px;height:34px;border-radius:50%;background:var(--green);
  display:grid;place-items:center;color:#fff}
.infocard-add svg{width:16px;height:16px}
.infocard-photos{display:none;gap:8px;overflow-x:auto;margin-top:10px;padding-bottom:2px;
  -webkit-overflow-scrolling:touch}
.infocard-photos.on{display:flex}
.infocard-photos img{width:118px;height:86px;border-radius:10px;object-fit:cover;flex:0 0 auto;
  background:var(--surface)}
.addday-list{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:4px}
.addday-btn{padding:11px 0;border-radius:12px;background:var(--surface);border:1.4px solid var(--line);
  color:var(--ink);font-size:13px;font-weight:600}
.addday-btn:active{background:var(--tint);border-color:var(--tint-line);color:var(--green-d)}
/* ---------- 지도 ---------- */
.subhead .btn{margin-left:auto;background:var(--green);color:#fff;border:0;border-radius:14px;
  padding:13px 19px;font-size:14.5px;font-weight:600}
.panel{padding:0 22px}
.box{background:var(--surface);border-radius:20px;padding:20px}
.box h3{font-size:16px;font-weight:600;letter-spacing:-.02em}
.box p{font-size:13.5px;color:var(--muted);margin-top:6px;font-weight:400}
.wide{width:100%;background:var(--green);color:#fff;border:0;border-radius:14px;
  padding:16px;font-size:15px;font-weight:600;margin-top:16px}
.list{list-style:none}
.li{display:flex;align-items:center;gap:13px;padding:17px 0;border-bottom:1px solid var(--line);position:relative;background:var(--card)}
.li:last-child{border-bottom:0}
.li.dragging{box-shadow:0 8px 20px rgba(32,36,31,.16);border-radius:12px;z-index:5;border-bottom-color:transparent}
.li.shiftanim{transition:transform .16s ease}
.li .nm{font-size:15.5px;font-weight:500;letter-spacing:-.02em}
.li .sb{font-size:13px;color:var(--muted);margin-top:3px;font-weight:400}
.li .rm{margin-left:auto;background:none;border:0;color:#c5cac4;font-size:20px;padding:6px}
.li .dragh{cursor:grab;touch-action:none;color:#b7bcb2;flex:0 0 auto;padding:6px;margin:-6px;
  display:flex;align-items:center;user-select:none;-webkit-user-select:none}
.li .dragh:active{cursor:grabbing}
.chk{width:26px;height:26px;border-radius:9px;border:1.8px solid #d8ddd6;background:#fff;
  display:grid;place-items:center;flex:0 0 auto;color:transparent}
.chk.on{background:var(--green);border-color:var(--green);color:#fff}
.chev{width:48px;height:48px;border-radius:50%;background:var(--surface);border:0;margin-left:10px;
  display:grid;place-items:center;color:var(--green-d);transition:transform .18s}
.chev.cl{transform:rotate(-90deg)}
.vopen{flex:0 0 auto;background:var(--tint);color:#4b5f40;border-radius:10px;padding:8px 11px;
  font-size:12px;font-weight:800;text-decoration:none;cursor:pointer}
#memo{width:100%;min-height:260px;border:1.6px solid var(--line);border-radius:18px;padding:18px;
  font-size:15.5px;line-height:1.7;resize:vertical;outline:0}

/* ---------- fab + nav ---------- */
.fixwrap{position:fixed;left:0;right:0;bottom:0;display:flex;justify-content:center;
  pointer-events:none;z-index:40}
.fixin{width:100%;max-width:430px;position:relative}
.fab{position:absolute;right:22px;bottom:calc(var(--nav-content-height) + var(--safe-bottom) + 18px);width:66px;height:66px;border-radius:50%;
  background:var(--green);color:#fff;border:0;font-size:32px;font-weight:300;line-height:1;
  pointer-events:auto;box-shadow:0 6px 20px rgba(70,90,60,.35);display:grid;place-items:center;padding-bottom:4px}
.fab.ai-home{width:78px;height:78px;background:transparent;box-shadow:none;padding:0;overflow:visible}
.fab.ai-home img{width:104px;height:auto;max-width:none;display:block;pointer-events:none}
.nav{background:#fff;border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(4,1fr);
  gap:4px;height:calc(var(--nav-content-height) + var(--safe-bottom));
  padding:0 14px var(--safe-bottom);pointer-events:auto}
.nav button,.nav a{height:var(--nav-content-height);background:none;border:0;border-radius:14px;padding:2px 0;position:relative;
  display:flex;flex-direction:column;align-items:center;justify-content:center;text-decoration:none}
.nav img{width:24px;height:24px;object-fit:contain;margin:0 auto;display:block;
  filter:grayscale(1) brightness(1.06) opacity(.5);transition:filter .18s ease,transform .18s ease}
.nav button.on img{filter:none;transform:scale(1.06)}
.navlabel{display:block;text-align:center;font-size:9.5px;line-height:1.1;font-weight:500;color:#aab0a5;
  margin-top:2px}
.nav button.on .navlabel,.nav a.on .navlabel{color:var(--green-d);font-weight:700}
/* 마이페이지 아이콘 원본(투명 여백 포함)은 다른 네비 아이콘보다 캐릭터가 작게 차 있어서
   시각적 크기만 다른 탭과 맞춤 - 원본 파일은 그대로 유지(crop/재생성 없음) */
.nav [data-tab="mypage"] img{transform:scale(1.8)}
.nav button.on[data-tab="mypage"] img{filter:none;transform:scale(1.94)}

/* ---------- install banner ---------- */
.inst{position:fixed;left:0;right:0;bottom:0;z-index:55;display:none;justify-content:center;pointer-events:none}
.inst.on{display:flex}
.instin{width:100%;max-width:430px;pointer-events:auto;padding:0 16px calc(112px + min(34px,env(safe-area-inset-bottom)))}
.instcard{background:#fff;border:1.6px solid var(--line);border-radius:20px;padding:16px 18px;
  display:flex;align-items:center;gap:14px;box-shadow:0 10px 30px rgba(32,36,31,.14)}
.instcard img{width:46px;height:46px;border-radius:13px;flex:0 0 auto}
.instcard .it{font-size:14.5px;font-weight:600;letter-spacing:-.02em}
.instcard .is{font-size:12.5px;color:var(--muted);margin-top:3px;font-weight:400;line-height:1.45}
.instcard .go{margin-left:auto;background:var(--green);color:#fff;border:0;border-radius:13px;
  padding:12px 16px;font-size:14px;font-weight:600;flex:0 0 auto}
.instcard .x{background:none;border:0;color:#c5cac4;font-size:22px;padding:0 2px;flex:0 0 auto}

#toast{position:fixed;left:50%;bottom:120px;transform:translate(-50%,10px);z-index:80;
  background:#2b3328;color:#fff;border-radius:14px;padding:12px 18px;font-size:13.5px;font-weight:500;
  opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;max-width:86vw;text-align:center}
#toast.on{opacity:1;transform:translate(-50%,0)}

/* 새 여행 등록 "짜잔" 우표 축하 효과 — 반투명 유리(글래스모피즘) 카드, 임시로 떴다 사라지는
   오버레이 성격에 맞춰 무겁지 않게. 기존 진한 그림자·박스·기울임은 제거함 */
.stampcelebrate{position:fixed;inset:0;z-index:85;display:flex;align-items:center;justify-content:center;
  background:rgba(24,28,23,0);pointer-events:none;transition:background .25s ease}
.stampcelebrate.on{background:rgba(24,28,23,.42);pointer-events:auto}
.sc-card{display:flex;flex-direction:column;align-items:center;gap:12px;
  background:rgba(255,255,255,.22);backdrop-filter:blur(18px) saturate(1.4);
  -webkit-backdrop-filter:blur(18px) saturate(1.4);
  border:1px solid rgba(255,255,255,.35);border-radius:24px;padding:22px 26px;
  box-shadow:0 8px 28px rgba(0,0,0,.14);
  transform:scale(.4);opacity:0;transition:transform .5s cubic-bezier(.34,1.4,.4,1),opacity .3s ease}
.stampcelebrate.on .sc-card{transform:scale(1);opacity:1}
.sc-stamp{width:150px;height:150px;border-radius:50%;object-fit:contain;clip-path:circle(50%);box-shadow:0 4px 14px rgba(0,0,0,.16)}
.sc-text{color:#fff;font-size:15px;font-weight:700;text-align:center;line-height:1.4;
  white-space:nowrap;max-width:78vw;overflow:hidden;text-overflow:ellipsis}

/* ---------- sheet ---------- */
.dim{position:fixed;inset:0;background:rgba(24,28,23,.45);z-index:60;
  opacity:0;pointer-events:none;transition:opacity .28s ease}
.dim.on{opacity:1;pointer-events:auto}
.sheet{position:fixed;left:0;right:0;bottom:0;z-index:61;display:flex;justify-content:center;
  pointer-events:none}
.sheet.on{pointer-events:auto}
.sheetin{width:100%;max-width:430px;background:#fff;border-radius:26px 26px 0 0;
  padding:10px 22px max(12px,calc(env(safe-area-inset-bottom) - 12px));max-height:88vh;max-height:88svh;overflow-y:auto;
  transform:translateY(100%);transition:transform .32s cubic-bezier(.32,.72,0,1)}
.sheet.on .sheetin{transform:translateY(0)}
.sheetp{font-size:14px;line-height:1.7;color:#5c6359;font-weight:400;margin-bottom:12px}
.sheetp b{font-weight:700;color:var(--ink)}
.sheetp.warn{background:#fff6e0;border-radius:14px;padding:13px 15px;color:#7a6a3d;font-size:13px}
.grab{width:44px;height:5px;border-radius:99px;background:#e3e6e2;margin:6px auto 18px}
.dphead{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.dphead #dpLabel{font-size:15px;font-weight:700;color:var(--ink)}
.dpnav{width:34px;height:34px;border-radius:50%;background:var(--surface);border:0;
  font-size:19px;color:var(--green-d);display:grid;place-items:center}
.dpjump{display:flex;align-items:center;justify-content:center;gap:5px;min-width:0}
.dpjump select{border:0;background:#f5f6f3;color:var(--ink);border-radius:10px;height:36px;
  padding:0 25px 0 10px;font-size:13.5px;font-weight:700;outline:0;color-scheme:light}
.dpwd{display:grid;grid-template-columns:repeat(7,1fr);text-align:center;
  font-size:11.5px;color:var(--muted);font-weight:600;margin-bottom:4px}
.dpwd span:first-child{color:#bf5f57}.dpwd span:last-child{color:#617d9a}
.dpgrid{display:grid;grid-template-columns:repeat(7,1fr);row-gap:4px;will-change:transform,opacity}
@media(prefers-reduced-motion:reduce){.dpgrid{will-change:auto}}
.dpday{aspect-ratio:1;border:0;background:none;border-radius:50%;font-size:13.5px;font-weight:500;
  color:var(--ink);display:grid;place-items:center;position:relative}
.dpday.sun,.dpday.holiday{color:#bd5b55}.dpday.sat{color:#5d7895}
.dpday.holiday:after{content:"";position:absolute;bottom:4px;width:3px;height:3px;border-radius:50%;background:currentColor;opacity:.55}
.dpday:disabled{color:#cfd3cd;opacity:.55}
.dpday.today{font-weight:800;color:var(--green-d)}
.dpday.start,.dpday.end,.dpday.selected{background:var(--green);color:#fff;font-weight:700}
.dpday.in{background:var(--tint);border-radius:0}
.dpday.start{border-radius:50% 0 0 50%}
.dpday.end{border-radius:0 50% 50% 0}
.dpday.start.end{border-radius:50%}
.dpday.start:after,.dpday.end:after,.dpday.selected:after{background:#fff}
.dpholiday{min-height:18px;margin:6px 0 0;text-align:center;color:#a65b55;font-size:11.5px;font-weight:600}
.caloverlay{position:fixed;inset:0;z-index:90;background:rgba(24,28,23,.38);display:flex;align-items:flex-end;justify-content:center}
.calpanel{width:100%;max-width:430px;background:#fff;border-radius:26px 26px 0 0;padding:10px 22px calc(24px + min(34px,env(safe-area-inset-bottom)));box-shadow:0 -12px 40px rgba(35,44,32,.14)}
.calpanel .grab{margin-bottom:15px}.calpanel h2{font-size:20px;font-weight:700;letter-spacing:-.02em;margin-bottom:16px}
.calpanel .acts{margin-top:14px}
.dpskip{display:block;width:100%;text-align:center;background:none;border:0;color:var(--muted);
  font-size:12.5px;font-weight:600;padding:12px 0 2px;text-decoration:underline}
.sheetin h2{font-size:20px;font-weight:700;letter-spacing:-.02em;margin-bottom:18px}
.f{margin-bottom:14px}
.f .hint{color:#b0b6ac;font-weight:400;margin-left:6px}
.f label{display:block;font-size:12.5px;font-weight:500;color:var(--muted);margin-bottom:7px}
.f input,.f textarea,.f select{width:100%;border:1.6px solid var(--line);border-radius:14px;
  padding:15px 16px;font-size:15.5px;outline:0;background:#fff}
.f input:focus,.f textarea:focus,.f select:focus{border-color:var(--tint-line)}
.codewrap{position:relative}
.codewrap input{padding-right:46px}
.codewrap #cCodeRandom{position:absolute;right:6px;top:50%;transform:translateY(-50%);
  width:32px;height:32px;border-radius:50%;background:none;border:0;color:var(--muted);
  display:grid;place-items:center}
.codewrap #cCodeRandom:active{background:var(--surface);color:var(--green-d)}
.codewrap #cCodeRandom svg{width:16px;height:16px}
.f2{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.acts{display:flex;gap:10px;margin-top:22px}
.acts button{flex:1;border:0;border-radius:15px;padding:16px;font-size:15px;font-weight:600}

/* ---------- 온보딩(첫 실행) ---------- */
body.onboarding,body.onboarding .app{background:#fffaf0}
body.onboarding .fixwrap{display:none}
/* #onboard 단독 ID 선택자로 display를 걸면 .page/.page.on 토글보다 우선순위가 높아져서
   'on' 클래스가 빠져도 항상 보이는 버그가 생긴다(실제로 이 버그가 있었음 — 홈으로 넘어가도
   온보딩 내용이 항상 레이아웃에 끼어있어서 화면이 불필요하게 길어지고 스크롤되던 원인).
   그래서 반드시 .on과 묶어서만 적용되게 한다 */
#onboard.on{min-height:var(--stable-app-height,100svh);display:flex;flex-direction:column;padding-bottom:0;position:relative;
  overflow:hidden;isolation:isolate;background:#fffaf0}
#onboard.on::after{content:"";position:absolute;z-index:1;inset:43% 0 0;pointer-events:none;
  background:linear-gradient(to bottom,rgba(255,250,240,0),rgba(255,250,240,.94) 18%,#fffaf0 34%)}
#onboard .obbg{position:absolute;z-index:0;top:0;left:0;width:100%;height:auto;max-width:none;
  object-fit:contain;object-position:center top;pointer-events:none}
#onboard .obtag{padding:calc(26px + env(safe-area-inset-top)) 22px 0;font-size:13px;font-weight:700;
  color:var(--green-d);display:flex;align-items:center;gap:7px;position:relative;z-index:2}
#onboard .obtag img{width:22px;height:22px;border-radius:7px;display:block}
#onboard .obstage{flex:1;display:flex;align-items:center;justify-content:center;padding:20px 22px;
  position:relative;z-index:2}
#onboard .obchar{display:none}
#onboard .obbottom{padding:0 26px calc(40px + min(34px,env(safe-area-inset-bottom)));position:relative;z-index:2}
#onboard h1{font-size:26px;font-weight:700;letter-spacing:-.02em;text-align:center;margin:0 0 10px;
  color:#273126}
#onboard .obsub{font-size:14px;color:#667261;font-weight:400;text-align:center;
  line-height:1.6;margin:0 0 26px}
#onboard .obprimary{width:100%;border:1px solid rgba(78,100,73,.16);border-radius:16px;padding:17px;
  font-size:16px;font-weight:700;background:#fff;color:var(--green-d);margin-bottom:10px;
  box-shadow:0 8px 24px rgba(70,87,65,.12)}
#onboard .obsecondary{width:100%;border:1.6px solid rgba(78,100,73,.2);border-radius:16px;padding:16px;
  font-size:15px;font-weight:600;background:#fff;color:var(--green-d)}
#onboard .oblegal{text-align:center;font-size:12px;color:#b0b6ac;font-weight:400;line-height:1.6;
  margin-top:16px}
#onboard .oblegal a{color:var(--green-d);text-decoration:underline}
.consent{display:flex;align-items:flex-start;gap:10px;padding:13px 15px;
  background:var(--surface);border-radius:14px;margin-bottom:6px;cursor:pointer}
.consent .cb{width:20px;height:20px;border-radius:6px;border:1.8px solid var(--tint-line);
  background:var(--tint);flex:0 0 auto;margin-top:1px;display:flex;align-items:center;
  justify-content:center;transition:opacity .12s}
.consent .cb svg{width:12px;height:12px;opacity:1;transition:opacity .12s}
.consent.off .cb{background:#fff;border-color:var(--line)}
.consent.off .cb svg{opacity:0}
.consent p{font-size:12.5px;color:#5c6359;line-height:1.6;margin:0;font-weight:400}
.consent p b{font-weight:700;color:var(--ink)}
.codein{width:100%;border:1.6px solid var(--line);border-radius:16px;padding:18px 16px;
  font-size:24px;letter-spacing:.3em;text-align:center;font-weight:800;color:var(--ink);
  outline:0;background:#fff;margin-bottom:14px;text-transform:uppercase}
.codein:focus{border-color:var(--tint-line)}
.acts .ok{background:var(--green);color:#fff}
.acts .no{background:var(--surface);color:var(--ink)}
.acts .del{background:#fdecec;color:#c0392b;flex:0 0 auto;padding:17px 20px}
.acts .del:disabled{background:var(--surface);color:var(--muted);cursor:not-allowed}

/* ---------- 공유/공동편집 ---------- */
#home{position:relative}
.sharebtn{position:absolute;top:calc(14px + env(safe-area-inset-top));right:20px;width:38px;height:38px;
  border-radius:50%;background:#fff;border:1.6px solid var(--line);display:grid;place-items:center;
  color:var(--green-d);z-index:5;box-shadow:var(--sh)}
.sharebtn.linked{background:var(--green);color:#fff;border-color:var(--green)}

/* ---------- 쇼핑 리스트 ---------- */
.shopwarn{padding:0 22px;font-size:12.5px;color:#c0392b;font-weight:700;margin:-6px 0 4px}
.li .thumb{width:46px;height:46px;border-radius:12px;object-fit:cover;flex:0 0 auto;background:var(--surface)}
.li .thumb.ph{display:grid;place-items:center}
.li .thumb.pdf{object-fit:contain;background:#fdeceb;padding:9px;cursor:pointer}
.li .loc{display:inline-block;font-size:11px;font-weight:700;color:#4b5f40;background:var(--tint);
  border-radius:8px;padding:3px 8px;margin-top:5px}
.li .price{font-size:12.5px;color:var(--muted);margin-top:6px;line-height:1.65;font-weight:400;white-space:pre-line}
.li .row{display:flex;align-items:center}
.li .edit2{background:none;border:0;color:#8b908a;padding:6px;flex:0 0 auto}

/* ---------- 마이페이지 ---------- */
.mysec{margin:0 22px 24px}
.mysec-h{font-size:12.5px;font-weight:700;color:var(--muted);margin:0 4px 12px;letter-spacing:-.01em}
.mysec-body{background:var(--card);border-radius:18px;box-shadow:var(--sh);overflow:hidden}
.mytrips-sec{margin-top:0}
.mytrip-tabs{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px;margin-bottom:12px;
  background:#f0f3ee;border-radius:15px}
.mytrip-tab{height:40px;border:0;border-radius:11px;background:transparent;color:#949b91;
  font-size:13px;font-weight:700;letter-spacing:-.01em;transition:background .18s,color .18s,box-shadow .18s;
  display:flex;align-items:center;justify-content:center;gap:4px;text-align:center}
.mytrip-tab.on{background:#fff;color:var(--green-d);box-shadow:0 2px 7px rgba(54,72,51,.08)}
.mytrip-tab .tab-count{display:inline-flex;align-items:center;justify-content:center;min-width:19px;height:19px;
  margin-left:1px;padding:0 5px;border-radius:10px;background:rgba(107,132,99,.1);font-size:10.5px}
.mytrip-tab.on .tab-count{background:var(--tint)}
.mytrip-panel[hidden]{display:none}
.mytrip{width:100%;display:flex;align-items:center;gap:10px;padding:14px 16px;border:0;
  background:none;text-align:left;border-bottom:1px solid var(--line);position:relative;overflow:hidden}
.mytrip:last-child{border-bottom:0}
.mytrip .mtc{width:9px;height:9px;border-radius:50%;background:var(--line);flex:0 0 auto}
.mytrip.on .mtc{background:var(--green)}
.mytrip .mtt{flex:1;min-width:0}
.mytrip .mtname{font-size:14px;font-weight:700}
.mytrip .mtsub{font-size:12px;color:var(--muted);font-weight:400;margin-top:2px}
.mytrip.on{background:var(--tint)}
.mytrip.hasstamp{padding:14px 14px 14px 104px;min-height:104px}
.mytrip.hasstamp .mtc{display:none}
/* 진행 중인 여행의 지역 스탬프는 왼쪽에 크게 고정한다. 비율은 유지하고
   원본의 네모난 바탕 모서리만 원형 마스크로 정리한다. */
.mytrip-stamp{position:absolute;left:12px;right:auto;top:50%;transform:translateY(-50%);
  width:82px;height:82px;border-radius:50%;object-fit:contain;clip-path:circle(50%);pointer-events:none;
  filter:drop-shadow(0 3px 5px rgba(40,50,38,.15))}
.mytrip:active{transform:none}
.mtdel{flex:0 0 auto;position:relative;width:26px;height:26px;border-radius:50%;
  background:rgba(255,255,255,.92);color:#9aa094;display:grid;place-items:center;
  box-shadow:0 1px 4px rgba(40,50,38,.18);z-index:2}
.mtdel svg{width:13px;height:13px}
.mtdel:active{color:#c0392b}
#myTripList{overflow:visible}
.myrow{width:100%;display:flex;align-items:center;gap:12px;padding:15px 16px;border:0;
  background:none;text-align:left;font-size:14px;font-weight:600;color:var(--ink);
  border-bottom:1px solid var(--line)}
.myrow:last-child{border-bottom:0}
.myrow svg{flex:0 0 auto;color:var(--muted)}
.myrow .mrarrow{margin-left:auto;color:#c7cbc2}
.myaddtrip{width:100%;padding:14px 16px;border:0;background:none;text-align:center;
  font-size:13.5px;font-weight:700;color:var(--green-d);border-top:1px solid var(--line)}
/* 지난 여행: compact list (스탬프/여권/국기 그래픽 없이, 국내·해외 동일 UI) */
.mypast .mypastrow{width:100%;display:flex;align-items:center;gap:12px;padding:13px 16px;border:0;
  background:none;text-align:left;border-bottom:1px solid var(--line)}
.mypast .mypastrow:last-child{border-bottom:0}
.mypast .mypastrow .mtc{width:7px;height:7px;border-radius:50%;background:var(--line);flex:0 0 auto}
.mypast .mypastrow .mtt{flex:1;min-width:0}
.mypast .mypastrow .mtname{font-size:13.5px;font-weight:700}
.mypast .mypastrow .mtsub{font-size:11.5px;color:var(--muted);font-weight:400;margin-top:2px}
.mypast .mypastrow svg{margin-left:auto;color:#c7cbc2;flex:0 0 auto}
.mypast-empty{padding:22px 16px;font-size:12px;color:var(--muted);line-height:1.6;text-align:center}
/* 보관함 퀵메뉴: 홈 화면 퀵액션과 같은 톤이지만 더 작고 가벼움, 저장 개수 표시 */
.boxquick{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
.bq{background:var(--card);border:0;border-radius:15px;padding:11px 4px;
  box-shadow:0 2px 8px rgba(40,50,38,.055);display:flex;flex-direction:column;align-items:center;gap:5px}
.bq:active{background:var(--surface)}
.bq svg{width:18px;height:18px;color:#93a58c}
.bq-l{font-size:11.5px;font-weight:600;color:#828a7e}
.bq-n{display:none}
/* 나의 여행 기록 */
.mysec-hrow{display:flex;align-items:baseline;justify-content:space-between;margin:0 4px 12px}
.mysec-hrow .mysec-h{margin:0}
.mysec-more{background:none;border:0;display:flex;align-items:center;gap:1px;
  font-size:11.5px;font-weight:600;color:var(--muted)}
.mysec-more svg{width:12px;height:12px}
.recordcard{background:var(--tint);border-radius:24px;padding:22px 18px 18px;min-height:190px}
.record-stat{font-size:15.5px;line-height:1.55;color:var(--ink);font-weight:500}
.record-stat b{font-size:20px;color:var(--green-d);font-weight:800}
.rc-scroll{margin:18px -4px 0;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;
  scroll-padding-inline:18px;-webkit-overflow-scrolling:touch;touch-action:pan-x;
  overscroll-behavior-x:contain;overscroll-behavior-y:none}
.rc-scroll::-webkit-scrollbar{display:none}
.rc-track{display:flex;align-items:center;gap:12px;width:max-content;min-width:100%;min-height:86px;
  padding:4px 18px 6px;position:relative}
.rc-item{flex:0 0 auto;width:74px;height:74px;scroll-snap-align:start;background:none;border:0;padding:0;position:relative}
.rc-ico{display:block;width:74px;height:74px;border-radius:50%;overflow:hidden}
.rc-ico img{width:100%;height:100%;border-radius:50%;object-fit:contain;filter:grayscale(1) opacity(.55);
  visibility:visible;-webkit-user-drag:none}
.rc-item:not(.got)::after{content:'+';position:absolute;right:-1px;bottom:-1px;width:19px;height:19px;
  display:flex;align-items:center;justify-content:center;border-radius:50%;background:var(--green);color:#fff;border:2px solid var(--tint);
  font-size:14px;font-weight:600;line-height:1;padding:0 0 1px;box-sizing:border-box}
.rc-item:active{transform:scale(.96)}
.rc-item:focus-visible{outline:2px solid var(--green);outline-offset:4px;border-radius:50%}
.rc-item.got .rc-ico img{filter:none;opacity:1}
.rc-item.got .rc-ico{box-shadow:0 0 0 2px var(--card),0 0 0 3.5px var(--tint-line)}
.rc-dots{display:flex;justify-content:center;gap:5px;margin-top:14px}
.rc-dots i{width:5px;height:5px;border-radius:50%;background:var(--tint-line)}
.rc-dots i.on{background:var(--green)}
/* 모든 기록 보기 시트 — 30개 전부 그레이스케일 정적 그리드 */
.stampfull{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;padding:2px 2px 4px}
.stampsec-h{font-size:12px;font-weight:700;color:var(--muted);margin:18px 2px 8px}
.stampsec-h:first-of-type{margin-top:2px}
.stamphist-ico{width:112px;height:112px;margin:2px auto 16px;border-radius:50%;overflow:hidden}
.stamphist-ico img{width:100%;height:100%;border-radius:50%;object-fit:contain;filter:none;opacity:1}
.rc-label{flex:0 0 auto;width:54px;display:flex;align-items:center;justify-content:center;
  text-align:center;font-size:11.5px;font-weight:700;color:#8d9489;white-space:nowrap;scroll-snap-align:start}
.stampfull button{background:none;border:0;padding:2px;aspect-ratio:1;border-radius:50%;overflow:hidden}
.stampfull img{width:100%;height:100%;border-radius:50%;object-fit:contain;filter:grayscale(1) opacity(.55)}
.stampfull button.got img{filter:none;opacity:1}
.stampfull button.got{box-shadow:0 0 0 2px var(--card),0 0 0 3.5px var(--tint-line)}
/* 여행 관리: 서브텍스트 포함 2줄 행 */
.myrow-tt{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.myrow-sub{font-size:11.5px;font-weight:400;color:var(--muted)}
/* 여행 관리: 배경 최소화 - 카드 대신 얇은 구분선만 */
.mysec-body.myplain{background:none;box-shadow:none;border-radius:0;border-top:1px solid var(--line)}
.myplain .myrow{padding:14px 4px;font-weight:500}
/* 기기 초기화: 작은 secondary action (경고 모달에서만 red 강조) */
.myreset{display:block;margin:4px auto 8px;padding:10px 18px;border:0;background:none;
  font-size:12.5px;font-weight:600;color:var(--muted);text-align:center}
.myreset:active{color:#c0392b}

/* ---------- goods shop banner ---------- */
.goodsbn{display:flex;align-items:center;gap:8px;width:calc(100% - 44px);margin:0 22px 24px;
  background:#fdfbf3;border:1px solid #e8dfc4;border-radius:16px;padding:12px 8px 12px 15px;
  box-shadow:none;text-align:left;cursor:pointer;position:relative;overflow:hidden;
  -webkit-tap-highlight-color:transparent}
.goodsbn:active{background:#faf5e6}
.goodsbn-txt{flex:1;min-width:0}
.goodsbn-main{font-family:'온글잎 의청수 다경체','Ownglyph Uiseongsu Dagyeong','Gamja Flower',cursive;
  font-size:20px;line-height:1.2;color:var(--ink);font-weight:400;letter-spacing:-.015em;white-space:nowrap}
.goodsbn-main .hl{background:linear-gradient(180deg,transparent 62%,#fbe58a 62%);padding:0 1px}
.goodsbn-sub{font-family:'Pretendard Variable',Pretendard,sans-serif;font-size:11.5px;
  color:var(--muted);font-weight:400;margin-top:4px;line-height:1.35;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.goodsbn-cta{font-family:'Pretendard Variable',Pretendard,sans-serif;font-size:12.5px;
  font-weight:650;color:var(--green-d);margin-top:7px;min-height:18px;display:flex;align-items:center;gap:3px}
.goodsbn-cta svg{width:12px;height:12px}
.goodsbn-char{flex:0 0 82px;width:82px;height:70px;display:flex;align-items:center;justify-content:center;
  transform:translateX(-5px)}
.goodsbn-char img{width:100%;height:100%;object-fit:contain;display:block}

/* ---------- 준비중 popup ---------- */
.gsdim{position:fixed;inset:0;background:rgba(24,28,23,.4);z-index:80;
  opacity:0;pointer-events:none;transition:opacity .22s ease}
.gsdim.on{opacity:1;pointer-events:auto}
.gspop{position:fixed;left:0;right:0;top:0;bottom:0;z-index:81;display:flex;
  align-items:center;justify-content:center;pointer-events:none}
.gspop.on{pointer-events:auto}
.gspop-card{width:min(84vw,320px);background:#fffdf6;border-radius:22px;padding:28px 24px 20px;
  text-align:center;box-shadow:0 10px 34px rgba(40,50,38,.16);
  transform:scale(.92);opacity:0;transition:transform .22s cubic-bezier(.34,1.1,.4,1),opacity .18s ease}
.gspop.on .gspop-card{transform:scale(1);opacity:1}
.gspop-txt{font-size:14.5px;line-height:1.6;color:var(--ink);font-weight:500;margin-bottom:18px}
.gspop-ok{width:100%;padding:12px;border:0;border-radius:13px;background:var(--green);
  color:#fff;font-size:14px;font-weight:700;font-family:inherit}
.gspop-ok:active{background:var(--green-d)}

/* ---------- 과거 여행 상세(기록) ---------- */
.sheetin.past-record-sheet{height:min(92dvh,820px);max-height:min(92dvh,820px);padding:0;overflow:hidden}
.past-record{height:100%;overflow-y:auto;padding:18px 22px 34px;box-sizing:border-box}
.ptd-topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}
.ptd-back,.ptd-more{width:42px;height:42px;border:0;border-radius:50%;background:var(--surface);display:grid;place-items:center;color:var(--ink)}
.ptd-back svg{width:22px}.ptd-more{font-size:20px;font-weight:700;color:var(--muted)}
.ptd-hero{display:grid;grid-template-columns:minmax(0,1fr) 112px;align-items:center;gap:14px;background:var(--tint);border-radius:24px;padding:22px;margin-bottom:22px}
.ptd-copy h2{font-size:25px!important;line-height:1.2;margin:0 0 8px!important;text-align:left!important}
.ptd-stamp{display:block;width:108px;height:108px;border-radius:50%;object-fit:contain;clip-path:circle(50%);margin:0;filter:drop-shadow(0 4px 8px rgba(38,58,36,.12))}
.ptd-sub{text-align:left;font-size:13px;color:var(--muted);margin:0;line-height:1.5}
.ptd-total{text-align:center;font-size:13px;color:var(--muted);margin:12px 0 4px}
.ptd-total b{color:var(--ink);font-weight:800;margin-left:4px}
.ptd-timeline{margin-top:6px}.ptd-day{margin-bottom:24px}
.ptd-day-h{display:flex;align-items:center;justify-content:space-between;font-size:15px;font-weight:800;color:var(--ink);margin-bottom:10px}
.ptd-day-add{border:0;background:var(--tint);color:var(--green-d);font:inherit;font-size:12px;border-radius:999px;padding:8px 12px;margin-top:4px}
.ptd-item{width:100%;display:flex;gap:13px;padding:13px 14px;align-items:flex-start;border:0;background:#fff;border-radius:16px;text-align:left;box-shadow:0 3px 15px rgba(52,68,49,.07);margin-bottom:8px}
.ptd-time{flex:0 0 52px;font-size:12px;font-weight:800;color:var(--green-d);padding-top:2px}
.ptd-time-empty{color:var(--line)}
.ptd-tt{flex:1;min-width:0;font-size:13.5px;color:var(--ink)}
.ptd-tt b{font-weight:700}
.ptd-addr{font-size:11.5px;color:var(--muted);margin-top:2px}
.ptd-chevron{flex:0 0 auto;color:#b5bbb2;font-size:18px}.ptd-empty{text-align:center;color:var(--muted);background:var(--surface);border-radius:18px;padding:28px 16px;font-size:13px;line-height:1.6}
.ptd-mainadd{width:100%;height:52px;border:0;border-radius:16px;background:var(--green);color:#fff;font:inherit;font-weight:750;font-size:14px;margin-top:2px}
@media(max-width:350px){.ptd-hero{grid-template-columns:minmax(0,1fr) 88px;padding:18px}.ptd-stamp{width:88px;height:88px}}

/* ---------- 첨부파일 전체화면 뷰어 ---------- */
.viewer{position:fixed;inset:0;background:#111;z-index:900;display:flex;flex-direction:column}
.vbar{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 18px;
  padding-top:calc(14px + env(safe-area-inset-top));color:#fff;font-size:13.5px;font-weight:600}
.vbar span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vbar button{background:none;border:0;color:#fff;font-size:24px;padding:2px 8px;flex:0 0 auto}
.vbody{flex:1;overflow:auto;-webkit-overflow-scrolling:touch;padding:10px;text-align:center}
.vbody img{max-width:100%;border-radius:8px}
.vbody canvas{max-width:100%;margin:0 auto 10px;display:block;border-radius:4px;background:#fff}
.vload{color:#ccc;font-size:14px;padding:44px 22px;line-height:1.85}
.vload a{color:#8fd18a}

/* ==========================================================================
   02. Utilities extracted from static markup
   ========================================================================== */
.u-static-01{display:none}
.u-static-02{width:0%}
.u-static-03{left:0%}
.u-static-04{display:none;padding:12px 4px 4px}
.u-static-05{margin:0}
