.speed-dial-wrapper{z-index:90;flex-direction:column;align-items:flex-end;gap:12px;display:flex;position:fixed;bottom:64px;right:24px}.speed-dial-main{background:var(--accent);cursor:pointer;color:#fff;z-index:2;border:none;border-radius:50%;justify-content:center;align-items:center;width:52px;height:52px;transition:transform .2s,box-shadow .2s;display:flex;position:relative;box-shadow:0 2px 12px #00000026}.speed-dial-main:hover{transform:scale(1.05);box-shadow:0 4px 20px #22766c59}.speed-dial-main svg{transition:transform .2s}.speed-dial-main.open svg{transform:rotate(45deg)}.speed-dial-item{opacity:0;pointer-events:none;align-items:center;gap:10px;transition:opacity .15s,transform .15s;display:flex;transform:translateY(8px)}.speed-dial-item.visible{opacity:1;pointer-events:auto;transform:translateY(0)}.speed-dial-item:first-child{transition-delay:50ms}.speed-dial-item:nth-child(2){transition-delay:.1s}.speed-dial-item:nth-child(3){transition-delay:.15s}.speed-dial-label{color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);white-space:nowrap;padding:4px 10px;font-size:12px;font-weight:500;box-shadow:0 1px 4px #00000014}.speed-dial-btn{cursor:pointer;color:#fff;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:44px;height:44px;transition:transform .15s;display:flex;box-shadow:0 2px 8px #0000001f}.speed-dial-btn:hover{transform:scale(1.08)}.speed-dial-btn.black{background:var(--text)}.speed-dial-btn.green{background:var(--accent)}
*,:before,:after{box-sizing:border-box;margin:0;padding:0}img,svg{max-width:100%;display:block}input,button,textarea,select{font:inherit}:root{--bg:#fff;--surface:#f4f4f4;--border:#e0e0e0;--border-hover:#ccc;--text:#0a0a0a;--text-2:#555;--text-3:#999;--accent:#22766c;--accent-hover:#1c6259;--accent-dim:#22766c1a;--accent-glow:#22766c33;--cyan:#08a;--green:#16a34a;--red:#dc2626;--radius:4px;--duration-fast:.15s;--duration-slow:.3s}body{background:var(--bg);color:var(--text);font-family:var(--font-inter), system-ui, sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;flex-direction:column;min-height:100vh;display:flex}.app-main{flex:1;width:100%}.btn{border-radius:var(--radius);cursor:pointer;transition:background var(--duration-fast), border-color var(--duration-fast), color var(--duration-fast);border:1px solid #0000;justify-content:center;align-items:center;gap:8px;min-height:40px;padding:10px 20px;font-size:14px;font-weight:500;line-height:1;display:inline-flex}a.btn{text-decoration:none}.btn:focus-visible{outline:2px solid var(--text);outline-offset:2px}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent);color:#fff;border-color:var(--accent)}.btn-primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.btn-secondary{color:var(--text);border-color:var(--border);background:0 0}.btn-secondary:hover:not(:disabled){border-color:var(--border-hover);color:var(--text)}.btn-ghost{color:var(--text-2);border-color:var(--border);background:0 0}.btn-ghost:hover:not(:disabled){border-color:var(--border-hover);color:var(--text)}.btn-dark{background:var(--text);color:var(--bg);border-color:var(--text)}.btn-dark:hover:not(:disabled){opacity:.9}.btn-outline{color:var(--accent);border:1px solid var(--accent);background:#fff;font-weight:500}.btn-outline:hover:not(:disabled){background:var(--accent);color:#fff}.btn-text{color:var(--text-2);background:0 0;border:none;min-height:auto;padding:4px 8px}.btn-text:hover:not(:disabled){color:var(--text)}.btn-lg{min-height:50px;padding:14px 24px;font-size:15px}.input{border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);background:var(--bg);transition:border-color var(--duration-fast);padding:12px 16px;font-size:14px}.input:focus{border-color:var(--text);outline:none}.input::placeholder{color:var(--text-3)}.input-error{border-color:var(--red)}.badge{border-radius:var(--radius);text-transform:uppercase;letter-spacing:.03em;align-items:center;padding:2px 8px;font-size:12px;font-weight:500;display:inline-flex}.badge-draft{background:var(--surface);color:var(--text-3)}.badge-sent,.badge-viewed{background:var(--surface);color:var(--text-2)}.badge-paid{color:var(--green);background:#e8f5e9}.mono{font-family:var(--font-jetbrains-mono), ui-monospace, monospace}.fw-light{font-weight:300}.fw-medium{font-weight:500}.display-contents{display:contents}.flex-1{flex:1}.flex-2{flex:2}.page-layout{align-items:stretch;min-height:calc(100vh - 57px);margin:0 -24px;display:flex}.page-sidebar{border-right:1px solid var(--border);flex-shrink:0;width:240px;padding:32px 24px}.page-content{flex:1;min-width:0;padding:32px 48px}.page-content-narrow{max-width:640px}.sidebar-label{color:var(--text);height:auto;margin-bottom:32px;font-size:32px;font-weight:500}.sidebar-nav{flex-direction:column;gap:0;display:flex}.sidebar-nav-item{color:var(--text-2);cursor:pointer;text-align:left;border-radius:var(--radius);background:0 0;border:none;outline:none;padding:12px;font-size:14px;font-weight:400;text-decoration:none}.sidebar-nav-item.active{color:var(--text);background:#f8f6f6;font-weight:500}.sidebar-nav-item:hover:not(.active){color:var(--text)}.sidebar-divider{background:var(--border);height:1px;margin:12px 0}.sidebar-search-wrap{margin-top:4px;position:relative}.sidebar-search-icon{width:14px;height:14px;color:var(--text-3);pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-50%)}.sidebar-search{border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);background:0 0;outline:none;padding:10px 12px 10px 34px;font-size:13px}.sidebar-search:focus{border-color:var(--text)}.sidebar-link{color:var(--text-2);padding:12px;font-size:14px;text-decoration:none;display:block}.sidebar-link:hover{color:var(--text)}.section-heading{margin:0 0 24px;font-size:15px;font-weight:500}@media (max-width:768px){.page-sidebar-mobile-hide{display:none!important}.page-content{padding:12px}}.app-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:16px 24px;display:flex}.app-header-logo{align-items:center;gap:10px;text-decoration:none;display:flex}.app-header-logo-img{width:auto;height:20px}.app-header-brand{letter-spacing:.35em;color:var(--text);font-size:16px}.app-header-brand-light{font-weight:300}.app-header-brand-bold{margin-left:4px;font-weight:500}.app-header-nav{align-items:center;gap:32px;display:flex}.app-header-nav-link{color:var(--text-2);font-size:13px;text-decoration:none}.app-header-nav-link:hover{color:var(--text)}.app-header-auth-btn{display:none}.app-header-user{align-items:center;gap:16px;display:flex}.app-header-account-link{display:none}.app-header-user-name{color:var(--text-2);font-size:13px}.app-main{max-width:1120px;margin:0 auto;padding:0 24px}.app-nav{border-bottom:1px solid var(--border);background:var(--surface);justify-content:flex-end;gap:4px;padding:8px 24px;display:flex}.app-nav-link{color:var(--text-2);border-radius:var(--radius);padding:4px 10px;font-size:13px;text-decoration:none;transition:color .15s,background .15s}.app-nav-link:hover{color:var(--text);background:var(--surface)}.app-nav-link.active{color:var(--text);font-weight:500}.page-heading{margin:0 0 32px;font-size:18px;font-weight:500}.page-heading-row{justify-content:flex-end;align-items:center;gap:12px;margin-bottom:32px;display:flex}.page-heading-row .page-heading{margin:0}.empty-state{text-align:center;padding:64px 24px}.empty-state-text{color:var(--text-2);margin-bottom:16px;font-size:15px}.stats-bar{border-radius:var(--radius);background:#f8f6f6;flex-direction:row;margin-bottom:32px;padding:24px;display:flex}.stat-label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-3);margin-bottom:4px;font-size:11px;font-weight:500}.stat-value{color:var(--text);font-size:24px;font-weight:500}.stat-value-unit{color:var(--text-3);font-size:14px}.stat-divider-v{background:var(--border);align-self:stretch;width:1px;margin:0 24px}.stat-divider-h{background:var(--border);height:1px;display:none}@media (max-width:560px){.stats-bar{flex-direction:column}.stats-bar .stat-divider-v{display:none}.stats-bar .stat-divider-h{display:block}.stats-bar .stat-item{padding:12px 0}}.export-dropdown-wrapper{display:inline-block;position:relative}.export-dropdown{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);z-index:10;min-width:140px;position:absolute;top:calc(100% + 4px);right:0;overflow:hidden;box-shadow:0 4px 12px #00000014}.export-dropdown-item{width:100%;color:var(--text);text-align:left;cursor:pointer;background:0 0;border:none;padding:10px 16px;font-size:13px;display:block}.export-dropdown-item:hover{background:var(--surface)}.toast{background:var(--green);color:#fff;border-radius:var(--radius);opacity:0;pointer-events:none;z-index:100;padding:12px 24px;font-size:14px;font-weight:500;transition:opacity .2s;position:fixed;bottom:32px;left:50%;transform:translate(-50%)}.toast.toast-visible{opacity:1}.app-footer{border-top:1px solid var(--border);justify-content:space-between;align-items:center;margin-top:auto;padding:16px 24px;display:flex}.app-footer-left{color:var(--text-3);font-size:12px}.app-footer-right{color:var(--text-3);align-items:center;gap:16px;font-size:12px;display:flex}.app-footer-right a{color:var(--text-3);text-decoration:none}.app-footer-right a:hover{color:var(--text-2)}.app-footer-sep{color:var(--border)}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes scaleIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.animate-pulse{animation:1.5s ease-in-out infinite pulse}@keyframes dotPulse{0%,80%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}@keyframes slideUp{to{opacity:0;max-height:0;padding:0;overflow:hidden}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
.form-stack{flex-direction:column;gap:20px;display:flex}.form-group{flex-direction:column;gap:6px;display:flex}.form-label{color:var(--text);font-size:13px;font-weight:500}.form-helper{color:var(--text-3);margin-top:2px;font-size:12px}.form-row{gap:16px;display:flex}.form-error{color:var(--red);font-size:14px}.checkbox-group{flex-direction:column;gap:12px;display:flex}.checkbox-label{cursor:pointer;align-items:center;gap:8px;font-size:14px;display:flex}.btn-save{width:100%;margin-top:8px}.select{border:1px solid var(--border);border-radius:var(--radius);width:100%;color:var(--text);background:var(--bg);appearance:none;transition:border-color var(--duration-fast);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%23555' d='M1.4 0L6 4.6 10.6 0 12 1.4l-6 6-6-6z'/%3E%3C/svg%3E");background-position:right 12px center;background-repeat:no-repeat;padding:12px 32px 12px 16px;font-size:14px}.select:focus{border-color:var(--text);outline:none}.color-swatch{border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;width:40px;height:36px;padding:2px}.input-narrow{max-width:120px}.input-tax{max-width:64px}.input-with-prefix{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);align-items:center;display:flex;overflow:hidden}.input-with-prefix:focus-within{border-color:var(--text)}.input-prefix{color:var(--text-2);-webkit-user-select:none;user-select:none;flex-shrink:0;padding:12px 0 12px 16px;font-size:14px}.input-prefixed{border:none;padding-left:4px}.input-prefixed:focus{box-shadow:none;border:none;outline:none}.input-medium{max-width:160px}.input-disabled{opacity:.5;cursor:not-allowed}.input-resize{resize:vertical}.input-mono{font-size:13px}.form-error-sm{color:var(--red);margin-top:4px;font-size:12px}.form-required{color:var(--red);margin-left:2px}.form-section{border-bottom:1px solid var(--border);padding:40px 0}.form-section:first-child{padding-top:0}.toggle-wrap{align-items:center;gap:12px;display:flex}.toggle-track{background:var(--border);cursor:pointer;width:36px;height:20px;transition:background var(--duration-fast);border-radius:10px;flex-shrink:0;position:relative}.toggle-track.on{background:var(--green)}.toggle-knob{width:14px;height:14px;transition:left var(--duration-fast);background:#fff;border-radius:50%;position:absolute;top:3px;left:3px}.toggle-track.on .toggle-knob{left:19px}.toggle-label{cursor:pointer;font-size:14px}.toggle-indent{margin-left:48px}.form-error-mb{margin-bottom:16px}.form-section-title-mt{margin-top:32px}.input-narrow-width{max-width:120px}.input-short-width{max-width:100px}.input-medium-width{max-width:200px}.inline-field-row{align-items:center;gap:8px;display:flex}.inline-field-suffix{color:var(--text-2);font-size:13px}.discount-row{gap:8px;display:flex}.subtotal-display{text-align:right;color:var(--text);font-size:14px;font-weight:500}.checkbox-row{align-items:center;gap:8px;display:flex}.form-label-inline{margin:0}.form-helper-block{display:block}.btn-add-line-item{margin-top:8px;font-size:13px}.btn-full-width{width:100%}.btn-full-width-mt{width:100%;margin-top:32px}.btn-full-width-mt-sm{width:100%;margin-top:8px}.template-input-width{width:80px}.form-error-mt{margin-top:16px}.form-actions-end{justify-content:flex-end;gap:12px;margin-top:24px;display:flex}.cancel-link{text-align:right;color:var(--text-3);margin-top:12px;font-size:13px;display:block}.li-flex-1{flex:1}.li-flex-1-5{flex:1.5}.checkbox-indent{margin-left:26px}
.notice-banner{border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:12px 24px;display:flex}.notice-banner.info{background:#f0f9ff;border-left:3px solid #08a}.notice-banner.warning{background:#fffbeb;border-left:3px solid #f59e0b}.notice-banner.maintenance{border-left:3px solid var(--red);background:#fef2f2}.notice-banner-content{color:var(--text);flex:1;font-size:13px}.notice-banner-title{font-weight:500}.notice-banner-body{color:var(--text-2)}.notice-banner-dismiss{color:var(--text-3);cursor:pointer;background:0 0;border:none;padding:0;font-size:18px;line-height:1}.notice-banner-dismiss:hover{color:var(--text)}.notice-banner-exit{animation:.2s forwards slideUp}@keyframes slideUp{to{opacity:0;max-height:0;padding:0;overflow:hidden}}
