*{box-sizing:border-box}
:root{
  --bg:#f7f2ea;--card:#fffdf9;--ink:#4c403a;--muted:#8d7f77;--line:#eadfd6;
  --accent:#b7836f;--accent-2:#d9b8a7;--soft:#f3e8df;--income:#6e9b88;--expense:#c8727f;
  --shadow:0 14px 38px rgba(92,67,55,.08);--radius:24px;
}
body[data-theme="strawberry"]{--bg:#fff4f6;--card:#fffafb;--ink:#5b3d46;--muted:#967985;--line:#f0d9df;--accent:#d9899c;--accent-2:#efb4c2;--soft:#fde9ee}
body[data-theme="lavender"]{--bg:#f7f3fb;--card:#fdfbff;--ink:#4f4560;--muted:#867b93;--line:#e5dcf0;--accent:#9c83bd;--accent-2:#c9b5df;--soft:#eee7f7}
body[data-theme="mint"]{--bg:#f2f8f4;--card:#fbfefc;--ink:#40564c;--muted:#75887e;--line:#dbe9e0;--accent:#77a98d;--accent-2:#acd0bb;--soft:#e7f3eb}
body[data-theme="sky"]{--bg:#f2f7fb;--card:#fbfdff;--ink:#415365;--muted:#74869a;--line:#dbe6ef;--accent:#79a5c7;--accent-2:#accae0;--soft:#e7f1f8}
body{margin:0;background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;transition:.25s background}
button,input,select{font:inherit}button{cursor:pointer}.app-shell{max-width:1040px;margin:0 auto;padding:22px 16px 70px}
.hero{display:flex;justify-content:space-between;align-items:flex-start;gap:18px;padding:20px 4px 12px}
.hero h1{font-size:38px;margin:6px 0 8px;letter-spacing:-.03em}.hero h1 span{color:var(--accent)}.hero p{margin:0;color:var(--muted)}
.eyebrow,.tiny-label{font-size:11px;font-weight:900;letter-spacing:.08em;color:var(--accent)}.hero-actions{display:flex;gap:8px}
.tabs{display:flex;gap:8px;overflow:auto;padding:4px 0 8px}.tab{border:1px solid var(--line);background:var(--card);color:var(--muted);padding:10px 15px;border-radius:999px;font-weight:800;white-space:nowrap}.tab.active{background:var(--accent);color:#fff;border-color:var(--accent)}
.tab-panel{display:none}.tab-panel.active{display:block}
.paper-card,.summary-card{background:var(--card);border:1px solid var(--line);box-shadow:var(--shadow)}
.paper-card{border-radius:var(--radius);padding:20px;margin-top:14px;position:relative;overflow:hidden}.paper-card:before{content:"";position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(circle at 18px 18px,var(--soft) 1.2px,transparent 1.3px);background-size:28px 28px;opacity:.35}
.paper-card>*{position:relative}
.summary-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.summary-card{border-radius:20px;padding:16px}.summary-card span{display:block;color:var(--muted);font-size:12px}.summary-card strong{display:block;font-size:23px;margin-top:5px}.summary-card.income strong{color:var(--income)}.summary-card.expense strong{color:var(--expense)}
.soft-btn,.round-btn,.upload-btn,.restore-btn{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:13px;padding:10px 13px;font-weight:800}.round-btn{width:42px;height:42px;padding:0;font-size:22px}.full{width:100%}
.calendar-head,.section-row,.records-head{display:flex;justify-content:space-between;align-items:center;gap:12px}.month-title-wrap{text-align:center}.month-title-wrap h2{font-size:24px;margin:4px 0 0}
.weekdays,.calendar{display:grid;grid-template-columns:repeat(7,1fr)}.weekdays{margin-top:14px;text-align:center;color:var(--muted);font-size:12px}.weekdays span{padding:8px}
.calendar{border-left:1px solid var(--line);border-top:1px solid var(--line)}.day{min-height:110px;border:0;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:rgba(255,255,255,.36);padding:8px;text-align:left;color:var(--ink);position:relative}.day.other{opacity:.4}.day.selected{box-shadow:inset 0 0 0 2px var(--accent);background:var(--soft)}.day.today .day-num{background:var(--accent);color:white}
.day-num{display:inline-flex;width:26px;height:26px;border-radius:999px;align-items:center;justify-content:center;font-size:12px;font-weight:900}.day-money{margin-top:7px;font-size:10.5px;line-height:1.45}.day-expense{color:var(--expense);font-weight:900}.day-income{color:var(--income);font-weight:900}.photo-count{display:inline-flex;margin-top:5px;background:var(--card);border:1px solid var(--line);border-radius:999px;padding:2px 6px;font-size:9px}
body[data-calendar-style="lined"] .day{background-image:repeating-linear-gradient(to bottom,transparent 0,transparent 20px,var(--line) 21px)}body[data-calendar-style="plain"] .paper-card:before{display:none}body[data-calendar-style="plain"] .day{background:#fff}
.pill{background:var(--soft);color:var(--accent);padding:8px 12px;border-radius:999px;font-weight:900;font-size:12px}
.entry-form{margin-top:16px}.segmented{display:grid;grid-template-columns:1fr 1fr;background:var(--soft);padding:4px;border-radius:14px}.segmented input{display:none}.segmented span{display:block;padding:10px;text-align:center;border-radius:10px;font-weight:900;color:var(--muted)}.segmented input:checked+span{background:var(--card);color:var(--ink);box-shadow:0 4px 12px rgba(0,0,0,.05)}
.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:11px;margin-top:14px}.form-grid.compact{margin-top:16px}.form-grid label,.budget-box label{font-size:12px;font-weight:900;color:var(--muted)}.form-grid input,.form-grid select,.toolbar input,.money-input input{width:100%;margin-top:6px;padding:12px 13px;border:1px solid var(--line);border-radius:12px;background:var(--card);color:var(--ink)}.wide{grid-column:1/-1}
.primary-btn{border:0;background:var(--accent);color:#fff;border-radius:13px;padding:13px 16px;font-weight:900}.entry-form>.primary-btn{width:100%;margin-top:14px}
.records-head{margin-top:22px}.danger-link{border:0;background:transparent;color:var(--expense);font-weight:800;font-size:12px}.records,.month-records,.fixed-list{display:grid;gap:9px;margin-top:12px}.record,.fixed-item{border:1px solid var(--line);background:rgba(255,255,255,.55);border-radius:15px;padding:12px;display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center}.record-meta{font-size:11px;color:var(--muted);margin-top:4px}.record-amount{font-weight:900}.record-amount.expense{color:var(--expense)}.record-amount.income{color:var(--income)}.record-actions{grid-column:1/-1;display:flex;justify-content:flex-end}.delete-btn,.danger-btn{border:0;background:#fff0f2;color:var(--expense);border-radius:10px;padding:8px 10px;font-weight:800}
.photo-section{margin-top:24px;padding-top:20px;border-top:1px dashed var(--line)}.upload-btn input,.restore-btn input{display:none}.photo-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:12px}.photo-thumb{aspect-ratio:1;border-radius:16px;overflow:hidden;border:1px solid var(--line);background:var(--soft);padding:0}.photo-thumb img{width:100%;height:100%;object-fit:cover}
.toolbar{display:grid;grid-template-columns:1fr auto;gap:10px;margin-top:14px}.muted{color:var(--muted);font-size:12px}.empty{padding:26px;text-align:center;color:var(--muted)}
.budget-box{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:end;margin-top:18px}.money-input{display:flex;align-items:center;gap:8px}.money-input span{font-weight:800}.progress-track{height:14px;background:var(--soft);border-radius:999px;overflow:hidden;margin-top:20px}.progress-bar{height:100%;width:0;background:var(--accent);transition:.25s}.budget-metrics,.stats-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px}.budget-metrics div,.stats-kpis div{background:var(--soft);border-radius:15px;padding:13px}.budget-metrics span,.stats-kpis span{display:block;color:var(--muted);font-size:11px}.budget-metrics strong,.stats-kpis strong{display:block;margin-top:5px}
.category-bars{display:grid;gap:11px;margin-top:16px}.bar-row{display:grid;grid-template-columns:110px 1fr auto;gap:10px;align-items:center}.bar-name{font-size:12px;font-weight:900}.bar-track{height:10px;border-radius:999px;background:var(--soft);overflow:hidden}.bar-fill{height:100%;background:var(--accent);border-radius:999px}.bar-value{font-size:12px;font-weight:900}
.modal{position:fixed;inset:0;background:rgba(52,42,36,.38);display:grid;place-items:center;padding:18px;z-index:1000}.modal.hidden{display:none}.modal-card,.viewer-card{width:min(720px,100%);max-height:90vh;overflow:auto;background:var(--card);border-radius:26px;padding:20px;box-shadow:0 24px 80px rgba(0,0,0,.18)}.custom-group{margin-top:20px}.theme-grid{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.theme-chip,.calendar-style-chip{border:1px solid var(--line);background:var(--soft);color:var(--ink);padding:10px 12px;border-radius:12px;font-weight:800}.color-row{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:10px 0}.color-row label{font-size:12px;font-weight:800}.color-row input{width:100%;height:44px;border:0;background:transparent}.emoji-editor{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:10px}.emoji-row{display:grid;grid-template-columns:70px 1fr;gap:8px;align-items:center}.emoji-row input{width:100%;padding:9px;border:1px solid var(--line);border-radius:10px;background:var(--card)}
.viewer-card{position:relative;text-align:center}.viewer-card img{max-width:100%;max-height:70vh;border-radius:18px}.viewer-close{position:absolute;right:12px;top:12px;width:38px;height:38px;border:0;border-radius:999px;background:rgba(0,0,0,.55);color:#fff;font-size:24px}.viewer-actions{margin-top:12px}
@media(max-width:760px){.app-shell{padding:14px 10px 50px}.hero{display:grid}.hero h1{font-size:31px}.summary-grid{grid-template-columns:1fr 1fr}.paper-card{padding:14px;border-radius:20px}.day{min-height:86px;padding:5px}.day-money{font-size:9px}.photo-grid{grid-template-columns:repeat(3,1fr)}.form-grid{grid-template-columns:1fr}.wide{grid-column:auto}.toolbar,.budget-box{grid-template-columns:1fr}.bar-row{grid-template-columns:90px 1fr auto}.emoji-editor{grid-template-columns:1fr}}

.report-hero{margin-top:18px;padding:22px;border-radius:22px;background:var(--soft);display:grid;grid-template-columns:1fr 1.4fr;gap:18px;align-items:center}
.report-hero span,.report-box span{display:block;color:var(--muted);font-size:12px}.report-hero strong{display:block;font-size:30px;margin-top:5px;color:var(--expense)}
.report-message{font-size:15px;font-weight:800;line-height:1.6}.report-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:12px}
.report-box{border:1px solid var(--line);border-radius:16px;padding:14px;background:rgba(255,255,255,.55)}.report-box strong{display:block;margin-top:6px}
.subheading{margin:22px 0 8px}.month-chart{display:flex;align-items:end;gap:10px;height:190px;padding:18px 8px 0;border-bottom:1px solid var(--line)}
.month-col{flex:1;display:flex;flex-direction:column;justify-content:end;align-items:center;height:100%;gap:6px}.month-bar{width:min(44px,70%);min-height:3px;background:var(--accent);border-radius:12px 12px 4px 4px}.month-col small{font-size:10px;color:var(--muted)}.month-col b{font-size:10px}
.goal-list{display:grid;gap:12px;margin-top:18px}.goal-card{border:1px solid var(--line);border-radius:18px;padding:15px;background:rgba(255,255,255,.55)}.goal-head{display:flex;justify-content:space-between;gap:10px}.goal-progress{height:12px;background:var(--soft);border-radius:999px;overflow:hidden;margin:12px 0 7px}.goal-progress>div{height:100%;background:var(--accent);border-radius:999px}.goal-meta{font-size:11px;color:var(--muted);display:flex;justify-content:space-between;gap:8px}.goal-actions{display:flex;gap:7px;margin-top:10px;justify-content:flex-end}
@media(max-width:760px){.report-hero{grid-template-columns:1fr}.report-grid{grid-template-columns:1fr 1fr}.month-chart{gap:5px}.month-col b{font-size:8px}}

.quick-entry{margin-top:18px;padding:14px;border:1px dashed var(--accent-2);border-radius:18px;background:var(--soft)}
.quick-head b{font-size:14px}.quick-head span{margin-left:8px;font-size:11px;color:var(--muted)}
.quick-grid{display:grid;grid-template-columns:150px 1fr auto 140px auto;gap:8px;margin-top:10px;align-items:center}
.quick-grid select,.quick-grid input{width:100%;border:1px solid var(--line);background:var(--card);border-radius:11px;padding:10px;color:var(--ink)}
.quick-amounts{display:flex;gap:5px}.quick-amounts button{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:10px;padding:9px 8px;font-size:11px;font-weight:800}
.quick-save{border:0;background:var(--accent);color:white;border-radius:11px;padding:11px 13px;font-weight:900}
.category-budget-editor{margin-top:18px;padding-top:16px;border-top:1px dashed var(--line)}
.category-budget-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:9px;margin-top:10px}
.cat-budget-item{display:grid;grid-template-columns:1fr 130px;gap:8px;align-items:center;border:1px solid var(--line);padding:10px;border-radius:13px;background:rgba(255,255,255,.45)}
.cat-budget-item label{font-size:12px;font-weight:900}.cat-budget-item input{width:100%;border:1px solid var(--line);background:var(--card);border-radius:10px;padding:9px}
.bar-row.warning .bar-fill{background:#d5a34d}.bar-row.over .bar-fill{background:var(--expense)}
.bar-status{font-size:10px;font-weight:900}.bar-status.warning{color:#a87928}.bar-status.over{color:var(--expense)}
.check-row{display:flex!important;align-items:center;gap:8px}.check-row input{width:auto!important;margin:0!important}
.year-select{border:1px solid var(--line);background:var(--card);color:var(--ink);padding:9px 12px;border-radius:12px;font-weight:800}
.yearly-kpis{grid-template-columns:repeat(4,1fr)}
.year-chart{display:flex;align-items:end;gap:8px;height:220px;padding:20px 4px 0;border-bottom:1px solid var(--line)}
.year-col{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%;gap:5px;min-width:0}
.year-bar{width:min(38px,72%);min-height:2px;background:var(--accent);border-radius:10px 10px 3px 3px}.year-col small{font-size:9px;color:var(--muted)}.year-col b{font-size:8px;white-space:nowrap}
.toast{position:fixed;left:50%;bottom:25px;transform:translateX(-50%);background:#3d3835;color:white;padding:11px 15px;border-radius:999px;font-size:12px;font-weight:800;z-index:5000;box-shadow:0 12px 30px rgba(0,0,0,.18)}
@media(max-width:850px){.quick-grid{grid-template-columns:1fr 1fr}.quick-amounts{grid-column:1/-1}.quick-save{grid-column:1/-1}.yearly-kpis{grid-template-columns:1fr 1fr}}
@media(max-width:600px){.category-budget-grid{grid-template-columns:1fr}.cat-budget-item{grid-template-columns:1fr 115px}.year-chart{gap:3px}.year-col b{display:none}}

/* v4.1 mobile/calendar fixes */
.calendar-card{overflow:hidden}
.calendar,.weekdays{width:100%;min-width:0}
.calendar>*{min-width:0}
.day{min-width:0;overflow:hidden}
.day-money,.day-expense,.day-income{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.budget-alert{margin-top:12px;border-radius:16px;padding:13px 15px;font-size:13px;font-weight:900;border:1px solid transparent}
.budget-alert.hidden{display:none}.budget-alert.warning{display:block;background:#fff6dd;color:#926715;border-color:#ecd18a}.budget-alert.over{display:block;background:#fff0f2;color:#a83f50;border-color:#edb6bf}
.category-pick-wrap{margin-top:2px}.field-label{font-size:12px;font-weight:900;color:var(--muted);margin-bottom:7px}
.category-quick-pick{display:flex;gap:7px;flex-wrap:wrap}.cat-chip{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:999px;padding:8px 10px;font-size:12px;font-weight:800}.cat-chip.active{background:var(--accent);border-color:var(--accent);color:#fff}
.hidden-select{position:absolute!important;opacity:0!important;pointer-events:none!important;width:1px!important;height:1px!important}
.savings-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:18px}.savings-summary>div{background:var(--soft);border-radius:15px;padding:13px}.savings-summary span{display:block;color:var(--muted);font-size:11px}.savings-summary strong{display:block;margin-top:5px}
.status-chip{display:inline-flex;border-radius:999px;padding:4px 7px;font-size:10px;font-weight:900}.status-chip.active{background:#e9f5ed;color:#4d8262}.status-chip.ended{background:#f3eeee;color:#8b7779}
.end-btn{border:1px solid #e5b9c0;background:#fff5f6;color:#b45261;border-radius:10px;padding:8px 10px;font-weight:800}
@media(max-width:900px) and (orientation:landscape){
  .app-shell{max-width:none;padding-left:8px;padding-right:8px}
  .calendar-card{padding:10px}
  .day{min-height:68px;padding:3px}
  .day-num{width:21px;height:21px;font-size:10px}
  .day-money{font-size:8px;line-height:1.25;margin-top:3px}
  .photo-count{font-size:7px;padding:1px 4px;margin-top:2px}
  .weekdays span{padding:5px 2px;font-size:10px}
  .month-title-wrap h2{font-size:18px}
}
@media(max-width:520px){
  .day{min-height:76px;padding:4px}
  .day-money{font-size:8.5px}
  .savings-summary{grid-template-columns:1fr}
  .category-quick-pick{gap:5px}.cat-chip{padding:7px 8px;font-size:11px}
}

/* v4.2 savings goal */
.saving-goal-create,.saving-record-box{
  margin-top:18px;padding:16px;border:1px dashed var(--accent-2);
  border-radius:20px;background:var(--soft)
}
.saving-record-box{margin-top:22px}
.saving-goal-cards{display:grid;gap:12px;margin-top:16px}
.saving-goal-card{
  border:1px solid var(--line);background:rgba(255,255,255,.58);
  border-radius:20px;padding:15px
}
.saving-goal-head{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}
.saving-goal-head h3{margin:0;font-size:16px}
.saving-goal-percent{
  min-width:58px;text-align:center;padding:7px 9px;border-radius:999px;
  background:var(--accent);color:#fff;font-weight:900;font-size:12px
}
.saving-goal-progress{
  height:14px;background:var(--soft);border-radius:999px;overflow:hidden;margin-top:13px
}
.saving-goal-progress>div{
  height:100%;background:linear-gradient(90deg,var(--accent-2),var(--accent));
  border-radius:999px;transition:width .3s
}
.saving-goal-stats{
  display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px
}
.saving-goal-stats div{
  background:var(--soft);border-radius:13px;padding:10px
}
.saving-goal-stats span{display:block;font-size:10px;color:var(--muted)}
.saving-goal-stats strong{display:block;margin-top:4px;font-size:12px}
.saving-goal-guide{
  margin-top:10px;padding:10px 12px;border-radius:13px;background:var(--card);
  font-size:11px;line-height:1.55;color:var(--muted)
}
.saving-goal-complete{
  margin-top:10px;padding:10px 12px;border-radius:13px;
  background:#edf8ef;color:#4f7d5a;font-size:12px;font-weight:900
}
.saving-goal-actions{
  display:flex;justify-content:flex-end;gap:7px;margin-top:10px
}
@media(max-width:560px){
  .saving-goal-stats{grid-template-columns:1fr 1fr}
  .saving-goal-stats div:last-child{grid-column:1/-1}
}

.edit-btn{
  border:1px solid var(--line);
  background:var(--soft);
  color:var(--ink);
  border-radius:10px;
  padding:8px 10px;
  font-size:11px;
  font-weight:800;
}
.record-actions{
  gap:7px;
}

/* v4.4 stability */
.tab-panel{contain:layout style}
.calendar{min-height:462px}
@media(max-width:760px){.calendar{min-height:516px}}
@media(max-width:900px) and (orientation:landscape){.calendar{min-height:408px}}
.tabs{-webkit-overflow-scrolling:touch;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}


/* ===== 가꾸 구매자 인증 ===== */
body.auth-pending{overflow:hidden}
body.auth-pending .app-shell{visibility:hidden}
.auth-gate{position:fixed;inset:0;z-index:10000;display:grid;place-items:center;padding:18px;background:linear-gradient(180deg,#f7f2ea,#f1e8de)}
.auth-gate.hidden{display:none}
.auth-card{width:min(460px,100%);background:#fffdf9;border:1px solid #eadfd6;border-radius:28px;padding:28px 22px;box-shadow:0 24px 70px rgba(92,67,55,.16);text-align:center;color:#4c403a}
.auth-badge{display:inline-flex;padding:7px 12px;border-radius:999px;background:#f3e8df;color:#9a6858;font-size:12px;font-weight:900}
.auth-card h1{font-size:30px;margin:13px 0 8px}.auth-sub{font-size:13px;line-height:1.7;color:#8d7f77;margin:0 0 18px}.auth-label{display:block;text-align:left;font-size:12px;font-weight:900;color:#6f625b;margin:0 0 6px}
.auth-input{width:100%;border:1px solid #dfd2c8;background:#fff;border-radius:14px;padding:14px 13px;font:800 16px ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.04em;text-transform:uppercase;color:#4c403a;outline:none}.auth-input:focus{border-color:#b7836f;box-shadow:0 0 0 3px rgba(183,131,111,.12)}
.auth-submit{width:100%;margin-top:10px;border:0;border-radius:14px;padding:14px;background:#b7836f;color:#fff;font-weight:900}.auth-submit:disabled{opacity:.55}.auth-message{min-height:24px;margin-top:10px;font-size:12px;font-weight:800;line-height:1.5}.auth-message.error{color:#b94f5d}.auth-message.ok{color:#55836b}.auth-help{font-size:10.5px;line-height:1.6;color:#a0938b;margin:13px 0 0}
@media(max-width:520px){.auth-card{padding:24px 17px;border-radius:22px}.auth-card h1{font-size:27px}}
