@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.
@@ -529,17 +529,25 @@ const Fallback = ({
529
529
  }) => {
530
530
  return u$1("div", {
531
531
  style: {
532
- padding: "0 1rem",
532
+ display: "flex",
533
+ flexDirection: "column",
534
+ gap: ".5rem",
535
+ padding: "1rem",
533
536
  fontSize: "1rem",
534
- color: "#333333",
535
- fontFamily: "'system-ui' 'Helvetica'"
537
+ color: "hsl(10, 82%, 45%)",
538
+ fontFamily: "'system-ui' 'Helvetica'",
539
+ background: "hsl(7, 100%, 98%)"
536
540
  },
537
- children: ["Something went wrong.", u$1("br", {}), ' Error Message: "', error.message, '"', u$1("button", {
541
+ children: [u$1("p", {
542
+ children: error.message
543
+ }), u$1("button", {
538
544
  onClick: resetError,
539
545
  style: {
540
- background: "#efefef",
546
+ background: "white",
541
547
  border: "none",
542
548
  cursor: "pointer",
549
+ textAlign: "center",
550
+ borderRadius: "4px",
543
551
  padding: "0.5rem 1rem"
544
552
  },
545
553
  children: "Retry"
@@ -696,6 +704,9 @@ const icons = {
696
704
  x: u$1("path", {
697
705
  d: "M8 8l8 8M8 16l8 -8"
698
706
  }),
707
+ plus: u$1("path", {
708
+ d: "M12 8V16M8 12H16"
709
+ }),
699
710
  "chevron-right": u$1("path", {
700
711
  d: "M11 8L15 12L11 16"
701
712
  })
@@ -909,6 +920,7 @@ function B$1(n2, t2) {
909
920
  }
910
921
  const JOB_SEARCH_ELEMENT_ID = "inploi-job-search";
911
922
  const JOB_SEARCH_SCOPE_ELEMENT_ID = "ijs";
923
+ const PAGE_SIZE = 10;
912
924
  function g(n2, t2) {
913
925
  for (var e2 in t2)
914
926
  n2[e2] = t2[e2];
@@ -1474,11 +1486,11 @@ if (process.env.NODE_ENV === "production") {
1474
1486
  shim.exports = requireUseSyncExternalStoreShim_development();
1475
1487
  }
1476
1488
  var shimExports = shim.exports;
1477
- const noop = () => {
1489
+ const noop$1 = () => {
1478
1490
  };
1479
1491
  const UNDEFINED = (
1480
1492
  /*#__NOINLINE__*/
1481
- noop()
1493
+ noop$1()
1482
1494
  );
1483
1495
  const OBJECT = Object;
1484
1496
  const isUndefined = (v2) => v2 === UNDEFINED;
@@ -1564,8 +1576,8 @@ const [onWindowEvent, offWindowEvent] = isWindowDefined && window.addEventListen
1564
1576
  window.addEventListener.bind(window),
1565
1577
  window.removeEventListener.bind(window)
1566
1578
  ] : [
1567
- noop,
1568
- noop
1579
+ noop$1,
1580
+ noop$1
1569
1581
  ];
1570
1582
  const isVisible = () => {
1571
1583
  const visibilityState = isDocumentDefined && document.visibilityState;
@@ -1779,7 +1791,7 @@ const initCache = (provider, options) => {
1779
1791
  const opts = mergeObjects(defaultConfigOptions, options);
1780
1792
  const EVENT_REVALIDATORS = {};
1781
1793
  const mutate2 = internalMutate.bind(UNDEFINED, provider);
1782
- let unmount = noop;
1794
+ let unmount = noop$1;
1783
1795
  const subscriptions = {};
1784
1796
  const subscribe = (key, callback) => {
1785
1797
  const subs = subscriptions[key] || [];
@@ -1845,11 +1857,11 @@ const [cache, mutate] = initCache(/* @__PURE__ */ new Map());
1845
1857
  const defaultConfig = mergeObjects(
1846
1858
  {
1847
1859
  // events
1848
- onLoadingSlow: noop,
1849
- onSuccess: noop,
1850
- onError: noop,
1860
+ onLoadingSlow: noop$1,
1861
+ onSuccess: noop$1,
1862
+ onError: noop$1,
1851
1863
  onErrorRetry,
1852
- onDiscarded: noop,
1864
+ onDiscarded: noop$1,
1853
1865
  // switches
1854
1866
  revalidateOnFocus: true,
1855
1867
  revalidateOnReconnect: true,
@@ -2876,7 +2888,6 @@ const payPeriods = {
2876
2888
  const JobPayloadSchema = object({
2877
2889
  id: number(),
2878
2890
  company_name: string(),
2879
- company_logo: string(),
2880
2891
  employment_type: union([literal("FULL_TIME"), literal("PART_TIME"), literal("TEMPORARY"), literal("CONTRACTOR"), literal("INTERN"), literal("VOLUNTEER"), literal("OTHER")]),
2881
2892
  location_type: union([literal("LOCATION"), literal("REMOTE"), literal("HYBRID")]),
2882
2893
  pay_type: union([literal("ANNUALLY"), literal("HOURLY"), literal("MONTHLY"), literal("WEEKLY"), literal("DAILY")]),
@@ -2917,7 +2928,7 @@ const JobSchema = transform(JobPayloadSchema, (schema) => {
2917
2928
  if (schema.pay_mask)
2918
2929
  return "Competitive";
2919
2930
  if (schema.pay_max && schema.pay_min)
2920
- return numberFormatter.formatRange(+schema.pay_min, +schema.pay_max);
2931
+ return [numberFormatter.formatRange(+schema.pay_min, +schema.pay_max), payPeriods[schema.pay_type]].join(" ");
2921
2932
  if (schema.pay)
2922
2933
  return [numberFormatter.format(+schema.pay), payPeriods[schema.pay_type]].join(" ");
2923
2934
  if (!schema.pay && !schema.pay_min && !schema.pay_max)
@@ -2928,8 +2939,7 @@ const JobSchema = transform(JobPayloadSchema, (schema) => {
2928
2939
  id: schema.id,
2929
2940
  isNew,
2930
2941
  company: {
2931
- name: schema.company_name,
2932
- logo: schema.company_logo
2942
+ name: schema.company_name
2933
2943
  },
2934
2944
  employmentType: schema.employment_type,
2935
2945
  locationType: schema.location_type,
@@ -2946,19 +2956,39 @@ const JobSchema = transform(JobPayloadSchema, (schema) => {
2946
2956
  };
2947
2957
  });
2948
2958
  const JobSearchResponseSchema = transform(object({
2949
- data: object({
2950
- results: array(JobSchema),
2951
- available_properties: AvailablePropertiesSchema
2952
- }),
2959
+ data: array(JobSchema),
2953
2960
  pagination: PaginationSchema
2954
2961
  }), (schema) => ({
2955
2962
  pagination: schema.pagination,
2956
- results: schema.data.results,
2957
- availableProperties: schema.data.available_properties
2963
+ results: schema.data
2958
2964
  }));
2959
2965
  const filtersToPayload = (filters) => {
2960
2966
  return Object.fromEntries(Object.entries(filters).map(([key, filter]) => [key, (filter == null ? void 0 : filter.value) ?? null]));
2961
2967
  };
2968
+ const getAvailableFilters = async ({
2969
+ apiClient,
2970
+ filters,
2971
+ logger,
2972
+ signal
2973
+ }) => {
2974
+ try {
2975
+ const response = await apiClient.fetch(`/search/filters`, {
2976
+ method: "POST",
2977
+ body: JSON.stringify({
2978
+ filters: filtersToPayload(filters)
2979
+ }),
2980
+ signal
2981
+ });
2982
+ return parse(AvailablePropertiesSchema, response);
2983
+ } catch (e2) {
2984
+ if (e2 instanceof ValiError) {
2985
+ logger.error(e2.message, e2.issues);
2986
+ } else {
2987
+ logger.error(e2);
2988
+ }
2989
+ throw e2;
2990
+ }
2991
+ };
2962
2992
  const getJobSearchResults = async ({
2963
2993
  apiClient,
2964
2994
  logger,
@@ -2967,16 +2997,14 @@ const getJobSearchResults = async ({
2967
2997
  page = 1
2968
2998
  }) => {
2969
2999
  try {
2970
- const response = await apiClient.fetch(`/search?page=${page}`, {
3000
+ const response = await apiClient.fetch(`/search/results?page=${page}&per_page=${PAGE_SIZE}`, {
2971
3001
  method: "POST",
2972
3002
  body: JSON.stringify({
2973
- query: "Customer Service",
2974
3003
  filters: filtersToPayload(filters)
2975
3004
  }),
2976
3005
  signal
2977
3006
  });
2978
- const parsedResponse = parse(JobSearchResponseSchema, response);
2979
- return parsedResponse;
3007
+ return parse(JobSearchResponseSchema, response);
2980
3008
  } catch (e2) {
2981
3009
  if (e2 instanceof ValiError) {
2982
3010
  logger.error(e2.message, e2.issues);
@@ -2986,17 +3014,15 @@ const getJobSearchResults = async ({
2986
3014
  throw e2;
2987
3015
  }
2988
3016
  };
2989
- const getDataState = (swr) => {
3017
+ const getQueryState = (swr) => {
2990
3018
  if (swr.error)
2991
3019
  return {
2992
3020
  state: "error",
2993
- error: swr.error,
2994
- data: swr.data
3021
+ error: swr.error
2995
3022
  };
2996
3023
  if (swr.isLoading && swr.data === void 0)
2997
3024
  return {
2998
- state: "loading",
2999
- data: swr.data
3025
+ state: "loading"
3000
3026
  };
3001
3027
  if ((swr.isLoading || swr.isValidating) && swr.data)
3002
3028
  return {
@@ -3008,7 +3034,7 @@ const getDataState = (swr) => {
3008
3034
  state: "loaded",
3009
3035
  data: swr.data
3010
3036
  };
3011
- throw new Error("Unhandled state");
3037
+ throw new Error("Unhandled data state");
3012
3038
  };
3013
3039
  const SWR_SETTINGS = {
3014
3040
  keepPreviousData: true,
@@ -3017,6 +3043,7 @@ const SWR_SETTINGS = {
3017
3043
  revalidateIfStale: false,
3018
3044
  revalidateFirstPage: false
3019
3045
  };
3046
+ const cacheKey = (value) => JSON.stringify(value);
3020
3047
  function r(e2) {
3021
3048
  var t2, f2, n2 = "";
3022
3049
  if ("string" == typeof e2 || "number" == typeof e2)
@@ -3090,26 +3117,141 @@ const defineConfig = (options) => {
3090
3117
  return { compose: compose1, cva: cva1, cx: cx1 };
3091
3118
  };
3092
3119
  const { compose, cva, cx } = defineConfig();
3120
+ const tagClass = cva({
3121
+ base: "truncate max-w-full block fr font-style-tag font-family-tag font-weight-tag text-style-tag",
3122
+ variants: {
3123
+ variant: {
3124
+ neutralWeak: "bg-tag-neutral-weak-bg border-solid border-px text-tag-neutral-weak-copy border-tag-neutral-weak-stroke",
3125
+ neutralStrong: "text-tag-neutral-strong-copy border-solid border-px bg-tag-neutral-strong-bg border-tag-neutral-strong-stroke",
3126
+ accentStrong: "text-tag-accent-strong-copy border-solid border-px bg-tag-accent-strong-bg border-tag-accent-strong-stroke",
3127
+ monetaryWeak: "bg-tag-monetary-weak-bg border-none text-tag-monetary-weak-copy"
3128
+ },
3129
+ interactive: {
3130
+ true: "ease-expo-out rounded-interactive transition-all duration-snappy ",
3131
+ false: "rounded-tag"
3132
+ },
3133
+ size: {
3134
+ xs: "px-2",
3135
+ sm: "px-3 py-1",
3136
+ lg: "px-5 py-2"
3137
+ },
3138
+ disabled: {
3139
+ true: "opacity-25 pointer-events-none",
3140
+ false: ""
3141
+ }
3142
+ },
3143
+ compoundVariants: [{
3144
+ disabled: false,
3145
+ interactive: true,
3146
+ class: "cursor-pointer active:scale-[0.975]"
3147
+ }],
3148
+ defaultVariants: {
3149
+ variant: "neutralWeak",
3150
+ size: "sm",
3151
+ disabled: false,
3152
+ interactive: false
3153
+ }
3154
+ });
3155
+ const CurrentValueTag = ({
3156
+ query,
3157
+ property,
3158
+ selectedValues
3159
+ }) => {
3160
+ switch (query.state) {
3161
+ case "error":
3162
+ case "loading":
3163
+ return null;
3164
+ case "loaded":
3165
+ case "revalidating": {
3166
+ const suggestions = query.data[property.key];
3167
+ invariant(suggestions, `API error: no available properties for key “${property.key}”`);
3168
+ const selectedSuggestions = suggestions.filter((s2) => selectedValues.includes(s2.value));
3169
+ switch (selectedSuggestions.length) {
3170
+ case 0:
3171
+ return null;
3172
+ case 1: {
3173
+ const firstSuggestion = selectedSuggestions[0];
3174
+ invariant(firstSuggestion);
3175
+ return u$1("span", {
3176
+ class: tagClass({
3177
+ size: "sm",
3178
+ variant: "accentStrong",
3179
+ interactive: true,
3180
+ class: "truncate"
3181
+ }),
3182
+ children: firstSuggestion.label
3183
+ });
3184
+ }
3185
+ default:
3186
+ return u$1("span", {
3187
+ class: tagClass({
3188
+ size: "sm",
3189
+ variant: "accentStrong",
3190
+ interactive: true,
3191
+ class: "truncate tabular-nums"
3192
+ }),
3193
+ children: selectedSuggestions.length
3194
+ });
3195
+ }
3196
+ }
3197
+ default:
3198
+ exhaustive(query);
3199
+ }
3200
+ };
3093
3201
  const btnClass = cva({
3094
3202
  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",
3095
3203
  variants: {
3096
3204
  variant: {
3097
- neutral: "bg-interactive-neutral-bg hover:bg-interactive-neutral-bg-hover text-interactive-neutral-text",
3098
- accent: "bg-interactive-accent-bg hover:bg-interactive-accent-bg-hover text-interactive-accent-text"
3205
+ neutral: "bg-interactive-neutral-bg pointer-fine:hover:bg-interactive-neutral-bg-hover text-interactive-neutral-text",
3206
+ accent: "bg-interactive-accent-bg pointer-fine:hover:bg-interactive-accent-bg-hover text-interactive-accent-text"
3099
3207
  },
3100
3208
  icon: {
3101
- none: "px-3",
3102
- right: "pl-3 pr-1",
3103
- left: "pl-1 pr-3"
3209
+ none: "",
3210
+ right: "",
3211
+ left: ""
3212
+ },
3213
+ size: {
3214
+ sm: "py-1",
3215
+ lg: "py-2"
3104
3216
  }
3105
3217
  },
3218
+ compoundVariants: [
3219
+ {
3220
+ size: "sm",
3221
+ icon: "right",
3222
+ class: "pl-3 pr-1"
3223
+ },
3224
+ {
3225
+ size: "sm",
3226
+ icon: "left",
3227
+ class: "pl-1 pr-3"
3228
+ },
3229
+ {
3230
+ size: "sm",
3231
+ icon: "none",
3232
+ class: "px-3"
3233
+ },
3234
+ {
3235
+ size: "lg",
3236
+ icon: "right",
3237
+ class: "pl-5 pr-3"
3238
+ }
3239
+ // { size: 'lg', icon: 'left', class: 'pl-3 pr-5' },
3240
+ // { size: 'lg', icon: 'none', class: 'px-5' },
3241
+ ],
3106
3242
  defaultVariants: {
3107
3243
  variant: "neutral",
3108
- icon: "none"
3244
+ icon: "none",
3245
+ size: "sm"
3109
3246
  }
3110
3247
  });
3248
+ const SUGGESTION_COUNT = 8;
3249
+ const TAG_HEIGHT = 42;
3250
+ const GAP = 8;
3251
+ const LINE_COUNT = 6;
3252
+ const PADDING_Y = 4;
3111
3253
  const inputClass = cva({
3112
- 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",
3254
+ 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",
3113
3255
  variants: {
3114
3256
  hasValue: {
3115
3257
  false: "text-copy-neutral",
@@ -3125,26 +3267,33 @@ const toggleInArray = (array2, value) => {
3125
3267
  };
3126
3268
  const FilterContentActive = ({
3127
3269
  value,
3128
- suggestions,
3129
3270
  property,
3130
3271
  onSkip,
3131
- state,
3272
+ useQuery,
3132
3273
  onValueChange,
3274
+ unfilteredQuery,
3133
3275
  onRender
3134
3276
  }) => {
3135
- const [internalValue, setInternalValue] = h(value);
3136
- p(() => {
3137
- setInternalValue(value);
3138
- }, [value]);
3277
+ const filterQuery = getQueryState(useQuery());
3278
+ if (filterQuery.state === "error")
3279
+ throw filterQuery.error;
3280
+ const availablePropertyKeys = F$1(() => {
3281
+ switch (filterQuery.state) {
3282
+ case "loading":
3283
+ return null;
3284
+ case "loaded":
3285
+ case "revalidating": {
3286
+ const properties = filterQuery.data[property.key] ?? [];
3287
+ return Object.fromEntries(properties.map((p2) => [p2.value, true]));
3288
+ }
3289
+ default:
3290
+ exhaustive(filterQuery);
3291
+ }
3292
+ }, [filterQuery, property.key]);
3139
3293
  const selectedValues = getSelectedValues(value);
3140
- const selectedInternalValues = getSelectedValues(internalValue);
3141
- const hasValue = selectedValues.length > 0 || selectedInternalValues.length > 0;
3294
+ const hasValue = selectedValues.length > 0;
3295
+ const [displayCount, setDisplayCount] = h(SUGGESTION_COUNT);
3142
3296
  const [search, setSearch] = h();
3143
- const availableSuggestions = F$1(() => {
3144
- if (!search)
3145
- return suggestions;
3146
- return suggestions.filter((s2) => s2.label.toLowerCase().includes(search.toLowerCase()));
3147
- }, [search, suggestions]);
3148
3297
  p(() => {
3149
3298
  onRender();
3150
3299
  });
@@ -3161,65 +3310,111 @@ const FilterContentActive = ({
3161
3310
  onInput: (e2) => setSearch(e2.currentTarget.value),
3162
3311
  placeholder: "Type to search"
3163
3312
  })
3164
- }), state === "loading" ? u$1("div", {
3165
- class: "flex px-4",
3166
- children: u$1("div", {
3167
- "aria-hidden": true,
3168
- class: tagClass$1({
3169
- size: "lg",
3170
- active: false,
3171
- class: "animate-skeleton cursor-default opacity-20 active:-scale-100"
3172
- }),
3173
- children: u$1("span", {
3174
- class: "inline-block w-[10ch]"
3175
- })
3176
- })
3177
- }) : u$1("ul", {
3178
- "aria-label": "Filter options",
3179
- 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",
3180
- children: availableSuggestions.length === 0 ? u$1("p", {
3181
- class: "font-style-tag text-style-tag font-weight-tag border-px w-full border-transparent py-2 text-center md:text-left",
3182
- children: "No filter options available."
3183
- }) : availableSuggestions.slice(0, 10).map((suggestion) => {
3184
- const active = selectedInternalValues.includes(suggestion.value);
3185
- return u$1("li", {
3186
- class: "animate-appear-tag max-w-full origin-top",
3187
- children: u$1("button", {
3188
- "data-filter": true,
3189
- "data-current-value": active ? "true" : void 0,
3190
- onClick: () => {
3191
- switch (value.select) {
3192
- case "many": {
3193
- const newValue = toggleInArray(selectedInternalValues, suggestion.value);
3194
- setInternalValue({
3195
- select: "many",
3196
- value: newValue
3197
- });
3198
- break;
3199
- }
3200
- case "one":
3201
- setInternalValue({
3202
- select: "one",
3203
- value: suggestion.value
3204
- });
3205
- onValueChange({
3206
- select: "one",
3207
- value: suggestion.value
3208
- });
3209
- break;
3210
- default:
3211
- exhaustive(value);
3212
- }
3213
- },
3214
- class: tagClass$1({
3215
- size: "lg",
3216
- active
3217
- }),
3218
- children: suggestion.label
3219
- })
3220
- }, suggestion.value);
3221
- })
3222
- }), u$1("div", {
3313
+ }), (() => {
3314
+ switch (unfilteredQuery.state) {
3315
+ case "error":
3316
+ throw unfilteredQuery.error;
3317
+ case "loading":
3318
+ return u$1("div", {
3319
+ class: "flex px-4",
3320
+ children: u$1("div", {
3321
+ "aria-hidden": true,
3322
+ class: tagClass({
3323
+ size: "lg",
3324
+ variant: "neutralStrong",
3325
+ interactive: true,
3326
+ class: "animate-skeleton cursor-default opacity-20 active:-scale-100"
3327
+ }),
3328
+ children: u$1("span", {
3329
+ class: "inline-block w-[10ch]"
3330
+ })
3331
+ })
3332
+ });
3333
+ case "revalidating":
3334
+ case "loaded": {
3335
+ const allSuggestions = unfilteredQuery.data[property.key];
3336
+ invariant(allSuggestions, `API error: no available properties for key “${property.key}”`);
3337
+ const filteredSuggestions = search && search.length > 1 ? allSuggestions.filter((s2) => s2.label.toLowerCase().includes(search.toLowerCase())) : allSuggestions;
3338
+ const suggestions = filteredSuggestions.map((s2) => ({
3339
+ ...s2,
3340
+ disabled: availablePropertyKeys === null ? false : availablePropertyKeys[s2.value] !== true
3341
+ }));
3342
+ const noEnabledOptions = !suggestions.find((suggestion) => !suggestion.disabled);
3343
+ if (noEnabledOptions)
3344
+ return u$1("p", {
3345
+ class: "font-style-tag text-style-tag font-weight-tag border-px w-full border-transparent px-4 py-2 text-center",
3346
+ children: "No filter options available."
3347
+ });
3348
+ return u$1("div", {
3349
+ class: "pointer-fine:px-4",
3350
+ children: u$1("ul", {
3351
+ style: {
3352
+ maxHeight: (TAG_HEIGHT + GAP) * (LINE_COUNT - 1) + TAG_HEIGHT / 2 + 2 * PADDING_Y
3353
+ },
3354
+ 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",
3355
+ children: [suggestions.slice(0, displayCount).map((suggestion) => {
3356
+ const active = selectedValues.includes(suggestion.value);
3357
+ return u$1("li", {
3358
+ class: "animate-appear-tag max-w-full origin-top",
3359
+ children: u$1("button", {
3360
+ "data-filter": true,
3361
+ "data-current-value": active ? "true" : void 0,
3362
+ onClick: () => {
3363
+ switch (value.select) {
3364
+ case "many": {
3365
+ const newValue = toggleInArray(selectedValues, suggestion.value);
3366
+ onValueChange({
3367
+ select: "many",
3368
+ value: newValue
3369
+ });
3370
+ break;
3371
+ }
3372
+ case "one":
3373
+ onValueChange({
3374
+ select: "one",
3375
+ value: suggestion.value
3376
+ });
3377
+ break;
3378
+ default:
3379
+ exhaustive(value);
3380
+ }
3381
+ },
3382
+ class: tagClass({
3383
+ size: "lg",
3384
+ variant: active ? "accentStrong" : "neutralStrong",
3385
+ interactive: true,
3386
+ disabled: suggestion.disabled
3387
+ }),
3388
+ children: suggestion.label
3389
+ })
3390
+ }, suggestion.value);
3391
+ }), suggestions.length > displayCount && u$1("li", {
3392
+ class: "animate-appear-tag pointer-fine:w-full max-w-full flex-none origin-top",
3393
+ children: u$1("button", {
3394
+ class: btnClass({
3395
+ variant: "neutral",
3396
+ icon: "right",
3397
+ size: "lg",
3398
+ class: "border-px flex w-full max-w-full flex-none flex-nowrap justify-center truncate border-transparent"
3399
+ }),
3400
+ onClick: () => {
3401
+ setDisplayCount(displayCount + SUGGESTION_COUNT);
3402
+ },
3403
+ children: [u$1("span", {
3404
+ class: "font-style-tag font-family-tag font-weight-tag text-style-tag",
3405
+ children: "Show More"
3406
+ }), u$1(Icon, {
3407
+ name: "plus"
3408
+ })]
3409
+ })
3410
+ })]
3411
+ })
3412
+ });
3413
+ }
3414
+ default:
3415
+ exhaustive(unfilteredQuery);
3416
+ }
3417
+ })(), u$1("footer", {
3223
3418
  class: "flex justify-end p-2",
3224
3419
  children: [u$1("div", {
3225
3420
  class: "flex-1",
@@ -3239,7 +3434,7 @@ const FilterContentActive = ({
3239
3434
  class: "flex items-center overflow-hidden",
3240
3435
  children: u$1("p", {
3241
3436
  class: "font-style-default text-style-tag font-weight-default flex-grow select-none truncate text-center",
3242
- children: [selectedInternalValues.length, " selected"]
3437
+ children: [selectedValues.length, " selected"]
3243
3438
  })
3244
3439
  }), u$1("div", {
3245
3440
  class: "flex-1",
@@ -3249,12 +3444,7 @@ const FilterContentActive = ({
3249
3444
  icon: "right",
3250
3445
  class: "ml-auto"
3251
3446
  }),
3252
- onClick: () => {
3253
- if (hasValue) {
3254
- onValueChange(internalValue);
3255
- }
3256
- onSkip();
3257
- },
3447
+ onClick: onSkip,
3258
3448
  children: [hasValue ? "Done" : "Skip", " ", u$1(Icon, {
3259
3449
  name: "chevron-right"
3260
3450
  })]
@@ -3274,21 +3464,8 @@ const filterIcons = {
3274
3464
  company_name: "briefcase",
3275
3465
  category: "briefcase"
3276
3466
  };
3277
- const tagClass$1 = cva({
3278
- 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]",
3279
- variants: {
3280
- active: {
3281
- false: "text-tag-neutral-strong-copy bg-tag-neutral-strong-bg border-tag-neutral-strong-stroke",
3282
- true: "text-tag-accent-strong-copy bg-tag-accent-strong-bg border-tag-accent-strong-stroke"
3283
- },
3284
- size: {
3285
- sm: "px-3 py-1",
3286
- lg: "px-5 py-2"
3287
- }
3288
- }
3289
- });
3290
3467
  const wrapperClass$1 = cva({
3291
- 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]",
3468
+ 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]",
3292
3469
  variants: {
3293
3470
  hasValue: {
3294
3471
  false: "bg-section-weak-bg ring-section-weak-stroke",
@@ -3333,22 +3510,19 @@ const Filter = ({
3333
3510
  value,
3334
3511
  onActiveChange,
3335
3512
  property,
3336
- suggestions,
3337
3513
  onSkip,
3338
3514
  onValueChange,
3339
- state
3515
+ unfilteredQuery,
3516
+ useQuery
3340
3517
  }) => {
3341
- var _a;
3342
3518
  const icon = property.icon ?? filterIcons[property.key] ?? "filter";
3343
3519
  const selectedValues = getSelectedValues(value);
3344
- const hasValue = selectedValues.length > 0;
3345
3520
  const {
3346
3521
  height,
3347
3522
  ref: contentRef,
3348
3523
  updateHeight
3349
3524
  } = useMeasureHeight([active]);
3350
- const selectedSuggestions = suggestions.filter((s2) => selectedValues.includes(s2.value));
3351
- const selectedLabel = selectedSuggestions.length > 1 ? selectedSuggestions.length.toString() : (_a = selectedSuggestions[0]) == null ? void 0 : _a.label;
3525
+ const hasValue = selectedValues.length > 0;
3352
3526
  return u$1("section", {
3353
3527
  "data-filter-key": property.key,
3354
3528
  role: "tab",
@@ -3357,7 +3531,7 @@ const Filter = ({
3357
3531
  class: wrapperClass$1({
3358
3532
  hasValue
3359
3533
  }),
3360
- onTouchStart: () => void 0,
3534
+ onTouchStart: noop,
3361
3535
  children: [u$1("div", {
3362
3536
  class: "min-w-0 max-w-full shrink-0 flex-grow",
3363
3537
  children: [u$1("button", {
@@ -3382,12 +3556,12 @@ const Filter = ({
3382
3556
  class: "w-full",
3383
3557
  ref: contentRef,
3384
3558
  children: active && u$1(FilterContentActive, {
3559
+ useQuery,
3385
3560
  onRender: updateHeight,
3386
3561
  onSkip,
3387
3562
  onValueChange,
3563
+ unfilteredQuery,
3388
3564
  property,
3389
- state,
3390
- suggestions,
3391
3565
  value
3392
3566
  })
3393
3567
  })
@@ -3396,16 +3570,13 @@ const Filter = ({
3396
3570
  tabIndex: -1,
3397
3571
  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",
3398
3572
  onClick: () => onActiveChange(true),
3399
- children: [selectedLabel && u$1("div", {
3573
+ children: [u$1("div", {
3400
3574
  "aria-label": "Current value",
3401
3575
  class: "flex max-w-full gap-1 overflow-hidden",
3402
- children: u$1("span", {
3403
- class: tagClass$1({
3404
- size: "sm",
3405
- active: true,
3406
- class: "truncate tabular-nums"
3407
- }),
3408
- children: selectedLabel
3576
+ children: u$1(CurrentValueTag, {
3577
+ property,
3578
+ query: unfilteredQuery,
3579
+ selectedValues
3409
3580
  })
3410
3581
  }), u$1(Icon, {
3411
3582
  class: chevronClass(),
@@ -3441,6 +3612,8 @@ const useFilterKeyboardFocus = (activeKey, ref) => {
3441
3612
  focusFirstAvailableOption(keyToFocus, ref);
3442
3613
  }, [activeKey, previousActiveKey, ref]);
3443
3614
  };
3615
+ function noop() {
3616
+ }
3444
3617
  const nextStateFromValue = ({
3445
3618
  property,
3446
3619
  value,
@@ -3487,72 +3660,72 @@ const FilterSection = ({
3487
3660
  var _a;
3488
3661
  const [activeKey, setActiveKey] = h((_a = properties[0]) == null ? void 0 : _a.key);
3489
3662
  useFilterKeyboardFocus(activeKey, parentRef);
3490
- const {
3491
- ...swr
3492
- } = useSWR(JSON.stringify(appliedFilters), () => getJobSearchResults({
3663
+ const defaultFilters = F$1(() => getFilterDefaults(properties), [properties]);
3664
+ const unfilteredQuery = getQueryState(useSWR(cacheKey(defaultFilters), () => getAvailableFilters({
3493
3665
  apiClient,
3494
3666
  logger,
3495
- filters: appliedFilters
3496
- }), SWR_SETTINGS);
3497
- const {
3498
- data,
3499
- error,
3500
- state
3501
- } = getDataState(swr);
3502
- switch (state) {
3503
- case "error":
3504
- throw error;
3505
- case "loading":
3506
- case "revalidating":
3507
- case "loaded":
3508
- return u$1("aside", {
3509
- children: u$1("div", {
3510
- role: "tablist",
3511
- class: "top-filters sticky flex flex-col gap-2 px-4 md:px-0",
3512
- children: properties.map((property) => {
3513
- const active = activeKey === property.key;
3514
- const value = appliedFilters[property.key] ?? {
3515
- select: property.select,
3516
- value: void 0
3517
- };
3518
- const onValueChange = (value2) => {
3519
- const {
3520
- newActiveKey,
3521
- newValue
3522
- } = nextStateFromValue({
3523
- property,
3524
- activeKey,
3525
- value: value2,
3526
- properties,
3527
- appliedFilters
3528
- });
3529
- setActiveKey(newActiveKey);
3530
- return onFilterValueChange(property.key, newValue);
3531
- };
3532
- const onActiveChange = (active2) => setActiveKey(active2 ? property.key : void 0);
3533
- const suggestions = (data == null ? void 0 : data.availableProperties[property.key]) ?? [];
3534
- return u$1(ErrorBoundary, {
3535
- Fallback,
3536
- children: u$1(Filter, {
3537
- active,
3538
- property,
3539
- onActiveChange,
3540
- value,
3541
- suggestions,
3542
- onSkip: () => {
3543
- var _a2;
3544
- const currentIndex = properties.findIndex((p2) => p2.key === activeKey);
3545
- const nextPropertyKey = currentIndex !== -1 ? (_a2 = properties[currentIndex + 1]) == null ? void 0 : _a2.key : void 0;
3546
- setActiveKey(nextPropertyKey);
3547
- },
3548
- onValueChange,
3549
- state
3550
- })
3551
- }, property.key);
3667
+ filters: defaultFilters
3668
+ }), SWR_SETTINGS));
3669
+ if (unfilteredQuery.state === "error")
3670
+ throw unfilteredQuery.error;
3671
+ const makeQueryWithoutFilter = T$1((keyToExclude) => () => {
3672
+ const filters = {
3673
+ ...appliedFilters,
3674
+ [keyToExclude]: defaultFilters[keyToExclude]
3675
+ };
3676
+ return useSWR(cacheKey(filters), () => getAvailableFilters({
3677
+ apiClient,
3678
+ logger,
3679
+ filters
3680
+ }), SWR_SETTINGS);
3681
+ }, [apiClient, appliedFilters, defaultFilters, logger]);
3682
+ return u$1("aside", {
3683
+ children: u$1("div", {
3684
+ role: "tablist",
3685
+ class: "top-filters sticky flex flex-col gap-2 px-4 md:px-0",
3686
+ children: properties.map((property) => {
3687
+ const active = activeKey === property.key;
3688
+ const value = appliedFilters[property.key] ?? {
3689
+ select: property.select,
3690
+ value: void 0
3691
+ };
3692
+ const onValueChange = (value2) => {
3693
+ const {
3694
+ newActiveKey,
3695
+ newValue
3696
+ } = nextStateFromValue({
3697
+ property,
3698
+ activeKey,
3699
+ value: value2,
3700
+ properties,
3701
+ appliedFilters
3702
+ });
3703
+ setActiveKey(newActiveKey);
3704
+ return onFilterValueChange(property.key, newValue);
3705
+ };
3706
+ const onActiveChange = (active2) => setActiveKey(active2 ? property.key : void 0);
3707
+ const useQuery = makeQueryWithoutFilter(property.key);
3708
+ return u$1(ErrorBoundary, {
3709
+ Fallback,
3710
+ children: u$1(Filter, {
3711
+ unfilteredQuery,
3712
+ active,
3713
+ property,
3714
+ onActiveChange,
3715
+ value,
3716
+ onSkip: () => {
3717
+ var _a2;
3718
+ const currentIndex = properties.findIndex((p2) => p2.key === activeKey);
3719
+ const nextPropertyKey = currentIndex !== -1 ? (_a2 = properties[currentIndex + 1]) == null ? void 0 : _a2.key : void 0;
3720
+ setActiveKey(nextPropertyKey);
3721
+ },
3722
+ useQuery,
3723
+ onValueChange
3552
3724
  })
3553
- })
3554
- });
3555
- }
3725
+ }, property.key);
3726
+ })
3727
+ })
3728
+ });
3556
3729
  };
3557
3730
  const getFirstPageKey = (getKey) => {
3558
3731
  return serialize(getKey ? getKey(0, null) : null)[0];
@@ -3776,18 +3949,6 @@ const wrapperClass = cva({
3776
3949
  const badgeClass = cva({
3777
3950
  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"
3778
3951
  });
3779
- const tagClass = cva({
3780
- base: "rounded-tag text-style-tag font-weight-tag block px-2",
3781
- variants: {
3782
- colorScheme: {
3783
- default: "bg-tag-neutral-weak-bg text-tag-neutral-weak-copy ring-px ring-tag-neutral-weak-stroke",
3784
- monetary: "bg-tag-monetary-weak-bg text-tag-monetary-weak-copy"
3785
- }
3786
- },
3787
- defaultVariants: {
3788
- colorScheme: "default"
3789
- }
3790
- });
3791
3952
  const JobCard = ({
3792
3953
  job
3793
3954
  }) => {
@@ -3818,13 +3979,16 @@ const JobCard = ({
3818
3979
  class: "flex flex-col items-start gap-2",
3819
3980
  children: [job.pay && u$1("span", {
3820
3981
  class: tagClass({
3821
- colorScheme: "monetary"
3982
+ variant: "monetaryWeak",
3983
+ size: "xs"
3822
3984
  }),
3823
3985
  children: job.pay
3824
3986
  }), job.contractType && u$1("div", {
3825
3987
  class: "flex items-center gap-2",
3826
3988
  children: u$1("span", {
3827
- class: tagClass(),
3989
+ class: tagClass({
3990
+ size: "xs"
3991
+ }),
3828
3992
  children: job.contractType
3829
3993
  })
3830
3994
  })]
@@ -3877,19 +4041,22 @@ const JobCardSkeleton = ({
3877
4041
  class: "flex flex-col items-start gap-2",
3878
4042
  children: [seed % 2 === 0 && u$1("span", {
3879
4043
  class: tagClass({
3880
- colorScheme: "default",
4044
+ variant: "neutralWeak",
4045
+ size: "xs",
3881
4046
  class: "h-[1lh] w-[10ch]"
3882
4047
  })
3883
4048
  }), u$1("div", {
3884
4049
  class: "flex items-center gap-2",
3885
4050
  children: [u$1("span", {
3886
4051
  class: tagClass({
3887
- colorScheme: "default",
4052
+ variant: "neutralWeak",
4053
+ size: "xs",
3888
4054
  class: "h-[1lh] w-[6ch]"
3889
4055
  })
3890
4056
  }), u$1("span", {
3891
4057
  class: tagClass({
3892
- colorScheme: "default",
4058
+ variant: "neutralWeak",
4059
+ size: "xs",
3893
4060
  class: "h-[1lh] w-[8ch]"
3894
4061
  })
3895
4062
  })]
@@ -3913,7 +4080,7 @@ const LoadMore = ({
3913
4080
  class: "flex flex-col gap-3",
3914
4081
  "aria-hidden": true,
3915
4082
  children: Array.from({
3916
- length: 4
4083
+ length: PAGE_SIZE
3917
4084
  }).map((_2, i2) => u$1("li", {
3918
4085
  children: u$1(JobCardSkeleton, {
3919
4086
  seed: i2,
@@ -3969,7 +4136,7 @@ const ResultsSection = ({
3969
4136
  ...swr
3970
4137
  } = useSWRInfinite((index, prevPageData) => {
3971
4138
  if (prevPageData === null)
3972
- return index + 1 + "/" + JSON.stringify(appliedFilters);
4139
+ return index + 1 + "/" + cacheKey(appliedFilters);
3973
4140
  if (prevPageData.pagination.last_page === prevPageData.pagination.current_page)
3974
4141
  return null;
3975
4142
  return index + 1 + "/" + JSON.stringify(appliedFilters);
@@ -3987,7 +4154,7 @@ const ResultsSection = ({
3987
4154
  data,
3988
4155
  error,
3989
4156
  state
3990
- } = getDataState(swr);
4157
+ } = getQueryState(swr);
3991
4158
  const fetchNextPage = () => {
3992
4159
  setSize((size2) => size2 + 1);
3993
4160
  };
@@ -4004,7 +4171,7 @@ const ResultsSection = ({
4004
4171
  class: "flex flex-col gap-3",
4005
4172
  "aria-hidden": true,
4006
4173
  children: Array.from({
4007
- length: 30
4174
+ length: PAGE_SIZE
4008
4175
  }).map((_2, i2) => u$1("li", {
4009
4176
  children: u$1(JobCardSkeleton, {
4010
4177
  seed: i2,
@@ -4137,7 +4304,7 @@ const JobSearch = ({
4137
4304
  })
4138
4305
  });
4139
4306
  };
4140
- 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";
4307
+ 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";
4141
4308
  const match = (m2) => {
4142
4309
  const patterns = [];
4143
4310
  const i2 = (m22) => ({
@@ -4329,30 +4496,28 @@ const generateColorThemeVars = (theme) => {
4329
4496
  const oklch = (color, opacity) => `oklch(${color} / ${opacity ?? 1})`;
4330
4497
  const transparent = oklch(black, 0);
4331
4498
  const generateTokenVars = (theme, color) => {
4332
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
4499
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
4333
4500
  const {
4334
4501
  typography,
4335
4502
  highlights
4336
4503
  } = theme;
4337
- const {
4338
- highcontrast
4339
- } = theme.accessibility;
4504
+ const highcontrast = ((_a = theme.accessibility) == null ? void 0 : _a.highcontrast) ?? false;
4340
4505
  return {
4341
4506
  "filters-offset-top": (theme.filtersOffsetTopPx ?? 112) + "px",
4342
4507
  font: typography.font_family ?? "inherit",
4343
4508
  "font-style": typography.style ?? "inherit",
4344
- "font-filter": ((_a = typography.filter) == null ? void 0 : _a.font_family) ?? typography.font_family ?? "inherit",
4345
- "font-job-heading": ((_b = theme.typography.job_heading) == null ? void 0 : _b.font_family) ?? theme.typography.font_family ?? "inherit",
4346
- "font-tag": ((_c = typography.tag) == null ? void 0 : _c.font_family) ?? typography.font_family ?? "inherit",
4509
+ "font-filter": ((_b = typography.filter) == null ? void 0 : _b.font_family) ?? typography.font_family ?? "inherit",
4510
+ "font-job-heading": ((_c = theme.typography.job_heading) == null ? void 0 : _c.font_family) ?? theme.typography.font_family ?? "inherit",
4511
+ "font-tag": ((_d = typography.tag) == null ? void 0 : _d.font_family) ?? typography.font_family ?? "inherit",
4347
4512
  "weight-default": typography.weight ?? "inherit",
4348
- "style-filter": ((_d = typography.filter) == null ? void 0 : _d.style) ?? typography.style ?? "inherit",
4349
- "weight-filter": ((_e = typography.filter) == null ? void 0 : _e.weight) ?? typography.weight ?? "inherit",
4350
- "style-tag": ((_f = typography.tag) == null ? void 0 : _f.style) ?? typography.style ?? "inherit",
4351
- "style-job-heading": ((_g = typography.job_heading) == null ? void 0 : _g.style) ?? typography.style ?? "inherit",
4352
- "weight-tag": ((_h = typography.tag) == null ? void 0 : _h.weight) ?? typography.weight ?? "inherit",
4353
- "weight-job-heading": ((_i = typography.job_heading) == null ? void 0 : _i.weight) ?? typography.weight ?? "inherit",
4354
- "style-input": ((_j = typography.input) == null ? void 0 : _j.style) ?? typography.style ?? "inherit",
4355
- "weight-input": ((_k = typography.input) == null ? void 0 : _k.weight) ?? typography.weight ?? "inherit",
4513
+ "style-filter": ((_e = typography.filter) == null ? void 0 : _e.style) ?? typography.style ?? "inherit",
4514
+ "weight-filter": ((_f = typography.filter) == null ? void 0 : _f.weight) ?? typography.weight ?? "inherit",
4515
+ "style-tag": ((_g = typography.tag) == null ? void 0 : _g.style) ?? typography.style ?? "inherit",
4516
+ "style-job-heading": ((_h = typography.job_heading) == null ? void 0 : _h.style) ?? typography.style ?? "inherit",
4517
+ "weight-tag": ((_i = typography.tag) == null ? void 0 : _i.weight) ?? typography.weight ?? "inherit",
4518
+ "weight-job-heading": ((_j = typography.job_heading) == null ? void 0 : _j.weight) ?? typography.weight ?? "inherit",
4519
+ "style-input": ((_k = typography.input) == null ? void 0 : _k.style) ?? typography.style ?? "inherit",
4520
+ "weight-input": ((_l = typography.input) == null ? void 0 : _l.weight) ?? typography.weight ?? "inherit",
4356
4521
  "app-bg": oklch(color.lowest),
4357
4522
  copy: oklch(highcontrast ? color.highest : color["n-12"]),
4358
4523
  "copy-lowcontrast": oklch(color["n-11"]),
@@ -4365,7 +4530,7 @@ const generateTokenVars = (theme, color) => {
4365
4530
  "copy-inverted-lowcontrast": oklch(color["n-4"]),
4366
4531
  "copy-inverted-icon": oklch(color["n-3"]),
4367
4532
  "tag-neutral-weak-bg": highlights === "fill" ? oklch(color["n-2"]) : transparent,
4368
- "tag-neutral-weak-copy": color["n-12"],
4533
+ "tag-neutral-weak-copy": oklch(color["n-12"]),
4369
4534
  "tag-neutral-weak-stroke-color": highlights === "stroke" ? oklch(color["n-8"]) : transparent,
4370
4535
  "tag-neutral-strong-bg": highlights === "fill" ? oklch(color["n-12"]) : transparent,
4371
4536
  "tag-neutral-strong-copy": oklch(highlights === "fill" ? color.white : color["n-12"]),
@@ -4468,6 +4633,7 @@ const jobSearchPlugin = (params) => createPlugin(({
4468
4633
  logger,
4469
4634
  analytics
4470
4635
  }) => {
4636
+ var _a;
4471
4637
  const styleElements = [y$2("style", {
4472
4638
  id: "inploi-job-search-styles"
4473
4639
  }, tailwind), y$2("style", {
@@ -4482,7 +4648,7 @@ const jobSearchPlugin = (params) => createPlugin(({
4482
4648
  apiClient,
4483
4649
  logger,
4484
4650
  analytics,
4485
- class: params.theme.accessibility.reducedMotion ? "reduced-motion" : void 0
4651
+ class: ((_a = params.theme.accessibility) == null ? void 0 : _a.reducedMotion) ? "reduced-motion" : void 0
4486
4652
  })]);
4487
4653
  return {
4488
4654
  /** Returns a string with the initial rendering state of the UI.