/* 家庭生活旅遊 V1.3.10.1 — 兩套正式系統共用的漸進式 App 外框。
   只套用於 app-shell.js 正常啟動的頁面。登入、API、資料庫及分頁返回邏輯不修改。 */
html.app-r3100 {
  --shell-radius: 20px;
  --shell-gap: clamp(10px,2.8vw,18px);
  --shell-elev: 0 8px 28px rgba(45,31,82,.095);
  scroll-padding-bottom: calc(106px + env(safe-area-inset-bottom,0px));
}
html.app-r3100 body {
  overflow-x:clip;
  -webkit-font-smoothing:antialiased;
  -webkit-tap-highlight-color:transparent;
}
html.app-r3100 body :is(button, a, select) { touch-action: manipulation; }
html.app-r3100 :is(button,input,select,textarea) { max-width:100%; }
html.app-r3100 :is(input,select,textarea) { min-width:0; }
html.app-r3100 :is(.card,.app-header) {
  border-radius:var(--shell-radius);
  box-shadow:var(--shell-elev);
}
html.app-r3100 :is(.card,.app-main,section,#placeList) { min-width:0; }
html.app-r3100 :is(.row,.grid,.card) > * { min-width:0; }
html.app-r3100 :is(.app-main, section, .card) :is(h1,h2,h3) { overflow-wrap:anywhere; }
html.app-r3100 .app-main { width:100%; }
html.app-r3100 .app-header {
  border:1px solid var(--line);
  background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 16%,var(--card)),var(--card) 75%);
}
html.app-r3100 .app-header .mode-switch {
  display:flex;align-items:center;justify-content:center;
  text-decoration:none;font-weight:800;
}
/* 兩套系統的原生頂部分頁：桌機/平板繼續使用，手機在安全替代導覽建立後才隱藏。 */
html.app-r3100 :is(.app-nav, main > .tabs) {
  scrollbar-width:thin;
  scrollbar-color:var(--line) transparent;
}
html.app-r3100 :is(.app-nav, main > .tabs) button {
  min-height:44px;
  border-radius:13px;
  transition: background-color .16s ease, border-color .16s ease;
}
html.app-r3100 :is(.app-nav, main > .tabs) button:focus-visible,
html.app-r3100 .shell-bottom-nav button:focus-visible,
html.app-r3100 .shell-more-panel button:focus-visible {
  outline:3px solid var(--accent);
  outline-offset:2px;
}
/* 行程及景點卡片維持原本的所有操作事件，僅改善手機寬度與照片比例。 */
html.app-r3100 #placeList {display:grid;grid-template-columns:minmax(0,1fr);gap:12px;}
html.app-r3100 #placeList > .card {margin:0;overflow:hidden;}
html.app-r3100 #placeList .place-cover {
  width:100%;height:auto;aspect-ratio:16/10;max-height:none;
  object-fit:cover;border-radius:14px;
}
html.app-r3100 #placeList .card > p {overflow-wrap:anywhere;}
html.app-r3100 .travel-filter {gap:6px;}
html.app-r3100 :is(.trip-saved-place-card,.trip-route-leg,.itinerary-card) {min-width:0;}
html.app-r3100 .trip-saved-body {overflow-wrap:anywhere;}
html.app-r3100 .shared-page-frame {width:100%;max-width:100%;}
/* 平板：景點卡依內容寬度自動換欄；表單仍維持完整可讀寬度。 */
@media(min-width:680px){
  html.app-r3100 #placeList {grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media(min-width:1080px){
  html.app-r3100 #placeList {grid-template-columns:repeat(3,minmax(0,1fr));}
  html.app-r3100 #app.wrap:has(> .app-nav) {
    max-width:1460px;
    display:grid;
    grid-template-columns:minmax(205px,232px) minmax(0,1fr);
    gap:18px 20px;
    align-items:start;
  }
  html.app-r3100 #app.wrap > .app-header {grid-column:1/-1;}
  html.app-r3100 #app.wrap > .app-nav {
    grid-column:1;grid-row:2;
    display:flex;flex-direction:column;
    align-items:stretch;
    position:sticky;top:18px;
    border:1px solid var(--line);border-radius:20px;
    padding:12px;background:var(--card);
    max-height:calc(100dvh - 36px);overflow-y:auto;
    box-shadow:var(--shell-elev);
  }
  html.app-r3100 #app.wrap > .app-nav button {text-align:left;white-space:normal;}
  html.app-r3100 #app.wrap > .app-main {grid-column:2;grid-row:2;min-width:0;}
  html.app-r3100 main:has(> .tabs) {
    max-width:1460px;
    display:grid;
    grid-template-columns:minmax(205px,232px) minmax(0,1fr);
    gap:18px 20px;align-items:start;
  }
  html.app-r3100 main > .app-header {grid-column:1/-1;grid-row:1;}
  html.app-r3100 main > .tabs {
    grid-column:1;grid-row:2;
    display:flex;flex-direction:column;align-items:stretch;
    position:sticky;top:18px;
    max-height:calc(100dvh - 36px);overflow-y:auto;
    padding:12px;background:var(--card);box-shadow:var(--shell-elev);
  }
  html.app-r3100 main > .tabs button {text-align:left;}
  html.app-r3100 main > section {grid-column:2;grid-row:2;min-width:0;}
  html.app-r3100 main > p {grid-column:2;min-width:0;}
}
/* 手機底部 App 導覽：只在 JS 已成功取得現有分頁按鈕時啟用。 */
.shell-bottom-nav,.shell-more-shade {display:none;}
@media(max-width:759px){
  html.app-r3100 body {overscroll-behavior-x:none;}
  html.app-r3100 :is(#app.wrap:has(> .app-nav),main:has(> .tabs)) {padding:10px 12px calc(100px + env(safe-area-inset-bottom,0px))!important;}
  html.app-r3100 :is(.app-main,main > section) {padding-bottom:2px;}
  html.app-r3100 .card {border-radius:18px;padding:15px;}
  html.app-r3100 .app-header {
    padding:12px!important;
    margin-bottom:10px;
    border-radius:20px!important;
  }
  html.app-r3100 .app-header .brand-line h1 {line-height:1.25;}
  html.app-r3100 .app-header .mode-switch {border-radius:12px;}
  html.app-r3100 :is(.app-main,main > section) > h2,
  html.app-r3100 main > section > .card > h2 {margin-top:3px;}
  html.app-r3100 #placeList {grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;}
  html.app-r3100 #placeList > .card {padding:10px;}
  html.app-r3100 #placeList > .card :is(b,small,p) {overflow-wrap:anywhere;}
  html.app-r3100 #placeList > .card b {display:block;line-height:1.4;}
  html.app-r3100 #placeList > .card p {margin:5px 0;font-size:.82rem;line-height:1.45;color:var(--muted);}
  html.app-r3100 #placeList .place-cover {border-radius:10px;margin:7px 0;}
  html.app-r3100 #placeList > .card .row {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px;}
  html.app-r3100 #placeList > .card .row button {
    width:100%;min-height:38px;padding:7px 5px;
    font-size:.83rem;border-radius:9px;white-space:normal;
  }
  html.app-r3100 :is(input:not([type=checkbox]):not([type=radio]):not([type=hidden]),select,textarea) {min-height:44px;}
  html.app-r3100 .row > :is(button,a) {min-height:44px;}
  html.app-r3100 :is(.app-nav,main > .tabs) {margin-bottom:12px;}
  html.app-r3100.shell-enhanced :is(#app > .app-nav,main > .tabs) {display:none!important;}
  html.app-r3100.shell-enhanced .shell-bottom-nav {
    position:fixed;left:0;right:0;bottom:0;z-index:800;
    display:grid;grid-template-columns:repeat(5,minmax(0,1fr));align-items:stretch;
    gap:2px;padding:7px max(6px,env(safe-area-inset-left,0px)) calc(7px + env(safe-area-inset-bottom,0px)) max(6px,env(safe-area-inset-right,0px));
    background:color-mix(in srgb,var(--card) 96%,var(--bg));
    box-shadow:0 -9px 32px rgba(18,13,45,.14);
    border-top:1px solid var(--line);
    backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);
  }
  html.app-r3100 .shell-bottom-nav button {
    width:100%;min-width:0;min-height:57px;padding:6px 1px;
    display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
    background:transparent;color:var(--muted);border:0;border-radius:13px;
    font:inherit;font-weight:650;line-height:1.2;cursor:pointer;
  }
  html.app-r3100 .shell-bottom-nav button.is-active {
    color:var(--accent);
    background:color-mix(in srgb,var(--accent) 11%,var(--card));
  }
  html.app-r3100 .shell-bottom-nav .shell-nav-icon {font-size:1.45rem;line-height:1.2;}
  html.app-r3100 .shell-bottom-nav .shell-nav-text {font-size:.71rem;letter-spacing:-.015em;white-space:nowrap;}
  html.app-r3100 .shell-more-shade:not([hidden]) {
    position:fixed;inset:0;z-index:2000;display:flex;align-items:flex-end;justify-content:center;
    background:rgba(12,9,27,.66);padding:14px 12px calc(12px + env(safe-area-inset-bottom,0px));
    backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);
  }
  html.app-r3100 .shell-more-panel {
    width:min(100%,540px);max-height:calc(80dvh - env(safe-area-inset-bottom,0px));
    overflow-y:auto;overscroll-behavior:contain;
    border:1px solid var(--line);border-radius:24px;
    background:var(--card);color:var(--ink);padding:18px 16px 22px;
    box-shadow:0 20px 60px #0006;
  }
  html.app-r3100 .shell-more-title {display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;}
  html.app-r3100 .shell-more-title strong {font-size:1.16rem;}
  html.app-r3100 .shell-more-title button {width:42px;height:42px;flex:0 0 auto;display:grid;place-items:center;border:1px solid var(--line);border-radius:12px;background:var(--card);color:var(--ink);padding:0;}
  html.app-r3100 .shell-more-grid {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;}
  html.app-r3100 .shell-more-grid button {
    min-height:72px;padding:14px 10px;border-radius:14px;
    background:color-mix(in srgb,var(--accent) 7%,var(--card));
    border:1px solid var(--line);color:var(--ink);
    text-align:left;font-size:.94rem;line-height:1.4;
  }
  html.app-r3100 .shell-more-grid button.is-active {
    background:color-mix(in srgb,var(--accent) 18%,var(--card));
    border-color:var(--accent);
  }
  html.app-r3100 body.shell-more-open {overflow:hidden;}
  /* 全螢幕表單與照片裁切維持原有分層，底部導航不應蓋住對話框。 */
  html.app-r3100 #editor:not(.hidden) {z-index:10020;}
  html.app-r3100 :is(#cropDialog,#itCropDialog):not(.hidden) {z-index:2147481000!important;}
}
@media(max-width:350px){
  html.app-r3100 #placeList {gap:7px;}
  html.app-r3100 #placeList > .card {padding:8px;}
  html.app-r3100 .shell-bottom-nav .shell-nav-text {font-size:.65rem;}
}
@media(prefers-reduced-motion:reduce){
  html.app-r3100 :is(button,.card) {transition:none!important;}
}

/* V1.3.10.17 — iOS/iPadOS large-screen navigation only.
   App contents remain tablet-width; no mobile grid/cards override.
   `shell-ios-touch` is set by app-shell.js only on touch-capable iOS/iPadOS. */
@media (min-width:760px){
  html.app-r3100.shell-ios-touch.shell-enhanced :is(#app > .app-nav,main > .tabs){display:none!important;}
  html.app-r3100.shell-ios-touch :is(#app.wrap:has(> .app-nav),main:has(> .tabs)){
    padding-bottom:calc(116px + env(safe-area-inset-bottom,0px))!important;
    scroll-padding-bottom:calc(116px + env(safe-area-inset-bottom,0px));
  }
  /* Do not inherit the desktop two-column / side navigation layout on iPad Pro. */
  html.app-r3100.shell-ios-touch #app.wrap:has(> .app-nav),
  html.app-r3100.shell-ios-touch main:has(> .tabs){
    display:block!important;
    max-width:1170px!important;
  }
  html.app-r3100.shell-ios-touch.shell-enhanced .shell-bottom-nav:not([hidden]){
    display:flex!important;
    align-items:stretch!important;
    position:fixed!important;
    left:0;right:0;bottom:0;
    z-index:800;
    width:100%;
    grid-template-columns:none!important;
    gap:0!important;
    padding:7px 0 calc(7px + env(safe-area-inset-bottom,0px))!important;
    border-top:1px solid var(--line);
    background:var(--card);
    box-shadow:0 -8px 32px #0006;
    isolation:isolate;
  }
  html.app-r3100.shell-ios-touch .shell-scrollport{
    width:100%;min-width:0;overflow-x:auto;overflow-y:hidden;
    scrollbar-width:none;-webkit-overflow-scrolling:touch;
    overscroll-behavior-x:contain;touch-action:pan-x pan-y;
  }
  html.app-r3100.shell-ios-touch .shell-scrollport::-webkit-scrollbar{display:none;}
  html.app-r3100.shell-ios-touch .shell-nav-track{
    display:flex;align-items:stretch;width:max-content;gap:4px;padding:0 16px;
  }
  html.app-r3100.shell-ios-touch .shell-bottom-nav button[data-shell-key]{
    flex:0 0 74px;width:74px!important;min-width:74px!important;min-height:67px!important;
    padding:6px 2px!important;display:flex;flex-direction:column;
    align-items:center;justify-content:center;gap:4px;
    border:0;border-radius:16px;cursor:pointer;
    background:transparent;color:var(--muted);font:inherit;
    touch-action:manipulation;
  }
  html.app-r3100.shell-ios-touch .shell-bottom-nav button.is-active{
    color:var(--accent);background:color-mix(in srgb,var(--accent) 11%,var(--card));
  }
  html.app-r3100.shell-ios-touch .shell-nav-icon{
    width:34px;height:34px;display:grid;place-items:center;
  }
  html.app-r3100.shell-ios-touch .shell-nav-icon img{
    width:32px;height:32px;object-fit:contain;display:block;
  }
  html.app-r3100.shell-ios-touch .shell-nav-text{
    font-size:10px;line-height:1.15;white-space:nowrap;
  }
  html.app-r3100.shell-ios-touch .shell-edge-cue{
    position:absolute;top:0;bottom:env(safe-area-inset-bottom,0px);
    display:flex;align-items:center;justify-content:center;
    width:17px;font-size:27px;z-index:4;pointer-events:none;
  }
  html.app-r3100.shell-ios-touch .shell-cue-left{left:0;background:linear-gradient(90deg,var(--card) 55%,transparent);}
  html.app-r3100.shell-ios-touch .shell-cue-right{right:0;background:linear-gradient(270deg,var(--card) 55%,transparent);}
  html.app-r3100.shell-ios-touch .shell-edge-cue[hidden]{display:none!important;}
  html.app-r3100.shell-ios-touch .shell-more-shade:not([hidden]){
    position:fixed;inset:0;z-index:2000;display:flex;align-items:flex-end;justify-content:center;
    background:rgba(12,9,27,.66);padding:14px 12px calc(12px + env(safe-area-inset-bottom,0px));
    backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);
  }
  html.app-r3100.shell-ios-touch .shell-more-panel{
    width:min(100%,540px);max-height:calc(80dvh - env(safe-area-inset-bottom,0px));
    overflow-y:auto;overscroll-behavior:contain;
    border:1px solid var(--line);border-radius:24px;
    background:var(--card);color:var(--ink);padding:18px 16px 22px;
    box-shadow:0 20px 60px #0006;
  }
  html.app-r3100.shell-ios-touch .shell-more-grid{
    display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;
  }
  html.app-r3100.shell-ios-touch .shell-more-grid button{
    min-height:72px;padding:14px 10px;border-radius:14px;
    border:1px solid var(--line);background:var(--card);color:var(--ink);
  }
  html.app-r3100.shell-ios-touch body.shell-more-open{overflow:hidden;}
}
