cattle-care-ui 0.1.17 → 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.css CHANGED
@@ -1,2 +1,2 @@
1
- ._primary_qb0uf_1,._secondary_qb0uf_2,._tertiary_qb0uf_3,._dangerous_qb0uf_4{isolation:isolate;font-family:inherit;font-weight:var(--font-weight-regular);letter-spacing:.01em;cursor:pointer;border:none;justify-content:center;align-items:center;gap:8px;transition:color .2s,transform .2s ease-out;display:inline-flex;position:relative;overflow:hidden}._primary_qb0uf_1:active:not(:disabled),._secondary_qb0uf_2:active:not(:disabled),._tertiary_qb0uf_3:active:not(:disabled),._dangerous_qb0uf_4:active:not(:disabled){transform:scale(.95)}._sm_qb0uf_28{height:var(--control-height-sm);border-radius:var(--radius-sm);padding:0 12px;font-size:.9rem}._base_qb0uf_34{height:var(--control-height-base);border-radius:var(--radius-base);padding:0 16px;font-size:.9rem}._icon_qb0uf_40{flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;display:flex}._icon_qb0uf_40:first-child{margin-left:-4px}._icon_qb0uf_40:last-child{margin-right:-4px}._icon_qb0uf_40 svg{width:100%;height:100%}._iconOnly_qb0uf_59{box-sizing:border-box;padding:0}._iconOnly_qb0uf_59._sm_qb0uf_28{width:var(--control-height-sm)}._iconOnly_qb0uf_59._base_qb0uf_34{width:var(--control-height-base)}._fullWidth_qb0uf_69{width:100%}._primary_qb0uf_1:before,._secondary_qb0uf_2:before,._tertiary_qb0uf_3:before,._dangerous_qb0uf_4:before{content:"";aspect-ratio:1;z-index:-1;pointer-events:none;border-radius:50%;width:24%;transition:transform .3s cubic-bezier(.39,.575,.565,1);position:absolute;bottom:0;left:50%;transform:translate(-50%,100%)scale(1)}._primary_qb0uf_1:hover:before,._secondary_qb0uf_2:hover:before,._tertiary_qb0uf_3:hover:before,._dangerous_qb0uf_4:hover:before{transform:translate(-50%,15%)scale(8)}._primary_qb0uf_1{background:var(--brand-dark);color:#fff;font-weight:var(--font-weight-regular);letter-spacing:.02em}._primary_qb0uf_1:before{background:#ffffff14}._primary_qb0uf_1:active:not(:disabled):before{background:#00000014}._secondary_qb0uf_2{background:var(--ink-5);color:var(--text-primary)}._secondary_qb0uf_2 ._icon_qb0uf_40{color:var(--text-secondary)}._secondary_qb0uf_2:before{background:rgba(var(--brand-main-rgb), .08)}._secondary_qb0uf_2:active:not(:disabled):before{background:rgba(var(--brand-main-rgb), .28)}._secondary_qb0uf_2:hover ._icon_qb0uf_40,._secondary_qb0uf_2:hover{color:var(--brand-main)}._tertiary_qb0uf_3{color:var(--text-secondary);background:0 0}._tertiary_qb0uf_3:before{background:rgba(var(--brand-main-rgb), .16)}._tertiary_qb0uf_3:active:not(:disabled):before{background:rgba(var(--brand-main-rgb), .28)}._tertiary_qb0uf_3:hover,._tertiary_qb0uf_3:active:not(:disabled){background:var(--bg)}._tertiary_qb0uf_3:hover{color:var(--brand-main)}._dangerous_qb0uf_4{background:var(--danger-bg);color:var(--danger-text-dark)}._dangerous_qb0uf_4:before{background:rgba(var(--danger-rgb), .16)}._dangerous_qb0uf_4:active:not(:disabled):before{background:rgba(var(--danger-rgb), .28)}._primary_qb0uf_1:disabled,._secondary_qb0uf_2:disabled,._tertiary_qb0uf_3:disabled,._dangerous_qb0uf_4:disabled{background:var(--disabled-bg);color:var(--disabled-text);cursor:not-allowed}._primary_qb0uf_1:disabled:hover,._secondary_qb0uf_2:disabled:hover,._tertiary_qb0uf_3:disabled:hover,._dangerous_qb0uf_4:disabled:hover{color:var(--disabled-text)}._primary_qb0uf_1:disabled:before,._secondary_qb0uf_2:disabled:before,._tertiary_qb0uf_3:disabled:before,._dangerous_qb0uf_4:disabled:before{display:none}._wrap_1spnu_1{flex:0 0 220px;width:220px;position:relative}._wrap_1spnu_1:hover{z-index:10}._fluid_1spnu_9{flex:none;width:100%}._backing_1spnu_14{background:var(--card-surface);height:10px;box-shadow:inset 0 0 0 1px var(--border);z-index:0;border-radius:0 0 14px 14px;position:absolute;bottom:-4px;left:6px;right:6px}._backing_1spnu_14._completed_1spnu_25{background:var(--success-bg);box-shadow:inset 0 0 0 1px #bfe3cc}._card_1spnu_30{z-index:1;box-sizing:border-box;background:var(--card-surface);cursor:default;border-radius:16px;width:100%;padding:12px 14px;transition:box-shadow .2s,transform .1s;position:relative;box-shadow:inset 0 0 0 1px #efefef,0 1px 2px #1018200a}._card_1spnu_30._interactive_1spnu_46{cursor:pointer}._card_1spnu_30._interactive_1spnu_46:active{transform:scale(.98,.95)}._card_1spnu_30._grabbable_1spnu_52{cursor:grab}._card_1spnu_30._grabbable_1spnu_52:active{cursor:grabbing}._card_1spnu_30._dragging_1spnu_58,._card_1spnu_30._dragging_1spnu_58:hover{box-shadow:inset 0 0 0 1px #efefef,0 1px 2px #1018200a}._card_1spnu_30._interactive_1spnu_46:hover{box-shadow:inset 0 0 0 1px #efefef, 0 0 0 2px var(--brand-main)}._card_1spnu_30._completed_1spnu_25{background:var(--success-bg);box-shadow:inset 0 0 0 1px #bfe3cc,0 1px 2px #1018200a,0 2px 8px #1018200f}._neutral_1p1lj_1,._pill_1p1lj_2,._accent_1p1lj_3,._success_1p1lj_4,._danger_1p1lj_5,._count_1p1lj_6{font-weight:var(--font-weight-medium);white-space:nowrap;align-items:center;display:inline-flex}._neutral_1p1lj_1{color:var(--text-tertiary);background:var(--ink-5);border-radius:6px;padding:2px 7px;font-size:.75rem}._pill_1p1lj_2{background:var(--card-surface);box-shadow:inset 0 0 0 1px var(--border);color:var(--text-tertiary);border-radius:999px;padding:3px 11px;font-size:.8rem}._accent_1p1lj_3{background:var(--brand-bg);color:var(--brand-dark);border-radius:999px;padding:3px 11px;font-size:.8rem}._success_1p1lj_4{background:var(--success-bg);color:var(--success-text);border-radius:999px;padding:3px 11px;font-size:.8rem}._danger_1p1lj_5{color:var(--danger-text);background:var(--danger-bg);border-radius:6px;padding:2px 7px;font-size:.75rem}._count_1p1lj_6{background:var(--brand-main);color:#fff;text-align:center;border-radius:999px;justify-content:center;min-width:16px;height:16px;padding:0 4px;font-size:.65rem;line-height:16px}._group_taxgk_1{flex-wrap:wrap;align-items:center;gap:8px;margin-top:4px;display:inline-flex}._group_taxgk_1._sm_taxgk_9{gap:6px}._chip_taxgk_13{appearance:none;font-family:inherit;font-weight:var(--font-weight-medium);white-space:nowrap;cursor:pointer;background:var(--ink-5);color:var(--text-primary);border:none;border-radius:999px;outline:none;justify-content:center;align-items:center;transition:background-color .15s ease-out,color .15s ease-out,transform .1s ease-out;display:inline-flex}._group_taxgk_1._base_taxgk_33 ._chip_taxgk_13{height:36px;padding:0 14px;font-size:.85rem}._group_taxgk_1._sm_taxgk_9 ._chip_taxgk_13{height:24px;padding:0 9px;font-size:.75rem}._chip_taxgk_13:hover:not(:disabled){background:var(--surface-muted)}._chip_taxgk_13:active:not(:disabled){background:var(--surface-muted);transform:scale(.95)}._chip_taxgk_13:focus-visible{outline:2px solid var(--brand-main);outline-offset:2px}._chip_taxgk_13._selected_taxgk_59{background:var(--brand-bg);color:var(--brand-main)}._chip_taxgk_13._selected_taxgk_59:hover:not(:disabled){background:var(--brand-main-20)}._chip_taxgk_13._selected_taxgk_59:active:not(:disabled){background:var(--brand-main-30)}._chip_taxgk_13:disabled{background:var(--disabled-bg);color:var(--disabled-text);cursor:not-allowed}._group_16vyf_1{flex-direction:column;gap:0;display:inline-flex}._groupLabel_16vyf_7{margin-bottom:6px}._label_10zsm_1{font-size:.85rem;font-weight:var(--font-weight-medium);color:var(--text-primary);padding-left:4px}._toolbar_1s82l_1{background:var(--card-surface);box-shadow:inset 0 0 0 1px var(--border), 0 1px 2px #1018200a, 0 2px 8px #1018200f;border-radius:16px;justify-content:space-between;align-items:center;gap:16px;padding:0 8px;display:flex}._searchWrap_1s82l_14{flex:1;min-width:0;position:relative}._searchWrap_1s82l_14:after{content:"";background:var(--brand-main);opacity:0;pointer-events:none;height:2px;position:absolute;bottom:0;left:36px;right:0}._searchWrap_1s82l_14:focus-within:after{opacity:1}._searchIcon_1s82l_33{width:16px;height:16px;color:var(--text-tertiary);pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-53%)}._searchIcon_1s82l_33 svg{width:100%;height:100%}._search_1s82l_14{box-sizing:border-box;width:100%;color:var(--text-primary);box-shadow:inset -1px 0 0 var(--border);background:0 0;border:none;padding:16px 52px 16px 36px;font-family:inherit;font-size:1rem}._search_1s82l_14:focus{outline:none}._searchShortcut_1s82l_61{background:var(--bg);color:var(--text-tertiary);font-size:.75rem;font-weight:var(--font-weight-semibold);letter-spacing:.02em;pointer-events:none;border-radius:6px;justify-content:center;align-items:center;padding:2px 6px;display:flex;position:absolute;top:50%;right:8px;transform:translateY(-50%)}._controls_1s82l_78{flex:none;align-items:center;display:flex}._checkbox_v0tpk_1{cursor:pointer;align-items:center;gap:8px;padding:8px 4px;display:inline-flex}._control_v0tpk_8{flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex;position:relative}._labelText_v0tpk_17{color:var(--text-primary);font-size:.85rem;transition:color .2s ease-out}._checkbox_v0tpk_1:hover ._labelText_v0tpk_17{color:var(--brand-main)}._input_v0tpk_25{opacity:0;cursor:pointer;margin:0;position:absolute;inset:0}._box_v0tpk_32{background:var(--ink-5);width:16px;height:16px;box-shadow:inset 0 0 0 1px var(--border);border-radius:6px;justify-content:center;align-items:center;transition:background-color .2s cubic-bezier(0,0,.2,1),box-shadow .2s cubic-bezier(0,0,.2,1),transform .1s cubic-bezier(0,0,.2,1);display:flex}._checkbox_v0tpk_1:hover ._box_v0tpk_32{box-shadow:0 0 0 1px var(--brand-main)}._input_v0tpk_25:focus-visible+._box_v0tpk_32{outline:2px solid var(--brand-main);outline-offset:2px}._input_v0tpk_25:active+._box_v0tpk_32{transform:scale(.88)}._input_v0tpk_25:checked+._box_v0tpk_32{background:var(--brand-main);box-shadow:inset 0 0 0 1px var(--brand-main)}._checkbox_v0tpk_1:hover ._input_v0tpk_25:checked+._box_v0tpk_32{box-shadow:0 0 0 1px var(--brand-main)}._icon_v0tpk_63{width:10px;height:10px;overflow:visible}._icon_v0tpk_63 polyline{fill:none;stroke:#fff;stroke-width:2.5px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:22;stroke-dashoffset:22px;transition:stroke-dashoffset .2s cubic-bezier(.4,0,.2,1)}._input_v0tpk_25:checked+._box_v0tpk_32 ._icon_v0tpk_63 polyline{stroke-dashoffset:0}._input_v0tpk_25:disabled{cursor:not-allowed}._checkbox_v0tpk_1:has(._input_v0tpk_25:disabled){cursor:not-allowed}._checkbox_v0tpk_1:has(._input_v0tpk_25:disabled) ._labelText_v0tpk_17{color:var(--disabled-text)}._checkbox_v0tpk_1:has(._input_v0tpk_25:disabled) ._box_v0tpk_32{background:var(--surface-muted);box-shadow:inset 0 0 0 1px var(--border);transform:none}._checkbox_v0tpk_1:has(._input_v0tpk_25:disabled) ._input_v0tpk_25:checked+._box_v0tpk_32{background:var(--disabled-bg);box-shadow:inset 0 0 0 1px var(--disabled-bg)}._radio_1s5sc_1{cursor:pointer;align-items:center;gap:8px;padding:8px 4px;display:inline-flex}._control_1s5sc_8{flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex;position:relative}._labelText_1s5sc_17{color:var(--text-primary);font-size:.85rem;transition:color .2s ease-out}._radio_1s5sc_1:hover ._labelText_1s5sc_17{color:var(--brand-main)}._input_1s5sc_25{opacity:0;cursor:pointer;margin:0;position:absolute;inset:0}._circle_1s5sc_32{background:var(--ink-5);width:16px;height:16px;box-shadow:inset 0 0 0 1px var(--border);border-radius:50%;justify-content:center;align-items:center;transition:background-color .2s cubic-bezier(0,0,.2,1),box-shadow .2s cubic-bezier(0,0,.2,1),transform .1s cubic-bezier(0,0,.2,1);display:flex}._radio_1s5sc_1:hover ._circle_1s5sc_32{box-shadow:0 0 0 1px var(--brand-main)}._input_1s5sc_25:focus-visible+._circle_1s5sc_32{outline:2px solid var(--brand-main);outline-offset:2px}._input_1s5sc_25:active+._circle_1s5sc_32{transform:scale(.88)}._input_1s5sc_25:checked+._circle_1s5sc_32{background:var(--brand-main);box-shadow:inset 0 0 0 1px var(--brand-main)}._radio_1s5sc_1:hover ._input_1s5sc_25:checked+._circle_1s5sc_32{box-shadow:0 0 0 1px var(--brand-main)}._dot_1s5sc_63{background:#fff;border-radius:50%;width:6px;height:6px;transition:transform .2s cubic-bezier(.4,0,.2,1);transform:scale(0)}._input_1s5sc_25:checked+._circle_1s5sc_32 ._dot_1s5sc_63{transform:scale(1)}._input_1s5sc_25:disabled{cursor:not-allowed}._radio_1s5sc_1:has(._input_1s5sc_25:disabled){cursor:not-allowed}._radio_1s5sc_1:has(._input_1s5sc_25:disabled) ._labelText_1s5sc_17{color:var(--disabled-text)}._radio_1s5sc_1:has(._input_1s5sc_25:disabled) ._circle_1s5sc_32{background:var(--surface-muted);box-shadow:inset 0 0 0 1px var(--border);transform:none}._radio_1s5sc_1:has(._input_1s5sc_25:disabled) ._input_1s5sc_25:checked+._circle_1s5sc_32{background:var(--disabled-bg);box-shadow:inset 0 0 0 1px var(--disabled-bg)}._switch_qbe6p_1{cursor:pointer;align-items:center;gap:8px;display:inline-flex}._switch_qbe6p_1:has(._input_qbe6p_7:disabled){cursor:not-allowed}._control_qbe6p_10{flex-shrink:0;align-items:center;display:inline-flex;position:relative}._input_qbe6p_7{opacity:0;cursor:pointer;margin:0;position:absolute;inset:0}._input_qbe6p_7:disabled{cursor:not-allowed}._track_qbe6p_26{background:var(--ink-5);width:100%;height:100%;box-shadow:inset 0 0 0 1px var(--border);border-radius:999px;transition:background-color .2s cubic-bezier(0,0,.2,1),box-shadow .2s cubic-bezier(0,0,.2,1);position:relative}._switch_qbe6p_1:hover ._track_qbe6p_26{box-shadow:inset 0 0 0 1px var(--brand-main)}._input_qbe6p_7:focus-visible+._track_qbe6p_26{outline:2px solid var(--brand-main);outline-offset:2px}._input_qbe6p_7:checked+._track_qbe6p_26{background:var(--brand-main);box-shadow:inset 0 0 0 1px var(--brand-main)}._input_qbe6p_7:disabled+._track_qbe6p_26{background:var(--surface-muted);box-shadow:inset 0 0 0 1px var(--border)}._thumb_qbe6p_52{background:#fff;border-radius:50%;transition:transform .2s cubic-bezier(.4,0,.2,1);position:absolute;top:50%;left:2px;transform:translateY(-50%)}._input_qbe6p_7:checked+._track_qbe6p_26 ._thumb_qbe6p_52{transform:translateY(-50%) translateX(var(--switch-thumb-travel))}._sm_qbe6p_65{--switch-thumb-travel:14px;width:32px;height:18px}._sm_qbe6p_65 ._thumb_qbe6p_52{width:14px;height:14px}._base_qbe6p_74{--switch-thumb-travel:18px;width:40px;height:22px}._base_qbe6p_74 ._thumb_qbe6p_52{width:18px;height:18px}._labelText_qbe6p_84{color:var(--text-primary);font-size:.85rem;transition:color .2s ease-out}._switch_qbe6p_1:hover ._labelText_qbe6p_84{color:var(--brand-main)}._switch_qbe6p_1:has(._input_qbe6p_7:disabled) ._labelText_qbe6p_84{color:var(--disabled-text)}._field_p41tk_1{flex-direction:column;gap:6px;display:flex}._inputWrap_p41tk_6{background:var(--card-surface);box-shadow:inset 0 0 0 1px var(--border-input);align-items:center;transition:box-shadow .2s ease-out;display:flex;position:relative}._inputWrap_p41tk_6:focus-within{box-shadow:inset 0 0 0 0 var(--border-input), 0 0 0 2px var(--brand-main)}._errorWrap_p41tk_19,._errorWrap_p41tk_19:focus-within{box-shadow:inset 0 0 0 1px var(--danger-text)}._inputWrap_p41tk_6:has(._input_p41tk_6:disabled){background:var(--surface-muted)}._toolbar_p41tk_27{box-shadow:none;background:0 0}._toolbar_p41tk_27:after{content:"";background:var(--brand-main);opacity:0;height:2px;transition:opacity .2s ease-out;position:absolute;bottom:0;left:0;right:0}._toolbar_p41tk_27:focus-within{box-shadow:none}._toolbar_p41tk_27:focus-within:after{opacity:1}._toolbar_p41tk_27._errorWrap_p41tk_19,._toolbar_p41tk_27._errorWrap_p41tk_19:focus-within{box-shadow:none}._toolbar_p41tk_27._errorWrap_p41tk_19:after{background:var(--danger-text);opacity:1}._sm_p41tk_57{height:var(--control-height-sm);border-radius:var(--radius-sm)}._sm_p41tk_57 ._input_p41tk_6{padding:0 12px;font-size:.9rem}._base_p41tk_65{height:var(--control-height-base);border-radius:var(--radius-base)}._base_p41tk_65 ._input_p41tk_6{padding:0 14px;font-size:.9rem}._inputWrap_p41tk_6:has(._icon_p41tk_73) ._input_p41tk_6{padding-left:8px}._icon_p41tk_73{width:16px;height:16px;color:var(--text-tertiary);flex-shrink:0;justify-content:center;align-items:center;margin-left:12px;display:flex}._icon_p41tk_73 svg{width:100%;height:100%}._input_p41tk_6{box-sizing:border-box;min-width:0;color:var(--text-primary);font-family:inherit;font-weight:var(--font-weight-regular);background:0 0;border:none;flex:1}._input_p41tk_6:focus{outline:none}._input_p41tk_6::placeholder{color:var(--text-tertiary)}._input_p41tk_6:disabled{color:var(--disabled-text);cursor:not-allowed}._helperText_p41tk_111{color:var(--text-tertiary);padding-left:8px;font-size:.78rem}._errorText_p41tk_116{color:var(--danger-text);font-size:.78rem}._trailing_p41tk_120{width:32px;height:32px;color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;margin-right:6px;padding:0;transition:color .15s ease-out,background .15s ease-out;display:flex}._trailing_p41tk_120 svg{width:16px;height:16px}._trailing_p41tk_120:hover:not(:disabled){color:var(--brand-main);background:var(--brand-main-5)}._trailing_p41tk_120:focus-visible{outline:2px solid var(--brand-main);outline-offset:-2px}._trailing_p41tk_120:disabled{cursor:not-allowed}._pickerInput_p41tk_151{cursor:pointer;caret-color:#0000}._pickerInput_p41tk_151:disabled{cursor:not-allowed}._field_tr8ir_1{flex-direction:column;gap:6px;display:flex}._inputWrap_tr8ir_6{background:var(--card-surface);box-shadow:inset 0 0 0 1px var(--border-input);align-items:center;transition:box-shadow .2s ease-out;display:flex;position:relative}._inputWrap_tr8ir_6:focus-within{box-shadow:inset 0 0 0 0 var(--border-input), 0 0 0 2px var(--brand-main)}._errorWrap_tr8ir_19,._errorWrap_tr8ir_19:focus-within{box-shadow:inset 0 0 0 1px var(--danger-text)}._inputWrap_tr8ir_6:has(._input_tr8ir_6:disabled){background:var(--surface-muted)}._sm_tr8ir_27{height:var(--control-height-sm);border-radius:var(--radius-sm)}._sm_tr8ir_27 ._input_tr8ir_6{padding:0 8px;font-size:.85rem}._base_tr8ir_35{height:var(--control-height-base);border-radius:var(--radius-base)}._base_tr8ir_35 ._input_tr8ir_6{padding:0 10px;font-size:.9rem}._inputWrap_tr8ir_6:has(._prefix_tr8ir_43) ._input_tr8ir_6{padding-left:4px}._inputWrap_tr8ir_6:has(._suffix_tr8ir_46) ._input_tr8ir_6{padding-right:4px}._prefix_tr8ir_43,._suffix_tr8ir_46{color:var(--text-tertiary);white-space:nowrap;flex-shrink:0;align-items:center;font-size:.78rem;display:flex}._prefix_tr8ir_43{margin-left:10px}._suffix_tr8ir_46{margin-right:10px}._input_tr8ir_6{box-sizing:border-box;min-width:0;color:var(--text-primary);font-family:inherit;font-weight:var(--font-weight-regular);font-variant-numeric:tabular-nums;appearance:textfield;background:0 0;border:none;flex:1}._input_tr8ir_6::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}._input_tr8ir_6::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}._input_tr8ir_6:focus{outline:none}._input_tr8ir_6::placeholder{color:var(--text-tertiary)}._input_tr8ir_6:disabled{color:var(--disabled-text);cursor:not-allowed}._helperText_tr8ir_94{color:var(--text-tertiary);padding-left:8px;font-size:.78rem}._errorText_tr8ir_99{color:var(--danger-text);font-size:.78rem}._menu_471l2_1{box-sizing:border-box;background:var(--card-surface);width:fit-content;min-width:180px;box-shadow:inset 0 0 0 1px var(--border), 0 8px 24px #0000001f;border-radius:12px;flex-direction:column;gap:2px;padding:4px;display:flex}._divider_471l2_15{background:var(--border);height:1px;margin:4px 6px}._item_nrbhu_1{width:100%;min-height:var(--control-height-sm);box-sizing:border-box;color:var(--text-primary);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:8px 12px;font-family:inherit;font-size:.9rem;transition:background .15s ease-out,color .15s ease-out;display:flex}._item_nrbhu_1:hover:not(:disabled){background:var(--brand-bg);color:var(--brand-dark)}._item_nrbhu_1:hover:not(:disabled) ._icon_nrbhu_25,._item_nrbhu_1:hover:not(:disabled) ._check_nrbhu_26{color:var(--brand-dark)}._item_nrbhu_1:active:not(:disabled){background:var(--brand-main-20)}._item_nrbhu_1:focus-visible{outline:2px solid var(--brand-main);outline-offset:-2px}._item_nrbhu_1:disabled{color:var(--disabled-text);cursor:not-allowed}._icon_nrbhu_25{width:16px;height:16px;color:var(--text-tertiary);flex-shrink:0;justify-content:center;align-items:center;margin-left:-2px;display:flex}._icon_nrbhu_25 svg{width:100%;height:100%}._label_nrbhu_54{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}._trailing_nrbhu_61{color:var(--text-tertiary);flex-shrink:0;margin-right:-2px;font-size:.8rem}._selected_nrbhu_67{color:var(--text-primary);font-weight:var(--font-weight-medium)}._selected_nrbhu_67 ._icon_nrbhu_25{color:var(--text-primary)}._check_nrbhu_26{width:16px;height:16px;color:var(--text-primary);flex-shrink:0;justify-content:center;align-items:center;margin-left:8px;display:flex}._check_nrbhu_26 svg{width:100%;height:100%}._destructive_nrbhu_88,._destructive_nrbhu_88 ._icon_nrbhu_25{color:var(--danger-text)}._destructive_nrbhu_88:hover:not(:disabled){background:var(--danger-bg);color:var(--danger-text)}._destructive_nrbhu_88:hover:not(:disabled) ._icon_nrbhu_25{color:var(--danger-text)}._field_1xfc4_1{flex-direction:column;gap:6px;display:flex;position:relative}._trigger_1xfc4_7{box-sizing:border-box;background:var(--card-surface);width:100%;box-shadow:inset 0 0 0 1px var(--border-input);color:var(--text-primary);cursor:pointer;border:none;align-items:center;font-family:inherit;transition:box-shadow .2s ease-out;display:flex}._trigger_1xfc4_7:focus-visible{box-shadow:inset 0 0 0 0 var(--border-input), 0 0 0 2px var(--brand-main)}._errorWrap_1xfc4_25{box-shadow:inset 0 0 0 1px var(--danger-text)}._trigger_1xfc4_7:disabled{background:var(--surface-muted);color:var(--disabled-text);cursor:not-allowed}._sm_1xfc4_34{border-radius:var(--radius-sm)}._sm_1xfc4_34._trigger_1xfc4_7{height:var(--control-height-sm);padding:0 12px;font-size:.9rem}._base_1xfc4_42{border-radius:var(--radius-base)}._base_1xfc4_42._trigger_1xfc4_7{height:var(--control-height-base);padding:0 14px;font-size:.9rem}._icon_1xfc4_51{width:16px;height:16px;color:var(--text-tertiary);flex-shrink:0;justify-content:center;align-items:center;margin-right:8px;display:flex}._icon_1xfc4_51 svg{width:100%;height:100%}._value_1xfc4_65{text-align:left;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}._placeholder_1xfc4_73{color:var(--text-tertiary)}._chevron_1xfc4_76{width:16px;height:16px;color:var(--text-tertiary);flex-shrink:0;justify-content:center;align-items:center;margin-left:8px;transition:transform .15s ease-out;display:flex}._chevron_1xfc4_76 svg{width:100%;height:100%}._chevronOpen_1xfc4_91{transform:rotate(180deg)}._menuWrap_1xfc4_95{z-index:10;position:absolute;top:calc(100% + 4px);left:0;right:0}._menuWrapUp_1xfc4_102{top:auto;bottom:calc(100% + 4px)}._list_1xfc4_106{flex-direction:column;gap:2px;max-height:320px;display:flex;overflow-y:auto}._search_1xfc4_113{width:100%;height:var(--control-height-sm);box-sizing:border-box;background:var(--card-surface);box-shadow:inset 0 0 0 1px var(--border-input);color:var(--text-primary);border:none;border-radius:8px;outline:none;margin-bottom:4px;padding:0 10px;font-family:inherit;font-size:.9rem}._search_1xfc4_113:focus{box-shadow:inset 0 0 0 1px var(--brand-main)}._noResults_1xfc4_131{color:var(--text-tertiary);padding:8px 12px;font-size:.9rem}._helperText_1xfc4_136{color:var(--text-tertiary);padding-left:8px;font-size:.78rem}._errorText_1xfc4_141{color:var(--danger-text);font-size:.78rem}._highlight_1anli_1{background:var(--brand-bg);color:var(--brand-dark);border-radius:3px;padding:0 1px}._group_17bb8_1{position:relative}._btn_17bb8_4{color:var(--text-primary);cursor:pointer;background:0 0;border:none;border-radius:12px;align-items:center;gap:6px;padding:12px;font-family:inherit;font-size:1rem;transition:background .2s ease-out,box-shadow .2s ease-out,transform .2s ease-out;display:flex}._btn_17bb8_4:hover{background:#0a0a0b0a}._btn_17bb8_4:active{background:var(--brand-bg);transform:scale(.95);box-shadow:inset 0 2px 1px #008cd840}._caret_17bb8_29{color:var(--text-tertiary);align-items:center;display:flex}._caret_17bb8_29 svg{width:14px;height:14px}._label_17bb8_38{color:var(--text-secondary)}._badge_17bb8_41{background:var(--brand-main,#0a84d8);color:#fff;min-width:16px;height:16px;font-size:.65rem;font-weight:var(--font-weight-semibold);text-align:center;border-radius:999px;padding:0 4px;line-height:16px;position:absolute;top:2px;right:2px}._value_17bb8_56{color:var(--text-primary);font-weight:var(--font-weight-medium)}._panel_17bb8_60{width:fit-content;min-width:220px;max-height:280px;box-shadow:inset 0 0 0 1px var(--border), 0 8px 24px #0000001f;z-index:50;background:#fff;border-radius:12px;display:none;position:absolute;top:calc(100% + 6px);left:0;overflow-y:auto}._panel_17bb8_60._open_17bb8_76{display:block}._panelRight_17bb8_79{left:auto;right:0}._panelWide_17bb8_83{min-width:260px;padding-bottom:4px}._sectionHeader_17bb8_87{justify-content:space-between;align-items:center;gap:8px;padding:12px 14px 4px;display:flex}._sectionLabel_17bb8_94{font-size:.75rem;font-weight:var(--font-weight-semibold);color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.02em}._allToggle_17bb8_101{font-family:inherit;font-size:.75rem;font-weight:var(--font-weight-semibold);color:var(--brand-main,#0a84d8);cursor:pointer;background:0 0;border:none;padding:0}._allToggle_17bb8_101:hover{text-decoration:underline}._divider_17bb8_114{background:var(--border);height:1px;margin:4px 0}._option_17bb8_119{cursor:pointer;border-radius:8px;align-items:center;gap:8px;padding:8px;font-size:1rem;display:flex}._option_17bb8_119:hover{background:var(--bg)}._search_17bb8_131{box-sizing:border-box;width:calc(100% - 16px);box-shadow:inset 0 0 0 1px var(--border-input);border:none;border-radius:8px;margin:8px 8px 0;padding:8px 12px;font-family:inherit;font-size:1rem}._search_17bb8_131:focus{box-shadow:inset 0 0 0 1px var(--brand-main);outline:none}._optionsList_17bb8_147{padding:4px}._empty_17bb8_150{color:var(--text-tertiary);padding:7px 8px;font-size:.85rem}._line_qm5u2_1,._box_qm5u2_2{align-items:center;gap:4px;display:inline-flex;position:relative}._indicator_qm5u2_9{pointer-events:none;transition:translate .25s cubic-bezier(.39,.575,.565,1),width .25s,scale .125s cubic-bezier(.39,.575,.565,1);position:absolute;left:0}._indicator_qm5u2_9._settling_qm5u2_17{transition:scale .1s linear}._indicatorLine_qm5u2_21{background:var(--brand-main);height:2px;bottom:0}._indicatorBox_qm5u2_27{background:var(--card-surface);box-shadow:0 0 1px .5px var(--border);border-radius:8px;top:4px;bottom:4px}._tab_qm5u2_35{isolation:isolate;font-family:inherit;font-weight:var(--font-weight-regular);cursor:pointer;white-space:nowrap;border:none;border-radius:8px 8px 0 0;align-items:center;gap:6px;transition:color .15s ease-out,background .15s ease-out,box-shadow .15s ease-out;display:inline-flex;position:relative;overflow:hidden}._tab_qm5u2_35:before{content:"";aspect-ratio:1;z-index:-1;pointer-events:none;background:rgba(var(--brand-main-rgb), .08);border-radius:50%;width:40%;transition:transform .3s cubic-bezier(.39,.575,.565,1);position:absolute;bottom:0;left:50%;transform:translate(-50%,100%)scale(1)}._tab_qm5u2_35:hover:not(:disabled):before{transform:translate(-50%,15%)scale(4)}._tab_qm5u2_35:active:not(:disabled):before{background:rgba(var(--brand-main-rgb), .28)}._tab_qm5u2_35:disabled{color:var(--disabled-text);cursor:not-allowed}._tab_qm5u2_35:disabled:before,._tab_qm5u2_35._selected_qm5u2_80:hover:before{display:none}._tab_qm5u2_35:focus-visible{outline:2px solid var(--brand-main);outline-offset:2px}._icon_qm5u2_89{flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;margin-left:-4px;display:flex}._icon_qm5u2_89 svg{width:100%;height:100%}._line_qm5u2_1{box-shadow:inset 0 -1px 0 0 var(--border)}._line_qm5u2_1 ._tab_qm5u2_35{color:var(--text-secondary);background:0 0;padding:12px 8px;font-size:1rem}._line_qm5u2_1 ._tab_qm5u2_35:hover:not(:disabled){color:var(--brand-main)}._line_qm5u2_1 ._tab_qm5u2_35._selected_qm5u2_80{color:var(--text-primary);font-weight:var(--font-weight-medium)}._box_qm5u2_2{box-sizing:border-box;height:var(--control-height-base);background:var(--ink-5);border-radius:var(--radius-base);gap:4px;padding:4px;box-shadow:inset 0 0 .5px 1px #e3e3e3}._box_qm5u2_2 ._tab_qm5u2_35{height:calc(var(--control-height-base) - 8px);color:var(--text-secondary);background:0 0;border-radius:8px;padding:0 14px;font-size:.9rem}._box_qm5u2_2 ._tab_qm5u2_35:hover:not(:disabled){color:var(--brand-main)}._box_qm5u2_2 ._tab_qm5u2_35._selected_qm5u2_80{color:var(--text-primary);font-weight:var(--font-weight-medium)}._box_qm5u2_2._sm_qm5u2_152{height:var(--control-height-sm);border-radius:var(--radius-sm)}._box_qm5u2_2._sm_qm5u2_152 ._tab_qm5u2_35{height:calc(var(--control-height-sm) - 8px);border-radius:6px;padding:0 14px}._box_qm5u2_2._sm_qm5u2_152 ._indicatorBox_qm5u2_27{border-radius:6px}:root{--brand-main:#0090d9;--brand-dark:#007ebd;--brand-bg:#e0f5ff;--brand-main-rgb:0, 144, 217;--brand-main-5:rgba(var(--brand-main-rgb), .05);--brand-main-10:rgba(var(--brand-main-rgb), .1);--brand-main-20:rgba(var(--brand-main-rgb), .2);--brand-main-30:rgba(var(--brand-main-rgb), .3);--brand-main-50:rgba(var(--brand-main-rgb), .5);--brand-main-75:rgba(var(--brand-main-rgb), .75);--text-primary:#090b0b;--text-secondary:#5c5f61;--text-tertiary:#666e73;--bg:#f7f7f7;--card-surface:#fff;--surface-sunken:#f8f9fa;--surface-muted:#e5e7e9;--border:#e0e0e0;--border-input:#e0e0e0;--ink-rgb:16, 24, 32;--ink-5:rgba(var(--ink-rgb), .05);--danger-bg:#fdeaea;--danger-text:#c8281c;--danger-text-dark:#b91c1c;--danger-rgb:200, 40, 28;--success-bg:#e3f6ea;--success-text:#27794a;--warning-bg:#fff1d6;--warning-text:#8f5d00;--disabled-bg:#c4c4c4;--disabled-text:#8a8a8a;--control-height-sm:36px;--control-height-base:44px;--radius-sm:10px;--radius-base:12px;--font-family-base:"Inter", sans-serif;--font-size-sm:.75rem;--font-size-base:.875rem;--font-size-lg:1rem;--font-weight-regular:450;--font-weight-medium:550;--font-weight-semibold:650;--line-height-base:1.5;--line-height-tight:1.25}.text-base{font-family:var(--font-family-base);font-size:var(--font-size-base);font-weight:var(--font-weight-regular);line-height:var(--line-height-base)}.text-medium{font-weight:var(--font-weight-medium)}.text-sm{font-size:var(--font-size-sm)}.text-lg{font-size:var(--font-size-lg)}.text-2-line{line-height:var(--line-height-tight)}
1
+ ._primary_1fqtv_1,._secondary_1fqtv_2,._tertiary_1fqtv_3,._dangerous_1fqtv_4{isolation:isolate;font-family:inherit;font-weight:var(--font-weight-regular);letter-spacing:.01em;cursor:pointer;border:none;justify-content:center;align-items:center;gap:8px;transition:color .2s,transform .2s ease-out;display:inline-flex;position:relative;overflow:hidden}._primary_1fqtv_1:focus-visible,._secondary_1fqtv_2:focus-visible,._tertiary_1fqtv_3:focus-visible,._dangerous_1fqtv_4:focus-visible{outline:2px solid var(--brand-main);outline-offset:2px}._primary_1fqtv_1:active:not(:disabled),._secondary_1fqtv_2:active:not(:disabled),._tertiary_1fqtv_3:active:not(:disabled),._dangerous_1fqtv_4:active:not(:disabled){transform:scale(.95)}._sm_1fqtv_35{height:var(--control-height-sm);border-radius:var(--radius-sm);padding:0 12px;font-size:.9rem}._base_1fqtv_41{height:var(--control-height-base);border-radius:var(--radius-base);padding:0 16px;font-size:.9rem}._icon_1fqtv_47{flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;display:flex}._icon_1fqtv_47:first-child{margin-left:-4px}._icon_1fqtv_47:last-child{margin-right:-4px}._icon_1fqtv_47 svg{width:100%;height:100%}._iconOnly_1fqtv_66{box-sizing:border-box;padding:0}._iconOnly_1fqtv_66._sm_1fqtv_35{width:var(--control-height-sm)}._iconOnly_1fqtv_66._base_1fqtv_41{width:var(--control-height-base)}._fullWidth_1fqtv_76{width:100%}._primary_1fqtv_1:before,._secondary_1fqtv_2:before,._tertiary_1fqtv_3:before,._dangerous_1fqtv_4:before{content:"";aspect-ratio:1;z-index:-1;pointer-events:none;border-radius:50%;width:24%;transition:transform .3s cubic-bezier(.39,.575,.565,1);position:absolute;bottom:0;left:50%;transform:translate(-50%,100%)scale(1)}._primary_1fqtv_1:hover:before,._secondary_1fqtv_2:hover:before,._tertiary_1fqtv_3:hover:before,._dangerous_1fqtv_4:hover:before{transform:translate(-50%,15%)scale(8)}._primary_1fqtv_1{background:var(--brand-dark);color:#fff;font-weight:var(--font-weight-regular);letter-spacing:.02em}._primary_1fqtv_1:before{background:#ffffff14}._primary_1fqtv_1:active:not(:disabled):before{background:#00000014}._secondary_1fqtv_2{background:var(--depth-5);color:var(--text-primary)}._secondary_1fqtv_2 ._icon_1fqtv_47{color:var(--text-secondary)}._secondary_1fqtv_2:before{background:rgba(var(--brand-main-rgb), .08)}._secondary_1fqtv_2:active:not(:disabled):before{background:rgba(var(--brand-main-rgb), .28)}._secondary_1fqtv_2:hover ._icon_1fqtv_47,._secondary_1fqtv_2:hover{color:var(--brand-main)}._tertiary_1fqtv_3{color:var(--text-secondary);background:0 0}._tertiary_1fqtv_3:before{background:rgba(var(--brand-main-rgb), .16)}._tertiary_1fqtv_3:active:not(:disabled):before{background:rgba(var(--brand-main-rgb), .28)}._tertiary_1fqtv_3:hover,._tertiary_1fqtv_3:active:not(:disabled){background:var(--bg)}._tertiary_1fqtv_3:hover{color:var(--brand-main)}._dangerous_1fqtv_4{background:var(--danger-bg);color:var(--danger-text-dark)}._dangerous_1fqtv_4:before{background:rgba(var(--danger-rgb), .16)}._dangerous_1fqtv_4:active:not(:disabled):before{background:rgba(var(--danger-rgb), .28)}._primary_1fqtv_1:disabled,._secondary_1fqtv_2:disabled,._tertiary_1fqtv_3:disabled,._dangerous_1fqtv_4:disabled{background:var(--disabled-bg);color:var(--disabled-text);cursor:not-allowed}._primary_1fqtv_1:disabled:hover,._secondary_1fqtv_2:disabled:hover,._tertiary_1fqtv_3:disabled:hover,._dangerous_1fqtv_4:disabled:hover{color:var(--disabled-text)}._primary_1fqtv_1:disabled:before,._secondary_1fqtv_2:disabled:before,._tertiary_1fqtv_3:disabled:before,._dangerous_1fqtv_4:disabled:before{display:none}._wrap_1spnu_1{flex:0 0 220px;width:220px;position:relative}._wrap_1spnu_1:hover{z-index:10}._fluid_1spnu_9{flex:none;width:100%}._backing_1spnu_14{background:var(--card-surface);height:10px;box-shadow:inset 0 0 0 1px var(--border);z-index:0;border-radius:0 0 14px 14px;position:absolute;bottom:-4px;left:6px;right:6px}._backing_1spnu_14._completed_1spnu_25{background:var(--success-bg);box-shadow:inset 0 0 0 1px #bfe3cc}._card_1spnu_30{z-index:1;box-sizing:border-box;background:var(--card-surface);cursor:default;border-radius:16px;width:100%;padding:12px 14px;transition:box-shadow .2s,transform .1s;position:relative;box-shadow:inset 0 0 0 1px #efefef,0 1px 2px #1018200a}._card_1spnu_30._interactive_1spnu_46{cursor:pointer}._card_1spnu_30._interactive_1spnu_46:active{transform:scale(.98,.95)}._card_1spnu_30._grabbable_1spnu_52{cursor:grab}._card_1spnu_30._grabbable_1spnu_52:active{cursor:grabbing}._card_1spnu_30._dragging_1spnu_58,._card_1spnu_30._dragging_1spnu_58:hover{box-shadow:inset 0 0 0 1px #efefef,0 1px 2px #1018200a}._card_1spnu_30._interactive_1spnu_46:hover{box-shadow:inset 0 0 0 1px #efefef, 0 0 0 2px var(--brand-main)}._card_1spnu_30._completed_1spnu_25{background:var(--success-bg);box-shadow:inset 0 0 0 1px #bfe3cc,0 1px 2px #1018200a,0 2px 8px #1018200f}._neutral_1h6kq_1,._pill_1h6kq_2,._accent_1h6kq_3,._success_1h6kq_4,._danger_1h6kq_5,._count_1h6kq_6{font-weight:var(--font-weight-medium);white-space:nowrap;align-items:center;display:inline-flex}._neutral_1h6kq_1{color:var(--text-tertiary);background:var(--depth-5);border-radius:6px;padding:2px 7px;font-size:.75rem}._pill_1h6kq_2{background:var(--card-surface);box-shadow:inset 0 0 0 1px var(--border);color:var(--text-tertiary);border-radius:999px;padding:3px 11px;font-size:.8rem}._accent_1h6kq_3{background:var(--brand-bg);color:var(--brand-dark);border-radius:999px;padding:3px 11px;font-size:.8rem}._success_1h6kq_4{background:var(--success-bg);color:var(--success-text);border-radius:999px;padding:3px 11px;font-size:.8rem}._danger_1h6kq_5{color:var(--danger-text);background:var(--danger-bg);border-radius:6px;padding:2px 7px;font-size:.75rem}._count_1h6kq_6{background:var(--brand-main);color:#fff;text-align:center;border-radius:999px;justify-content:center;min-width:16px;height:16px;padding:0 4px;font-size:.65rem;line-height:16px}._group_jl3nf_1{flex-wrap:wrap;align-items:center;gap:8px;margin-top:4px;display:inline-flex}._group_jl3nf_1._sm_jl3nf_9{gap:6px}._chip_jl3nf_13{appearance:none;font-family:inherit;font-weight:var(--font-weight-medium);white-space:nowrap;cursor:pointer;background:var(--depth-5);color:var(--text-primary);border:none;border-radius:999px;outline:none;justify-content:center;align-items:center;transition:background-color .15s ease-out,color .15s ease-out,transform .1s ease-out;display:inline-flex}._group_jl3nf_1._base_jl3nf_33 ._chip_jl3nf_13{height:36px;padding:0 14px;font-size:.85rem}._group_jl3nf_1._sm_jl3nf_9 ._chip_jl3nf_13{height:24px;padding:0 9px;font-size:.75rem}._chip_jl3nf_13:hover:not(:disabled){background:var(--surface-muted)}._chip_jl3nf_13:active:not(:disabled){background:var(--surface-muted);transform:scale(.95)}._chip_jl3nf_13:focus-visible{outline:2px solid var(--brand-main);outline-offset:2px}._chip_jl3nf_13._selected_jl3nf_59{background:var(--brand-bg);color:var(--brand-main)}._chip_jl3nf_13._selected_jl3nf_59:hover:not(:disabled){background:var(--brand-main-20)}._chip_jl3nf_13._selected_jl3nf_59:active:not(:disabled){background:var(--brand-main-30)}._chip_jl3nf_13:disabled{background:var(--disabled-bg);color:var(--disabled-text);cursor:not-allowed}._group_16vyf_1{flex-direction:column;gap:0;display:inline-flex}._groupLabel_16vyf_7{margin-bottom:6px}._label_10zsm_1{font-size:.85rem;font-weight:var(--font-weight-medium);color:var(--text-primary);padding-left:4px}._toolbar_1s82l_1{background:var(--card-surface);box-shadow:inset 0 0 0 1px var(--border), 0 1px 2px #1018200a, 0 2px 8px #1018200f;border-radius:16px;justify-content:space-between;align-items:center;gap:16px;padding:0 8px;display:flex}._searchWrap_1s82l_14{flex:1;min-width:0;position:relative}._searchWrap_1s82l_14:after{content:"";background:var(--brand-main);opacity:0;pointer-events:none;height:2px;position:absolute;bottom:0;left:36px;right:0}._searchWrap_1s82l_14:focus-within:after{opacity:1}._searchIcon_1s82l_33{width:16px;height:16px;color:var(--text-tertiary);pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-53%)}._searchIcon_1s82l_33 svg{width:100%;height:100%}._search_1s82l_14{box-sizing:border-box;width:100%;color:var(--text-primary);box-shadow:inset -1px 0 0 var(--border);background:0 0;border:none;padding:16px 52px 16px 36px;font-family:inherit;font-size:1rem}._search_1s82l_14:focus{outline:none}._searchShortcut_1s82l_61{background:var(--bg);color:var(--text-tertiary);font-size:.75rem;font-weight:var(--font-weight-semibold);letter-spacing:.02em;pointer-events:none;border-radius:6px;justify-content:center;align-items:center;padding:2px 6px;display:flex;position:absolute;top:50%;right:8px;transform:translateY(-50%)}._controls_1s82l_78{flex:none;align-items:center;display:flex}._checkbox_54v1q_1{cursor:pointer;align-items:center;gap:8px;padding:8px 4px;display:inline-flex}._control_54v1q_8{flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex;position:relative}._labelText_54v1q_17{color:var(--text-primary);font-size:.85rem;transition:color .2s ease-out}._checkbox_54v1q_1:hover ._labelText_54v1q_17{color:var(--brand-main)}._input_54v1q_25{opacity:0;cursor:pointer;margin:0;position:absolute;inset:0}._box_54v1q_32{background:var(--depth-5);width:16px;height:16px;box-shadow:inset 0 0 0 1px var(--border);border-radius:6px;justify-content:center;align-items:center;transition:background-color .2s cubic-bezier(0,0,.2,1),box-shadow .2s cubic-bezier(0,0,.2,1),transform .1s cubic-bezier(0,0,.2,1);display:flex}._checkbox_54v1q_1:hover ._box_54v1q_32{box-shadow:0 0 0 1px var(--brand-main)}._input_54v1q_25:focus-visible+._box_54v1q_32{outline:2px solid var(--brand-main);outline-offset:2px}._input_54v1q_25:active+._box_54v1q_32{transform:scale(.88)}._input_54v1q_25:checked+._box_54v1q_32{background:var(--brand-main);box-shadow:inset 0 0 0 1px var(--brand-main)}._checkbox_54v1q_1:hover ._input_54v1q_25:checked+._box_54v1q_32{box-shadow:0 0 0 1px var(--brand-main)}._icon_54v1q_63{width:10px;height:10px;overflow:visible}._icon_54v1q_63 polyline{fill:none;stroke:#fff;stroke-width:2.5px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:22;stroke-dashoffset:22px;transition:stroke-dashoffset .2s cubic-bezier(.4,0,.2,1)}._input_54v1q_25:checked+._box_54v1q_32 ._icon_54v1q_63 polyline{stroke-dashoffset:0}._input_54v1q_25:disabled{cursor:not-allowed}._checkbox_54v1q_1:has(._input_54v1q_25:disabled){cursor:not-allowed}._checkbox_54v1q_1:has(._input_54v1q_25:disabled) ._labelText_54v1q_17{color:var(--disabled-text)}._checkbox_54v1q_1:has(._input_54v1q_25:disabled) ._box_54v1q_32{background:var(--surface-muted);box-shadow:inset 0 0 0 1px var(--border);transform:none}._checkbox_54v1q_1:has(._input_54v1q_25:disabled) ._input_54v1q_25:checked+._box_54v1q_32{background:var(--disabled-bg);box-shadow:inset 0 0 0 1px var(--disabled-bg)}._radio_wj7kb_1{cursor:pointer;align-items:center;gap:8px;padding:8px 4px;display:inline-flex}._control_wj7kb_8{flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex;position:relative}._labelText_wj7kb_17{color:var(--text-primary);font-size:.85rem;transition:color .2s ease-out}._radio_wj7kb_1:hover ._labelText_wj7kb_17{color:var(--brand-main)}._input_wj7kb_25{opacity:0;cursor:pointer;margin:0;position:absolute;inset:0}._circle_wj7kb_32{background:var(--depth-5);width:16px;height:16px;box-shadow:inset 0 0 0 1px var(--border);border-radius:50%;justify-content:center;align-items:center;transition:background-color .2s cubic-bezier(0,0,.2,1),box-shadow .2s cubic-bezier(0,0,.2,1),transform .1s cubic-bezier(0,0,.2,1);display:flex}._radio_wj7kb_1:hover ._circle_wj7kb_32{box-shadow:0 0 0 1px var(--brand-main)}._input_wj7kb_25:focus-visible+._circle_wj7kb_32{outline:2px solid var(--brand-main);outline-offset:2px}._input_wj7kb_25:active+._circle_wj7kb_32{transform:scale(.88)}._input_wj7kb_25:checked+._circle_wj7kb_32{background:var(--brand-main);box-shadow:inset 0 0 0 1px var(--brand-main)}._radio_wj7kb_1:hover ._input_wj7kb_25:checked+._circle_wj7kb_32{box-shadow:0 0 0 1px var(--brand-main)}._dot_wj7kb_63{background:#fff;border-radius:50%;width:6px;height:6px;transition:transform .2s cubic-bezier(.4,0,.2,1);transform:scale(0)}._input_wj7kb_25:checked+._circle_wj7kb_32 ._dot_wj7kb_63{transform:scale(1)}._input_wj7kb_25:disabled{cursor:not-allowed}._radio_wj7kb_1:has(._input_wj7kb_25:disabled){cursor:not-allowed}._radio_wj7kb_1:has(._input_wj7kb_25:disabled) ._labelText_wj7kb_17{color:var(--disabled-text)}._radio_wj7kb_1:has(._input_wj7kb_25:disabled) ._circle_wj7kb_32{background:var(--surface-muted);box-shadow:inset 0 0 0 1px var(--border);transform:none}._radio_wj7kb_1:has(._input_wj7kb_25:disabled) ._input_wj7kb_25:checked+._circle_wj7kb_32{background:var(--disabled-bg);box-shadow:inset 0 0 0 1px var(--disabled-bg)}._switch_1uo9k_1{cursor:pointer;align-items:center;gap:8px;display:inline-flex}._switch_1uo9k_1:has(._input_1uo9k_7:disabled){cursor:not-allowed}._control_1uo9k_10{flex-shrink:0;align-items:center;display:inline-flex;position:relative}._input_1uo9k_7{opacity:0;cursor:pointer;margin:0;position:absolute;inset:0}._input_1uo9k_7:disabled{cursor:not-allowed}._track_1uo9k_26{background:var(--depth-5);width:100%;height:100%;box-shadow:inset 0 0 0 1px var(--border);border-radius:999px;transition:background-color .2s cubic-bezier(0,0,.2,1),box-shadow .2s cubic-bezier(0,0,.2,1);position:relative}._switch_1uo9k_1:hover ._track_1uo9k_26{box-shadow:inset 0 0 0 1px var(--brand-main)}._input_1uo9k_7:focus-visible+._track_1uo9k_26{outline:2px solid var(--brand-main);outline-offset:2px}._input_1uo9k_7:checked+._track_1uo9k_26{background:var(--brand-main);box-shadow:inset 0 0 0 1px var(--brand-main)}._input_1uo9k_7:disabled+._track_1uo9k_26{background:var(--surface-muted);box-shadow:inset 0 0 0 1px var(--border)}._thumb_1uo9k_52{background:#fff;border-radius:50%;transition:transform .2s cubic-bezier(.4,0,.2,1);position:absolute;top:50%;left:2px;transform:translateY(-50%)}._input_1uo9k_7:checked+._track_1uo9k_26 ._thumb_1uo9k_52{transform:translateY(-50%) translateX(var(--switch-thumb-travel))}._sm_1uo9k_65{--switch-thumb-travel:14px;width:32px;height:18px}._sm_1uo9k_65 ._thumb_1uo9k_52{width:14px;height:14px}._base_1uo9k_74{--switch-thumb-travel:18px;width:40px;height:22px}._base_1uo9k_74 ._thumb_1uo9k_52{width:18px;height:18px}._labelText_1uo9k_84{color:var(--text-primary);font-size:.85rem;transition:color .2s ease-out}._switch_1uo9k_1:hover ._labelText_1uo9k_84{color:var(--brand-main)}._switch_1uo9k_1:has(._input_1uo9k_7:disabled) ._labelText_1uo9k_84{color:var(--disabled-text)}._field_p41tk_1{flex-direction:column;gap:6px;display:flex}._inputWrap_p41tk_6{background:var(--card-surface);box-shadow:inset 0 0 0 1px var(--border-input);align-items:center;transition:box-shadow .2s ease-out;display:flex;position:relative}._inputWrap_p41tk_6:focus-within{box-shadow:inset 0 0 0 0 var(--border-input), 0 0 0 2px var(--brand-main)}._errorWrap_p41tk_19,._errorWrap_p41tk_19:focus-within{box-shadow:inset 0 0 0 1px var(--danger-text)}._inputWrap_p41tk_6:has(._input_p41tk_6:disabled){background:var(--surface-muted)}._toolbar_p41tk_27{box-shadow:none;background:0 0}._toolbar_p41tk_27:after{content:"";background:var(--brand-main);opacity:0;height:2px;transition:opacity .2s ease-out;position:absolute;bottom:0;left:0;right:0}._toolbar_p41tk_27:focus-within{box-shadow:none}._toolbar_p41tk_27:focus-within:after{opacity:1}._toolbar_p41tk_27._errorWrap_p41tk_19,._toolbar_p41tk_27._errorWrap_p41tk_19:focus-within{box-shadow:none}._toolbar_p41tk_27._errorWrap_p41tk_19:after{background:var(--danger-text);opacity:1}._sm_p41tk_57{height:var(--control-height-sm);border-radius:var(--radius-sm)}._sm_p41tk_57 ._input_p41tk_6{padding:0 12px;font-size:.9rem}._base_p41tk_65{height:var(--control-height-base);border-radius:var(--radius-base)}._base_p41tk_65 ._input_p41tk_6{padding:0 14px;font-size:.9rem}._inputWrap_p41tk_6:has(._icon_p41tk_73) ._input_p41tk_6{padding-left:8px}._icon_p41tk_73{width:16px;height:16px;color:var(--text-tertiary);flex-shrink:0;justify-content:center;align-items:center;margin-left:12px;display:flex}._icon_p41tk_73 svg{width:100%;height:100%}._input_p41tk_6{box-sizing:border-box;min-width:0;color:var(--text-primary);font-family:inherit;font-weight:var(--font-weight-regular);background:0 0;border:none;flex:1}._input_p41tk_6:focus{outline:none}._input_p41tk_6::placeholder{color:var(--text-tertiary)}._input_p41tk_6:disabled{color:var(--disabled-text);cursor:not-allowed}._helperText_p41tk_111{color:var(--text-tertiary);padding-left:8px;font-size:.78rem}._errorText_p41tk_116{color:var(--danger-text);font-size:.78rem}._trailing_p41tk_120{width:32px;height:32px;color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;margin-right:6px;padding:0;transition:color .15s ease-out,background .15s ease-out;display:flex}._trailing_p41tk_120 svg{width:16px;height:16px}._trailing_p41tk_120:hover:not(:disabled){color:var(--brand-main);background:var(--brand-main-5)}._trailing_p41tk_120:focus-visible{outline:2px solid var(--brand-main);outline-offset:-2px}._trailing_p41tk_120:disabled{cursor:not-allowed}._pickerInput_p41tk_151{cursor:pointer;caret-color:#0000}._pickerInput_p41tk_151:disabled{cursor:not-allowed}._field_tr8ir_1{flex-direction:column;gap:6px;display:flex}._inputWrap_tr8ir_6{background:var(--card-surface);box-shadow:inset 0 0 0 1px var(--border-input);align-items:center;transition:box-shadow .2s ease-out;display:flex;position:relative}._inputWrap_tr8ir_6:focus-within{box-shadow:inset 0 0 0 0 var(--border-input), 0 0 0 2px var(--brand-main)}._errorWrap_tr8ir_19,._errorWrap_tr8ir_19:focus-within{box-shadow:inset 0 0 0 1px var(--danger-text)}._inputWrap_tr8ir_6:has(._input_tr8ir_6:disabled){background:var(--surface-muted)}._sm_tr8ir_27{height:var(--control-height-sm);border-radius:var(--radius-sm)}._sm_tr8ir_27 ._input_tr8ir_6{padding:0 8px;font-size:.85rem}._base_tr8ir_35{height:var(--control-height-base);border-radius:var(--radius-base)}._base_tr8ir_35 ._input_tr8ir_6{padding:0 10px;font-size:.9rem}._inputWrap_tr8ir_6:has(._prefix_tr8ir_43) ._input_tr8ir_6{padding-left:4px}._inputWrap_tr8ir_6:has(._suffix_tr8ir_46) ._input_tr8ir_6{padding-right:4px}._prefix_tr8ir_43,._suffix_tr8ir_46{color:var(--text-tertiary);white-space:nowrap;flex-shrink:0;align-items:center;font-size:.78rem;display:flex}._prefix_tr8ir_43{margin-left:10px}._suffix_tr8ir_46{margin-right:10px}._input_tr8ir_6{box-sizing:border-box;min-width:0;color:var(--text-primary);font-family:inherit;font-weight:var(--font-weight-regular);font-variant-numeric:tabular-nums;appearance:textfield;background:0 0;border:none;flex:1}._input_tr8ir_6::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}._input_tr8ir_6::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}._input_tr8ir_6:focus{outline:none}._input_tr8ir_6::placeholder{color:var(--text-tertiary)}._input_tr8ir_6:disabled{color:var(--disabled-text);cursor:not-allowed}._helperText_tr8ir_94{color:var(--text-tertiary);padding-left:8px;font-size:.78rem}._errorText_tr8ir_99{color:var(--danger-text);font-size:.78rem}._menu_471l2_1{box-sizing:border-box;background:var(--card-surface);width:fit-content;min-width:180px;box-shadow:inset 0 0 0 1px var(--border), 0 8px 24px #0000001f;border-radius:12px;flex-direction:column;gap:2px;padding:4px;display:flex}._divider_471l2_15{background:var(--border);height:1px;margin:4px 6px}._item_manci_1{width:100%;min-height:var(--control-height-sm);box-sizing:border-box;color:var(--text-primary);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:8px 12px;font-family:inherit;font-size:.9rem;transition:background .15s ease-out,color .15s ease-out;display:flex}._item_manci_1:hover:not(:disabled){background:var(--brand-bg);color:var(--brand-dark)}._item_manci_1:hover:not(:disabled) ._icon_manci_25,._item_manci_1:hover:not(:disabled) ._check_manci_26{color:var(--brand-dark)}._item_manci_1:active:not(:disabled){background:var(--brand-main-20)}._item_manci_1:focus-visible{outline:2px solid var(--brand-main);outline-offset:-2px}._item_manci_1:disabled{color:var(--disabled-text);cursor:not-allowed}._icon_manci_25{width:16px;height:16px;color:var(--text-tertiary);flex-shrink:0;justify-content:center;align-items:center;margin-left:-2px;display:flex}._icon_manci_25 svg{width:100%;height:100%}._label_manci_54{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}._trailing_manci_61{color:var(--text-tertiary);flex-shrink:0;margin-right:-2px;font-size:.8rem}._selected_manci_67{background:var(--depth-5);color:var(--text-primary);font-weight:var(--font-weight-medium)}._selected_manci_67 ._icon_manci_25{color:var(--text-primary)}._check_manci_26{width:16px;height:16px;color:var(--text-primary);flex-shrink:0;justify-content:center;align-items:center;margin-left:8px;display:flex}._selected_manci_67 ._check_manci_26{color:var(--brand-main)}._check_manci_26 svg{width:100%;height:100%}._destructive_manci_92,._destructive_manci_92 ._icon_manci_25{color:var(--danger-text)}._destructive_manci_92:hover:not(:disabled){background:var(--danger-bg);color:var(--danger-text)}._destructive_manci_92:hover:not(:disabled) ._icon_manci_25{color:var(--danger-text)}._field_ynqml_1{flex-direction:column;gap:6px;display:flex;position:relative}._trigger_ynqml_7{box-sizing:border-box;background:var(--card-surface);width:100%;box-shadow:inset 0 0 0 1px var(--border-input);color:var(--text-primary);cursor:pointer;border:none;align-items:center;font-family:inherit;transition:box-shadow .2s ease-out;display:flex}._trigger_ynqml_7:focus-visible{box-shadow:inset 0 0 0 0 var(--border-input), 0 0 0 2px var(--brand-main)}._errorWrap_ynqml_25{box-shadow:inset 0 0 0 1px var(--danger-text)}._trigger_ynqml_7:disabled{background:var(--surface-muted);color:var(--disabled-text);cursor:not-allowed}._sm_ynqml_34{border-radius:var(--radius-sm)}._sm_ynqml_34._trigger_ynqml_7{height:var(--control-height-sm);padding:0 12px;font-size:.9rem}._base_ynqml_42{border-radius:var(--radius-base)}._base_ynqml_42._trigger_ynqml_7{height:var(--control-height-base);padding:0 14px;font-size:.9rem}._icon_ynqml_51{width:16px;height:16px;color:var(--text-tertiary);flex-shrink:0;justify-content:center;align-items:center;margin-right:8px;display:flex}._icon_ynqml_51 svg{width:100%;height:100%}._value_ynqml_65{text-align:left;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}._placeholder_ynqml_73{color:var(--text-tertiary)}._chevron_ynqml_76{width:16px;height:16px;color:var(--text-tertiary);flex-shrink:0;justify-content:center;align-items:center;margin-left:8px;transition:transform .15s ease-out;display:flex}._chevron_ynqml_76 svg{width:100%;height:100%}._chevronOpen_ynqml_91{transform:rotate(180deg)}._menuWrap_ynqml_95{z-index:10;position:absolute;top:calc(100% + 4px);left:0;right:0}._menuWrapUp_ynqml_102{top:auto;bottom:calc(100% + 4px)}._list_ynqml_106{flex-direction:column;gap:2px;max-height:320px;display:flex;overflow-y:auto}._search_ynqml_113{width:100%;height:var(--control-height-sm);box-sizing:border-box;background:var(--card-surface);box-shadow:inset 0 0 0 1px var(--border-input);color:var(--text-primary);border:none;border-radius:8px;outline:none;margin-bottom:4px;padding:0 10px;font-family:inherit;font-size:.9rem}._search_ynqml_113:focus{box-shadow:inset 0 0 0 1.5px var(--brand-main)}._noResults_ynqml_131{color:var(--text-tertiary);padding:8px 12px;font-size:.9rem}._helperText_ynqml_136{color:var(--text-tertiary);padding-left:8px;font-size:.78rem}._errorText_ynqml_141{color:var(--danger-text);font-size:.78rem}._highlight_1anli_1{background:var(--brand-bg);color:var(--brand-dark);border-radius:3px;padding:0 1px}._group_10t2j_1{position:relative}._btn_10t2j_4{color:var(--text-primary);cursor:pointer;background:0 0;border:none;border-radius:12px;align-items:center;gap:6px;padding:12px;font-family:inherit;font-size:1rem;transition:background .2s ease-out,box-shadow .2s ease-out,transform .2s ease-out;display:flex}._btn_10t2j_4:hover{background:#0a0a0b0a}._btn_10t2j_4:active{background:var(--brand-bg);transform:scale(.95);box-shadow:inset 0 2px 1px #008cd840}._caret_10t2j_29{color:var(--text-tertiary);align-items:center;display:flex}._caret_10t2j_29 svg{width:14px;height:14px}._label_10t2j_38{color:var(--text-secondary)}._badge_10t2j_41{background:var(--brand-main,#0a84d8);color:#fff;min-width:16px;height:16px;font-size:.65rem;font-weight:var(--font-weight-semibold);text-align:center;border-radius:999px;padding:0 4px;line-height:16px;position:absolute;top:2px;right:2px}._value_10t2j_56{color:var(--text-primary);font-weight:var(--font-weight-medium)}._panel_10t2j_60{width:fit-content;min-width:220px;max-height:280px;box-shadow:inset 0 0 0 1px var(--border), 0 8px 24px #0000001f;z-index:50;background:#fff;border-radius:12px;display:none;position:absolute;top:calc(100% + 6px);left:0;overflow-y:auto}._panel_10t2j_60._open_10t2j_76{display:block}._panelRight_10t2j_79{left:auto;right:0}._panelWide_10t2j_83{min-width:260px;padding-bottom:4px}._sectionHeader_10t2j_87{justify-content:space-between;align-items:center;gap:8px;padding:12px 14px 4px;display:flex}._sectionLabel_10t2j_94{font-size:.75rem;font-weight:var(--font-weight-semibold);color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.02em}._allToggle_10t2j_101{font-family:inherit;font-size:.75rem;font-weight:var(--font-weight-semibold);color:var(--brand-main,#0a84d8);cursor:pointer;background:0 0;border:none;padding:0}._allToggle_10t2j_101:hover{text-decoration:underline}._allToggle_10t2j_101:focus-visible{outline:2px solid var(--brand-main);outline-offset:2px;border-radius:4px}._divider_10t2j_119{background:var(--border);height:1px;margin:4px 0}._option_10t2j_124{cursor:pointer;border-radius:8px;align-items:center;gap:8px;padding:8px;font-size:1rem;display:flex}._option_10t2j_124:hover{background:var(--bg)}._search_10t2j_136{box-sizing:border-box;width:calc(100% - 16px);box-shadow:inset 0 0 0 1px var(--border-input);border:none;border-radius:8px;margin:8px 8px 0;padding:8px 12px;font-family:inherit;font-size:1rem}._search_10t2j_136:focus{box-shadow:inset 0 0 0 1px var(--brand-main);outline:none}._optionsList_10t2j_152{padding:4px}._empty_10t2j_155{color:var(--text-tertiary);padding:7px 8px;font-size:.85rem}._line_avsvv_1,._box_avsvv_2{align-items:center;gap:4px;display:inline-flex;position:relative}._indicator_avsvv_9{pointer-events:none;transition:translate .25s cubic-bezier(.39,.575,.565,1),width .25s,scale .125s cubic-bezier(.39,.575,.565,1);position:absolute;left:0}._indicator_avsvv_9._settling_avsvv_17{transition:scale .1s linear}._indicatorLine_avsvv_21{background:var(--brand-main);height:2px;bottom:0}._indicatorBox_avsvv_27{background:var(--card-surface);box-shadow:0 0 1px .5px var(--border);border-radius:8px;top:4px;bottom:4px}._tab_avsvv_35{isolation:isolate;font-family:inherit;font-weight:var(--font-weight-regular);cursor:pointer;white-space:nowrap;border:none;border-radius:8px 8px 0 0;align-items:center;gap:6px;transition:color .15s ease-out,background .15s ease-out,box-shadow .15s ease-out;display:inline-flex;position:relative;overflow:hidden}._tab_avsvv_35:before{content:"";aspect-ratio:1;z-index:-1;pointer-events:none;background:rgba(var(--brand-main-rgb), .08);border-radius:50%;width:40%;transition:transform .3s cubic-bezier(.39,.575,.565,1);position:absolute;bottom:0;left:50%;transform:translate(-50%,100%)scale(1)}._tab_avsvv_35:hover:not(:disabled):before{transform:translate(-50%,15%)scale(4)}._tab_avsvv_35:active:not(:disabled):before{background:rgba(var(--brand-main-rgb), .28)}._tab_avsvv_35:disabled{color:var(--disabled-text);cursor:not-allowed}._tab_avsvv_35:disabled:before,._tab_avsvv_35._selected_avsvv_80:hover:before{display:none}._tab_avsvv_35:focus-visible{outline:2px solid var(--brand-main);outline-offset:2px}._icon_avsvv_89{flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;margin-left:-4px;display:flex}._icon_avsvv_89 svg{width:100%;height:100%}._line_avsvv_1{box-shadow:inset 0 -1px 0 0 var(--border)}._line_avsvv_1 ._tab_avsvv_35{color:var(--text-secondary);background:0 0;padding:12px 8px;font-size:1rem}._line_avsvv_1 ._tab_avsvv_35:hover:not(:disabled){color:var(--brand-main)}._line_avsvv_1 ._tab_avsvv_35._selected_avsvv_80{color:var(--text-primary);font-weight:var(--font-weight-medium)}._box_avsvv_2{box-sizing:border-box;height:var(--control-height-base);background:var(--depth-5);border-radius:var(--radius-base);gap:4px;padding:4px;box-shadow:inset 0 0 .5px 1px #e3e3e3}._box_avsvv_2 ._tab_avsvv_35{height:calc(var(--control-height-base) - 8px);color:var(--text-secondary);background:0 0;border-radius:8px;padding:0 14px;font-size:.9rem}._box_avsvv_2 ._tab_avsvv_35:hover:not(:disabled){color:var(--brand-main)}._box_avsvv_2 ._tab_avsvv_35._selected_avsvv_80{color:var(--text-primary);font-weight:var(--font-weight-medium)}._box_avsvv_2._sm_avsvv_152{height:var(--control-height-sm);border-radius:var(--radius-sm)}._box_avsvv_2._sm_avsvv_152 ._tab_avsvv_35{height:calc(var(--control-height-sm) - 8px);border-radius:6px;padding:0 14px}._box_avsvv_2._sm_avsvv_152 ._indicatorBox_avsvv_27{border-radius:6px}:root{--brand-main:#0090d9;--brand-dark:#007ebd;--brand-bg:#e0f5ff;--brand-main-rgb:0, 144, 217;--brand-main-5:rgba(var(--brand-main-rgb), .05);--brand-main-10:rgba(var(--brand-main-rgb), .1);--brand-main-20:rgba(var(--brand-main-rgb), .2);--brand-main-30:rgba(var(--brand-main-rgb), .3);--brand-main-50:rgba(var(--brand-main-rgb), .5);--brand-main-75:rgba(var(--brand-main-rgb), .75);--text-primary:#090b0b;--text-secondary:#5c5f61;--text-tertiary:#666e73;--bg:#f7f7f7;--card-surface:#fff;--surface-sunken:#f8f9fa;--surface-muted:#e5e7e9;--border:#e0e0e0;--border-input:#e0e0e0;--depth-base:16, 24, 32;--depth-2:rgba(var(--depth-base), .02);--depth-5:rgba(var(--depth-base), .05);--depth-10:rgba(var(--depth-base), .1);--depth-20:rgba(var(--depth-base), .2);--depth-50:rgba(var(--depth-base), .5);--depth-75:rgba(var(--depth-base), .75);--danger-bg:#fdeaea;--danger-text:#c8281c;--danger-text-dark:#b91c1c;--danger-rgb:200, 40, 28;--success-bg:#e3f6ea;--success-text:#27794a;--warning-bg:#fff1d6;--warning-text:#8f5d00;--disabled-bg:#c4c4c4;--disabled-text:#8a8a8a;--control-height-sm:36px;--control-height-base:44px;--radius-sm:10px;--radius-base:12px;--font-family-base:"Inter", sans-serif;--font-size-sm:.75rem;--font-size-base:.875rem;--font-size-lg:1rem;--font-weight-regular:450;--font-weight-medium:550;--font-weight-semibold:650;--line-height-base:1.5;--line-height-tight:1.25}.text-base{font-family:var(--font-family-base);font-size:var(--font-size-base);font-weight:var(--font-weight-regular);line-height:var(--line-height-base)}.text-medium{font-weight:var(--font-weight-medium)}.text-sm{font-size:var(--font-size-sm)}.text-lg{font-size:var(--font-size-lg)}.text-2-line{line-height:var(--line-height-tight)}
2
2
  /*$vite$:1*/
package/dist/index.js CHANGED
@@ -1,15 +1,15 @@
1
1
  import { Fragment as e, jsx as t, jsxs as n } from "react/jsx-runtime";
2
2
  import { Fragment as r, createContext as i, createElement as a, forwardRef as o, useContext as s, useEffect as c, useId as l, useLayoutEffect as u, useRef as d, useState as f } from "react";
3
3
  var p = {
4
- primary: "_primary_qb0uf_1",
5
- secondary: "_secondary_qb0uf_2",
6
- tertiary: "_tertiary_qb0uf_3",
7
- dangerous: "_dangerous_qb0uf_4",
8
- sm: "_sm_qb0uf_28",
9
- base: "_base_qb0uf_34",
10
- icon: "_icon_qb0uf_40",
11
- iconOnly: "_iconOnly_qb0uf_59",
12
- fullWidth: "_fullWidth_qb0uf_69"
4
+ primary: "_primary_1fqtv_1",
5
+ secondary: "_secondary_1fqtv_2",
6
+ tertiary: "_tertiary_1fqtv_3",
7
+ dangerous: "_dangerous_1fqtv_4",
8
+ sm: "_sm_1fqtv_35",
9
+ base: "_base_1fqtv_41",
10
+ icon: "_icon_1fqtv_47",
11
+ iconOnly: "_iconOnly_1fqtv_66",
12
+ fullWidth: "_fullWidth_1fqtv_76"
13
13
  };
14
14
  //#endregion
15
15
  //#region src/components/Button.tsx
@@ -68,12 +68,12 @@ function g({ stacked: e, completed: r, interactive: i, draggable: a, dragging: o
68
68
  });
69
69
  }
70
70
  var _ = {
71
- neutral: "_neutral_1p1lj_1",
72
- pill: "_pill_1p1lj_2",
73
- accent: "_accent_1p1lj_3",
74
- success: "_success_1p1lj_4",
75
- danger: "_danger_1p1lj_5",
76
- count: "_count_1p1lj_6"
71
+ neutral: "_neutral_1h6kq_1",
72
+ pill: "_pill_1h6kq_2",
73
+ accent: "_accent_1h6kq_3",
74
+ success: "_success_1h6kq_4",
75
+ danger: "_danger_1h6kq_5",
76
+ count: "_count_1h6kq_6"
77
77
  };
78
78
  //#endregion
79
79
  //#region src/components/Tag.tsx
@@ -85,11 +85,11 @@ function v({ variant: e = "neutral", children: n, ...r }) {
85
85
  });
86
86
  }
87
87
  var y = {
88
- group: "_group_taxgk_1",
89
- sm: "_sm_taxgk_9",
90
- chip: "_chip_taxgk_13",
91
- base: "_base_taxgk_33",
92
- selected: "_selected_taxgk_59"
88
+ group: "_group_jl3nf_1",
89
+ sm: "_sm_jl3nf_9",
90
+ chip: "_chip_jl3nf_13",
91
+ base: "_base_jl3nf_33",
92
+ selected: "_selected_jl3nf_59"
93
93
  }, b = {
94
94
  group: "_group_16vyf_1",
95
95
  groupLabel: "_groupLabel_16vyf_7"
@@ -386,12 +386,12 @@ function ae({ searchValue: e, onSearchChange: r, placeholder: i = "Search…", s
386
386
  });
387
387
  }
388
388
  var W = {
389
- checkbox: "_checkbox_v0tpk_1",
390
- control: "_control_v0tpk_8",
391
- labelText: "_labelText_v0tpk_17",
392
- input: "_input_v0tpk_25",
393
- box: "_box_v0tpk_32",
394
- icon: "_icon_v0tpk_63"
389
+ checkbox: "_checkbox_54v1q_1",
390
+ control: "_control_54v1q_8",
391
+ labelText: "_labelText_54v1q_17",
392
+ input: "_input_54v1q_25",
393
+ box: "_box_54v1q_32",
394
+ icon: "_icon_54v1q_63"
395
395
  };
396
396
  //#endregion
397
397
  //#region src/components/Checkbox.tsx
@@ -445,12 +445,12 @@ function oe({ label: e, items: r, value: i, onChange: a, disabled: o, ...s }) {
445
445
  });
446
446
  }
447
447
  var K = {
448
- radio: "_radio_1s5sc_1",
449
- control: "_control_1s5sc_8",
450
- labelText: "_labelText_1s5sc_17",
451
- input: "_input_1s5sc_25",
452
- circle: "_circle_1s5sc_32",
453
- dot: "_dot_1s5sc_63"
448
+ radio: "_radio_wj7kb_1",
449
+ control: "_control_wj7kb_8",
450
+ labelText: "_labelText_wj7kb_17",
451
+ input: "_input_wj7kb_25",
452
+ circle: "_circle_wj7kb_32",
453
+ dot: "_dot_wj7kb_63"
454
454
  };
455
455
  //#endregion
456
456
  //#region src/components/RadioButton.tsx
@@ -499,14 +499,14 @@ function ce({ label: e, name: r, items: i, value: a, onChange: o, disabled: s, .
499
499
  });
500
500
  }
501
501
  var q = {
502
- switch: "_switch_qbe6p_1",
503
- input: "_input_qbe6p_7",
504
- control: "_control_qbe6p_10",
505
- track: "_track_qbe6p_26",
506
- thumb: "_thumb_qbe6p_52",
507
- sm: "_sm_qbe6p_65",
508
- base: "_base_qbe6p_74",
509
- labelText: "_labelText_qbe6p_84"
502
+ switch: "_switch_1uo9k_1",
503
+ input: "_input_1uo9k_7",
504
+ control: "_control_1uo9k_10",
505
+ track: "_track_1uo9k_26",
506
+ thumb: "_thumb_1uo9k_52",
507
+ sm: "_sm_1uo9k_65",
508
+ base: "_base_1uo9k_74",
509
+ labelText: "_labelText_1uo9k_84"
510
510
  };
511
511
  //#endregion
512
512
  //#region src/components/Switch.tsx
@@ -739,13 +739,13 @@ function ge() {
739
739
  });
740
740
  }
741
741
  var X = {
742
- item: "_item_nrbhu_1",
743
- icon: "_icon_nrbhu_25",
744
- check: "_check_nrbhu_26",
745
- label: "_label_nrbhu_54",
746
- trailing: "_trailing_nrbhu_61",
747
- selected: "_selected_nrbhu_67",
748
- destructive: "_destructive_nrbhu_88"
742
+ item: "_item_manci_1",
743
+ icon: "_icon_manci_25",
744
+ check: "_check_manci_26",
745
+ label: "_label_manci_54",
746
+ trailing: "_trailing_manci_61",
747
+ selected: "_selected_manci_67",
748
+ destructive: "_destructive_manci_92"
749
749
  };
750
750
  //#endregion
751
751
  //#region src/components/MenuItem.tsx
@@ -781,23 +781,23 @@ function _e({ icon: e, trailing: r, selected: i, destructive: a, children: o, ..
781
781
  });
782
782
  }
783
783
  var Z = {
784
- field: "_field_1xfc4_1",
785
- trigger: "_trigger_1xfc4_7",
786
- errorWrap: "_errorWrap_1xfc4_25",
787
- sm: "_sm_1xfc4_34",
788
- base: "_base_1xfc4_42",
789
- icon: "_icon_1xfc4_51",
790
- value: "_value_1xfc4_65",
791
- placeholder: "_placeholder_1xfc4_73",
792
- chevron: "_chevron_1xfc4_76",
793
- chevronOpen: "_chevronOpen_1xfc4_91",
794
- menuWrap: "_menuWrap_1xfc4_95",
795
- menuWrapUp: "_menuWrapUp_1xfc4_102",
796
- list: "_list_1xfc4_106",
797
- search: "_search_1xfc4_113",
798
- noResults: "_noResults_1xfc4_131",
799
- helperText: "_helperText_1xfc4_136",
800
- errorText: "_errorText_1xfc4_141"
784
+ field: "_field_ynqml_1",
785
+ trigger: "_trigger_ynqml_7",
786
+ errorWrap: "_errorWrap_ynqml_25",
787
+ sm: "_sm_ynqml_34",
788
+ base: "_base_ynqml_42",
789
+ icon: "_icon_ynqml_51",
790
+ value: "_value_ynqml_65",
791
+ placeholder: "_placeholder_ynqml_73",
792
+ chevron: "_chevron_ynqml_76",
793
+ chevronOpen: "_chevronOpen_ynqml_91",
794
+ menuWrap: "_menuWrap_ynqml_95",
795
+ menuWrapUp: "_menuWrapUp_ynqml_102",
796
+ list: "_list_ynqml_106",
797
+ search: "_search_ynqml_113",
798
+ noResults: "_noResults_ynqml_131",
799
+ helperText: "_helperText_ynqml_136",
800
+ errorText: "_errorText_ynqml_141"
801
801
  };
802
802
  //#endregion
803
803
  //#region src/components/Dropdown.tsx
@@ -966,24 +966,24 @@ function Se({ text: n, query: i }) {
966
966
  }, n) : /* @__PURE__ */ t(r, { children: e }, n)) });
967
967
  }
968
968
  var Q = {
969
- group: "_group_17bb8_1",
970
- btn: "_btn_17bb8_4",
971
- caret: "_caret_17bb8_29",
972
- label: "_label_17bb8_38",
973
- badge: "_badge_17bb8_41",
974
- value: "_value_17bb8_56",
975
- panel: "_panel_17bb8_60",
976
- open: "_open_17bb8_76",
977
- panelRight: "_panelRight_17bb8_79",
978
- panelWide: "_panelWide_17bb8_83",
979
- sectionHeader: "_sectionHeader_17bb8_87",
980
- sectionLabel: "_sectionLabel_17bb8_94",
981
- allToggle: "_allToggle_17bb8_101",
982
- divider: "_divider_17bb8_114",
983
- option: "_option_17bb8_119",
984
- search: "_search_17bb8_131",
985
- optionsList: "_optionsList_17bb8_147",
986
- empty: "_empty_17bb8_150"
969
+ group: "_group_10t2j_1",
970
+ btn: "_btn_10t2j_4",
971
+ caret: "_caret_10t2j_29",
972
+ label: "_label_10t2j_38",
973
+ badge: "_badge_10t2j_41",
974
+ value: "_value_10t2j_56",
975
+ panel: "_panel_10t2j_60",
976
+ open: "_open_10t2j_76",
977
+ panelRight: "_panelRight_10t2j_79",
978
+ panelWide: "_panelWide_10t2j_83",
979
+ sectionHeader: "_sectionHeader_10t2j_87",
980
+ sectionLabel: "_sectionLabel_10t2j_94",
981
+ allToggle: "_allToggle_10t2j_101",
982
+ divider: "_divider_10t2j_119",
983
+ option: "_option_10t2j_124",
984
+ search: "_search_10t2j_136",
985
+ optionsList: "_optionsList_10t2j_152",
986
+ empty: "_empty_10t2j_155"
987
987
  };
988
988
  //#endregion
989
989
  //#region src/components/FilterSection.tsx
@@ -1026,16 +1026,16 @@ function Ce({ label: e, options: r, optionLabel: i, activeSet: a, onToggle: o, o
1026
1026
  ] });
1027
1027
  }
1028
1028
  var $ = {
1029
- line: "_line_qm5u2_1",
1030
- box: "_box_qm5u2_2",
1031
- indicator: "_indicator_qm5u2_9",
1032
- settling: "_settling_qm5u2_17",
1033
- indicatorLine: "_indicatorLine_qm5u2_21",
1034
- indicatorBox: "_indicatorBox_qm5u2_27",
1035
- tab: "_tab_qm5u2_35",
1036
- selected: "_selected_qm5u2_80",
1037
- icon: "_icon_qm5u2_89",
1038
- sm: "_sm_qm5u2_152"
1029
+ line: "_line_avsvv_1",
1030
+ box: "_box_avsvv_2",
1031
+ indicator: "_indicator_avsvv_9",
1032
+ settling: "_settling_avsvv_17",
1033
+ indicatorLine: "_indicatorLine_avsvv_21",
1034
+ indicatorBox: "_indicatorBox_avsvv_27",
1035
+ tab: "_tab_avsvv_35",
1036
+ selected: "_selected_avsvv_80",
1037
+ icon: "_icon_avsvv_89",
1038
+ sm: "_sm_avsvv_152"
1039
1039
  };
1040
1040
  //#endregion
1041
1041
  //#region src/components/Tabs.tsx
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["__iconData","__iconData","__iconData","__iconData"],"sources":["../src/components/Button.module.css","../src/components/Button.tsx","../src/components/Card.module.css","../src/components/Card.tsx","../src/components/Tag.module.css","../src/components/Tag.tsx","../src/components/TagGroup.module.css","../src/components/OptionGroup.module.css","../src/components/FieldLabel.module.css","../src/components/FieldLabel.tsx","../src/components/TagGroup.tsx","../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/toLucideIconData.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../node_modules/lucide-react/dist/esm/shared/src/build/defaultAttributes.mjs","../node_modules/lucide-react/dist/esm/shared/src/build/buildLucideIconNode.mjs","../node_modules/lucide-react/dist/esm/shared/src/build/buildLucideIconForReact.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../node_modules/lucide-react/dist/esm/context.mjs","../node_modules/lucide-react/dist/esm/Icon.mjs","../node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../node_modules/lucide-react/dist/esm/icons/check.mjs","../node_modules/lucide-react/dist/esm/icons/chevron-down.mjs","../node_modules/lucide-react/dist/esm/icons/eye-off.mjs","../node_modules/lucide-react/dist/esm/icons/eye.mjs","../node_modules/lucide-react/dist/esm/icons/search.mjs","../src/components/Toolbar.module.css","../src/components/Toolbar.tsx","../src/components/Checkbox.module.css","../src/components/Checkbox.tsx","../src/components/RadioButton.module.css","../src/components/RadioButton.tsx","../src/components/Switch.module.css","../src/components/Switch.tsx","../src/components/TextField.module.css","../src/components/TextField.tsx","../src/components/PasswordField.tsx","../src/components/DateField.tsx","../src/components/NumberField.module.css","../src/components/NumberField.tsx","../src/components/Menu.module.css","../src/components/Menu.tsx","../src/components/MenuItem.module.css","../src/components/MenuItem.tsx","../src/components/Dropdown.module.css","../src/components/Dropdown.tsx","../src/components/HighlightText.module.css","../src/components/HighlightText.tsx","../src/components/FilterSection.module.css","../src/components/FilterSection.tsx","../src/components/Tabs.module.css","../src/components/Tabs.tsx","../src/utils/format.ts"],"sourcesContent":[".primary,\n.secondary,\n.tertiary,\n.dangerous {\n position: relative;\n isolation: isolate;\n overflow: hidden;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n border: none;\n font-family: inherit;\n font-weight: var(--font-weight-regular);\n letter-spacing: 0.01em;\n cursor: pointer;\n transition:\n color 0.2s ease,\n transform 0.2s ease-out;\n}\n.primary:active:not(:disabled),\n.secondary:active:not(:disabled),\n.tertiary:active:not(:disabled),\n.dangerous:active:not(:disabled) {\n transform: scale(0.95);\n}\n\n.sm {\n height: var(--control-height-sm);\n border-radius: var(--radius-sm);\n padding: 0 12px;\n font-size: 0.9rem;\n}\n.base {\n height: var(--control-height-base);\n border-radius: var(--radius-base);\n padding: 0 16px;\n font-size: 0.9rem;\n}\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n}\n.icon:first-child {\n margin-left: -4px;\n}\n.icon:last-child {\n margin-right: -4px;\n}\n.icon svg {\n width: 100%;\n height: 100%;\n}\n\n.iconOnly {\n box-sizing: border-box;\n padding: 0;\n}\n.iconOnly.sm {\n width: var(--control-height-sm);\n}\n.iconOnly.base {\n width: var(--control-height-base);\n}\n.fullWidth {\n width: 100%;\n}\n.primary::before,\n.secondary::before,\n.tertiary::before,\n.dangerous::before {\n content: '';\n position: absolute;\n left: 50%;\n bottom: 0;\n width: 24%;\n aspect-ratio: 1;\n border-radius: 50%;\n transform: translate(-50%, 100%) scale(1);\n transition: transform 0.3s cubic-bezier(0.39, 0.575, 0.565, 1);\n z-index: -1;\n pointer-events: none;\n}\n.primary:hover::before,\n.secondary:hover::before,\n.tertiary:hover::before,\n.dangerous:hover::before {\n transform: translate(-50%, 15%) scale(8);\n}\n\n.primary {\n background: var(--brand-dark);\n color: #fff;\n font-weight: var(--font-weight-regular);\n letter-spacing: 0.02em;\n}\n.primary::before {\n background: rgba(255, 255, 255, 0.08);\n}\n.primary:active:not(:disabled)::before {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.secondary {\n background: var(--ink-5);\n color: var(--text-primary);\n}\n.secondary .icon {\n color: var(--text-secondary);\n}\n.secondary::before {\n background: rgba(var(--brand-main-rgb), 0.08);\n}\n.secondary:active:not(:disabled)::before {\n background: rgba(var(--brand-main-rgb), 0.28);\n}\n.secondary:hover .icon {\n color: var(--brand-main);\n}\n.secondary:hover {\n color: var(--brand-main);\n}\n\n.tertiary {\n background: transparent;\n color: var(--text-secondary);\n}\n.tertiary::before {\n background: rgba(var(--brand-main-rgb), 0.16);\n}\n.tertiary:active:not(:disabled)::before {\n background: rgba(var(--brand-main-rgb), 0.28);\n}\n.tertiary:hover,\n.tertiary:active:not(:disabled) {\n background: var(--bg);\n}\n.tertiary:hover {\n color: var(--brand-main);\n}\n\n.dangerous {\n background: var(--danger-bg);\n color: var(--danger-text-dark);\n}\n.dangerous::before {\n background: rgba(var(--danger-rgb), 0.16);\n}\n.dangerous:active:not(:disabled)::before {\n background: rgba(var(--danger-rgb), 0.28);\n}\n\n.primary:disabled,\n.secondary:disabled,\n.tertiary:disabled,\n.dangerous:disabled {\n background: var(--disabled-bg);\n color: var(--disabled-text);\n cursor: not-allowed;\n}\n.primary:disabled:hover,\n.secondary:disabled:hover,\n.tertiary:disabled:hover,\n.dangerous:disabled:hover {\n color: var(--disabled-text);\n}\n.primary:disabled::before,\n.secondary:disabled::before,\n.tertiary:disabled::before,\n.dangerous:disabled::before {\n display: none;\n}\n","import type { ButtonHTMLAttributes, ReactNode, Ref } from 'react';\nimport styles from './Button.module.css';\n\ntype ButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'dangerous';\ntype ButtonSize = 'sm' | 'base';\n\ninterface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Icon shown before the label. Omit `children` to render an icon-only square button — pass `aria-label` in that case. */\n leadingIcon?: ReactNode;\n /** Icon shown after the label. */\n trailingIcon?: ReactNode;\n /** Stretch to the width of the container. */\n fullWidth?: boolean;\n children?: ReactNode;\n /**\n * Extra classes for layout around the button — responsive visibility,\n * positioning, spacing. Appended after the variant classes.\n */\n className?: string;\n ref?: Ref<HTMLButtonElement>;\n}\n\nexport function Button({\n variant = 'primary',\n size = 'base',\n leadingIcon,\n trailingIcon,\n fullWidth,\n children,\n className,\n ref,\n ...rest\n}: ButtonProps) {\n const iconOnly = !children && Boolean(leadingIcon);\n const classes = [\n styles[variant],\n styles[size],\n iconOnly && styles.iconOnly,\n fullWidth && styles.fullWidth,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n return (\n <button ref={ref} type=\"button\" className={classes} {...rest}>\n {leadingIcon && <span className={styles.icon}>{leadingIcon}</span>}\n {children}\n {trailingIcon && <span className={styles.icon}>{trailingIcon}</span>}\n </button>\n );\n}\n",".wrap {\n position: relative;\n width: 220px;\n flex: 0 0 220px;\n}\n.wrap:hover {\n z-index: 10;\n}\n.fluid {\n width: 100%;\n flex: none;\n}\n\n.backing {\n position: absolute;\n left: 6px;\n right: 6px;\n bottom: -4px;\n height: 10px;\n background: var(--card-surface);\n box-shadow: inset 0 0 0 1px var(--border);\n border-radius: 0 0 14px 14px;\n z-index: 0;\n}\n.backing.completed {\n background: var(--success-bg);\n box-shadow: inset 0 0 0 1px #bfe3cc;\n}\n\n.card {\n position: relative;\n z-index: 1;\n width: 100%;\n box-sizing: border-box;\n background: var(--card-surface);\n box-shadow:\n inset 0 0 0 1px #efefef,\n 0 1px 2px rgba(16, 24, 32, 0.04);\n border-radius: 16px;\n padding: 12px 14px;\n cursor: default;\n transition:\n box-shadow 0.2s,\n transform 0.1s;\n}\n.card.interactive {\n cursor: pointer;\n}\n.card.interactive:active {\n transform: scale(0.98, 0.95);\n}\n.card.grabbable {\n cursor: grab;\n}\n.card.grabbable:active {\n cursor: grabbing;\n}\n.card.dragging,\n.card.dragging:hover {\n box-shadow:\n inset 0 0 0 1px #efefef,\n 0 1px 2px rgba(16, 24, 32, 0.04);\n}\n.card.interactive:hover {\n box-shadow:\n inset 0 0 0 1px #efefef,\n 0 0 0 2px var(--brand-main);\n}\n.card.completed {\n background: var(--success-bg);\n box-shadow:\n inset 0 0 0 1px #bfe3cc,\n 0 1px 2px rgba(16, 24, 32, 0.04),\n 0 2px 8px rgba(16, 24, 32, 0.06);\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport styles from './Card.module.css';\n\ninterface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'className'> {\n /** Shows a second sheet behind the card, for representing a stack/batch. */\n stacked?: boolean;\n /** Success-tinted surface, e.g. a completed task. */\n completed?: boolean;\n /** Adds pointer cursor + accent hover ring. */\n interactive?: boolean;\n /** Grab cursor, for drag sources — pair with `interactive`. */\n draggable?: boolean;\n /** Suppresses the hover ring while a drag is in progress. */\n dragging?: boolean;\n /** Card fills its container width instead of a fixed width. */\n fluid?: boolean;\n children: ReactNode;\n}\n\nexport function Card({\n stacked,\n completed,\n interactive,\n draggable,\n dragging,\n fluid,\n children,\n ...rest\n}: CardProps) {\n return (\n <div className={`${styles.wrap} ${fluid ? styles.fluid : ''}`}>\n {stacked && <div className={`${styles.backing} ${completed ? styles.completed : ''}`} />}\n <div\n className={[\n styles.card,\n completed ? styles.completed : '',\n interactive ? styles.interactive : '',\n draggable ? styles.grabbable : '',\n dragging ? styles.dragging : '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children}\n </div>\n </div>\n );\n}\n",".neutral,\n.pill,\n.accent,\n.success,\n.danger,\n.count {\n display: inline-flex;\n align-items: center;\n font-weight: var(--font-weight-medium);\n white-space: nowrap;\n}\n\n/* Square tags — e.g. day badges, worker names, video panel tags */\n.neutral {\n color: var(--text-tertiary);\n font-size: 0.75rem;\n background: var(--ink-5);\n border-radius: 6px;\n padding: 2px 7px;\n}\n\n/* Pill tags — e.g. BPO group labels, total-duration tags */\n.pill {\n background: var(--card-surface);\n box-shadow: inset 0 0 0 1px var(--border);\n color: var(--text-tertiary);\n font-size: 0.8rem;\n padding: 3px 11px;\n border-radius: 999px;\n}\n\n/* Accent pill — e.g. \"current\" stat, read-only banner badge */\n.accent {\n background: var(--brand-bg);\n color: var(--brand-dark);\n font-size: 0.8rem;\n padding: 3px 11px;\n border-radius: 999px;\n}\n\n/* Success pill — e.g. \"time spent\" stat */\n.success {\n background: var(--success-bg);\n color: var(--success-text);\n font-size: 0.8rem;\n padding: 3px 11px;\n border-radius: 999px;\n}\n\n/* Danger — square (e.g. ASAP tag) reuses the same token pair as the\n pill-shaped status variant; only the shape differs by context. */\n.danger {\n color: var(--danger-text);\n font-size: 0.75rem;\n background: var(--danger-bg);\n border-radius: 6px;\n padding: 2px 7px;\n}\n\n/* Count badge — small solid circle, e.g. active-filter count */\n.count {\n justify-content: center;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n border-radius: 999px;\n background: var(--brand-main);\n color: #fff;\n font-size: 0.65rem;\n line-height: 16px;\n text-align: center;\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport styles from './Tag.module.css';\n\ntype TagVariant = 'neutral' | 'pill' | 'accent' | 'success' | 'danger' | 'count';\n\ninterface TagProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'className'> {\n variant?: TagVariant;\n children: ReactNode;\n}\n\nexport function Tag({ variant = 'neutral', children, ...rest }: TagProps) {\n return (\n <span className={styles[variant]} {...rest}>\n {children}\n </span>\n );\n}\n",".group {\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n}\n\n.group.sm {\n gap: 6px;\n}\n\n.chip {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n appearance: none;\n border: none;\n outline: none;\n font-family: inherit;\n font-weight: var(--font-weight-medium);\n white-space: nowrap;\n border-radius: 999px;\n cursor: pointer;\n transition:\n background-color 0.15s ease-out,\n color 0.15s ease-out,\n transform 0.1s ease-out;\n background: var(--ink-5);\n color: var(--text-primary);\n}\n\n.group.base .chip {\n height: 36px;\n padding: 0 14px;\n font-size: 0.85rem;\n}\n\n.group.sm .chip {\n height: 24px;\n padding: 0 9px;\n font-size: 0.75rem;\n}\n\n.chip:hover:not(:disabled) {\n background: var(--surface-muted);\n}\n\n.chip:active:not(:disabled) {\n transform: scale(0.95);\n background: var(--surface-muted);\n}\n\n.chip:focus-visible {\n outline: 2px solid var(--brand-main);\n outline-offset: 2px;\n}\n\n.chip.selected {\n background: var(--brand-bg);\n color: var(--brand-main);\n}\n\n.chip.selected:hover:not(:disabled) {\n background: var(--brand-main-20);\n}\n\n.chip.selected:active:not(:disabled) {\n background: var(--brand-main-30);\n}\n\n.chip:disabled {\n background: var(--disabled-bg);\n color: var(--disabled-text);\n cursor: not-allowed;\n}\n",".group {\n display: inline-flex;\n flex-direction: column;\n gap: 0;\n}\n\n.groupLabel {\n margin-bottom: 6px;\n}\n",".label {\n font-size: 0.85rem;\n font-weight: var(--font-weight-medium);\n color: var(--text-primary);\n padding-left: 4px;\n}\n","import type { ReactNode } from 'react';\nimport styles from './FieldLabel.module.css';\n\ninterface FieldLabelProps {\n children: ReactNode;\n /** Pass the id of the control this labels to render a real `<label htmlFor>`. */\n htmlFor?: string;\n className?: string;\n}\n\nexport function FieldLabel({ children, htmlFor, className }: FieldLabelProps) {\n const classes = `${styles.label} ${className ?? ''}`.trim();\n if (htmlFor) {\n return (\n <label className={classes} htmlFor={htmlFor}>\n {children}\n </label>\n );\n }\n return <span className={classes}>{children}</span>;\n}\n","import type { ReactNode } from 'react';\nimport styles from './TagGroup.module.css';\nimport groupStyles from './OptionGroup.module.css';\nimport { FieldLabel } from './FieldLabel';\n\ntype TagGroupSize = 'sm' | 'base';\n\ninterface TagGroupItem {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\ninterface TagGroupProps {\n items: TagGroupItem[];\n value: string[];\n onChange: (value: string[]) => void;\n size?: TagGroupSize;\n disabled?: boolean;\n label?: ReactNode;\n 'aria-label'?: string;\n}\n\nexport function TagGroup({\n items,\n value,\n onChange,\n size = 'base',\n disabled = false,\n label,\n ...rest\n}: TagGroupProps) {\n function toggle(itemValue: string) {\n const next = value.includes(itemValue)\n ? value.filter((v) => v !== itemValue)\n : [...value, itemValue];\n onChange(next);\n }\n\n const tags = (\n <div\n role=\"group\"\n aria-label={label ? undefined : rest['aria-label']}\n className={`${styles.group} ${styles[size]}`}\n >\n {items.map((item) => {\n const selected = value.includes(item.value);\n const isDisabled = disabled || item.disabled;\n return (\n <button\n key={item.value}\n type=\"button\"\n aria-pressed={selected}\n disabled={isDisabled}\n className={[styles.chip, selected && styles.selected].filter(Boolean).join(' ')}\n onClick={() => !isDisabled && toggle(item.value)}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n );\n\n if (!label) return tags;\n\n return (\n <div className={groupStyles.group} {...rest}>\n <FieldLabel className={groupStyles.groupLabel}>{label}</FieldLabel>\n {tags}\n </div>\n );\n}\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string?.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toKebabCase } from './toKebabCase.mjs';\n\nfunction toLucideIconData(iconName, iconNode, aliases = []) {\n if (iconNode == null) {\n throw new Error(\"[lucide]: iconNode is required when icon name is used\");\n }\n return {\n name: toKebabCase(iconName),\n size: 24,\n node: iconNode,\n ...aliases.length > 0 ? { aliases } : {}\n };\n}\n\nexport { toLucideIconData };\n//# sourceMappingURL=toLucideIconData.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => {\n let out = \"\";\n let upperNext = false;\n for (const ch of string) {\n if (ch === \"-\" || ch === \"_\" || ch <= \" \") {\n upperNext = out.length > 0;\n continue;\n }\n if (out.length === 0) {\n out += ch.toLowerCase();\n } else {\n out += upperNext ? ch.toUpperCase() : ch;\n }\n upperNext = false;\n }\n return out;\n};\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.mjs';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": 2,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport defaultAttributes from './defaultAttributes.mjs';\nimport { mergeClasses } from '../utils/mergeClasses.mjs';\n\nfunction isDefined(value) {\n return value !== null && value !== void 0;\n}\nfunction buildLucideIconNode(icon, params = {}) {\n const attributeNames = params.attributeNames ?? {};\n const getAttributeName = (attributeName) => attributeNames[attributeName] ?? attributeName;\n const viewBoxWidth = icon.size ?? icon.width ?? defaultAttributes[\"width\"];\n const viewBoxHeight = icon.size ?? icon.height ?? defaultAttributes[\"height\"];\n const aliasClassNames = icon.aliases?.filter((alias) => typeof alias === \"string\" && alias.trim() !== \"\").map((alias) => `lucide-${alias}`) ?? [];\n const iconClassNames = [...icon.name ? [`lucide-${icon.name}`] : [], ...aliasClassNames];\n const classNamesFromClassName = params.className?.split(\" \").filter(Boolean) ?? [];\n const className = params.includeDefaultClasses === false ? mergeClasses(...classNamesFromClassName) : mergeClasses(\"lucide\", ...iconClassNames, ...classNamesFromClassName);\n const calculatedStrokeWidth = params.absoluteStrokeWidth ? Number(params.strokeWidth ?? defaultAttributes[\"stroke-width\"]) * Number(icon.size ?? icon.width ?? defaultAttributes[\"width\"]) / Number(params.size ?? params.width ?? defaultAttributes[\"width\"]) : params.strokeWidth ?? defaultAttributes[\"stroke-width\"];\n const attributes = {\n ...Object.entries(defaultAttributes).reduce((attrs, [attrName, value]) => {\n attrs[getAttributeName(attrName)] = value;\n return attrs;\n }, {}),\n ...\"color\" in params && params.color && {\n [getAttributeName(\"stroke\")]: params.color\n },\n ...\"size\" in params && isDefined(params.size) && {\n [getAttributeName(\"width\")]: params.size,\n [getAttributeName(\"height\")]: params.size\n },\n ...\"width\" in params && isDefined(params.width) && {\n [getAttributeName(\"width\")]: params.width\n },\n ...\"height\" in params && isDefined(params.height) && {\n [getAttributeName(\"height\")]: params.height\n },\n [getAttributeName(\"stroke-width\")]: calculatedStrokeWidth,\n ...className && {\n [getAttributeName(\"class\")]: className\n },\n [getAttributeName(\"viewBox\")]: `0 0 ${viewBoxWidth} ${viewBoxHeight}`,\n ...params.hasA11yProp === false ? {\n [getAttributeName(\"aria-hidden\")]: \"true\"\n } : {},\n ...\"attributes\" in params && params.attributes\n };\n return [\n \"svg\",\n attributes,\n icon.node.map((child) => {\n const [name, attrs, children] = child;\n const nextAttrs = params.nonScalingStroke ? { [getAttributeName(\"vector-effect\")]: \"non-scaling-stroke\", ...attrs } : attrs;\n return children ? [name, nextAttrs, children] : [name, nextAttrs];\n })\n ];\n}\n\nexport { buildLucideIconNode as default };\n//# sourceMappingURL=buildLucideIconNode.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport buildLucideIconNode from './buildLucideIconNode.mjs';\n\nfunction buildLucideIconForReact(icon, params = {}) {\n return buildLucideIconNode(icon, {\n ...params,\n attributeNames: {\n ...params.attributeNames,\n class: \"className\",\n \"stroke-width\": \"strokeWidth\",\n \"stroke-linecap\": \"strokeLinecap\",\n \"stroke-linejoin\": \"strokeLinejoin\",\n \"vector-effect\": \"vectorEffect\"\n }\n });\n}\n\nexport { buildLucideIconForReact as default };\n//# sourceMappingURL=buildLucideIconForReact.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, nonScalingStroke, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport buildLucideIconForReact from './shared/src/build/buildLucideIconForReact.mjs';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.mjs';\nimport { useLucideContext } from './context.mjs';\n\nconst Icon = forwardRef(\n ({\n color,\n size,\n width,\n height,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className = \"\",\n children,\n iconNode = [],\n icon = {\n node: iconNode,\n aliases: [],\n size: 24\n },\n ...rest\n }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n nonScalingStroke: contextNonScalingStroke = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const hasAccessibleProp = Boolean(children) || hasA11yProp(rest);\n const [name, svgAttributes, builtIconNode = []] = buildLucideIconForReact(icon, {\n color: color ?? contextColor,\n width: width ?? size ?? contextSize,\n height: height ?? size ?? contextSize,\n strokeWidth: strokeWidth ?? contextStrokeWidth,\n absoluteStrokeWidth: absoluteStrokeWidth ?? contextAbsoluteStrokeWidth,\n nonScalingStroke: nonScalingStroke ?? contextNonScalingStroke,\n className: mergeClasses(contextClass, className),\n hasA11yProp: hasAccessibleProp,\n attributes: rest\n });\n return createElement(\n name,\n {\n ref,\n ...svgAttributes\n },\n [\n ...builtIconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { toLucideIconData } from './shared/src/utils/toLucideIconData.mjs';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.mjs';\nimport Icon from './Icon.mjs';\n\nfunction createLucideIcon(iconDataOrName, iconNode = [], aliases = []) {\n const iconData = typeof iconDataOrName === \"string\" ? toLucideIconData(iconDataOrName, iconNode, aliases) : iconDataOrName;\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n icon: iconData,\n className,\n ...props\n })\n );\n if (iconData.name) {\n Component.displayName = toPascalCase(iconData.name);\n }\n return Component;\n}\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"check\",\n size: 24,\n node: [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]]\n};\n__iconData.node;\nconst Check = createLucideIcon(__iconData);\n\nexport { __iconData, Check as default };\n//# sourceMappingURL=check.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"chevron-down\",\n size: 24,\n node: [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]]\n};\n__iconData.node;\nconst ChevronDown = createLucideIcon(__iconData);\n\nexport { __iconData, ChevronDown as default };\n//# sourceMappingURL=chevron-down.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"eye-off\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n key: \"ct8e1f\"\n }\n ],\n [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n [\n \"path\",\n {\n d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n key: \"13bj9a\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n ]\n};\n__iconData.node;\nconst EyeOff = createLucideIcon(__iconData);\n\nexport { __iconData, EyeOff as default };\n//# sourceMappingURL=eye-off.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"eye\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n ]\n};\n__iconData.node;\nconst Eye = createLucideIcon(__iconData);\n\nexport { __iconData, Eye as default };\n//# sourceMappingURL=eye.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"search\",\n size: 24,\n node: [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n ]\n};\n__iconData.node;\nconst Search = createLucideIcon(__iconData);\n\nexport { __iconData, Search as default };\n//# sourceMappingURL=search.mjs.map\n",".toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 0 8px;\n background: var(--card-surface);\n border-radius: 16px;\n box-shadow:\n inset 0 0 0 1px var(--border),\n 0 1px 2px rgba(16, 24, 32, 0.04),\n 0 2px 8px rgba(16, 24, 32, 0.06);\n}\n.searchWrap {\n position: relative;\n flex: 1;\n min-width: 0;\n}\n.searchWrap::after {\n content: '';\n position: absolute;\n left: 36px;\n right: 0;\n bottom: 0;\n height: 2px;\n background: var(--brand-main);\n opacity: 0;\n pointer-events: none;\n}\n.searchWrap:focus-within::after {\n opacity: 1;\n}\n.searchIcon {\n position: absolute;\n top: 50%;\n left: 12px;\n width: 16px;\n height: 16px;\n transform: translateY(-53%);\n color: var(--text-tertiary);\n pointer-events: none;\n}\n.searchIcon svg {\n width: 100%;\n height: 100%;\n}\n.search {\n width: 100%;\n box-sizing: border-box;\n border: none;\n padding: 16px 52px 16px 36px;\n font-family: inherit;\n font-size: 1rem;\n color: var(--text-primary);\n background: none;\n box-shadow: inset -1px 0 0 var(--border);\n}\n.search:focus {\n outline: none;\n}\n.searchShortcut {\n position: absolute;\n top: 50%;\n right: 8px;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2px 6px;\n border-radius: 6px;\n background: var(--bg);\n color: var(--text-tertiary);\n font-size: 0.75rem;\n font-weight: var(--font-weight-semibold);\n letter-spacing: 0.02em;\n pointer-events: none;\n}\n.controls {\n display: flex;\n align-items: center;\n flex: none;\n}\n","import { useEffect, useRef, type ChangeEvent, type ReactNode } from 'react';\nimport { Search } from 'lucide-react';\nimport styles from './Toolbar.module.css';\n\ninterface ToolbarProps {\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n placeholder?: string;\n /** Text shown in the keyboard-shortcut badge, e.g. \"⌘K\". Omit to hide the badge. */\n shortcutLabel?: string;\n /** Focuses the search input when Cmd/Ctrl + the shortcut key is pressed. */\n shortcutKey?: string;\n /** Right-side content — filter/sort controls, actions, etc. */\n children?: ReactNode;\n}\n\nexport function Toolbar({\n searchValue,\n onSearchChange,\n placeholder = 'Search…',\n shortcutLabel = '⌘K',\n shortcutKey = 'k',\n children,\n}: ToolbarProps) {\n const searchRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n function onKeyDown(e: KeyboardEvent) {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === shortcutKey.toLowerCase()) {\n e.preventDefault();\n searchRef.current?.focus();\n }\n }\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [shortcutKey]);\n\n return (\n <div className={styles.toolbar}>\n <div className={styles.searchWrap}>\n <span className={styles.searchIcon}>\n <Search />\n </span>\n <input\n ref={searchRef}\n type=\"text\"\n className={styles.search}\n placeholder={placeholder}\n autoComplete=\"off\"\n value={searchValue}\n onChange={(e: ChangeEvent<HTMLInputElement>) => onSearchChange?.(e.target.value)}\n />\n {shortcutLabel && (\n <span className={styles.searchShortcut} aria-hidden=\"true\">\n {shortcutLabel}\n </span>\n )}\n </div>\n {children && <div className={styles.controls}>{children}</div>}\n </div>\n );\n}\n",".checkbox {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n padding: 8px 4px;\n}\n.control {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n}\n.labelText {\n font-size: 0.85rem;\n color: var(--text-primary);\n transition: color 0.2s ease-out;\n}\n.checkbox:hover .labelText {\n color: var(--brand-main);\n}\n.input {\n position: absolute;\n inset: 0;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n}\n.box {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n border-radius: 6px;\n background: var(--ink-5);\n box-shadow: inset 0 0 0 1px var(--border);\n transition:\n background-color 0.2s cubic-bezier(0, 0, 0.2, 1),\n box-shadow 0.2s cubic-bezier(0, 0, 0.2, 1),\n transform 0.1s cubic-bezier(0, 0, 0.2, 1);\n}\n.checkbox:hover .box {\n box-shadow: 0 0 0 1px var(--brand-main);\n}\n.input:focus-visible + .box {\n outline: 2px solid var(--brand-main);\n outline-offset: 2px;\n}\n.input:active + .box {\n transform: scale(0.88);\n}\n.input:checked + .box {\n background: var(--brand-main);\n box-shadow: inset 0 0 0 1px var(--brand-main);\n}\n.checkbox:hover .input:checked + .box {\n box-shadow: 0 0 0 1px var(--brand-main);\n}\n.icon {\n width: 10px;\n height: 10px;\n overflow: visible;\n}\n.icon polyline {\n fill: none;\n stroke: #fff;\n stroke-width: 2.5px;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 22px;\n stroke-dashoffset: 22px;\n transition: stroke-dashoffset 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.input:checked + .box .icon polyline {\n stroke-dashoffset: 0px;\n}\n.checkbox:has(.input:disabled),\n.input:disabled {\n cursor: not-allowed;\n}\n.checkbox:has(.input:disabled) .labelText {\n color: var(--disabled-text);\n}\n.checkbox:has(.input:disabled) .box {\n background: var(--surface-muted);\n box-shadow: inset 0 0 0 1px var(--border);\n transform: none;\n}\n.checkbox:has(.input:disabled) .input:checked + .box {\n background: var(--disabled-bg);\n box-shadow: inset 0 0 0 1px var(--disabled-bg);\n}\n","import type { ChangeEvent, FocusEvent, ReactNode, Ref } from 'react';\nimport styles from './Checkbox.module.css';\nimport groupStyles from './OptionGroup.module.css';\nimport { FieldLabel } from './FieldLabel';\n\ninterface CheckboxProps {\n checked: boolean;\n onChange: (e: ChangeEvent<HTMLInputElement>) => void;\n onBlur?: (e: FocusEvent<HTMLInputElement>) => void;\n name?: string;\n label?: ReactNode;\n ariaLabel?: string;\n disabled?: boolean;\n className?: string;\n ref?: Ref<HTMLInputElement>;\n}\n\nexport function Checkbox({\n checked,\n onChange,\n onBlur,\n name,\n label,\n ariaLabel,\n disabled,\n className,\n ref,\n}: CheckboxProps) {\n return (\n <label className={`${styles.checkbox} ${className ?? ''}`}>\n <span className={styles.control}>\n <input\n ref={ref}\n type=\"checkbox\"\n className={styles.input}\n checked={checked}\n onChange={onChange}\n onBlur={onBlur}\n name={name}\n aria-label={ariaLabel}\n disabled={disabled}\n />\n <span className={styles.box}>\n <svg className={styles.icon} viewBox=\"0 0 17 18\" aria-hidden=\"true\">\n <polyline points=\"1 9 7 14 15 4\" />\n </svg>\n </span>\n </span>\n {label && <span className={styles.labelText}>{label}</span>}\n </label>\n );\n}\n\ninterface CheckboxGroupItem {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\ninterface CheckboxGroupProps {\n label?: ReactNode;\n items: CheckboxGroupItem[];\n value: string[];\n onChange: (value: string[]) => void;\n disabled?: boolean;\n 'aria-label'?: string;\n}\n\nexport function CheckboxGroup({ label, items, value, onChange, disabled, ...rest }: CheckboxGroupProps) {\n function toggle(itemValue: string) {\n const next = value.includes(itemValue)\n ? value.filter((v) => v !== itemValue)\n : [...value, itemValue];\n onChange(next);\n }\n\n return (\n <div role=\"group\" aria-label={label ? undefined : rest['aria-label']} className={groupStyles.group}>\n {label && <FieldLabel className={groupStyles.groupLabel}>{label}</FieldLabel>}\n {items.map((item) => (\n <Checkbox\n key={item.value}\n checked={value.includes(item.value)}\n onChange={() => toggle(item.value)}\n label={item.label}\n disabled={disabled || item.disabled}\n />\n ))}\n </div>\n );\n}\n",".radio {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n padding: 8px 4px;\n}\n.control {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n}\n.labelText {\n font-size: 0.85rem;\n color: var(--text-primary);\n transition: color 0.2s ease-out;\n}\n.radio:hover .labelText {\n color: var(--brand-main);\n}\n.input {\n position: absolute;\n inset: 0;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n}\n.circle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--ink-5);\n box-shadow: inset 0 0 0 1px var(--border);\n transition:\n background-color 0.2s cubic-bezier(0, 0, 0.2, 1),\n box-shadow 0.2s cubic-bezier(0, 0, 0.2, 1),\n transform 0.1s cubic-bezier(0, 0, 0.2, 1);\n}\n.radio:hover .circle {\n box-shadow: 0 0 0 1px var(--brand-main);\n}\n.input:focus-visible + .circle {\n outline: 2px solid var(--brand-main);\n outline-offset: 2px;\n}\n.input:active + .circle {\n transform: scale(0.88);\n}\n.input:checked + .circle {\n background: var(--brand-main);\n box-shadow: inset 0 0 0 1px var(--brand-main);\n}\n.radio:hover .input:checked + .circle {\n box-shadow: 0 0 0 1px var(--brand-main);\n}\n.dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: #fff;\n transform: scale(0);\n transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.input:checked + .circle .dot {\n transform: scale(1);\n}\n.radio:has(.input:disabled),\n.input:disabled {\n cursor: not-allowed;\n}\n.radio:has(.input:disabled) .labelText {\n color: var(--disabled-text);\n}\n.radio:has(.input:disabled) .circle {\n background: var(--surface-muted);\n box-shadow: inset 0 0 0 1px var(--border);\n transform: none;\n}\n.radio:has(.input:disabled) .input:checked + .circle {\n background: var(--disabled-bg);\n box-shadow: inset 0 0 0 1px var(--disabled-bg);\n}\n","import type { ChangeEvent, FocusEvent, ReactNode, Ref } from 'react';\nimport styles from './RadioButton.module.css';\nimport groupStyles from './OptionGroup.module.css';\nimport { FieldLabel } from './FieldLabel';\n\ninterface RadioButtonProps {\n checked: boolean;\n onChange: (e: ChangeEvent<HTMLInputElement>) => void;\n onBlur?: (e: FocusEvent<HTMLInputElement>) => void;\n name?: string;\n value?: string;\n label?: ReactNode;\n ariaLabel?: string;\n disabled?: boolean;\n className?: string;\n ref?: Ref<HTMLInputElement>;\n}\n\nexport function RadioButton({\n checked,\n onChange,\n onBlur,\n name,\n value,\n label,\n ariaLabel,\n disabled,\n className,\n ref,\n}: RadioButtonProps) {\n return (\n <label className={`${styles.radio} ${className ?? ''}`}>\n <span className={styles.control}>\n <input\n ref={ref}\n type=\"radio\"\n className={styles.input}\n checked={checked}\n onChange={onChange}\n onBlur={onBlur}\n name={name}\n value={value}\n aria-label={ariaLabel}\n disabled={disabled}\n />\n <span className={styles.circle}>\n <span className={styles.dot} />\n </span>\n </span>\n {label && <span className={styles.labelText}>{label}</span>}\n </label>\n );\n}\n\ninterface RadioGroupItem {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\ninterface RadioGroupProps {\n label?: ReactNode;\n name: string;\n items: RadioGroupItem[];\n value: string;\n onChange: (value: string) => void;\n disabled?: boolean;\n 'aria-label'?: string;\n}\n\nexport function RadioGroup({ label, name, items, value, onChange, disabled, ...rest }: RadioGroupProps) {\n return (\n <div\n role=\"radiogroup\"\n aria-label={label ? undefined : rest['aria-label']}\n className={groupStyles.group}\n >\n {label && <FieldLabel className={groupStyles.groupLabel}>{label}</FieldLabel>}\n {items.map((item) => (\n <RadioButton\n key={item.value}\n name={name}\n value={item.value}\n checked={value === item.value}\n onChange={() => onChange(item.value)}\n label={item.label}\n disabled={disabled || item.disabled}\n />\n ))}\n </div>\n );\n}\n",".switch {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n}\n.switch:has(.input:disabled) {\n cursor: not-allowed;\n}\n.control {\n position: relative;\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n}\n.input {\n position: absolute;\n inset: 0;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n}\n.input:disabled {\n cursor: not-allowed;\n}\n.track {\n position: relative;\n width: 100%;\n height: 100%;\n border-radius: 999px;\n background: var(--ink-5);\n box-shadow: inset 0 0 0 1px var(--border);\n transition:\n background-color 0.2s cubic-bezier(0, 0, 0.2, 1),\n box-shadow 0.2s cubic-bezier(0, 0, 0.2, 1);\n}\n.switch:hover .track {\n box-shadow: inset 0 0 0 1px var(--brand-main);\n}\n.input:focus-visible + .track {\n outline: 2px solid var(--brand-main);\n outline-offset: 2px;\n}\n.input:checked + .track {\n background: var(--brand-main);\n box-shadow: inset 0 0 0 1px var(--brand-main);\n}\n.input:disabled + .track {\n background: var(--surface-muted);\n box-shadow: inset 0 0 0 1px var(--border);\n}\n.thumb {\n position: absolute;\n top: 50%;\n left: 2px;\n border-radius: 50%;\n background: #fff;\n transform: translateY(-50%);\n transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.input:checked + .track .thumb {\n transform: translateY(-50%) translateX(var(--switch-thumb-travel));\n}\n\n.sm {\n width: 32px;\n height: 18px;\n --switch-thumb-travel: 14px;\n}\n.sm .thumb {\n width: 14px;\n height: 14px;\n}\n.base {\n width: 40px;\n height: 22px;\n --switch-thumb-travel: 18px;\n}\n.base .thumb {\n width: 18px;\n height: 18px;\n}\n\n.labelText {\n font-size: 0.85rem;\n color: var(--text-primary);\n transition: color 0.2s ease-out;\n}\n.switch:hover .labelText {\n color: var(--brand-main);\n}\n.switch:has(.input:disabled) .labelText {\n color: var(--disabled-text);\n}\n","import type { ChangeEvent, ReactNode } from 'react';\nimport styles from './Switch.module.css';\n\ntype SwitchSize = 'sm' | 'base';\n\ninterface SwitchProps {\n checked: boolean;\n onChange: (e: ChangeEvent<HTMLInputElement>) => void;\n size?: SwitchSize;\n label?: ReactNode;\n ariaLabel?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport function Switch({\n checked,\n onChange,\n size = 'base',\n label,\n ariaLabel,\n disabled,\n className,\n}: SwitchProps) {\n return (\n <label className={`${styles.switch} ${className ?? ''}`}>\n <span className={`${styles.control} ${styles[size]}`}>\n <input\n type=\"checkbox\"\n role=\"switch\"\n className={styles.input}\n checked={checked}\n onChange={onChange}\n aria-label={ariaLabel}\n disabled={disabled}\n />\n <span className={styles.track}>\n <span className={styles.thumb} />\n </span>\n </span>\n {label && <span className={styles.labelText}>{label}</span>}\n </label>\n );\n}\n",".field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.inputWrap {\n position: relative;\n display: flex;\n align-items: center;\n background: var(--card-surface);\n box-shadow: inset 0 0 0 1px var(--border-input);\n transition: box-shadow 0.2s ease-out;\n}\n.inputWrap:focus-within {\n box-shadow:\n inset 0 0 0 0 var(--border-input),\n 0 0 0 2px var(--brand-main);\n}\n.errorWrap,\n.errorWrap:focus-within {\n box-shadow: inset 0 0 0 1px var(--danger-text);\n}\n.inputWrap:has(.input:disabled) {\n background: var(--surface-muted);\n}\n\n.toolbar {\n background: none;\n box-shadow: none;\n}\n.toolbar::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: 2px;\n background: var(--brand-main);\n opacity: 0;\n transition: opacity 0.2s ease-out;\n}\n.toolbar:focus-within {\n box-shadow: none;\n}\n.toolbar:focus-within::after {\n opacity: 1;\n}\n.toolbar.errorWrap,\n.toolbar.errorWrap:focus-within {\n box-shadow: none;\n}\n.toolbar.errorWrap::after {\n background: var(--danger-text);\n opacity: 1;\n}\n\n.sm {\n height: var(--control-height-sm);\n border-radius: var(--radius-sm);\n}\n.sm .input {\n padding: 0 12px;\n font-size: 0.9rem;\n}\n.base {\n height: var(--control-height-base);\n border-radius: var(--radius-base);\n}\n.base .input {\n padding: 0 14px;\n font-size: 0.9rem;\n}\n.inputWrap:has(.icon) .input {\n padding-left: 8px;\n}\n\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: 12px;\n color: var(--text-tertiary);\n flex-shrink: 0;\n}\n.icon svg {\n width: 100%;\n height: 100%;\n}\n.input {\n flex: 1;\n min-width: 0;\n box-sizing: border-box;\n border: none;\n background: none;\n font-family: inherit;\n color: var(--text-primary);\n font-weight: var(--font-weight-regular);\n}\n.input:focus {\n outline: none;\n}\n.input::placeholder {\n color: var(--text-tertiary);\n}\n.input:disabled {\n color: var(--disabled-text);\n cursor: not-allowed;\n}\n.helperText {\n font-size: 0.78rem;\n color: var(--text-tertiary);\n padding-left: 8px;\n}\n.errorText {\n font-size: 0.78rem;\n color: var(--danger-text);\n}\n.trailing {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n margin-right: 6px;\n padding: 0;\n border: none;\n border-radius: 8px;\n background: none;\n color: var(--text-tertiary);\n cursor: pointer;\n flex-shrink: 0;\n transition: color 0.15s ease-out, background 0.15s ease-out;\n}\n.trailing svg {\n width: 16px;\n height: 16px;\n}\n.trailing:hover:not(:disabled) {\n color: var(--brand-main);\n background: var(--brand-main-5);\n}\n.trailing:focus-visible {\n outline: 2px solid var(--brand-main);\n outline-offset: -2px;\n}\n.trailing:disabled {\n cursor: not-allowed;\n}\n.pickerInput {\n cursor: pointer;\n caret-color: transparent;\n}\n.pickerInput:disabled {\n cursor: not-allowed;\n}\n","import { useId, type InputHTMLAttributes, type ReactNode, type Ref } from 'react';\nimport styles from './TextField.module.css';\nimport { FieldLabel } from './FieldLabel';\n\ntype TextFieldSize = 'sm' | 'base';\ntype TextFieldVariant = 'default' | 'toolbar';\n\ninterface TextFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'className' | 'size'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: TextFieldSize;\n variant?: TextFieldVariant;\n leadingIcon?: ReactNode;\n /** Extra classes for layout around the field — width, flex growth. Appended after its own class. */\n className?: string;\n /** Reaches the <input>, e.g. for a form library to focus a field that failed validation. */\n ref?: Ref<HTMLInputElement>;\n}\n\nexport function TextField({\n label,\n helperText,\n error,\n size = 'base',\n variant = 'default',\n leadingIcon,\n id,\n className,\n ref,\n ...rest\n}: TextFieldProps) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n\n return (\n <div className={[styles.field, className].filter(Boolean).join(' ')}>\n {label && <FieldLabel htmlFor={inputId}>{label}</FieldLabel>}\n <div\n className={`${styles.inputWrap} ${styles[variant]} ${styles[size]} ${error ? styles.errorWrap : ''}`}\n >\n {leadingIcon && <span className={styles.icon}>{leadingIcon}</span>}\n <input ref={ref} id={inputId} className={styles.input} {...rest} />\n </div>\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helperText}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n","import { useId, useState, type InputHTMLAttributes, type Ref } from 'react';\nimport { Eye, EyeOff } from 'lucide-react';\nimport styles from './TextField.module.css';\nimport { FieldLabel } from './FieldLabel';\n\ntype PasswordFieldSize = 'sm' | 'base';\n\ninterface PasswordFieldProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'className' | 'size' | 'type'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: PasswordFieldSize;\n /** Accessible name of the toggle while the value is hidden. */\n showLabel?: string;\n /** Accessible name of the toggle while the value is shown. */\n hideLabel?: string;\n /** Start with the value shown. */\n defaultVisible?: boolean;\n /** Extra classes for layout around the field. */\n className?: string;\n ref?: Ref<HTMLInputElement>;\n}\n\n/** A text field for passwords and PINs, with a button that shows or hides what was typed. */\nexport function PasswordField({\n label,\n helperText,\n error,\n size = 'base',\n showLabel = 'Show password',\n hideLabel = 'Hide password',\n defaultVisible = false,\n id,\n className,\n ref,\n disabled,\n ...rest\n}: PasswordFieldProps) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const [visible, setVisible] = useState(defaultVisible);\n\n return (\n <div className={[styles.field, className].filter(Boolean).join(' ')}>\n {label && <FieldLabel htmlFor={inputId}>{label}</FieldLabel>}\n <div className={`${styles.inputWrap} ${styles.default} ${styles[size]} ${error ? styles.errorWrap : ''}`}>\n <input\n ref={ref}\n id={inputId}\n className={styles.input}\n type={visible ? 'text' : 'password'}\n autoComplete=\"off\"\n disabled={disabled}\n {...rest}\n />\n <button\n type=\"button\"\n className={styles.trailing}\n aria-label={visible ? hideLabel : showLabel}\n aria-pressed={visible}\n aria-controls={inputId}\n disabled={disabled}\n onClick={() => setVisible((v) => !v)}\n >\n {visible ? <EyeOff /> : <Eye />}\n </button>\n </div>\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helperText}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n","import { useId, useRef, type InputHTMLAttributes, type Ref } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport styles from './TextField.module.css';\nimport { FieldLabel } from './FieldLabel';\n\ntype DateFieldSize = 'sm' | 'base';\n\ninterface DateFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'className' | 'size'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: DateFieldSize;\n /** Accessible name of the button next to the date. */\n openLabel?: string;\n /** Extra classes for layout around the field. */\n className?: string;\n ref?: Ref<HTMLInputElement>;\n}\n\n/**\n * Shows a picked date and opens a calendar on click. It renders no calendar\n * itself: pass it as the input of a date picker (e.g. react-datepicker's\n * `customInput`), which supplies `value`, `onClick` and `ref`.\n */\nexport function DateField({\n label,\n helperText,\n error,\n size = 'base',\n openLabel = 'Open calendar',\n id,\n className,\n ref,\n onClick,\n disabled,\n ...rest\n}: DateFieldProps) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n function setRefs(el: HTMLInputElement | null) {\n inputRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) ref.current = el;\n }\n\n return (\n <div className={[styles.field, className].filter(Boolean).join(' ')}>\n {label && <FieldLabel htmlFor={inputId}>{label}</FieldLabel>}\n <div className={`${styles.inputWrap} ${styles.default} ${styles[size]} ${error ? styles.errorWrap : ''}`}>\n <input\n {...rest}\n ref={setRefs}\n id={inputId}\n className={`${styles.input} ${styles.pickerInput}`}\n inputMode=\"none\"\n readOnly\n disabled={disabled}\n onClick={onClick}\n />\n <button\n type=\"button\"\n tabIndex={-1}\n className={styles.trailing}\n aria-label={openLabel}\n disabled={disabled}\n onClick={() => inputRef.current?.click()}\n >\n <ChevronDown />\n </button>\n </div>\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helperText}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n",".field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.inputWrap {\n position: relative;\n display: flex;\n align-items: center;\n background: var(--card-surface);\n box-shadow: inset 0 0 0 1px var(--border-input);\n transition: box-shadow 0.2s ease-out;\n}\n.inputWrap:focus-within {\n box-shadow:\n inset 0 0 0 0 var(--border-input),\n 0 0 0 2px var(--brand-main);\n}\n.errorWrap,\n.errorWrap:focus-within {\n box-shadow: inset 0 0 0 1px var(--danger-text);\n}\n.inputWrap:has(.input:disabled) {\n background: var(--surface-muted);\n}\n\n.sm {\n height: var(--control-height-sm);\n border-radius: var(--radius-sm);\n}\n.sm .input {\n padding: 0 8px;\n font-size: 0.85rem;\n}\n.base {\n height: var(--control-height-base);\n border-radius: var(--radius-base);\n}\n.base .input {\n padding: 0 10px;\n font-size: 0.9rem;\n}\n.inputWrap:has(.prefix) .input {\n padding-left: 4px;\n}\n.inputWrap:has(.suffix) .input {\n padding-right: 4px;\n}\n\n.prefix,\n.suffix {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n color: var(--text-tertiary);\n font-size: 0.78rem;\n white-space: nowrap;\n}\n.prefix {\n margin-left: 10px;\n}\n.suffix {\n margin-right: 10px;\n}\n\n.input {\n flex: 1;\n min-width: 0;\n box-sizing: border-box;\n border: none;\n background: none;\n font-family: inherit;\n color: var(--text-primary);\n font-weight: var(--font-weight-regular);\n font-variant-numeric: tabular-nums;\n appearance: textfield;\n -moz-appearance: textfield;\n}\n.input::-webkit-outer-spin-button,\n.input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n.input:focus {\n outline: none;\n}\n.input::placeholder {\n color: var(--text-tertiary);\n}\n.input:disabled {\n color: var(--disabled-text);\n cursor: not-allowed;\n}\n.helperText {\n font-size: 0.78rem;\n color: var(--text-tertiary);\n padding-left: 8px;\n}\n.errorText {\n font-size: 0.78rem;\n color: var(--danger-text);\n}\n","import { useId, type InputHTMLAttributes, type ReactNode } from 'react';\nimport styles from './NumberField.module.css';\nimport { FieldLabel } from './FieldLabel';\n\ntype NumberFieldSize = 'sm' | 'base';\n\ninterface NumberFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'className' | 'size' | 'prefix'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: NumberFieldSize;\n /** Rendered inline before the value, e.g. \"$\". */\n prefix?: ReactNode;\n /** Rendered inline after the value, e.g. \"cows\", \"/cwt\". */\n suffix?: ReactNode;\n}\n\nexport function NumberField({\n label,\n helperText,\n error,\n size = 'base',\n prefix,\n suffix,\n id,\n ...rest\n}: NumberFieldProps) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n\n return (\n <div className={styles.field}>\n {label && <FieldLabel htmlFor={inputId}>{label}</FieldLabel>}\n <div className={`${styles.inputWrap} ${styles[size]} ${error ? styles.errorWrap : ''}`}>\n {prefix && <span className={styles.prefix}>{prefix}</span>}\n <input id={inputId} className={styles.input} {...rest} />\n {suffix && <span className={styles.suffix}>{suffix}</span>}\n </div>\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helperText}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n",".menu {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 180px;\n width: fit-content;\n padding: 4px;\n box-sizing: border-box;\n background: var(--card-surface);\n border-radius: 12px;\n box-shadow:\n inset 0 0 0 1px var(--border),\n 0 8px 24px rgba(0, 0, 0, 0.12);\n}\n.divider {\n height: 1px;\n background: var(--border);\n margin: 4px 6px;\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport styles from './Menu.module.css';\n\ninterface MenuProps extends Omit<HTMLAttributes<HTMLDivElement>, 'className'> {\n children: ReactNode;\n}\n\nexport function Menu({ children, ...rest }: MenuProps) {\n return (\n <div role=\"menu\" className={styles.menu} {...rest}>\n {children}\n </div>\n );\n}\n\nexport function MenuDivider() {\n return <div className={styles.divider} role=\"separator\" />;\n}\n",".item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: var(--control-height-sm);\n box-sizing: border-box;\n border: none;\n background: none;\n border-radius: 8px;\n padding: 8px 12px;\n font-family: inherit;\n font-size: 0.9rem;\n color: var(--text-primary);\n text-align: left;\n cursor: pointer;\n transition:\n background 0.15s ease-out,\n color 0.15s ease-out;\n}\n.item:hover:not(:disabled) {\n background: var(--brand-bg);\n color: var(--brand-dark);\n}\n.item:hover:not(:disabled) .icon,\n.item:hover:not(:disabled) .check {\n color: var(--brand-dark);\n}\n.item:active:not(:disabled) {\n background: var(--brand-main-20);\n}\n.item:focus-visible {\n outline: 2px solid var(--brand-main);\n outline-offset: -2px;\n}\n.item:disabled {\n color: var(--disabled-text);\n cursor: not-allowed;\n}\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: -2px;\n color: var(--text-tertiary);\n flex-shrink: 0;\n}\n.icon svg {\n width: 100%;\n height: 100%;\n}\n.label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.trailing {\n color: var(--text-tertiary);\n font-size: 0.8rem;\n margin-right: -2px;\n flex-shrink: 0;\n}\n.selected {\n color: var(--text-primary);\n font-weight: var(--font-weight-medium);\n}\n.selected .icon {\n color: var(--text-primary);\n}\n.check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: 8px;\n color: var(--text-primary);\n flex-shrink: 0;\n}\n.check svg {\n width: 100%;\n height: 100%;\n}\n.destructive {\n color: var(--danger-text);\n}\n.destructive .icon {\n color: var(--danger-text);\n}\n.destructive:hover:not(:disabled) {\n background: var(--danger-bg);\n color: var(--danger-text);\n}\n.destructive:hover:not(:disabled) .icon {\n color: var(--danger-text);\n}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react';\nimport { Check } from 'lucide-react';\nimport styles from './MenuItem.module.css';\n\ninterface MenuItemProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'className'> {\n icon?: ReactNode;\n trailing?: ReactNode;\n selected?: boolean;\n destructive?: boolean;\n children: ReactNode;\n}\n\nexport function MenuItem({ icon, trailing, selected, destructive, children, ...rest }: MenuItemProps) {\n const classes = [styles.item, selected && styles.selected, destructive && styles.destructive]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button type=\"button\" role=\"menuitem\" className={classes} {...rest}>\n {icon && <span className={styles.icon}>{icon}</span>}\n <span className={styles.label}>{children}</span>\n {trailing && <span className={styles.trailing}>{trailing}</span>}\n {selected && (\n <span className={styles.check}>\n <Check />\n </span>\n )}\n </button>\n );\n}\n",".field {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.trigger {\n display: flex;\n align-items: center;\n width: 100%;\n box-sizing: border-box;\n border: none;\n background: var(--card-surface);\n box-shadow: inset 0 0 0 1px var(--border-input);\n font-family: inherit;\n color: var(--text-primary);\n cursor: pointer;\n transition: box-shadow 0.2s ease-out;\n}\n.trigger:focus-visible {\n box-shadow:\n inset 0 0 0 0 var(--border-input),\n 0 0 0 2px var(--brand-main);\n}\n.errorWrap {\n box-shadow: inset 0 0 0 1px var(--danger-text);\n}\n.trigger:disabled {\n background: var(--surface-muted);\n color: var(--disabled-text);\n cursor: not-allowed;\n}\n\n.sm {\n border-radius: var(--radius-sm);\n}\n.sm.trigger {\n height: var(--control-height-sm);\n padding: 0 12px;\n font-size: 0.9rem;\n}\n.base {\n border-radius: var(--radius-base);\n}\n.base.trigger {\n height: var(--control-height-base);\n padding: 0 14px;\n font-size: 0.9rem;\n}\n\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-right: 8px;\n color: var(--text-tertiary);\n flex-shrink: 0;\n}\n.icon svg {\n width: 100%;\n height: 100%;\n}\n.value {\n flex: 1;\n min-width: 0;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.placeholder {\n color: var(--text-tertiary);\n}\n.chevron {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: 8px;\n color: var(--text-tertiary);\n flex-shrink: 0;\n transition: transform 0.15s ease-out;\n}\n.chevron svg {\n width: 100%;\n height: 100%;\n}\n.chevronOpen {\n transform: rotate(180deg);\n}\n\n.menuWrap {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n z-index: 10;\n}\n.menuWrapUp {\n top: auto;\n bottom: calc(100% + 4px);\n}\n.list {\n display: flex;\n flex-direction: column;\n gap: 2px;\n max-height: 320px;\n overflow-y: auto;\n}\n.search {\n width: 100%;\n height: var(--control-height-sm);\n box-sizing: border-box;\n margin-bottom: 4px;\n padding: 0 10px;\n border: none;\n border-radius: 8px;\n background: var(--card-surface);\n box-shadow: inset 0 0 0 1px var(--border-input);\n font-family: inherit;\n font-size: 0.9rem;\n color: var(--text-primary);\n outline: none;\n}\n.search:focus {\n box-shadow: inset 0 0 0 1px var(--brand-main);\n}\n.noResults {\n padding: 8px 12px;\n font-size: 0.9rem;\n color: var(--text-tertiary);\n}\n.helperText {\n font-size: 0.78rem;\n color: var(--text-tertiary);\n padding-left: 8px;\n}\n.errorText {\n font-size: 0.78rem;\n color: var(--danger-text);\n}\n","import {\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type ChangeEvent,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { Menu } from './Menu';\nimport { MenuItem } from './MenuItem';\nimport { FieldLabel } from './FieldLabel';\nimport styles from './Dropdown.module.css';\n\ntype DropdownSize = 'sm' | 'base';\n\ninterface DropdownOption<T extends string> {\n value: T;\n label: ReactNode;\n icon?: ReactNode;\n disabled?: boolean;\n /** Text matched by search when `label` is not a plain string. */\n searchText?: string;\n}\n\ninterface DropdownProps<T extends string> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: DropdownSize;\n placeholder?: string;\n options: DropdownOption<T>[];\n value?: T;\n onChange: (value: T) => void;\n disabled?: boolean;\n /** Show a search field at the top of the open menu that filters options by their text. */\n searchable?: boolean;\n /** Placeholder for the search field. */\n searchPlaceholder?: string;\n /** Shown in place of the options when a search matches nothing. */\n noResultsText?: ReactNode;\n /** Open the menu on first render. */\n defaultOpen?: boolean;\n /** Focus the trigger on first render. */\n autoFocus?: boolean;\n /**\n * Extra classes for layout around the field — width, responsive sizing.\n * Appended after the field's own class.\n */\n className?: string;\n /** Extra classes for the label, e.g. to hide it below a breakpoint. */\n labelClassName?: string;\n /** Accessible name when there is no visible `label`. */\n 'aria-label'?: string;\n 'data-testid'?: string;\n}\n\nfunction optionText(opt: DropdownOption<string>): string {\n if (opt.searchText !== undefined) return opt.searchText;\n return typeof opt.label === 'string' || typeof opt.label === 'number' ? String(opt.label) : '';\n}\n\nexport function Dropdown<T extends string>({\n label,\n helperText,\n error,\n size = 'base',\n placeholder = 'Select…',\n options,\n value,\n onChange,\n disabled,\n searchable,\n searchPlaceholder = 'Search…',\n noResultsText = 'No matches',\n defaultOpen = false,\n autoFocus,\n className,\n labelClassName,\n 'aria-label': ariaLabel,\n 'data-testid': dataTestId,\n}: DropdownProps<T>) {\n const [open, setOpen] = useState(defaultOpen);\n const [query, setQuery] = useState('');\n const [openUpward, setOpenUpward] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const triggerId = useId();\n const listboxId = useId();\n\n const selected = options.find((opt) => opt.value === value);\n const trimmedQuery = query.trim().toLowerCase();\n const visibleOptions =\n searchable && trimmedQuery\n ? options.filter((opt) => optionText(opt).toLowerCase().includes(trimmedQuery))\n : options;\n const enabledValues = visibleOptions.filter((opt) => !opt.disabled).map((opt) => opt.value);\n\n function close() {\n setOpen(false);\n setQuery('');\n }\n\n // Searchable menus focus the search field; others focus the selected (or first) option.\n useEffect(() => {\n if (!open) return;\n if (searchable) {\n searchRef.current?.focus();\n return;\n }\n const focusValue = value ?? enabledValues[0];\n const el = rootRef.current?.querySelector<HTMLButtonElement>(`[data-value=\"${focusValue}\"]`);\n el?.focus();\n }, [open]);\n\n // Open upward when there is not enough room below and more room above.\n useLayoutEffect(() => {\n if (!open || !menuRef.current || !rootRef.current) {\n setOpenUpward(false);\n return;\n }\n const rootRect = rootRef.current.getBoundingClientRect();\n const menuHeight = menuRef.current.getBoundingClientRect().height;\n const spaceBelow = window.innerHeight - rootRect.bottom;\n const spaceAbove = rootRect.top;\n setOpenUpward(spaceBelow < menuHeight + 8 && spaceAbove > spaceBelow);\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n function onPointerDown(e: PointerEvent) {\n if (!rootRef.current?.contains(e.target as Node)) close();\n }\n function onKeyDown(e: globalThis.KeyboardEvent) {\n if (e.key === 'Escape') {\n close();\n triggerRef.current?.focus();\n }\n }\n window.addEventListener('pointerdown', onPointerDown);\n window.addEventListener('keydown', onKeyDown);\n return () => {\n window.removeEventListener('pointerdown', onPointerDown);\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [open]);\n\n function focusOption(optionValue: T | undefined) {\n if (optionValue === undefined) return;\n rootRef.current?.querySelector<HTMLButtonElement>(`[data-value=\"${optionValue}\"]`)?.focus();\n }\n\n function handleTriggerKeyDown(e: KeyboardEvent<HTMLButtonElement>) {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setOpen(true);\n }\n }\n\n function handleSearchKeyDown(e: KeyboardEvent<HTMLInputElement>) {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n focusOption(enabledValues[0]);\n }\n if (e.key === 'Enter' && enabledValues.length === 1) {\n e.preventDefault();\n select(enabledValues[0]);\n }\n }\n\n function handleOptionKeyDown(e: KeyboardEvent<HTMLButtonElement>, currentValue: T) {\n const currentIndex = enabledValues.indexOf(currentValue);\n if (currentIndex === -1) return;\n\n let nextIndex: number | null = null;\n if (e.key === 'ArrowDown') nextIndex = (currentIndex + 1) % enabledValues.length;\n if (e.key === 'ArrowUp') {\n if (searchable && currentIndex === 0) {\n e.preventDefault();\n searchRef.current?.focus();\n return;\n }\n nextIndex = (currentIndex - 1 + enabledValues.length) % enabledValues.length;\n }\n if (e.key === 'Home') nextIndex = 0;\n if (e.key === 'End') nextIndex = enabledValues.length - 1;\n\n if (nextIndex !== null) {\n e.preventDefault();\n focusOption(enabledValues[nextIndex]);\n }\n }\n\n function select(optionValue: T) {\n onChange(optionValue);\n close();\n triggerRef.current?.focus();\n }\n\n return (\n <div\n className={[styles.field, className].filter(Boolean).join(' ')}\n ref={rootRef}\n data-testid={dataTestId}\n >\n {label && (\n <FieldLabel htmlFor={triggerId} className={labelClassName}>\n {label}\n </FieldLabel>\n )}\n <button\n ref={triggerRef}\n id={triggerId}\n type=\"button\"\n role=\"combobox\"\n className={`${styles.trigger} ${styles[size]} ${error ? styles.errorWrap : ''}`}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? listboxId : undefined}\n aria-label={label ? undefined : ariaLabel}\n autoFocus={autoFocus}\n disabled={disabled}\n onClick={() => (open ? close() : setOpen(true))}\n onKeyDown={handleTriggerKeyDown}\n >\n {selected?.icon && <span className={styles.icon}>{selected.icon}</span>}\n <span className={`${styles.value} ${!selected ? styles.placeholder : ''}`}>\n {selected ? selected.label : placeholder}\n </span>\n <span className={`${styles.chevron} ${open ? styles.chevronOpen : ''}`}>\n <ChevronDown />\n </span>\n </button>\n {open && (\n <div ref={menuRef} className={`${styles.menuWrap} ${openUpward ? styles.menuWrapUp : ''}`}>\n <Menu role=\"presentation\" style={{ width: '100%' }}>\n {searchable && (\n <input\n ref={searchRef}\n type=\"text\"\n className={styles.search}\n value={query}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n aria-controls={listboxId}\n autoComplete=\"off\"\n spellCheck={false}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setQuery(e.target.value)}\n onKeyDown={handleSearchKeyDown}\n />\n )}\n <div id={listboxId} role=\"listbox\" aria-label={label ?? ariaLabel} className={styles.list}>\n {visibleOptions.length === 0 ? (\n <div className={styles.noResults} role=\"presentation\">\n {noResultsText}\n </div>\n ) : (\n visibleOptions.map((opt) => (\n <MenuItem\n key={opt.value}\n data-value={opt.value}\n role=\"option\"\n aria-selected={opt.value === value}\n icon={opt.icon}\n selected={opt.value === value}\n disabled={opt.disabled}\n onClick={() => select(opt.value)}\n onKeyDown={(e) => handleOptionKeyDown(e, opt.value)}\n >\n {opt.label}\n </MenuItem>\n ))\n )}\n </div>\n </Menu>\n </div>\n )}\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helperText}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n",".highlight {\n background: var(--brand-bg);\n color: var(--brand-dark);\n border-radius: 3px;\n padding: 0 1px;\n}\n","import { Fragment } from 'react';\nimport styles from './HighlightText.module.css';\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nexport function HighlightText({ text, query }: { text: string; query: string }) {\n if (!query) return <>{text}</>;\n\n const parts = text.split(new RegExp(`(${escapeRegExp(query)})`, 'ig'));\n return (\n <>\n {parts.map((part, i) =>\n part.toLowerCase() === query.toLowerCase() ? (\n <mark key={i} className={styles.highlight}>\n {part}\n </mark>\n ) : (\n <Fragment key={i}>{part}</Fragment>\n ),\n )}\n </>\n );\n}\n",".group {\n position: relative;\n}\n.btn {\n display: flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n border-radius: 12px;\n padding: 12px;\n font-family: inherit;\n font-size: 1rem;\n color: var(--text-primary);\n cursor: pointer;\n transition:\n background 0.2s ease-out,\n box-shadow 0.2s ease-out,\n transform 0.2s ease-out;\n}\n.btn:hover {\n background: rgba(10, 10, 11, 0.04);\n}\n.btn:active {\n background: var(--brand-bg);\n box-shadow: inset 0 2px 1px 0 rgba(0, 140, 216, 0.25);\n transform: scale(0.95);\n}\n.caret {\n color: var(--text-tertiary);\n display: flex;\n align-items: center;\n}\n.caret svg {\n width: 14px;\n height: 14px;\n}\n.label {\n color: var(--text-secondary);\n}\n.badge {\n position: absolute;\n top: 2px;\n right: 2px;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n border-radius: 999px;\n background: var(--brand-main, #0a84d8);\n color: #fff;\n font-size: 0.65rem;\n font-weight: var(--font-weight-semibold);\n line-height: 16px;\n text-align: center;\n}\n.value {\n color: var(--text-primary);\n font-weight: var(--font-weight-medium);\n}\n.panel {\n display: none;\n position: absolute;\n top: calc(100% + 6px);\n left: 0;\n background: #fff;\n border-radius: 12px;\n min-width: 220px;\n width: fit-content;\n max-height: 280px;\n overflow-y: auto;\n box-shadow:\n inset 0 0 0 1px var(--border),\n 0 8px 24px rgba(0, 0, 0, 0.12);\n z-index: 50;\n}\n.panel.open {\n display: block;\n}\n.panelRight {\n left: auto;\n right: 0;\n}\n.panelWide {\n min-width: 260px;\n padding-bottom: 4px;\n}\n.sectionHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 12px 14px 4px;\n}\n.sectionLabel {\n font-size: 0.75rem;\n font-weight: var(--font-weight-semibold);\n color: var(--text-tertiary);\n text-transform: uppercase;\n letter-spacing: 0.02em;\n}\n.allToggle {\n background: none;\n border: none;\n padding: 0;\n font-family: inherit;\n font-size: 0.75rem;\n font-weight: var(--font-weight-semibold);\n color: var(--brand-main, #0a84d8);\n cursor: pointer;\n}\n.allToggle:hover {\n text-decoration: underline;\n}\n.divider {\n height: 1px;\n background: var(--border);\n margin: 4px 0;\n}\n.option {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px;\n border-radius: 8px;\n font-size: 1rem;\n cursor: pointer;\n}\n.option:hover {\n background: var(--bg);\n}\n.search {\n width: calc(100% - 16px);\n box-sizing: border-box;\n border: none;\n box-shadow: inset 0 0 0 1px var(--border-input);\n border-radius: 8px;\n padding: 8px 12px;\n margin: 8px;\n font-family: inherit;\n font-size: 1rem;\n margin-bottom: 0;\n}\n.search:focus {\n outline: none;\n box-shadow: inset 0 0 0 1px var(--brand-main);\n}\n.optionsList {\n padding: 4px 4px;\n}\n.empty {\n padding: 7px 8px;\n color: var(--text-tertiary);\n font-size: 0.85rem;\n}\n","import { useState } from 'react';\nimport { Checkbox } from './Checkbox';\nimport styles from './FilterSection.module.css';\n\ninterface FilterSectionProps<T extends string> {\n label: string;\n options: T[];\n optionLabel: (opt: T) => string;\n activeSet: Set<T>;\n onToggle: (opt: T) => void;\n onSetAll?: (opts: T[]) => void;\n searchable?: boolean;\n}\n\nexport function FilterSection<T extends string>({\n label,\n options,\n optionLabel,\n activeSet,\n onToggle,\n onSetAll,\n searchable,\n}: FilterSectionProps<T>) {\n const [query, setQuery] = useState('');\n\n const q = query.trim().toLowerCase();\n const matches = q ? options.filter((opt) => optionLabel(opt).toLowerCase().includes(q)) : options;\n const allSelected = options.length > 0 && activeSet.size === options.length;\n\n return (\n <div>\n <div className={styles.sectionHeader}>\n <div className={styles.sectionLabel}>{label}</div>\n {onSetAll && (\n <button\n type=\"button\"\n className={styles.allToggle}\n onClick={() => onSetAll(allSelected ? [] : options)}\n >\n {allSelected ? 'Deselect all' : 'Select all'}\n </button>\n )}\n </div>\n {searchable && (\n <input\n type=\"text\"\n className={styles.search}\n placeholder={`Search ${label.toLowerCase()}…`}\n autoComplete=\"off\"\n value={query}\n onClick={(e) => e.stopPropagation()}\n onChange={(e) => setQuery(e.target.value)}\n />\n )}\n <div className={styles.optionsList}>\n {matches.length === 0 && <div className={styles.empty}>No match</div>}\n {matches.map((opt) => (\n <Checkbox\n key={opt}\n className={styles.option}\n checked={activeSet.has(opt)}\n onChange={() => onToggle(opt)}\n label={optionLabel(opt)}\n />\n ))}\n </div>\n </div>\n );\n}\n",".line,\n.box {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.indicator {\n position: absolute;\n left: 0;\n pointer-events: none;\n transition: translate 0.25s cubic-bezier(0.39, 0.575, 0.565, 1), width 0.25s ease,\n scale 0.125s cubic-bezier(0.39, 0.575, 0.565, 1);\n}\n\n.indicator.settling {\n transition: scale 0.1s linear;\n}\n\n.indicatorLine {\n bottom: 0;\n height: 2px;\n background: var(--brand-main);\n}\n\n.indicatorBox {\n top: 4px;\n bottom: 4px;\n border-radius: 8px;\n background: var(--card-surface);\n box-shadow: 0 0 1px 0.5px var(--border);\n}\n\n.tab {\n position: relative;\n isolation: isolate;\n overflow: hidden;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n border: none;\n border-radius: 8px 8px 0 0;\n font-family: inherit;\n font-weight: var(--font-weight-regular);\n cursor: pointer;\n white-space: nowrap;\n transition: color 0.15s ease-out, background 0.15s ease-out, box-shadow 0.15s ease-out;\n}\n\n.tab::before {\n content: '';\n position: absolute;\n left: 50%;\n bottom: 0;\n width: 40%;\n aspect-ratio: 1;\n border-radius: 50%;\n transform: translate(-50%, 100%) scale(1);\n transition: transform 0.3s cubic-bezier(0.39, 0.575, 0.565, 1);\n z-index: -1;\n pointer-events: none;\n background: rgba(var(--brand-main-rgb), 0.08);\n}\n.tab:hover:not(:disabled)::before {\n transform: translate(-50%, 15%) scale(4);\n}\n.tab:active:not(:disabled)::before {\n background: rgba(var(--brand-main-rgb), 0.28);\n}\n\n.tab:disabled {\n color: var(--disabled-text);\n cursor: not-allowed;\n}\n.tab:disabled::before {\n display: none;\n}\n\n.tab.selected:hover::before {\n display: none;\n}\n\n.tab:focus-visible {\n outline: 2px solid var(--brand-main);\n outline-offset: 2px;\n}\n\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: -4px;\n flex-shrink: 0;\n}\n.icon svg {\n width: 100%;\n height: 100%;\n}\n\n/* Line variant */\n\n.line {\n box-shadow: inset 0 -1px 0 0 var(--border);\n}\n\n.line .tab {\n background: transparent;\n padding: 12px 8px;\n font-size: 1rem;\n color: var(--text-secondary);\n}\n.line .tab:hover:not(:disabled) {\n color: var(--brand-main);\n}\n.line .tab.selected {\n color: var(--text-primary);\n font-weight: var(--font-weight-medium);\n}\n\n/* Box variant */\n\n.box {\n box-sizing: border-box;\n height: var(--control-height-base);\n background: var(--ink-5);\n border-radius: var(--radius-base);\n padding: 4px;\n gap: 4px;\n box-shadow: inset 0 0 0.5px 1px #e3e3e3;\n}\n\n.box .tab {\n height: calc(var(--control-height-base) - 8px);\n border-radius: 8px;\n padding: 0 14px;\n font-size: 0.9rem;\n background: transparent;\n color: var(--text-secondary);\n}\n.box .tab:hover:not(:disabled) {\n color: var(--brand-main);\n /* box-shadow: 0 0 0px 1px var(--brand-main-30); */\n}\n.box .tab.selected {\n color: var(--text-primary);\n font-weight: var(--font-weight-medium);\n}\n\n.box.sm {\n height: var(--control-height-sm);\n border-radius: var(--radius-sm);\n}\n.box.sm .tab {\n height: calc(var(--control-height-sm) - 8px);\n border-radius: 6px;\n padding: 0 14px;\n}\n.box.sm .indicatorBox {\n border-radius: 6px;\n}\n","import {\n useLayoutEffect,\n useRef,\n useState,\n type KeyboardEvent,\n type ReactNode,\n type TransitionEvent,\n} from 'react';\nimport styles from './Tabs.module.css';\n\ntype TabsVariant = 'line' | 'box';\ntype TabsSize = 'base' | 'sm';\n\ninterface TabItem {\n value: string;\n label: ReactNode;\n icon?: ReactNode;\n disabled?: boolean;\n}\n\ninterface TabsProps {\n items: TabItem[];\n value: string;\n onChange: (value: string) => void;\n variant?: TabsVariant;\n size?: TabsSize;\n 'aria-label'?: string;\n}\n\nexport function Tabs({ items, value, onChange, variant = 'line', size = 'base', ...rest }: TabsProps) {\n const enabledValues = items.filter((item) => !item.disabled).map((item) => item.value);\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const tabRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\n const prevValueRef = useRef(value);\n const [indicatorStyle, setIndicatorStyle] = useState<{ left: number; width: number } | null>(\n null,\n );\n const [pillPhase, setPillPhase] = useState<'idle' | 'moving' | 'settling'>('idle');\n\n useLayoutEffect(() => {\n const selectedTab = tabRefs.current.get(value);\n if (!selectedTab) return;\n setIndicatorStyle({ left: selectedTab.offsetLeft, width: selectedTab.offsetWidth });\n\n if (variant === 'box' && prevValueRef.current !== value) {\n setPillPhase('moving');\n }\n prevValueRef.current = value;\n }, [value, items, variant, size]);\n\n function handlePillTransitionEnd(event: TransitionEvent<HTMLSpanElement>) {\n if (event.propertyName !== 'scale') return;\n if (pillPhase === 'moving') setPillPhase('settling');\n else if (pillPhase === 'settling') setPillPhase('idle');\n }\n\n useLayoutEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const observer = new ResizeObserver(() => {\n const selectedTab = tabRefs.current.get(value);\n if (!selectedTab) return;\n setIndicatorStyle({ left: selectedTab.offsetLeft, width: selectedTab.offsetWidth });\n });\n observer.observe(container);\n return () => observer.disconnect();\n }, [value]);\n\n function handleKeyDown(event: KeyboardEvent<HTMLDivElement>) {\n const currentIndex = enabledValues.indexOf(value);\n if (currentIndex === -1) return;\n\n let nextIndex: number | null = null;\n if (event.key === 'ArrowRight') nextIndex = (currentIndex + 1) % enabledValues.length;\n if (event.key === 'ArrowLeft') {\n nextIndex = (currentIndex - 1 + enabledValues.length) % enabledValues.length;\n }\n if (event.key === 'Home') nextIndex = 0;\n if (event.key === 'End') nextIndex = enabledValues.length - 1;\n\n if (nextIndex !== null) {\n event.preventDefault();\n onChange(enabledValues[nextIndex]);\n }\n }\n\n return (\n <div\n ref={containerRef}\n role=\"tablist\"\n className={[styles[variant], variant === 'box' && size === 'sm' && styles.sm]\n .filter(Boolean)\n .join(' ')}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {indicatorStyle && (\n <span\n aria-hidden\n className={[\n styles.indicator,\n variant === 'line' ? styles.indicatorLine : styles.indicatorBox,\n pillPhase === 'settling' && styles.settling,\n ]\n .filter(Boolean)\n .join(' ')}\n onTransitionEnd={handlePillTransitionEnd}\n style={{\n translate: `${indicatorStyle.left}px 0`,\n scale: variant === 'box' && pillPhase === 'moving' ? 0.92 : 1,\n width: indicatorStyle.width,\n }}\n />\n )}\n {items.map((item) => {\n const selected = item.value === value;\n return (\n <button\n key={item.value}\n ref={(node) => {\n if (node) tabRefs.current.set(item.value, node);\n else tabRefs.current.delete(item.value);\n }}\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n disabled={item.disabled}\n tabIndex={selected ? 0 : -1}\n className={[styles.tab, selected && styles.selected].filter(Boolean).join(' ')}\n onClick={() => !item.disabled && onChange(item.value)}\n >\n {item.icon && <span className={styles.icon}>{item.icon}</span>}\n {item.label}\n </button>\n );\n })}\n </div>\n );\n}\n","export function formatDuration(mins: number): string {\n const h = Math.floor(mins / 60);\n const m = mins % 60;\n return `${h}h:${String(m).padStart(2, '0')}m`;\n}\n\n/** HH:MM:SS — seconds are a stable per-video display detail, not tracked in the data model. */\nexport function formatDurationHMS(mins: number, seconds: number): string {\n const h = Math.floor(mins / 60);\n const m = mins % 60;\n const pad = (n: number) => String(n).padStart(2, '0');\n return `${pad(h)}:${pad(m)}:${pad(seconds)}`;\n}\n"],"x_google_ignoreList":[11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["__iconData","__iconData","__iconData","__iconData"],"sources":["../src/components/Button.module.css","../src/components/Button.tsx","../src/components/Card.module.css","../src/components/Card.tsx","../src/components/Tag.module.css","../src/components/Tag.tsx","../src/components/TagGroup.module.css","../src/components/OptionGroup.module.css","../src/components/FieldLabel.module.css","../src/components/FieldLabel.tsx","../src/components/TagGroup.tsx","../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/toLucideIconData.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../node_modules/lucide-react/dist/esm/shared/src/build/defaultAttributes.mjs","../node_modules/lucide-react/dist/esm/shared/src/build/buildLucideIconNode.mjs","../node_modules/lucide-react/dist/esm/shared/src/build/buildLucideIconForReact.mjs","../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../node_modules/lucide-react/dist/esm/context.mjs","../node_modules/lucide-react/dist/esm/Icon.mjs","../node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../node_modules/lucide-react/dist/esm/icons/check.mjs","../node_modules/lucide-react/dist/esm/icons/chevron-down.mjs","../node_modules/lucide-react/dist/esm/icons/eye-off.mjs","../node_modules/lucide-react/dist/esm/icons/eye.mjs","../node_modules/lucide-react/dist/esm/icons/search.mjs","../src/components/Toolbar.module.css","../src/components/Toolbar.tsx","../src/components/Checkbox.module.css","../src/components/Checkbox.tsx","../src/components/RadioButton.module.css","../src/components/RadioButton.tsx","../src/components/Switch.module.css","../src/components/Switch.tsx","../src/components/TextField.module.css","../src/components/TextField.tsx","../src/components/PasswordField.tsx","../src/components/DateField.tsx","../src/components/NumberField.module.css","../src/components/NumberField.tsx","../src/components/Menu.module.css","../src/components/Menu.tsx","../src/components/MenuItem.module.css","../src/components/MenuItem.tsx","../src/components/Dropdown.module.css","../src/components/Dropdown.tsx","../src/components/HighlightText.module.css","../src/components/HighlightText.tsx","../src/components/FilterSection.module.css","../src/components/FilterSection.tsx","../src/components/Tabs.module.css","../src/components/Tabs.tsx","../src/utils/format.ts"],"sourcesContent":[".primary,\n.secondary,\n.tertiary,\n.dangerous {\n position: relative;\n isolation: isolate;\n overflow: hidden;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n border: none;\n font-family: inherit;\n font-weight: var(--font-weight-regular);\n letter-spacing: 0.01em;\n cursor: pointer;\n transition:\n color 0.2s ease,\n transform 0.2s ease-out;\n}\n.primary:focus-visible,\n.secondary:focus-visible,\n.tertiary:focus-visible,\n.dangerous:focus-visible {\n outline: 2px solid var(--brand-main);\n outline-offset: 2px;\n}\n.primary:active:not(:disabled),\n.secondary:active:not(:disabled),\n.tertiary:active:not(:disabled),\n.dangerous:active:not(:disabled) {\n transform: scale(0.95);\n}\n\n.sm {\n height: var(--control-height-sm);\n border-radius: var(--radius-sm);\n padding: 0 12px;\n font-size: 0.9rem;\n}\n.base {\n height: var(--control-height-base);\n border-radius: var(--radius-base);\n padding: 0 16px;\n font-size: 0.9rem;\n}\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n}\n.icon:first-child {\n margin-left: -4px;\n}\n.icon:last-child {\n margin-right: -4px;\n}\n.icon svg {\n width: 100%;\n height: 100%;\n}\n\n.iconOnly {\n box-sizing: border-box;\n padding: 0;\n}\n.iconOnly.sm {\n width: var(--control-height-sm);\n}\n.iconOnly.base {\n width: var(--control-height-base);\n}\n.fullWidth {\n width: 100%;\n}\n.primary::before,\n.secondary::before,\n.tertiary::before,\n.dangerous::before {\n content: '';\n position: absolute;\n left: 50%;\n bottom: 0;\n width: 24%;\n aspect-ratio: 1;\n border-radius: 50%;\n transform: translate(-50%, 100%) scale(1);\n transition: transform 0.3s cubic-bezier(0.39, 0.575, 0.565, 1);\n z-index: -1;\n pointer-events: none;\n}\n.primary:hover::before,\n.secondary:hover::before,\n.tertiary:hover::before,\n.dangerous:hover::before {\n transform: translate(-50%, 15%) scale(8);\n}\n\n.primary {\n background: var(--brand-dark);\n color: #fff;\n font-weight: var(--font-weight-regular);\n letter-spacing: 0.02em;\n}\n.primary::before {\n background: rgba(255, 255, 255, 0.08);\n}\n.primary:active:not(:disabled)::before {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.secondary {\n background: var(--depth-5);\n color: var(--text-primary);\n}\n.secondary .icon {\n color: var(--text-secondary);\n}\n.secondary::before {\n background: rgba(var(--brand-main-rgb), 0.08);\n}\n.secondary:active:not(:disabled)::before {\n background: rgba(var(--brand-main-rgb), 0.28);\n}\n.secondary:hover .icon {\n color: var(--brand-main);\n}\n.secondary:hover {\n color: var(--brand-main);\n}\n\n.tertiary {\n background: transparent;\n color: var(--text-secondary);\n}\n.tertiary::before {\n background: rgba(var(--brand-main-rgb), 0.16);\n}\n.tertiary:active:not(:disabled)::before {\n background: rgba(var(--brand-main-rgb), 0.28);\n}\n.tertiary:hover,\n.tertiary:active:not(:disabled) {\n background: var(--bg);\n}\n.tertiary:hover {\n color: var(--brand-main);\n}\n\n.dangerous {\n background: var(--danger-bg);\n color: var(--danger-text-dark);\n}\n.dangerous::before {\n background: rgba(var(--danger-rgb), 0.16);\n}\n.dangerous:active:not(:disabled)::before {\n background: rgba(var(--danger-rgb), 0.28);\n}\n\n.primary:disabled,\n.secondary:disabled,\n.tertiary:disabled,\n.dangerous:disabled {\n background: var(--disabled-bg);\n color: var(--disabled-text);\n cursor: not-allowed;\n}\n.primary:disabled:hover,\n.secondary:disabled:hover,\n.tertiary:disabled:hover,\n.dangerous:disabled:hover {\n color: var(--disabled-text);\n}\n.primary:disabled::before,\n.secondary:disabled::before,\n.tertiary:disabled::before,\n.dangerous:disabled::before {\n display: none;\n}\n","import type { ButtonHTMLAttributes, ReactNode, Ref } from 'react';\nimport styles from './Button.module.css';\n\ntype ButtonVariant = 'primary' | 'secondary' | 'tertiary' | 'dangerous';\ntype ButtonSize = 'sm' | 'base';\n\ninterface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Icon shown before the label. Omit `children` to render an icon-only square button — pass `aria-label` in that case. */\n leadingIcon?: ReactNode;\n /** Icon shown after the label. */\n trailingIcon?: ReactNode;\n /** Stretch to the width of the container. */\n fullWidth?: boolean;\n children?: ReactNode;\n /**\n * Extra classes for layout around the button — responsive visibility,\n * positioning, spacing. Appended after the variant classes.\n */\n className?: string;\n ref?: Ref<HTMLButtonElement>;\n}\n\nexport function Button({\n variant = 'primary',\n size = 'base',\n leadingIcon,\n trailingIcon,\n fullWidth,\n children,\n className,\n ref,\n ...rest\n}: ButtonProps) {\n const iconOnly = !children && Boolean(leadingIcon);\n const classes = [\n styles[variant],\n styles[size],\n iconOnly && styles.iconOnly,\n fullWidth && styles.fullWidth,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n return (\n <button ref={ref} type=\"button\" className={classes} {...rest}>\n {leadingIcon && <span className={styles.icon}>{leadingIcon}</span>}\n {children}\n {trailingIcon && <span className={styles.icon}>{trailingIcon}</span>}\n </button>\n );\n}\n",".wrap {\n position: relative;\n width: 220px;\n flex: 0 0 220px;\n}\n.wrap:hover {\n z-index: 10;\n}\n.fluid {\n width: 100%;\n flex: none;\n}\n\n.backing {\n position: absolute;\n left: 6px;\n right: 6px;\n bottom: -4px;\n height: 10px;\n background: var(--card-surface);\n box-shadow: inset 0 0 0 1px var(--border);\n border-radius: 0 0 14px 14px;\n z-index: 0;\n}\n.backing.completed {\n background: var(--success-bg);\n box-shadow: inset 0 0 0 1px #bfe3cc;\n}\n\n.card {\n position: relative;\n z-index: 1;\n width: 100%;\n box-sizing: border-box;\n background: var(--card-surface);\n box-shadow:\n inset 0 0 0 1px #efefef,\n 0 1px 2px rgba(16, 24, 32, 0.04);\n border-radius: 16px;\n padding: 12px 14px;\n cursor: default;\n transition:\n box-shadow 0.2s,\n transform 0.1s;\n}\n.card.interactive {\n cursor: pointer;\n}\n.card.interactive:active {\n transform: scale(0.98, 0.95);\n}\n.card.grabbable {\n cursor: grab;\n}\n.card.grabbable:active {\n cursor: grabbing;\n}\n.card.dragging,\n.card.dragging:hover {\n box-shadow:\n inset 0 0 0 1px #efefef,\n 0 1px 2px rgba(16, 24, 32, 0.04);\n}\n.card.interactive:hover {\n box-shadow:\n inset 0 0 0 1px #efefef,\n 0 0 0 2px var(--brand-main);\n}\n.card.completed {\n background: var(--success-bg);\n box-shadow:\n inset 0 0 0 1px #bfe3cc,\n 0 1px 2px rgba(16, 24, 32, 0.04),\n 0 2px 8px rgba(16, 24, 32, 0.06);\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport styles from './Card.module.css';\n\ninterface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, 'className'> {\n /** Shows a second sheet behind the card, for representing a stack/batch. */\n stacked?: boolean;\n /** Success-tinted surface, e.g. a completed task. */\n completed?: boolean;\n /** Adds pointer cursor + accent hover ring. */\n interactive?: boolean;\n /** Grab cursor, for drag sources — pair with `interactive`. */\n draggable?: boolean;\n /** Suppresses the hover ring while a drag is in progress. */\n dragging?: boolean;\n /** Card fills its container width instead of a fixed width. */\n fluid?: boolean;\n children: ReactNode;\n}\n\nexport function Card({\n stacked,\n completed,\n interactive,\n draggable,\n dragging,\n fluid,\n children,\n ...rest\n}: CardProps) {\n return (\n <div className={`${styles.wrap} ${fluid ? styles.fluid : ''}`}>\n {stacked && <div className={`${styles.backing} ${completed ? styles.completed : ''}`} />}\n <div\n className={[\n styles.card,\n completed ? styles.completed : '',\n interactive ? styles.interactive : '',\n draggable ? styles.grabbable : '',\n dragging ? styles.dragging : '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children}\n </div>\n </div>\n );\n}\n",".neutral,\n.pill,\n.accent,\n.success,\n.danger,\n.count {\n display: inline-flex;\n align-items: center;\n font-weight: var(--font-weight-medium);\n white-space: nowrap;\n}\n\n/* Square tags — e.g. day badges, worker names, video panel tags */\n.neutral {\n color: var(--text-tertiary);\n font-size: 0.75rem;\n background: var(--depth-5);\n border-radius: 6px;\n padding: 2px 7px;\n}\n\n/* Pill tags — e.g. BPO group labels, total-duration tags */\n.pill {\n background: var(--card-surface);\n box-shadow: inset 0 0 0 1px var(--border);\n color: var(--text-tertiary);\n font-size: 0.8rem;\n padding: 3px 11px;\n border-radius: 999px;\n}\n\n/* Accent pill — e.g. \"current\" stat, read-only banner badge */\n.accent {\n background: var(--brand-bg);\n color: var(--brand-dark);\n font-size: 0.8rem;\n padding: 3px 11px;\n border-radius: 999px;\n}\n\n/* Success pill — e.g. \"time spent\" stat */\n.success {\n background: var(--success-bg);\n color: var(--success-text);\n font-size: 0.8rem;\n padding: 3px 11px;\n border-radius: 999px;\n}\n\n/* Danger — square (e.g. ASAP tag) reuses the same token pair as the\n pill-shaped status variant; only the shape differs by context. */\n.danger {\n color: var(--danger-text);\n font-size: 0.75rem;\n background: var(--danger-bg);\n border-radius: 6px;\n padding: 2px 7px;\n}\n\n/* Count badge — small solid circle, e.g. active-filter count */\n.count {\n justify-content: center;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n border-radius: 999px;\n background: var(--brand-main);\n color: #fff;\n font-size: 0.65rem;\n line-height: 16px;\n text-align: center;\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport styles from './Tag.module.css';\n\ntype TagVariant = 'neutral' | 'pill' | 'accent' | 'success' | 'danger' | 'count';\n\ninterface TagProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'className'> {\n variant?: TagVariant;\n children: ReactNode;\n}\n\nexport function Tag({ variant = 'neutral', children, ...rest }: TagProps) {\n return (\n <span className={styles[variant]} {...rest}>\n {children}\n </span>\n );\n}\n",".group {\n display: inline-flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n}\n\n.group.sm {\n gap: 6px;\n}\n\n.chip {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n appearance: none;\n border: none;\n outline: none;\n font-family: inherit;\n font-weight: var(--font-weight-medium);\n white-space: nowrap;\n border-radius: 999px;\n cursor: pointer;\n transition:\n background-color 0.15s ease-out,\n color 0.15s ease-out,\n transform 0.1s ease-out;\n background: var(--depth-5);\n color: var(--text-primary);\n}\n\n.group.base .chip {\n height: 36px;\n padding: 0 14px;\n font-size: 0.85rem;\n}\n\n.group.sm .chip {\n height: 24px;\n padding: 0 9px;\n font-size: 0.75rem;\n}\n\n.chip:hover:not(:disabled) {\n background: var(--surface-muted);\n}\n\n.chip:active:not(:disabled) {\n transform: scale(0.95);\n background: var(--surface-muted);\n}\n\n.chip:focus-visible {\n outline: 2px solid var(--brand-main);\n outline-offset: 2px;\n}\n\n.chip.selected {\n background: var(--brand-bg);\n color: var(--brand-main);\n}\n\n.chip.selected:hover:not(:disabled) {\n background: var(--brand-main-20);\n}\n\n.chip.selected:active:not(:disabled) {\n background: var(--brand-main-30);\n}\n\n.chip:disabled {\n background: var(--disabled-bg);\n color: var(--disabled-text);\n cursor: not-allowed;\n}\n",".group {\n display: inline-flex;\n flex-direction: column;\n gap: 0;\n}\n\n.groupLabel {\n margin-bottom: 6px;\n}\n",".label {\n font-size: 0.85rem;\n font-weight: var(--font-weight-medium);\n color: var(--text-primary);\n padding-left: 4px;\n}\n","import type { ReactNode } from 'react';\nimport styles from './FieldLabel.module.css';\n\ninterface FieldLabelProps {\n children: ReactNode;\n /** Pass the id of the control this labels to render a real `<label htmlFor>`. */\n htmlFor?: string;\n className?: string;\n}\n\nexport function FieldLabel({ children, htmlFor, className }: FieldLabelProps) {\n const classes = `${styles.label} ${className ?? ''}`.trim();\n if (htmlFor) {\n return (\n <label className={classes} htmlFor={htmlFor}>\n {children}\n </label>\n );\n }\n return <span className={classes}>{children}</span>;\n}\n","import type { ReactNode } from 'react';\nimport styles from './TagGroup.module.css';\nimport groupStyles from './OptionGroup.module.css';\nimport { FieldLabel } from './FieldLabel';\n\ntype TagGroupSize = 'sm' | 'base';\n\ninterface TagGroupItem {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\ninterface TagGroupProps {\n items: TagGroupItem[];\n value: string[];\n onChange: (value: string[]) => void;\n size?: TagGroupSize;\n disabled?: boolean;\n label?: ReactNode;\n 'aria-label'?: string;\n}\n\nexport function TagGroup({\n items,\n value,\n onChange,\n size = 'base',\n disabled = false,\n label,\n ...rest\n}: TagGroupProps) {\n function toggle(itemValue: string) {\n const next = value.includes(itemValue)\n ? value.filter((v) => v !== itemValue)\n : [...value, itemValue];\n onChange(next);\n }\n\n const tags = (\n <div\n role=\"group\"\n aria-label={label ? undefined : rest['aria-label']}\n className={`${styles.group} ${styles[size]}`}\n >\n {items.map((item) => {\n const selected = value.includes(item.value);\n const isDisabled = disabled || item.disabled;\n return (\n <button\n key={item.value}\n type=\"button\"\n aria-pressed={selected}\n disabled={isDisabled}\n className={[styles.chip, selected && styles.selected].filter(Boolean).join(' ')}\n onClick={() => !isDisabled && toggle(item.value)}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n );\n\n if (!label) return tags;\n\n return (\n <div className={groupStyles.group} {...rest}>\n <FieldLabel className={groupStyles.groupLabel}>{label}</FieldLabel>\n {tags}\n </div>\n );\n}\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string?.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toKebabCase } from './toKebabCase.mjs';\n\nfunction toLucideIconData(iconName, iconNode, aliases = []) {\n if (iconNode == null) {\n throw new Error(\"[lucide]: iconNode is required when icon name is used\");\n }\n return {\n name: toKebabCase(iconName),\n size: 24,\n node: iconNode,\n ...aliases.length > 0 ? { aliases } : {}\n };\n}\n\nexport { toLucideIconData };\n//# sourceMappingURL=toLucideIconData.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => {\n let out = \"\";\n let upperNext = false;\n for (const ch of string) {\n if (ch === \"-\" || ch === \"_\" || ch <= \" \") {\n upperNext = out.length > 0;\n continue;\n }\n if (out.length === 0) {\n out += ch.toLowerCase();\n } else {\n out += upperNext ? ch.toUpperCase() : ch;\n }\n upperNext = false;\n }\n return out;\n};\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.mjs';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": 2,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport defaultAttributes from './defaultAttributes.mjs';\nimport { mergeClasses } from '../utils/mergeClasses.mjs';\n\nfunction isDefined(value) {\n return value !== null && value !== void 0;\n}\nfunction buildLucideIconNode(icon, params = {}) {\n const attributeNames = params.attributeNames ?? {};\n const getAttributeName = (attributeName) => attributeNames[attributeName] ?? attributeName;\n const viewBoxWidth = icon.size ?? icon.width ?? defaultAttributes[\"width\"];\n const viewBoxHeight = icon.size ?? icon.height ?? defaultAttributes[\"height\"];\n const aliasClassNames = icon.aliases?.filter((alias) => typeof alias === \"string\" && alias.trim() !== \"\").map((alias) => `lucide-${alias}`) ?? [];\n const iconClassNames = [...icon.name ? [`lucide-${icon.name}`] : [], ...aliasClassNames];\n const classNamesFromClassName = params.className?.split(\" \").filter(Boolean) ?? [];\n const className = params.includeDefaultClasses === false ? mergeClasses(...classNamesFromClassName) : mergeClasses(\"lucide\", ...iconClassNames, ...classNamesFromClassName);\n const calculatedStrokeWidth = params.absoluteStrokeWidth ? Number(params.strokeWidth ?? defaultAttributes[\"stroke-width\"]) * Number(icon.size ?? icon.width ?? defaultAttributes[\"width\"]) / Number(params.size ?? params.width ?? defaultAttributes[\"width\"]) : params.strokeWidth ?? defaultAttributes[\"stroke-width\"];\n const attributes = {\n ...Object.entries(defaultAttributes).reduce((attrs, [attrName, value]) => {\n attrs[getAttributeName(attrName)] = value;\n return attrs;\n }, {}),\n ...\"color\" in params && params.color && {\n [getAttributeName(\"stroke\")]: params.color\n },\n ...\"size\" in params && isDefined(params.size) && {\n [getAttributeName(\"width\")]: params.size,\n [getAttributeName(\"height\")]: params.size\n },\n ...\"width\" in params && isDefined(params.width) && {\n [getAttributeName(\"width\")]: params.width\n },\n ...\"height\" in params && isDefined(params.height) && {\n [getAttributeName(\"height\")]: params.height\n },\n [getAttributeName(\"stroke-width\")]: calculatedStrokeWidth,\n ...className && {\n [getAttributeName(\"class\")]: className\n },\n [getAttributeName(\"viewBox\")]: `0 0 ${viewBoxWidth} ${viewBoxHeight}`,\n ...params.hasA11yProp === false ? {\n [getAttributeName(\"aria-hidden\")]: \"true\"\n } : {},\n ...\"attributes\" in params && params.attributes\n };\n return [\n \"svg\",\n attributes,\n icon.node.map((child) => {\n const [name, attrs, children] = child;\n const nextAttrs = params.nonScalingStroke ? { [getAttributeName(\"vector-effect\")]: \"non-scaling-stroke\", ...attrs } : attrs;\n return children ? [name, nextAttrs, children] : [name, nextAttrs];\n })\n ];\n}\n\nexport { buildLucideIconNode as default };\n//# sourceMappingURL=buildLucideIconNode.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport buildLucideIconNode from './buildLucideIconNode.mjs';\n\nfunction buildLucideIconForReact(icon, params = {}) {\n return buildLucideIconNode(icon, {\n ...params,\n attributeNames: {\n ...params.attributeNames,\n class: \"className\",\n \"stroke-width\": \"strokeWidth\",\n \"stroke-linecap\": \"strokeLinecap\",\n \"stroke-linejoin\": \"strokeLinejoin\",\n \"vector-effect\": \"vectorEffect\"\n }\n });\n}\n\nexport { buildLucideIconForReact as default };\n//# sourceMappingURL=buildLucideIconForReact.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, nonScalingStroke, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport buildLucideIconForReact from './shared/src/build/buildLucideIconForReact.mjs';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.mjs';\nimport { useLucideContext } from './context.mjs';\n\nconst Icon = forwardRef(\n ({\n color,\n size,\n width,\n height,\n strokeWidth,\n absoluteStrokeWidth,\n nonScalingStroke,\n className = \"\",\n children,\n iconNode = [],\n icon = {\n node: iconNode,\n aliases: [],\n size: 24\n },\n ...rest\n }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n nonScalingStroke: contextNonScalingStroke = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const hasAccessibleProp = Boolean(children) || hasA11yProp(rest);\n const [name, svgAttributes, builtIconNode = []] = buildLucideIconForReact(icon, {\n color: color ?? contextColor,\n width: width ?? size ?? contextSize,\n height: height ?? size ?? contextSize,\n strokeWidth: strokeWidth ?? contextStrokeWidth,\n absoluteStrokeWidth: absoluteStrokeWidth ?? contextAbsoluteStrokeWidth,\n nonScalingStroke: nonScalingStroke ?? contextNonScalingStroke,\n className: mergeClasses(contextClass, className),\n hasA11yProp: hasAccessibleProp,\n attributes: rest\n });\n return createElement(\n name,\n {\n ref,\n ...svgAttributes\n },\n [\n ...builtIconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { toLucideIconData } from './shared/src/utils/toLucideIconData.mjs';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.mjs';\nimport Icon from './Icon.mjs';\n\nfunction createLucideIcon(iconDataOrName, iconNode = [], aliases = []) {\n const iconData = typeof iconDataOrName === \"string\" ? toLucideIconData(iconDataOrName, iconNode, aliases) : iconDataOrName;\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n icon: iconData,\n className,\n ...props\n })\n );\n if (iconData.name) {\n Component.displayName = toPascalCase(iconData.name);\n }\n return Component;\n}\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"check\",\n size: 24,\n node: [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]]\n};\n__iconData.node;\nconst Check = createLucideIcon(__iconData);\n\nexport { __iconData, Check as default };\n//# sourceMappingURL=check.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"chevron-down\",\n size: 24,\n node: [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]]\n};\n__iconData.node;\nconst ChevronDown = createLucideIcon(__iconData);\n\nexport { __iconData, ChevronDown as default };\n//# sourceMappingURL=chevron-down.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"eye-off\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n key: \"ct8e1f\"\n }\n ],\n [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n [\n \"path\",\n {\n d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n key: \"13bj9a\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n ]\n};\n__iconData.node;\nconst EyeOff = createLucideIcon(__iconData);\n\nexport { __iconData, EyeOff as default };\n//# sourceMappingURL=eye-off.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"eye\",\n size: 24,\n node: [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n ]\n};\n__iconData.node;\nconst Eye = createLucideIcon(__iconData);\n\nexport { __iconData, Eye as default };\n//# sourceMappingURL=eye.mjs.map\n","/**\n * @license lucide-react v1.46.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconData = {\n name: \"search\",\n size: 24,\n node: [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n ]\n};\n__iconData.node;\nconst Search = createLucideIcon(__iconData);\n\nexport { __iconData, Search as default };\n//# sourceMappingURL=search.mjs.map\n",".toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 0 8px;\n background: var(--card-surface);\n border-radius: 16px;\n box-shadow:\n inset 0 0 0 1px var(--border),\n 0 1px 2px rgba(16, 24, 32, 0.04),\n 0 2px 8px rgba(16, 24, 32, 0.06);\n}\n.searchWrap {\n position: relative;\n flex: 1;\n min-width: 0;\n}\n.searchWrap::after {\n content: '';\n position: absolute;\n left: 36px;\n right: 0;\n bottom: 0;\n height: 2px;\n background: var(--brand-main);\n opacity: 0;\n pointer-events: none;\n}\n.searchWrap:focus-within::after {\n opacity: 1;\n}\n.searchIcon {\n position: absolute;\n top: 50%;\n left: 12px;\n width: 16px;\n height: 16px;\n transform: translateY(-53%);\n color: var(--text-tertiary);\n pointer-events: none;\n}\n.searchIcon svg {\n width: 100%;\n height: 100%;\n}\n.search {\n width: 100%;\n box-sizing: border-box;\n border: none;\n padding: 16px 52px 16px 36px;\n font-family: inherit;\n font-size: 1rem;\n color: var(--text-primary);\n background: none;\n box-shadow: inset -1px 0 0 var(--border);\n}\n.search:focus {\n outline: none;\n}\n.searchShortcut {\n position: absolute;\n top: 50%;\n right: 8px;\n transform: translateY(-50%);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 2px 6px;\n border-radius: 6px;\n background: var(--bg);\n color: var(--text-tertiary);\n font-size: 0.75rem;\n font-weight: var(--font-weight-semibold);\n letter-spacing: 0.02em;\n pointer-events: none;\n}\n.controls {\n display: flex;\n align-items: center;\n flex: none;\n}\n","import { useEffect, useRef, type ChangeEvent, type ReactNode } from 'react';\nimport { Search } from 'lucide-react';\nimport styles from './Toolbar.module.css';\n\ninterface ToolbarProps {\n searchValue?: string;\n onSearchChange?: (value: string) => void;\n placeholder?: string;\n /** Text shown in the keyboard-shortcut badge, e.g. \"⌘K\". Omit to hide the badge. */\n shortcutLabel?: string;\n /** Focuses the search input when Cmd/Ctrl + the shortcut key is pressed. */\n shortcutKey?: string;\n /** Right-side content — filter/sort controls, actions, etc. */\n children?: ReactNode;\n}\n\nexport function Toolbar({\n searchValue,\n onSearchChange,\n placeholder = 'Search…',\n shortcutLabel = '⌘K',\n shortcutKey = 'k',\n children,\n}: ToolbarProps) {\n const searchRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n function onKeyDown(e: KeyboardEvent) {\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === shortcutKey.toLowerCase()) {\n e.preventDefault();\n searchRef.current?.focus();\n }\n }\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [shortcutKey]);\n\n return (\n <div className={styles.toolbar}>\n <div className={styles.searchWrap}>\n <span className={styles.searchIcon}>\n <Search />\n </span>\n <input\n ref={searchRef}\n type=\"text\"\n className={styles.search}\n placeholder={placeholder}\n autoComplete=\"off\"\n value={searchValue}\n onChange={(e: ChangeEvent<HTMLInputElement>) => onSearchChange?.(e.target.value)}\n />\n {shortcutLabel && (\n <span className={styles.searchShortcut} aria-hidden=\"true\">\n {shortcutLabel}\n </span>\n )}\n </div>\n {children && <div className={styles.controls}>{children}</div>}\n </div>\n );\n}\n",".checkbox {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n padding: 8px 4px;\n}\n.control {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n}\n.labelText {\n font-size: 0.85rem;\n color: var(--text-primary);\n transition: color 0.2s ease-out;\n}\n.checkbox:hover .labelText {\n color: var(--brand-main);\n}\n.input {\n position: absolute;\n inset: 0;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n}\n.box {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n border-radius: 6px;\n background: var(--depth-5);\n box-shadow: inset 0 0 0 1px var(--border);\n transition:\n background-color 0.2s cubic-bezier(0, 0, 0.2, 1),\n box-shadow 0.2s cubic-bezier(0, 0, 0.2, 1),\n transform 0.1s cubic-bezier(0, 0, 0.2, 1);\n}\n.checkbox:hover .box {\n box-shadow: 0 0 0 1px var(--brand-main);\n}\n.input:focus-visible + .box {\n outline: 2px solid var(--brand-main);\n outline-offset: 2px;\n}\n.input:active + .box {\n transform: scale(0.88);\n}\n.input:checked + .box {\n background: var(--brand-main);\n box-shadow: inset 0 0 0 1px var(--brand-main);\n}\n.checkbox:hover .input:checked + .box {\n box-shadow: 0 0 0 1px var(--brand-main);\n}\n.icon {\n width: 10px;\n height: 10px;\n overflow: visible;\n}\n.icon polyline {\n fill: none;\n stroke: #fff;\n stroke-width: 2.5px;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-dasharray: 22px;\n stroke-dashoffset: 22px;\n transition: stroke-dashoffset 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.input:checked + .box .icon polyline {\n stroke-dashoffset: 0px;\n}\n.checkbox:has(.input:disabled),\n.input:disabled {\n cursor: not-allowed;\n}\n.checkbox:has(.input:disabled) .labelText {\n color: var(--disabled-text);\n}\n.checkbox:has(.input:disabled) .box {\n background: var(--surface-muted);\n box-shadow: inset 0 0 0 1px var(--border);\n transform: none;\n}\n.checkbox:has(.input:disabled) .input:checked + .box {\n background: var(--disabled-bg);\n box-shadow: inset 0 0 0 1px var(--disabled-bg);\n}\n","import type { ChangeEvent, FocusEvent, ReactNode, Ref } from 'react';\nimport styles from './Checkbox.module.css';\nimport groupStyles from './OptionGroup.module.css';\nimport { FieldLabel } from './FieldLabel';\n\ninterface CheckboxProps {\n checked: boolean;\n onChange: (e: ChangeEvent<HTMLInputElement>) => void;\n onBlur?: (e: FocusEvent<HTMLInputElement>) => void;\n name?: string;\n label?: ReactNode;\n ariaLabel?: string;\n disabled?: boolean;\n className?: string;\n ref?: Ref<HTMLInputElement>;\n}\n\nexport function Checkbox({\n checked,\n onChange,\n onBlur,\n name,\n label,\n ariaLabel,\n disabled,\n className,\n ref,\n}: CheckboxProps) {\n return (\n <label className={`${styles.checkbox} ${className ?? ''}`}>\n <span className={styles.control}>\n <input\n ref={ref}\n type=\"checkbox\"\n className={styles.input}\n checked={checked}\n onChange={onChange}\n onBlur={onBlur}\n name={name}\n aria-label={ariaLabel}\n disabled={disabled}\n />\n <span className={styles.box}>\n <svg className={styles.icon} viewBox=\"0 0 17 18\" aria-hidden=\"true\">\n <polyline points=\"1 9 7 14 15 4\" />\n </svg>\n </span>\n </span>\n {label && <span className={styles.labelText}>{label}</span>}\n </label>\n );\n}\n\ninterface CheckboxGroupItem {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\ninterface CheckboxGroupProps {\n label?: ReactNode;\n items: CheckboxGroupItem[];\n value: string[];\n onChange: (value: string[]) => void;\n disabled?: boolean;\n 'aria-label'?: string;\n}\n\nexport function CheckboxGroup({ label, items, value, onChange, disabled, ...rest }: CheckboxGroupProps) {\n function toggle(itemValue: string) {\n const next = value.includes(itemValue)\n ? value.filter((v) => v !== itemValue)\n : [...value, itemValue];\n onChange(next);\n }\n\n return (\n <div role=\"group\" aria-label={label ? undefined : rest['aria-label']} className={groupStyles.group}>\n {label && <FieldLabel className={groupStyles.groupLabel}>{label}</FieldLabel>}\n {items.map((item) => (\n <Checkbox\n key={item.value}\n checked={value.includes(item.value)}\n onChange={() => toggle(item.value)}\n label={item.label}\n disabled={disabled || item.disabled}\n />\n ))}\n </div>\n );\n}\n",".radio {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n padding: 8px 4px;\n}\n.control {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n}\n.labelText {\n font-size: 0.85rem;\n color: var(--text-primary);\n transition: color 0.2s ease-out;\n}\n.radio:hover .labelText {\n color: var(--brand-main);\n}\n.input {\n position: absolute;\n inset: 0;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n}\n.circle {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--depth-5);\n box-shadow: inset 0 0 0 1px var(--border);\n transition:\n background-color 0.2s cubic-bezier(0, 0, 0.2, 1),\n box-shadow 0.2s cubic-bezier(0, 0, 0.2, 1),\n transform 0.1s cubic-bezier(0, 0, 0.2, 1);\n}\n.radio:hover .circle {\n box-shadow: 0 0 0 1px var(--brand-main);\n}\n.input:focus-visible + .circle {\n outline: 2px solid var(--brand-main);\n outline-offset: 2px;\n}\n.input:active + .circle {\n transform: scale(0.88);\n}\n.input:checked + .circle {\n background: var(--brand-main);\n box-shadow: inset 0 0 0 1px var(--brand-main);\n}\n.radio:hover .input:checked + .circle {\n box-shadow: 0 0 0 1px var(--brand-main);\n}\n.dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: #fff;\n transform: scale(0);\n transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.input:checked + .circle .dot {\n transform: scale(1);\n}\n.radio:has(.input:disabled),\n.input:disabled {\n cursor: not-allowed;\n}\n.radio:has(.input:disabled) .labelText {\n color: var(--disabled-text);\n}\n.radio:has(.input:disabled) .circle {\n background: var(--surface-muted);\n box-shadow: inset 0 0 0 1px var(--border);\n transform: none;\n}\n.radio:has(.input:disabled) .input:checked + .circle {\n background: var(--disabled-bg);\n box-shadow: inset 0 0 0 1px var(--disabled-bg);\n}\n","import type { ChangeEvent, FocusEvent, ReactNode, Ref } from 'react';\nimport styles from './RadioButton.module.css';\nimport groupStyles from './OptionGroup.module.css';\nimport { FieldLabel } from './FieldLabel';\n\ninterface RadioButtonProps {\n checked: boolean;\n onChange: (e: ChangeEvent<HTMLInputElement>) => void;\n onBlur?: (e: FocusEvent<HTMLInputElement>) => void;\n name?: string;\n value?: string;\n label?: ReactNode;\n ariaLabel?: string;\n disabled?: boolean;\n className?: string;\n ref?: Ref<HTMLInputElement>;\n}\n\nexport function RadioButton({\n checked,\n onChange,\n onBlur,\n name,\n value,\n label,\n ariaLabel,\n disabled,\n className,\n ref,\n}: RadioButtonProps) {\n return (\n <label className={`${styles.radio} ${className ?? ''}`}>\n <span className={styles.control}>\n <input\n ref={ref}\n type=\"radio\"\n className={styles.input}\n checked={checked}\n onChange={onChange}\n onBlur={onBlur}\n name={name}\n value={value}\n aria-label={ariaLabel}\n disabled={disabled}\n />\n <span className={styles.circle}>\n <span className={styles.dot} />\n </span>\n </span>\n {label && <span className={styles.labelText}>{label}</span>}\n </label>\n );\n}\n\ninterface RadioGroupItem {\n value: string;\n label: ReactNode;\n disabled?: boolean;\n}\n\ninterface RadioGroupProps {\n label?: ReactNode;\n name: string;\n items: RadioGroupItem[];\n value: string;\n onChange: (value: string) => void;\n disabled?: boolean;\n 'aria-label'?: string;\n}\n\nexport function RadioGroup({ label, name, items, value, onChange, disabled, ...rest }: RadioGroupProps) {\n return (\n <div\n role=\"radiogroup\"\n aria-label={label ? undefined : rest['aria-label']}\n className={groupStyles.group}\n >\n {label && <FieldLabel className={groupStyles.groupLabel}>{label}</FieldLabel>}\n {items.map((item) => (\n <RadioButton\n key={item.value}\n name={name}\n value={item.value}\n checked={value === item.value}\n onChange={() => onChange(item.value)}\n label={item.label}\n disabled={disabled || item.disabled}\n />\n ))}\n </div>\n );\n}\n",".switch {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n}\n.switch:has(.input:disabled) {\n cursor: not-allowed;\n}\n.control {\n position: relative;\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n}\n.input {\n position: absolute;\n inset: 0;\n margin: 0;\n opacity: 0;\n cursor: pointer;\n}\n.input:disabled {\n cursor: not-allowed;\n}\n.track {\n position: relative;\n width: 100%;\n height: 100%;\n border-radius: 999px;\n background: var(--depth-5);\n box-shadow: inset 0 0 0 1px var(--border);\n transition:\n background-color 0.2s cubic-bezier(0, 0, 0.2, 1),\n box-shadow 0.2s cubic-bezier(0, 0, 0.2, 1);\n}\n.switch:hover .track {\n box-shadow: inset 0 0 0 1px var(--brand-main);\n}\n.input:focus-visible + .track {\n outline: 2px solid var(--brand-main);\n outline-offset: 2px;\n}\n.input:checked + .track {\n background: var(--brand-main);\n box-shadow: inset 0 0 0 1px var(--brand-main);\n}\n.input:disabled + .track {\n background: var(--surface-muted);\n box-shadow: inset 0 0 0 1px var(--border);\n}\n.thumb {\n position: absolute;\n top: 50%;\n left: 2px;\n border-radius: 50%;\n background: #fff;\n transform: translateY(-50%);\n transition: transform 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n}\n.input:checked + .track .thumb {\n transform: translateY(-50%) translateX(var(--switch-thumb-travel));\n}\n\n.sm {\n width: 32px;\n height: 18px;\n --switch-thumb-travel: 14px;\n}\n.sm .thumb {\n width: 14px;\n height: 14px;\n}\n.base {\n width: 40px;\n height: 22px;\n --switch-thumb-travel: 18px;\n}\n.base .thumb {\n width: 18px;\n height: 18px;\n}\n\n.labelText {\n font-size: 0.85rem;\n color: var(--text-primary);\n transition: color 0.2s ease-out;\n}\n.switch:hover .labelText {\n color: var(--brand-main);\n}\n.switch:has(.input:disabled) .labelText {\n color: var(--disabled-text);\n}\n","import type { ChangeEvent, ReactNode } from 'react';\nimport styles from './Switch.module.css';\n\ntype SwitchSize = 'sm' | 'base';\n\ninterface SwitchProps {\n checked: boolean;\n onChange: (e: ChangeEvent<HTMLInputElement>) => void;\n size?: SwitchSize;\n label?: ReactNode;\n ariaLabel?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport function Switch({\n checked,\n onChange,\n size = 'base',\n label,\n ariaLabel,\n disabled,\n className,\n}: SwitchProps) {\n return (\n <label className={`${styles.switch} ${className ?? ''}`}>\n <span className={`${styles.control} ${styles[size]}`}>\n <input\n type=\"checkbox\"\n role=\"switch\"\n className={styles.input}\n checked={checked}\n onChange={onChange}\n aria-label={ariaLabel}\n disabled={disabled}\n />\n <span className={styles.track}>\n <span className={styles.thumb} />\n </span>\n </span>\n {label && <span className={styles.labelText}>{label}</span>}\n </label>\n );\n}\n",".field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.inputWrap {\n position: relative;\n display: flex;\n align-items: center;\n background: var(--card-surface);\n box-shadow: inset 0 0 0 1px var(--border-input);\n transition: box-shadow 0.2s ease-out;\n}\n.inputWrap:focus-within {\n box-shadow:\n inset 0 0 0 0 var(--border-input),\n 0 0 0 2px var(--brand-main);\n}\n.errorWrap,\n.errorWrap:focus-within {\n box-shadow: inset 0 0 0 1px var(--danger-text);\n}\n.inputWrap:has(.input:disabled) {\n background: var(--surface-muted);\n}\n\n.toolbar {\n background: none;\n box-shadow: none;\n}\n.toolbar::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n height: 2px;\n background: var(--brand-main);\n opacity: 0;\n transition: opacity 0.2s ease-out;\n}\n.toolbar:focus-within {\n box-shadow: none;\n}\n.toolbar:focus-within::after {\n opacity: 1;\n}\n.toolbar.errorWrap,\n.toolbar.errorWrap:focus-within {\n box-shadow: none;\n}\n.toolbar.errorWrap::after {\n background: var(--danger-text);\n opacity: 1;\n}\n\n.sm {\n height: var(--control-height-sm);\n border-radius: var(--radius-sm);\n}\n.sm .input {\n padding: 0 12px;\n font-size: 0.9rem;\n}\n.base {\n height: var(--control-height-base);\n border-radius: var(--radius-base);\n}\n.base .input {\n padding: 0 14px;\n font-size: 0.9rem;\n}\n.inputWrap:has(.icon) .input {\n padding-left: 8px;\n}\n\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: 12px;\n color: var(--text-tertiary);\n flex-shrink: 0;\n}\n.icon svg {\n width: 100%;\n height: 100%;\n}\n.input {\n flex: 1;\n min-width: 0;\n box-sizing: border-box;\n border: none;\n background: none;\n font-family: inherit;\n color: var(--text-primary);\n font-weight: var(--font-weight-regular);\n}\n.input:focus {\n outline: none;\n}\n.input::placeholder {\n color: var(--text-tertiary);\n}\n.input:disabled {\n color: var(--disabled-text);\n cursor: not-allowed;\n}\n.helperText {\n font-size: 0.78rem;\n color: var(--text-tertiary);\n padding-left: 8px;\n}\n.errorText {\n font-size: 0.78rem;\n color: var(--danger-text);\n}\n.trailing {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n margin-right: 6px;\n padding: 0;\n border: none;\n border-radius: 8px;\n background: none;\n color: var(--text-tertiary);\n cursor: pointer;\n flex-shrink: 0;\n transition: color 0.15s ease-out, background 0.15s ease-out;\n}\n.trailing svg {\n width: 16px;\n height: 16px;\n}\n.trailing:hover:not(:disabled) {\n color: var(--brand-main);\n background: var(--brand-main-5);\n}\n.trailing:focus-visible {\n outline: 2px solid var(--brand-main);\n outline-offset: -2px;\n}\n.trailing:disabled {\n cursor: not-allowed;\n}\n.pickerInput {\n cursor: pointer;\n caret-color: transparent;\n}\n.pickerInput:disabled {\n cursor: not-allowed;\n}\n","import { useId, type InputHTMLAttributes, type ReactNode, type Ref } from 'react';\nimport styles from './TextField.module.css';\nimport { FieldLabel } from './FieldLabel';\n\ntype TextFieldSize = 'sm' | 'base';\ntype TextFieldVariant = 'default' | 'toolbar';\n\ninterface TextFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'className' | 'size'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: TextFieldSize;\n variant?: TextFieldVariant;\n leadingIcon?: ReactNode;\n /** Extra classes for layout around the field — width, flex growth. Appended after its own class. */\n className?: string;\n /** Reaches the <input>, e.g. for a form library to focus a field that failed validation. */\n ref?: Ref<HTMLInputElement>;\n}\n\nexport function TextField({\n label,\n helperText,\n error,\n size = 'base',\n variant = 'default',\n leadingIcon,\n id,\n className,\n ref,\n ...rest\n}: TextFieldProps) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n\n return (\n <div className={[styles.field, className].filter(Boolean).join(' ')}>\n {label && <FieldLabel htmlFor={inputId}>{label}</FieldLabel>}\n <div\n className={`${styles.inputWrap} ${styles[variant]} ${styles[size]} ${error ? styles.errorWrap : ''}`}\n >\n {leadingIcon && <span className={styles.icon}>{leadingIcon}</span>}\n <input ref={ref} id={inputId} className={styles.input} {...rest} />\n </div>\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helperText}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n","import { useId, useState, type InputHTMLAttributes, type Ref } from 'react';\nimport { Eye, EyeOff } from 'lucide-react';\nimport styles from './TextField.module.css';\nimport { FieldLabel } from './FieldLabel';\n\ntype PasswordFieldSize = 'sm' | 'base';\n\ninterface PasswordFieldProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'className' | 'size' | 'type'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: PasswordFieldSize;\n /** Accessible name of the toggle while the value is hidden. */\n showLabel?: string;\n /** Accessible name of the toggle while the value is shown. */\n hideLabel?: string;\n /** Start with the value shown. */\n defaultVisible?: boolean;\n /** Extra classes for layout around the field. */\n className?: string;\n ref?: Ref<HTMLInputElement>;\n}\n\n/** A text field for passwords and PINs, with a button that shows or hides what was typed. */\nexport function PasswordField({\n label,\n helperText,\n error,\n size = 'base',\n showLabel = 'Show password',\n hideLabel = 'Hide password',\n defaultVisible = false,\n id,\n className,\n ref,\n disabled,\n ...rest\n}: PasswordFieldProps) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const [visible, setVisible] = useState(defaultVisible);\n\n return (\n <div className={[styles.field, className].filter(Boolean).join(' ')}>\n {label && <FieldLabel htmlFor={inputId}>{label}</FieldLabel>}\n <div className={`${styles.inputWrap} ${styles.default} ${styles[size]} ${error ? styles.errorWrap : ''}`}>\n <input\n ref={ref}\n id={inputId}\n className={styles.input}\n type={visible ? 'text' : 'password'}\n autoComplete=\"off\"\n disabled={disabled}\n {...rest}\n />\n <button\n type=\"button\"\n className={styles.trailing}\n aria-label={visible ? hideLabel : showLabel}\n aria-pressed={visible}\n aria-controls={inputId}\n disabled={disabled}\n onClick={() => setVisible((v) => !v)}\n >\n {visible ? <EyeOff /> : <Eye />}\n </button>\n </div>\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helperText}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n","import { useId, useRef, type InputHTMLAttributes, type Ref } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport styles from './TextField.module.css';\nimport { FieldLabel } from './FieldLabel';\n\ntype DateFieldSize = 'sm' | 'base';\n\ninterface DateFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'className' | 'size'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: DateFieldSize;\n /** Accessible name of the button next to the date. */\n openLabel?: string;\n /** Extra classes for layout around the field. */\n className?: string;\n ref?: Ref<HTMLInputElement>;\n}\n\n/**\n * Shows a picked date and opens a calendar on click. It renders no calendar\n * itself: pass it as the input of a date picker (e.g. react-datepicker's\n * `customInput`), which supplies `value`, `onClick` and `ref`.\n */\nexport function DateField({\n label,\n helperText,\n error,\n size = 'base',\n openLabel = 'Open calendar',\n id,\n className,\n ref,\n onClick,\n disabled,\n ...rest\n}: DateFieldProps) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n function setRefs(el: HTMLInputElement | null) {\n inputRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) ref.current = el;\n }\n\n return (\n <div className={[styles.field, className].filter(Boolean).join(' ')}>\n {label && <FieldLabel htmlFor={inputId}>{label}</FieldLabel>}\n <div className={`${styles.inputWrap} ${styles.default} ${styles[size]} ${error ? styles.errorWrap : ''}`}>\n <input\n {...rest}\n ref={setRefs}\n id={inputId}\n className={`${styles.input} ${styles.pickerInput}`}\n inputMode=\"none\"\n readOnly\n disabled={disabled}\n onClick={onClick}\n />\n <button\n type=\"button\"\n tabIndex={-1}\n className={styles.trailing}\n aria-label={openLabel}\n disabled={disabled}\n onClick={() => inputRef.current?.click()}\n >\n <ChevronDown />\n </button>\n </div>\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helperText}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n",".field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.inputWrap {\n position: relative;\n display: flex;\n align-items: center;\n background: var(--card-surface);\n box-shadow: inset 0 0 0 1px var(--border-input);\n transition: box-shadow 0.2s ease-out;\n}\n.inputWrap:focus-within {\n box-shadow:\n inset 0 0 0 0 var(--border-input),\n 0 0 0 2px var(--brand-main);\n}\n.errorWrap,\n.errorWrap:focus-within {\n box-shadow: inset 0 0 0 1px var(--danger-text);\n}\n.inputWrap:has(.input:disabled) {\n background: var(--surface-muted);\n}\n\n.sm {\n height: var(--control-height-sm);\n border-radius: var(--radius-sm);\n}\n.sm .input {\n padding: 0 8px;\n font-size: 0.85rem;\n}\n.base {\n height: var(--control-height-base);\n border-radius: var(--radius-base);\n}\n.base .input {\n padding: 0 10px;\n font-size: 0.9rem;\n}\n.inputWrap:has(.prefix) .input {\n padding-left: 4px;\n}\n.inputWrap:has(.suffix) .input {\n padding-right: 4px;\n}\n\n.prefix,\n.suffix {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n color: var(--text-tertiary);\n font-size: 0.78rem;\n white-space: nowrap;\n}\n.prefix {\n margin-left: 10px;\n}\n.suffix {\n margin-right: 10px;\n}\n\n.input {\n flex: 1;\n min-width: 0;\n box-sizing: border-box;\n border: none;\n background: none;\n font-family: inherit;\n color: var(--text-primary);\n font-weight: var(--font-weight-regular);\n font-variant-numeric: tabular-nums;\n appearance: textfield;\n -moz-appearance: textfield;\n}\n.input::-webkit-outer-spin-button,\n.input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n.input:focus {\n outline: none;\n}\n.input::placeholder {\n color: var(--text-tertiary);\n}\n.input:disabled {\n color: var(--disabled-text);\n cursor: not-allowed;\n}\n.helperText {\n font-size: 0.78rem;\n color: var(--text-tertiary);\n padding-left: 8px;\n}\n.errorText {\n font-size: 0.78rem;\n color: var(--danger-text);\n}\n","import { useId, type InputHTMLAttributes, type ReactNode } from 'react';\nimport styles from './NumberField.module.css';\nimport { FieldLabel } from './FieldLabel';\n\ntype NumberFieldSize = 'sm' | 'base';\n\ninterface NumberFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'className' | 'size' | 'prefix'> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: NumberFieldSize;\n /** Rendered inline before the value, e.g. \"$\". */\n prefix?: ReactNode;\n /** Rendered inline after the value, e.g. \"cows\", \"/cwt\". */\n suffix?: ReactNode;\n}\n\nexport function NumberField({\n label,\n helperText,\n error,\n size = 'base',\n prefix,\n suffix,\n id,\n ...rest\n}: NumberFieldProps) {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n\n return (\n <div className={styles.field}>\n {label && <FieldLabel htmlFor={inputId}>{label}</FieldLabel>}\n <div className={`${styles.inputWrap} ${styles[size]} ${error ? styles.errorWrap : ''}`}>\n {prefix && <span className={styles.prefix}>{prefix}</span>}\n <input id={inputId} className={styles.input} {...rest} />\n {suffix && <span className={styles.suffix}>{suffix}</span>}\n </div>\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helperText}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n",".menu {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 180px;\n width: fit-content;\n padding: 4px;\n box-sizing: border-box;\n background: var(--card-surface);\n border-radius: 12px;\n box-shadow:\n inset 0 0 0 1px var(--border),\n 0 8px 24px rgba(0, 0, 0, 0.12);\n}\n.divider {\n height: 1px;\n background: var(--border);\n margin: 4px 6px;\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport styles from './Menu.module.css';\n\ninterface MenuProps extends Omit<HTMLAttributes<HTMLDivElement>, 'className'> {\n children: ReactNode;\n}\n\nexport function Menu({ children, ...rest }: MenuProps) {\n return (\n <div role=\"menu\" className={styles.menu} {...rest}>\n {children}\n </div>\n );\n}\n\nexport function MenuDivider() {\n return <div className={styles.divider} role=\"separator\" />;\n}\n",".item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: var(--control-height-sm);\n box-sizing: border-box;\n border: none;\n background: none;\n border-radius: 8px;\n padding: 8px 12px;\n font-family: inherit;\n font-size: 0.9rem;\n color: var(--text-primary);\n text-align: left;\n cursor: pointer;\n transition:\n background 0.15s ease-out,\n color 0.15s ease-out;\n}\n.item:hover:not(:disabled) {\n background: var(--brand-bg);\n color: var(--brand-dark);\n}\n.item:hover:not(:disabled) .icon,\n.item:hover:not(:disabled) .check {\n color: var(--brand-dark);\n}\n.item:active:not(:disabled) {\n background: var(--brand-main-20);\n}\n.item:focus-visible {\n outline: 2px solid var(--brand-main);\n outline-offset: -2px;\n}\n.item:disabled {\n color: var(--disabled-text);\n cursor: not-allowed;\n}\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: -2px;\n color: var(--text-tertiary);\n flex-shrink: 0;\n}\n.icon svg {\n width: 100%;\n height: 100%;\n}\n.label {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.trailing {\n color: var(--text-tertiary);\n font-size: 0.8rem;\n margin-right: -2px;\n flex-shrink: 0;\n}\n.selected {\n background: var(--depth-5);\n color: var(--text-primary);\n font-weight: var(--font-weight-medium);\n}\n.selected .icon {\n color: var(--text-primary);\n}\n.check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: 8px;\n color: var(--text-primary);\n flex-shrink: 0;\n}\n.selected .check {\n color: var(--brand-main);\n}\n.check svg {\n width: 100%;\n height: 100%;\n}\n.destructive {\n color: var(--danger-text);\n}\n.destructive .icon {\n color: var(--danger-text);\n}\n.destructive:hover:not(:disabled) {\n background: var(--danger-bg);\n color: var(--danger-text);\n}\n.destructive:hover:not(:disabled) .icon {\n color: var(--danger-text);\n}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react';\nimport { Check } from 'lucide-react';\nimport styles from './MenuItem.module.css';\n\ninterface MenuItemProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'className'> {\n icon?: ReactNode;\n trailing?: ReactNode;\n selected?: boolean;\n destructive?: boolean;\n children: ReactNode;\n}\n\nexport function MenuItem({ icon, trailing, selected, destructive, children, ...rest }: MenuItemProps) {\n const classes = [styles.item, selected && styles.selected, destructive && styles.destructive]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button type=\"button\" role=\"menuitem\" className={classes} {...rest}>\n {icon && <span className={styles.icon}>{icon}</span>}\n <span className={styles.label}>{children}</span>\n {trailing && <span className={styles.trailing}>{trailing}</span>}\n {selected && (\n <span className={styles.check}>\n <Check />\n </span>\n )}\n </button>\n );\n}\n",".field {\n position: relative;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n.trigger {\n display: flex;\n align-items: center;\n width: 100%;\n box-sizing: border-box;\n border: none;\n background: var(--card-surface);\n box-shadow: inset 0 0 0 1px var(--border-input);\n font-family: inherit;\n color: var(--text-primary);\n cursor: pointer;\n transition: box-shadow 0.2s ease-out;\n}\n.trigger:focus-visible {\n box-shadow:\n inset 0 0 0 0 var(--border-input),\n 0 0 0 2px var(--brand-main);\n}\n.errorWrap {\n box-shadow: inset 0 0 0 1px var(--danger-text);\n}\n.trigger:disabled {\n background: var(--surface-muted);\n color: var(--disabled-text);\n cursor: not-allowed;\n}\n\n.sm {\n border-radius: var(--radius-sm);\n}\n.sm.trigger {\n height: var(--control-height-sm);\n padding: 0 12px;\n font-size: 0.9rem;\n}\n.base {\n border-radius: var(--radius-base);\n}\n.base.trigger {\n height: var(--control-height-base);\n padding: 0 14px;\n font-size: 0.9rem;\n}\n\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-right: 8px;\n color: var(--text-tertiary);\n flex-shrink: 0;\n}\n.icon svg {\n width: 100%;\n height: 100%;\n}\n.value {\n flex: 1;\n min-width: 0;\n text-align: left;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.placeholder {\n color: var(--text-tertiary);\n}\n.chevron {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: 8px;\n color: var(--text-tertiary);\n flex-shrink: 0;\n transition: transform 0.15s ease-out;\n}\n.chevron svg {\n width: 100%;\n height: 100%;\n}\n.chevronOpen {\n transform: rotate(180deg);\n}\n\n.menuWrap {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n right: 0;\n z-index: 10;\n}\n.menuWrapUp {\n top: auto;\n bottom: calc(100% + 4px);\n}\n.list {\n display: flex;\n flex-direction: column;\n gap: 2px;\n max-height: 320px;\n overflow-y: auto;\n}\n.search {\n width: 100%;\n height: var(--control-height-sm);\n box-sizing: border-box;\n margin-bottom: 4px;\n padding: 0 10px;\n border: none;\n border-radius: 8px;\n background: var(--card-surface);\n box-shadow: inset 0 0 0 1px var(--border-input);\n font-family: inherit;\n font-size: 0.9rem;\n color: var(--text-primary);\n outline: none;\n}\n.search:focus {\n box-shadow: inset 0 0 0 1.5px var(--brand-main);\n}\n.noResults {\n padding: 8px 12px;\n font-size: 0.9rem;\n color: var(--text-tertiary);\n}\n.helperText {\n font-size: 0.78rem;\n color: var(--text-tertiary);\n padding-left: 8px;\n}\n.errorText {\n font-size: 0.78rem;\n color: var(--danger-text);\n}\n","import {\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type ChangeEvent,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { Menu } from './Menu';\nimport { MenuItem } from './MenuItem';\nimport { FieldLabel } from './FieldLabel';\nimport styles from './Dropdown.module.css';\n\ntype DropdownSize = 'sm' | 'base';\n\ninterface DropdownOption<T extends string> {\n value: T;\n label: ReactNode;\n icon?: ReactNode;\n disabled?: boolean;\n /** Text matched by search when `label` is not a plain string. */\n searchText?: string;\n}\n\ninterface DropdownProps<T extends string> {\n label?: string;\n helperText?: string;\n error?: string;\n size?: DropdownSize;\n placeholder?: string;\n options: DropdownOption<T>[];\n value?: T;\n onChange: (value: T) => void;\n disabled?: boolean;\n /** Show a search field at the top of the open menu that filters options by their text. */\n searchable?: boolean;\n /** Placeholder for the search field. */\n searchPlaceholder?: string;\n /** Shown in place of the options when a search matches nothing. */\n noResultsText?: ReactNode;\n /** Open the menu on first render. */\n defaultOpen?: boolean;\n /** Focus the trigger on first render. */\n autoFocus?: boolean;\n /**\n * Extra classes for layout around the field — width, responsive sizing.\n * Appended after the field's own class.\n */\n className?: string;\n /** Extra classes for the label, e.g. to hide it below a breakpoint. */\n labelClassName?: string;\n /** Accessible name when there is no visible `label`. */\n 'aria-label'?: string;\n 'data-testid'?: string;\n}\n\nfunction optionText(opt: DropdownOption<string>): string {\n if (opt.searchText !== undefined) return opt.searchText;\n return typeof opt.label === 'string' || typeof opt.label === 'number' ? String(opt.label) : '';\n}\n\nexport function Dropdown<T extends string>({\n label,\n helperText,\n error,\n size = 'base',\n placeholder = 'Select…',\n options,\n value,\n onChange,\n disabled,\n searchable,\n searchPlaceholder = 'Search…',\n noResultsText = 'No matches',\n defaultOpen = false,\n autoFocus,\n className,\n labelClassName,\n 'aria-label': ariaLabel,\n 'data-testid': dataTestId,\n}: DropdownProps<T>) {\n const [open, setOpen] = useState(defaultOpen);\n const [query, setQuery] = useState('');\n const [openUpward, setOpenUpward] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const triggerId = useId();\n const listboxId = useId();\n\n const selected = options.find((opt) => opt.value === value);\n const trimmedQuery = query.trim().toLowerCase();\n const visibleOptions =\n searchable && trimmedQuery\n ? options.filter((opt) => optionText(opt).toLowerCase().includes(trimmedQuery))\n : options;\n const enabledValues = visibleOptions.filter((opt) => !opt.disabled).map((opt) => opt.value);\n\n function close() {\n setOpen(false);\n setQuery('');\n }\n\n // Searchable menus focus the search field; others focus the selected (or first) option.\n useEffect(() => {\n if (!open) return;\n if (searchable) {\n searchRef.current?.focus();\n return;\n }\n const focusValue = value ?? enabledValues[0];\n const el = rootRef.current?.querySelector<HTMLButtonElement>(`[data-value=\"${focusValue}\"]`);\n el?.focus();\n }, [open]);\n\n // Open upward when there is not enough room below and more room above.\n useLayoutEffect(() => {\n if (!open || !menuRef.current || !rootRef.current) {\n setOpenUpward(false);\n return;\n }\n const rootRect = rootRef.current.getBoundingClientRect();\n const menuHeight = menuRef.current.getBoundingClientRect().height;\n const spaceBelow = window.innerHeight - rootRect.bottom;\n const spaceAbove = rootRect.top;\n setOpenUpward(spaceBelow < menuHeight + 8 && spaceAbove > spaceBelow);\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n function onPointerDown(e: PointerEvent) {\n if (!rootRef.current?.contains(e.target as Node)) close();\n }\n function onKeyDown(e: globalThis.KeyboardEvent) {\n if (e.key === 'Escape') {\n close();\n triggerRef.current?.focus();\n }\n }\n window.addEventListener('pointerdown', onPointerDown);\n window.addEventListener('keydown', onKeyDown);\n return () => {\n window.removeEventListener('pointerdown', onPointerDown);\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [open]);\n\n function focusOption(optionValue: T | undefined) {\n if (optionValue === undefined) return;\n rootRef.current?.querySelector<HTMLButtonElement>(`[data-value=\"${optionValue}\"]`)?.focus();\n }\n\n function handleTriggerKeyDown(e: KeyboardEvent<HTMLButtonElement>) {\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setOpen(true);\n }\n }\n\n function handleSearchKeyDown(e: KeyboardEvent<HTMLInputElement>) {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n focusOption(enabledValues[0]);\n }\n if (e.key === 'Enter' && enabledValues.length === 1) {\n e.preventDefault();\n select(enabledValues[0]);\n }\n }\n\n function handleOptionKeyDown(e: KeyboardEvent<HTMLButtonElement>, currentValue: T) {\n const currentIndex = enabledValues.indexOf(currentValue);\n if (currentIndex === -1) return;\n\n let nextIndex: number | null = null;\n if (e.key === 'ArrowDown') nextIndex = (currentIndex + 1) % enabledValues.length;\n if (e.key === 'ArrowUp') {\n if (searchable && currentIndex === 0) {\n e.preventDefault();\n searchRef.current?.focus();\n return;\n }\n nextIndex = (currentIndex - 1 + enabledValues.length) % enabledValues.length;\n }\n if (e.key === 'Home') nextIndex = 0;\n if (e.key === 'End') nextIndex = enabledValues.length - 1;\n\n if (nextIndex !== null) {\n e.preventDefault();\n focusOption(enabledValues[nextIndex]);\n }\n }\n\n function select(optionValue: T) {\n onChange(optionValue);\n close();\n triggerRef.current?.focus();\n }\n\n return (\n <div\n className={[styles.field, className].filter(Boolean).join(' ')}\n ref={rootRef}\n data-testid={dataTestId}\n >\n {label && (\n <FieldLabel htmlFor={triggerId} className={labelClassName}>\n {label}\n </FieldLabel>\n )}\n <button\n ref={triggerRef}\n id={triggerId}\n type=\"button\"\n role=\"combobox\"\n className={`${styles.trigger} ${styles[size]} ${error ? styles.errorWrap : ''}`}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? listboxId : undefined}\n aria-label={label ? undefined : ariaLabel}\n autoFocus={autoFocus}\n disabled={disabled}\n onClick={() => (open ? close() : setOpen(true))}\n onKeyDown={handleTriggerKeyDown}\n >\n {selected?.icon && <span className={styles.icon}>{selected.icon}</span>}\n <span className={`${styles.value} ${!selected ? styles.placeholder : ''}`}>\n {selected ? selected.label : placeholder}\n </span>\n <span className={`${styles.chevron} ${open ? styles.chevronOpen : ''}`}>\n <ChevronDown />\n </span>\n </button>\n {open && (\n <div ref={menuRef} className={`${styles.menuWrap} ${openUpward ? styles.menuWrapUp : ''}`}>\n <Menu role=\"presentation\" style={{ width: '100%' }}>\n {searchable && (\n <input\n ref={searchRef}\n type=\"text\"\n className={styles.search}\n value={query}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n aria-controls={listboxId}\n autoComplete=\"off\"\n spellCheck={false}\n onChange={(e: ChangeEvent<HTMLInputElement>) => setQuery(e.target.value)}\n onKeyDown={handleSearchKeyDown}\n />\n )}\n <div id={listboxId} role=\"listbox\" aria-label={label ?? ariaLabel} className={styles.list}>\n {visibleOptions.length === 0 ? (\n <div className={styles.noResults} role=\"presentation\">\n {noResultsText}\n </div>\n ) : (\n visibleOptions.map((opt) => (\n <MenuItem\n key={opt.value}\n data-value={opt.value}\n role=\"option\"\n aria-selected={opt.value === value}\n icon={opt.icon}\n selected={opt.value === value}\n disabled={opt.disabled}\n onClick={() => select(opt.value)}\n onKeyDown={(e) => handleOptionKeyDown(e, opt.value)}\n >\n {opt.label}\n </MenuItem>\n ))\n )}\n </div>\n </Menu>\n </div>\n )}\n {error ? (\n <span className={styles.errorText}>{error}</span>\n ) : helperText ? (\n <span className={styles.helperText}>{helperText}</span>\n ) : null}\n </div>\n );\n}\n",".highlight {\n background: var(--brand-bg);\n color: var(--brand-dark);\n border-radius: 3px;\n padding: 0 1px;\n}\n","import { Fragment } from 'react';\nimport styles from './HighlightText.module.css';\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nexport function HighlightText({ text, query }: { text: string; query: string }) {\n if (!query) return <>{text}</>;\n\n const parts = text.split(new RegExp(`(${escapeRegExp(query)})`, 'ig'));\n return (\n <>\n {parts.map((part, i) =>\n part.toLowerCase() === query.toLowerCase() ? (\n <mark key={i} className={styles.highlight}>\n {part}\n </mark>\n ) : (\n <Fragment key={i}>{part}</Fragment>\n ),\n )}\n </>\n );\n}\n",".group {\n position: relative;\n}\n.btn {\n display: flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n border-radius: 12px;\n padding: 12px;\n font-family: inherit;\n font-size: 1rem;\n color: var(--text-primary);\n cursor: pointer;\n transition:\n background 0.2s ease-out,\n box-shadow 0.2s ease-out,\n transform 0.2s ease-out;\n}\n.btn:hover {\n background: rgba(10, 10, 11, 0.04);\n}\n.btn:active {\n background: var(--brand-bg);\n box-shadow: inset 0 2px 1px 0 rgba(0, 140, 216, 0.25);\n transform: scale(0.95);\n}\n.caret {\n color: var(--text-tertiary);\n display: flex;\n align-items: center;\n}\n.caret svg {\n width: 14px;\n height: 14px;\n}\n.label {\n color: var(--text-secondary);\n}\n.badge {\n position: absolute;\n top: 2px;\n right: 2px;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n border-radius: 999px;\n background: var(--brand-main, #0a84d8);\n color: #fff;\n font-size: 0.65rem;\n font-weight: var(--font-weight-semibold);\n line-height: 16px;\n text-align: center;\n}\n.value {\n color: var(--text-primary);\n font-weight: var(--font-weight-medium);\n}\n.panel {\n display: none;\n position: absolute;\n top: calc(100% + 6px);\n left: 0;\n background: #fff;\n border-radius: 12px;\n min-width: 220px;\n width: fit-content;\n max-height: 280px;\n overflow-y: auto;\n box-shadow:\n inset 0 0 0 1px var(--border),\n 0 8px 24px rgba(0, 0, 0, 0.12);\n z-index: 50;\n}\n.panel.open {\n display: block;\n}\n.panelRight {\n left: auto;\n right: 0;\n}\n.panelWide {\n min-width: 260px;\n padding-bottom: 4px;\n}\n.sectionHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 12px 14px 4px;\n}\n.sectionLabel {\n font-size: 0.75rem;\n font-weight: var(--font-weight-semibold);\n color: var(--text-tertiary);\n text-transform: uppercase;\n letter-spacing: 0.02em;\n}\n.allToggle {\n background: none;\n border: none;\n padding: 0;\n font-family: inherit;\n font-size: 0.75rem;\n font-weight: var(--font-weight-semibold);\n color: var(--brand-main, #0a84d8);\n cursor: pointer;\n}\n.allToggle:hover {\n text-decoration: underline;\n}\n.allToggle:focus-visible {\n outline: 2px solid var(--brand-main);\n outline-offset: 2px;\n border-radius: 4px;\n}\n.divider {\n height: 1px;\n background: var(--border);\n margin: 4px 0;\n}\n.option {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px;\n border-radius: 8px;\n font-size: 1rem;\n cursor: pointer;\n}\n.option:hover {\n background: var(--bg);\n}\n.search {\n width: calc(100% - 16px);\n box-sizing: border-box;\n border: none;\n box-shadow: inset 0 0 0 1px var(--border-input);\n border-radius: 8px;\n padding: 8px 12px;\n margin: 8px;\n font-family: inherit;\n font-size: 1rem;\n margin-bottom: 0;\n}\n.search:focus {\n outline: none;\n box-shadow: inset 0 0 0 1px var(--brand-main);\n}\n.optionsList {\n padding: 4px 4px;\n}\n.empty {\n padding: 7px 8px;\n color: var(--text-tertiary);\n font-size: 0.85rem;\n}\n","import { useState } from 'react';\nimport { Checkbox } from './Checkbox';\nimport styles from './FilterSection.module.css';\n\ninterface FilterSectionProps<T extends string> {\n label: string;\n options: T[];\n optionLabel: (opt: T) => string;\n activeSet: Set<T>;\n onToggle: (opt: T) => void;\n onSetAll?: (opts: T[]) => void;\n searchable?: boolean;\n}\n\nexport function FilterSection<T extends string>({\n label,\n options,\n optionLabel,\n activeSet,\n onToggle,\n onSetAll,\n searchable,\n}: FilterSectionProps<T>) {\n const [query, setQuery] = useState('');\n\n const q = query.trim().toLowerCase();\n const matches = q ? options.filter((opt) => optionLabel(opt).toLowerCase().includes(q)) : options;\n const allSelected = options.length > 0 && activeSet.size === options.length;\n\n return (\n <div>\n <div className={styles.sectionHeader}>\n <div className={styles.sectionLabel}>{label}</div>\n {onSetAll && (\n <button\n type=\"button\"\n className={styles.allToggle}\n onClick={() => onSetAll(allSelected ? [] : options)}\n >\n {allSelected ? 'Deselect all' : 'Select all'}\n </button>\n )}\n </div>\n {searchable && (\n <input\n type=\"text\"\n className={styles.search}\n placeholder={`Search ${label.toLowerCase()}…`}\n autoComplete=\"off\"\n value={query}\n onClick={(e) => e.stopPropagation()}\n onChange={(e) => setQuery(e.target.value)}\n />\n )}\n <div className={styles.optionsList}>\n {matches.length === 0 && <div className={styles.empty}>No match</div>}\n {matches.map((opt) => (\n <Checkbox\n key={opt}\n className={styles.option}\n checked={activeSet.has(opt)}\n onChange={() => onToggle(opt)}\n label={optionLabel(opt)}\n />\n ))}\n </div>\n </div>\n );\n}\n",".line,\n.box {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.indicator {\n position: absolute;\n left: 0;\n pointer-events: none;\n transition: translate 0.25s cubic-bezier(0.39, 0.575, 0.565, 1), width 0.25s ease,\n scale 0.125s cubic-bezier(0.39, 0.575, 0.565, 1);\n}\n\n.indicator.settling {\n transition: scale 0.1s linear;\n}\n\n.indicatorLine {\n bottom: 0;\n height: 2px;\n background: var(--brand-main);\n}\n\n.indicatorBox {\n top: 4px;\n bottom: 4px;\n border-radius: 8px;\n background: var(--card-surface);\n box-shadow: 0 0 1px 0.5px var(--border);\n}\n\n.tab {\n position: relative;\n isolation: isolate;\n overflow: hidden;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n border: none;\n border-radius: 8px 8px 0 0;\n font-family: inherit;\n font-weight: var(--font-weight-regular);\n cursor: pointer;\n white-space: nowrap;\n transition: color 0.15s ease-out, background 0.15s ease-out, box-shadow 0.15s ease-out;\n}\n\n.tab::before {\n content: '';\n position: absolute;\n left: 50%;\n bottom: 0;\n width: 40%;\n aspect-ratio: 1;\n border-radius: 50%;\n transform: translate(-50%, 100%) scale(1);\n transition: transform 0.3s cubic-bezier(0.39, 0.575, 0.565, 1);\n z-index: -1;\n pointer-events: none;\n background: rgba(var(--brand-main-rgb), 0.08);\n}\n.tab:hover:not(:disabled)::before {\n transform: translate(-50%, 15%) scale(4);\n}\n.tab:active:not(:disabled)::before {\n background: rgba(var(--brand-main-rgb), 0.28);\n}\n\n.tab:disabled {\n color: var(--disabled-text);\n cursor: not-allowed;\n}\n.tab:disabled::before {\n display: none;\n}\n\n.tab.selected:hover::before {\n display: none;\n}\n\n.tab:focus-visible {\n outline: 2px solid var(--brand-main);\n outline-offset: 2px;\n}\n\n.icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: -4px;\n flex-shrink: 0;\n}\n.icon svg {\n width: 100%;\n height: 100%;\n}\n\n/* Line variant */\n\n.line {\n box-shadow: inset 0 -1px 0 0 var(--border);\n}\n\n.line .tab {\n background: transparent;\n padding: 12px 8px;\n font-size: 1rem;\n color: var(--text-secondary);\n}\n.line .tab:hover:not(:disabled) {\n color: var(--brand-main);\n}\n.line .tab.selected {\n color: var(--text-primary);\n font-weight: var(--font-weight-medium);\n}\n\n/* Box variant */\n\n.box {\n box-sizing: border-box;\n height: var(--control-height-base);\n background: var(--depth-5);\n border-radius: var(--radius-base);\n padding: 4px;\n gap: 4px;\n box-shadow: inset 0 0 0.5px 1px #e3e3e3;\n}\n\n.box .tab {\n height: calc(var(--control-height-base) - 8px);\n border-radius: 8px;\n padding: 0 14px;\n font-size: 0.9rem;\n background: transparent;\n color: var(--text-secondary);\n}\n.box .tab:hover:not(:disabled) {\n color: var(--brand-main);\n /* box-shadow: 0 0 0px 1px var(--brand-main-30); */\n}\n.box .tab.selected {\n color: var(--text-primary);\n font-weight: var(--font-weight-medium);\n}\n\n.box.sm {\n height: var(--control-height-sm);\n border-radius: var(--radius-sm);\n}\n.box.sm .tab {\n height: calc(var(--control-height-sm) - 8px);\n border-radius: 6px;\n padding: 0 14px;\n}\n.box.sm .indicatorBox {\n border-radius: 6px;\n}\n","import {\n useLayoutEffect,\n useRef,\n useState,\n type KeyboardEvent,\n type ReactNode,\n type TransitionEvent,\n} from 'react';\nimport styles from './Tabs.module.css';\n\ntype TabsVariant = 'line' | 'box';\ntype TabsSize = 'base' | 'sm';\n\ninterface TabItem {\n value: string;\n label: ReactNode;\n icon?: ReactNode;\n disabled?: boolean;\n}\n\ninterface TabsProps {\n items: TabItem[];\n value: string;\n onChange: (value: string) => void;\n variant?: TabsVariant;\n size?: TabsSize;\n 'aria-label'?: string;\n}\n\nexport function Tabs({ items, value, onChange, variant = 'line', size = 'base', ...rest }: TabsProps) {\n const enabledValues = items.filter((item) => !item.disabled).map((item) => item.value);\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const tabRefs = useRef<Map<string, HTMLButtonElement>>(new Map());\n const prevValueRef = useRef(value);\n const [indicatorStyle, setIndicatorStyle] = useState<{ left: number; width: number } | null>(\n null,\n );\n const [pillPhase, setPillPhase] = useState<'idle' | 'moving' | 'settling'>('idle');\n\n useLayoutEffect(() => {\n const selectedTab = tabRefs.current.get(value);\n if (!selectedTab) return;\n setIndicatorStyle({ left: selectedTab.offsetLeft, width: selectedTab.offsetWidth });\n\n if (variant === 'box' && prevValueRef.current !== value) {\n setPillPhase('moving');\n }\n prevValueRef.current = value;\n }, [value, items, variant, size]);\n\n function handlePillTransitionEnd(event: TransitionEvent<HTMLSpanElement>) {\n if (event.propertyName !== 'scale') return;\n if (pillPhase === 'moving') setPillPhase('settling');\n else if (pillPhase === 'settling') setPillPhase('idle');\n }\n\n useLayoutEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const observer = new ResizeObserver(() => {\n const selectedTab = tabRefs.current.get(value);\n if (!selectedTab) return;\n setIndicatorStyle({ left: selectedTab.offsetLeft, width: selectedTab.offsetWidth });\n });\n observer.observe(container);\n return () => observer.disconnect();\n }, [value]);\n\n function handleKeyDown(event: KeyboardEvent<HTMLDivElement>) {\n const currentIndex = enabledValues.indexOf(value);\n if (currentIndex === -1) return;\n\n let nextIndex: number | null = null;\n if (event.key === 'ArrowRight') nextIndex = (currentIndex + 1) % enabledValues.length;\n if (event.key === 'ArrowLeft') {\n nextIndex = (currentIndex - 1 + enabledValues.length) % enabledValues.length;\n }\n if (event.key === 'Home') nextIndex = 0;\n if (event.key === 'End') nextIndex = enabledValues.length - 1;\n\n if (nextIndex !== null) {\n event.preventDefault();\n onChange(enabledValues[nextIndex]);\n }\n }\n\n return (\n <div\n ref={containerRef}\n role=\"tablist\"\n className={[styles[variant], variant === 'box' && size === 'sm' && styles.sm]\n .filter(Boolean)\n .join(' ')}\n onKeyDown={handleKeyDown}\n {...rest}\n >\n {indicatorStyle && (\n <span\n aria-hidden\n className={[\n styles.indicator,\n variant === 'line' ? styles.indicatorLine : styles.indicatorBox,\n pillPhase === 'settling' && styles.settling,\n ]\n .filter(Boolean)\n .join(' ')}\n onTransitionEnd={handlePillTransitionEnd}\n style={{\n translate: `${indicatorStyle.left}px 0`,\n scale: variant === 'box' && pillPhase === 'moving' ? 0.92 : 1,\n width: indicatorStyle.width,\n }}\n />\n )}\n {items.map((item) => {\n const selected = item.value === value;\n return (\n <button\n key={item.value}\n ref={(node) => {\n if (node) tabRefs.current.set(item.value, node);\n else tabRefs.current.delete(item.value);\n }}\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n disabled={item.disabled}\n tabIndex={selected ? 0 : -1}\n className={[styles.tab, selected && styles.selected].filter(Boolean).join(' ')}\n onClick={() => !item.disabled && onChange(item.value)}\n >\n {item.icon && <span className={styles.icon}>{item.icon}</span>}\n {item.label}\n </button>\n );\n })}\n </div>\n );\n}\n","export function formatDuration(mins: number): string {\n const h = Math.floor(mins / 60);\n const m = mins % 60;\n return `${h}h:${String(m).padStart(2, '0')}m`;\n}\n\n/** HH:MM:SS — seconds are a stable per-video display detail, not tracked in the data model. */\nexport function formatDurationHMS(mins: number, seconds: number): string {\n const h = Math.floor(mins / 60);\n const m = mins % 60;\n const pad = (n: number) => String(n).padStart(2, '0');\n return `${pad(h)}:${pad(m)}:${pad(seconds)}`;\n}\n"],"x_google_ignoreList":[11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cattle-care-ui",
3
- "version": "0.1.17",
3
+ "version": "0.1.18",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",