:root{--bg: #f4f6fb;--surface: #ffffff;--primary: #6c47ff;--primary-hover: #5535dd;--danger: #e53e3e;--text: #1a202c;--muted: #718096;--border: #e2e8f0;--radius: 10px;--shadow: 0 2px 12px rgba(0,0,0,.08)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{font-family:DM Sans,system-ui,sans-serif;background:var(--bg);color:var(--text);font-size:15px;line-height:1.6}.auth-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1.5rem}.auth-card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:2.5rem 2rem;width:100%;max-width:400px}.auth-card h1{font-size:1.6rem;margin-bottom:.25rem}.auth-card p{color:var(--muted);margin-bottom:1.75rem;font-size:.9rem}.auth-link{margin-top:1.25rem;text-align:center;font-size:.88rem;color:var(--muted)}.auth-link a{color:var(--primary);text-decoration:none;font-weight:600}.field{display:flex;flex-direction:column;gap:.4rem;margin-bottom:1.1rem}.field label{font-size:.85rem;font-weight:600;color:var(--text)}.field input,.field select{padding:.65rem .9rem;border:1.5px solid var(--border);border-radius:7px;font-size:.95rem;outline:none;transition:border-color .15s;background:#fff;color:var(--text)}.field input:focus,.field select:focus{border-color:var(--primary)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.7rem 1.4rem;border:none;border-radius:7px;cursor:pointer;font-size:.95rem;font-weight:600;transition:background .15s,opacity .15s}.btn-primary{background:var(--primary);color:#fff;width:100%}.btn-primary:hover{background:var(--primary-hover)}.btn-primary:disabled{opacity:.6;cursor:not-allowed}.btn-ghost{background:transparent;color:var(--muted);padding:.4rem .7rem;font-size:.85rem}.btn-danger{background:var(--danger);color:#fff;font-size:.82rem;padding:.35rem .75rem}.btn-sm{font-size:.82rem;padding:.35rem .75rem}.btn-outline{background:transparent;border:1.5px solid var(--border);color:var(--text)}.error-msg{color:var(--danger);font-size:.85rem;margin-bottom:.75rem}.success-msg{color:#2f855a;background:#f0fff4;border:1px solid #9ae6b4;border-radius:7px;padding:.55rem .9rem;font-size:.88rem;font-weight:600;margin-bottom:.75rem}.dashboard{min-height:100vh;background:var(--bg)}.topbar{background:var(--surface);border-bottom:1px solid var(--border);padding:0 1.5rem;height:58px;display:flex;align-items:center;justify-content:space-between}.topbar-logo{font-size:1.15rem;font-weight:700;color:var(--primary)}.topbar-user{display:flex;align-items:center;gap:.75rem;font-size:.9rem;color:var(--muted)}.main-content{max-width:900px;margin:0 auto;padding:1.75rem 1.25rem;display:flex;flex-direction:column;gap:1.5rem}.period-nav{display:flex;align-items:center;justify-content:space-between;gap:1rem;background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:.9rem 1.25rem}.period-arrow{background:var(--bg);border:1.5px solid var(--border);border-radius:7px;width:36px;height:36px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:1rem;color:var(--text);flex-shrink:0;transition:background .15s}.period-arrow:hover{background:var(--border)}.period-center{flex:1;display:flex;flex-direction:column;align-items:center;gap:.2rem;min-width:0}.period-month{font-weight:700;font-size:1rem;color:var(--text);text-transform:capitalize}.period-range-btn{display:inline-flex;align-items:center;gap:.35rem;background:none;border:none;cursor:pointer;color:var(--muted);font-size:.82rem;padding:.2rem .4rem;border-radius:5px;transition:background .15s,color .15s}.period-range-btn:hover{background:var(--bg);color:var(--primary)}.period-edit{display:flex;align-items:center;gap:.3rem;flex-wrap:wrap;justify-content:center}.period-date-input{padding:.3rem .5rem;border:1.5px solid var(--border);border-radius:6px;font-size:.8rem;color:var(--text);background:#fff;outline:none}.period-date-input:focus{border-color:var(--primary)}.period-dash{color:var(--muted);font-size:.85rem}.period-ok-btn{background:var(--primary);color:#fff;border:none;border-radius:6px;padding:.3rem .65rem;font-size:.82rem;font-weight:700;cursor:pointer}.period-ok-btn:hover{background:var(--primary-hover)}.period-cancel-btn{background:none;border:none;color:var(--muted);cursor:pointer;font-size:.9rem;padding:.2rem .4rem}.period-cancel-btn:hover{color:var(--danger)}.summary-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem}.summary-card{background:var(--surface);border-radius:var(--radius);padding:1.25rem 1.5rem;box-shadow:var(--shadow)}.summary-card .label{font-size:.8rem;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.04em}.summary-card .value{font-size:1.5rem;font-weight:700;margin-top:.2rem}.summary-card .value.primary{color:var(--primary)}.card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.5rem}.card h2{font-size:1rem;font-weight:700;margin-bottom:1.1rem}.expense-form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.85rem;align-items:end}.expense-form-grid .field{margin-bottom:0}.form-actions{display:flex;gap:.5rem;margin-top:.75rem}.payment-methods{display:flex;gap:.5rem}.payment-method-btn{flex:1;display:flex;flex-direction:column;align-items:center;gap:.2rem;padding:.6rem .5rem;border:1.5px solid var(--border);border-radius:8px;background:#fff;cursor:pointer;font-size:.8rem;font-weight:600;color:var(--muted);transition:border-color .15s,color .15s,background .15s}.payment-method-btn span:first-child{font-size:1.2rem}.payment-method-btn:hover{border-color:var(--primary);color:var(--primary)}.payment-method-btn.active{border-color:var(--primary);background:#f0ecff;color:var(--primary)}.expense-table{width:100%;border-collapse:collapse;font-size:.9rem}.expense-table th{text-align:left;padding:.6rem .75rem;color:var(--muted);font-size:.78rem;font-weight:600;text-transform:uppercase;border-bottom:1px solid var(--border)}.expense-table td{padding:.75rem;border-bottom:1px solid var(--border);vertical-align:middle}.expense-table tr:last-child td{border-bottom:none}.expense-table .amount{font-weight:700;color:var(--primary)}.actions-cell{display:flex;gap:.4rem}.tag{display:inline-block;padding:.2rem .6rem;border-radius:99px;font-size:.75rem;font-weight:600;background:#ede9ff;color:var(--primary)}.empty-state{text-align:center;color:var(--muted);padding:2.5rem 0;font-size:.9rem}.app-layout{min-height:100vh;background:var(--bg)}.tab-nav{display:flex;border-bottom:2px solid var(--border);background:var(--surface);padding:0 1.5rem}.tab-link{padding:.75rem 1.25rem;font-size:.9rem;font-weight:600;color:var(--muted);text-decoration:none;border-bottom:2px solid transparent;margin-bottom:-2px;transition:color .15s,border-color .15s}.tab-link:hover{color:var(--primary)}.tab-link.active{color:var(--primary);border-bottom-color:var(--primary)}.card-header-row{display:flex;align-items:center;justify-content:space-between}.card-header-row h2{margin:0}.card-hint{font-size:.82rem;color:var(--muted);margin:-.4rem 0 .9rem}.card-hint code{background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:.1em .35em;font-size:.8rem}.inv-type-toggle{display:flex;border-radius:8px;overflow:hidden;border:1.5px solid var(--border);margin-bottom:1rem;width:fit-content}.inv-type-btn{padding:.6rem 1.4rem;border:none;background:var(--bg);color:var(--muted);font-size:.9rem;font-weight:600;cursor:pointer;transition:background .15s,color .15s}.inv-type-btn.active-buy{background:#e6f9f0;color:#276749}.inv-type-btn.active-sell{background:#fff0f0;color:var(--danger)}.inv-total-preview{display:flex;align-items:center;font-size:.9rem;font-weight:700;color:var(--primary);padding:0 .25rem}.portfolio-refresh{display:flex;justify-content:flex-end;margin-bottom:.75rem}.ticker-badge{display:inline-block;padding:.2rem .65rem;border-radius:6px;font-size:.82rem;font-weight:700;background:#ede9ff;color:var(--primary);letter-spacing:.04em;font-family:monospace}.gain-value{color:#276749;font-weight:700}.loss-value{color:var(--danger);font-weight:700}.price-up{color:#276749}.price-down{color:var(--danger)}.price-loading{color:var(--muted)}.inv-filters{display:flex;align-items:center;gap:.65rem;flex-wrap:wrap;margin-bottom:.9rem}.inv-filter-select{padding:.4rem .7rem;border:1.5px solid var(--border);border-radius:7px;font-size:.85rem;background:#fff;color:var(--text);outline:none}.inv-filter-select:focus{border-color:var(--primary)}.inv-count{margin-left:auto;font-size:.82rem;color:var(--muted)}.inv-type-badge{display:inline-block;padding:.2rem .55rem;border-radius:99px;font-size:.75rem;font-weight:700}.badge-buy{background:#e6f9f0;color:#276749}.badge-sell{background:#fff0f0;color:var(--danger)}.sortable-th{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.sortable-th:hover{color:var(--primary)}.num-cell{text-align:right;font-variant-numeric:tabular-nums}.sheet-table tfoot td{background:var(--bg);font-size:.88rem}.sheet-total-row td{padding:.65rem .75rem}.field-hint{display:block;font-size:.78rem;margin-top:.25rem}.field-hint-info{color:#276749}.field-hint-warn{color:#c05621}@media (max-width: 600px){.expense-table thead{display:none}.expense-table td{display:block;padding:.4rem .75rem}.expense-table tr{display:block;padding:.75rem 0;border-bottom:1px solid var(--border)}.expense-table tr:last-child{border-bottom:none}.payment-method-btn span:last-child{font-size:.72rem}}
