:root{font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#f5f5f5}#root{max-width:1400px;margin:0 auto;padding:2rem}.App{min-height:100vh}.dashboard{background:#fff;border-radius:12px;padding:2rem;box-shadow:0 4px 6px #0000001a}.dashboard-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:2rem;flex-wrap:wrap;gap:1rem}.dashboard-controls{display:flex;flex-direction:column;gap:1rem;align-items:flex-end}.tab-navigation{display:flex;gap:.5rem;background:#f8f9fa;border-radius:8px;padding:.25rem}.tab-button{padding:.75rem 1.5rem;border:none;background:transparent;border-radius:6px;font-size:.9rem;font-weight:500;color:#666;cursor:pointer;transition:all .2s ease}.tab-button:hover{background:#e9ecef;color:#333}.tab-button.active{background:#fff;color:#3b82f6;box-shadow:0 2px 4px #0000001a}.dashboard h1{color:#333;font-size:2rem;font-weight:600;margin:0}.job-selector{display:flex;flex-direction:column;gap:.5rem}.job-selector label{font-size:.9rem;font-weight:500;color:#666}.project-select{padding:.75rem 1rem;border:1px solid #e1e5e9;border-radius:6px;background:#fff;font-size:.9rem;color:#333;min-width:300px;cursor:pointer;transition:border-color .2s ease}.project-select:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.project-select:hover{border-color:#3b82f6}.project-details-panel{background:#fff;border:1px solid #e1e5e9;border-radius:8px;padding:1.5rem;margin-bottom:2rem;box-shadow:0 2px 4px #0000000d}.project-details-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;padding-bottom:1rem;border-bottom:1px solid #f0f0f0}.project-details-header h2{color:#333;font-size:1.5rem;font-weight:600;margin:0}.project-details-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1.5rem}.detail-section{background:#f8f9fa;border-radius:6px;padding:1rem}.detail-section h3{color:#333;font-size:1rem;font-weight:600;margin:0 0 1rem;padding-bottom:.5rem;border-bottom:1px solid #e1e5e9}.detail-item{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem;padding:.5rem 0}.detail-item:last-child{margin-bottom:0}.detail-item .label{font-size:.85rem;color:#666;font-weight:500}.detail-item .value{font-size:.9rem;font-weight:600;color:#333}.detail-item .value.estimated{color:#3b82f6}.detail-item .value.real{color:#10b981}.jobs-overview{background:#fff;border-radius:12px;padding:2rem;box-shadow:0 4px 6px #0000001a}.jobs-overview-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:2rem;flex-wrap:wrap;gap:1rem}.jobs-overview h2{color:#333;font-size:1.75rem;font-weight:600;margin:0}.date-filter-note{color:#6b7280;font-size:.875rem;margin:.25rem 0 0;font-style:italic}.jobs-filters{display:flex;gap:1rem;align-items:center;flex-wrap:wrap}.date-filters{display:flex;align-items:center;gap:.5rem}.date-filter{padding:.5rem;border:1px solid #d1d5db;border-radius:4px;font-size:.875rem;background:#fff}.date-filter:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.date-separator{color:#6b7280;font-size:.875rem}.clear-date-filter{padding:.25rem .5rem;background:#ef4444;color:#fff;border:none;border-radius:4px;font-size:.75rem;cursor:pointer;transition:background-color .2s}.clear-date-filter:hover{background:#dc2626}.status-filter{padding:.5rem 1rem;border:1px solid #e1e5e9;border-radius:6px;background:#fff;font-size:.9rem;color:#333;cursor:pointer}.filter-button{padding:.5rem 1rem;border:1px solid #e1e5e9;border-radius:6px;background:#fff;font-size:.9rem;color:#333;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;gap:.5rem}.filter-button:hover{background:#f9fafb;border-color:#9ca3af}.filter-button.active{background:#dc2626;color:#fff;border-color:#dc2626}.filter-button.active:hover{background:#b91c1c}.job-stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1.5rem;margin-bottom:2rem}.stat-card{background:#f8f9fa;border:1px solid #e1e5e9;border-radius:8px;padding:1.5rem;text-align:center}.stat-card h3{color:#666;font-size:.9rem;font-weight:500;margin:0 0 .5rem;text-transform:uppercase;letter-spacing:.5px}.stat-number{color:#333;font-size:2rem;font-weight:700;margin:0}.stat-number.outstanding{color:#dc2626}.status-chart{background:#f8f9fa;border:1px solid #e1e5e9;border-radius:8px;padding:1.5rem;margin-bottom:2rem}.status-chart h3{color:#333;font-size:1.25rem;font-weight:600;margin:0 0 1.5rem}.status-bars{display:flex;flex-direction:column;gap:1rem}.status-bar-item{display:flex;align-items:center;gap:1rem}.status-bar-label{display:flex;align-items:center;gap:.5rem;min-width:120px;font-size:.9rem;color:#333}.status-dot{width:12px;height:12px;border-radius:50%;background:#6b7280}.status-dot[data-status=active]{background:#3b82f6}.status-dot[data-status=in_progress]{background:#1d4ed8}.status-dot[data-status=completed]{background:#10b981}.status-dot[data-status=scheduled]{background:#f59e0b}.status-dot[data-status=on_hold]{background:#f97316}.status-dot[data-status=cancelled]{background:#ef4444}.status-dot[data-status=requires_invoicing]{background:#8b5cf6}.status-bar{flex:1;height:20px;background:#e1e5e9;border-radius:10px;overflow:hidden}.status-bar-fill{height:100%;border-radius:10px;transition:width .3s ease}.status-count{min-width:40px;text-align:right;font-weight:600;color:#333}.monthly-graph{background:#fff;border-radius:8px;padding:1.5rem;margin:1.5rem 0;box-shadow:0 1px 3px #0000001a}.monthly-graph h3{margin:0 0 1rem;color:#333;font-size:1.25rem;font-weight:600}.graph-container{display:flex;flex-direction:column;gap:1rem}.graph-legend{display:flex;justify-content:center;gap:2rem;flex-wrap:wrap}.legend-item{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:#666}.legend-color{width:1rem;height:1rem;border-radius:2px}.legend-color.invoiced{background:#3b82f6}.legend-color.material{background:#ef4444}.legend-color.labor{background:#f59e0b}.legend-color.payments{background:#10b981}.graph-lines{display:flex;flex-direction:column;gap:1rem;min-height:300px;padding:1rem 0;overflow-x:auto}.line-chart{width:100%;height:200px;min-width:600px}.line-path{transition:stroke-width .2s ease}.line-path:hover{stroke-width:4}.data-point{transition:r .2s ease;cursor:pointer}.data-point:hover{r:6}.month-labels{display:flex;justify-content:space-around;padding:0 1rem;min-width:600px}.month-label{font-size:.75rem;color:#666;text-align:center;font-weight:500;flex:1}.tooltip-container{position:fixed;display:none;background:#000000e6;color:#fff;padding:.75rem;border-radius:6px;font-size:.875rem;pointer-events:none;z-index:1000;max-width:200px;box-shadow:0 4px 6px #0000001a}.tooltip-title{font-weight:600;margin-bottom:.5rem;color:#fbbf24}.tooltip-data{display:flex;flex-direction:column;gap:.25rem}.tooltip-data div{display:flex;justify-content:space-between;gap:1rem}.month-totals{margin-top:.5rem;display:flex;flex-direction:column;gap:.25rem;font-size:.625rem;text-align:center}.total-item{display:flex;justify-content:space-between;gap:.25rem}.total-label{color:#666;font-weight:500}.total-value{color:#333;font-weight:600}.no-data{text-align:center;color:#666;font-style:italic;padding:2rem}.jobs-table-container{background:#f8f9fa;border:1px solid #e1e5e9;border-radius:8px;padding:1.5rem}.jobs-table-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem}.jobs-table-header h3{color:#333;font-size:1.25rem;font-weight:600;margin:0}.jobs-table{border:1px solid #e1e5e9;border-radius:6px;overflow:hidden;background:#fff}.jobs-table .table-header{display:grid;grid-template-columns:2fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;background:#f8f9fa;padding:1rem;font-weight:600;color:#333;font-size:.9rem;text-transform:uppercase;letter-spacing:.5px}.sortable-header{display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .2s ease}.sortable-header:hover{color:#3b82f6}.sort-indicator{font-size:.8rem;color:#3b82f6}.jobs-table .table-row{display:grid;grid-template-columns:2fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;padding:1rem;border-bottom:1px solid #e1e5e9;align-items:center}.jobs-table .table-row:last-child{border-bottom:none}.jobs-table .table-row:hover{background:#f8f9fa}.job-title{display:flex;flex-direction:column;gap:.25rem}.job-title strong{color:#333;font-weight:600}.job-title small{color:#666;font-size:.8rem}.client-info,.address-info{color:#666;font-size:.75rem;display:block;margin-top:.125rem}.job-status .status{padding:.25rem .75rem;border-radius:20px;font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.status-active,.status-in-progress{background:#dbeafe;color:#1d4ed8}.status-completed{background:#dcfce7;color:#15803d}.status-scheduled{background:#fef3c7;color:#d97706}.status-on-hold{background:#fed7aa;color:#ea580c}.status-cancelled{background:#fee2e2;color:#dc2626}.status-requires-invoicing{background:#e9d5ff;color:#7c3aed}.job-budget,.job-revenue,.job-labor,.job-payments,.job-payment-percentage,.job-created{display:flex;flex-direction:column;gap:.25rem;font-weight:600;color:#333}.job-revenue .amount-due,.job-labor small,.job-payments small,.job-payment-percentage small{font-size:.75rem;color:#666;font-weight:400}.job-revenue .amount-due,.job-payment-percentage .amount-due{color:#ef4444}.job-payment-percentage{position:relative}.job-payment-percentage:before{content:"";position:absolute;left:-.5rem;top:50%;transform:translateY(-50%);width:.25rem;height:1rem;border-radius:2px;background:#e1e5e9}.job-payment-percentage[data-percentage="100"]:before{background:#10b981}.job-payment-percentage[data-percentage="75-99"]:before{background:#3b82f6}.job-payment-percentage[data-percentage="50-74"]:before{background:#f59e0b}.job-payment-percentage[data-percentage="25-49"]:before{background:#f97316}.job-payment-percentage[data-percentage="0-24"]:before{background:#ef4444}.dashboard-grid{display:grid;grid-template-columns:1fr 1fr;gap:2rem;margin:2rem 0}.summary-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1.5rem;margin-bottom:2rem}.card{background:#fff;border:1px solid #e1e5e9;border-radius:8px;padding:1.5rem;box-shadow:0 2px 4px #0000000d;transition:transform .2s ease,box-shadow .2s ease}.card:hover{transform:translateY(-2px);box-shadow:0 4px 8px #0000001a}.card h3{color:#666;font-size:.9rem;font-weight:500;margin-bottom:.5rem;text-transform:uppercase;letter-spacing:.5px}.card .number{font-size:2rem;font-weight:700;color:#333;margin-bottom:.5rem}.card .trend{font-size:.85rem;color:#666}.card .trend.positive{color:#10b981}.card .trend.negative{color:#ef4444}.project-progress{background:#fff;border:1px solid #e1e5e9;border-radius:8px;padding:1.5rem}.project-progress h2{color:#333;margin-bottom:1.5rem;font-size:1.25rem;font-weight:600}.project-item{margin-bottom:1.5rem;padding-bottom:1.5rem;border-bottom:1px solid #f0f0f0}.project-item:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}.project-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.project-header h3{font-size:1rem;font-weight:600;color:#333}.status{padding:.25rem .75rem;border-radius:20px;font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.status.in-progress{background:#dbeafe;color:#1d4ed8}.status.completed{background:#dcfce7;color:#15803d}.status.approved{background:#dbeafe;color:#1d4ed8}.status.draft{background:#f3f4f6;color:#6b7280}.status.pending{background:#fef3c7;color:#d97706}.status.near-completion{background:#dcfce7;color:#15803d}.status.behind-schedule{background:#fef3c7;color:#d97706}.progress-bar{width:100%;height:8px;background:#f0f0f0;border-radius:4px;overflow:hidden;margin-bottom:.5rem}.progress-fill{height:100%;background:linear-gradient(90deg,#3b82f6,#1d4ed8);border-radius:4px;transition:width .3s ease}.project-details{font-size:.85rem;color:#666}.comparison-row{display:flex;justify-content:space-between;margin-bottom:.5rem}.comparison-item{display:flex;flex-direction:column;align-items:flex-start}.comparison-item .label{font-size:.75rem;color:#888;margin-bottom:.25rem}.comparison-item .value{font-weight:600;color:#333}.cost-breakdown{background:#fff;border:1px solid #e1e5e9;border-radius:8px;padding:1.5rem}.cost-breakdown h2{color:#333;margin-bottom:1rem;font-size:1.25rem;font-weight:600}.total-cost{margin-bottom:1.5rem;padding-bottom:1rem;border-bottom:1px solid #f0f0f0}.total-cost h3{font-size:1.5rem;font-weight:700;color:#333}.cost-comparison{display:flex;justify-content:space-between;align-items:center}.estimated-total h3{color:#3b82f6}.real-total h3{color:#10b981}.project-estimate h3{color:#059669}.cost-item{margin-bottom:1rem}.cost-header{display:flex;justify-content:space-between;margin-bottom:.5rem}.category{font-weight:500;color:#333}.cost-bar{width:100%;height:6px;background:#f0f0f0;border-radius:3px;overflow:hidden;margin-bottom:.25rem}.cost-fill{height:100%;background:linear-gradient(90deg,#10b981,#059669);border-radius:3px}.cost-fill.estimated{background:linear-gradient(90deg,#3b82f6,#1d4ed8)}.cost-fill.real{background:linear-gradient(90deg,#10b981,#059669)}.cost-item.estimated .category{color:#3b82f6}.cost-item.real .category{color:#10b981}.percentage{font-size:.75rem;color:#666}.invoice-list{background:#fff;border:1px solid #e1e5e9;border-radius:8px;padding:1.5rem;margin-top:2rem}.invoice-list h2{color:#333;margin-bottom:1.5rem;font-size:1.25rem;font-weight:600}.invoices-table{border:1px solid #e1e5e9;border-radius:6px;overflow:hidden}.table-header{display:grid;grid-template-columns:1fr 1fr 1fr 1fr 1fr 1fr 1fr;background:#f8f9fa;padding:1rem;font-weight:600;color:#333;font-size:.9rem;text-transform:uppercase;letter-spacing:.5px}.table-row{display:grid;grid-template-columns:1fr 1fr 1fr 1fr 1fr 1fr 1fr;padding:1rem;border-bottom:1px solid #e1e5e9;align-items:center}.table-row:last-child{border-bottom:none}.table-row:hover{background:#f8f9fa}.invoice-id{font-weight:600;color:#3b82f6}.project-name{color:#333}.amount{font-weight:600;color:#333}.status-paid{background:#dcfce7;color:#15803d;padding:.25rem .75rem;border-radius:20px;font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.status-pending{background:#fef3c7;color:#d97706;padding:.25rem .75rem;border-radius:20px;font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.status-overdue{background:#fee2e2;color:#dc2626;padding:.25rem .75rem;border-radius:20px;font-size:.75rem;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.due-date{color:#666;font-size:.9rem}@media (max-width: 768px){.dashboard-header{flex-direction:column;align-items:stretch}.dashboard-controls{align-items:stretch}.tab-navigation{justify-content:center}.project-select{min-width:auto;width:100%}.dashboard-grid{grid-template-columns:1fr}.summary-cards{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.table-header,.table-row{grid-template-columns:1fr;gap:.5rem}.table-header{display:none}.table-row{border:1px solid #e1e5e9;border-radius:6px;margin-bottom:.5rem}.jobs-overview-header{flex-direction:column;align-items:stretch}.job-stats-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.jobs-table .table-header,.jobs-table .table-row{grid-template-columns:1fr;gap:.5rem}.jobs-table .table-header{display:none}.jobs-table .table-row{border:1px solid #e1e5e9;border-radius:6px;margin-bottom:.5rem;padding:1rem}.status-bar-item{flex-direction:column;align-items:stretch;gap:.5rem}.status-bar-label{min-width:auto}.project-details-grid{grid-template-columns:1fr}}@media (max-width: 1200px){.table-header,.table-row{grid-template-columns:1fr 1fr 1fr 1fr 1fr;font-size:.8rem}.table-header span:nth-child(6),.table-row span:nth-child(6){display:none}.table-header span:nth-child(7),.table-row span:nth-child(7){display:none}}
