:root{
  --bg:#f4f7fb;--panel:#fff;--ink:#101828;--muted:#667085;--line:#e4e7ec;
  --accent:#175cd3;--accent2:#0b4eb7;--good:#067647;--goodbg:#ecfdf3;
  --warn:#b54708;--warnbg:#fffaeb;--bad:#b42318;--badbg:#fef3f2;
  --shadow:0 8px 28px rgba(16,24,40,.07);--r:18px;
}
*{box-sizing:border-box}html{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans JP",sans-serif;background:var(--bg);color:var(--ink)}
body{margin:0;min-height:100vh}button,input,select,textarea{font:inherit}a{color:var(--accent);text-decoration:none}
.topbar{height:60px;background:#101828;color:white;display:flex;align-items:center;justify-content:space-between;padding:0 max(18px,env(safe-area-inset-left));position:sticky;top:0;z-index:20}
.logo{font-size:22px;margin-right:8px}.version{font-size:11px;opacity:.55;margin-left:8px}.logout{color:#d0d5dd;font-size:13px}
.tabs{display:flex;overflow-x:auto;background:white;border-bottom:1px solid var(--line);position:sticky;top:60px;z-index:19;padding:0 8px}
.tabs a{min-width:72px;padding:10px 8px 8px;text-align:center;color:#667085;font-size:18px;border-bottom:3px solid transparent}
.tabs a span{display:block;font-size:11px;margin-top:3px}.tabs a.active{color:var(--accent);border-color:var(--accent)}
.container{max-width:1050px;margin:0 auto;padding:22px 16px 100px}.hero{padding:18px 2px 12px}.hero h1,.page-title h1{margin:4px 0 6px;font-size:clamp(25px,5vw,38px);letter-spacing:-.03em}
.eyebrow{font-size:11px;letter-spacing:.18em;font-weight:800;color:var(--accent);margin:0}.muted{color:var(--muted);margin:5px 0}.tiny{color:var(--muted);font-size:12px}
.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:12px 0 22px}.metric{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:15px;box-shadow:var(--shadow)}
.metric span{display:block;color:var(--muted);font-size:12px}.metric strong{display:block;font-size:clamp(18px,3vw,27px);margin-top:6px;letter-spacing:-.03em}.metric small{color:var(--warn);font-size:11px}.metric.big{margin:12px 0 18px}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:18px;margin:14px 0;box-shadow:var(--shadow)}.panel h2{font-size:17px;margin:0 0 14px}.panel-head{display:flex;justify-content:space-between;align-items:center;gap:12px}.panel-head h2{margin:0}
.list-row,.asset-row,.task{display:flex;align-items:center;gap:12px;padding:12px 0;border-top:1px solid var(--line)}.list-row:first-child,.asset-row:first-child,.task:first-child{border-top:0}.grow{flex:1;min-width:0}.grow strong{display:block}.grow small{display:block;color:var(--muted);font-size:12px;margin-top:3px}
.task-actions{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:8px;color:var(--muted);font-size:11px}.postpone-btn{padding:5px 8px;font-size:11px;font-weight:700}
.priority{width:28px;height:28px;border-radius:8px;display:grid;place-items:center;color:#fff;font-size:12px;font-weight:800}.p-高{background:#d92d20}.p-中{background:#f79009}.p-低{background:#667085}
.chips{display:flex;flex-wrap:wrap;gap:7px}.chip{background:#f2f4f7;border-radius:999px;padding:7px 10px;font-size:12px}
.page-title{margin:10px 2px 16px}.page-title p{color:var(--muted);margin:0}
.grid-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.grid-form.compact{grid-template-columns:repeat(3,minmax(0,1fr));align-items:end}.span2{grid-column:1/-1}
label{display:flex;flex-direction:column;gap:6px;font-size:12px;font-weight:700;color:#344054}input,select,textarea{width:100%;border:1px solid #d0d5dd;background:#fff;border-radius:10px;padding:11px 12px;color:#101828;outline:none}textarea{resize:vertical}input:focus,select:focus,textarea:focus{border-color:#84adff;box-shadow:0 0 0 3px #d1e0ff}
.check{flex-direction:row;align-items:center;font-size:13px;font-weight:600}.check input{width:auto}.warning-check{background:var(--warnbg);border:1px solid #fedf89;border-radius:10px;padding:10px}
button,.button{border:0;border-radius:10px;padding:10px 14px;font-weight:800;cursor:pointer;display:inline-block}.primary{background:var(--accent);color:white}.primary:hover{background:var(--accent2)}.secondary{background:#eaf2ff;color:#1849a9}.danger{background:var(--bad);color:white}.ghost{background:transparent}.ghost.danger{color:var(--bad)}.full{width:100%}.right{display:flex;justify-content:flex-end}.inline{display:inline;margin:0}.checkbtn{border:1px solid #d0d5dd;background:#fff;border-radius:50%;width:34px;height:34px;padding:0}.task.done{opacity:.48}.task.done strong{text-decoration:line-through}
.bar{height:6px;background:#f2f4f7;border-radius:99px;overflow:hidden;margin-top:7px}.bar i{display:block;height:100%;background:#84adff}
.cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:14px}.invest-card,.maint-card,.ai-answer{border:1px solid var(--line);border-radius:14px;padding:14px;background:#fff}.badge{font-size:11px;font-weight:800;border-radius:999px;padding:5px 8px}.badge.good{color:var(--good);background:var(--goodbg)}.badge.watch{color:var(--warn);background:var(--warnbg)}.badge.bad{color:var(--bad);background:var(--badbg)}
.invest-numbers,.meta-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:12px 0}.invest-numbers span,.meta-grid span{font-size:11px;color:var(--muted)}.invest-numbers b,.meta-grid b{display:block;color:var(--ink);margin-top:3px}.meta-grid{grid-template-columns:repeat(4,1fr)}
details{margin-top:16px;border-top:1px solid var(--line);padding-top:12px}summary{font-weight:800;cursor:pointer;margin-bottom:12px}
.odometer{display:flex;gap:12px;align-items:end}.odometer label{flex:1}.security-note{display:flex;gap:10px;align-items:center;background:#eff8ff;border:1px solid #b2ddff;color:#175cd3;border-radius:14px;padding:13px 15px;margin-bottom:14px}.security-note span{font-size:12px;color:#344054}
.ai-answer{margin-top:16px;background:#fbfcfe}.answer-text{line-height:1.75;font-size:14px;margin-top:12px}.table-wrap{overflow:auto}table{border-collapse:collapse;width:100%;font-size:12px}th,td{text-align:left;border-bottom:1px solid var(--line);padding:9px;white-space:nowrap}.status-list{line-height:2}
.alert{border-radius:12px;padding:11px 13px;margin:10px 0;font-size:13px}.alert.success{background:var(--goodbg);color:var(--good)}.alert.error{background:var(--badbg);color:var(--bad)}.empty{color:var(--muted);text-align:center;padding:20px}
footer{text-align:center;color:#98a2b3;font-size:11px;padding:25px 10px 45px}
.auth-page{display:grid;place-items:center;background:#101828;padding:20px}.auth-card{width:min(430px,100%);background:#fff;border-radius:24px;padding:28px;box-shadow:0 20px 60px rgba(0,0,0,.25)}.auth-card h1{margin:8px 0}.auth-card form{display:grid;gap:14px;margin-top:20px}.brand-mark{font-size:38px}
@media(max-width:720px){
 .container{padding:14px 12px 90px}.metrics{grid-template-columns:repeat(2,1fr)}.panel{padding:14px;border-radius:15px}.grid-form,.grid-form.compact{grid-template-columns:1fr}.span2{grid-column:auto}.cards{grid-template-columns:1fr}.invest-numbers{grid-template-columns:repeat(3,1fr)}.meta-grid{grid-template-columns:repeat(2,1fr)}.security-note{align-items:flex-start}.topbar{padding-left:14px;padding-right:14px}
}


.alert.warning{background:var(--warnbg);color:var(--warn)}
.budget-strip,.budget-box{border:1px solid var(--line);border-radius:14px;padding:12px 14px;margin:-8px 0 18px;background:#fff}
.budget-strip>div:first-child{display:flex;justify-content:space-between;gap:10px;align-items:center}
.budget-strip span{font-weight:800}
.budget-bar{height:8px;background:#eaecf0;border-radius:999px;overflow:hidden;margin:9px 0 6px}
.budget-bar i{display:block;height:100%;background:#12b76a;border-radius:999px}
.budget-strip.warn .budget-bar i,.budget-box.warn .budget-bar i{background:#f79009}
.budget-strip.bad .budget-bar i,.budget-box.bad .budget-bar i{background:#d92d20}
.budget-strip small,.budget-box small{color:var(--muted)}

.quick-stats{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin:-8px 0 14px}
.quick-stats>div{background:#eef4ff;border:1px solid #d1e0ff;border-radius:13px;padding:11px 13px;display:flex;justify-content:space-between;gap:10px}
.quick-stats span{color:#475467;font-size:12px}.quick-stats b{font-size:13px}
.data-freshness-panel{padding:13px 15px}.data-freshness-panel .panel-head{margin-bottom:9px}.freshness-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.freshness-grid>div{display:flex;justify-content:space-between;align-items:baseline;gap:10px}.freshness-grid span{color:var(--muted);font-size:11px}.freshness-grid strong{font-size:12px;font-weight:700;text-align:right}
.notice-row{display:flex;flex-direction:column;gap:3px;padding:10px 12px;border-left:4px solid #84adff;background:#f9fafb;border-radius:8px;margin:7px 0;color:var(--ink)}
.notice-row span{font-size:12px;color:var(--muted)}.notice-row.level-danger{border-color:#d92d20;background:#fff6f5}.notice-row.level-warning{border-color:#f79009;background:#fffaf0}.notice-row.level-good{border-color:#12b76a;background:#f4fff8}
.quick-health-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.quick-health-grid>div{border:1px solid var(--line);border-radius:11px;padding:10px}.quick-health-grid span,.quick-health-grid strong{display:block}.quick-health-grid span{font-size:11px;color:var(--muted)}.quick-health-grid strong{font-size:18px;margin-top:4px}
.health-record-panel{border-color:#b2ddff}.weight-bars{display:grid;gap:7px}.weight-bar-row{display:grid;grid-template-columns:42px 1fr 58px;gap:8px;align-items:center;font-size:11px}.weight-bar-row>span{color:var(--muted)}.weight-bar-row b{text-align:right;font-size:11px}.weight-bar-track{height:9px;background:#f2f4f7;border-radius:999px;overflow:hidden}.weight-bar-track i{display:block;height:100%;background:linear-gradient(90deg,#84adff,#175cd3);border-radius:999px}.today-action{border:1px solid #b2ddff;background:#f5faff;border-radius:14px;padding:15px}.today-action strong,.today-action small{display:block}.today-action strong{font-size:18px}.today-action small{color:var(--muted);margin-top:4px}.action-buttons,.inline-form{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:12px}.habit-list{margin:14px 0}.habit-row{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--line);padding:10px 0;gap:10px}.habit-row strong,.habit-row small{display:block}.habit-row small{font-size:11px;color:var(--muted);margin-top:3px}
.measurement-list{display:grid;gap:8px}.measurement-row{border:1px solid var(--line);border-radius:10px;padding:10px 12px}.measurement-row summary{margin:0;font-size:13px}.measurement-row form{margin-top:10px}.record-list{margin-top:12px}.record-list .list-row{align-items:flex-start}.record-list form{margin:0}.record-list button{padding:6px 8px;font-size:11px}.restore-preview{margin-top:14px;padding:13px;border:1px solid #fedf89;background:var(--warnbg);border-radius:12px}
.review-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.review-grid>div{padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--card)}.review-grid span,.review-grid small{display:block;color:var(--muted);font-size:12px}.review-grid strong{display:block;margin:5px 0;font-size:20px}@media(max-width:700px){.review-grid{grid-template-columns:1fr}}
.wedding-card{background:linear-gradient(135deg,#fff 0%,#fff7fb 100%)}.countdown{font-size:15px;color:#7a2849}.countdown b{font-size:32px;letter-spacing:-.04em}
.timeline{margin:14px 0}.timeline-row{display:flex;align-items:center;gap:10px;border-top:1px solid var(--line);padding:11px 0}.timeline-row.done{opacity:.45}.timeline-row.done strong{text-decoration:line-through}
.card-actions{display:flex;justify-content:flex-end;gap:8px;align-items:center}.market-panel{border-color:#b2ddff}
.future-spending-panel{border-color:#b9d5ff}.future-spending-total{font-size:22px;color:var(--accent)}.future-spending-months{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:14px 0}.future-spending-months>div{border:1px solid var(--line);border-radius:10px;padding:9px 10px;background:#fbfcfe}.future-spending-months span,.future-spending-months b{display:block}.future-spending-months span{font-size:11px;color:var(--muted)}.future-spending-months b{margin-top:4px;font-size:13px}.future-spending-list{display:grid;gap:0}.future-spending-row{display:flex;align-items:center;gap:10px;border-top:1px solid var(--line);padding:10px 0}.future-spending-row.done{opacity:.48}.future-spending-row.done strong{text-decoration:line-through}.future-spending-row>.grow small{color:var(--muted);font-size:12px}.future-spending-row>b{white-space:nowrap}@media(max-width:720px){.future-spending-months{grid-template-columns:repeat(3,1fr)}.future-spending-row{align-items:flex-start}.future-spending-row>b{margin-left:auto}}
@media(max-width:720px){.quick-stats{grid-template-columns:1fr}.countdown b{font-size:27px}}
@media(max-width:520px){.freshness-grid{grid-template-columns:1fr;gap:6px}.freshness-grid>div{justify-content:flex-start}.freshness-grid strong{margin-left:auto}}

/* Mobile layout safeguards: keep content inside the viewport while preserving
   intentional horizontal scrolling for the tab strip and data tables. */
.panel-head,.list-row,.asset-row,.task,.timeline-row,.future-spending-row,.security-note,
.quick-stats>div,.freshness-grid>div{min-width:0}
.panel-head{flex-wrap:wrap}
.panel-head>*,.list-row>*,.asset-row>*,.task>*,.timeline-row>*,.future-spending-row>*{min-width:0}
.grow,.panel-head>div{overflow-wrap:anywhere;word-break:break-word}
.grow strong,.grow small,.panel-head strong,.maint-card strong,.invest-card strong,
.future-spending-row b,.answer-text,.notice-row{overflow-wrap:anywhere;word-break:break-word}
.grid-form>*,.grid-form.compact>*,.cards>*,.metrics>*,.review-grid>*,.future-spending-months>*{min-width:0}
button,.button{min-height:44px}
input,select,textarea{font-size:16px}
.checkbtn{width:44px;height:44px;min-width:44px}
.postpone-btn,.record-list button{min-height:44px}
@media(max-width:720px){
 .container{min-width:0}
 .panel-head{align-items:flex-start}
 .action-buttons,.inline-form,.task-actions,.card-actions{row-gap:8px}
}
