:root{--bg: #ffffff;--fg: #2b2a29;--accent: #98c92f;--error: #c0392b;--overdue: #8b1e1e;--muted-fill: #f3f3f2;--radius: .75rem;--tap: 44px;--header-h: 56px;--tab-h: 44px;--rail-w: 220px}*,*:before,*:after{box-sizing:border-box}html,body,#root{min-height:100dvh}body{margin:0;background:var(--bg);color:var(--fg);font-family:system-ui,-apple-system,SF Pro Text,Segoe UI,sans-serif;font-size:16px;line-height:1.45;letter-spacing:0;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}a{color:var(--fg);text-decoration:none}a:hover{color:var(--fg)}button,input,select,textarea{font:inherit;color:var(--fg);background:var(--bg);border:1px solid var(--fg);border-radius:var(--radius);outline:none}button:focus:not(:focus-visible),input:focus:not(:focus-visible),select:focus:not(:focus-visible),textarea:focus:not(:focus-visible),a:focus:not(:focus-visible){outline:none}button:focus-visible,input:focus-visible,input[type=file]:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-color:var(--accent)}input:not([type=checkbox]):not([type=radio]):not([type=file]),select,textarea{min-height:var(--tap);padding:.5rem .75rem;width:100%}textarea{min-height:88px;resize:vertical}button,.btn{min-height:var(--tap);min-width:var(--tap);padding:.5rem 1rem;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;gap:.4rem;border-radius:999px;-webkit-tap-highlight-color:transparent}button.icon-btn,.icon-btn{width:var(--tap);padding:0}button.primary,.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--fg)}button,.btn,.timeline a.card,.stage-dot{transition:transform .1s ease-out}button:active,.btn:active,.timeline a.card:active,.stage-dot:active{transform:scale(.97)}button:disabled,.btn:disabled{opacity:.55;transform:none;cursor:not-allowed}header.app-header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem;min-height:var(--header-h);padding:.5rem 1rem;padding-top:calc(.5rem + env(safe-area-inset-top,0px));padding-left:calc(1rem + env(safe-area-inset-left,0px));padding-right:calc(1rem + env(safe-area-inset-right,0px));border-bottom:0;box-shadow:0 12px 16px #ffffffe0;background:#ffffffeb;-webkit-backdrop-filter:saturate(1.4) blur(16px);backdrop-filter:saturate(1.4) blur(16px);position:sticky;top:0;z-index:20}header.app-header .header-name{max-width:9.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}header.app-header .header-actions{flex:1 1 auto;justify-content:flex-end;min-width:0}.page-body{flex:1;padding:1rem;padding-bottom:calc(1rem + var(--tab-h) + env(safe-area-inset-bottom,0px));padding-left:calc(1rem + env(safe-area-inset-left,0px));padding-right:calc(1rem + env(safe-area-inset-right,0px));max-width:1120px;width:100%;margin:0 auto}.page-body.page-centered{max-width:40rem;margin-inline:auto}header.app-header .brand{display:inline-flex;align-items:center;gap:.55rem;font-weight:650;letter-spacing:-.02em}.brand-logo{width:28px;height:28px;display:block;flex:0 0 auto}.header-back{display:inline-flex;align-items:center;gap:.15rem;min-height:var(--tap);min-width:var(--tap);padding:0 .35rem 0 0;margin-left:-.35rem;color:var(--fg);font-weight:600;border-radius:8px}.header-back:active{transform:scale(.97)}.page,.app-frame{min-height:100dvh;display:flex;flex-direction:column;background:var(--bg)}.stack{display:flex;flex-direction:column;gap:.75rem}.row{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center}.row.spread{justify-content:space-between}.card{border:1px solid transparent;border-radius:var(--radius);padding:1rem;background:var(--muted-fill)}.card.active{border-width:2px;border-color:var(--accent);background:var(--bg)}.contract-card,.red-card{display:block}.contract-card{display:flex;flex-direction:column;gap:.75rem}.contract-card-head{display:flex;flex-direction:column;gap:.15rem}.contract-card-head strong{font-size:1.1rem;line-height:1.25;letter-spacing:-.01em}.contract-card-head .muted,.contract-card-meta{font-size:.85rem;margin:0}.contract-card-now{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem .5rem}.contract-card-stage{font-weight:600}.contract-card-flags{flex-wrap:wrap;gap:.4rem}.stage-progress-compact .stage-progress-scroll{margin:0}.error{color:var(--error);margin:0}input[aria-invalid=true],textarea[aria-invalid=true],select[aria-invalid=true]{border-color:var(--error)}.error-banner{border:1px solid var(--fg);border-radius:var(--radius);padding:.75rem 1rem;display:flex;gap:.75rem;align-items:center;justify-content:space-between}.muted{margin:0;opacity:1;font-size:.9rem;line-height:1.35}.badge{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--fg);border-radius:999px;padding:.15rem .6rem;font-size:.85rem;min-height:1.5rem}.badge.accent{background:var(--accent);border-color:var(--accent)}.badge.count{background:#2b2a29;border-color:#2b2a29;color:#fff;min-width:1.25rem;padding:.05rem .35rem;font-size:.7rem}.chip{display:inline-flex;align-items:center;border-radius:999px;padding:.2rem .7rem;font-size:.85rem;border:1px solid var(--fg);min-height:28px}.chip-idle{background:var(--muted-fill);border-color:transparent}.chip-work{background:var(--bg);border:2px solid var(--accent)}.chip-review{background:var(--bg);border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.chip-defect{background:var(--fg);color:var(--bg);border-color:var(--fg)}.chip-closed{background:var(--accent);border-color:var(--accent);color:var(--fg)}.chip-skip{background:var(--muted-fill)}.timeline{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem}.timeline a{display:block}.stage-progress{position:relative;display:flex;flex-direction:column;gap:.5rem}.stage-progress-head{display:flex;justify-content:space-between;align-items:baseline;gap:.75rem}.stage-progress-label{font-size:.8rem;font-weight:600;letter-spacing:.02em}.stage-progress-count{font-size:.9rem;font-weight:600;font-variant-numeric:tabular-nums}.stage-progress-scroll{overflow-x:auto;scroll-snap-type:x proximity;scrollbar-width:none;margin:0 -.25rem;padding:.25rem}.stage-progress-scroll::-webkit-scrollbar{display:none}.stage-progress-inner{position:relative;min-width:100%;width:max-content}.stage-progress-line{position:absolute;left:22px;right:22px;top:50%;height:2px;margin-top:-1px;background:#2b2a2926;border-radius:1px;overflow:hidden}.stage-progress-fill{display:block;height:100%;background:var(--accent);transform-origin:left center}.stage-progress-track{position:relative;list-style:none;margin:0;padding:0;display:flex;justify-content:space-between;gap:.25rem}.stage-progress-item{scroll-snap-align:center;flex:0 0 auto}.stage-dot{position:relative;display:inline-flex;align-items:center;justify-content:center;width:var(--tap);height:var(--tap);border-radius:999px;color:var(--fg)}.stage-dot-sm{width:20px;height:20px}.stage-dot-mark{display:block;width:16px;height:16px;border-radius:999px;box-sizing:border-box;background:var(--bg);border:2px solid rgba(43,42,41,.3);background-position:center;background-repeat:no-repeat;transition:transform .16s cubic-bezier(.2,.8,.2,1),box-shadow .16s ease}.stage-dot-sm .stage-dot-mark{width:14px;height:14px}.stage-dot-work .stage-dot-mark{border-color:var(--accent);border-width:3px}.stage-dot-review .stage-dot-mark{border-color:var(--accent);border-width:2px;background-image:radial-gradient(circle,var(--accent) 0 3px,transparent 3.5px)}.stage-dot-defect .stage-dot-mark{background:var(--fg);border-color:var(--fg)}.stage-dot-closed .stage-dot-mark{background-color:var(--accent);border-color:var(--accent);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 6.2 5 8.5l4.5-5' fill='none' stroke='%232b2a29' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-size:10px}.stage-dot-skip .stage-dot-mark{background-color:var(--muted-fill);border-color:#2b2a294d;background-image:linear-gradient(135deg,transparent 45%,rgba(43,42,41,.5) 45% 55%,transparent 55%)}.stage-dot-control .stage-dot-mark{box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--fg)}.stage-dot-overdue .stage-dot-mark{border-color:var(--fg);box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--overdue)}.stage-dot-active .stage-dot-mark{transform:scale(1.15)}@media(hover:hover){.stage-dot:hover .stage-dot-mark{transform:scale(1.22);box-shadow:0 0 0 5px #98c92f61}.stage-dot-control:hover .stage-dot-mark{box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--fg),0 0 0 9px #98c92f61}.stage-dot-overdue:hover .stage-dot-mark{box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--overdue),0 0 0 9px #8b1e1e47}}.stage-dot:active .stage-dot-mark{transform:scale(.9);transition-duration:80ms}.stage-tip-anchor{position:absolute;z-index:8;width:0;height:0;pointer-events:none}.stage-tip-lift{position:absolute;left:0;top:0}.stage-tip{position:absolute;left:0;bottom:14px;display:block;width:max-content;max-width:min(18rem,70vw);margin:0;padding:.45rem .7rem;border-radius:calc(var(--radius) - .15rem);background:#2b2a29;color:#fff;font-size:.8rem;line-height:1.35;letter-spacing:.01em;transform:translate(-50%);box-shadow:0 10px 28px #2b2a2938}.stage-tip-arrow{position:absolute;bottom:-4px;width:8px;height:8px;background:#2b2a29;transform:translate(-50%) rotate(45deg)}.timeline-card.timeline-rail-item{display:grid;grid-template-columns:20px 1fr;column-gap:.75rem;position:relative}.timeline-rail{position:relative;display:flex;justify-content:center;padding-top:1.1rem}.timeline-rail:before{content:"";position:absolute;top:0;bottom:-.5rem;left:50%;width:2px;margin-left:-1px;background:#2b2a291f}.timeline li:first-child .timeline-rail:before{top:1.1rem}.timeline li:last-child .timeline-rail:before{bottom:auto;height:1.1rem}.timeline-rail .stage-dot{z-index:1;background:var(--bg)}.timeline-card-body{min-width:0;display:flex;flex-direction:column;gap:.5rem}.stage-counts{margin:0;font-size:.85rem;font-weight:600;font-variant-numeric:tabular-nums}.skeleton{display:block;background:var(--muted-fill);border-radius:var(--radius);animation:skeleton-fade 1.4s ease-in-out infinite alternate}.skeleton-title{height:2rem;width:70%}.skeleton-bar{height:2.75rem}.skeleton-card{height:6.5rem}@keyframes skeleton-fade{0%{opacity:1}to{opacity:.55}}.shell{display:block}.shell .timeline-col,.shell .stage-col{min-width:0}.photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:.5rem}.photos img{width:100%;height:120px;object-fit:cover;border:1px solid var(--fg);border-radius:var(--radius)}.photo-cell{display:flex;flex-direction:column;gap:.35rem}.photo-open{padding:0;border:0;background:transparent;min-width:var(--tap);min-height:var(--tap);border-radius:var(--radius)}label.field{display:flex;flex-direction:column;gap:.35rem}label.check{display:flex;flex-direction:row;align-items:center;min-height:var(--tap);gap:.5rem;cursor:pointer}label.check input{-moz-appearance:none;appearance:none;-webkit-appearance:none;width:20px;height:20px;min-width:20px;min-height:20px;margin:0;padding:0;flex:0 0 auto;border:1.5px solid var(--fg);border-radius:4px;background:var(--bg);accent-color:var(--accent);transition:transform .1s ease-out}label.check input:checked{background-color:var(--accent);border-color:var(--accent);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath fill='none' stroke='%232B2A29' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' d='M2 6.5 4.8 9.2 10 3.2'/%3E%3C/svg%3E");background-size:12px;background-position:center;background-repeat:no-repeat}label.check input:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-color:var(--accent)}label.check:active input{transform:scale(.97)}h1,h2,h3{margin:0 0 .5rem;font-weight:650}h1{font-size:2.25rem;font-weight:700;line-height:1.05;letter-spacing:-.03em}h2{font-size:1.25rem;line-height:1.2;letter-spacing:-.02em}h3{font-size:1.05rem;line-height:1.25;letter-spacing:-.02em}.rail{display:none}.tab-bar{position:fixed;left:0;right:0;bottom:0;z-index:30;display:flex;justify-content:space-around;gap:.15rem;min-height:calc(var(--tab-h) + env(safe-area-inset-bottom,0px));padding-bottom:env(safe-area-inset-bottom,0px);padding-left:env(safe-area-inset-left,0px);padding-right:env(safe-area-inset-right,0px);border-top:0;box-shadow:0 -12px 16px #ffffffe0;background:#fffffff0;-webkit-backdrop-filter:saturate(1.4) blur(16px);backdrop-filter:saturate(1.4) blur(16px)}.tab-bar a,.rail a{min-height:var(--tap);display:inline-flex;align-items:center;justify-content:center;gap:.2rem;padding:.2rem;border-radius:0;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent}.tab-bar a{flex:1 1 0;min-width:0;font-size:.8125rem}.tab-hit{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:.25rem;max-width:100%;padding:.2rem .55rem;border-radius:8px}.tab-bar a.active .tab-hit{background:var(--accent);color:var(--fg)}.tab-bar a:active .tab-hit{transform:scale(.97)}.tab-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.tab-hit .badge.count{position:absolute;top:-.35rem;right:-.4rem}.rail a.active{background:var(--muted-fill);font-weight:650;border-radius:8px}.rail a:active{transform:scale(.97)}.install-banner{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;padding:.75rem 1rem;border-bottom:1px solid var(--fg)}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;background:#2b2a29eb;z-index:80;display:flex;align-items:center;justify-content:center;padding:1rem}.lightbox-inner{max-width:min(100%,960px);width:100%}.lightbox img{width:100%;max-height:70dvh;object-fit:contain;transform-origin:center}.lightbox-close{position:absolute;top:16px;right:16px;width:36px;height:36px;min-width:36px;min-height:36px;padding:0;border:0;border-radius:999px;display:grid;place-items:center;background:#ffffffeb;color:#2b2a29;cursor:pointer}.lightbox-close:active{transform:scale(.92)}.lightbox-dots{position:absolute;bottom:18px}.stats{list-style:none;margin:0;padding:0;display:grid;gap:.5rem}.stats li{display:flex;justify-content:space-between;gap:1rem;border-bottom:1px solid var(--fg);padding:.35rem 0}.bubble{border-left:3px solid var(--accent);padding-left:.75rem}.login-card{max-width:420px;margin:2rem auto}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.frame-main{flex:1}@media(min-width:1024px){.shell.has-stage{display:grid;grid-template-columns:minmax(280px,36%) 1fr;gap:1rem;align-items:start}.staff-frame,.customer-frame{display:grid;grid-template-columns:var(--rail-w) 1fr;grid-template-rows:auto 1fr}.staff-frame .app-header,.customer-frame .app-header,.staff-frame .install-banner,.customer-frame .install-banner{grid-column:1 / -1}.staff-frame .rail,.customer-frame .rail{display:flex;flex-direction:column;gap:.35rem;padding:1rem;border-right:0;box-shadow:8px 0 16px #ffffffb3;align-items:stretch;background:#fffffff5;-webkit-backdrop-filter:saturate(1.2) blur(12px);backdrop-filter:saturate(1.2) blur(12px)}.staff-frame .frame-main,.customer-frame .frame-main{min-width:0}.staff-frame .tab-bar,.customer-frame .tab-bar{display:none}.staff-frame .page-body,.customer-frame .page-body{padding-bottom:1rem}}.sheet-root{position:fixed;top:0;right:0;bottom:0;left:0;z-index:90;pointer-events:none}.sheet-root.open{pointer-events:auto}.sheet-scrim{position:absolute;top:0;right:0;bottom:0;left:0;border:0;border-radius:0;min-width:0;min-height:0;padding:0;background:#2b2a2966}.sheet-scrim:active{transform:none}.sheet-panel{position:absolute;left:0;right:0;bottom:0;max-height:88dvh;overflow:auto;padding:.25rem 1rem calc(1.25rem + env(safe-area-inset-bottom,0px));background:#fffffff0;-webkit-backdrop-filter:blur(20px) saturate(180%);backdrop-filter:blur(20px) saturate(180%);border:0;border-top:1px solid rgb(255 255 255 / .5);border-radius:1rem 1rem 0 0;will-change:transform}.sheet-handle{width:36px;height:5px;border-radius:999px;background:var(--fg);opacity:.22;margin:.45rem auto .35rem;padding:.65rem 0;background-clip:content-box;cursor:grab;touch-action:none}.sheet-head h2{margin:0}.sheet-body{padding-top:.5rem}.read-row{display:flex;align-items:center;justify-content:flex-start;gap:.5rem}.read-row .icon-btn{flex:0 0 auto}.reorder-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.75rem}.reorder-item{position:relative;list-style:none}.reorder-item.is-dragging{z-index:2}.reorder-item.is-dragging .timeline-card,.reorder-item.is-dragging .snapshot-row>.card{box-shadow:0 12px 28px #2b2a292e}.credential-block{margin:0;padding:.75rem 1rem;background:var(--muted-fill);border-radius:var(--radius);white-space:pre-wrap;font:inherit;font-size:.95rem;line-height:1.4;cursor:pointer;transition:transform .1s ease-out}.credential-block:active{transform:scale(.97)}.snapshot-editor{display:flex;flex-direction:column;gap:.5rem;flex:1;min-width:0}.snapshot-editor .row{flex-wrap:wrap}.field-draft{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.5rem .75rem}.field-draft>.field:first-child{flex:1 1 14rem;min-width:min(100%,14rem)}.field-draft>.field:nth-child(2){flex:0 0 8.5rem}.field-draft .check{min-height:var(--tap);margin:0}.field-add{align-self:start}button.drag-handle{width:var(--tap);min-width:var(--tap);min-height:var(--tap);padding:0;border-radius:8px;border:0;background:transparent;cursor:grab;touch-action:none}button.drag-handle:active{transform:none;cursor:grabbing}.timeline-card{display:flex;flex-direction:column;gap:.5rem}.timeline-card a.card{display:block}.snapshot-row{display:flex;align-items:flex-start;gap:.5rem}.snapshot-row>a,.snapshot-row>.card{flex:1;min-width:0}.snapshot-hidden{opacity:.55}@media(prefers-reduced-motion:reduce){.page-motion{transform:none!important}label.check:active input,.credential-block:active,button:active,.btn:active,.timeline a.card:active,.stage-dot:active,.stage-dot-active .stage-dot-mark{transform:none}.skeleton{animation:none}}@media(prefers-reduced-transparency:reduce){header.app-header,.tab-bar,.staff-frame .rail,.customer-frame .rail,.sheet-panel{background:#fff;-webkit-backdrop-filter:none;backdrop-filter:none}}.segmented{display:flex;flex-wrap:wrap;gap:.25rem;padding:.25rem;border-radius:var(--radius);background:var(--muted-fill)}.segmented button{flex:1 1 auto;min-height:var(--tap);border:0;border-radius:calc(var(--radius) - .25rem);background:transparent;color:var(--fg);font:inherit;transition:transform .1s ease,background-color .16s ease}.segmented button:active{transform:scale(.97)}.segmented button.on{background:var(--bg);box-shadow:0 1px 3px #2b2a2924;font-weight:600}.source-picker{border:0;padding:0;margin:0}.source-picker legend{font-weight:600;margin-bottom:.5rem}.source-extra{overflow:visible;padding:4px;margin:-4px}.suggest-list button.on{background:var(--muted-fill)}.suggest{position:relative}.suggest-list{list-style:none;margin:.25rem 0 0;padding:.25rem;border-radius:var(--radius);background:var(--bg);box-shadow:0 6px 24px #2b2a2929;position:absolute;inset-inline:0;z-index:20}.suggest-list button{width:100%;min-height:var(--tap);text-align:start;border:0;background:transparent;color:var(--fg);font:inherit;padding:0 .75rem;border-radius:calc(var(--radius) - .25rem)}.suggest-list button:hover,.suggest-list button:focus-visible{background:var(--muted-fill)}.cover-gallery-list{list-style:none;margin:0;padding:0;display:flex;gap:.6rem;overflow-x:auto}.cover-gallery-item{position:relative;flex:0 0 9rem;width:9rem;cursor:grab;border-radius:calc(var(--radius) - .2rem)}.cover-gallery-item.dragging{cursor:grabbing;scale:1.04}.cover-add{align-self:flex-start}.cover-x{position:absolute;top:6px;right:6px;width:28px;height:28px;min-width:28px;min-height:28px;padding:0;border:0;border-radius:999px;display:grid;place-items:center;background:#2b2a29c7;color:#fff;cursor:pointer}.cover-x:active{transform:scale(.9)}.cover-gallery-item img{width:100%;height:6.5rem;object-fit:cover;border-radius:calc(var(--radius) - .2rem);display:block;background:var(--bg)}.photo-pager{position:relative;overflow:hidden;width:min(100%,calc(280px * 16 / 9));aspect-ratio:16 / 9;border-radius:var(--radius);background:var(--muted-fill);touch-action:pan-y;cursor:grab}.photo-pager.compact{width:min(100%,20rem);aspect-ratio:16 / 9;height:auto;max-height:none}.photo-pager-nav{position:absolute;top:50%;z-index:2;width:32px;height:32px;min-width:32px;min-height:32px;padding:0;border:0;border-radius:999px;display:grid;place-items:center;background:#ffffffeb;color:#2b2a29;cursor:pointer;opacity:0;transform:translateY(-50%);transition:opacity .16s ease}.photo-pager:hover .photo-pager-nav,.lightbox:hover .photo-pager-nav{opacity:1}.photo-pager-nav.prev{left:8px}.photo-pager-nav.next{right:8px}.lightbox .photo-pager-nav.prev{left:16px}.lightbox .photo-pager-nav.next{right:16px}.photo-pager-nav:active:not(:disabled){transform:translateY(-50%) scale(.92)}.photo-pager-nav:disabled{opacity:0;pointer-events:none;transform:translateY(-50%)}@media(hover:none){.photo-pager-nav{display:none}}.photo-pager-track{display:flex;height:100%;min-height:0;will-change:transform}.photo-pager-slide{flex:0 0 100%;height:100%;min-height:0;display:grid;place-items:center;overflow:hidden}.photo-pager-slide img{width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain;object-position:center;display:block;pointer-events:none;-webkit-user-select:none;user-select:none}.photo-pager-dots{position:absolute;left:0;right:0;bottom:8px;display:flex;justify-content:center;gap:6px;pointer-events:none}.photo-pager-dots span{width:6px;height:6px;border-radius:999px;background:#ffffff8c;box-shadow:0 0 0 1px #2b2a2940}.photo-pager-dots span.on{background:#fff;transform:scale(1.25)}.cover-frame{display:grid;place-items:center;width:min(100%,16rem);aspect-ratio:16 / 9;padding:0;border:0;border-radius:var(--radius);overflow:hidden;background:var(--muted-fill);color:var(--fg);transition:transform .1s ease}.cover-frame:active{transform:scale(.97)}.cover-frame img,.project-cover{width:100%;height:100%;object-fit:cover;display:block}.cover-empty{border:1px dashed rgb(43 42 41 / .3)}.project-cover-btn{display:block;width:100%;padding:0;border:0;background:transparent;border-radius:var(--radius);overflow:hidden;cursor:pointer;transition:transform .1s ease}.project-cover-btn:active{transform:scale(.97)}.project-cover{aspect-ratio:16 / 9;max-height:320px;border-radius:var(--radius)}.contract-card-top.with-cover{display:grid;grid-template-columns:64px 1fr;gap:.75rem;align-items:center}.contract-card-cover{width:64px;height:64px;min-width:64px;min-height:64px;border-radius:calc(var(--radius) - .25rem);object-fit:cover;background:var(--bg);box-shadow:inset 0 0 0 1px #2b2a2914}.contract-card-cover-empty{display:grid;place-items:center;background:var(--muted-fill);color:var(--fg);font-weight:700;font-size:1.35rem}.stats-period{min-height:var(--tap);border:1px solid rgb(43 42 41 / .2);border-radius:var(--radius);background:var(--bg);color:var(--fg);font:inherit;font-weight:600}.range-cal{border-radius:var(--radius);background:var(--bg);box-shadow:0 1px 3px #2b2a2924;padding:.75rem;max-width:380px}.range-cal-head{display:flex;align-items:center;justify-content:space-between;text-transform:capitalize}.range-cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin-top:.5rem}.range-cal-wd{text-align:center;font-size:.75rem;opacity:.6}.range-cal-day{min-height:40px;border:0;border-radius:.5rem;background:transparent;color:var(--fg);font:inherit;transition:transform .1s ease}.range-cal-day:active{transform:scale(.97)}.range-cal-day.in{background:#98c92f33}.range-cal-day.edge{background:#98c92f;color:#2b2a29;font-weight:700}.range-cal-day.today{box-shadow:inset 0 0 0 1px var(--fg)}.stats-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.4rem}.stats-list .stats-list{margin-top:.4rem}.stats-bar{position:relative;display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;min-height:var(--tap);padding-inline-end:12px;border:0;border-radius:calc(var(--radius) - .25rem);background:var(--muted-fill);color:var(--fg);font:inherit;overflow:hidden;text-align:start;transition:transform .1s ease}.stats-bar:active:not(:disabled){transform:scale(.97)}.stats-bar:disabled{opacity:.55}.stats-item.depth-1{margin-inline-start:.85rem;padding-inline-start:.65rem;border-inline-start:3px solid #98c92f}.stats-item.depth-2{margin-inline-start:1.7rem;padding-inline-start:.65rem;border-inline-start:3px solid rgb(43 42 41 / .28)}.stats-bar.depth-0{min-height:52px;font-weight:700}.stats-bar.depth-0 .stats-bar-fill{opacity:.9}.stats-bar.depth-1{min-height:44px;background:transparent;font-weight:600}.stats-bar.depth-1 .stats-bar-fill{opacity:.38}.stats-bar.depth-2{min-height:40px;background:transparent;font-weight:500;font-size:.92rem}.stats-bar.depth-2 .stats-bar-fill{opacity:.16}.stats-projects.depth-0{margin-inline-start:.85rem}.stats-projects.depth-1,.stats-projects.depth-2{margin-inline-start:.35rem}.stats-total{margin:0;font-size:1.6rem;letter-spacing:-.02em}.stats-period-label{margin:0;font-weight:600}.stats-bar-fill{position:absolute;inset-block:0;inset-inline-start:0;width:100%;transform-origin:left center;background:#98c92f;opacity:.55}.stats-bar-label,.stats-bar-num{position:relative}.stats-bar-num{font-variant-numeric:tabular-nums;white-space:nowrap}.stats-projects{margin:.4rem 0;display:flex;flex-direction:column;gap:.3rem}@media(min-width:1024px){.stats-layout{display:grid;grid-template-columns:minmax(280px,380px) 1fr;gap:1.25rem;align-items:start}.contract-card-top.with-cover{grid-template-columns:96px 1fr}.contract-card-cover{width:96px;height:96px;min-width:96px;min-height:96px}}@media(prefers-reduced-motion:reduce){.segmented button,.cover-frame,.project-cover-btn,.stage-dot-mark,.stage-tip,.range-cal-day,.stats-bar,.stats-bar-fill{transition:none}}:root{--background: #ffffff;--foreground: #2b2a29;--primary: #98c92f;--ring: #98c92f}
