:root{--charcoal-900: #232325;--charcoal-800: #313133;--charcoal-600: #55555a;--charcoal-400: #8b8b91;--charcoal-200: #d8d8db;--charcoal-100: #ececee;--charcoal-50: #f5f5f6;--paper: #faf9f7;--white: #ffffff;--orange-600: #b85511;--orange-500: #d4691a;--orange-100: #f9e5d5;--orange-50: #fdf4ec;--green-700: #1f332f;--green-600: #2b4742;--green-100: #dde8e5;--green-50: #eef4f2;--red: #b3261e;--sunset: linear-gradient(90deg, #b85511 0%, #d4691a 40%, #e9a25c 100%);--radius: 10px}*{box-sizing:border-box;margin:0}body{font-family:-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:var(--paper);color:var(--charcoal-800);font-size:15px;line-height:1.45}button{font:inherit;cursor:pointer}input,select,textarea{font:inherit;border:1px solid var(--charcoal-200);border-radius:6px;padding:7px 10px;background:var(--white);color:var(--charcoal-800);width:100%}input:focus,select:focus,textarea:focus{outline:2px solid var(--orange-100);border-color:var(--orange-500)}label{font-size:12px;font-weight:600;color:var(--charcoal-600);display:block;margin-bottom:3px}a{color:var(--orange-600);text-decoration-color:#b8551159;text-underline-offset:2px}a:hover{text-decoration-color:currentColor}code{background:var(--charcoal-100);border-radius:4px;padding:1px 5px;font-size:12px;overflow-wrap:anywhere}.topbar{background:var(--charcoal-800);color:var(--white)}.topbar-inner{max-width:1280px;margin:0 auto;padding:10px 20px;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px 20px}.brand{color:var(--white);text-decoration:none}.wordmark{display:inline-flex;align-items:center;gap:10px}.ridge-mark{flex:none;color:var(--white);display:block}.wordmark-text{display:flex;flex-direction:column;line-height:1.1}.wordmark-name{font-size:16px;font-weight:800;letter-spacing:-.01em;color:inherit}.wordmark-sub{font-size:10px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--orange-500);margin-top:2px}.logout{color:#ffffffb3;text-decoration:none;font-size:13px;padding:6px 10px;border-radius:6px;border:1px solid rgba(255,255,255,.18);white-space:nowrap}.logout:hover{color:var(--white);border-color:#ffffff73}.topbar-accent{height:3px;background:var(--sunset)}.eyebrow{letter-spacing:.12em;text-transform:uppercase;font-size:11px;font-weight:600;color:var(--orange-500)}.topbar h1{font-size:18px;color:var(--white)}.nav{display:flex;gap:2px;flex-wrap:wrap;min-width:0}.nav a{color:#ffffffbf;text-decoration:none;padding:6px 11px;border-radius:6px;font-size:14px;white-space:nowrap}.nav a:hover{background:#ffffff1a;color:var(--white)}.nav a.active{background:var(--orange-500);color:var(--white);font-weight:600}@media (max-width: 640px){.topbar-inner{grid-template-columns:1fr auto;grid-template-areas:"brand out" "nav nav";padding:8px 0 0;gap:6px 12px}.brand{grid-area:brand;padding-left:16px}.logout{grid-area:out;margin-right:16px;padding:5px 9px}.nav{grid-area:nav;flex-wrap:nowrap;overflow-x:auto;padding:0 12px 8px;scrollbar-width:none;-webkit-overflow-scrolling:touch;scroll-snap-type:x proximity}.nav::-webkit-scrollbar{display:none}.nav a{padding:7px 12px;font-size:14px;scroll-snap-align:start}.wordmark-name{font-size:15px}.page{padding:16px 16px 48px}}.page{max-width:1280px;margin:0 auto;padding:22px 20px 60px}.page-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px;flex-wrap:wrap}.page-head h2{font-size:20px}.btn{border:1px solid var(--charcoal-200);background:var(--white);border-radius:6px;padding:7px 14px;font-size:14px;font-weight:600;color:var(--charcoal-800)}.btn:hover{border-color:var(--charcoal-400)}.btn-accent{background:var(--orange-500);border-color:var(--orange-500);color:var(--white)}.btn-accent:hover{background:var(--orange-600);border-color:var(--orange-600)}.btn-green{background:var(--green-600);border-color:var(--green-600);color:var(--white)}.btn-green:hover{background:var(--green-700)}.btn-dark{background:var(--charcoal-800);border-color:var(--charcoal-800);color:var(--white)}.btn-dark:hover{background:var(--charcoal-900);border-color:var(--charcoal-900)}.btn-danger{color:var(--red);border-color:var(--charcoal-200);background:var(--white)}.btn-danger:hover{border-color:var(--red);background:#fdf0ef}.btn-sm{padding:4px 10px;font-size:13px}.btn:disabled{opacity:.5;cursor:not-allowed}.card{background:var(--white);border:1px solid var(--charcoal-200);border-radius:var(--radius)}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:20px}.stat{padding:14px 16px}.stat{border-top:3px solid var(--orange-500)}.stat-num{font-size:24px;font-weight:700;color:var(--charcoal-800);letter-spacing:-.01em}.stat-num.warn{color:var(--red)}.stat-label{font-size:12px;color:var(--charcoal-600)}.board{display:flex;gap:12px;overflow-x:auto;padding-bottom:10px}.col{background:var(--charcoal-100);border-radius:var(--radius);min-width:215px;flex:1;padding:10px}.col-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:10px}.col-head h3{font-size:13px}.col-hint{font-size:10px;color:var(--charcoal-400)}.col-empty{text-align:center;padding:16px 8px;font-size:12px;color:var(--charcoal-400);border:1px dashed var(--charcoal-200);border-radius:var(--radius)}.col-count{background:var(--charcoal-200);color:var(--charcoal-600);border-radius:999px;font-size:11px;font-weight:600;padding:0 8px}.job-card{display:block;width:100%;text-align:left;background:var(--white);border:1px solid var(--charcoal-200);border-radius:var(--radius);padding:10px 12px;margin-bottom:8px;text-decoration:none;color:inherit;transition:border-color .12s ease,box-shadow .12s ease}.job-card:hover{border-color:var(--orange-500);box-shadow:0 2px 10px #31313314}.job-card .name{font-weight:600;font-size:14px}.job-card .addr{font-size:12px;color:var(--charcoal-600);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.job-card .when{font-size:11px;color:var(--charcoal-400);margin-top:5px}.job-card .when.overdue{color:var(--red);font-weight:600}.badge{border-radius:999px;font-size:11px;font-weight:600;padding:2px 9px;white-space:nowrap;display:inline-block}.badge.lead{background:var(--orange-50);color:var(--orange-600)}.badge.scheduled{background:var(--charcoal-800);color:var(--white)}.badge.done{background:#fdf1c8;color:#8a6d05}.badge.delivered{background:#e3edf8;color:#2b5d8f}.badge.review_requested{background:var(--orange-100);color:var(--orange-600)}.badge.closed,.badge.draft{background:var(--charcoal-100);color:var(--charcoal-600)}.badge.sent{background:#e3edf8;color:#2b5d8f}.badge.paid{background:var(--green-50);color:var(--green-600)}.badge.void{background:var(--charcoal-100);color:var(--charcoal-400)}.badge.signed{background:var(--green-50);color:var(--green-600)}.badge.cancelled{background:var(--charcoal-100);color:var(--charcoal-600);text-decoration:line-through;text-decoration-color:var(--charcoal-400)}table{width:100%;border-collapse:collapse;font-size:14px}th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--charcoal-400);padding:8px 12px;border-bottom:2px solid var(--charcoal-200)}td{padding:9px 12px;border-bottom:1px solid var(--charcoal-100);vertical-align:top}tr:hover td{background:var(--orange-50)}@media (max-width: 640px){.team-table,.team-table tbody{display:block}.team-table tr{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;padding:10px 0;border-bottom:1px solid var(--charcoal-100)}.team-table td{display:block;padding:0;border:0}.team-table td:first-child{flex:1 0 100%}.team-table tr:hover td{background:none}}@media (max-width: 640px){.inv-table thead{display:none}.inv-table,.inv-table tbody{display:block}.inv-table tr{display:grid;grid-template-columns:1fr auto;gap:4px 12px;padding:12px 14px;border-bottom:1px solid var(--charcoal-200)}.inv-table td{display:block;padding:0;border:0}.inv-table tr:hover td{background:none}.inv-table .inv-num{grid-column:1}.inv-table .inv-status{grid-column:2;grid-row:1;justify-self:end}.inv-table .inv-who{grid-column:1 / -1}.inv-table td[data-label]{grid-column:1 / -1;display:flex;justify-content:space-between;font-size:13px}.inv-table td[data-label]:before{content:attr(data-label);color:var(--charcoal-400);font-weight:400;font-size:13px}.inv-table .inv-amt{font-weight:700;font-size:15px}.inv-table .inv-actions{grid-column:1 / -1;margin-top:6px}.inv-table td[colspan]{grid-column:1 / -1}}.tech-details{margin-top:8px}.tech-details summary{cursor:pointer;font-size:13px;color:var(--charcoal-600)}.tech-details p{margin-top:6px}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#2323258c;display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;overflow-y:auto;z-index:40}.modal{background:var(--white);border-radius:var(--radius);width:100%;max-width:520px;padding:20px}.modal h3{margin-bottom:14px}.modal .row{margin-bottom:11px}.modal .grid2{display:grid;grid-template-columns:1fr 1fr;gap:11px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.detail-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:16px;align-items:start}@media (max-width: 900px){.detail-grid{grid-template-columns:1fr}}.panel{padding:16px;margin-bottom:16px}.panel h3{font-size:14px;margin-bottom:10px}.timeline{border-left:2px solid var(--charcoal-200);padding-left:12px;font-size:13px}.timeline div{margin-bottom:5px}.timeline .pending{color:var(--charcoal-400)}.msg{border-radius:8px;padding:8px 10px;font-size:13px;margin-bottom:8px}.msg.outbound{background:var(--charcoal-50);border:1px solid var(--charcoal-200)}.msg.inbound{background:var(--orange-50);border:1px solid var(--orange-100)}.msg-meta{display:flex;justify-content:space-between;font-size:11px;color:var(--charcoal-600);margin-bottom:3px}.actions-row{display:flex;gap:8px;flex-wrap:wrap}.actions-row .push-end{margin-left:auto}.link-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.link-row .muted{margin-right:2px}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}.cal-day{min-height:130px;padding:8px}.cal-day.today{border-color:var(--orange-500);border-width:2px}.cal-day .d{font-size:12px;font-weight:700;color:var(--charcoal-600);margin-bottom:6px}.cal-job{display:block;background:var(--orange-50);border:1px solid var(--orange-100);border-left:3px solid var(--orange-500);border-radius:6px;padding:4px 7px;font-size:12px;margin-bottom:5px;text-decoration:none;color:inherit}.cal-job:hover{border-color:var(--orange-500)}.cal-none{display:none}.cal-where{font-size:12px;color:var(--charcoal-600)}@media (max-width: 640px){.cal-grid{grid-template-columns:1fr}.cal-day{min-height:0}.cal-day.empty{padding:6px 10px;background:transparent;border-style:dashed}.cal-day.empty .d{margin-bottom:0;display:flex;justify-content:space-between}.cal-none{display:inline;font-weight:400;color:var(--charcoal-400)}}.cal-job .t{font-weight:700;color:var(--charcoal-800)}.center-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.auth-card{width:100%;max-width:380px;padding:26px}.auth-card h1{font-size:20px;margin:4px 0 18px}.auth-page{background:var(--charcoal-800);background-image:radial-gradient(120% 60% at 50% 110%,rgba(212,105,26,.28),transparent 60%)}.auth-page .auth-card{padding:0;overflow:hidden;border:0;box-shadow:0 18px 50px #00000059}.auth-brand{background:var(--charcoal-900);color:var(--white);padding:18px 24px}.auth-accent{height:3px;background:var(--sunset)}.auth-body{padding:22px 24px 26px}.auth-page .auth-card h1{margin:0 0 4px;font-size:22px}.public-card{width:100%;max-width:640px;padding:28px}.terms{white-space:pre-wrap;font-size:13px;background:var(--paper);border:1px solid var(--charcoal-200);border-radius:8px;padding:14px;max-height:320px;overflow-y:auto;margin:14px 0}.error{color:var(--red);font-size:13px;margin-top:8px}.muted{color:var(--charcoal-400);font-size:13px}.footer-note{text-align:center;font-size:12px;color:var(--charcoal-600);padding:18px 16px 24px}footer.footer-note{display:flex;flex-wrap:wrap;justify-content:center;gap:2px 8px;border-top:1px solid var(--charcoal-100)}footer.footer-note strong{color:var(--charcoal-800)}footer.footer-note span{color:var(--charcoal-400)}.tracker{display:flex;gap:6px;margin:18px 0}.tracker .step{flex:1;text-align:center;font-size:11px;color:var(--charcoal-400)}.tracker .bar{height:6px;border-radius:3px;background:var(--charcoal-100);margin-bottom:5px}.tracker .step.hit .bar{background:var(--sunset)}.tracker .step.hit{color:var(--charcoal-800);font-weight:600}.prep-head{position:sticky;top:0;z-index:10;background:var(--charcoal-800);color:var(--white);padding:12px 16px 14px}.prep-head .addr{font-size:16px;font-weight:700;line-height:1.25}.prep-head .when{font-size:12px;color:#ffffffb3;margin-top:2px}.prep-head-top{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px}.prep-back{color:#fffc;text-decoration:none;font-size:13px;font-weight:600;min-height:44px;display:inline-flex;align-items:center;padding-right:8px}.prep-back:hover{color:var(--white)}.prep-kicker{font-size:10px;letter-spacing:.12em;text-transform:uppercase;font-weight:700;color:var(--orange-500)}.prep-access{display:flex;gap:8px;align-items:baseline;background:#d4691a38;border-radius:6px;padding:8px 10px;margin-top:10px}.prep-access .k{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--orange-100);font-weight:700;flex:none}.prep-access .v{font-size:14px;color:var(--white);font-weight:600}.prep-access.none .v{color:#ffffffa6;font-weight:400}.prep-progress{margin-top:12px}.prep-progress .bar{height:6px;border-radius:3px;background:#ffffff2e;overflow:hidden}.prep-progress .bar span{display:block;height:100%;background:var(--sunset);transition:width .22s ease}.prep-progress .nums{display:flex;justify-content:space-between;font-size:11px;color:#ffffffbf;margin-top:5px}.prep-progress .nums .blocked{color:#ffb4ae;font-weight:700}.prep-body{max-width:720px;margin:0 auto;padding:0 12px 96px}.prep-section{margin-top:18px}.prep-section h3{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--charcoal-600);padding:0 4px 6px}.prep-section.complete h3{color:var(--green-600)}.prep-task{display:flex;align-items:center;gap:12px;width:100%;min-height:48px;text-align:left;background:var(--white);border:1px solid var(--charcoal-200);border-radius:var(--radius);padding:10px 12px;color:var(--charcoal-800);font-size:15px;line-height:1.3;transition:border-color .12s ease,background .12s ease}.prep-task:hover{border-color:var(--charcoal-400)}.prep-task .box{flex:none;width:26px;height:26px;border-radius:6px;border:2px solid var(--charcoal-200);background:var(--white);display:grid;place-items:center;font-size:15px;font-weight:700;box-sizing:border-box}.prep-task .text{flex:1}.prep-task.done{background:var(--green-50);border-color:var(--green-100)}.prep-task.done .box{background:var(--green-600);border-color:var(--green-600);color:var(--white)}.prep-task.done .text{color:var(--charcoal-600)}.prep-task.blocked{background:#fdf0ef;border-color:var(--red)}.prep-task.blocked .box{background:var(--red);border-color:var(--red);color:var(--white)}.prep-task .note{display:block;font-size:13px;color:#8c1d18;font-weight:500;margin-top:3px}.prep-row{display:flex;gap:6px;align-items:stretch;margin-bottom:8px}.prep-row .prep-task{margin:0}.prep-cant{flex:none;width:76px;min-height:48px;padding:0 8px;border:1px solid transparent;background:transparent;border-radius:8px;font-size:13px;font-weight:600;color:var(--charcoal-600)}.prep-cant:hover{background:var(--charcoal-50);color:var(--red)}.prep-cant.undo:hover{color:var(--charcoal-800)}.prep-done-banner{background:var(--green-50);border:1px solid var(--green-100);border-radius:var(--radius);padding:14px 16px;margin-top:18px}.prep-done-banner strong{color:var(--green-600)}.today-job{display:flex;gap:12px;align-items:flex-start;background:var(--white);border:1px solid var(--charcoal-200);border-radius:var(--radius);padding:12px;margin-bottom:10px;text-decoration:none;color:var(--charcoal-800);min-height:48px}.today-job:hover{border-color:var(--charcoal-400)}.today-time{flex:none;width:66px;font-size:15px;font-weight:700;color:var(--charcoal-800);padding-top:1px}.today-main{flex:1;min-width:0}.today-addr{font-size:15px;font-weight:600;line-height:1.3}.today-sub{font-size:13px;color:var(--charcoal-600);margin-top:1px}.today-day{font-size:12px;letter-spacing:.08em;text-transform:uppercase;font-weight:700;color:var(--charcoal-600);padding:18px 4px 6px}.today-entry{font-size:13px;color:var(--charcoal-600);margin-top:6px;background:var(--orange-50);border-radius:6px;padding:5px 8px;display:inline-block}.today-entry.none{background:none;padding:5px 0;color:var(--red);font-weight:600}.today-progress{margin-top:8px}.today-progress .bar{height:4px;border-radius:2px;background:var(--charcoal-100);overflow:hidden}.today-progress .bar span{display:block;height:100%;background:var(--green-600)}.today-progress .nums{display:flex;justify-content:space-between;gap:8px;font-size:12px;color:var(--charcoal-600);margin-top:4px}.today-progress .nums .blocked{color:var(--red);font-weight:700}.today-empty{margin-top:16px;padding:14px 16px;background:var(--charcoal-50);border:1px solid var(--charcoal-200);border-radius:var(--radius);font-size:14px;color:var(--charcoal-600)}.today-empty strong{color:var(--charcoal-800)}@media (prefers-reduced-motion: reduce){.prep-progress .bar span,.prep-task{transition:none}}.task-add{display:flex;gap:8px;padding:10px;margin-bottom:14px;flex-wrap:wrap}.task-add>input:first-child{flex:1 1 280px}.task-add-who{flex:0 1 120px}.task-add-due{flex:0 1 150px}.task-card{cursor:grab}.task-card.dragging{opacity:.4}.task-title{background:none;border:0;padding:0;text-align:left;width:100%;font-weight:600;font-size:14px;color:var(--charcoal-800)}.task-title:hover{color:var(--orange-600)}.task-num{color:var(--charcoal-400);font-weight:500;font-size:12px}.task-col-done .task-title{color:var(--charcoal-600);text-decoration:line-through;text-decoration-color:var(--charcoal-400)}.task-col-stuck{background:var(--orange-50)}.task-job{display:inline-block;font-size:12px;margin-top:4px}.task-note{font-size:12px;color:var(--orange-600);margin-top:4px}.task-moves{display:flex;gap:4px;margin-top:8px;flex-wrap:wrap}.task-moves .btn-sm{padding:2px 8px;font-size:12px}.overdue-text{color:var(--red);font-weight:600}.soon-text{color:var(--orange-600);font-weight:600}.task-help{padding:12px 14px;margin-top:16px;font-size:13px;display:grid;gap:4px}.task-edit-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin:10px 0}@media (max-width: 640px){.task-board{flex-direction:column}.task-edit-row{grid-template-columns:1fr}}
