@import"https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable-dynamic-subset.min.css";@import"https://fonts.googleapis.com/css2?family=DM+Serif+Display&display=swap";:root{--color-bg: #F8F7F4;--color-surface: #FFFFFF;--color-border: #E8E6E1;--color-text: #1A1A1A;--color-text-secondary: #6B6560;--color-accent: #2D5A3D;--color-accent-light: #E8F0EB;--color-track-a: #1B6B3A;--color-track-a-end: #4CAF6A;--color-track-b: #A0722A;--color-track-b-end: #D4A34A;--color-positive: #2D7A4F;--color-negative: #C44536;--color-gauge-empty: #E8E6E1;--color-on-accent: #ffffff;--radius: 12px;--radius-sm: 8px;--shadow: 0 1px 3px rgba(0, 0, 0, .06);--max-width: 480px;--font-serif: "DM Serif Display", Georgia, serif;--font-gauge: clamp(40px, 12vw, 56px);--font-gauge-sign: clamp(20px, 6vw, 28px);--font-title: clamp(22px, 6vw, 28px);--font-current-value: clamp(17px, 5vw, 22px);--font-portfolio-total: clamp(22px, 6.5vw, 28px);font-family:Pretendard Variable,-apple-system,BlinkMacSystemFont,system-ui,sans-serif;color:var(--color-text);background:var(--color-bg);line-height:1.6}[data-theme=dark]{--color-bg: #111009;--color-surface: #1a1814;--color-border: #2a2620;--color-text: #ddd5c0;--color-text-secondary: #8a7f6e;--color-accent: #c8a97a;--color-accent-light: rgba(200, 169, 122, .08);--color-on-accent: #111009;--color-track-a: #7ab88a;--color-track-a-end: #a0d4a8;--color-track-b: #d4a34a;--color-track-b-end: #e8c27a;--color-positive: #6fbf82;--color-negative: #e07060;--color-gauge-empty: #2a2820;--shadow: 0 1px 3px rgba(0, 0, 0, .2)}*{margin:0;padding:0;box-sizing:border-box}body{min-height:100dvh;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E")}[data-theme=dark] body{background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.02'/%3E%3C/svg%3E")}#root{min-height:100dvh;display:flex;flex-direction:column}a{color:var(--color-accent);text-decoration:none}button{font-family:inherit;cursor:pointer}input,select{font-family:inherit;font-size:inherit}.layout{display:flex;flex-direction:column;min-height:100dvh;max-width:var(--max-width);margin:0 auto;width:100%}.layout-header{padding:24px 20px 0}.layout-title{font-size:var(--font-title);font-weight:800;letter-spacing:-.5px}.layout-subtitle{font-size:13px;color:var(--color-text-secondary);margin-top:2px}.layout-header-row{display:flex;justify-content:space-between;align-items:flex-start}.theme-toggle{width:36px;height:36px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);font-size:18px;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary);transition:color .15s,border-color .15s;cursor:pointer;margin-top:2px}.theme-toggle:hover{color:var(--color-text);border-color:var(--color-text-secondary)}.layout-main{flex:1;padding:20px 20px 100px}.layout-nav{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:var(--max-width);display:flex;background:var(--color-surface);border-top:1px solid var(--color-border);padding:8px 0;padding-bottom:calc(8px + env(safe-area-inset-bottom));z-index:100}.nav-item{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 0;color:var(--color-text-secondary);text-decoration:none;font-size:10px;font-weight:500;transition:color .15s}.nav-item .nav-icon{font-size:20px;line-height:1}.nav-item.active{color:var(--color-accent)}.track-gauge{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:24px;box-shadow:var(--shadow)}.track-gauge-header{margin-bottom:4px}.track-gauge-label{font-size:13px;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px}.track-gauge-pct{font-size:var(--font-gauge);font-weight:800;line-height:1;margin-bottom:16px;letter-spacing:-2px;font-variant-numeric:tabular-nums}.track-gauge-pct-sign{font-size:var(--font-gauge-sign);font-weight:600;opacity:.5;margin-left:2px}.track-gauge-bar{height:8px;background:var(--color-gauge-empty);border-radius:4px;overflow:hidden;margin-bottom:12px}.track-gauge-fill{height:100%;border-radius:4px;transition:width 1.4s cubic-bezier(.22,1,.36,1)}.track-gauge-values{display:flex;gap:6px;align-items:baseline}.track-gauge-current{font-size:var(--font-current-value);font-weight:800;letter-spacing:-.5px;font-variant-numeric:tabular-nums}.track-gauge-target{font-size:14px;color:var(--color-text-secondary);font-variant-numeric:tabular-nums}.burst-wrapper{position:relative;display:inline-flex;align-items:center;justify-content:center}.burst-btn{width:40px;height:40px;border:1px solid var(--color-border);border-radius:50%;background:var(--color-surface);font-size:20px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:transform .1s,box-shadow .15s;box-shadow:var(--shadow);user-select:none;-webkit-user-select:none}.burst-btn:active{transform:scale(.85)}.burst-btn:hover{box-shadow:0 2px 8px #0000001a}.burst-particle{position:absolute;top:50%;left:50%;pointer-events:none;font-size:16px;animation:burst-fly var(--duration) cubic-bezier(.22,1,.36,1) forwards}@keyframes burst-fly{0%{transform:translate(-50%,-50%) scale(0) rotate(0);opacity:1}60%{opacity:1}to{transform:translate(calc(-50% + var(--x)),calc(-50% + var(--y))) scale(var(--s)) rotate(var(--r));opacity:0}}.dashboard{display:flex;flex-direction:column;gap:24px}.dashboard-top{display:flex;flex-direction:column;gap:12px}.dashboard-date-area{display:flex;justify-content:space-between;align-items:baseline}.dashboard-date{font-size:13px;color:var(--color-text-secondary)}.dashboard-dday{font-size:20px;font-weight:800;letter-spacing:-.5px;color:var(--color-track-a);font-variant-numeric:tabular-nums}.dashboard-quote-area{display:flex;align-items:center;gap:12px}.dashboard-quote{flex:1;padding-left:14px;border-left:2px solid var(--color-border)}.dashboard-quote p{font-size:13px;font-style:italic;color:var(--color-text-secondary);line-height:1.5}.dashboard-tracks{display:flex;flex-direction:column;gap:12px}.dashboard-section{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow)}.summary-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.summary-item{display:flex;flex-direction:column;gap:4px}.summary-label{font-size:12px;color:var(--color-text-secondary);font-weight:500}.summary-value{font-size:18px;font-weight:700;font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.summary-value.positive{color:var(--color-positive)}.summary-value.negative{color:var(--color-negative)}.portfolio{display:flex;flex-direction:column;gap:20px}.portfolio-toolbar{display:flex;justify-content:flex-end}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow)}.section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.section-title{font-size:13px;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px}.portfolio-summary{text-align:center}.portfolio-total-label{font-size:12px;color:var(--color-text-secondary)}.portfolio-total-value{display:block;font-size:var(--font-portfolio-total);font-weight:800;font-variant-numeric:tabular-nums;margin:4px 0}.portfolio-pnl{font-size:14px;font-weight:600;font-variant-numeric:tabular-nums}.portfolio-pnl.positive{color:var(--color-positive)}.portfolio-pnl.negative{color:var(--color-negative)}.holdings-list,.holding-row{display:flex;flex-direction:column;gap:8px}.holding-main{display:flex;justify-content:space-between;align-items:center}.holding-info{display:flex;flex-direction:column;gap:2px}.holding-ticker{font-size:16px;font-weight:700;letter-spacing:.5px}.holding-shares{font-size:13px;color:var(--color-text-secondary)}.holding-prices{display:flex;gap:16px}.holding-price-row{display:flex;gap:6px;font-size:13px;font-variant-numeric:tabular-nums}.holding-price-label{color:var(--color-text-secondary)}.holding-pnl{font-size:14px;font-weight:600;font-variant-numeric:tabular-nums}.holding-pnl.positive{color:var(--color-positive)}.holding-pnl.negative{color:var(--color-negative)}.holding-pnl-amount{font-weight:400;margin-left:4px;font-size:12px}.holding-actions{display:flex;gap:12px}.cash-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.cash-name{font-size:14px}.cash-amount{font-size:14px;font-weight:600;font-variant-numeric:tabular-nums}.empty-state{text-align:center;padding:32px 16px;color:var(--color-text-secondary);font-size:14px}.holding-form{display:flex;flex-direction:column;gap:12px}.form-row-2col{display:grid;grid-template-columns:1fr 1fr;gap:12px;min-width:0}.form-label{display:flex;flex-direction:column;gap:4px;font-size:12px;font-weight:500;color:var(--color-text-secondary)}.form-input{width:100%;min-width:0;padding:8px 12px;border:1px solid var(--color-border);border-radius:var(--radius-sm);font-size:15px;outline:none;transition:border-color .15s}.form-input:focus{border-color:var(--color-accent)}.form-input:disabled{background:var(--color-bg);color:var(--color-text-secondary)}.form-actions{display:flex;gap:8px;justify-content:flex-end}.btn{padding:8px 16px;border:none;border-radius:var(--radius-sm);font-size:14px;font-weight:500;transition:opacity .15s}.btn:disabled{opacity:.5}.btn-primary{background:var(--color-accent);color:var(--color-on-accent)}.btn-secondary{background:var(--color-bg);color:var(--color-text);border:1px solid var(--color-border)}.btn-small{padding:4px 12px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);font-size:13px;font-weight:500;color:var(--color-accent)}.btn-icon{width:36px;height:36px;border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);font-size:18px;display:flex;align-items:center;justify-content:center;color:var(--color-text-secondary)}.btn-text{background:none;border:none;padding:8px 4px;font-size:13px;color:var(--color-text-secondary)}.btn-text:hover{color:var(--color-accent)}.btn-text.danger:hover{color:var(--color-negative)}@media(max-width:359px){.form-row-2col{grid-template-columns:1fr}}.placeholder-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:40px 20px;text-align:center;color:var(--color-text-secondary);font-size:14px}.cashflow{display:flex;flex-direction:column;gap:20px}.cashflow-month-nav{display:flex;align-items:center;justify-content:center;gap:16px}.month-nav-btn{background:none;border:1px solid var(--color-border);border-radius:var(--radius-sm);width:36px;height:36px;font-size:16px;color:var(--color-text-secondary);display:flex;align-items:center;justify-content:center;transition:all .15s}.month-nav-btn:hover{border-color:var(--color-text-secondary);color:var(--color-text)}.month-nav-label{font-size:18px;font-weight:700;min-width:0;text-align:center}.cashflow-loading,.cashflow-error{text-align:center;padding:32px 0;font-size:14px;color:var(--color-text-secondary)}.cashflow-error{color:var(--color-negative)}.cashflow-summary{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}.summary-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:14px 12px;display:flex;flex-direction:column;gap:4px;box-shadow:var(--shadow)}.summary-card-label{font-size:12px;color:var(--color-text-secondary);font-weight:500}.summary-card-value{font-size:clamp(14px,4vw,16px);font-weight:700;font-variant-numeric:tabular-nums}.summary-card.income .summary-card-value{color:var(--color-positive)}.summary-card.expense .summary-card-value{color:var(--color-text)}.summary-card.positive .summary-card-value{color:var(--color-positive)}.summary-card.negative .summary-card-value{color:var(--color-negative)}.cashflow-section{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow)}.cashflow-chart{margin-top:12px}.cashflow-list{list-style:none;margin-top:12px;display:flex;flex-direction:column;gap:8px}.cashflow-list-item{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--color-border)}.cashflow-list-item:last-child{border-bottom:none}.cashflow-item-name{font-size:14px;color:var(--color-text)}.cashflow-item-amount{font-size:14px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--color-text)}.cashflow-item-amount.positive{color:var(--color-positive)}.cashflow-empty{text-align:center;padding:64px 20px}.cashflow-empty p{font-size:16px;font-weight:600;color:var(--color-text)}.cashflow-empty-sub{font-size:14px;color:var(--color-text-secondary);margin-top:8px;font-weight:400!important}.asset-trend{margin-top:12px}@media(max-width:359px){.cashflow-summary{grid-template-columns:1fr 1fr;gap:8px}.cashflow-summary .summary-card:last-child{grid-column:1 / -1}}.roadmap{display:flex;flex-direction:column;gap:24px}.roadmap-hint{font-size:13px;color:var(--color-text-secondary);margin-top:4px}.action-list{list-style:none;padding:0;margin:12px 0 0;display:flex;flex-direction:column;gap:10px}.action-item{display:flex;gap:10px;align-items:flex-start}.action-check{flex-shrink:0;width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:13px;color:var(--color-text-secondary);border:1.5px solid var(--color-border);border-radius:4px;margin-top:1px}.action-item.done .action-check{background:var(--color-track-a);border-color:var(--color-track-a);color:var(--color-on-accent);font-weight:700}.action-content{display:flex;flex-direction:column;gap:2px}.action-period{font-size:13px;font-weight:700;color:var(--color-text)}.action-text{font-size:13px;color:var(--color-text-secondary);line-height:1.5}.action-item.done .action-period,.action-item.done .action-text{text-decoration:line-through;opacity:.5}.timeline-show-past{background:none;border:1px dashed var(--color-border);border-radius:var(--radius-sm);padding:8px 14px;font-size:12px;color:var(--color-text-secondary);cursor:pointer;margin-bottom:8px;transition:color .15s,border-color .15s}.timeline-show-past:hover{color:var(--color-text);border-color:var(--color-text-secondary)}.timeline{margin-top:16px;display:flex;flex-direction:column}.timeline-item{display:flex;gap:14px;min-height:52px}.timeline-line{display:flex;flex-direction:column;align-items:center;width:16px;flex-shrink:0}.timeline-dot{width:10px;height:10px;border-radius:50%;background:var(--color-border);flex-shrink:0;margin-top:4px}.timeline-line:after{content:"";flex:1;width:2px;background:var(--color-border)}.timeline-item:last-child .timeline-line:after{display:none}.timeline-item.past .timeline-dot{background:var(--color-track-a);opacity:.5}.timeline-item.past .timeline-line:after{background:var(--color-track-a);opacity:.3}.timeline-item.current .timeline-dot{width:14px;height:14px;background:var(--color-track-a);box-shadow:0 0 0 4px #1b6b3a26;margin-top:2px}.timeline-item.current .timeline-line:after{background:var(--color-track-a);opacity:.3}.timeline-item.highlight .timeline-dot{background:var(--color-track-a)}.timeline-content{flex:1;padding-bottom:16px;display:flex;flex-direction:column;gap:2px}.timeline-header{display:flex;justify-content:space-between;align-items:baseline}.timeline-date{font-size:13px;font-weight:600;color:var(--color-text)}.timeline-amount{font-size:14px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--color-text)}.timeline-item.future .timeline-date,.timeline-item.future .timeline-amount{color:var(--color-text-secondary)}.timeline-item.highlight .timeline-amount{color:var(--color-track-a)}.timeline-label{font-size:12px;color:var(--color-text-secondary);line-height:1.4}.timeline-badge{display:inline-flex;align-self:flex-start;padding:2px 8px;font-size:11px;font-weight:700;color:var(--color-on-accent);background:var(--color-track-a);border-radius:10px;margin-top:2px}.trackb-list{margin-top:12px;display:flex;flex-direction:column;gap:12px}.trackb-item{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:12px 14px}.trackb-item.current{border-color:var(--color-track-b);box-shadow:0 0 0 1px var(--color-track-b)}.trackb-item.past{opacity:.5}.trackb-header{display:flex;justify-content:space-between;align-items:baseline}.trackb-date{font-size:13px;font-weight:700;color:var(--color-text)}.trackb-total{font-size:14px;font-weight:700;color:var(--color-track-b)}.trackb-sources{margin-top:6px;display:flex;flex-wrap:wrap;gap:6px}.trackb-source{font-size:12px;color:var(--color-text-secondary);background:var(--color-bg);padding:2px 8px;border-radius:4px}.trackb-note{display:block;font-size:12px;color:var(--color-text-secondary);margin-top:6px;font-style:italic}.asset-table{width:100%;margin-top:12px;border-collapse:collapse;font-size:13px;table-layout:fixed}.asset-table td{padding:8px 6px;border-bottom:1px solid var(--color-border);vertical-align:top}.asset-table tr:last-child td{border-bottom:none}.asset-category{font-weight:600;color:var(--color-text)}.asset-amount{font-weight:700;font-variant-numeric:tabular-nums;color:var(--color-text);text-align:right}.asset-note{color:var(--color-text-secondary);font-size:12px}.asset-total-row td{border-top:2px solid var(--color-text);font-weight:800}.asset-total-row .asset-amount{color:var(--color-track-a)}@media(max-width:359px){.timeline-header{flex-direction:column;gap:2px}.timeline-amount{font-size:13px}}.settings{display:flex;flex-direction:column;gap:20px}.settings-section{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:20px;box-shadow:var(--shadow)}.settings-field{margin-top:12px;display:flex;flex-direction:column;gap:6px}.settings-label{font-size:13px;font-weight:600;color:var(--color-text-secondary)}.settings-input,.settings-select{width:100%;padding:10px 12px;border:1px solid var(--color-border);border-radius:var(--radius-sm);font-size:14px;background:var(--color-bg);color:var(--color-text);transition:border-color .15s}.settings-input:focus,.settings-select:focus{outline:none;border-color:var(--color-accent)}.settings-hint{font-size:13px;color:var(--color-text-secondary)}.settings-actions{display:flex;justify-content:flex-end}.settings-save-btn{padding:10px 24px;background:var(--color-accent);color:var(--color-on-accent);border:none;border-radius:var(--radius-sm);font-size:14px;font-weight:600;transition:opacity .15s}.settings-save-btn:hover{opacity:.85}.settings-data-actions{display:flex;gap:8px;margin-top:12px}.btn{padding:8px 16px;font-size:13px;font-weight:600;border-radius:var(--radius-sm);cursor:pointer;transition:opacity .15s}.btn:hover{opacity:.85}.btn-outline{background:transparent;border:1px solid var(--color-border);color:var(--color-text)}.cash-account-list{display:flex;flex-direction:column;gap:6px;margin-top:4px}.cash-account-item{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--color-text);cursor:pointer;min-height:36px;padding:4px 0}.cash-account-item input[type=checkbox]{width:20px;height:20px;accent-color:var(--color-accent)}.login{display:flex;justify-content:center;align-items:center;min-height:100dvh;padding:20px}.login-card{text-align:center;max-width:280px;width:100%}.login-logo{font-size:48px;margin-bottom:8px}.login-title{font-size:24px;font-weight:800;letter-spacing:-.5px;color:var(--color-text);margin-bottom:32px}.login-form{display:flex;flex-direction:column;gap:12px}.login-input{width:100%;padding:12px 16px;border:1px solid var(--color-border);border-radius:var(--radius-sm);font-size:15px;font-family:inherit;text-align:center;background:var(--color-surface);color:var(--color-text);outline:none;transition:border-color .15s}.login-input:focus{border-color:var(--color-accent)}.login-btn{padding:12px;background:var(--color-accent);color:var(--color-on-accent);border:none;border-radius:var(--radius-sm);font-size:14px;font-weight:600;font-family:inherit;cursor:pointer;transition:opacity .15s}.login-btn:hover{opacity:.85}.login-btn:disabled{opacity:.4;cursor:default}.login-error{margin-top:12px;font-size:13px;color:var(--color-negative)}
