*{box-sizing:border-box}body{color:#111827;background:#f7f8fa;margin:0}.app-shell{background:#f7f8fa;min-height:100vh}.app-header{z-index:10;background:#fff;border-bottom:1px solid #d9dee7;align-items:center;gap:24px;height:56px;padding:0 24px;display:flex;position:sticky;top:0}.brand{white-space:nowrap;font-size:17px;font-weight:700}.top-menu{border-bottom:0;flex:1;min-width:0}.app-content{width:100%;max-width:1280px;margin:0 auto;padding:24px}.app-content-wide{max-width:none;padding-inline:clamp(16px,2vw,32px)}@media (width>=1440px){.app-content-wide{padding-inline:32px}}.page-title-row{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;display:flex}.daily-global-filter{background:#fff;border:1px solid #e5e7eb;border-radius:8px;grid-template-columns:minmax(180px,1fr) auto;align-items:center;gap:8px 16px;margin-bottom:16px;padding:14px 16px;display:grid}.daily-global-filter>div:first-child{flex-direction:column;gap:4px;display:flex}.daily-global-filter-actions{justify-content:flex-end}.daily-filter-control{align-items:flex-start}.daily-filter-inline{flex-direction:column;gap:4px;display:flex}.daily-filter-help{white-space:normal;font-size:12px;line-height:16px}.daily-global-filter-note{grid-column:1/-1;font-size:12px}.retention-window-label{white-space:nowrap;font-size:12px}.overview-actions{flex-wrap:wrap;justify-content:flex-end}.last-updated{white-space:nowrap;font-size:12px}.metric-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:16px;display:grid}.metric-value{font-size:28px;font-weight:700;line-height:36px}.dashboard-kpi-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:16px;display:grid}.dashboard-kpi-card{min-height:132px;box-shadow:none;border:1px solid #e5e7eb}.dashboard-kpi-head{justify-content:space-between;align-items:center;gap:12px;min-height:34px;display:flex}.dashboard-kpi-icon{border-radius:10px;flex:none;justify-content:center;align-items:center;width:34px;height:34px;display:inline-flex}.dashboard-kpi-active{color:#2563eb;background:#dbeafe}.dashboard-kpi-deleted{color:#dc2626;background:#fee2e2}.dashboard-kpi-new{color:#16a34a;background:#dcfce7}.dashboard-kpi-warning{color:#d97706;background:#fef3c7}.dashboard-kpi-value{letter-spacing:0;margin-top:14px;font-size:32px;font-weight:760;line-height:38px}.dashboard-kpi-label{color:#111827;margin-top:4px;display:block}.source-card-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-bottom:16px;display:grid}.source-retention-card{min-height:292px}.source-card-tag{border-radius:999px;margin-bottom:18px;padding:4px 14px;font-weight:600}.source-card-metrics{text-align:center;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:12px 0 22px;display:grid}.source-card-number,.source-card-delta{font-size:24px;font-weight:750;line-height:32px}.source-card-delta.positive{color:#16a34a}.source-card-delta.negative{color:#dc2626}.source-card-delta.warning{color:#d97706}.retention-row{margin-top:14px}.retention-row-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:6px;display:flex}.retention-summary-card{margin-bottom:16px}.retention-summary-grid{text-align:center;align-items:center;min-height:118px;display:grid}.retention-summary-item{flex-direction:column;gap:4px;display:flex}.retention-summary-item>div{font-size:30px;font-weight:750;line-height:38px}.retention-summary-metrics{color:#64748b;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 10px;margin-top:6px;display:grid;font-size:12px!important;font-weight:500!important;line-height:18px!important}.retention-snapshot-table{flex-direction:column;gap:2px;display:flex}.retention-snapshot-row{border-bottom:1px solid #eef2f7;grid-template-columns:minmax(130px,1.4fr) repeat(4,minmax(68px,1fr));align-items:center;gap:12px;min-height:42px;padding:8px 10px;display:grid}.retention-snapshot-head{background:#f8fafc;border-bottom:0;border-radius:6px;font-weight:650}.retention-line-legend{color:#475569;flex-wrap:wrap;align-items:center;gap:10px 18px;margin:2px 0 12px;display:flex}.retention-line-legend span{white-space:nowrap;align-items:center;gap:6px;display:inline-flex}.retention-line-legend i{border-radius:999px;width:24px;height:3px}.retention-line-scroll{width:100%;padding-bottom:2px;overflow:auto hidden}.retention-line-chart{width:100%;min-width:360px;height:390px;display:block}.retention-line-grid{stroke:#e2e8f0;stroke-dasharray:4 4;stroke-width:1px}.retention-line-axis{fill:#64748b;font-size:12px}.retention-line-layout{isolation:isolate}.retention-line-overlay{z-index:2;pointer-events:none;width:calc(100% - 8px);height:290px;position:absolute;top:18px;left:4px;right:4px;overflow:visible}.retention-line-path,.retention-line-point{vector-effect:non-scaling-stroke;pointer-events:auto}.retention-line-day{z-index:1;position:relative}.retention-line-top-spacer{min-height:16px}.retention-line-plot-slot{border-bottom:1px solid #e5e7eb;width:100%;height:290px}.retention-contribution-pair{gap:0}.retention-contribution-bar{width:28px}.retention-contribution-head{justify-content:space-between;align-items:center;gap:12px;margin:18px 0 8px;display:flex}.chart-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px;margin-bottom:16px;display:grid}.daily-report-card{margin-bottom:16px}.retention-mini-chart,.daily-volume-chart{min-height:320px}.retention-chart-shell{grid-template-columns:44px minmax(0,1fr);align-items:stretch;gap:12px;min-height:390px;margin-top:6px;display:grid}.retention-y-axis{color:#64748b;text-align:right;flex-direction:column;justify-content:space-between;padding:18px 0 54px;font-size:12px;line-height:16px;display:flex}.retention-plot-area{min-width:0;position:relative}.retention-grid-lines{pointer-events:none;flex-direction:column;justify-content:space-between;display:flex;position:absolute;inset:18px 0 54px}.retention-grid-lines i{border-top:1px dashed #e2e8f0;display:block}.retention-wide-chart{white-space:nowrap;z-index:1;align-items:end;gap:10px;min-height:390px;padding:0 4px;display:grid;position:relative;overflow:auto hidden}.source-chart-legend{color:#475569;flex-wrap:wrap;justify-content:center;align-items:center;gap:10px 18px;margin:4px 0 8px;display:flex}.source-chart-legend span{white-space:nowrap;align-items:center;gap:6px;display:inline-flex}.source-chart-legend i{border-radius:2px;width:22px;height:10px;display:inline-block}.retention-mini-chart{grid-template-columns:repeat(auto-fit,minmax(38px,1fr));align-items:end;gap:8px;padding:12px 4px 0;display:grid}.retention-mini-day,.retention-wide-day,.daily-volume-day{flex-direction:column;align-items:center;gap:8px;min-width:0;display:flex}.retention-wide-day{justify-content:flex-end}.retention-mini-bars{border-bottom:1px solid #e5e7eb;justify-content:center;align-items:end;gap:3px;width:100%;height:250px;display:flex}.retention-wide-bars{border-bottom:1px solid #e5e7eb;justify-content:center;align-items:end;gap:4px;width:100%;height:290px;display:flex}.retention-cohort-label{color:#64748b;min-height:16px;font-size:11px;line-height:14px}.retention-stacked-bar{border-radius:6px 6px 0 0;flex-direction:column-reverse;width:28px;min-height:2px;display:flex;overflow:hidden;box-shadow:inset 0 0 0 1px #0f172a14}.retention-stacked-bar span{min-height:1px;display:block}.retention-stacked-label{color:#334155;font-size:11px;font-weight:650;line-height:14px}.retention-mini-bar,.retention-mini-empty,.retention-wide-bar,.retention-wide-empty{border-radius:5px 5px 0 0;width:100%;min-width:8px;max-width:18px}.retention-wide-bar,.retention-mini-bar{color:#fff;flex-direction:column;justify-content:flex-start;align-items:center;padding-top:3px;font-size:10px;line-height:13px;display:flex;overflow:hidden}.retention-wide-bar{min-width:10px;max-width:22px;font-size:10px}.retention-wide-bar small,.retention-mini-bar small{color:#ffffffe6;font-size:9px;line-height:12px}.daily-volume-legend{color:#475569;flex-wrap:wrap;justify-content:center;align-items:center;gap:10px 18px;margin:4px 0 8px;display:flex}.daily-volume-legend span{align-items:center;gap:6px;display:inline-flex}.daily-volume-legend i{border-radius:2px;width:28px;height:10px;display:inline-block}.legend-created{background:#4caf50}.legend-deleted{background:#ef4444}.legend-offline{background:#f59e0b}.daily-volume-chart-shell{grid-template-columns:44px minmax(0,1fr);align-items:stretch;gap:12px;min-height:390px;margin-top:6px;display:grid}.daily-volume-y-axis{color:#64748b;text-align:right;flex-direction:column;justify-content:space-between;padding:18px 0 54px;font-size:12px;line-height:16px;display:flex}.daily-volume-chart{min-width:0;position:relative}.daily-volume-grid-lines{pointer-events:none;flex-direction:column;justify-content:space-between;display:flex;position:absolute;inset:18px 0 54px}.daily-volume-grid-lines i{border-top:1px dashed #e2e8f0;display:block}.daily-volume-bars{white-space:nowrap;z-index:1;align-items:end;gap:8px;min-height:390px;padding:0 4px;display:grid;position:relative;overflow:auto hidden}.daily-volume-bars-wide{gap:10px}.daily-volume-day{justify-content:flex-end}.daily-volume-total-label{color:#334155;min-height:16px;font-size:11px;font-weight:650;line-height:14px}.daily-volume-pair{border-bottom:1px solid #e5e7eb;justify-content:center;align-items:end;gap:4px;width:100%;height:290px;display:flex}.daily-volume-split-label{color:#64748b;min-height:16px;font-size:11px;line-height:14px}.daily-volume-bar{border-radius:5px 5px 0 0;width:12px;min-height:2px;transition:opacity .15s}.daily-volume-bar:hover,.daily-detail-count:hover{opacity:.75}.daily-volume-bar.created{background:#4caf50}.daily-volume-bar.deleted{background:#ef4444}.daily-volume-bar.offline{background:#f59e0b}.daily-detail-card{margin-bottom:16px}.daily-detail-table{overflow-x:auto}.daily-detail-row{border-bottom:1px solid #eef2f7;align-items:center;min-width:780px;display:grid}.daily-detail-row>*{justify-content:center;align-items:center;min-height:44px;display:flex}.daily-detail-head{background:#f8fafc;border-bottom:0;border-radius:6px}.daily-detail-group{flex-direction:column;grid-column:span 3;gap:8px}.daily-detail-group>div{text-align:center;grid-template-columns:repeat(3,1fr);width:100%;display:grid}.daily-detail-count{font-weight:750;text-decoration:none}.daily-detail-created{color:#4caf50}.daily-detail-deleted{color:#ef4444}.daily-detail-offline{color:#d97706}.toolbar{flex-wrap:wrap;align-items:flex-end;gap:12px;margin-bottom:16px;display:flex}.time-filter{flex-direction:column;gap:4px;display:flex}.time-filter-label{font-size:12px;line-height:16px}.column-picker{background:#f8fafc;border:1px solid #e5e7eb;border-radius:8px;flex-wrap:wrap;align-items:center;gap:8px 14px;margin:-4px 0 16px;padding:10px 12px;display:flex}.column-picker-item{color:#334155;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;min-height:26px;font-size:13px;line-height:18px;display:inline-flex}.column-picker-item input{margin:0}.column-picker-item:has(input:disabled){color:#94a3b8;cursor:not-allowed}.review-text{max-width:520px}.diff-block{white-space:pre-wrap;background:#f9fafb;border:1px solid #d9dee7;border-radius:6px;max-height:220px;margin:0;padding:12px;font-size:12px;overflow:auto}.lifecycle-node{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:12px}.lifecycle-node-head{justify-content:space-between;gap:12px;margin-bottom:6px;display:flex}.lifecycle-summary{margin-bottom:4px!important}.lifecycle-meta{margin-bottom:4px;font-size:12px;display:block}.timeline-dot{aspect-ratio:1;color:#fff;border-radius:50%;flex:0 0 18px;justify-content:center;align-items:center;min-width:18px;max-width:18px;min-height:18px;max-height:18px;line-height:1;display:inline-flex;overflow:hidden;transform:translate(-1px);width:18px!important;height:18px!important}.timeline-dot svg{stroke-width:2.4px;flex:0 0 11px;min-width:11px;min-height:11px;width:11px!important;height:11px!important}.timeline-dot-created,.timeline-dot-imported{background:#16a34a}.timeline-dot-updated{background:#2563eb}.timeline-dot-reply{background:#0891b2}.timeline-dot-deleted{background:#dc2626}@media (width<=960px){.metric-grid,.chart-grid,.dashboard-kpi-grid,.source-card-grid,.retention-summary-grid{grid-template-columns:1fr}.app-content{padding:16px}.page-title-row,.daily-global-filter{grid-template-columns:1fr}.page-title-row{flex-direction:column}.daily-global-filter-actions{justify-content:flex-start}}
