.app-footer{background:var(--bg-surface);padding:var(--space-5) 0;margin-top:auto}.app-footer__inner{justify-content:center;align-items:center;display:flex}.app-footer__copy{color:var(--ink-muted);margin:0;font-size:14px}.app-header{z-index:40;background:var(--bg-elevated);border-bottom:1px solid var(--bg-surface);position:sticky;top:0}.app-header__inner{align-items:center;gap:var(--space-3);min-height:var(--header-h);grid-template-columns:auto 1fr auto auto;display:grid}.app-header__brand{font-family:var(--font-display);color:var(--ink);min-height:var(--touch-min);align-items:center;font-size:18px;font-weight:700;text-decoration:none;display:inline-flex}.app-header__context{justify-content:center;align-items:center;gap:var(--space-2);display:none}.app-header__period-chip{min-height:36px;padding:0 var(--space-3);background:var(--bg-surface);color:var(--ink-secondary);border-radius:var(--radius-sm);align-items:center;font-size:13px;font-weight:500;display:inline-flex}.app-header__workspace{align-items:center;display:inline-flex}.app-header__workspace-select{min-height:var(--touch-min);min-width:7.5rem;padding:0 var(--space-3);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);background:var(--bg-elevated);color:var(--ink);cursor:pointer;font-size:13px;font-weight:500}.app-header__nav{display:none}.app-header__nav-list{gap:var(--space-1);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.app-header__link{min-height:var(--touch-min);padding:0 var(--space-3);color:var(--ink-secondary);border-radius:var(--radius-sm);transition:background-color var(--motion-base) var(--ease-out), color var(--motion-base) var(--ease-out);align-items:center;font-size:14px;font-weight:500;text-decoration:none;display:inline-flex}.app-header__link:hover{background:var(--bg-surface);color:var(--ink)}.app-header__link.is-active{background:var(--bg-surface);color:var(--ink);font-weight:600}.app-header__actions{align-items:center;gap:var(--space-2);display:none}.app-header__cta{text-decoration:none}.app-header__user{position:relative}.app-header__user-btn{align-items:center;gap:var(--space-2);min-height:var(--touch-min);min-width:var(--touch-min);padding:0 var(--space-3) 0 var(--space-2);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--bg-elevated);color:var(--ink);cursor:pointer;display:inline-flex}.app-header__user-avatar{border-radius:var(--radius-sm);background:var(--bg-surface);width:28px;height:28px;color:var(--ink);justify-content:center;align-items:center;font-size:13px;font-weight:700;display:inline-flex}.app-header__user-label{font-size:14px;font-weight:500}.app-header__user-menu{top:calc(100% + var(--space-2));z-index:50;min-width:180px;padding:var(--space-2);background:var(--bg-elevated);border:1px solid var(--border-subtle);border-radius:var(--radius-md);gap:var(--space-1);flex-direction:column;display:flex;position:absolute;right:0}.app-header__user-meta{padding:var(--space-2) var(--space-3);color:var(--ink-secondary);margin:0;font-size:12px;font-weight:600}.app-header__user-item{min-height:var(--touch-min);padding:0 var(--space-3);border-radius:var(--radius-sm);color:var(--ink);cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;font-size:14px;font-weight:500;text-decoration:none;display:flex}.app-header__user-item:hover{background:var(--bg-surface)}.app-header__menu-btn{width:var(--touch-min);height:var(--touch-min);border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--bg-elevated);color:var(--ink);cursor:pointer;justify-content:center;align-items:center;margin-left:auto;display:inline-flex}.app-header__drawer{background:var(--bg-elevated);border-bottom:1px solid var(--bg-surface);padding:var(--space-2) var(--space-4) var(--space-4)}.app-header__drawer[hidden]{display:none}.app-header__drawer-context{gap:var(--space-2);margin-bottom:var(--space-3);flex-wrap:wrap;display:flex}.app-header__workspace--drawer{flex:1;min-width:10rem}.app-header__workspace--drawer .app-header__workspace-select{width:100%}.app-header__drawer-list{gap:var(--space-1);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.app-header__drawer-link{min-height:var(--touch-min);padding:0 var(--space-3);color:var(--ink);border-radius:var(--radius-md);align-items:center;font-weight:500;text-decoration:none;display:flex}.app-header__drawer-link.is-active{background:var(--bg-surface);font-weight:600}.app-header__drawer-user{margin-top:var(--space-4);padding-top:var(--space-3);border-top:1px solid var(--bg-surface);gap:var(--space-1);flex-direction:column;display:flex}.app-header__drawer-cta{margin-top:var(--space-2);width:100%;text-decoration:none}.app-header__drawer-btn{text-align:left;cursor:pointer;width:100%;font:inherit;background:0 0;border:0}.app-header__drawer-btn:disabled{opacity:.6;cursor:not-allowed}@media (width>=768px){.app-header__inner{grid-template-columns:auto auto 1fr auto}.app-header__context{display:flex}.app-header__nav{justify-self:end;display:block}.app-header__actions{display:flex}.app-header__menu-btn,.app-header__drawer{display:none}}.app-shell{background:var(--bg-paper);flex-direction:column;min-height:100vh;display:flex}.app-shell__main{flex:1;width:100%}.app-shell__banner{margin-top:var(--space-3);margin-bottom:var(--space-1);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);color:var(--signal-anomaly);gap:var(--space-3);background:#fff7ed;justify-content:space-between;align-items:flex-start;display:flex}.app-shell__banner p{flex:1;margin:0;font-size:14px;font-weight:500}.auth-page{padding:var(--space-6) 0 var(--space-8);min-height:calc(100vh - var(--header-h) - 80px)}.auth-page__inner{max-width:440px;padding-inline:var(--space-4);margin-inline:auto;margin-left:auto;margin-right:auto}@media (width>=768px){.auth-page__inner{padding-inline:var(--space-6)}}.auth-page__title{margin:0 0 var(--space-2);font-size:clamp(24px,4vw,32px)}.auth-page__sub{margin:0 0 var(--space-5);color:var(--ink-secondary);font-size:14px}.auth-card{background:var(--bg-elevated);border-radius:var(--radius-lg);padding:var(--space-5);gap:var(--space-4);flex-direction:column;display:flex}.auth-field{gap:var(--space-2);flex-direction:column;display:flex}.auth-field label{color:var(--ink);font-size:14px;font-weight:600}.auth-field input,.auth-field select{min-height:var(--touch-min);padding:0 var(--space-3);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);background:var(--bg-elevated);color:var(--ink);width:100%}.auth-field input.is-invalid,.auth-field select.is-invalid{border-color:var(--signal-anomaly)}.auth-field__error{color:var(--signal-anomaly);margin:0;font-size:13px}.auth-form-error{padding:var(--space-3);color:var(--signal-anomaly);border-radius:var(--radius-md);background:#fff7ed;margin:0;font-size:14px;font-weight:500}.auth-form-success{padding:var(--space-3);background:var(--bg-surface);color:var(--ink);border-radius:var(--radius-md);margin:0;font-size:14px}.auth-submit{width:100%}.auth-switch{text-align:center;color:var(--ink-secondary);margin:0;font-size:14px}.auth-loading{min-height:40vh;padding:var(--space-6);color:var(--ink-secondary);justify-content:center;align-items:center;display:flex}.auth-loading p{margin:0}.alerts-page{width:100%}.alerts-hero{background:var(--bg-surface);padding:var(--space-6) 0}.alerts-hero__inner{max-width:var(--shell-max)}.alerts-hero__label{margin:0 0 var(--space-2);color:var(--ink-secondary);font-size:13px;font-weight:600}.alerts-hero__title{margin:0 0 var(--space-3);font-size:clamp(24px,4vw,32px)}.alerts-hero__stat{margin:0 0 var(--space-2);color:var(--ink);font-size:clamp(28px,5vw,40px);font-weight:700;line-height:var(--lh-display)}.alerts-hero__stat-unit{margin-left:var(--space-2);color:var(--ink-secondary);font-size:16px;font-weight:500}.alerts-hero__meta{max-width:64ch;color:var(--ink-secondary);margin:0 auto;font-size:14px}.alerts-body{padding:var(--space-6) 0 var(--space-8)}.alerts-body__grid{gap:var(--space-5);flex-direction:column;display:flex}@media (width>=768px){.alerts-body__grid{gap:var(--space-5);grid-template-columns:minmax(0,1fr) minmax(280px,360px);align-items:start;display:grid}}.alerts-panel{background:var(--bg-elevated);border-radius:var(--radius-lg);padding:var(--space-5)}.alerts-panel--surface{background:var(--bg-surface)}.alerts-panel__head{justify-content:space-between;align-items:center;gap:var(--space-3);margin-bottom:var(--space-2);flex-wrap:wrap;display:flex}.alerts-panel__title{margin:0 0 var(--space-2);font-size:18px}.alerts-panel__head .alerts-panel__title{margin-bottom:0}.alerts-panel__desc,.alerts-meta{margin:0 0 var(--space-4);color:var(--ink-secondary);font-size:14px}.alerts-select{min-height:var(--touch-min);min-width:10rem;padding:0 var(--space-2);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);background:var(--bg-elevated);color:var(--ink);font-size:13px}.alerts-banner-error{margin:0 0 var(--space-4);padding:var(--space-3);color:var(--signal-anomaly);border-radius:var(--radius-md);align-items:center;gap:var(--space-3);background:#fff7ed;flex-wrap:wrap;font-size:14px;font-weight:500;display:flex}.alerts-banner-ok{margin:0 0 var(--space-4);padding:var(--space-3);color:var(--signal-ok);border-radius:var(--radius-md);background:#f0fdfa;font-size:14px;font-weight:500}.alerts-empty{color:var(--ink-secondary);margin:0;font-size:14px}.alerts-rule-list{gap:var(--space-3);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.alerts-rule{justify-content:space-between;align-items:flex-start;gap:var(--space-3);padding:var(--space-4);background:var(--bg-paper);border-radius:var(--radius-md);flex-wrap:wrap;display:flex}.alerts-rule.is-editing{background:var(--bg-elevated);outline:1px solid var(--border-subtle)}.alerts-rule.is-inactive{opacity:.72}.alerts-rule__title{margin:0 0 var(--space-1);color:var(--ink);font-size:15px;font-weight:600}.alerts-rule__meta{color:var(--ink-secondary);margin:0;font-size:13px}.alerts-rule__actions{gap:var(--space-2);flex-wrap:wrap;display:flex}.alerts-rule__actions .btn{min-height:var(--touch-min);min-width:var(--touch-min)}.alerts-status{border-radius:var(--radius-sm);background:var(--bg-surface);color:var(--ink-secondary);padding:2px 8px;font-size:12px;font-weight:600;display:inline-block}.alerts-status.is-active{color:var(--accent-hover);background:#ccfbf1}.alerts-form__hint{color:var(--ink-secondary);font-weight:400}.alerts-form__help{margin:var(--space-2) 0 0;color:var(--ink-secondary);font-size:13px}.alerts-form__check{margin-top:var(--space-1)}.alerts-check{align-items:center;gap:var(--space-2);min-height:var(--touch-min);cursor:pointer;color:var(--ink);font-size:14px;display:inline-flex}.alerts-check input{width:18px;height:18px;accent-color:var(--accent)}.alerts-form__actions{gap:var(--space-3);margin-top:var(--space-4);flex-wrap:wrap;display:flex}.alerts-form__actions .btn{min-height:var(--touch-min)}.alerts-event-list{gap:var(--space-3);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.alerts-event{justify-content:space-between;align-items:flex-start;gap:var(--space-3);padding:var(--space-4);background:var(--bg-paper);border-radius:var(--radius-md);flex-wrap:wrap;display:flex}.alerts-event.is-anomaly{background:#fff7ed}.alerts-event__badges{gap:var(--space-2);margin-bottom:var(--space-2);flex-wrap:wrap;display:flex}.alerts-badge{border-radius:var(--radius-sm);background:var(--bg-surface);color:var(--ink-secondary);padding:2px 8px;font-size:12px;font-weight:600;display:inline-block}.alerts-badge.is-unread{color:var(--signal-anomaly);background:#ffedd5}.alerts-badge.is-read{background:var(--bg-surface);color:var(--ink-secondary)}.alerts-badge.is-meta{font-weight:500}.alerts-event__summary{margin:0 0 var(--space-2);color:var(--ink);max-width:72ch;margin-left:auto;margin-right:auto;font-size:14px}.alerts-event.is-anomaly .alerts-event__summary{color:var(--signal-anomaly);font-weight:500}.alerts-event__time{color:var(--ink-secondary);margin:0;font-size:13px}.alerts-event__actions .btn{min-height:var(--touch-min);min-width:var(--touch-min)}.alerts-section-gap{margin-top:var(--space-5)}.dash-hero{background:var(--bg-surface);padding:var(--space-6) 0 var(--space-7)}.dash-hero__inner{max-width:var(--shell-max);gap:var(--space-4);flex-direction:column;display:flex}.dash-hero__meta{align-items:baseline;gap:var(--space-2) var(--space-4);flex-wrap:wrap;display:flex}.dash-hero__page{color:var(--ink-secondary);margin:0;font-size:13px;font-weight:600}.dash-hero__period{color:var(--ink-secondary);margin:0;font-size:13px;font-weight:500}.dash-hero__label{color:var(--ink-secondary);margin:0;font-size:14px;font-weight:600}.dash-hero__amount{font-size:clamp(32px,7vw,40px);font-weight:700;line-height:var(--lh-display);color:var(--ink);letter-spacing:-.02em;margin:0}.dash-hero__hint{max-width:52ch;color:var(--ink-secondary);margin:0 auto;font-size:14px}.dash-body{padding:var(--space-6) 0 var(--space-8)}.dash-layout{gap:var(--space-5);flex-direction:column;display:flex}@media (width>=900px){.dash-layout{gap:var(--space-5);grid-template-columns:200px minmax(0,1fr);align-items:start;display:grid}}.dash-rail{background:var(--bg-surface);border-radius:var(--radius-lg);padding:var(--space-4);gap:var(--space-3);flex-direction:column;display:flex}.dash-rail__title{color:var(--ink);margin:0;font-size:13px;font-weight:700}.dash-rail__item{color:var(--ink-secondary);margin:0;font-size:14px}.dash-rail__chip{min-height:var(--touch-min);padding:0 var(--space-3);border-radius:var(--radius-sm);background:var(--bg-elevated);color:var(--ink);align-items:center;width:fit-content;font-size:14px;font-weight:600;display:inline-flex}.dash-main{gap:var(--space-5);flex-direction:column;min-width:0;display:flex}.dash-charts{gap:var(--space-5);grid-template-columns:1fr;display:grid}@media (width>=768px){.dash-charts{grid-template-columns:1fr 1fr;align-items:stretch}}.dash-panel{background:var(--bg-elevated);border-radius:var(--radius-lg);padding:var(--space-5);gap:var(--space-4);flex-direction:column;min-height:100%;display:flex}.dash-panel__title{margin:0;font-size:18px;font-weight:700}.dash-panel__desc{color:var(--ink-secondary);margin:0;font-size:14px}.dash-status{align-items:flex-start;gap:var(--space-4);background:var(--bg-elevated);border-radius:var(--radius-lg);padding:var(--space-5);flex-direction:column;display:flex}.dash-status p{color:var(--ink-secondary);margin:0;font-size:14px}.dash-status--error{border:1px solid var(--signal-anomaly)}.dash-status--error p{color:var(--ink)}.dash-empty{align-items:flex-start;gap:var(--space-4);background:var(--bg-elevated);border-radius:var(--radius-lg);padding:var(--space-6);flex-direction:column;display:flex}.dash-empty__title{margin:0;font-size:18px;font-weight:700}.dash-empty__desc{max-width:48ch;color:var(--ink-secondary);margin:0 auto;font-size:14px}.dash-spinner{border:2px solid var(--bg-surface);border-top-color:var(--accent);width:28px;height:28px;animation:dash-spin var(--motion-chart) linear infinite;border-radius:50%}@keyframes dash-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.dash-spinner{border-top-color:var(--ink-secondary);animation:none}}.dash-model{gap:var(--space-5);flex-direction:column;display:flex}@media (width>=520px){.dash-model{align-items:flex-start;gap:var(--space-5);flex-direction:row}}.dash-model__bars{gap:var(--space-3);flex-direction:column;flex:1 1 0;min-width:0;margin:0;padding:0;list-style:none;display:flex}.dash-model__row{gap:var(--space-2);grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid}.dash-model__name{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;font-size:14px;overflow:hidden}.dash-model__meta{color:var(--ink-secondary);text-align:right;white-space:nowrap;font-size:13px}.dash-model__track{border-radius:var(--radius-sm);background:var(--bg-surface);grid-column:1/-1;height:10px;overflow:hidden}.dash-model__fill{border-radius:var(--radius-sm);background:var(--accent);max-width:100%;height:100%;transition:width var(--motion-chart) var(--ease-out)}@media (prefers-reduced-motion:reduce){.dash-model__fill{transition:none}}.dash-donut{flex:none;width:148px;margin-inline:auto}.dash-donut svg{width:148px;height:148px;display:block}.dash-donut__center{fill:var(--ink);font-size:11px;font-weight:600}.dash-donut__sub{fill:var(--ink-secondary);font-size:9px}.dash-project-list{gap:var(--space-4);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.dash-project__head{justify-content:space-between;gap:var(--space-2);margin-bottom:var(--space-2);flex-wrap:wrap;align-items:baseline;display:flex}.dash-project__name{color:var(--ink);text-overflow:ellipsis;min-width:0;font-size:14px;font-weight:600;overflow:hidden}.dash-project__values{color:var(--ink-secondary);white-space:nowrap;font-size:13px}.dash-project__track{border-radius:var(--radius-sm);background:var(--bg-surface);height:8px;overflow:hidden}.dash-project__fill{border-radius:var(--radius-sm);max-width:100%;height:100%;transition:width var(--motion-chart) var(--ease-out);background:#44403c}@media (prefers-reduced-motion:reduce){.dash-project__fill{transition:none}}.dash-table-wrap{-webkit-overflow-scrolling:touch;overflow-x:auto}.dash-table{border-collapse:collapse;width:100%;font-size:14px}.dash-table th,.dash-table td{padding:var(--space-3) var(--space-2);text-align:left;border-bottom:1px solid var(--bg-surface);vertical-align:middle}.dash-table th{color:var(--ink-secondary);font-size:13px;font-weight:600}.dash-table td{color:var(--ink)}.dash-table .is-num{text-align:right;font-variant-numeric:tabular-nums}.home-hero{isolation:isolate;padding:var(--space-8) 0 var(--space-7);color:#f5f5f4;position:relative;overflow:hidden}.home-hero__bg{z-index:-1;background:radial-gradient(80% 60% at 90% 10%,#2dd4bf38,#0000 55%),linear-gradient(135deg,#115e59 0%,#0f766e 42%,#134e4a 100%);position:absolute;inset:0}.home-hero__content{max-width:var(--container-max)}.home-hero__title{margin:0 0 var(--space-4);color:#fafaf9;max-width:18ch;margin-left:auto;margin-right:auto;font-size:clamp(28px,5vw,40px);line-height:1.2}.home-hero__sub{margin:0 0 var(--space-5);color:#e7e5e4;max-width:42ch;margin-left:auto;margin-right:auto;font-size:16px;line-height:1.65}.home-hero__actions{gap:var(--space-3);flex-wrap:wrap;align-items:center;display:flex}.home-hero__actions-status{color:#fafaf9bf;font-size:16px;line-height:1.5}.home-hero .btn-primary{color:#115e59;background:#fff}.home-hero .btn-primary:hover:not(:disabled){color:#0f766e;background:#f5f5f4}.home-hero__secondary{color:#fafaf9;border-color:#ffffff73}.home-hero__secondary:hover:not(:disabled){color:#fff;background:#ffffff1f}.home-next{background:var(--bg-paper);padding:var(--space-7) 0}.home-next__inner{max-width:var(--container-max)}.home-next__title{margin:0 0 var(--space-3);font-size:22px}.home-next__body{margin:0 0 var(--space-4);color:var(--ink-secondary);max-width:60ch;margin-left:auto;margin-right:auto}.home-next__list{color:var(--ink);margin:0;padding-left:1.25rem}.home-next__list code{font-family:var(--font-body);background:var(--bg-surface);border-radius:var(--radius-sm);padding:2px 6px;font-size:.95em}@media (width<=767px){.home-hero{padding:var(--space-7) 0 var(--space-6)}.home-hero__sub{font-size:14px}}.not-found{padding:var(--space-8) 0;align-items:center;min-height:50vh;display:flex}.not-found__inner{align-items:flex-start;gap:var(--space-4);flex-direction:column;display:flex}.not-found__title{margin:0;font-size:28px}.not-found__body{color:var(--ink-secondary);max-width:40ch;margin:0 auto}.not-found .btn{text-decoration:none}.report-view{width:100%}.report-view__hero{background:var(--bg-surface);padding:var(--space-6) 0 var(--space-7)}.report-view__hero-inner{max-width:var(--shell-max);gap:var(--space-3);flex-direction:column;display:flex}.report-view__page{color:var(--ink-secondary);margin:0;font-size:13px;font-weight:600}.report-view__period{color:var(--ink-secondary);margin:0;font-size:13px;font-weight:500}.report-view__eyebrow{margin:var(--space-2) 0 0;color:var(--ink-secondary);font-size:13px;font-weight:600}.report-view__conclusion{max-width:48ch;font-size:clamp(22px,4.2vw,32px);font-weight:700;line-height:var(--lh-display);color:var(--ink);letter-spacing:-.01em;margin:0 auto}.report-view__amount{white-space:nowrap}.report-view__total{margin:var(--space-2) 0 0;color:var(--ink);font-size:16px;font-weight:700}.report-view__total-meta{color:var(--ink-secondary);font-size:14px;font-weight:500}.report-view__body{padding:var(--space-6) 0 0}.report-view__stack,.report-view__grid{gap:var(--space-5);flex-direction:column;display:flex}@media (width>=900px){.report-view__grid{gap:var(--space-5);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.report-view__grid>:last-child:nth-child(odd){grid-column:1/-1}}.report-panel{background:var(--bg-elevated);border-radius:var(--radius-lg);padding:var(--space-5);min-width:0}.report-panel--summary{background:var(--bg-surface)}.report-panel__head{justify-content:space-between;align-items:center;gap:var(--space-3);margin-bottom:var(--space-2);flex-wrap:wrap;display:flex}.report-panel__title{margin:0 0 var(--space-2);font-size:18px}.report-panel__head .report-panel__title{margin-bottom:0}.report-panel__desc{margin:0 0 var(--space-4);color:var(--ink-secondary);font-size:14px}.report-panel__empty{color:var(--ink-secondary);margin:0;font-size:14px}.report-summary{gap:var(--space-3);flex-direction:column;display:flex}.report-summary__p{max-width:72ch;font-size:16px;line-height:var(--lh-body);color:var(--ink);margin:0 auto}.report-bars{gap:var(--space-3);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.report-bars__row{gap:var(--space-2);flex-direction:column;min-width:0;display:flex}.report-bars__head{justify-content:space-between;align-items:baseline;gap:var(--space-2);flex-wrap:wrap;display:flex}.report-bars__name{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-size:14px;font-weight:600;overflow:hidden}.report-bars__meta{color:var(--ink-secondary);flex-shrink:0;font-size:13px}.report-bars__track{border-radius:var(--radius-sm);background:var(--bg-paper);height:8px;overflow:hidden}.report-bars__fill{border-radius:var(--radius-sm);background:var(--accent);height:100%;transition:width .24s var(--ease-out)}@media (prefers-reduced-motion:reduce){.report-bars__fill{transition:none}}.reports-page{width:100%}.reports-hero{background:var(--bg-surface);padding:var(--space-6) 0}.reports-hero__inner{max-width:var(--shell-max);gap:var(--space-3);flex-direction:column;display:flex}.reports-hero__label{color:var(--ink-secondary);margin:0;font-size:13px;font-weight:600}.reports-hero__title{font-size:clamp(24px,4vw,32px);line-height:var(--lh-display);margin:0}.reports-hero__meta{max-width:64ch;color:var(--ink-secondary);margin:0 auto;font-size:14px}.reports-body{padding:var(--space-6) 0 var(--space-8)}.reports-layout{gap:var(--space-5);flex-direction:column;display:flex}@media (width>=900px){.reports-layout{gap:var(--space-5);grid-template-columns:220px minmax(0,1fr);align-items:start;display:grid}}.reports-rail{background:var(--bg-surface);border-radius:var(--radius-lg);padding:var(--space-4);gap:var(--space-3);flex-direction:column;display:flex}.reports-rail__title{color:var(--ink);margin:0;font-size:13px;font-weight:700}.reports-rail__label{color:var(--ink-secondary);margin:0;font-size:13px;font-weight:600}.reports-rail__item{color:var(--ink-secondary);margin:0;font-size:14px}.reports-select{width:100%;min-height:var(--touch-min);padding:0 var(--space-3);border-radius:var(--radius-sm);border:1px solid var(--border-subtle);background:var(--bg-elevated);color:var(--ink);font-weight:600}.reports-cta{width:100%;margin-top:var(--space-2)}.reports-main{gap:var(--space-4);flex-direction:column;min-width:0;display:flex}.reports-status{background:var(--bg-elevated);border-radius:var(--radius-lg);padding:var(--space-5);align-items:flex-start;gap:var(--space-3);flex-direction:column;display:flex}.reports-status p{color:var(--ink-secondary);margin:0;font-size:14px}.reports-status--error{background:#fff7ed}.reports-status--error p{color:var(--signal-anomaly)}.reports-status--ok p{color:var(--signal-ok)}.reports-spinner{border:2px solid var(--border-subtle);border-top-color:var(--accent);border-radius:50%;width:28px;height:28px;animation:.8s linear infinite reports-spin}@keyframes reports-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.reports-spinner{border-top-color:var(--accent);animation:none}}.reports-empty{background:var(--bg-elevated);border-radius:var(--radius-lg);padding:var(--space-6);align-items:flex-start;gap:var(--space-3);flex-direction:column;display:flex}.reports-empty__title{margin:0;font-size:18px}.reports-empty__desc{max-width:56ch;color:var(--ink-secondary);margin:0 auto;font-size:14px}.reports-list-panel{background:var(--bg-elevated);border-radius:var(--radius-lg);padding:var(--space-5)}.reports-list-panel__title{margin:0 0 var(--space-2);font-size:18px}.reports-list-panel__desc{margin:0 0 var(--space-4);color:var(--ink-secondary);font-size:14px}.reports-list{gap:var(--space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.reports-list__item{-moz-column-gap:var(--space-3);column-gap:var(--space-3);row-gap:var(--space-1);text-align:left;width:100%;min-height:var(--touch-min);padding:var(--space-3);border-radius:var(--radius-md);background:var(--bg-paper);color:var(--ink);cursor:pointer;border:1px solid #0000;grid-template-rows:auto auto;grid-template-columns:88px minmax(0,1fr);align-items:baseline;display:grid}.reports-list__item:hover{background:var(--bg-surface)}.reports-list__item--active{background:var(--bg-surface);border-color:var(--border-subtle)}.reports-list__period{grid-area:1/1;font-size:14px;font-weight:700}.reports-list__cost{color:var(--ink);grid-area:1/2;font-size:14px;font-weight:600}.reports-list__snippet{color:var(--ink-secondary);text-overflow:ellipsis;white-space:nowrap;grid-area:2/1/auto/-1;font-size:13px;overflow:hidden}@media (width>=640px){.reports-list__item{grid-template-rows:auto;grid-template-columns:96px 120px minmax(0,1fr);align-items:center}.reports-list__snippet{grid-area:1/3}}.roadmap-hero{background:var(--bg-surface);padding:var(--space-6) 0}.roadmap-hero__inner{max-width:var(--shell-max)}.roadmap-hero__label{margin:0 0 var(--space-2);color:var(--ink-secondary);font-size:13px;font-weight:600}.roadmap-hero__title{margin:0 0 var(--space-3);font-size:clamp(24px,4vw,32px)}.roadmap-hero__stat{margin:0 0 var(--space-2);color:var(--ink);font-size:clamp(28px,5vw,40px);font-weight:700;line-height:var(--lh-display)}.roadmap-hero__stat-unit{margin-left:var(--space-2);color:var(--ink-secondary);font-size:16px;font-weight:500}.roadmap-hero__meta{max-width:64ch;color:var(--ink-secondary);margin:0 auto;font-size:14px}.roadmap-body{padding:var(--space-6) 0 var(--space-8)}.roadmap-body__grid{gap:var(--space-5);flex-direction:column;display:flex}@media (width>=768px){.roadmap-body__grid{gap:var(--space-5);grid-template-columns:minmax(0,1fr) minmax(280px,360px);align-items:start;display:grid}}.roadmap-panel{background:var(--bg-elevated);border-radius:var(--radius-lg);padding:var(--space-5)}.roadmap-panel__head{justify-content:space-between;align-items:center;gap:var(--space-3);margin-bottom:var(--space-2);flex-wrap:wrap;display:flex}.roadmap-panel__title{margin:0 0 var(--space-2);font-size:18px}.roadmap-panel__head .roadmap-panel__title{margin-bottom:0}.roadmap-panel__desc,.roadmap-meta{margin:0 0 var(--space-4);color:var(--ink-secondary);font-size:14px}.roadmap-select{min-height:var(--touch-min);min-width:10rem;padding:0 var(--space-2);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);background:var(--bg-elevated);color:var(--ink);font-size:13px}.roadmap-banner-error{margin:0 0 var(--space-4);padding:var(--space-3);color:var(--signal-anomaly);border-radius:var(--radius-md);align-items:center;gap:var(--space-3);background:#fff7ed;flex-wrap:wrap;font-size:14px;font-weight:500;display:flex}.roadmap-banner-error p{margin:0}.roadmap-banner-ok{margin:0 0 var(--space-4);padding:var(--space-3);background:var(--bg-surface);color:var(--ink);border-radius:var(--radius-md);font-size:14px}.roadmap-empty{padding:var(--space-4) 0;color:var(--ink-secondary);margin:0;font-size:14px}.roadmap-table-wrap{-webkit-overflow-scrolling:touch;overflow-x:auto}.roadmap-table{border-collapse:collapse;width:100%;font-size:14px}.roadmap-table th,.roadmap-table td{padding:var(--space-3) var(--space-2);text-align:left;vertical-align:top;border-bottom:1px solid var(--bg-surface)}.roadmap-table th{color:var(--ink-secondary);white-space:nowrap;font-size:13px;font-weight:600}.roadmap-table td.is-num{text-align:right;white-space:nowrap}.roadmap-table th:nth-child(3),.roadmap-table th:nth-child(4),.roadmap-table th:nth-child(5){text-align:right}.roadmap-table tr.is-editing{background:var(--bg-surface)}.roadmap-table tr[data-status=cancelled] .roadmap-item__title{color:var(--ink-secondary);text-decoration:line-through}.roadmap-item__title{color:var(--ink);font-weight:600}.roadmap-item__desc{margin:var(--space-1) 0 0;color:var(--ink-secondary);max-width:36ch;margin-left:auto;margin-right:auto;font-size:13px}.roadmap-status{min-height:28px;padding:0 var(--space-2);background:var(--bg-surface);border-radius:var(--radius-sm);color:var(--ink);white-space:nowrap;align-items:center;font-size:12px;font-weight:600;display:inline-flex}.roadmap-status.is-progress{color:#115e59;background:#ccfbf1}.roadmap-status.is-done{background:var(--bg-surface);color:var(--accent-hover)}.roadmap-status.is-cancelled{color:var(--ink-secondary)}.roadmap-actions{gap:var(--space-2);flex-wrap:wrap;display:flex}.roadmap-actions .btn{padding:0 var(--space-3);font-size:13px}.roadmap-form{gap:var(--space-4);flex-direction:column;display:flex}.roadmap-form__actions{gap:var(--space-2);flex-wrap:wrap;display:flex}.roadmap-textarea{min-height:96px;padding:var(--space-3);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);background:var(--bg-elevated);color:var(--ink);width:100%;font:inherit;resize:vertical;line-height:1.5}.roadmap-textarea:focus{outline:2px solid var(--focus-ring);outline-offset:1px}.team-hero{background:var(--bg-surface);padding:var(--space-6) 0}.team-hero__inner{max-width:var(--shell-max)}.team-hero__label{margin:0 0 var(--space-2);color:var(--ink-secondary);font-size:13px;font-weight:600}.team-hero__title{margin:0 0 var(--space-3);font-size:clamp(24px,4vw,32px)}.team-hero__stat{color:var(--ink);font-size:clamp(28px,5vw,40px);font-weight:700;line-height:var(--lh-display);margin:0}.team-hero__stat-unit{margin-left:var(--space-2);color:var(--ink-secondary);font-size:16px;font-weight:500}.team-body{padding:var(--space-6) 0 var(--space-8)}.team-body__grid{gap:var(--space-5);flex-direction:column;display:flex}@media (width>=768px){.team-body__grid{gap:var(--space-5);grid-template-columns:1fr minmax(280px,360px);align-items:start;display:grid}}.team-panel{background:var(--bg-elevated);border-radius:var(--radius-lg);padding:var(--space-5)}.team-panel__title{margin:0 0 var(--space-4);font-size:18px}.team-panel__desc{margin:0 0 var(--space-4);color:var(--ink-secondary);font-size:14px}.team-table-wrap{-webkit-overflow-scrolling:touch;overflow-x:auto}.team-table{border-collapse:collapse;width:100%;font-size:14px}.team-table th,.team-table td{padding:var(--space-3) var(--space-2);text-align:left;vertical-align:middle;border-bottom:1px solid var(--bg-surface)}.team-table th{color:var(--ink-secondary);font-size:13px;font-weight:600}.team-table td{color:var(--ink)}.team-role-badge{min-height:28px;padding:0 var(--space-2);background:var(--bg-surface);border-radius:var(--radius-sm);color:var(--ink);align-items:center;font-size:12px;font-weight:600;display:inline-flex}.team-role-select{min-height:var(--touch-min);min-width:6.5rem;padding:0 var(--space-2);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);background:var(--bg-elevated);color:var(--ink);font-size:13px}.team-actions{gap:var(--space-2);flex-wrap:wrap;display:flex}.team-actions .btn{padding:0 var(--space-3);font-size:13px}.team-empty{padding:var(--space-4) 0;color:var(--ink-secondary);margin:0;font-size:14px}.team-invite{gap:var(--space-4);flex-direction:column;display:flex}.team-invite .auth-field{gap:var(--space-2);flex-direction:column;display:flex}.team-invite label{font-size:14px;font-weight:600}.team-invite input,.team-invite select{min-height:var(--touch-min);padding:0 var(--space-3);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);background:var(--bg-elevated);color:var(--ink);width:100%}.team-banner-error{margin:0 0 var(--space-4);padding:var(--space-3);color:var(--signal-anomaly);border-radius:var(--radius-md);background:#fff7ed;font-size:14px;font-weight:500}.team-banner-ok{margin:0 0 var(--space-4);padding:var(--space-3);background:var(--bg-surface);color:var(--ink);border-radius:var(--radius-md);font-size:14px}.team-meta{margin:0 0 var(--space-4);color:var(--ink-secondary);font-size:14px}.upload-hero{background:var(--bg-surface);padding:var(--space-6) 0}.upload-hero__inner{max-width:var(--shell-max)}.upload-hero__label{margin:0 0 var(--space-2);color:var(--ink-secondary);font-size:13px;font-weight:600}.upload-hero__title{margin:0 0 var(--space-3);font-size:clamp(24px,4vw,32px)}.upload-hero__stat{margin:0 0 var(--space-3);color:var(--ink);font-size:clamp(22px,4vw,32px);font-weight:700;line-height:var(--lh-display)}.upload-hero__stat-unit{margin-left:var(--space-2);color:var(--ink-secondary);font-size:14px;font-weight:500}.upload-hero__desc{max-width:52ch;color:var(--ink-secondary);margin:0 auto;font-size:14px}.upload-body{padding:var(--space-6) 0 var(--space-8)}.upload-mode{gap:var(--space-2);margin-bottom:var(--space-5);flex-wrap:wrap;display:flex}.upload-mode__btn{min-height:var(--touch-min);min-width:var(--touch-min);padding:0 var(--space-4);border-radius:var(--radius-md);background:var(--bg-surface);color:var(--ink);cursor:pointer;transition:background-color var(--motion-base) var(--ease-out);border:1px solid #0000;font-weight:600}.upload-mode__btn.is-active{background:var(--bg-elevated);color:var(--ink);box-shadow:inset 0 0 0 1px var(--border-subtle)}.upload-mode__btn:hover:not(.is-active){background:#d6d3d1}.upload-panel{background:var(--bg-elevated);border-radius:var(--radius-lg);padding:var(--space-5)}.upload-stepper{margin:0 0 var(--space-5);gap:var(--space-3);flex-wrap:wrap;padding:0;list-style:none;display:flex}.upload-stepper li{align-items:center;gap:var(--space-2);min-height:var(--touch-min);color:var(--ink-secondary);font-size:14px;font-weight:500;display:inline-flex}.upload-stepper li.is-active{color:var(--ink);font-weight:700}.upload-stepper li.is-done{color:var(--ink)}.upload-stepper__num{border-radius:var(--radius-sm);background:var(--bg-surface);font-variant-numeric:tabular-nums;justify-content:center;align-items:center;width:28px;height:28px;font-size:13px;font-weight:700;display:inline-flex}.upload-stepper li.is-active .upload-stepper__num{background:var(--accent);color:var(--accent-fg)}.upload-dropzone{align-items:flex-start;gap:var(--space-3);padding:var(--space-6);background:var(--bg-paper);border-radius:var(--radius-md);border:1px dashed var(--border-subtle);flex-direction:column;display:flex}.upload-dropzone.is-dragover{background:var(--bg-surface);border-color:var(--accent)}.upload-dropzone__title{color:var(--ink);margin:0;font-weight:600}.upload-dropzone__hint{color:var(--ink-secondary);margin:0;font-size:13px}.upload-dropzone__btn{cursor:pointer}.upload-map__grid,.upload-manual__grid{gap:var(--space-4);margin-bottom:var(--space-5);grid-template-columns:1fr;display:grid}@media (width>=640px){.upload-map__grid,.upload-manual__grid{grid-template-columns:1fr 1fr}}.upload-actions{gap:var(--space-3);flex-wrap:wrap;align-items:center;display:flex}.upload-meta{margin:0 0 var(--space-4);color:var(--ink-secondary);font-size:14px}.upload-meta strong{color:var(--ink);font-weight:600}.upload-table-wrap{-webkit-overflow-scrolling:touch;margin-bottom:var(--space-4);overflow-x:auto}.upload-table{border-collapse:collapse;width:100%;min-width:480px;font-size:14px}.upload-table th,.upload-table td{padding:var(--space-3) var(--space-2);text-align:left;vertical-align:middle;border-bottom:1px solid var(--bg-surface)}.upload-table th{color:var(--ink-secondary);font-size:13px;font-weight:600}.upload-preview__errors{margin:0 0 var(--space-4);padding:var(--space-3) var(--space-3) var(--space-3) var(--space-5);color:var(--signal-anomaly);border-radius:var(--radius-md);background:#fff7ed;font-size:13px}.upload-roadmap{margin-bottom:var(--space-5);max-width:420px;margin-left:auto;margin-right:auto}.upload-banner-error{margin:0 0 var(--space-4);padding:var(--space-3);color:var(--signal-anomaly);border-radius:var(--radius-md);align-items:center;gap:var(--space-3);background:#fff7ed;flex-wrap:wrap;font-size:14px;font-weight:500;display:flex}.upload-banner-ok{margin:0 0 var(--space-4);padding:var(--space-3);background:var(--bg-surface);color:var(--ink);border-radius:var(--radius-md);font-size:14px}.upload-retry{padding:0 var(--space-3);font-size:13px}.upload-manual .upload-actions{margin-top:var(--space-2)}:root{--font-body:"Pretendard", "IBM Plex Sans KR", system-ui, -apple-system, sans-serif;--font-display:"IBM Plex Sans KR", "Pretendard", system-ui, sans-serif;--font-num:var(--font-body);--bg-paper:#f5f5f4;--bg-surface:#e7e5e4;--bg-elevated:#fff;--ink:#1c1917;--ink-secondary:#57534e;--ink-muted:#57534e;--border-subtle:#d6d3d1;--accent:#0f766e;--accent-hover:#115e59;--accent-fg:#fff;--signal-anomaly:#c2410c;--signal-ok:#0f766e;--focus-ring:#0f766e;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--space-8:64px;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--container-max:1120px;--shell-max:1280px;--header-h:64px;--touch-min:44px;--motion-fast:.15s;--motion-base:.2s;--motion-chart:.28s;--ease-out:cubic-bezier(.22, 1, .36, 1);--text-body:16px;--text-body-mobile:14px;--text-display:36px;--lh-body:1.65;--lh-display:1.2}@media (prefers-reduced-motion:reduce){:root{--motion-fast:0s;--motion-base:0s;--motion-chart:0s}}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.mx-auto{margin-left:auto;margin-right:auto}.block{display:block}.table{display:table}.hidden{display:none}.w-full{width:100%}.max-w-7xl{max-width:80rem}.max-w-md{max-width:28rem}.px-4{padding-left:16px;padding-right:16px}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}*,:before,:after{box-sizing:border-box}html{word-break:keep-all;overflow-wrap:break-word}html,body,#root{min-height:100%}body{font-family:var(--font-body);font-size:var(--text-body);line-height:var(--lh-body);color:var(--ink);background:var(--bg-paper);-webkit-font-smoothing:antialiased;margin:0;overflow-x:hidden}@media (width<=768px){body{font-size:var(--text-body-mobile)}}h1,h2,h3,.display{font-family:var(--font-display);line-height:var(--lh-display);color:var(--ink);font-weight:700}.tabular-nums,.num{font-family:var(--font-num);font-variant-numeric:tabular-nums}a{color:#1d4ed8;text-underline-offset:2px;text-decoration-thickness:1px}a:hover{color:#1e3a8a}img{max-width:100%;height:auto}button,input,select,textarea{font:inherit}:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.container{width:100%;max-width:var(--container-max);padding-inline:var(--space-4);margin-inline:auto}@media (width>=768px){.container{padding-inline:var(--space-6)}}.shell-container{width:100%;max-width:var(--shell-max);padding-inline:var(--space-4);margin-inline:auto}@media (width>=768px){.shell-container{padding-inline:var(--space-6)}}.btn{justify-content:center;align-items:center;gap:var(--space-2);min-height:var(--touch-min);min-width:var(--touch-min);padding:0 var(--space-4);border-radius:var(--radius-md);cursor:pointer;transition:background-color var(--motion-base) var(--ease-out), color var(--motion-base) var(--ease-out), border-color var(--motion-base) var(--ease-out);border:1px solid #0000;font-weight:600;display:inline-flex}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-primary{background:var(--accent);color:var(--accent-fg)}.btn-primary:hover:not(:disabled){background:var(--accent-hover)}.btn-ghost{color:var(--ink);border-color:var(--border-subtle);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--bg-surface)}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (width>=640px){.sm\:px-6{padding-left:32px;padding-right:32px}}
