@inploi/plugin-job-search 0.1.0 → 0.1.2

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.
@@ -531,17 +531,25 @@ const Fallback = ({
531
531
  }) => {
532
532
  return u$1("div", {
533
533
  style: {
534
- padding: "0 1rem",
534
+ display: "flex",
535
+ flexDirection: "column",
536
+ gap: ".5rem",
537
+ padding: "1rem",
535
538
  fontSize: "1rem",
536
- color: "#333333",
537
- fontFamily: "'system-ui' 'Helvetica'"
539
+ color: "hsl(10, 82%, 45%)",
540
+ fontFamily: "'system-ui' 'Helvetica'",
541
+ background: "hsl(7, 100%, 98%)"
538
542
  },
539
- children: ["Something went wrong.", u$1("br", {}), ' Error Message: "', error.message, '"', u$1("button", {
543
+ children: [u$1("p", {
544
+ children: error.message
545
+ }), u$1("button", {
540
546
  onClick: resetError,
541
547
  style: {
542
- background: "#efefef",
548
+ background: "white",
543
549
  border: "none",
544
550
  cursor: "pointer",
551
+ textAlign: "center",
552
+ borderRadius: "4px",
545
553
  padding: "0.5rem 1rem"
546
554
  },
547
555
  children: "Retry"
@@ -698,6 +706,9 @@ const icons = {
698
706
  x: u$1("path", {
699
707
  d: "M8 8l8 8M8 16l8 -8"
700
708
  }),
709
+ plus: u$1("path", {
710
+ d: "M12 8V16M8 12H16"
711
+ }),
701
712
  "chevron-right": u$1("path", {
702
713
  d: "M11 8L15 12L11 16"
703
714
  })
@@ -911,6 +922,7 @@ function B$1(n2, t2) {
911
922
  }
912
923
  const JOB_SEARCH_ELEMENT_ID = "inploi-job-search";
913
924
  const JOB_SEARCH_SCOPE_ELEMENT_ID = "ijs";
925
+ const PAGE_SIZE = 10;
914
926
  function g(n2, t2) {
915
927
  for (var e2 in t2)
916
928
  n2[e2] = t2[e2];
@@ -1476,11 +1488,11 @@ if (process.env.NODE_ENV === "production") {
1476
1488
  shim.exports = requireUseSyncExternalStoreShim_development();
1477
1489
  }
1478
1490
  var shimExports = shim.exports;
1479
- const noop = () => {
1491
+ const noop$1 = () => {
1480
1492
  };
1481
1493
  const UNDEFINED = (
1482
1494
  /*#__NOINLINE__*/
1483
- noop()
1495
+ noop$1()
1484
1496
  );
1485
1497
  const OBJECT = Object;
1486
1498
  const isUndefined = (v2) => v2 === UNDEFINED;
@@ -1566,8 +1578,8 @@ const [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListen
1566
1578
  window.addEventListener.bind(window),
1567
1579
  window.removeEventListener.bind(window)
1568
1580
  ] : [
1569
- noop,
1570
- noop
1581
+ noop$1,
1582
+ noop$1
1571
1583
  ];
1572
1584
  const isVisible = () => {
1573
1585
  const visibilityState = isDocumentDefined && document.visibilityState;
@@ -1781,7 +1793,7 @@ const initCache = (provider, options) => {
1781
1793
  const opts = mergeObjects(defaultConfigOptions, options);
1782
1794
  const EVENT_REVALIDATORS = {};
1783
1795
  const mutate2 = internalMutate.bind(UNDEFINED, provider);
1784
- let unmount = noop;
1796
+ let unmount = noop$1;
1785
1797
  const subscriptions = {};
1786
1798
  const subscribe = (key, callback) => {
1787
1799
  const subs = subscriptions[key] || [];
@@ -1847,11 +1859,11 @@ const [cache, mutate] = initCache(/* @__PURE__ */ new Map());
1847
1859
  const defaultConfig = mergeObjects(
1848
1860
  {
1849
1861
  // events
1850
- onLoadingSlow: noop,
1851
- onSuccess: noop,
1852
- onError: noop,
1862
+ onLoadingSlow: noop$1,
1863
+ onSuccess: noop$1,
1864
+ onError: noop$1,
1853
1865
  onErrorRetry,
1854
- onDiscarded: noop,
1866
+ onDiscarded: noop$1,
1855
1867
  // switches
1856
1868
  revalidateOnFocus: true,
1857
1869
  revalidateOnReconnect: true,
@@ -2878,7 +2890,6 @@ const payPeriods = {
2878
2890
  const JobPayloadSchema = object({
2879
2891
  id: number(),
2880
2892
  company_name: string(),
2881
- company_logo: string(),
2882
2893
  employment_type: union([literal("FULL_TIME"), literal("PART_TIME"), literal("TEMPORARY"), literal("CONTRACTOR"), literal("INTERN"), literal("VOLUNTEER"), literal("OTHER")]),
2883
2894
  location_type: union([literal("LOCATION"), literal("REMOTE"), literal("HYBRID")]),
2884
2895
  pay_type: union([literal("ANNUALLY"), literal("HOURLY"), literal("MONTHLY"), literal("WEEKLY"), literal("DAILY")]),
@@ -2919,7 +2930,7 @@ const JobSchema = transform(JobPayloadSchema, (schema) => {
2919
2930
  if (schema.pay_mask)
2920
2931
  return "Competitive";
2921
2932
  if (schema.pay_max && schema.pay_min)
2922
- return numberFormatter.formatRange(+schema.pay_min, +schema.pay_max);
2933
+ return [numberFormatter.formatRange(+schema.pay_min, +schema.pay_max), payPeriods[schema.pay_type]].join(" ");
2923
2934
  if (schema.pay)
2924
2935
  return [numberFormatter.format(+schema.pay), payPeriods[schema.pay_type]].join(" ");
2925
2936
  if (!schema.pay && !schema.pay_min && !schema.pay_max)
@@ -2930,8 +2941,7 @@ const JobSchema = transform(JobPayloadSchema, (schema) => {
2930
2941
  id: schema.id,
2931
2942
  isNew,
2932
2943
  company: {
2933
- name: schema.company_name,
2934
- logo: schema.company_logo
2944
+ name: schema.company_name
2935
2945
  },
2936
2946
  employmentType: schema.employment_type,
2937
2947
  locationType: schema.location_type,
@@ -2948,19 +2958,39 @@ const JobSchema = transform(JobPayloadSchema, (schema) => {
2948
2958
  };
2949
2959
  });
2950
2960
  const JobSearchResponseSchema = transform(object({
2951
- data: object({
2952
- results: array(JobSchema),
2953
- available_properties: AvailablePropertiesSchema
2954
- }),
2961
+ data: array(JobSchema),
2955
2962
  pagination: PaginationSchema
2956
2963
  }), (schema) => ({
2957
2964
  pagination: schema.pagination,
2958
- results: schema.data.results,
2959
- availableProperties: schema.data.available_properties
2965
+ results: schema.data
2960
2966
  }));
2961
2967
  const filtersToPayload = (filters) => {
2962
2968
  return Object.fromEntries(Object.entries(filters).map(([key, filter]) => [key, (filter == null ? void 0 : filter.value) ?? null]));
2963
2969
  };
2970
+ const getAvailableFilters = async ({
2971
+ apiClient,
2972
+ filters,
2973
+ logger,
2974
+ signal
2975
+ }) => {
2976
+ try {
2977
+ const response = await apiClient.fetch(`/search/filters`, {
2978
+ method: "POST",
2979
+ body: JSON.stringify({
2980
+ filters: filtersToPayload(filters)
2981
+ }),
2982
+ signal
2983
+ });
2984
+ return parse(AvailablePropertiesSchema, response);
2985
+ } catch (e2) {
2986
+ if (e2 instanceof ValiError) {
2987
+ logger.error(e2.message, e2.issues);
2988
+ } else {
2989
+ logger.error(e2);
2990
+ }
2991
+ throw e2;
2992
+ }
2993
+ };
2964
2994
  const getJobSearchResults = async ({
2965
2995
  apiClient,
2966
2996
  logger,
@@ -2969,16 +2999,14 @@ const getJobSearchResults = async ({
2969
2999
  page = 1
2970
3000
  }) => {
2971
3001
  try {
2972
- const response = await apiClient.fetch(`/search?page=${page}`, {
3002
+ const response = await apiClient.fetch(`/search/results?page=${page}&per_page=${PAGE_SIZE}`, {
2973
3003
  method: "POST",
2974
3004
  body: JSON.stringify({
2975
- query: "Customer Service",
2976
3005
  filters: filtersToPayload(filters)
2977
3006
  }),
2978
3007
  signal
2979
3008
  });
2980
- const parsedResponse = parse(JobSearchResponseSchema, response);
2981
- return parsedResponse;
3009
+ return parse(JobSearchResponseSchema, response);
2982
3010
  } catch (e2) {
2983
3011
  if (e2 instanceof ValiError) {
2984
3012
  logger.error(e2.message, e2.issues);
@@ -2988,17 +3016,15 @@ const getJobSearchResults = async ({
2988
3016
  throw e2;
2989
3017
  }
2990
3018
  };
2991
- const getDataState = (swr) => {
3019
+ const getQueryState = (swr) => {
2992
3020
  if (swr.error)
2993
3021
  return {
2994
3022
  state: "error",
2995
- error: swr.error,
2996
- data: swr.data
3023
+ error: swr.error
2997
3024
  };
2998
3025
  if (swr.isLoading && swr.data === void 0)
2999
3026
  return {
3000
- state: "loading",
3001
- data: swr.data
3027
+ state: "loading"
3002
3028
  };
3003
3029
  if ((swr.isLoading || swr.isValidating) && swr.data)
3004
3030
  return {
@@ -3010,7 +3036,7 @@ const getDataState = (swr) => {
3010
3036
  state: "loaded",
3011
3037
  data: swr.data
3012
3038
  };
3013
- throw new Error("Unhandled state");
3039
+ throw new Error("Unhandled data state");
3014
3040
  };
3015
3041
  const SWR_SETTINGS = {
3016
3042
  keepPreviousData: true,
@@ -3019,6 +3045,7 @@ const SWR_SETTINGS = {
3019
3045
  revalidateIfStale: false,
3020
3046
  revalidateFirstPage: false
3021
3047
  };
3048
+ const cacheKey = (value) => JSON.stringify(value);
3022
3049
  function r(e2) {
3023
3050
  var t2, f2, n2 = "";
3024
3051
  if ("string" == typeof e2 || "number" == typeof e2)
@@ -3092,26 +3119,141 @@ const defineConfig = (options) => {
3092
3119
  return { compose: compose1, cva: cva1, cx: cx1 };
3093
3120
  };
3094
3121
  const { compose, cva, cx } = defineConfig();
3122
+ const tagClass = cva({
3123
+ base: "truncate max-w-full block fr font-style-tag font-family-tag font-weight-tag text-style-tag",
3124
+ variants: {
3125
+ variant: {
3126
+ neutralWeak: "bg-tag-neutral-weak-bg border-solid border-px text-tag-neutral-weak-copy border-tag-neutral-weak-stroke",
3127
+ neutralStrong: "text-tag-neutral-strong-copy border-solid border-px bg-tag-neutral-strong-bg border-tag-neutral-strong-stroke",
3128
+ accentStrong: "text-tag-accent-strong-copy border-solid border-px bg-tag-accent-strong-bg border-tag-accent-strong-stroke",
3129
+ monetaryWeak: "bg-tag-monetary-weak-bg border-none text-tag-monetary-weak-copy"
3130
+ },
3131
+ interactive: {
3132
+ true: "ease-expo-out rounded-interactive transition-all duration-snappy ",
3133
+ false: "rounded-tag"
3134
+ },
3135
+ size: {
3136
+ xs: "px-2",
3137
+ sm: "px-3 py-1",
3138
+ lg: "px-5 py-2"
3139
+ },
3140
+ disabled: {
3141
+ true: "opacity-25 pointer-events-none",
3142
+ false: ""
3143
+ }
3144
+ },
3145
+ compoundVariants: [{
3146
+ disabled: false,
3147
+ interactive: true,
3148
+ class: "cursor-pointer active:scale-[0.975]"
3149
+ }],
3150
+ defaultVariants: {
3151
+ variant: "neutralWeak",
3152
+ size: "sm",
3153
+ disabled: false,
3154
+ interactive: false
3155
+ }
3156
+ });
3157
+ const CurrentValueTag = ({
3158
+ query,
3159
+ property,
3160
+ selectedValues
3161
+ }) => {
3162
+ switch (query.state) {
3163
+ case "error":
3164
+ case "loading":
3165
+ return null;
3166
+ case "loaded":
3167
+ case "revalidating": {
3168
+ const suggestions = query.data[property.key];
3169
+ invariant(suggestions, `API error: no available properties for key “${property.key}”`);
3170
+ const selectedSuggestions = suggestions.filter((s2) => selectedValues.includes(s2.value));
3171
+ switch (selectedSuggestions.length) {
3172
+ case 0:
3173
+ return null;
3174
+ case 1: {
3175
+ const firstSuggestion = selectedSuggestions[0];
3176
+ invariant(firstSuggestion);
3177
+ return u$1("span", {
3178
+ class: tagClass({
3179
+ size: "sm",
3180
+ variant: "accentStrong",
3181
+ interactive: true,
3182
+ class: "truncate"
3183
+ }),
3184
+ children: firstSuggestion.label
3185
+ });
3186
+ }
3187
+ default:
3188
+ return u$1("span", {
3189
+ class: tagClass({
3190
+ size: "sm",
3191
+ variant: "accentStrong",
3192
+ interactive: true,
3193
+ class: "truncate tabular-nums"
3194
+ }),
3195
+ children: selectedSuggestions.length
3196
+ });
3197
+ }
3198
+ }
3199
+ default:
3200
+ exhaustive(query);
3201
+ }
3202
+ };
3095
3203
  const btnClass = cva({
3096
3204
  base: "fr animate-selected-tag justify-center touch-hitbox text-style-filter ease-expo-out rounded-interactive relative flex cursor-pointer items-center py-1 transition-all duration-snappy active:scale-95",
3097
3205
  variants: {
3098
3206
  variant: {
3099
- neutral: "bg-interactive-neutral-bg hover:bg-interactive-neutral-bg-hover text-interactive-neutral-text",
3100
- accent: "bg-interactive-accent-bg hover:bg-interactive-accent-bg-hover text-interactive-accent-text"
3207
+ neutral: "bg-interactive-neutral-bg pointer-fine:hover:bg-interactive-neutral-bg-hover text-interactive-neutral-text",
3208
+ accent: "bg-interactive-accent-bg pointer-fine:hover:bg-interactive-accent-bg-hover text-interactive-accent-text"
3101
3209
  },
3102
3210
  icon: {
3103
- none: "px-3",
3104
- right: "pl-3 pr-1",
3105
- left: "pl-1 pr-3"
3211
+ none: "",
3212
+ right: "",
3213
+ left: ""
3214
+ },
3215
+ size: {
3216
+ sm: "py-1",
3217
+ lg: "py-2"
3106
3218
  }
3107
3219
  },
3220
+ compoundVariants: [
3221
+ {
3222
+ size: "sm",
3223
+ icon: "right",
3224
+ class: "pl-3 pr-1"
3225
+ },
3226
+ {
3227
+ size: "sm",
3228
+ icon: "left",
3229
+ class: "pl-1 pr-3"
3230
+ },
3231
+ {
3232
+ size: "sm",
3233
+ icon: "none",
3234
+ class: "px-3"
3235
+ },
3236
+ {
3237
+ size: "lg",
3238
+ icon: "right",
3239
+ class: "pl-5 pr-3"
3240
+ }
3241
+ // { size: 'lg', icon: 'left', class: 'pl-3 pr-5' },
3242
+ // { size: 'lg', icon: 'none', class: 'px-5' },
3243
+ ],
3108
3244
  defaultVariants: {
3109
3245
  variant: "neutral",
3110
- icon: "none"
3246
+ icon: "none",
3247
+ size: "sm"
3111
3248
  }
3112
3249
  });
3250
+ const SUGGESTION_COUNT = 8;
3251
+ const TAG_HEIGHT = 42;
3252
+ const GAP = 8;
3253
+ const LINE_COUNT = 6;
3254
+ const PADDING_Y = 4;
3113
3255
  const inputClass = cva({
3114
- base: "py-2 fr bg-lowest caret-accent-11 placeholder:text-neutral-10 ring-job-card-stroke ring-width-section px-4 ease-expo-out duration-snappy transition-all rounded-input font-style-input text-style-input font-weight-input",
3256
+ base: "py-2 fr bg-lowest caret-accent-11 placeholder:text-neutral-10 ring-job-card-stroke ring-width-section px-4 ease-expo-out duration-snappy transition-all rounded-input font-style-input text-style-input font-weight-input",
3115
3257
  variants: {
3116
3258
  hasValue: {
3117
3259
  false: "text-copy-neutral",
@@ -3127,26 +3269,33 @@ const toggleInArray = (array2, value) => {
3127
3269
  };
3128
3270
  const FilterContentActive = ({
3129
3271
  value,
3130
- suggestions,
3131
3272
  property,
3132
3273
  onSkip,
3133
- state,
3274
+ useQuery,
3134
3275
  onValueChange,
3276
+ unfilteredQuery,
3135
3277
  onRender
3136
3278
  }) => {
3137
- const [internalValue, setInternalValue] = h(value);
3138
- p(() => {
3139
- setInternalValue(value);
3140
- }, [value]);
3279
+ const filterQuery = getQueryState(useQuery());
3280
+ if (filterQuery.state === "error")
3281
+ throw filterQuery.error;
3282
+ const availablePropertyKeys = F$1(() => {
3283
+ switch (filterQuery.state) {
3284
+ case "loading":
3285
+ return null;
3286
+ case "loaded":
3287
+ case "revalidating": {
3288
+ const properties = filterQuery.data[property.key] ?? [];
3289
+ return Object.fromEntries(properties.map((p2) => [p2.value, true]));
3290
+ }
3291
+ default:
3292
+ exhaustive(filterQuery);
3293
+ }
3294
+ }, [filterQuery, property.key]);
3141
3295
  const selectedValues = getSelectedValues(value);
3142
- const selectedInternalValues = getSelectedValues(internalValue);
3143
- const hasValue = selectedValues.length > 0 || selectedInternalValues.length > 0;
3296
+ const hasValue = selectedValues.length > 0;
3297
+ const [displayCount, setDisplayCount] = h(SUGGESTION_COUNT);
3144
3298
  const [search, setSearch] = h();
3145
- const availableSuggestions = F$1(() => {
3146
- if (!search)
3147
- return suggestions;
3148
- return suggestions.filter((s2) => s2.label.toLowerCase().includes(search.toLowerCase()));
3149
- }, [search, suggestions]);
3150
3299
  p(() => {
3151
3300
  onRender();
3152
3301
  });
@@ -3163,65 +3312,111 @@ const FilterContentActive = ({
3163
3312
  onInput: (e2) => setSearch(e2.currentTarget.value),
3164
3313
  placeholder: "Type to search"
3165
3314
  })
3166
- }), state === "loading" ? u$1("div", {
3167
- class: "flex px-4",
3168
- children: u$1("div", {
3169
- "aria-hidden": true,
3170
- class: tagClass$1({
3171
- size: "lg",
3172
- active: false,
3173
- class: "animate-skeleton cursor-default opacity-20 active:-scale-100"
3174
- }),
3175
- children: u$1("span", {
3176
- class: "inline-block w-[10ch]"
3177
- })
3178
- })
3179
- }) : u$1("ul", {
3180
- "aria-label": "Filter options",
3181
- class: "hide-scrollbars -my-2 flex w-full select-none gap-1.5 overflow-auto px-4 py-2 md:flex-wrap md:overflow-hidden",
3182
- children: availableSuggestions.length === 0 ? u$1("p", {
3183
- class: "font-style-tag text-style-tag font-weight-tag border-px w-full border-transparent py-2 text-center md:text-left",
3184
- children: "No filter options available."
3185
- }) : availableSuggestions.slice(0, 10).map((suggestion) => {
3186
- const active = selectedInternalValues.includes(suggestion.value);
3187
- return u$1("li", {
3188
- class: "animate-appear-tag max-w-full origin-top",
3189
- children: u$1("button", {
3190
- "data-filter": true,
3191
- "data-current-value": active ? "true" : void 0,
3192
- onClick: () => {
3193
- switch (value.select) {
3194
- case "many": {
3195
- const newValue = toggleInArray(selectedInternalValues, suggestion.value);
3196
- setInternalValue({
3197
- select: "many",
3198
- value: newValue
3199
- });
3200
- break;
3201
- }
3202
- case "one":
3203
- setInternalValue({
3204
- select: "one",
3205
- value: suggestion.value
3206
- });
3207
- onValueChange({
3208
- select: "one",
3209
- value: suggestion.value
3210
- });
3211
- break;
3212
- default:
3213
- exhaustive(value);
3214
- }
3215
- },
3216
- class: tagClass$1({
3217
- size: "lg",
3218
- active
3219
- }),
3220
- children: suggestion.label
3221
- })
3222
- }, suggestion.value);
3223
- })
3224
- }), u$1("div", {
3315
+ }), (() => {
3316
+ switch (unfilteredQuery.state) {
3317
+ case "error":
3318
+ throw unfilteredQuery.error;
3319
+ case "loading":
3320
+ return u$1("div", {
3321
+ class: "flex px-4",
3322
+ children: u$1("div", {
3323
+ "aria-hidden": true,
3324
+ class: tagClass({
3325
+ size: "lg",
3326
+ variant: "neutralStrong",
3327
+ interactive: true,
3328
+ class: "animate-skeleton cursor-default opacity-20 active:-scale-100"
3329
+ }),
3330
+ children: u$1("span", {
3331
+ class: "inline-block w-[10ch]"
3332
+ })
3333
+ })
3334
+ });
3335
+ case "revalidating":
3336
+ case "loaded": {
3337
+ const allSuggestions = unfilteredQuery.data[property.key];
3338
+ invariant(allSuggestions, `API error: no available properties for key “${property.key}”`);
3339
+ const filteredSuggestions = search && search.length > 1 ? allSuggestions.filter((s2) => s2.label.toLowerCase().includes(search.toLowerCase())) : allSuggestions;
3340
+ const suggestions = filteredSuggestions.map((s2) => ({
3341
+ ...s2,
3342
+ disabled: availablePropertyKeys === null ? false : availablePropertyKeys[s2.value] !== true
3343
+ }));
3344
+ const noEnabledOptions = !suggestions.find((suggestion) => !suggestion.disabled);
3345
+ if (noEnabledOptions)
3346
+ return u$1("p", {
3347
+ class: "font-style-tag text-style-tag font-weight-tag border-px w-full border-transparent px-4 py-2 text-center",
3348
+ children: "No filter options available."
3349
+ });
3350
+ return u$1("div", {
3351
+ class: "pointer-fine:px-4",
3352
+ children: u$1("ul", {
3353
+ style: {
3354
+ maxHeight: (TAG_HEIGHT + GAP) * (LINE_COUNT - 1) + TAG_HEIGHT / 2 + 2 * PADDING_Y
3355
+ },
3356
+ class: "hide-scrollbars pointer-fine:flex-wrap pointer-fine:p-2 pointer-fine:ring-width-section ring-section-weak-stroke pointer-fine:bg-app pointer-fine:rounded-section pointer-coarse:overflow-x-auto flex max-w-full gap-2 overflow-y-auto px-4",
3357
+ children: [suggestions.slice(0, displayCount).map((suggestion) => {
3358
+ const active = selectedValues.includes(suggestion.value);
3359
+ return u$1("li", {
3360
+ class: "animate-appear-tag max-w-full origin-top",
3361
+ children: u$1("button", {
3362
+ "data-filter": true,
3363
+ "data-current-value": active ? "true" : void 0,
3364
+ onClick: () => {
3365
+ switch (value.select) {
3366
+ case "many": {
3367
+ const newValue = toggleInArray(selectedValues, suggestion.value);
3368
+ onValueChange({
3369
+ select: "many",
3370
+ value: newValue
3371
+ });
3372
+ break;
3373
+ }
3374
+ case "one":
3375
+ onValueChange({
3376
+ select: "one",
3377
+ value: suggestion.value
3378
+ });
3379
+ break;
3380
+ default:
3381
+ exhaustive(value);
3382
+ }
3383
+ },
3384
+ class: tagClass({
3385
+ size: "lg",
3386
+ variant: active ? "accentStrong" : "neutralStrong",
3387
+ interactive: true,
3388
+ disabled: suggestion.disabled
3389
+ }),
3390
+ children: suggestion.label
3391
+ })
3392
+ }, suggestion.value);
3393
+ }), suggestions.length > displayCount && u$1("li", {
3394
+ class: "animate-appear-tag pointer-fine:w-full max-w-full flex-none origin-top",
3395
+ children: u$1("button", {
3396
+ class: btnClass({
3397
+ variant: "neutral",
3398
+ icon: "right",
3399
+ size: "lg",
3400
+ class: "border-px flex w-full max-w-full flex-none flex-nowrap justify-center truncate border-transparent"
3401
+ }),
3402
+ onClick: () => {
3403
+ setDisplayCount(displayCount + SUGGESTION_COUNT);
3404
+ },
3405
+ children: [u$1("span", {
3406
+ class: "font-style-tag font-family-tag font-weight-tag text-style-tag",
3407
+ children: "Show More"
3408
+ }), u$1(Icon, {
3409
+ name: "plus"
3410
+ })]
3411
+ })
3412
+ })]
3413
+ })
3414
+ });
3415
+ }
3416
+ default:
3417
+ exhaustive(unfilteredQuery);
3418
+ }
3419
+ })(), u$1("footer", {
3225
3420
  class: "flex justify-end p-2",
3226
3421
  children: [u$1("div", {
3227
3422
  class: "flex-1",
@@ -3241,7 +3436,7 @@ const FilterContentActive = ({
3241
3436
  class: "flex items-center overflow-hidden",
3242
3437
  children: u$1("p", {
3243
3438
  class: "font-style-default text-style-tag font-weight-default flex-grow select-none truncate text-center",
3244
- children: [selectedInternalValues.length, " selected"]
3439
+ children: [selectedValues.length, " selected"]
3245
3440
  })
3246
3441
  }), u$1("div", {
3247
3442
  class: "flex-1",
@@ -3251,12 +3446,7 @@ const FilterContentActive = ({
3251
3446
  icon: "right",
3252
3447
  class: "ml-auto"
3253
3448
  }),
3254
- onClick: () => {
3255
- if (hasValue) {
3256
- onValueChange(internalValue);
3257
- }
3258
- onSkip();
3259
- },
3449
+ onClick: onSkip,
3260
3450
  children: [hasValue ? "Done" : "Skip", " ", u$1(Icon, {
3261
3451
  name: "chevron-right"
3262
3452
  })]
@@ -3276,21 +3466,8 @@ const filterIcons = {
3276
3466
  company_name: "briefcase",
3277
3467
  category: "briefcase"
3278
3468
  };
3279
- const tagClass$1 = cva({
3280
- base: "ease-expo-out truncate max-w-full block cursor-pointer fr border-solid border-px font-style-tag font-family-tag font-weight-tag text-style-tag rounded-interactive transition-all duration-snappy active:scale-[0.975]",
3281
- variants: {
3282
- active: {
3283
- false: "text-tag-neutral-strong-copy bg-tag-neutral-strong-bg border-tag-neutral-strong-stroke",
3284
- true: "text-tag-accent-strong-copy bg-tag-accent-strong-bg border-tag-accent-strong-stroke"
3285
- },
3286
- size: {
3287
- sm: "px-3 py-1",
3288
- lg: "px-5 py-2"
3289
- }
3290
- }
3291
- });
3292
3469
  const wrapperClass$1 = cva({
3293
- base: "group flex min-w-0 fr overflow-hidden rounded-section text-copy-neutral-lowcontrast ring-width-section transition-all duration-medium ease-expo-out fr-parent [&:has(.fr-child:active)]:scale-[0.975]",
3470
+ base: "group flex min-w-0 fr overflow-hidden rounded-section text-copy-neutral-lowcontrast ring-width-section transition-all duration-medium ease-expo-out fr-parent [&:has(.fr-child:active)]:scale-[0.975] origin-[50%_1.75rem]",
3294
3471
  variants: {
3295
3472
  hasValue: {
3296
3473
  false: "bg-section-weak-bg ring-section-weak-stroke",
@@ -3335,22 +3512,19 @@ const Filter = ({
3335
3512
  value,
3336
3513
  onActiveChange,
3337
3514
  property,
3338
- suggestions,
3339
3515
  onSkip,
3340
3516
  onValueChange,
3341
- state
3517
+ unfilteredQuery,
3518
+ useQuery
3342
3519
  }) => {
3343
- var _a;
3344
3520
  const icon = property.icon ?? filterIcons[property.key] ?? "filter";
3345
3521
  const selectedValues = getSelectedValues(value);
3346
- const hasValue = selectedValues.length > 0;
3347
3522
  const {
3348
3523
  height,
3349
3524
  ref: contentRef,
3350
3525
  updateHeight
3351
3526
  } = useMeasureHeight([active]);
3352
- const selectedSuggestions = suggestions.filter((s2) => selectedValues.includes(s2.value));
3353
- const selectedLabel = selectedSuggestions.length > 1 ? selectedSuggestions.length.toString() : (_a = selectedSuggestions[0]) == null ? void 0 : _a.label;
3527
+ const hasValue = selectedValues.length > 0;
3354
3528
  return u$1("section", {
3355
3529
  "data-filter-key": property.key,
3356
3530
  role: "tab",
@@ -3359,7 +3533,7 @@ const Filter = ({
3359
3533
  class: wrapperClass$1({
3360
3534
  hasValue
3361
3535
  }),
3362
- onTouchStart: () => void 0,
3536
+ onTouchStart: noop,
3363
3537
  children: [u$1("div", {
3364
3538
  class: "min-w-0 max-w-full shrink-0 flex-grow",
3365
3539
  children: [u$1("button", {
@@ -3384,12 +3558,12 @@ const Filter = ({
3384
3558
  class: "w-full",
3385
3559
  ref: contentRef,
3386
3560
  children: active && u$1(FilterContentActive, {
3561
+ useQuery,
3387
3562
  onRender: updateHeight,
3388
3563
  onSkip,
3389
3564
  onValueChange,
3565
+ unfilteredQuery,
3390
3566
  property,
3391
- state,
3392
- suggestions,
3393
3567
  value
3394
3568
  })
3395
3569
  })
@@ -3398,16 +3572,13 @@ const Filter = ({
3398
3572
  tabIndex: -1,
3399
3573
  class: "fr-child flex flex-shrink flex-grow cursor-pointer select-none items-center justify-end gap-2 overflow-hidden pl-2 pr-3 focus:outline-none",
3400
3574
  onClick: () => onActiveChange(true),
3401
- children: [selectedLabel && u$1("div", {
3575
+ children: [u$1("div", {
3402
3576
  "aria-label": "Current value",
3403
3577
  class: "flex max-w-full gap-1 overflow-hidden",
3404
- children: u$1("span", {
3405
- class: tagClass$1({
3406
- size: "sm",
3407
- active: true,
3408
- class: "truncate tabular-nums"
3409
- }),
3410
- children: selectedLabel
3578
+ children: u$1(CurrentValueTag, {
3579
+ property,
3580
+ query: unfilteredQuery,
3581
+ selectedValues
3411
3582
  })
3412
3583
  }), u$1(Icon, {
3413
3584
  class: chevronClass(),
@@ -3443,6 +3614,8 @@ const useFilterKeyboardFocus = (activeKey, ref) => {
3443
3614
  focusFirstAvailableOption(keyToFocus, ref);
3444
3615
  }, [activeKey, previousActiveKey, ref]);
3445
3616
  };
3617
+ function noop() {
3618
+ }
3446
3619
  const nextStateFromValue = ({
3447
3620
  property,
3448
3621
  value,
@@ -3489,72 +3662,72 @@ const FilterSection = ({
3489
3662
  var _a;
3490
3663
  const [activeKey, setActiveKey] = h((_a = properties[0]) == null ? void 0 : _a.key);
3491
3664
  useFilterKeyboardFocus(activeKey, parentRef);
3492
- const {
3493
- ...swr
3494
- } = useSWR(JSON.stringify(appliedFilters), () => getJobSearchResults({
3665
+ const defaultFilters = F$1(() => getFilterDefaults(properties), [properties]);
3666
+ const unfilteredQuery = getQueryState(useSWR(cacheKey(defaultFilters), () => getAvailableFilters({
3495
3667
  apiClient,
3496
3668
  logger,
3497
- filters: appliedFilters
3498
- }), SWR_SETTINGS);
3499
- const {
3500
- data,
3501
- error,
3502
- state
3503
- } = getDataState(swr);
3504
- switch (state) {
3505
- case "error":
3506
- throw error;
3507
- case "loading":
3508
- case "revalidating":
3509
- case "loaded":
3510
- return u$1("aside", {
3511
- children: u$1("div", {
3512
- role: "tablist",
3513
- class: "top-filters sticky flex flex-col gap-2 px-4 md:px-0",
3514
- children: properties.map((property) => {
3515
- const active = activeKey === property.key;
3516
- const value = appliedFilters[property.key] ?? {
3517
- select: property.select,
3518
- value: void 0
3519
- };
3520
- const onValueChange = (value2) => {
3521
- const {
3522
- newActiveKey,
3523
- newValue
3524
- } = nextStateFromValue({
3525
- property,
3526
- activeKey,
3527
- value: value2,
3528
- properties,
3529
- appliedFilters
3530
- });
3531
- setActiveKey(newActiveKey);
3532
- return onFilterValueChange(property.key, newValue);
3533
- };
3534
- const onActiveChange = (active2) => setActiveKey(active2 ? property.key : void 0);
3535
- const suggestions = (data == null ? void 0 : data.availableProperties[property.key]) ?? [];
3536
- return u$1(ErrorBoundary, {
3537
- Fallback,
3538
- children: u$1(Filter, {
3539
- active,
3540
- property,
3541
- onActiveChange,
3542
- value,
3543
- suggestions,
3544
- onSkip: () => {
3545
- var _a2;
3546
- const currentIndex = properties.findIndex((p2) => p2.key === activeKey);
3547
- const nextPropertyKey = currentIndex !== -1 ? (_a2 = properties[currentIndex + 1]) == null ? void 0 : _a2.key : void 0;
3548
- setActiveKey(nextPropertyKey);
3549
- },
3550
- onValueChange,
3551
- state
3552
- })
3553
- }, property.key);
3669
+ filters: defaultFilters
3670
+ }), SWR_SETTINGS));
3671
+ if (unfilteredQuery.state === "error")
3672
+ throw unfilteredQuery.error;
3673
+ const makeQueryWithoutFilter = T$1((keyToExclude) => () => {
3674
+ const filters = {
3675
+ ...appliedFilters,
3676
+ [keyToExclude]: defaultFilters[keyToExclude]
3677
+ };
3678
+ return useSWR(cacheKey(filters), () => getAvailableFilters({
3679
+ apiClient,
3680
+ logger,
3681
+ filters
3682
+ }), SWR_SETTINGS);
3683
+ }, [apiClient, appliedFilters, defaultFilters, logger]);
3684
+ return u$1("aside", {
3685
+ children: u$1("div", {
3686
+ role: "tablist",
3687
+ class: "top-filters sticky flex flex-col gap-2 px-4 md:px-0",
3688
+ children: properties.map((property) => {
3689
+ const active = activeKey === property.key;
3690
+ const value = appliedFilters[property.key] ?? {
3691
+ select: property.select,
3692
+ value: void 0
3693
+ };
3694
+ const onValueChange = (value2) => {
3695
+ const {
3696
+ newActiveKey,
3697
+ newValue
3698
+ } = nextStateFromValue({
3699
+ property,
3700
+ activeKey,
3701
+ value: value2,
3702
+ properties,
3703
+ appliedFilters
3704
+ });
3705
+ setActiveKey(newActiveKey);
3706
+ return onFilterValueChange(property.key, newValue);
3707
+ };
3708
+ const onActiveChange = (active2) => setActiveKey(active2 ? property.key : void 0);
3709
+ const useQuery = makeQueryWithoutFilter(property.key);
3710
+ return u$1(ErrorBoundary, {
3711
+ Fallback,
3712
+ children: u$1(Filter, {
3713
+ unfilteredQuery,
3714
+ active,
3715
+ property,
3716
+ onActiveChange,
3717
+ value,
3718
+ onSkip: () => {
3719
+ var _a2;
3720
+ const currentIndex = properties.findIndex((p2) => p2.key === activeKey);
3721
+ const nextPropertyKey = currentIndex !== -1 ? (_a2 = properties[currentIndex + 1]) == null ? void 0 : _a2.key : void 0;
3722
+ setActiveKey(nextPropertyKey);
3723
+ },
3724
+ useQuery,
3725
+ onValueChange
3554
3726
  })
3555
- })
3556
- });
3557
- }
3727
+ }, property.key);
3728
+ })
3729
+ })
3730
+ });
3558
3731
  };
3559
3732
  const getFirstPageKey = (getKey) => {
3560
3733
  return serialize(getKey ? getKey(0, null) : null)[0];
@@ -3778,18 +3951,6 @@ const wrapperClass = cva({
3778
3951
  const badgeClass = cva({
3779
3952
  base: "bg-tag-accent-strong-bg rounded-job-tag text-style-tag text-tag-accent-strong-copy font-weight-tag flex items-center justify-center px-2"
3780
3953
  });
3781
- const tagClass = cva({
3782
- base: "rounded-tag text-style-tag font-weight-tag block px-2",
3783
- variants: {
3784
- colorScheme: {
3785
- default: "bg-tag-neutral-weak-bg text-tag-neutral-weak-copy ring-px ring-tag-neutral-weak-stroke",
3786
- monetary: "bg-tag-monetary-weak-bg text-tag-monetary-weak-copy"
3787
- }
3788
- },
3789
- defaultVariants: {
3790
- colorScheme: "default"
3791
- }
3792
- });
3793
3954
  const JobCard = ({
3794
3955
  job
3795
3956
  }) => {
@@ -3820,13 +3981,16 @@ const JobCard = ({
3820
3981
  class: "flex flex-col items-start gap-2",
3821
3982
  children: [job.pay && u$1("span", {
3822
3983
  class: tagClass({
3823
- colorScheme: "monetary"
3984
+ variant: "monetaryWeak",
3985
+ size: "xs"
3824
3986
  }),
3825
3987
  children: job.pay
3826
3988
  }), job.contractType && u$1("div", {
3827
3989
  class: "flex items-center gap-2",
3828
3990
  children: u$1("span", {
3829
- class: tagClass(),
3991
+ class: tagClass({
3992
+ size: "xs"
3993
+ }),
3830
3994
  children: job.contractType
3831
3995
  })
3832
3996
  })]
@@ -3879,19 +4043,22 @@ const JobCardSkeleton = ({
3879
4043
  class: "flex flex-col items-start gap-2",
3880
4044
  children: [seed % 2 === 0 && u$1("span", {
3881
4045
  class: tagClass({
3882
- colorScheme: "default",
4046
+ variant: "neutralWeak",
4047
+ size: "xs",
3883
4048
  class: "h-[1lh] w-[10ch]"
3884
4049
  })
3885
4050
  }), u$1("div", {
3886
4051
  class: "flex items-center gap-2",
3887
4052
  children: [u$1("span", {
3888
4053
  class: tagClass({
3889
- colorScheme: "default",
4054
+ variant: "neutralWeak",
4055
+ size: "xs",
3890
4056
  class: "h-[1lh] w-[6ch]"
3891
4057
  })
3892
4058
  }), u$1("span", {
3893
4059
  class: tagClass({
3894
- colorScheme: "default",
4060
+ variant: "neutralWeak",
4061
+ size: "xs",
3895
4062
  class: "h-[1lh] w-[8ch]"
3896
4063
  })
3897
4064
  })]
@@ -3915,7 +4082,7 @@ const LoadMore = ({
3915
4082
  class: "flex flex-col gap-3",
3916
4083
  "aria-hidden": true,
3917
4084
  children: Array.from({
3918
- length: 4
4085
+ length: PAGE_SIZE
3919
4086
  }).map((_2, i2) => u$1("li", {
3920
4087
  children: u$1(JobCardSkeleton, {
3921
4088
  seed: i2,
@@ -3971,7 +4138,7 @@ const ResultsSection = ({
3971
4138
  ...swr
3972
4139
  } = useSWRInfinite((index, prevPageData) => {
3973
4140
  if (prevPageData === null)
3974
- return index + 1 + "/" + JSON.stringify(appliedFilters);
4141
+ return index + 1 + "/" + cacheKey(appliedFilters);
3975
4142
  if (prevPageData.pagination.last_page === prevPageData.pagination.current_page)
3976
4143
  return null;
3977
4144
  return index + 1 + "/" + JSON.stringify(appliedFilters);
@@ -3989,7 +4156,7 @@ const ResultsSection = ({
3989
4156
  data,
3990
4157
  error,
3991
4158
  state
3992
- } = getDataState(swr);
4159
+ } = getQueryState(swr);
3993
4160
  const fetchNextPage = () => {
3994
4161
  setSize((size2) => size2 + 1);
3995
4162
  };
@@ -4006,7 +4173,7 @@ const ResultsSection = ({
4006
4173
  class: "flex flex-col gap-3",
4007
4174
  "aria-hidden": true,
4008
4175
  children: Array.from({
4009
- length: 30
4176
+ length: PAGE_SIZE
4010
4177
  }).map((_2, i2) => u$1("li", {
4011
4178
  children: u$1(JobCardSkeleton, {
4012
4179
  seed: i2,
@@ -4139,7 +4306,7 @@ const JobSearch = ({
4139
4306
  })
4140
4307
  });
4141
4308
  };
4142
- const tailwind = "#ijs {\n font-size: 16px;\n --tw-content: '';\n}\n\n #ijs * {\n box-sizing: border-box;\n border-style: solid;\n border-width: 0;\n -webkit-tap-highlight-color: transparent;\n font-family: inherit;\n font-style: inherit;\n font-weight: inherit;\n }\n\n #ijs ::before,\n #ijs ::after {\n box-sizing: border-box;\n }\n\n #ijs :is(a) {\n text-decoration: none;\n }\n\n #ijs :is(ul, ol) {\n list-style: none;\n padding: 0;\n margin: 0;\n }\n\n #ijs :is(p) {\n margin: 0;\n padding: 0;\n }\n\n #ijs :is(li) {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n #ijs :is(button),\n #ijs :is(a) {\n display: block;\n margin: 0;\n padding: 0;\n border: unset;\n background: unset;\n text-align: unset;\n }\n\n #ijs :is(input),\n #ijs :is(textarea) {\n display: block;\n margin: 0;\n padding: 0;\n min-width: 0;\n max-width: unset;\n width: 100%;\n }\n\n #ijs :is(svg) {\n display: block;\n }\n\n #ijs.reduced-motion * {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n scroll-behavior: auto !important;\n animation-delay: 0s !important;\n }\n\n @media (prefers-reduced-motion) {\n #ijs * {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n scroll-behavior: auto !important;\n animation-delay: 0s !important;\n }\n }\n\n #ijs *, #ijs ::before, #ijs ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n #ijs ::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n #ijs .container {\n width: 100%;\n}\n\n @media (min-width: 640px) {\n\n #ijs .container {\n max-width: 640px;\n }\n}\n\n @media (min-width: 768px) {\n\n #ijs .container {\n max-width: 768px;\n }\n}\n\n @media (min-width: 1024px) {\n\n #ijs .container {\n max-width: 1024px;\n }\n}\n\n @media (min-width: 1280px) {\n\n #ijs .container {\n max-width: 1280px;\n }\n}\n\n @media (min-width: 1536px) {\n\n #ijs .container {\n max-width: 1536px;\n }\n}\n\n #ijs .visible {\n visibility: visible;\n}\n\n #ijs .invisible {\n visibility: hidden;\n}\n\n #ijs .collapse {\n visibility: collapse;\n}\n\n #ijs .static {\n position: static;\n}\n\n #ijs .fixed {\n position: fixed;\n}\n\n #ijs .absolute {\n position: absolute;\n}\n\n #ijs .relative {\n position: relative;\n}\n\n #ijs .sticky {\n position: sticky;\n}\n\n #ijs .top-0 {\n top: 0px;\n}\n\n #ijs .isolate {\n isolation: isolate;\n}\n\n #ijs .m-0 {\n margin: 0px;\n}\n\n #ijs .m-11 {\n margin: 2.75rem;\n}\n\n #ijs .m-3 {\n margin: 0.75rem;\n}\n\n #ijs .-my-2 {\n margin-top: -0.5rem;\n margin-bottom: -0.5rem;\n}\n\n #ijs .mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n\n #ijs .ml-auto {\n margin-left: auto;\n}\n\n #ijs .block {\n display: block;\n}\n\n #ijs .inline-block {\n display: inline-block;\n}\n\n #ijs .inline {\n display: inline;\n}\n\n #ijs .flex {\n display: flex;\n}\n\n #ijs .inline-flex {\n display: inline-flex;\n}\n\n #ijs .table {\n display: table;\n}\n\n #ijs .table-row {\n display: table-row;\n}\n\n #ijs .flow-root {\n display: flow-root;\n}\n\n #ijs .grid {\n display: grid;\n}\n\n #ijs .inline-grid {\n display: inline-grid;\n}\n\n #ijs .contents {\n display: contents;\n}\n\n #ijs .list-item {\n display: list-item;\n}\n\n #ijs .\\!hidden {\n display: none !important;\n}\n\n #ijs .hidden {\n display: none;\n}\n\n #ijs .h-8 {\n height: 2rem;\n}\n\n #ijs .h-\\[1lh\\] {\n height: 1lh;\n}\n\n #ijs .min-h-screen {\n min-height: 100vh;\n}\n\n #ijs .w-\\[10ch\\] {\n width: 10ch;\n}\n\n #ijs .w-\\[6ch\\] {\n width: 6ch;\n}\n\n #ijs .w-\\[8ch\\] {\n width: 8ch;\n}\n\n #ijs .w-full {\n width: 100%;\n}\n\n #ijs .min-w-0 {\n min-width: 0px;\n}\n\n #ijs .max-w-full {\n max-width: 100%;\n}\n\n #ijs .max-w-screen-lg {\n max-width: 1024px;\n}\n\n #ijs .flex-1 {\n flex: 1 1 0%;\n}\n\n #ijs .flex-none {\n flex: none;\n}\n\n #ijs .flex-shrink {\n flex-shrink: 1;\n}\n\n #ijs .shrink {\n flex-shrink: 1;\n}\n\n #ijs .shrink-0 {\n flex-shrink: 0;\n}\n\n #ijs .flex-grow {\n flex-grow: 1;\n}\n\n #ijs .grow {\n flex-grow: 1;\n}\n\n #ijs .border-collapse {\n border-collapse: collapse;\n}\n\n #ijs .origin-top {\n transform-origin: top;\n}\n\n #ijs .transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n @keyframes appear-tag {\n\n 0% {\n transform: scale(0.9);\n }\n\n 100% {\n transform: scale(1);\n }\n}\n\n #ijs .animate-appear-tag {\n animation: appear-tag .6s cubic-bezier(0.16, 1, 0.3, 1) both;\n}\n\n @keyframes selected-tag {\n\n 0% {\n transform: scale(1.11);\n }\n\n 100% {\n transform: scale(1);\n }\n}\n\n #ijs .animate-selected-tag {\n animation: selected-tag .9s cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n @keyframes skeleton {\n\n 0% {\n opacity: 0.2;\n }\n\n 50% {\n opacity: 0.5;\n }\n\n 100% {\n opacity: 0.3;\n }\n}\n\n #ijs .animate-skeleton {\n animation: skeleton 1s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n @keyframes slide-in-bottom {\n\n 0% {\n transform: translateY(-50%);\n }\n\n 100% {\n transform: translateY(0);\n }\n}\n\n #ijs .animate-slide-in-bottom {\n animation: slide-in-bottom .4s cubic-bezier(0.16, 1, 0.3, 1) both;\n}\n\n #ijs .cursor-default {\n cursor: default;\n}\n\n #ijs .cursor-pointer {\n cursor: pointer;\n}\n\n #ijs .select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n\n #ijs .resize {\n resize: both;\n}\n\n #ijs .flex-col {\n flex-direction: column;\n}\n\n #ijs .flex-wrap {\n flex-wrap: wrap;\n}\n\n #ijs .items-start {\n align-items: flex-start;\n}\n\n #ijs .items-center {\n align-items: center;\n}\n\n #ijs .justify-end {\n justify-content: flex-end;\n}\n\n #ijs .justify-center {\n justify-content: center;\n}\n\n #ijs .gap-1 {\n gap: 0.25rem;\n}\n\n #ijs .gap-1\\.5 {\n gap: 0.375rem;\n}\n\n #ijs .gap-2 {\n gap: 0.5rem;\n}\n\n #ijs .gap-3 {\n gap: 0.75rem;\n}\n\n #ijs .gap-4 {\n gap: 1rem;\n}\n\n #ijs .self-center {\n align-self: center;\n}\n\n #ijs .overflow-auto {\n overflow: auto;\n}\n\n #ijs .overflow-hidden {\n overflow: hidden;\n}\n\n #ijs .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n #ijs .rounded-input {\n border-radius: var(--i-radius-input);\n}\n\n #ijs .rounded-interactive {\n border-radius: var(--i-radius-interactive);\n}\n\n #ijs .rounded-job-card {\n border-radius: var(--i-radius-job-card);\n}\n\n #ijs .rounded-job-tag {\n border-radius: var(--i-radius-job-tag);\n}\n\n #ijs .rounded-section {\n border-radius: var(--i-radius-section);\n}\n\n #ijs .rounded-tag {\n border-radius: var(--i-radius-job-tag);\n}\n\n #ijs .border-px {\n border-width: 1px;\n}\n\n #ijs .border-solid {\n border-style: solid;\n}\n\n #ijs .border-tag-accent-strong-stroke {\n border-color: var(--i-tag-accent-strong-stroke-color);\n}\n\n #ijs .border-tag-neutral-strong-stroke {\n border-color: var(--i-tag-neutral-strong-stroke-color);\n}\n\n #ijs .border-transparent {\n border-color: transparent;\n}\n\n #ijs .bg-\\[currentColor\\] {\n background-color: currentColor;\n}\n\n #ijs .bg-app {\n background-color: var(--i-app-bg);\n}\n\n #ijs .bg-interactive-accent-bg {\n background-color: var(--i-interactive-accent-bg);\n}\n\n #ijs .bg-interactive-neutral-bg {\n background-color: var(--i-interactive-neutral-bg);\n}\n\n #ijs .bg-job-card-bg {\n background-color: var(--i-job-card-bg);\n}\n\n #ijs .bg-lowest {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-lowest) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-section-strong-bg {\n background-color: var(--i-section-strong-bg);\n}\n\n #ijs .bg-section-weak-bg {\n background-color: var(--i-section-weak-bg);\n}\n\n #ijs .bg-tag-accent-strong-bg {\n background-color: var(--i-tag-accent-strong-bg);\n}\n\n #ijs .bg-tag-monetary-weak-bg {\n background-color: var(--i-tag-monetary-weak-bg);\n}\n\n #ijs .bg-tag-neutral-strong-bg {\n background-color: var(--i-tag-neutral-strong-bg);\n}\n\n #ijs .bg-tag-neutral-weak-bg {\n background-color: var(--i-tag-neutral-weak-bg);\n}\n\n #ijs .p-0 {\n padding: 0px;\n}\n\n #ijs .p-2 {\n padding: 0.5rem;\n}\n\n #ijs .p-4 {\n padding: 1rem;\n}\n\n #ijs .px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n\n #ijs .px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n\n #ijs .px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n\n #ijs .px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n\n #ijs .py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n\n #ijs .py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n #ijs .py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n\n #ijs .py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n\n #ijs .pl-1 {\n padding-left: 0.25rem;\n}\n\n #ijs .pl-2 {\n padding-left: 0.5rem;\n}\n\n #ijs .pl-3 {\n padding-left: 0.75rem;\n}\n\n #ijs .pl-4 {\n padding-left: 1rem;\n}\n\n #ijs .pr-1 {\n padding-right: 0.25rem;\n}\n\n #ijs .pr-3 {\n padding-right: 0.75rem;\n}\n\n #ijs .pt-1 {\n padding-top: 0.25rem;\n}\n\n #ijs .text-center {\n text-align: center;\n}\n\n #ijs .text-justify {\n text-align: justify;\n}\n\n #ijs .font-family-default {\n font-family: var(--i-font);\n}\n\n #ijs .font-family-filter {\n font-family: var(--i-font-filter);\n}\n\n #ijs .font-family-job-heading {\n font-family: var(--i-font-job-heading);\n}\n\n #ijs .font-family-tag {\n font-family: var(--i-font-tag);\n}\n\n #ijs .text-style-filter {\n font-size: 1rem;\n line-height: 1.5rem;\n letter-spacing: -0.01em;\n}\n\n #ijs .text-style-input {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n\n #ijs .text-style-job-card {\n font-size: 0.875rem;\n line-height: 1.125rem;\n}\n\n #ijs .text-style-job-card-info {\n font-size: 0.75rem;\n line-height: 1.125rem;\n}\n\n #ijs .text-style-job-heading {\n font-size: 1.125rem;\n line-height: 1.5rem;\n}\n\n #ijs .text-style-tag {\n font-size: 0.875rem;\n line-height: 1.5rem;\n}\n\n #ijs .font-weight-default {\n font-weight: var(--i-weight-default);\n}\n\n #ijs .font-weight-filter {\n font-weight: var(--i-weight-filter);\n}\n\n #ijs .font-weight-input {\n font-weight: var(--i-weight-input);\n}\n\n #ijs .font-weight-job-heading {\n font-weight: var(--i-weight-job-heading);\n}\n\n #ijs .font-weight-tag {\n font-weight: var(--i-weight-tag);\n}\n\n #ijs .uppercase {\n text-transform: uppercase;\n}\n\n #ijs .lowercase {\n text-transform: lowercase;\n}\n\n #ijs .capitalize {\n text-transform: capitalize;\n}\n\n #ijs .italic {\n font-style: italic;\n}\n\n #ijs .ordinal {\n --tw-ordinal: ordinal;\n font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);\n}\n\n #ijs .tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);\n}\n\n #ijs .text-copy-accent {\n color: var(--i-copy-accent);\n}\n\n #ijs .text-copy-job-info {\n color: var(--i-copy-info);\n}\n\n #ijs .text-copy-neutral {\n color: var(--i-copy);\n}\n\n #ijs .text-copy-neutral-icon {\n color: var(--i-copy-icon);\n}\n\n #ijs .text-copy-neutral-lowcontrast {\n color: var(--i-copy-lowcontrast);\n}\n\n #ijs .text-interactive-accent-text {\n color: var(--i-interactive-accent-text);\n}\n\n #ijs .text-interactive-neutral-text {\n color: var(--i-interactive-neutral-text);\n}\n\n #ijs .text-tag-accent-strong-copy {\n color: var(--i-tag-accent-strong-copy);\n}\n\n #ijs .text-tag-monetary-weak-copy {\n color: var(--i-tag-monetary-weak-copy);\n}\n\n #ijs .text-tag-neutral-strong-copy {\n color: var(--i-tag-neutral-strong-copy);\n}\n\n #ijs .text-tag-neutral-weak-copy {\n color: var(--i-tag-neutral-weak-copy);\n}\n\n #ijs .caret-accent-11 {\n caret-color: oklch(var(--i-a-11) / 1);\n}\n\n #ijs .opacity-20 {\n opacity: 0.2;\n}\n\n #ijs .opacity-25 {\n opacity: 0.25;\n}\n\n #ijs .shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n #ijs .outline-none {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n\n #ijs .outline {\n outline-style: solid;\n}\n\n #ijs .ring-px {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n #ijs .ring-width-job-card {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(var(--i-job-card-stroke-width) + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n #ijs .ring-width-section {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(var(--i-section-stroke-width) + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n #ijs .ring-job-card-stroke {\n --tw-ring-color: var(--i-job-card-stroke-color);\n}\n\n #ijs .ring-section-strong-stroke {\n --tw-ring-color: var(--i-section-strong-stroke-color);\n}\n\n #ijs .ring-section-weak-stroke {\n --tw-ring-color: var(--i-section-weak-stroke-color);\n}\n\n #ijs .ring-tag-neutral-weak-stroke {\n --tw-ring-color: var(--i-tag-neutral-weak-stroke-color);\n}\n\n #ijs .blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n #ijs .grayscale {\n --tw-grayscale: grayscale(100%);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n #ijs .invert {\n --tw-invert: invert(100%);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n #ijs .sepia {\n --tw-sepia: sepia(100%);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n #ijs .filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n #ijs .backdrop-filter {\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n\n #ijs .transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n #ijs .transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n #ijs .transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n #ijs .duration-medium {\n transition-duration: .6s;\n}\n\n #ijs .duration-slow {\n transition-duration: .9s;\n}\n\n #ijs .duration-snappy {\n transition-duration: .4s;\n}\n\n #ijs .ease-expo-out {\n transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n #ijs .font-style-default {\n font-style: var(--i-font-style);\n}\n\n #ijs .font-style-filter {\n font-style: var(--i-style-filter);\n}\n\n #ijs .font-style-input {\n font-style: var(--i-style-input);\n}\n\n #ijs .font-style-job-heading {\n font-style: var(--i-style-job-heading);\n}\n\n #ijs .font-style-tag {\n font-style: var(--i-style-tag);\n}\n\n #ijs .top-filters {\n top: var(--i-filters-offset-top);\n}\n\n #ijs .fr {\n outline: none;\n}\n\n #ijs .fr:focus {\n outline: none;\n}\n\n #ijs .fr:focus-visible {\n outline: none;\n --tw-ring-offset-width: 1px;\n --tw-ring-offset-color: oklch(var(--i-lowest) / 1);\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-a-9) / 1);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n #ijs .fr-parent:has(.fr-child:focus-visible) {\n outline: none;\n --tw-ring-offset-width: 1px;\n --tw-ring-offset-color: oklch(var(--i-lowest) / 1);\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-a-9) / 1);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n #ijs .fr-child {}\n\n #ijs .hide-scrollbars::-webkit-scrollbar {\n display: none;\n}\n\n #ijs .hide-scrollbars {\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n\n #ijs .touch-hitbox::before {\n content: '';\n position: absolute;\n display: block;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 100%;\n height: 100%;\n min-height: 44px;\n min-width: 44px;\n z-index: 9999;\n}\n\n #ijs .\\[a-zA-Z0-9-_\\:\\.\\$\\@\\?\\] {\n a-z-a--z0-9-_: .$@?;\n}\n\n #ijs .\\[text-wrap\\:pretty\\] {\n text-wrap: pretty;\n}\n\n #ijs .placeholder\\:text-neutral-10::-moz-placeholder {\n --tw-text-opacity: 1;\n color: oklch(var(--i-n-10) / var(--tw-text-opacity));\n}\n\n #ijs .placeholder\\:text-neutral-10::placeholder {\n --tw-text-opacity: 1;\n color: oklch(var(--i-n-10) / var(--tw-text-opacity));\n}\n\n #ijs .hover\\:bg-interactive-accent-bg-hover:hover {\n background-color: var(--i-interactive-accent-bg-hover);\n}\n\n #ijs .hover\\:bg-interactive-neutral-bg-hover:hover {\n background-color: var(--i-interactive-neutral-bg-hover);\n}\n\n #ijs .focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n\n #ijs .active\\:-scale-100:active {\n --tw-scale-x: -1;\n --tw-scale-y: -1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n #ijs .active\\:scale-95:active {\n --tw-scale-x: .95;\n --tw-scale-y: .95;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n #ijs .active\\:scale-\\[0\\.975\\]:active {\n --tw-scale-x: 0.975;\n --tw-scale-y: 0.975;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n #ijs .active\\:bg-job-card-bg-active:active {\n background-color: var(--i-job-card-bg-active);\n}\n\n #ijs .active\\:ring-job-card-stroke-active:active {\n --tw-ring-color: var(--i-job-card-stroke-color-active);\n}\n\n @media (pointer: fine) {\n\n #ijs .group:hover .pointer-fine\\:group-hover\\:text-copy-neutral {\n color: var(--i-copy);\n }\n}\n\n @media (min-width: 768px) {\n\n #ijs .md\\:col-span-2 {\n grid-column: span 2 / span 2;\n }\n}\n\n @media (min-width: 768px) {\n\n #ijs .md\\:grid {\n display: grid;\n }\n}\n\n @media (min-width: 768px) {\n\n #ijs .md\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n}\n\n @media (min-width: 768px) {\n\n #ijs .md\\:flex-wrap {\n flex-wrap: wrap;\n }\n}\n\n @media (min-width: 768px) {\n\n #ijs .md\\:overflow-hidden {\n overflow: hidden;\n }\n}\n\n @media (min-width: 768px) {\n\n #ijs .md\\:px-0 {\n padding-left: 0px;\n padding-right: 0px;\n }\n}\n\n @media (min-width: 768px) {\n\n #ijs .md\\:px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n }\n}\n\n @media (min-width: 768px) {\n\n #ijs .md\\:text-left {\n text-align: left;\n }\n}\n\n @media (min-width: 1024px) {\n\n #ijs .lg\\:ring-width-section {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(var(--i-section-stroke-width) + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n }\n}\n\n #ijs .\\[\\&\\:has\\(\\.fr-child\\:active\\)\\]\\:scale-\\[0\\.975\\]:has(.fr-child:active) {\n --tw-scale-x: 0.975;\n --tw-scale-y: 0.975;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n";
4309
+ const tailwind = "#ijs {\n font-size: 16px;\n --tw-content: '';\n}\n\n #ijs * {\n box-sizing: border-box;\n border-style: solid;\n border-width: 0;\n -webkit-tap-highlight-color: transparent;\n font-family: inherit;\n font-style: inherit;\n font-weight: inherit;\n }\n\n #ijs ::before,\n #ijs ::after {\n box-sizing: border-box;\n }\n\n #ijs :is(a) {\n text-decoration: none;\n }\n\n #ijs :is(ul, ol) {\n list-style: none;\n padding: 0;\n margin: 0;\n }\n\n #ijs :is(p) {\n margin: 0;\n padding: 0;\n }\n\n #ijs :is(li) {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n #ijs :is(button),\n #ijs :is(a) {\n display: block;\n margin: 0;\n padding: 0;\n border: unset;\n background: unset;\n text-align: unset;\n }\n\n #ijs :is(input),\n #ijs :is(textarea) {\n display: block;\n margin: 0;\n padding: 0;\n min-width: 0;\n max-width: unset;\n width: 100%;\n }\n\n #ijs :is(svg) {\n display: block;\n }\n\n #ijs.reduced-motion * {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n scroll-behavior: auto !important;\n animation-delay: 0s !important;\n }\n\n @media (prefers-reduced-motion) {\n #ijs * {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n scroll-behavior: auto !important;\n animation-delay: 0s !important;\n }\n }\n\n #ijs *, #ijs ::before, #ijs ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n #ijs ::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n #ijs .container {\n width: 100%;\n}\n\n @media (min-width: 640px) {\n\n #ijs .container {\n max-width: 640px;\n }\n}\n\n @media (min-width: 768px) {\n\n #ijs .container {\n max-width: 768px;\n }\n}\n\n @media (min-width: 1024px) {\n\n #ijs .container {\n max-width: 1024px;\n }\n}\n\n @media (min-width: 1280px) {\n\n #ijs .container {\n max-width: 1280px;\n }\n}\n\n @media (min-width: 1536px) {\n\n #ijs .container {\n max-width: 1536px;\n }\n}\n\n #ijs .pointer-events-none {\n pointer-events: none;\n}\n\n #ijs .visible {\n visibility: visible;\n}\n\n #ijs .invisible {\n visibility: hidden;\n}\n\n #ijs .collapse {\n visibility: collapse;\n}\n\n #ijs .static {\n position: static;\n}\n\n #ijs .fixed {\n position: fixed;\n}\n\n #ijs .absolute {\n position: absolute;\n}\n\n #ijs .relative {\n position: relative;\n}\n\n #ijs .sticky {\n position: sticky;\n}\n\n #ijs .top-0 {\n top: 0px;\n}\n\n #ijs .isolate {\n isolation: isolate;\n}\n\n #ijs .m-0 {\n margin: 0px;\n}\n\n #ijs .m-11 {\n margin: 2.75rem;\n}\n\n #ijs .m-3 {\n margin: 0.75rem;\n}\n\n #ijs .mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n\n #ijs .ml-auto {\n margin-left: auto;\n}\n\n #ijs .block {\n display: block;\n}\n\n #ijs .inline-block {\n display: inline-block;\n}\n\n #ijs .inline {\n display: inline;\n}\n\n #ijs .flex {\n display: flex;\n}\n\n #ijs .inline-flex {\n display: inline-flex;\n}\n\n #ijs .table {\n display: table;\n}\n\n #ijs .table-row {\n display: table-row;\n}\n\n #ijs .flow-root {\n display: flow-root;\n}\n\n #ijs .grid {\n display: grid;\n}\n\n #ijs .inline-grid {\n display: inline-grid;\n}\n\n #ijs .contents {\n display: contents;\n}\n\n #ijs .list-item {\n display: list-item;\n}\n\n #ijs .\\!hidden {\n display: none !important;\n}\n\n #ijs .hidden {\n display: none;\n}\n\n #ijs .h-8 {\n height: 2rem;\n}\n\n #ijs .h-\\[1lh\\] {\n height: 1lh;\n}\n\n #ijs .min-h-screen {\n min-height: 100vh;\n}\n\n #ijs .w-\\[10ch\\] {\n width: 10ch;\n}\n\n #ijs .w-\\[6ch\\] {\n width: 6ch;\n}\n\n #ijs .w-\\[8ch\\] {\n width: 8ch;\n}\n\n #ijs .w-full {\n width: 100%;\n}\n\n #ijs .min-w-0 {\n min-width: 0px;\n}\n\n #ijs .max-w-full {\n max-width: 100%;\n}\n\n #ijs .max-w-screen-lg {\n max-width: 1024px;\n}\n\n #ijs .flex-1 {\n flex: 1 1 0%;\n}\n\n #ijs .flex-none {\n flex: none;\n}\n\n #ijs .flex-shrink {\n flex-shrink: 1;\n}\n\n #ijs .shrink {\n flex-shrink: 1;\n}\n\n #ijs .shrink-0 {\n flex-shrink: 0;\n}\n\n #ijs .flex-grow {\n flex-grow: 1;\n}\n\n #ijs .grow {\n flex-grow: 1;\n}\n\n #ijs .border-collapse {\n border-collapse: collapse;\n}\n\n #ijs .origin-\\[50\\%_1\\.75rem\\] {\n transform-origin: 50% 1.75rem;\n}\n\n #ijs .origin-top {\n transform-origin: top;\n}\n\n #ijs .transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n @keyframes appear-tag {\n\n 0% {\n transform: scale(0.9);\n }\n\n 100% {\n transform: scale(1);\n }\n}\n\n #ijs .animate-appear-tag {\n animation: appear-tag .6s cubic-bezier(0.16, 1, 0.3, 1) both;\n}\n\n @keyframes selected-tag {\n\n 0% {\n transform: scale(1.11);\n }\n\n 100% {\n transform: scale(1);\n }\n}\n\n #ijs .animate-selected-tag {\n animation: selected-tag .9s cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n @keyframes skeleton {\n\n 0% {\n opacity: 0.2;\n }\n\n 50% {\n opacity: 0.5;\n }\n\n 100% {\n opacity: 0.3;\n }\n}\n\n #ijs .animate-skeleton {\n animation: skeleton 1s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n @keyframes slide-in-bottom {\n\n 0% {\n transform: translateY(-50%);\n }\n\n 100% {\n transform: translateY(0);\n }\n}\n\n #ijs .animate-slide-in-bottom {\n animation: slide-in-bottom .4s cubic-bezier(0.16, 1, 0.3, 1) both;\n}\n\n #ijs .cursor-default {\n cursor: default;\n}\n\n #ijs .cursor-pointer {\n cursor: pointer;\n}\n\n #ijs .select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n\n #ijs .resize {\n resize: both;\n}\n\n #ijs .flex-col {\n flex-direction: column;\n}\n\n #ijs .flex-wrap {\n flex-wrap: wrap;\n}\n\n #ijs .flex-nowrap {\n flex-wrap: nowrap;\n}\n\n #ijs .items-start {\n align-items: flex-start;\n}\n\n #ijs .items-center {\n align-items: center;\n}\n\n #ijs .justify-end {\n justify-content: flex-end;\n}\n\n #ijs .justify-center {\n justify-content: center;\n}\n\n #ijs .gap-1 {\n gap: 0.25rem;\n}\n\n #ijs .gap-2 {\n gap: 0.5rem;\n}\n\n #ijs .gap-3 {\n gap: 0.75rem;\n}\n\n #ijs .gap-4 {\n gap: 1rem;\n}\n\n #ijs .self-center {\n align-self: center;\n}\n\n #ijs .overflow-hidden {\n overflow: hidden;\n}\n\n #ijs .overflow-y-auto {\n overflow-y: auto;\n}\n\n #ijs .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n #ijs .rounded-input {\n border-radius: var(--i-radius-input);\n}\n\n #ijs .rounded-interactive {\n border-radius: var(--i-radius-interactive);\n}\n\n #ijs .rounded-job-card {\n border-radius: var(--i-radius-job-card);\n}\n\n #ijs .rounded-job-tag {\n border-radius: var(--i-radius-job-tag);\n}\n\n #ijs .rounded-section {\n border-radius: var(--i-radius-section);\n}\n\n #ijs .rounded-tag {\n border-radius: var(--i-radius-job-tag);\n}\n\n #ijs .border-px {\n border-width: 1px;\n}\n\n #ijs .border-solid {\n border-style: solid;\n}\n\n #ijs .border-none {\n border-style: none;\n}\n\n #ijs .border-tag-accent-strong-stroke {\n border-color: var(--i-tag-accent-strong-stroke-color);\n}\n\n #ijs .border-tag-neutral-strong-stroke {\n border-color: var(--i-tag-neutral-strong-stroke-color);\n}\n\n #ijs .border-tag-neutral-weak-stroke {\n border-color: var(--i-tag-neutral-weak-stroke-color);\n}\n\n #ijs .border-transparent {\n border-color: transparent;\n}\n\n #ijs .bg-\\[currentColor\\] {\n background-color: currentColor;\n}\n\n #ijs .bg-app {\n background-color: var(--i-app-bg);\n}\n\n #ijs .bg-interactive-accent-bg {\n background-color: var(--i-interactive-accent-bg);\n}\n\n #ijs .bg-interactive-neutral-bg {\n background-color: var(--i-interactive-neutral-bg);\n}\n\n #ijs .bg-job-card-bg {\n background-color: var(--i-job-card-bg);\n}\n\n #ijs .bg-lowest {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-lowest) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-section-strong-bg {\n background-color: var(--i-section-strong-bg);\n}\n\n #ijs .bg-section-weak-bg {\n background-color: var(--i-section-weak-bg);\n}\n\n #ijs .bg-tag-accent-strong-bg {\n background-color: var(--i-tag-accent-strong-bg);\n}\n\n #ijs .bg-tag-monetary-weak-bg {\n background-color: var(--i-tag-monetary-weak-bg);\n}\n\n #ijs .bg-tag-neutral-strong-bg {\n background-color: var(--i-tag-neutral-strong-bg);\n}\n\n #ijs .bg-tag-neutral-weak-bg {\n background-color: var(--i-tag-neutral-weak-bg);\n}\n\n #ijs .p-0 {\n padding: 0px;\n}\n\n #ijs .p-2 {\n padding: 0.5rem;\n}\n\n #ijs .p-4 {\n padding: 1rem;\n}\n\n #ijs .px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n\n #ijs .px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n\n #ijs .px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n\n #ijs .px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n\n #ijs .py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n\n #ijs .py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n #ijs .py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n\n #ijs .py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n\n #ijs .pl-1 {\n padding-left: 0.25rem;\n}\n\n #ijs .pl-2 {\n padding-left: 0.5rem;\n}\n\n #ijs .pl-3 {\n padding-left: 0.75rem;\n}\n\n #ijs .pl-4 {\n padding-left: 1rem;\n}\n\n #ijs .pl-5 {\n padding-left: 1.25rem;\n}\n\n #ijs .pr-1 {\n padding-right: 0.25rem;\n}\n\n #ijs .pr-3 {\n padding-right: 0.75rem;\n}\n\n #ijs .pr-5 {\n padding-right: 1.25rem;\n}\n\n #ijs .pt-1 {\n padding-top: 0.25rem;\n}\n\n #ijs .text-center {\n text-align: center;\n}\n\n #ijs .text-justify {\n text-align: justify;\n}\n\n #ijs .font-family-default {\n font-family: var(--i-font);\n}\n\n #ijs .font-family-filter {\n font-family: var(--i-font-filter);\n}\n\n #ijs .font-family-job-heading {\n font-family: var(--i-font-job-heading);\n}\n\n #ijs .font-family-tag {\n font-family: var(--i-font-tag);\n}\n\n #ijs .text-style-filter {\n font-size: 1rem;\n line-height: 1.5rem;\n letter-spacing: -0.01em;\n}\n\n #ijs .text-style-input {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n\n #ijs .text-style-job-card {\n font-size: 0.875rem;\n line-height: 1.125rem;\n}\n\n #ijs .text-style-job-card-info {\n font-size: 0.75rem;\n line-height: 1.125rem;\n}\n\n #ijs .text-style-job-heading {\n font-size: 1.125rem;\n line-height: 1.5rem;\n}\n\n #ijs .text-style-tag {\n font-size: 0.875rem;\n line-height: 1.5rem;\n}\n\n #ijs .font-weight-default {\n font-weight: var(--i-weight-default);\n}\n\n #ijs .font-weight-filter {\n font-weight: var(--i-weight-filter);\n}\n\n #ijs .font-weight-input {\n font-weight: var(--i-weight-input);\n}\n\n #ijs .font-weight-job-heading {\n font-weight: var(--i-weight-job-heading);\n}\n\n #ijs .font-weight-tag {\n font-weight: var(--i-weight-tag);\n}\n\n #ijs .uppercase {\n text-transform: uppercase;\n}\n\n #ijs .lowercase {\n text-transform: lowercase;\n}\n\n #ijs .capitalize {\n text-transform: capitalize;\n}\n\n #ijs .italic {\n font-style: italic;\n}\n\n #ijs .ordinal {\n --tw-ordinal: ordinal;\n font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);\n}\n\n #ijs .tabular-nums {\n --tw-numeric-spacing: tabular-nums;\n font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);\n}\n\n #ijs .text-copy-accent {\n color: var(--i-copy-accent);\n}\n\n #ijs .text-copy-job-info {\n color: var(--i-copy-info);\n}\n\n #ijs .text-copy-neutral {\n color: var(--i-copy);\n}\n\n #ijs .text-copy-neutral-icon {\n color: var(--i-copy-icon);\n}\n\n #ijs .text-copy-neutral-lowcontrast {\n color: var(--i-copy-lowcontrast);\n}\n\n #ijs .text-interactive-accent-text {\n color: var(--i-interactive-accent-text);\n}\n\n #ijs .text-interactive-neutral-text {\n color: var(--i-interactive-neutral-text);\n}\n\n #ijs .text-tag-accent-strong-copy {\n color: var(--i-tag-accent-strong-copy);\n}\n\n #ijs .text-tag-monetary-weak-copy {\n color: var(--i-tag-monetary-weak-copy);\n}\n\n #ijs .text-tag-neutral-strong-copy {\n color: var(--i-tag-neutral-strong-copy);\n}\n\n #ijs .text-tag-neutral-weak-copy {\n color: var(--i-tag-neutral-weak-copy);\n}\n\n #ijs .caret-accent-11 {\n caret-color: oklch(var(--i-a-11) / 1);\n}\n\n #ijs .opacity-20 {\n opacity: 0.2;\n}\n\n #ijs .opacity-25 {\n opacity: 0.25;\n}\n\n #ijs .shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n #ijs .outline-none {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n\n #ijs .outline {\n outline-style: solid;\n}\n\n #ijs .ring-px {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n #ijs .ring-width-job-card {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(var(--i-job-card-stroke-width) + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n #ijs .ring-width-section {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(var(--i-section-stroke-width) + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n #ijs .ring-job-card-stroke {\n --tw-ring-color: var(--i-job-card-stroke-color);\n}\n\n #ijs .ring-section-strong-stroke {\n --tw-ring-color: var(--i-section-strong-stroke-color);\n}\n\n #ijs .ring-section-weak-stroke {\n --tw-ring-color: var(--i-section-weak-stroke-color);\n}\n\n #ijs .blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n #ijs .grayscale {\n --tw-grayscale: grayscale(100%);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n #ijs .invert {\n --tw-invert: invert(100%);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n #ijs .sepia {\n --tw-sepia: sepia(100%);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n #ijs .filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n #ijs .backdrop-filter {\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n\n #ijs .transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n #ijs .transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n #ijs .transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n #ijs .duration-medium {\n transition-duration: .6s;\n}\n\n #ijs .duration-slow {\n transition-duration: .9s;\n}\n\n #ijs .duration-snappy {\n transition-duration: .4s;\n}\n\n #ijs .ease-expo-out {\n transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n #ijs .font-style-default {\n font-style: var(--i-font-style);\n}\n\n #ijs .font-style-filter {\n font-style: var(--i-style-filter);\n}\n\n #ijs .font-style-input {\n font-style: var(--i-style-input);\n}\n\n #ijs .font-style-job-heading {\n font-style: var(--i-style-job-heading);\n}\n\n #ijs .font-style-tag {\n font-style: var(--i-style-tag);\n}\n\n #ijs .top-filters {\n top: var(--i-filters-offset-top);\n}\n\n #ijs .fr {\n outline: none;\n}\n\n #ijs .fr:focus {\n outline: none;\n}\n\n #ijs .fr:focus-visible {\n outline: none;\n --tw-ring-offset-width: 1px;\n --tw-ring-offset-color: oklch(var(--i-lowest) / 1);\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-a-9) / 1);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n #ijs .fr-parent:has(.fr-child:focus-visible) {\n outline: none;\n --tw-ring-offset-width: 1px;\n --tw-ring-offset-color: oklch(var(--i-lowest) / 1);\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-a-9) / 1);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n #ijs .fr-child {}\n\n #ijs .hide-scrollbars::-webkit-scrollbar {\n display: none;\n}\n\n #ijs .hide-scrollbars {\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n\n #ijs .touch-hitbox::before {\n content: '';\n position: absolute;\n display: block;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 100%;\n height: 100%;\n min-height: 44px;\n min-width: 44px;\n z-index: 9999;\n}\n\n #ijs .\\[a-zA-Z0-9-_\\:\\.\\$\\@\\?\\] {\n a-z-a--z0-9-_: .$@?;\n}\n\n #ijs .\\[text-wrap\\:pretty\\] {\n text-wrap: pretty;\n}\n\n #ijs .placeholder\\:text-neutral-10::-moz-placeholder {\n --tw-text-opacity: 1;\n color: oklch(var(--i-n-10) / var(--tw-text-opacity));\n}\n\n #ijs .placeholder\\:text-neutral-10::placeholder {\n --tw-text-opacity: 1;\n color: oklch(var(--i-n-10) / var(--tw-text-opacity));\n}\n\n #ijs .focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n\n #ijs .active\\:-scale-100:active {\n --tw-scale-x: -1;\n --tw-scale-y: -1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n #ijs .active\\:scale-95:active {\n --tw-scale-x: .95;\n --tw-scale-y: .95;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n #ijs .active\\:scale-\\[0\\.975\\]:active {\n --tw-scale-x: 0.975;\n --tw-scale-y: 0.975;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n #ijs .active\\:bg-job-card-bg-active:active {\n background-color: var(--i-job-card-bg-active);\n}\n\n #ijs .active\\:ring-job-card-stroke-active:active {\n --tw-ring-color: var(--i-job-card-stroke-color-active);\n}\n\n @media (pointer: coarse) {\n\n #ijs .pointer-coarse\\:overflow-x-auto {\n overflow-x: auto;\n }\n}\n\n @media (pointer: fine) {\n\n #ijs .pointer-fine\\:w-full {\n width: 100%;\n }\n}\n\n @media (pointer: fine) {\n\n #ijs .pointer-fine\\:flex-wrap {\n flex-wrap: wrap;\n }\n}\n\n @media (pointer: fine) {\n\n #ijs .pointer-fine\\:rounded-section {\n border-radius: var(--i-radius-section);\n }\n}\n\n @media (pointer: fine) {\n\n #ijs .pointer-fine\\:bg-app {\n background-color: var(--i-app-bg);\n }\n}\n\n @media (pointer: fine) {\n\n #ijs .pointer-fine\\:p-2 {\n padding: 0.5rem;\n }\n}\n\n @media (pointer: fine) {\n\n #ijs .pointer-fine\\:px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n }\n}\n\n @media (pointer: fine) {\n\n #ijs .pointer-fine\\:ring-width-section {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(var(--i-section-stroke-width) + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n }\n}\n\n @media (pointer: fine) {\n\n #ijs .pointer-fine\\:hover\\:bg-interactive-accent-bg-hover:hover {\n background-color: var(--i-interactive-accent-bg-hover);\n }\n}\n\n @media (pointer: fine) {\n\n #ijs .pointer-fine\\:hover\\:bg-interactive-neutral-bg-hover:hover {\n background-color: var(--i-interactive-neutral-bg-hover);\n }\n}\n\n @media (pointer: fine) {\n\n #ijs .group:hover .pointer-fine\\:group-hover\\:text-copy-neutral {\n color: var(--i-copy);\n }\n}\n\n @media (min-width: 768px) {\n\n #ijs .md\\:col-span-2 {\n grid-column: span 2 / span 2;\n }\n}\n\n @media (min-width: 768px) {\n\n #ijs .md\\:grid {\n display: grid;\n }\n}\n\n @media (min-width: 768px) {\n\n #ijs .md\\:grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n}\n\n @media (min-width: 768px) {\n\n #ijs .md\\:px-0 {\n padding-left: 0px;\n padding-right: 0px;\n }\n}\n\n @media (min-width: 768px) {\n\n #ijs .md\\:px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n }\n}\n\n @media (min-width: 1024px) {\n\n #ijs .lg\\:ring-width-section {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(var(--i-section-stroke-width) + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n }\n}\n\n #ijs .\\[\\&\\:has\\(\\.fr-child\\:active\\)\\]\\:scale-\\[0\\.975\\]:has(.fr-child:active) {\n --tw-scale-x: 0.975;\n --tw-scale-y: 0.975;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n";
4143
4310
  const match = (m2) => {
4144
4311
  const patterns = [];
4145
4312
  const i2 = (m22) => ({
@@ -4331,30 +4498,28 @@ const generateColorThemeVars = (theme) => {
4331
4498
  const oklch = (color, opacity) => `oklch(${color} / ${opacity ?? 1})`;
4332
4499
  const transparent = oklch(black, 0);
4333
4500
  const generateTokenVars = (theme, color) => {
4334
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
4501
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
4335
4502
  const {
4336
4503
  typography,
4337
4504
  highlights
4338
4505
  } = theme;
4339
- const {
4340
- highcontrast
4341
- } = theme.accessibility;
4506
+ const highcontrast = ((_a = theme.accessibility) == null ? void 0 : _a.highcontrast) ?? false;
4342
4507
  return {
4343
4508
  "filters-offset-top": (theme.filtersOffsetTopPx ?? 112) + "px",
4344
4509
  font: typography.font_family ?? "inherit",
4345
4510
  "font-style": typography.style ?? "inherit",
4346
- "font-filter": ((_a = typography.filter) == null ? void 0 : _a.font_family) ?? typography.font_family ?? "inherit",
4347
- "font-job-heading": ((_b = theme.typography.job_heading) == null ? void 0 : _b.font_family) ?? theme.typography.font_family ?? "inherit",
4348
- "font-tag": ((_c = typography.tag) == null ? void 0 : _c.font_family) ?? typography.font_family ?? "inherit",
4511
+ "font-filter": ((_b = typography.filter) == null ? void 0 : _b.font_family) ?? typography.font_family ?? "inherit",
4512
+ "font-job-heading": ((_c = theme.typography.job_heading) == null ? void 0 : _c.font_family) ?? theme.typography.font_family ?? "inherit",
4513
+ "font-tag": ((_d = typography.tag) == null ? void 0 : _d.font_family) ?? typography.font_family ?? "inherit",
4349
4514
  "weight-default": typography.weight ?? "inherit",
4350
- "style-filter": ((_d = typography.filter) == null ? void 0 : _d.style) ?? typography.style ?? "inherit",
4351
- "weight-filter": ((_e = typography.filter) == null ? void 0 : _e.weight) ?? typography.weight ?? "inherit",
4352
- "style-tag": ((_f = typography.tag) == null ? void 0 : _f.style) ?? typography.style ?? "inherit",
4353
- "style-job-heading": ((_g = typography.job_heading) == null ? void 0 : _g.style) ?? typography.style ?? "inherit",
4354
- "weight-tag": ((_h = typography.tag) == null ? void 0 : _h.weight) ?? typography.weight ?? "inherit",
4355
- "weight-job-heading": ((_i = typography.job_heading) == null ? void 0 : _i.weight) ?? typography.weight ?? "inherit",
4356
- "style-input": ((_j = typography.input) == null ? void 0 : _j.style) ?? typography.style ?? "inherit",
4357
- "weight-input": ((_k = typography.input) == null ? void 0 : _k.weight) ?? typography.weight ?? "inherit",
4515
+ "style-filter": ((_e = typography.filter) == null ? void 0 : _e.style) ?? typography.style ?? "inherit",
4516
+ "weight-filter": ((_f = typography.filter) == null ? void 0 : _f.weight) ?? typography.weight ?? "inherit",
4517
+ "style-tag": ((_g = typography.tag) == null ? void 0 : _g.style) ?? typography.style ?? "inherit",
4518
+ "style-job-heading": ((_h = typography.job_heading) == null ? void 0 : _h.style) ?? typography.style ?? "inherit",
4519
+ "weight-tag": ((_i = typography.tag) == null ? void 0 : _i.weight) ?? typography.weight ?? "inherit",
4520
+ "weight-job-heading": ((_j = typography.job_heading) == null ? void 0 : _j.weight) ?? typography.weight ?? "inherit",
4521
+ "style-input": ((_k = typography.input) == null ? void 0 : _k.style) ?? typography.style ?? "inherit",
4522
+ "weight-input": ((_l = typography.input) == null ? void 0 : _l.weight) ?? typography.weight ?? "inherit",
4358
4523
  "app-bg": oklch(color.lowest),
4359
4524
  copy: oklch(highcontrast ? color.highest : color["n-12"]),
4360
4525
  "copy-lowcontrast": oklch(color["n-11"]),
@@ -4367,7 +4532,7 @@ const generateTokenVars = (theme, color) => {
4367
4532
  "copy-inverted-lowcontrast": oklch(color["n-4"]),
4368
4533
  "copy-inverted-icon": oklch(color["n-3"]),
4369
4534
  "tag-neutral-weak-bg": highlights === "fill" ? oklch(color["n-2"]) : transparent,
4370
- "tag-neutral-weak-copy": color["n-12"],
4535
+ "tag-neutral-weak-copy": oklch(color["n-12"]),
4371
4536
  "tag-neutral-weak-stroke-color": highlights === "stroke" ? oklch(color["n-8"]) : transparent,
4372
4537
  "tag-neutral-strong-bg": highlights === "fill" ? oklch(color["n-12"]) : transparent,
4373
4538
  "tag-neutral-strong-copy": oklch(highlights === "fill" ? color.white : color["n-12"]),
@@ -4470,6 +4635,7 @@ const jobSearchPlugin = (params) => sdk.createPlugin(({
4470
4635
  logger,
4471
4636
  analytics
4472
4637
  }) => {
4638
+ var _a;
4473
4639
  const styleElements = [y$2("style", {
4474
4640
  id: "inploi-job-search-styles"
4475
4641
  }, tailwind), y$2("style", {
@@ -4484,7 +4650,7 @@ const jobSearchPlugin = (params) => sdk.createPlugin(({
4484
4650
  apiClient,
4485
4651
  logger,
4486
4652
  analytics,
4487
- class: params.theme.accessibility.reducedMotion ? "reduced-motion" : void 0
4653
+ class: ((_a = params.theme.accessibility) == null ? void 0 : _a.reducedMotion) ? "reduced-motion" : void 0
4488
4654
  })]);
4489
4655
  return {
4490
4656
  /** Returns a string with the initial rendering state of the UI.