.heatmap__grid,.report-heatmap__grid{gap:3px;min-width:fit-content;display:grid}.heatmap__cell--off-hours,.report-heatmap__cell--off-hours{background-color:var(--color-bg-tertiary,#f5f3ef);background-image:repeating-linear-gradient(45deg, transparent, transparent 4px, color-mix(in srgb, var(--color-text-tertiary,#8c8c96) 30%, transparent) 4px, color-mix(in srgb, var(--color-text-tertiary,#8c8c96) 30%, transparent) 5px);cursor:not-allowed;opacity:.7}
.congestion-labels-editor__rows{gap:var(--space-2,8px);flex-direction:column;display:flex}.congestion-labels-editor__row{align-items:center;gap:var(--space-2,8px);display:flex}.congestion-labels-editor__default{flex:none;justify-content:flex-start;min-width:72px;display:flex}.congestion-labels-editor__arrow{color:var(--color-text-secondary,#5c5c66);font-size:var(--text-body-md,.8125rem);flex:none}.congestion-labels-editor__input{min-width:0;min-height:44px;padding:var(--space-2,8px) 10px;border:1px solid var(--color-border-default,#dddde3);border-radius:var(--radius-xs,4px);font-family:var(--font-sans);font-size:var(--text-body-lg,.9375rem);background:var(--color-bg-elevated,#fff);color:var(--color-text-primary,#18181b);flex:auto}.congestion-labels-editor__input:focus-visible{outline:2px solid var(--color-accent-neon,#06b6d4);outline-offset:1px;border-color:var(--color-accent-neon,#06b6d4)}.congestion-labels-editor__hint{margin:var(--space-2,8px) 0 0 0;font-family:var(--font-sans);font-size:var(--text-body-sm,.6875rem);color:var(--color-text-secondary,#5c5c66)}.congestion-labels-editor__reset{margin-top:var(--space-2,8px);min-height:44px;padding:var(--space-2,8px) var(--space-3,12px);border:1px solid var(--color-border-default,#dddde3);border-radius:var(--radius-xs,4px);font-family:var(--font-sans);font-size:var(--text-body-md,.8125rem);color:var(--color-text-secondary,#5c5c66);cursor:pointer;background:0 0}.congestion-labels-editor__reset:focus-visible{outline:2px solid var(--color-accent-neon,#06b6d4);outline-offset:1px}.congestion-labels-editor__reset:hover:not(:disabled){color:var(--color-text-primary,#18181b);border-color:var(--color-text-secondary,#5c5c66)}.congestion-labels-editor__reset:disabled{opacity:.5;cursor:not-allowed}
.prediction-chart{background:var(--color-bg-secondary,#fff);border:1px solid var(--color-border-subtle,#f0ede8);border-radius:12px;flex-direction:column;gap:12px;padding:16px;display:flex;position:relative}.prediction-chart__header{justify-content:space-between;align-items:center;display:flex}.prediction-chart__title{color:var(--color-text-primary,#2c2c2e);margin:0;font-size:16px;font-weight:600}.prediction-chart__badge{background:var(--color-accent-secondary-subtle,#fbf3ec);color:var(--color-accent-secondary,#d4956a);border-radius:9999px;padding:2px 10px;font-size:12px;font-weight:600}.prediction-chart__warning{color:var(--color-warning,#c4880c);background:var(--color-bg-tertiary,#f5f3ef);border-left:3px solid var(--color-warning,#c4880c);border-radius:8px;margin:0;padding:8px 12px;font-size:13px}.prediction-chart__chart-area{gap:4px;display:flex}.prediction-chart__y-axis{flex-shrink:0;width:9px;height:120px;position:relative}.prediction-chart__y-label{color:var(--color-text-tertiary,#9e9ea3);font-variant-numeric:tabular-nums;font-size:9px;line-height:1;position:absolute;right:4px;transform:translateY(50%)}.prediction-chart__plot-area{flex:1;height:120px;position:relative}.prediction-chart__grid{pointer-events:none;position:absolute;inset:0}.prediction-chart__grid-line{background:var(--color-border-subtle,#f0ede8);height:1px;position:absolute;left:0;right:0}.prediction-chart__bars{z-index:1;align-items:flex-end;gap:3px;height:100%;display:flex;position:relative}.prediction-chart__bar-group{cursor:pointer;border-radius:4px 4px 0 0;flex:1;align-items:flex-end;height:100%;transition:background-color .15s;display:flex}.prediction-chart__bar-group:hover{background:var(--color-bg-tertiary,#f5f3ef)}.prediction-chart__bar-group--current{background:var(--color-accent-primary-subtle,#e6f5f2)}.prediction-chart__predicted-bar{border-top:1.5px solid;border-radius:4px 4px 0 0;width:100%;min-height:2px;transition:height .4s}.prediction-chart__line-svg{z-index:2;pointer-events:none;width:100%;height:100%;position:absolute;inset:0;overflow:visible}.prediction-chart__actual-dot{background:var(--color-accent-primary,#3a9e8f);z-index:3;pointer-events:none;border:2px solid #fff;border-radius:50%;width:8px;height:8px;position:absolute;transform:translate(-50%,50%);box-shadow:0 1px 3px #0003}.prediction-chart__hour-labels{gap:3px;margin-left:20px;display:flex}.prediction-chart__hour-slot{flex-direction:column;flex:1;align-items:center;display:flex;position:relative}.prediction-chart__hour-label{color:var(--color-text-tertiary,#9e9ea3);font-variant-numeric:tabular-nums;font-size:10px}.prediction-chart__hour-label--current{color:var(--color-accent-primary,#3a9e8f);font-weight:600}.prediction-chart__current-marker{color:var(--color-accent-primary,#3a9e8f);margin-top:-2px;font-size:8px;line-height:1}.prediction-chart__tooltip{background:var(--color-bg-elevated,#fff);border:1px solid var(--color-border-default,#e8e5df);z-index:9999;pointer-events:none;white-space:nowrap;border-radius:10px;padding:10px 14px;animation:.15s prediction-tooltip-in;position:fixed;transform:translate(-50%,-100%);box-shadow:0 6px 20px #00000026}@keyframes prediction-tooltip-in{0%{opacity:0;transform:translate(-50%,-90%)}to{opacity:1;transform:translate(-50%,-100%)}}.prediction-chart__tooltip-hour{color:var(--color-text-primary,#2c2c2e);border-bottom:1px solid var(--color-border-subtle,#f0ede8);margin-bottom:6px;padding-bottom:4px;font-size:13px;font-weight:600}.prediction-chart__tooltip-row{color:var(--color-text-secondary,#6b6b6f);align-items:center;gap:6px;font-size:13px;line-height:1.6;display:flex}.prediction-chart__tooltip-swatch{border-radius:2px;flex-shrink:0;width:10px;height:10px}.prediction-chart__tooltip-swatch--predicted{background:var(--congestion-3-bg,#faeeda);border:1.5px solid var(--congestion-3-text,#633806)}.prediction-chart__tooltip-swatch--actual{background:var(--color-accent-primary,#3a9e8f);border-radius:2px;width:10px;height:3px}.prediction-chart__tooltip-level{color:var(--color-text-primary,#2c2c2e);font-variant-numeric:tabular-nums;margin-left:auto;font-weight:600}.prediction-chart__legend{color:var(--color-text-secondary,#6b6b6f);justify-content:center;gap:20px;padding-top:4px;font-size:12px;display:flex}.prediction-chart__legend-item{align-items:center;gap:5px;display:flex}.prediction-chart__legend-swatch{border-radius:3px;width:14px;height:10px}.prediction-chart__legend-swatch--predicted{background:var(--congestion-3-bg,#faeeda);border:1.5px solid var(--congestion-3-text,#633806)}.prediction-chart__legend-line{background:var(--color-accent-primary,#3a9e8f);border-radius:2px;width:16px;height:3px;position:relative}.prediction-chart__legend-line:after{content:"";background:var(--color-accent-primary,#3a9e8f);width:6px;height:6px;box-shadow:0 0 0 1px var(--color-accent-primary,#3a9e8f);border:1.5px solid #fff;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.prediction-chart__closed{text-align:center;color:var(--color-text-secondary,#5c5c66);margin:0;padding:16px 0;font-size:.875rem}
.autocomplete{gap:var(--space-1,4px);flex-direction:column;width:100%;display:flex;position:relative}.autocomplete__label{color:var(--color-text-secondary,inherit);font-size:.875rem;display:block}.autocomplete__input-wrap{align-items:center;display:flex;position:relative}.autocomplete__clear{background:var(--color-bg-tertiary,#ffffff1a);width:20px;height:20px;color:var(--color-text-secondary,#8e8e93);cursor:pointer;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:14px;line-height:1;transition:background .15s,color .15s;display:flex;position:absolute;right:8px}.autocomplete__clear:hover{background:var(--color-bg-tertiary,#ffffff26);color:var(--color-text-primary,#ececf0)}.autocomplete__input{width:100%;color:var(--color-text-primary,inherit);background:var(--color-bg-primary,transparent);border:1px solid var(--color-border-default,currentColor);border-radius:var(--radius-md,8px);outline:none;padding:10px 32px 10px 12px;font-size:1rem;transition:border-color .15s,box-shadow .15s}.autocomplete__input:focus{border-color:var(--color-accent-primary,#60a5fa);box-shadow:0 0 0 2px var(--color-accent-primary-subtle,#60a5fa33)}.autocomplete__dropdown{z-index:100;background:var(--color-bg-secondary,#1c1c23);border:1px solid var(--color-border-default,#2a2a35);border-radius:var(--radius-md,8px);max-height:240px;padding:4px 0;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow-y:auto;box-shadow:0 8px 24px #0006}.autocomplete__item{cursor:pointer;color:var(--color-text-primary,#ececf0);padding:8px 12px;font-size:.875rem;transition:background .1s}.autocomplete__item:hover,.autocomplete__item--active{background:var(--color-bg-tertiary,#252530)}.autocomplete__warning{color:var(--color-warning,#fbbf24);border-radius:var(--radius-sm,6px);background:#fbbf241a;border:1px solid #fbbf2440;align-items:center;gap:6px;margin-top:6px;padding:6px 10px;font-size:.75rem;display:flex}.autocomplete__warning:before{content:"⚠";flex-shrink:0}.autocomplete__error{color:var(--color-error,#f87171);margin-top:4px;font-size:.75rem}
.tag-input{flex-direction:column;gap:8px;display:flex}.tag-input__label{color:var(--color-text-secondary,inherit);font-size:.875rem}.tag-input__tags{flex-wrap:wrap;gap:6px;display:flex}.tag-input__badge{color:var(--color-accent-primary,#60a5fa);background:var(--color-accent-primary-subtle,#60a5fa26);white-space:nowrap;border:1px solid;border-radius:9999px;align-items:center;gap:4px;padding:4px 10px;font-size:.8125rem;display:inline-flex}.tag-input__badge-remove{width:16px;height:16px;color:inherit;cursor:pointer;opacity:.7;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:14px;line-height:1;transition:opacity .15s,color .15s;display:inline-flex}.tag-input__badge-remove:hover{opacity:1;color:var(--color-error,#f87171)}.tag-input__max-message{color:var(--color-text-tertiary,inherit);font-size:.75rem}.tag-input__error{color:var(--color-error,#f87171);font-size:.75rem}