:root{color:#24312f;background:#f4f1eb;font-family:Inter,Noto Sans TC,PingFang TC,Microsoft JhengHei,system-ui,sans-serif;font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh}button,input,select,textarea{font:inherit}button{cursor:pointer}.login-shell{align-items:center;background:#f4f1eb;display:flex;justify-content:center;min-height:100vh;padding:24px}.login-panel{background:#fff;border:1px solid #d7ddd4;border-radius:8px;max-width:420px;padding:36px;width:100%}.login-panel h1{font-size:32px;letter-spacing:0;margin:10px 0 8px}.login-brand-mark{margin-bottom:22px}.login-account{color:#718078;margin:0 0 24px}.login-button{width:100%}.auth-loading{margin:40px}.app-shell{display:grid;grid-template-columns:260px 1fr;min-height:100vh}.sidebar{background:#31413c;color:#fffaf0;padding:24px 16px}.brand{align-items:center;display:flex;gap:12px;margin-bottom:28px}.brand-mark{align-items:center;background:#d3a25f;border-radius:8px;color:#22322d;display:inline-flex;font-size:13px;font-weight:800;height:44px;justify-content:center;width:44px}.brand h1,.brand p,.topbar h2,.topbar p,.section-heading h3{margin:0}.brand h1{font-size:21px}.brand p{color:#d6dfd7;font-size:13px;margin-top:2px}.tab-list{display:grid;gap:8px}.tab-button{align-items:center;background:transparent;border:1px solid transparent;border-radius:8px;color:#f6f1e8;display:flex;gap:10px;min-height:44px;padding:0 12px;text-align:left;width:100%}.tab-button:hover{background:#ffffff17}.tab-button.active{background:#fff7e8;color:#24312f}.main{min-width:0;padding:26px}.topbar{align-items:center;display:flex;justify-content:space-between;gap:16px;margin-bottom:22px}.eyebrow{color:#718078;font-size:13px;margin-bottom:4px}.topbar-actions{align-items:center;display:flex;gap:8px}.topbar h2{font-size:28px;letter-spacing:0}.title-row{align-items:center;display:flex;flex-wrap:wrap;gap:14px}.title-month-input{width:180px}.icon-text-button,.icon-button{align-items:center;border:1px solid #c9d0c7;background:#fff;color:#24312f;display:inline-flex;gap:8px;justify-content:center}.icon-text-button{border-radius:8px;min-height:40px;padding:0 14px}.icon-button{border-radius:8px;height:38px;width:38px}.primary{background:#2f6f58;border-color:#2f6f58;color:#fff}.danger-button{color:#a33b32}.alert,.notice,.loading{border-radius:8px;margin-bottom:16px;padding:12px 14px}.alert{background:#fff0ed;color:#953327}.loading{background:#fff;color:#66736c}.notice{background:#eef7ef;color:#2f6f58}.page-stack{display:grid;gap:18px}.metrics-grid{display:grid;gap:14px;grid-template-columns:repeat(6,minmax(0,1fr))}.metrics-grid.four{grid-template-columns:repeat(4,minmax(0,1fr))}.metrics-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}.metrics-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}.clinic-cash-summary{display:grid;gap:14px;grid-template-columns:repeat(2,minmax(0,1fr))}.clinic-cash-summary .editable-metric-card{grid-column:1 / -1}.metric-card,.panel,.section-band{background:#fff;border:1px solid #d9ded6;border-radius:8px}.metric-card{min-height:104px;padding:16px}.metric-card span,.summary-box span{color:#66736c;display:block;font-size:13px;margin-bottom:10px}.metric-card strong{display:block;font-size:22px;letter-spacing:0;overflow-wrap:anywhere}.metric-card small{color:#728078;display:block;line-height:1.4;margin-top:8px}.editable-metric-card{display:grid;gap:10px}.inline-save-form{display:grid;gap:8px;grid-template-columns:minmax(0,1fr) 40px}.section-band,.panel{padding:18px}.section-heading{align-items:center;display:flex;justify-content:space-between;margin-bottom:14px}.section-heading h3{font-size:18px}.split-grid,.two-column,.placeholder-grid,.cashflow-grid,.loan-grid{display:grid;gap:14px}.split-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.two-column{grid-template-columns:repeat(2,minmax(0,1fr))}.placeholder-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.cashflow-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.loan-grid{grid-template-columns:1fr}.panel-metrics{display:grid;gap:12px;grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:14px}.stats-layout{display:grid;gap:14px;grid-template-columns:minmax(300px,.8fr) minmax(0,1.2fr)}.summary-box{background:#f7f8f3;border:1px solid #dfe4da;border-radius:8px;min-height:112px;padding:16px}.summary-box strong{display:block;font-size:24px;margin-bottom:8px}.summary-box small{color:#728078}.pie-card{background:#f7f8f3;border:1px solid #dfe4da;border-radius:8px;min-height:220px;padding:16px}.pie-chart-layout{align-items:center;display:grid;gap:18px;grid-template-columns:170px minmax(0,1fr)}.pie-visual{display:grid;min-height:170px;place-items:center;position:relative}.pie-visual svg{height:170px;width:170px}.pie-ring-base,.pie-ring-segment{fill:none;stroke-width:26}.pie-ring-base{stroke:#e7e8e0}.pie-ring-segment{transform:rotate(-90deg);transform-origin:50% 50%}.pie-total{display:grid;gap:3px;left:50%;max-width:96px;position:absolute;text-align:center;top:50%;transform:translate(-50%,-50%)}.pie-total span{color:#66736c;font-size:12px}.pie-total strong{font-size:15px;line-height:1.2;overflow-wrap:anywhere}.pie-legend{display:grid;gap:10px}.pie-legend-row{align-items:center;display:grid;gap:8px;grid-template-columns:12px minmax(70px,1fr) 58px minmax(96px,1.1fr);min-height:28px}.pie-legend-row strong,.pie-legend-row small{text-align:right}.pie-legend-row small{color:#728078}.legend-dot{border-radius:999px;height:10px;width:10px}.compact-form,.investment-form,.expense-form,.cashflow-form,.property-form,.loan-form{display:grid;gap:10px;margin-bottom:14px}.compact-form{grid-template-columns:1.1fr 1.1fr 1fr auto}.investment-form{grid-template-columns:145px 210px 150px 120px minmax(150px,1fr) auto}.investment-form.with-broker{grid-template-columns:145px 150px 210px 150px 120px minmax(150px,1fr) auto}input,select,textarea{background:#fbfcfa;border:1px solid #cbd2ca;border-radius:8px;color:#24312f;min-height:40px;min-width:0;padding:0 10px;width:100%}select{appearance:none}input:focus,select:focus,textarea:focus{border-color:#2f6f58;outline:2px solid rgb(47 111 88 / 16%)}textarea{line-height:1.5;min-height:120px;padding:10px;resize:vertical}.month-input{max-width:180px}.expense-form{grid-template-columns:145px 180px 140px minmax(160px,1fr) auto}.cashflow-form{grid-template-columns:1fr 1fr}.cashflow-form .icon-text-button{grid-column:1 / -1}.loan-form,.property-form{grid-template-columns:1fr 1fr}.loan-form .icon-text-button,.property-form .icon-text-button{grid-column:1 / -1}.symbol-search{display:grid;gap:8px;grid-template-columns:minmax(0,1fr) 40px}.quote-result{align-items:center;background:#f7f8f3;border:1px solid #dfe4da;border-radius:8px;display:flex;flex-wrap:wrap;gap:10px;margin:-4px 0 14px;min-height:42px;padding:8px 12px}.quote-result strong{font-size:15px}.quote-result span{color:#66736c}.quote-result.error{background:#fff0ed;border-color:#f0c8c0}.quote-result.error span{color:#953327}.investment-tools{display:grid;gap:14px;grid-template-columns:minmax(0,1.1fr) minmax(0,1.1fr) minmax(280px,.8fr);margin-bottom:16px}.tool-panel{background:#f7f8f3;border:1px solid #dfe4da;border-radius:8px;padding:14px}.position-form,.dividend-form,.xirr-form{display:grid;gap:10px}.position-form .icon-text-button,.dividend-form .icon-text-button{grid-column:1 / -1}.position-form{margin-bottom:12px}.dividend-form{grid-template-columns:1fr 1fr;margin-bottom:12px}.xirr-result{background:#fff;border:1px solid #d9ded6;border-radius:8px;display:grid;gap:6px;margin-top:12px;padding:14px}.xirr-result span,.xirr-result small{color:#66736c}.xirr-result strong{font-size:24px}.labeled-field,.labeled-group,.inline-field-box{background:#fbfcfa;border:1px solid #cbd2ca;border-radius:8px}.labeled-field{display:grid;gap:4px;min-height:58px;padding:7px 10px;position:relative}.labeled-field>span,.group-title,.inline-field-box span{color:#66736c;font-size:12px;font-weight:700;line-height:1.2}.labeled-field input,.inline-field-box input{background:transparent;border:0;border-radius:0;min-height:26px;padding:0}.labeled-field input:focus,.inline-field-box input:focus{outline:0}.labeled-field small{bottom:9px;color:#66736c;position:absolute;right:10px}.labeled-field:focus-within,.labeled-group:focus-within,.inline-field-box:focus-within{border-color:#2f6f58;outline:2px solid rgb(47 111 88 / 16%)}.labeled-group{display:grid;gap:8px;padding:8px 10px 10px}.group-fields{display:grid;gap:10px}.group-fields.two{grid-template-columns:repeat(2,minmax(0,1fr))}.group-fields label,.inline-field-box label{display:grid;gap:3px}.inline-field-box{display:grid;gap:8px;grid-template-columns:repeat(2,minmax(0,1fr));padding:7px 10px}.recurring-form{display:grid;gap:10px;grid-template-columns:180px 150px 190px minmax(160px,1fr) 88px auto;margin-bottom:14px}.compact-recurring-form{grid-template-columns:1fr 1fr}.day-field,.money-control{align-items:center;background:#fbfcfa;border:1px solid #cbd2ca;border-radius:8px;display:flex;gap:8px;min-height:40px;padding:0 10px}.day-field span,.money-control span{color:#66736c;white-space:nowrap}.day-field input,.money-control input{background:transparent;border:0;border-radius:0;min-height:38px;padding:0}.day-field input:focus,.money-control input:focus{outline:0}.money-field{display:grid;gap:4px}.money-field small{color:#66736c;line-height:1.35;padding-left:2px}.checkbox-field{align-items:center;background:#fbfcfa;border:1px solid #cbd2ca;border-radius:8px;display:flex;gap:8px;min-height:40px;padding:0 10px;white-space:nowrap}.checkbox-field input{height:16px;min-height:0;padding:0;width:16px}.row-actions{align-items:center;display:flex;gap:8px}.small-button{background:#fff;border:1px solid #c9d0c7;border-radius:8px;color:#24312f;min-height:36px;padding:0 10px}.table-wrap{overflow-x:auto}table{border-collapse:collapse;min-width:620px;width:100%}th,td{border-bottom:1px solid #e4e8e1;padding:11px 10px;text-align:left;vertical-align:middle;white-space:nowrap}th{color:#66736c;font-size:13px;font-weight:700}.empty-cell{color:#7a867e;text-align:center}.empty-page{min-height:280px}.loan-empty{border:1px dashed #d9ded6;border-radius:8px;margin-top:12px;padding:14px}.editable-table{display:grid;gap:10px;overflow-x:auto}.property-row,.debt-row{align-items:center;display:grid;gap:8px;grid-template-columns:minmax(150px,1fr) repeat(2,minmax(120px,.8fr)) minmax(230px,1.3fr) minmax(260px,1.4fr) minmax(110px,.7fr) 92px 96px 92px;min-width:1380px}.property-row.header,.debt-row.header{color:#66736c;font-size:13px;font-weight:700;padding:0 2px}.rate-field{align-items:center;background:#fbfcfa;border:1px solid #cbd2ca;border-radius:8px;display:flex;gap:6px;min-height:40px;padding:0 10px}.rate-field input{background:transparent;border:0;border-radius:0;min-height:38px;padding:0}.rate-field input:focus{outline:0}.compact-day-field{gap:4px}.loan-progress-preview,.progress-pill{align-items:center;background:#f7f8f3;border:1px solid #dfe4da;border-radius:8px;color:#2f3b37;display:inline-flex;justify-content:center;min-height:40px;padding:0 10px;white-space:nowrap}.holding-strip{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));margin:6px 0 16px}.holding-card{background:#f7f8f3;border:1px solid #dfe4da;border-radius:8px;padding:13px}.holding-symbol,.holding-card>small{display:block}.holding-symbol{font-weight:700;margin-bottom:10px}.holding-symbol small{color:#66736c;display:block;font-size:12px;font-weight:600;margin-bottom:3px}.broker-breakdown{color:#66736c;line-height:1.45;margin-top:6px}.holding-stats{display:grid;gap:10px;grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:10px}.holding-stats div{min-width:0}.holding-stats span{color:#728078;display:block;font-size:12px;font-weight:700;margin-bottom:3px}.holding-stats strong{display:block;font-size:18px;line-height:1.25;overflow-wrap:anywhere}.holding-card small,.muted{color:#728078}.danger{color:#a33b32}.expense-groups{display:grid;gap:12px}.expense-group{background:#f7f8f3;border:1px solid #dfe4da;border-radius:8px;overflow:hidden}.expense-group summary{align-items:center;cursor:pointer;display:flex;justify-content:space-between;gap:12px;min-height:46px;padding:0 14px}.expense-group summary span{font-weight:700}.expense-group summary strong{font-size:18px}.expense-group .table-wrap{background:#fff;border-top:1px solid #dfe4da}.year-input{max-width:140px}.compact-loading{min-height:56px}.monthly-analysis-table-wrap{border:1px solid #dfe4da;border-radius:8px;margin-top:16px}.monthly-analysis-table{min-width:1280px;table-layout:fixed}.analysis-label-column{width:88px}.analysis-month-column{width:90px}.analysis-total-column{width:112px}.monthly-analysis-table th,.monthly-analysis-table td{border-bottom:1px solid #d7ddd4;border-right:1px solid #edf0ea;padding:8px 10px}.monthly-analysis-table th:first-child{background:#fbfaf5;left:0;position:sticky;z-index:1}.analysis-section-row th,.analysis-section-row td{background:#edf3ec;color:#24312f;font-weight:800}.number-cell{text-align:right}.positive-cell{color:#226b4e;font-weight:700}.negative-cell{color:#b23b34;font-weight:700}.settlement-status{font-weight:700;text-align:center}.settlement-status.settled{background:#dbeee5;color:#226b4e}.settlement-status.active{background:#f8d9a7;color:#6f4a00}.settlement-status.pending{background:#f5f5ef;color:#66736c}.monthly-trend-panel{margin-top:18px}.chart-legend{display:flex;flex-wrap:wrap;gap:12px}.chart-legend span{align-items:center;color:#5f6d66;display:inline-flex;font-size:13px;font-weight:700;gap:6px}.chart-legend span:before{border-radius:999px;content:"";display:inline-block;height:8px;width:22px}.chart-legend .income-line:before{background:#2f7d5c}.chart-legend .expense-line:before{background:#b84a42}.chart-legend .net-line:before{background:#2f5f9f}.monthly-chart-scroll{border:1px solid #dfe4da;border-radius:8px;margin-top:12px;overflow-x:auto}.monthly-chart-grid{display:grid;grid-template-columns:88px repeat(12,minmax(0,1fr)) 112px;min-width:1280px}.monthly-chart-axis-labels{background:#fbfaf5;border-right:1px solid #edf0ea;position:relative}.monthly-chart-axis-labels span{color:#66736c;font-size:11px;position:absolute;right:8px;transform:translateY(-50%);white-space:nowrap}.monthly-chart-plot{grid-column:span 12}.monthly-trend-svg{background:#fff;display:block;min-height:240px;width:100%}.chart-grid-line{stroke:#e6ebe3;stroke-width:1}.chart-zero-line{stroke:#7a867e;stroke-width:1.5}.chart-month-line{stroke:#edf0ea;stroke-width:1}.income-line polyline,.expense-line polyline,.net-line polyline{fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:3}.income-line polyline,.income-line circle{stroke:#2f7d5c}.expense-line polyline,.expense-line circle{stroke:#b84a42}.net-line polyline,.net-line circle{stroke:#2f5f9f}.income-line circle,.expense-line circle,.net-line circle{fill:#fff;stroke-width:2.5}.monthly-chart-months{display:grid;grid-template-columns:repeat(12,minmax(0,1fr))}.monthly-chart-months span{background:#fbfaf5;border-right:1px solid #edf0ea;border-top:1px solid #dfe4da;color:#66736c;font-size:13px;font-weight:700;padding:8px 0;text-align:center}.monthly-chart-total-spacer{background:#fbfaf5;border-left:1px solid #edf0ea}@media(max-width:1120px){.metrics-grid,.metrics-grid.four,.metrics-grid.three,.metrics-grid.two,.clinic-cash-summary,.stats-layout,.split-grid,.two-column,.cashflow-grid,.loan-grid,.investment-tools,.placeholder-grid,.compact-form,.investment-form,.expense-form,.cashflow-form,.property-form,.loan-form,.recurring-form{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:760px){.app-shell,.panel-metrics{grid-template-columns:1fr}.sidebar{padding:16px}.tab-list{grid-template-columns:repeat(2,minmax(0,1fr))}.main{padding:18px}.topbar{align-items:stretch;flex-direction:column}.title-row{align-items:stretch;flex-direction:column;gap:10px}.metrics-grid,.metrics-grid.four,.metrics-grid.three,.metrics-grid.two,.clinic-cash-summary,.stats-layout,.split-grid,.two-column,.cashflow-grid,.investment-tools,.placeholder-grid,.compact-form,.investment-form,.expense-form,.cashflow-form,.recurring-form{grid-template-columns:1fr}.section-heading{align-items:stretch;flex-direction:column}.pie-chart-layout{grid-template-columns:1fr}.pie-legend-row{grid-template-columns:12px minmax(64px,1fr) 54px minmax(88px,1fr)}.month-input{max-width:none}}
