
:root{
  --paper:#F1F4F2; --panel:#FFFFFF; --ink:#16303A; --ink-soft:#4C6770; --sea:#0E6070; --sea-soft:#DCEBEA;
  --brass:#9A6E22; --buoy:#C23B32; --mist:#D3DEDB;
  --h0:#DDEEEB; --h1:#9ED0C8; --h2:#E6C77E; --h3:#DB8E4F; --h4:#C23B32; --hx:#E4E8E7;
  --serif:"Noto Serif JP","Hiragino Mincho ProN","Yu Mincho","Songti SC",serif;
  --sans:"Noto Sans JP","Hiragino Sans","Yu Gothic","PingFang SC","Microsoft YaHei",system-ui,sans-serif;
  box-sizing:border-box;
  padding-top:env(safe-area-inset-top,0px); padding-bottom:env(safe-area-inset-bottom,0px);
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --paper:#0D1B21; --panel:#132832; --ink:#E2ECEA; --ink-soft:#9FB6BA; --sea:#63B8C4; --sea-soft:#183A44;
    --brass:#D8AB57; --buoy:#E4675C; --mist:#27424B;
    --h0:#1A3A41; --h1:#2F6E6E; --h2:#8E7433; --h3:#A2582C; --h4:#B8392F; --hx:#1B2E35;
  }
}
:root[data-theme="dark"]{
  --paper:#0D1B21; --panel:#132832; --ink:#E2ECEA; --ink-soft:#9FB6BA; --sea:#63B8C4; --sea-soft:#183A44;
  --brass:#D8AB57; --buoy:#E4675C; --mist:#27424B;
  --h0:#1A3A41; --h1:#2F6E6E; --h2:#8E7433; --h3:#A2582C; --h4:#B8392F; --hx:#1B2E35;
}
*,*::before,*::after{box-sizing:inherit}
html{scroll-padding-top:env(safe-area-inset-top,0px)}
body{margin:0;background:var(--paper);color:var(--ink);font:400 15px/1.7 var(--sans);-webkit-font-smoothing:antialiased}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--sea);outline-offset:2px}
.wrap{max-width:1120px;margin:0 auto;padding:28px 20px 60px}

/* ---------- header ---------- */
header.top{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px 24px;
  padding-bottom:22px;border-bottom:2px solid var(--ink)}
.brand h1{font:900 clamp(30px,5vw,46px)/1.1 var(--serif);margin:0;letter-spacing:.02em}
.brand p{margin:6px 0 0;color:var(--ink-soft);font-size:14px}
.top-right{display:flex;flex-direction:column;align-items:flex-end;gap:10px}
.langsel{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-soft)}
.langsel select{width:auto;padding:7px 10px;font-size:14px}
@media (max-width:600px){.top-right{align-items:stretch;width:100%}.langsel select{flex:1}}
.proto{font-size:13px;color:var(--ink-soft);border:1px dashed var(--ink-soft);border-radius:4px;padding:6px 10px;max-width:360px}

/* ---------- layout ---------- */
.grid{display:grid;grid-template-columns:300px minmax(0,1fr);gap:32px;margin-top:28px}
@media (max-width:860px){.grid{grid-template-columns:minmax(0,1fr)}}

/* ---------- planner form ---------- */
aside form{position:sticky;top:calc(16px + env(safe-area-inset-top,0px));display:flex;flex-direction:column;gap:20px}
fieldset{border:0;margin:0;padding:0}
legend,.lbl{font-weight:700;font-size:14px;margin-bottom:8px;display:block;padding:0}
input[type=date],select{width:100%;padding:10px 12px;border:1.5px solid var(--mist);border-radius:6px;background:var(--panel)}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{position:relative}
.chip input{position:absolute;opacity:0;inset:0;cursor:pointer}
.chip span{display:block;padding:8px 13px;border:1.5px solid var(--mist);border-radius:999px;background:var(--panel);font-size:14px;cursor:pointer}
.chip input:checked + span{background:var(--sea);border-color:var(--sea);color:var(--panel)}
.chip input:focus-visible + span{outline:2px solid var(--sea);outline-offset:2px}
.hint{font-size:12.5px;color:var(--ink-soft);margin:6px 0 0}
.go{padding:12px 16px;border:0;border-radius:6px;background:var(--ink);color:var(--paper);font-weight:700;cursor:pointer}
.go:hover{opacity:.9}

/* ---------- summary ---------- */
.summary{font:700 clamp(19px,2.6vw,24px)/1.5 var(--serif);margin:0 0 6px}
.summary-sub{margin:0 0 26px;color:var(--ink-soft)}
.crowd{display:inline-block;padding:1px 10px;border-radius:4px;color:#fff;font-family:var(--sans);font-size:.8em;vertical-align:2px}

/* ---------- tide table (heatmap) ---------- */
section.tide h2,section.route h2,section.reviews h2{font:700 20px/1.3 var(--serif);margin:0 0 4px}
.sec-sub{color:var(--ink-soft);font-size:13.5px;margin:0 0 14px}
.tide-scroll{overflow-x:auto;border:1px solid var(--mist);border-radius:8px;background:var(--panel)}
table.tide-t{border-collapse:separate;border-spacing:2px;min-width:640px;width:100%;padding:8px}
.tide-t th{font-weight:500;font-size:12px;color:var(--ink-soft);text-align:center;padding:2px 0}
.tide-t th.name{text-align:left;font-size:13px;color:var(--ink);min-width:130px;max-width:210px;line-height:1.35;padding-right:10px;font-weight:500;position:sticky;left:0;background:var(--panel)}
.tide-t td{height:26px;border-radius:3px;font-size:11px;text-align:center;font-variant-numeric:tabular-nums;color:var(--ink)}
.tide-t td.x{background:var(--hx);color:var(--ink-soft)}
.legend{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-soft);margin-top:8px;flex-wrap:wrap}
.legend i{display:inline-block;width:22px;height:10px;border-radius:2px}

/* ---------- route ---------- */
section.route{margin-top:40px}
ol.steps{list-style:none;margin:0;padding:0;position:relative}
ol.steps::before{content:"";position:absolute;left:62px;top:8px;bottom:8px;width:2px;background:var(--mist)}
.step{display:grid;grid-template-columns:52px 22px 1fr;gap:0 10px;padding:10px 0}
.step time{font:700 17px/1.4 var(--serif);font-variant-numeric:tabular-nums;text-align:right}
.dot{width:12px;height:12px;border-radius:50%;background:var(--panel);border:2.5px solid var(--sea);margin:6px auto 0;position:relative;z-index:1}
.step.meal .dot{border-color:var(--brass)}
.step.pass .dot{border-color:var(--buoy);background:var(--buoy)}
.step h3{margin:0;font-size:16px;font-weight:700;line-height:1.5}
.step .meta{font-size:13px;color:var(--ink-soft)}
.step .meta b{color:var(--ink);font-weight:500}
.step .tip{font-size:13.5px;margin-top:3px}
.halfline{margin:14px 0 6px 72px;font-size:13px;color:var(--ink-soft);display:flex;align-items:center;gap:10px}
.halfline::after{content:"";flex:1;border-top:1.5px dashed var(--mist)}

.lock{margin-top:8px;border:1.5px solid var(--ink);border-radius:10px;overflow:hidden;background:var(--panel)}
.lock .ghost{padding:14px 18px 0;filter:blur(3px);opacity:.55;pointer-events:none;user-select:none}
.ghost .gl{display:grid;grid-template-columns:52px 1fr;gap:12px;padding:8px 0}
.ghost .bar{height:12px;border-radius:3px;background:var(--mist);margin-top:5px}
.lock .cta{padding:18px;border-top:1px solid var(--mist);display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px}
.lock .cta p{margin:0;max-width:440px}
.lock .cta strong{font-family:var(--serif);font-size:17px}
.buy{padding:12px 20px;border:0;border-radius:6px;background:var(--buoy);color:#fff;font-weight:700;cursor:pointer;white-space:nowrap}
.unlocked-note{margin:10px 0 0 72px;font-size:13px;color:var(--sea)}

/* ---------- reviews ---------- */
section.reviews{margin-top:48px;padding-top:26px;border-top:2px solid var(--ink)}
.rv-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:8px}
.avg{font:700 28px/1 var(--serif)}
.avg small{font:400 13px var(--sans);color:var(--ink-soft);margin-left:6px}
.stars{color:var(--brass);letter-spacing:1px}
ul.rv{list-style:none;margin:16px 0 0;padding:0;display:grid;gap:12px}
ul.rv li{background:var(--panel);border-left:3px solid var(--sea);padding:12px 16px;border-radius:0 6px 6px 0}
ul.rv .who{font-size:13px;color:var(--ink-soft)}
.rv-lang{font-size:11px;border:1px solid var(--mist);border-radius:3px;padding:0 5px;margin-left:6px}
ul.rv p{margin:4px 0 0;white-space:pre-wrap;word-break:break-word}
.empty{color:var(--ink-soft);padding:14px 0}
form.rv-form{margin-top:18px;background:var(--panel);padding:16px;border-radius:8px;border:1px solid var(--mist);display:grid;gap:12px}
.rate{display:flex;gap:4px}
.rate button{border:0;background:none;font-size:26px;line-height:1;cursor:pointer;color:var(--mist);padding:0 2px}
.rate button.on{color:var(--brass)}
textarea{width:100%;min-height:90px;padding:10px 12px;border:1.5px solid var(--mist);border-radius:6px;background:var(--paper);resize:vertical}
.rv-actions{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.rv-actions .msg{font-size:13px;color:var(--ink-soft)}
.rv-locked{margin-top:14px;font-size:14px;color:var(--ink-soft)}

footer{margin-top:56px;font-size:12.5px;color:var(--ink-soft);border-top:1px solid var(--mist);padding-top:16px}
footer a{color:var(--sea)}

/* ---------- modal ---------- */
dialog{border:0;border-radius:12px;padding:0;max-width:420px;width:calc(100% - 32px);background:var(--panel);color:var(--ink);box-shadow:0 20px 60px rgba(0,0,0,.35)}
dialog::backdrop{background:rgba(10,25,30,.55)}
.dlg{padding:22px}
.dlg h2{font:700 20px/1.3 var(--serif);margin:0 0 6px}
.dlg .price{font:900 30px/1.2 var(--serif);margin:10px 0}
.pay{display:grid;gap:10px;margin:14px 0}
.pay label{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1.5px solid var(--mist);border-radius:8px;cursor:pointer}
.pay label:has(input:checked){border-color:var(--sea);background:var(--sea-soft)}
.pay .logo{width:34px;height:34px;border-radius:8px;display:grid;place-items:center;color:#fff;font-weight:700;font-size:13px;flex:none}
.dlg .row{display:flex;gap:10px;justify-content:flex-end;margin-top:14px}
.ghostbtn{padding:11px 16px;border:1.5px solid var(--mist);border-radius:6px;background:none;cursor:pointer}
.demo{font-size:12.5px;color:var(--ink-soft);margin:8px 0 0}
@media (prefers-reduced-motion:no-preference){ .step{animation:none} }

/* ---------- website additions ---------- */
.auth{display:flex;align-items:center;gap:10px;justify-content:flex-end;min-height:38px}
.who-me{font-size:13px;color:var(--ink-soft);max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ghostbtn{background:var(--panel)}
.loading{color:var(--ink-soft);padding:24px 0}
.err{border:1.5px solid var(--buoy);border-radius:8px;padding:14px 16px;margin-bottom:20px;display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;background:var(--panel)}
.err p{margin:0}
#result.stale{opacity:.55;transition:opacity .15s}
.src{font-size:12.5px;color:var(--ink-soft);margin:6px 0 0}
.cta-sub{color:var(--ink-soft);font-size:14px}
.empty{color:var(--ink-soft);list-style:none;padding:6px 0;background:none!important;border:0!important}
input[type=text],input[type=email]{width:100%;padding:10px 12px;border:1.5px solid var(--mist);border-radius:6px;background:var(--paper)}
.dlg-sub{margin:0 0 16px;color:var(--ink-soft)}
.gbtn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;padding:12px;border:1.5px solid var(--mist);border-radius:8px;background:var(--panel);font-weight:500;cursor:pointer}
.gbtn:hover{border-color:var(--ink-soft)}
.or{display:flex;align-items:center;gap:10px;color:var(--ink-soft);font-size:13px;margin:16px 0}
.or::before,.or::after{content:"";flex:1;border-top:1px solid var(--mist)}
#emailForm{display:grid;gap:10px}
.dlg .msg{font-size:13.5px;color:var(--sea);min-height:1.2em;margin:12px 0 0}
.dlg .row{margin-top:8px}
.linkbtn{background:none;border:0;padding:0;color:var(--sea);text-decoration:underline;cursor:pointer;font-size:14px}
footer a{margin-left:8px}
.dlg{position:relative}
.dlg .row{position:absolute;top:10px;right:10px;margin:0}
.dlg .row .ghostbtn{padding:4px 11px;font-size:18px;line-height:1}
.gsi{display:flex;justify-content:center;min-height:44px}
[hidden]{display:none!important}
