@inploi/plugin-job-search 0.0.4 → 0.0.6

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.
@@ -514,7 +514,75 @@ function C$1(t2, l2, c4, p2, u2) {
514
514
  return B2 || ("string" == typeof H2 ? B2 = s$1(H2) : null != H2 && false !== H2 && true !== H2 && (B2 = C$1(H2, l2, "svg" === E2 || "foreignObject" !== E2 && c4, p2, t2))), d$1 && d$1(t2), t2.__ = void 0, m$1 && m$1(t2), !B2 && S.has(E2) ? q2 + "/>" : q2 + ">" + B2 + "</" + E2 + ">";
515
515
  }
516
516
  var S = /* @__PURE__ */ new Set(["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr"]);
517
- var t, r$2, u$1, i, o = 0, f$3 = [], c$1 = [], e$2 = l$2.__b, a = l$2.__r, v = l$2.diffed, l = l$2.__c, m = l$2.unmount;
517
+ var f$3 = 0;
518
+ function u$1(e2, t2, n2, o2, i2, u2) {
519
+ var a2, c4, p2 = {};
520
+ for (c4 in t2)
521
+ "ref" == c4 ? a2 = t2[c4] : p2[c4] = t2[c4];
522
+ var l2 = { type: e2, props: p2, key: n2, ref: a2, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, constructor: void 0, __v: --f$3, __i: -1, __u: 0, __source: i2, __self: u2 };
523
+ if ("function" == typeof e2 && (a2 = e2.defaultProps))
524
+ for (c4 in a2)
525
+ void 0 === p2[c4] && (p2[c4] = a2[c4]);
526
+ return l$2.vnode && l$2.vnode(l2), l2;
527
+ }
528
+ const Fallback = ({
529
+ error,
530
+ resetError
531
+ }) => {
532
+ return u$1("div", {
533
+ style: {
534
+ padding: "0 1rem",
535
+ fontSize: "1rem",
536
+ color: "#333333",
537
+ fontFamily: "'system-ui' 'Helvetica'"
538
+ },
539
+ children: ["Something went wrong.", u$1("br", {}), ' Error Message: "', error.message, '"', u$1("button", {
540
+ onClick: resetError,
541
+ style: {
542
+ background: "#efefef",
543
+ border: "none",
544
+ cursor: "pointer",
545
+ padding: "0.5rem 1rem"
546
+ },
547
+ children: "Retry"
548
+ })]
549
+ });
550
+ };
551
+ class ErrorBoundary extends b$2 {
552
+ constructor() {
553
+ super(...arguments);
554
+ __publicField(this, "state", {
555
+ error: null
556
+ });
557
+ }
558
+ static getDerivedStateFromError(error) {
559
+ return {
560
+ error: error.message
561
+ };
562
+ }
563
+ componentDidCatch(error) {
564
+ this.setState({
565
+ error
566
+ });
567
+ }
568
+ render() {
569
+ if (this.state.error) {
570
+ const {
571
+ Fallback: Fallback2
572
+ } = this.props;
573
+ return u$1(Fallback2, {
574
+ error: this.state.error,
575
+ resetError: () => {
576
+ this.setState({
577
+ error: null
578
+ });
579
+ }
580
+ });
581
+ }
582
+ return this.props.children;
583
+ }
584
+ }
585
+ var t, r$2, u, i, o = 0, f$2 = [], c$1 = [], e$2 = l$2.__b, a = l$2.__r, v = l$2.diffed, l = l$2.__c, m = l$2.unmount;
518
586
  function d(t2, u2) {
519
587
  l$2.__h && l$2.__h(r$2, t2, o || u2), o = 0;
520
588
  var i2 = r$2.__H || (r$2.__H = { __: [], __h: [] });
@@ -616,7 +684,7 @@ function V$1() {
616
684
  return n2.__;
617
685
  }
618
686
  function b() {
619
- for (var t2; t2 = f$3.shift(); )
687
+ for (var t2; t2 = f$2.shift(); )
620
688
  if (t2.__P && t2.__H)
621
689
  try {
622
690
  t2.__H.__h.forEach(k$3), t2.__H.__h.forEach(w$1), t2.__H.__h = [];
@@ -629,15 +697,15 @@ l$2.__b = function(n2) {
629
697
  }, l$2.__r = function(n2) {
630
698
  a && a(n2), t = 0;
631
699
  var i2 = (r$2 = n2.__c).__H;
632
- i2 && (u$1 === r$2 ? (i2.__h = [], r$2.__h = [], i2.__.forEach(function(n3) {
700
+ i2 && (u === r$2 ? (i2.__h = [], r$2.__h = [], i2.__.forEach(function(n3) {
633
701
  n3.__N && (n3.__ = n3.__N), n3.__V = c$1, n3.__N = n3.i = void 0;
634
- })) : (i2.__h.forEach(k$3), i2.__h.forEach(w$1), i2.__h = [], t = 0)), u$1 = r$2;
702
+ })) : (i2.__h.forEach(k$3), i2.__h.forEach(w$1), i2.__h = [], t = 0)), u = r$2;
635
703
  }, l$2.diffed = function(t2) {
636
704
  v && v(t2);
637
705
  var o2 = t2.__c;
638
- o2 && o2.__H && (o2.__H.__h.length && (1 !== f$3.push(o2) && i === l$2.requestAnimationFrame || ((i = l$2.requestAnimationFrame) || j$1)(b)), o2.__H.__.forEach(function(n2) {
706
+ o2 && o2.__H && (o2.__H.__h.length && (1 !== f$2.push(o2) && i === l$2.requestAnimationFrame || ((i = l$2.requestAnimationFrame) || j$1)(b)), o2.__H.__.forEach(function(n2) {
639
707
  n2.i && (n2.__H = n2.i), n2.__V !== c$1 && (n2.__ = n2.__V), n2.i = void 0, n2.__V = c$1;
640
- })), u$1 = r$2 = null;
708
+ })), u = r$2 = null;
641
709
  }, l$2.__c = function(t2, r2) {
642
710
  r2.some(function(t3) {
643
711
  try {
@@ -2140,6 +2208,14 @@ var ValiError = class extends Error {
2140
2208
  this.issues = issues;
2141
2209
  }
2142
2210
  };
2211
+ function coerce(schema, action) {
2212
+ return {
2213
+ ...schema,
2214
+ _parse(input, info) {
2215
+ return schema._parse(action(input), info);
2216
+ }
2217
+ };
2218
+ }
2143
2219
  function getIssues(issues) {
2144
2220
  return { issues };
2145
2221
  }
@@ -2613,7 +2689,7 @@ const getRelativeTimeDifference = ({
2613
2689
  return diffIn.months < 0 ? "a long time ago" : "in a long time";
2614
2690
  };
2615
2691
  const SEVEN_DAYS_MS = 1e3 * 60 * 60 * 24 * 7;
2616
- const AvailablePropertiesSchema = record(array(string()));
2692
+ const AvailablePropertiesSchema = record(array(coerce(string(), String)));
2617
2693
  const PaginationSchema = object({
2618
2694
  total: number(),
2619
2695
  current_page: number(),
@@ -2621,7 +2697,7 @@ const PaginationSchema = object({
2621
2697
  last_page: number()
2622
2698
  });
2623
2699
  const payPeriods = {
2624
- ANNUALY: "per year",
2700
+ ANNUALLY: "per year",
2625
2701
  DAILY: "per day",
2626
2702
  HOURLY: "per hour",
2627
2703
  MONTHLY: "per month",
@@ -2633,14 +2709,14 @@ const JobPayloadSchema = object({
2633
2709
  company_logo: string(),
2634
2710
  employment_type: union([literal("FULL_TIME"), literal("PART_TIME"), literal("TEMPORARY"), literal("CONTRACTOR"), literal("INTERN"), literal("VOLUNTEER"), literal("OTHER")]),
2635
2711
  location_type: union([literal("LOCATION"), literal("REMOTE"), literal("HYBRID")]),
2636
- pay_type: union([literal("ANNUALY"), literal("HOURLY"), literal("MONTHLY"), literal("WEEKLY"), literal("DAILY")]),
2712
+ pay_type: union([literal("ANNUALLY"), literal("HOURLY"), literal("MONTHLY"), literal("WEEKLY"), literal("DAILY")]),
2637
2713
  pay_currency: string(),
2638
2714
  // Whether to mask the pay and show as "competitive"
2639
2715
  pay_mask: boolean(),
2640
2716
  // Whether to display pay at all
2641
2717
  pay_display: boolean(),
2642
2718
  // Decimal numeric string e.g. "12.70"
2643
- pay: string(),
2719
+ pay: nullable(string()),
2644
2720
  // Decimal numeric string e.g. "12.70"
2645
2721
  pay_min: nullable(string()),
2646
2722
  // Decimal numeric string e.g. "12.70"
@@ -2654,7 +2730,7 @@ const JobPayloadSchema = object({
2654
2730
  // E.g.: Any varchar, e.g.: "Permanent contract"
2655
2731
  contract_type: nullable(string()),
2656
2732
  created_at: string(),
2657
- custom_data: record(any())
2733
+ custom_data: nullable(record(any()))
2658
2734
  });
2659
2735
  const JobSchema = transform(JobPayloadSchema, (schema) => {
2660
2736
  const isNew = new Date(schema.created_at).getTime() > Date.now() - SEVEN_DAYS_MS;
@@ -2662,6 +2738,17 @@ const JobSchema = transform(JobPayloadSchema, (schema) => {
2662
2738
  style: "currency",
2663
2739
  currency: schema.pay_currency
2664
2740
  });
2741
+ const pay = (() => {
2742
+ if (schema.pay_display === false)
2743
+ return void 0;
2744
+ if (schema.pay_mask)
2745
+ return "Competitive";
2746
+ if (schema.pay_max && schema.pay_min)
2747
+ return numberFormatter.formatRange(+schema.pay_min, +schema.pay_max);
2748
+ if (schema.pay)
2749
+ return [numberFormatter.format(+schema.pay), payPeriods[schema.pay_type]].join(" ");
2750
+ throw new Error("Invalid pay data");
2751
+ })();
2665
2752
  return {
2666
2753
  id: schema.id,
2667
2754
  isNew,
@@ -2671,7 +2758,7 @@ const JobSchema = transform(JobPayloadSchema, (schema) => {
2671
2758
  },
2672
2759
  employmentType: schema.employment_type,
2673
2760
  locationType: schema.location_type,
2674
- pay: !schema.pay_display ? void 0 : schema.pay_mask ? "Competitive" : schema.pay_max && schema.pay_min ? [numberFormatter.formatRange(+schema.pay_min, +schema.pay_max), payPeriods[schema.pay_type]].join(" ") : [numberFormatter.format(+schema.pay), payPeriods[schema.pay_type]].join(" "),
2761
+ pay,
2675
2762
  description: schema.description,
2676
2763
  title: schema.title,
2677
2764
  coordinates: schema.coordinates,
@@ -2699,7 +2786,6 @@ const getJobSearchResults = async ({
2699
2786
  filters
2700
2787
  }) => {
2701
2788
  try {
2702
- console.log(filters);
2703
2789
  const response = await apiClient.fetch("/search", {
2704
2790
  method: "POST",
2705
2791
  body: JSON.stringify({
@@ -2790,149 +2876,138 @@ const defineConfig = (options) => {
2790
2876
  return { compose: compose1, cva: cva1, cx: cx1 };
2791
2877
  };
2792
2878
  const { compose, cva, cx } = defineConfig();
2793
- var f$2 = 0;
2794
- function u(e2, t2, n2, o2, i2, u2) {
2795
- var a2, c4, p2 = {};
2796
- for (c4 in t2)
2797
- "ref" == c4 ? a2 = t2[c4] : p2[c4] = t2[c4];
2798
- var l2 = { type: e2, props: p2, key: n2, ref: a2, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, constructor: void 0, __v: --f$2, __i: -1, __u: 0, __source: i2, __self: u2 };
2799
- if ("function" == typeof e2 && (a2 = e2.defaultProps))
2800
- for (c4 in a2)
2801
- void 0 === p2[c4] && (p2[c4] = a2[c4]);
2802
- return l$2.vnode && l$2.vnode(l2), l2;
2803
- }
2804
2879
  const icons = {
2805
- briefcase: u(g$3, {
2806
- children: [u("path", {
2880
+ briefcase: u$1(g$3, {
2881
+ children: [u$1("path", {
2807
2882
  d: "M17.25 7.75H6.75C5.64543 7.75 4.75 8.64543 4.75 9.75V16.25C4.75 17.3546 5.64543 18.25 6.75 18.25H17.25C18.3546 18.25 19.25 17.3546 19.25 16.25V9.75C19.25 8.64543 18.3546 7.75 17.25 7.75Z"
2808
- }), u("path", {
2883
+ }), u$1("path", {
2809
2884
  d: "M4.75 11.75H19.25"
2810
- }), u("path", {
2885
+ }), u$1("path", {
2811
2886
  d: "M13.25 12.25V13.25H10.75V12.25H13.25Z"
2812
- }), u("path", {
2887
+ }), u$1("path", {
2813
2888
  d: "M9.25 7.5V6.25C9.25 5.42157 9.92157 4.75 10.75 4.75H13.25C14.0784 4.75 14.75 5.42157 14.75 6.25V7.5"
2814
2889
  })]
2815
2890
  }),
2816
- brand: u(g$3, {
2817
- children: [u("path", {
2891
+ brand: u$1(g$3, {
2892
+ children: [u$1("path", {
2818
2893
  d: "M18.45 13.9901C18.1288 15.031 17.5574 15.9886 16.773 16.773C15.5071 18.0388 13.7902 18.75 12 18.75C10.2098 18.75 8.49289 18.0388 7.22702 16.773C6.44262 15.9886 5.87122 15.031 5.55003 13.9901"
2819
- }), u("path", {
2894
+ }), u$1("path", {
2820
2895
  d: "M9.87868 14.8713C10.1573 15.1499 10.488 15.3709 10.8519 15.5216C11.2159 15.6724 11.606 15.75 12 15.75C12.394 15.75 12.7841 15.6724 13.1481 15.5216C13.512 15.3709 13.8427 15.1499 14.1213 14.8713"
2821
- }), u("path", {
2896
+ }), u$1("path", {
2822
2897
  d: "M17.0791 7.55413C16.7038 7.12546 16.2758 6.74602 15.8053 6.42486"
2823
- }), u("path", {
2898
+ }), u$1("path", {
2824
2899
  d: "M12.8451 5.30311C12.2799 5.23179 11.7079 5.2323 11.1428 5.30465"
2825
- }), u("path", {
2900
+ }), u$1("path", {
2826
2901
  d: "M8.25666 6.38307C7.78259 6.69901 7.35043 7.07369 6.97047 7.49818"
2827
- }), u("circle", {
2902
+ }), u$1("circle", {
2828
2903
  cx: "18.75",
2829
2904
  cy: "12",
2830
2905
  r: "2"
2831
- }), u("circle", {
2906
+ }), u$1("circle", {
2832
2907
  cx: "5.25",
2833
2908
  cy: "12",
2834
2909
  r: "2"
2835
2910
  })]
2836
2911
  }),
2837
- building: u(g$3, {
2838
- children: [u("path", {
2912
+ building: u$1(g$3, {
2913
+ children: [u$1("path", {
2839
2914
  d: "M16.75 10.25H13.75"
2840
- }), u("path", {
2915
+ }), u$1("path", {
2841
2916
  d: "M16.75 13.25H13.75"
2842
- }), u("path", {
2917
+ }), u$1("path", {
2843
2918
  d: "M3 18.25H5.25006M5.25006 18.25V14.25C5.25006 13.1454 6.14549 12.25 7.25006 12.25H10.2501L10.25 8.25003C10.25 6.59316 11.5932 5.25 13.25 5.25H17.25C18.9069 5.25 20.25 6.59315 20.25 8.25V18.25H5.25006Z"
2844
- }), u("path", {
2919
+ }), u$1("path", {
2845
2920
  d: "M10.25 12.25V18.25"
2846
2921
  })]
2847
2922
  }),
2848
- circles: u(g$3, {
2849
- children: [u("path", {
2923
+ circles: u$1(g$3, {
2924
+ children: [u$1("path", {
2850
2925
  d: "M16.773 16.773C15.829 17.717 14.6262 18.3599 13.3169 18.6203C12.0075 18.8808 10.6503 18.7471 9.41689 18.2362C8.18349 17.7253 7.12928 16.8601 6.38758 15.7501C5.64588 14.6401 5.25 13.335 5.25 12C5.25 10.665 5.64588 9.35993 6.38758 8.2499C7.12928 7.13987 8.18349 6.27471 9.41689 5.76381C10.6503 5.25292 12.0075 5.11925 13.3169 5.3797C14.6262 5.64015 15.829 6.28302 16.773 7.22703"
2851
- }), u("path", {
2926
+ }), u$1("path", {
2852
2927
  d: "M9.34835 9.34835C9.8728 8.8239 10.541 8.46675 11.2684 8.32206C11.9958 8.17736 12.7498 8.25162 13.4351 8.53545C14.1203 8.81928 14.706 9.29993 15.118 9.91661C15.5301 10.5333 15.75 11.2583 15.75 12C15.75 12.7417 15.5301 13.4667 15.118 14.0834C14.706 14.7001 14.1203 15.1807 13.4351 15.4645C12.7498 15.7484 11.9958 15.8226 11.2684 15.6779C10.541 15.5333 9.8728 15.1761 9.34835 14.6517"
2853
2928
  })]
2854
2929
  }),
2855
- clock: u(g$3, {
2856
- children: [u("path", {
2930
+ clock: u$1(g$3, {
2931
+ children: [u$1("path", {
2857
2932
  d: "M14 9L12 13L9.5 12"
2858
- }), u("path", {
2933
+ }), u$1("path", {
2859
2934
  d: "M18.75 12C18.75 15.7279 15.7279 18.75 12 18.75C8.27208 18.75 5.25 15.7279 5.25 12C5.25 8.27208 8.27208 5.25 12 5.25C15.7279 5.25 18.75 8.27208 18.75 12Z"
2860
2935
  })]
2861
2936
  }),
2862
- filter: u(g$3, {
2863
- children: u("path", {
2937
+ filter: u$1(g$3, {
2938
+ children: u$1("path", {
2864
2939
  d: "M19.25 7H4.75V8.5L10.25 12.25V17.5H13.75V12.25L19.25 8.5V7Z"
2865
2940
  })
2866
2941
  }),
2867
- globe: u(g$3, {
2868
- children: [u("path", {
2942
+ globe: u$1(g$3, {
2943
+ children: [u$1("path", {
2869
2944
  d: "M5 13.75H19"
2870
- }), u("path", {
2945
+ }), u$1("path", {
2871
2946
  d: "M5 10.25H19"
2872
- }), u("path", {
2947
+ }), u$1("path", {
2873
2948
  d: "M12 4.75C15.5 9.25 15.5 14.75 12.0001 19.25C8.50012 14.75 8.50005 9.25 12 4.75Z"
2874
- }), u("circle", {
2949
+ }), u$1("circle", {
2875
2950
  cx: "12",
2876
2951
  cy: "12",
2877
2952
  r: "7.25"
2878
2953
  })]
2879
2954
  }),
2880
- magnifier: u(g$3, {
2881
- children: [u("path", {
2955
+ magnifier: u$1(g$3, {
2956
+ children: [u$1("path", {
2882
2957
  d: "M15.5659 15.5659C14.4875 16.6442 13.025 17.25 11.5 17.25C9.97501 17.25 8.51247 16.6442 7.43414 15.5659C6.3558 14.4875 5.75 13.025 5.75 11.5C5.75 9.97501 6.3558 8.51247 7.43414 7.43414C8.51247 6.3558 9.97501 5.75 11.5 5.75C13.025 5.75 14.4875 6.3558 15.5659 7.43414C16.6442 8.51247 17.25 9.97501 17.25 11.5C17.25 13.025 16.6442 14.4875 15.5659 15.5659L15.5659 15.5659Z"
2883
- }), u("path", {
2958
+ }), u$1("path", {
2884
2959
  d: "M11.5 8.75C11.8611 8.75 12.2187 8.82113 12.5524 8.95933C12.886 9.09753 13.1892 9.3001 13.4445 9.55546C13.6999 9.81082 13.9025 10.114 14.0407 10.4476C14.1789 10.7813 14.25 11.1389 14.25 11.5"
2885
- }), u("path", {
2960
+ }), u$1("path", {
2886
2961
  d: "M16 16L19 19"
2887
2962
  })]
2888
2963
  }),
2889
- mapPin: u(g$3, {
2890
- children: u(g$3, {
2891
- children: [u("circle", {
2964
+ mapPin: u$1(g$3, {
2965
+ children: u$1(g$3, {
2966
+ children: [u$1("circle", {
2892
2967
  cx: "12",
2893
2968
  cy: "9",
2894
2969
  r: "2"
2895
- }), u("path", {
2970
+ }), u$1("path", {
2896
2971
  d: "M16.2426 16.8358C17.0818 17.1155 17.6532 17.4719 17.8847 17.8598C18.1162 18.2478 17.9974 18.6499 17.5433 19.0154C17.0892 19.3808 16.3201 19.6932 15.3334 19.9129C14.3467 20.1327 13.1867 20.25 12 20.25C10.8133 20.25 9.65327 20.1327 8.66658 19.9129C7.67988 19.6932 6.91085 19.3808 6.45672 19.0154C6.0026 18.6499 5.88378 18.2478 6.11529 17.8598C6.3468 17.4719 6.91825 17.1155 7.75736 16.8358"
2897
- }), u("path", {
2972
+ }), u$1("path", {
2898
2973
  d: "M17.25 9C17.25 13.3995 12 16.75 12 16.75C12 16.75 6.75 13.3995 6.75 9C6.75 6.10051 9.10051 3.75 12 3.75C14.8995 3.75 17.25 6.10051 17.25 9Z"
2899
2974
  })]
2900
2975
  })
2901
2976
  }),
2902
- sunset: u(g$3, {
2903
- children: [u("path", {
2977
+ sunset: u$1(g$3, {
2978
+ children: [u$1("path", {
2904
2979
  d: "M18.5 8.5L17.5 9.5"
2905
- }), u("path", {
2980
+ }), u$1("path", {
2906
2981
  d: "M5.5 8.5L6.5 9.5"
2907
- }), u("path", {
2982
+ }), u$1("path", {
2908
2983
  d: "M12 6L12 7.5"
2909
- }), u("path", {
2984
+ }), u$1("path", {
2910
2985
  d: "M7.5 15.25L7.5 14.25C7.5 13.6591 7.6164 13.0739 7.84254 12.5279C8.06869 11.982 8.40016 11.4859 8.81802 11.068C9.23588 10.6502 9.73196 10.3187 10.2779 10.0925C10.8239 9.8664 11.4091 9.75 12 9.75C12.5909 9.75 13.1761 9.8664 13.7221 10.0925C14.268 10.3187 14.7641 10.6502 15.182 11.068C15.5998 11.4859 15.9313 11.982 16.1575 12.5279C16.3836 13.0739 16.5 13.6591 16.5 14.25V15.25"
2911
- }), u("path", {
2986
+ }), u$1("path", {
2912
2987
  d: "M20.25 15.25H12H3.75"
2913
- }), u("path", {
2988
+ }), u$1("path", {
2914
2989
  d: "M16.25 18.25H12L7.75 18.25"
2915
2990
  })]
2916
2991
  }),
2917
- x: u("path", {
2992
+ x: u$1("path", {
2918
2993
  d: "M8 8l8 8M8 16l8 -8"
2919
2994
  }),
2920
- "chevron-right": u("path", {
2995
+ "chevron-right": u$1("path", {
2921
2996
  d: "M11 8L15 12L11 16"
2922
2997
  })
2923
2998
  };
2924
2999
  const IconSpritesheet = ({
2925
3000
  theme
2926
3001
  }) => {
2927
- return u("svg", {
3002
+ return u$1("svg", {
2928
3003
  xmlns: "http://www.w3.org/2000/svg",
2929
3004
  style: {
2930
3005
  display: "none"
2931
3006
  },
2932
- children: u("defs", {
2933
- children: Object.entries(icons).map(([name, icon]) => u("symbol", {
3007
+ children: u$1("defs", {
3008
+ children: Object.entries(icons).map(([name, icon]) => u$1("symbol", {
2934
3009
  id: `i-icon-${name}`,
2935
- children: u("g", {
3010
+ children: u$1("g", {
2936
3011
  fill: "none",
2937
3012
  "stroke-width": theme.mode === "dark" && theme.highcontrast != true ? "1" : "1.5",
2938
3013
  "stroke-linecap": "round",
@@ -2948,12 +3023,12 @@ const Icon = ({
2948
3023
  name,
2949
3024
  ...props
2950
3025
  }) => {
2951
- return u("svg", {
3026
+ return u$1("svg", {
2952
3027
  viewBox: "0 0 24 24",
2953
3028
  width: 24,
2954
3029
  height: 24,
2955
3030
  ...props,
2956
- children: u("use", {
3031
+ children: u$1("use", {
2957
3032
  href: `#i-icon-${name}`
2958
3033
  })
2959
3034
  });
@@ -3007,6 +3082,7 @@ const btnNextClass = cva({
3007
3082
  }
3008
3083
  }
3009
3084
  });
3085
+ const getSelectedValues = (current) => typeof current.value === "string" ? [current.value] : current.value ?? [];
3010
3086
  const Filter = ({
3011
3087
  filterKey,
3012
3088
  title,
@@ -3019,10 +3095,10 @@ const Filter = ({
3019
3095
  icon,
3020
3096
  state
3021
3097
  }) => {
3022
- const selectedValues = typeof current.value === "string" ? [current.value] : current.value ?? [];
3098
+ const selectedValues = getSelectedValues(current);
3023
3099
  const hasValue = selectedValues.length > 0;
3024
3100
  const showClearButton = hasValue && active == false;
3025
- return u("section", {
3101
+ return u$1("section", {
3026
3102
  "data-filter-key": filterKey,
3027
3103
  role: "tab",
3028
3104
  "aria-label": title,
@@ -3030,40 +3106,39 @@ const Filter = ({
3030
3106
  class: wrapperClass$1({
3031
3107
  hasValue
3032
3108
  }),
3033
- children: [u("div", {
3109
+ children: [u$1("div", {
3034
3110
  class: "w-full min-w-0 flex-1",
3035
- children: [u("button", {
3111
+ children: [u$1("button", {
3036
3112
  "aria-label": active ? "Close filter" : "Open filter",
3037
3113
  class: "ease-expo-out fr rounded-section flex w-full items-center gap-2 px-4 py-4 transition-all duration-300",
3038
3114
  onClick: () => onActiveChange(!active),
3039
- children: [u(Icon, {
3115
+ children: [u$1(Icon, {
3040
3116
  class: iconClass({
3041
3117
  hasValue
3042
3118
  }),
3043
3119
  name: icon
3044
- }), u("p", {
3120
+ }), u$1("p", {
3045
3121
  class: textClass({
3046
3122
  hasValue
3047
3123
  }),
3048
3124
  children: title
3049
3125
  })]
3050
- }), u(FilterInner, {
3126
+ }), u$1(FilterInner, {
3051
3127
  active,
3052
3128
  current,
3053
3129
  onValueChange,
3054
3130
  suggestions,
3055
3131
  onActiveChange,
3056
3132
  onSkip,
3057
- state,
3058
- selectedValues
3133
+ state
3059
3134
  })]
3060
- }), showClearButton && u("div", {
3135
+ }), showClearButton && u$1("div", {
3061
3136
  class: "flex flex-none items-center justify-center p-4",
3062
- children: u("button", {
3137
+ children: u$1("button", {
3063
3138
  "aria-label": "Clear",
3064
3139
  class: "fr touch-hitbox ease-expo-out hover:bg-interactive-accent-bg-hover text-interactive-accent-text rounded-interactive relative cursor-pointer p-1 transition-all duration-300 active:scale-95",
3065
3140
  onClick: () => onValueChange(void 0),
3066
- children: u(Icon, {
3141
+ children: u$1(Icon, {
3067
3142
  name: "x"
3068
3143
  })
3069
3144
  })
@@ -3083,48 +3158,59 @@ const FilterInner = ({
3083
3158
  onValueChange,
3084
3159
  onActiveChange,
3085
3160
  onSkip,
3086
- state,
3087
- selectedValues
3161
+ state
3088
3162
  }) => {
3089
3163
  const currentRef = _(null);
3164
+ const [internalValue, setInternalValue] = h(current);
3165
+ p$2(() => {
3166
+ setInternalValue(current);
3167
+ }, [current]);
3168
+ const selectedValues = getSelectedValues(internalValue);
3090
3169
  const hasValue = selectedValues.length > 0;
3091
3170
  if (active)
3092
- return u("div", {
3171
+ return u$1("div", {
3093
3172
  class: "-mt-4 pt-2",
3094
- children: [u("ul", {
3095
- "aria-label": "Filter options",
3096
- class: "hide-scrollbars flex select-none gap-1.5 overflow-x-auto px-4 pb-1 pt-2",
3097
- children: state === "loading" ? u("li", {
3173
+ children: [state === "loading" ? u$1("div", {
3174
+ class: "flex px-4 pb-1 pt-2",
3175
+ children: u$1("div", {
3098
3176
  "aria-hidden": true,
3099
3177
  class: tagClass$1({
3100
3178
  size: "lg",
3101
3179
  active: false,
3102
3180
  class: "animate-skeleton"
3103
3181
  }),
3104
- children: u("span", {
3182
+ children: u$1("span", {
3105
3183
  class: "inline-block w-[10ch]"
3106
3184
  })
3107
- }) : suggestions.map((suggestion, k2) => {
3185
+ })
3186
+ }) : u$1("ul", {
3187
+ "aria-label": "Filter options",
3188
+ class: "hide-scrollbars flex select-none gap-1.5 overflow-x-auto px-4 pb-1 pt-2",
3189
+ children: suggestions.map((suggestion, k2) => {
3108
3190
  const active2 = selectedValues.includes(suggestion.value);
3109
- return u("li", {
3191
+ return u$1("li", {
3110
3192
  style: {
3111
3193
  animationDelay: k2 * 0.01 + "s"
3112
3194
  },
3113
3195
  class: "animate-appear-tag origin-top",
3114
- children: u("button", {
3196
+ children: u$1("button", {
3115
3197
  "data-filter": true,
3116
3198
  "data-current-value": active2 ? "true" : void 0,
3117
3199
  onClick: () => {
3118
3200
  switch (current.select) {
3119
3201
  case "many": {
3120
- const newValue = toggleInArray(current.value ?? [], suggestion.value);
3121
- onValueChange({
3122
- select: current.select,
3123
- value: newValue.length > 0 ? newValue : void 0
3202
+ const newValue = toggleInArray(selectedValues, suggestion.value);
3203
+ setInternalValue({
3204
+ select: "many",
3205
+ value: newValue
3124
3206
  });
3125
3207
  break;
3126
3208
  }
3127
3209
  case "one":
3210
+ setInternalValue({
3211
+ select: "one",
3212
+ value: suggestion.value
3213
+ });
3128
3214
  onValueChange({
3129
3215
  select: current.select,
3130
3216
  value: suggestion.value
@@ -3142,33 +3228,38 @@ const FilterInner = ({
3142
3228
  })
3143
3229
  }, suggestion.value);
3144
3230
  })
3145
- }), u("div", {
3231
+ }), u$1("div", {
3146
3232
  class: "flex justify-end p-2",
3147
- children: u("button", {
3233
+ children: u$1("button", {
3148
3234
  class: btnNextClass({
3149
3235
  hasValue
3150
3236
  }),
3151
- onClick: () => onSkip(),
3152
- children: [hasValue ? "Done" : "Skip", " ", u(Icon, {
3237
+ onClick: () => {
3238
+ if (hasValue) {
3239
+ onValueChange(internalValue);
3240
+ }
3241
+ onSkip();
3242
+ },
3243
+ children: [hasValue ? "Done" : "Skip", " ", u$1(Icon, {
3153
3244
  name: "chevron-right"
3154
3245
  })]
3155
3246
  }, hasValue ? "done" : "skip")
3156
3247
  })]
3157
3248
  });
3158
3249
  if (hasValue)
3159
- return u("button", {
3250
+ return u$1("button", {
3160
3251
  "aria-label": "Current value",
3161
3252
  tabIndex: -1,
3162
3253
  "data-current-value": "true",
3163
3254
  ref: currentRef,
3164
3255
  class: "fr -mt-4 w-full select-none overflow-hidden px-4 pb-4 pt-2 focus:outline-none",
3165
3256
  onClick: () => onActiveChange(true),
3166
- children: u("ul", {
3257
+ children: u$1("ul", {
3167
3258
  class: "flex flex-wrap gap-1",
3168
3259
  children: suggestions.filter((s2) => selectedValues.includes(s2.value)).map((suggestion) => {
3169
- return u("li", {
3260
+ return u$1("li", {
3170
3261
  class: "animate-selected-tag block max-w-full",
3171
- children: u("span", {
3262
+ children: u$1("span", {
3172
3263
  class: tagClass$1({
3173
3264
  size: "sm",
3174
3265
  active: true
@@ -3207,6 +3298,75 @@ const useFilterKeyboardFocus = (activeKey, ref) => {
3207
3298
  focusFirstAvailableOption(keyToFocus, ref);
3208
3299
  }, [activeKey, previousActiveKey, ref]);
3209
3300
  };
3301
+ const filterIcons = {
3302
+ contract_type: "clock",
3303
+ title: "magnifier",
3304
+ city: "mapPin",
3305
+ town: "mapPin",
3306
+ address_1: "mapPin",
3307
+ address_2: "mapPin",
3308
+ country: "mapPin",
3309
+ company_name: "briefcase",
3310
+ category: "briefcase"
3311
+ };
3312
+ const FilterSection = ({
3313
+ properties,
3314
+ values,
3315
+ availableProperties,
3316
+ onFilterValueChange,
3317
+ state,
3318
+ parentRef
3319
+ }) => {
3320
+ var _a;
3321
+ const [activeKey, setActiveKey] = h((_a = properties[0]) == null ? void 0 : _a.key);
3322
+ useFilterKeyboardFocus(activeKey, parentRef);
3323
+ return u$1("div", {
3324
+ role: "tablist",
3325
+ class: "grid items-stretch gap-2 px-4 md:flex md:flex-col md:px-0",
3326
+ children: properties.map((property) => {
3327
+ var _a2;
3328
+ return u$1(ErrorBoundary, {
3329
+ Fallback,
3330
+ children: u$1(Filter, {
3331
+ icon: property.icon ?? filterIcons[property.key] ?? "filter",
3332
+ filterKey: property.key,
3333
+ title: property.label,
3334
+ suggestions: ((_a2 = availableProperties == null ? void 0 : availableProperties[property.key]) == null ? void 0 : _a2.map((property2) => ({
3335
+ label: property2,
3336
+ value: property2
3337
+ }))) ?? [],
3338
+ onActiveChange: (active) => setActiveKey(active ? property.key : void 0),
3339
+ active: activeKey === property.key,
3340
+ current: values[property.key] ?? {
3341
+ select: property.select,
3342
+ value: void 0
3343
+ },
3344
+ state,
3345
+ onValueChange: (value) => {
3346
+ const newState = onFilterValueChange(property, value, activeKey);
3347
+ setActiveKey(newState.newActiveKey);
3348
+ },
3349
+ onSkip: () => {
3350
+ var _a3;
3351
+ const currentIndex = properties.findIndex((p2) => p2.key === activeKey);
3352
+ const nextPropertyKey = currentIndex !== -1 ? (_a3 = properties[currentIndex + 1]) == null ? void 0 : _a3.key : void 0;
3353
+ setActiveKey(nextPropertyKey);
3354
+ }
3355
+ })
3356
+ }, property.key);
3357
+ })
3358
+ });
3359
+ };
3360
+ const SkeletonText = ({
3361
+ chars
3362
+ }) => {
3363
+ return u$1("span", {
3364
+ style: {
3365
+ width: chars + "ch"
3366
+ },
3367
+ class: "rounded-job-tag inline-block h-[1lh] bg-[currentColor] opacity-25"
3368
+ });
3369
+ };
3210
3370
  const wrapperClass = cva({
3211
3371
  base: "rounded-job-card bg-job-card-bg ring-width-job-card ring-job-card-stroke active:bg-job-card-bg-active active:ring-job-card-stroke-active flex gap-4 fr ease-expo-out min-w-0 p-4 transition-all duration-500"
3212
3372
  });
@@ -3228,57 +3388,118 @@ const tagClass = cva({
3228
3388
  const JobCard = ({
3229
3389
  job
3230
3390
  }) => {
3231
- return u("a", {
3391
+ return u$1("a", {
3232
3392
  href: "",
3233
3393
  class: wrapperClass(),
3234
- children: [u("div", {
3394
+ children: [u$1("div", {
3235
3395
  class: "flex flex-1 flex-col gap-4",
3236
- children: [u("div", {
3396
+ children: [u$1("div", {
3237
3397
  class: "flex flex-col items-start gap-1",
3238
- children: [job.isNew ? u("span", {
3398
+ children: [job.isNew ? u$1("span", {
3239
3399
  class: badgeClass(),
3240
3400
  children: "NEW"
3241
- }) : u("p", {
3401
+ }) : u$1("p", {
3242
3402
  class: "text-style-job-card-info text-copy-job-info",
3243
3403
  children: ["Posted ", job.relativePostedDate]
3244
- }), u("div", {
3404
+ }), u$1("div", {
3245
3405
  class: "flex flex-col gap-1",
3246
- children: [u("p", {
3406
+ children: [u$1("p", {
3247
3407
  class: "text-style-job-card-title text-copy-neutral",
3248
3408
  children: job.title
3249
- }), u("p", {
3409
+ }), u$1("p", {
3250
3410
  class: "text-style-job-card text-copy-neutral-lowcontrast",
3251
3411
  children: job.company.name
3252
3412
  })]
3253
3413
  })]
3254
- }), u("div", {
3414
+ }), u$1("div", {
3255
3415
  class: "flex flex-col items-start gap-2",
3256
- children: [job.pay && u("span", {
3416
+ children: [job.pay && u$1("span", {
3257
3417
  class: tagClass({
3258
3418
  colorScheme: "monetary"
3259
3419
  }),
3260
3420
  children: job.pay
3261
- }), u("div", {
3421
+ }), u$1("div", {
3262
3422
  class: "flex items-center gap-2",
3263
- children: job.contractType && u("span", {
3423
+ children: job.contractType && u$1("span", {
3264
3424
  class: tagClass(),
3265
3425
  children: job.contractType
3266
3426
  })
3267
3427
  })]
3268
3428
  })]
3269
- }), u("div", {
3429
+ }), u$1("div", {
3270
3430
  class: "flex items-center",
3271
- children: u(Icon, {
3431
+ children: u$1(Icon, {
3272
3432
  name: "chevron-right",
3273
3433
  class: "text-copy-neutral-icon"
3274
3434
  })
3275
3435
  })]
3276
3436
  });
3277
3437
  };
3278
- const filterIcons = {
3279
- contract_type: "clock",
3280
- city: "mapPin",
3281
- title: "magnifier"
3438
+ const JobCardSkeleton = ({
3439
+ animationDelay,
3440
+ seed
3441
+ }) => {
3442
+ return u$1("div", {
3443
+ "aria-hidden": true,
3444
+ style: {
3445
+ animationDelay: animationDelay + "s"
3446
+ },
3447
+ class: wrapperClass({
3448
+ class: "animate-skeleton"
3449
+ }),
3450
+ children: [u$1("div", {
3451
+ class: "flex flex-1 flex-col gap-4",
3452
+ children: [u$1("div", {
3453
+ class: "flex flex-col items-start gap-1",
3454
+ children: [u$1("p", {
3455
+ class: "text-style-job-card-info text-copy-job-info",
3456
+ children: u$1(SkeletonText, {
3457
+ chars: 12
3458
+ })
3459
+ }), u$1("div", {
3460
+ class: "flex flex-col gap-1",
3461
+ children: [u$1("p", {
3462
+ class: "text-style-job-card-title text-copy-neutral",
3463
+ children: u$1(SkeletonText, {
3464
+ chars: 13 + (seed + 5) * seed % 7
3465
+ })
3466
+ }), u$1("p", {
3467
+ class: "text-style-job-card text-copy-neutral-lowcontrast",
3468
+ children: u$1(SkeletonText, {
3469
+ chars: 7 + seed * seed % 3
3470
+ })
3471
+ })]
3472
+ })]
3473
+ }), u$1("div", {
3474
+ class: "flex flex-col items-start gap-2",
3475
+ children: [u$1("span", {
3476
+ class: tagClass({
3477
+ colorScheme: "default",
3478
+ class: "h-[1lh] w-[10ch]"
3479
+ })
3480
+ }), u$1("div", {
3481
+ class: "flex items-center gap-2",
3482
+ children: [u$1("span", {
3483
+ class: tagClass({
3484
+ colorScheme: "default",
3485
+ class: "h-[1lh] w-[6ch]"
3486
+ })
3487
+ }), u$1("span", {
3488
+ class: tagClass({
3489
+ colorScheme: "default",
3490
+ class: "h-[1lh] w-[8ch]"
3491
+ })
3492
+ })]
3493
+ })]
3494
+ })]
3495
+ }), u$1("div", {
3496
+ class: "flex items-center",
3497
+ children: u$1(Icon, {
3498
+ name: "chevron-right",
3499
+ class: "text-copy-neutral-icon"
3500
+ })
3501
+ })]
3502
+ });
3282
3503
  };
3283
3504
  const propertiesToDefaultValues = (properties) => properties.reduce((acc, property) => {
3284
3505
  switch (property.select) {
@@ -3333,7 +3554,6 @@ const nextStateFromValue = ({
3333
3554
  default:
3334
3555
  exhaustive(value);
3335
3556
  }
3336
- throw new Error("unreachable");
3337
3557
  };
3338
3558
  const resultCountString = (results) => {
3339
3559
  switch (results) {
@@ -3350,12 +3570,12 @@ const JobSearch = ({
3350
3570
  logger,
3351
3571
  params
3352
3572
  }) => {
3353
- var _a;
3354
3573
  const appRef = _(null);
3355
3574
  const [values, setValues] = h(() => propertiesToDefaultValues(params.properties));
3356
3575
  const {
3357
3576
  data,
3358
- isLoading
3577
+ isLoading,
3578
+ error
3359
3579
  } = useSWR(JSON.stringify(values), () => getJobSearchResults({
3360
3580
  apiClient,
3361
3581
  logger,
@@ -3366,81 +3586,76 @@ const JobSearch = ({
3366
3586
  revalidateOnReconnect: false,
3367
3587
  revalidateIfStale: false
3368
3588
  });
3589
+ if (error) {
3590
+ console.log(error.message);
3591
+ }
3369
3592
  const availableProperties = data == null ? void 0 : data.data.available_properties;
3370
- const [activeKey, setActiveKey] = h((_a = params.properties[0]) == null ? void 0 : _a.key);
3371
- useFilterKeyboardFocus(activeKey, appRef);
3372
- return u(g$3, {
3373
- children: [u(IconSpritesheet, {
3593
+ return u$1(g$3, {
3594
+ children: [u$1(IconSpritesheet, {
3374
3595
  theme: params.theme
3375
- }), u("div", {
3596
+ }), u$1("div", {
3376
3597
  ref: appRef,
3377
3598
  id: JOB_SEARCH_SCOPE_ELEMENT_ID,
3378
- children: u("div", {
3599
+ children: u$1("div", {
3379
3600
  class: "bg-app mx-auto flex min-h-screen max-w-screen-lg flex-col gap-4 py-6 md:grid md:grid-cols-3 md:px-4",
3380
- children: [u("div", {
3381
- role: "tablist",
3382
- class: "grid items-stretch gap-2 px-4 md:flex md:flex-col md:px-0",
3383
- children: params.properties.map((property) => {
3384
- var _a2;
3385
- return u(Filter, {
3386
- icon: filterIcons[property.key] ?? "filter",
3387
- filterKey: property.key,
3388
- title: property.label,
3389
- suggestions: ((_a2 = availableProperties == null ? void 0 : availableProperties[property.key]) == null ? void 0 : _a2.map((property2) => ({
3390
- label: property2,
3391
- value: property2
3392
- }))) ?? [],
3393
- onActiveChange: (active) => setActiveKey(active ? property.key : void 0),
3394
- active: activeKey === property.key,
3395
- current: values[property.key] ?? {
3396
- select: property.select,
3397
- value: void 0
3398
- },
3399
- state: isLoading && !(data == null ? void 0 : data.data.available_properties) ? "loading" : "loaded",
3400
- onValueChange: (value) => {
3401
- const {
3402
- newActiveKey,
3403
- newValue
3404
- } = nextStateFromValue({
3405
- property,
3406
- activeKey,
3407
- value,
3408
- properties: params.properties,
3409
- values
3410
- });
3411
- setActiveKey(newActiveKey);
3412
- setValues({
3413
- ...values,
3414
- [property.key]: newValue
3415
- });
3416
- },
3417
- onSkip: () => {
3418
- var _a3;
3419
- const currentIndex = params.properties.findIndex((p2) => p2.key === activeKey);
3420
- const nextPropertyKey = currentIndex !== -1 ? (_a3 = params.properties[currentIndex + 1]) == null ? void 0 : _a3.key : void 0;
3421
- setActiveKey(nextPropertyKey);
3422
- }
3423
- }, property.key);
3601
+ children: [u$1(ErrorBoundary, {
3602
+ Fallback,
3603
+ children: u$1(FilterSection, {
3604
+ onFilterValueChange: (property, value, activeKey) => {
3605
+ const {
3606
+ newActiveKey,
3607
+ newValue
3608
+ } = nextStateFromValue({
3609
+ property,
3610
+ activeKey,
3611
+ value,
3612
+ properties: params.properties,
3613
+ values
3614
+ });
3615
+ setValues({
3616
+ ...values,
3617
+ [property.key]: newValue
3618
+ });
3619
+ return {
3620
+ newActiveKey,
3621
+ newValue
3622
+ };
3623
+ },
3624
+ availableProperties,
3625
+ values,
3626
+ properties: params.properties,
3627
+ state: isLoading && !(data == null ? void 0 : data.data.available_properties) ? "loading" : "loaded",
3628
+ parentRef: appRef
3424
3629
  })
3425
- }), u("section", {
3630
+ }), u$1("div", {
3426
3631
  class: "md:col-span-2",
3427
- children: u("div", {
3632
+ children: u$1("section", {
3428
3633
  class: "bg-section-strong-bg ring-section-weak-stroke rounded-section ring-px lg:ring-width-section flex flex-col gap-4 p-4",
3429
- children: [data && u("p", {
3634
+ children: [isLoading && !(data == null ? void 0 : data.data) && u$1("div", {
3635
+ class: "flex flex-col gap-3",
3636
+ children: [u$1("p", {
3637
+ class: "text-copy-accent-lowcontrast animate-skeleton text-center",
3638
+ children: u$1(SkeletonText, {
3639
+ chars: 8
3640
+ })
3641
+ }), Array.from({
3642
+ length: 4
3643
+ }).map((_2, i2) => u$1(JobCardSkeleton, {
3644
+ seed: i2,
3645
+ animationDelay: (i2 - 4) * 0.1
3646
+ }, i2))]
3647
+ }), data && u$1("p", {
3430
3648
  class: "text-copy-accent-lowcontrast text-center",
3431
3649
  children: resultCountString(data.pagination.total)
3432
- }), u("ul", {
3650
+ }), u$1("ul", {
3433
3651
  class: "flex flex-col gap-3",
3434
3652
  children: data == null ? void 0 : data.data.results.map((job) => {
3435
- return u("li", {
3436
- children: u(JobCard, {
3653
+ return u$1("li", {
3654
+ children: u$1(JobCard, {
3437
3655
  job
3438
3656
  })
3439
3657
  }, job.id);
3440
3658
  })
3441
- }), u("p", {
3442
- class: "text-copy-accent-lowcontrast text-style-job-card-info text-center",
3443
- children: "You've reached the end of the list."
3444
3659
  })]
3445
3660
  })
3446
3661
  })]
@@ -3448,7 +3663,7 @@ const JobSearch = ({
3448
3663
  })]
3449
3664
  });
3450
3665
  };
3451
- const tailwind = "#ijs {\n font-size: 16px;\n font-family: sans-serif;\n --tw-content: '';\n font-family:\n system-ui,\n -apple-system,\n BlinkMacSystemFont,\n Segoe UI,\n Roboto,\n Oxygen,\n Ubuntu,\n Cantarell,\n Open Sans,\n Helvetica Neue,\n sans-serif;\n}\n\n #ijs * {\n box-sizing: border-box;\n border-style: solid;\n border-width: 0;\n -webkit-tap-highlight-color: transparent;\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 display: block;\n margin: 0;\n padding: 0;\n border: unset;\n background: unset;\n text-align: unset;\n }\n\n #ijs :is(svg) {\n display: block;\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 .isolate {\n isolation: isolate;\n}\n\n #ijs .m-2 {\n margin: 0.5rem;\n}\n\n #ijs .m-9 {\n margin: 2.25rem;\n}\n\n #ijs .mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n\n #ijs .-mt-4 {\n margin-top: -1rem;\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 .min-h-screen {\n min-height: 100vh;\n}\n\n #ijs .w-\\[10ch\\] {\n width: 10ch;\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 .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 0.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 0.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 #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 .items-stretch {\n align-items: stretch;\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 .overflow-hidden {\n overflow: hidden;\n}\n\n #ijs .overflow-x-auto {\n overflow-x: auto;\n}\n\n #ijs .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n #ijs .whitespace-nowrap {\n white-space: nowrap;\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 {\n border-width: 1px;\n}\n\n #ijs .bg-app {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-app-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-job-card-bg {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-job-card-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-section-strong-bg {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-section-strong-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-section-weak-bg {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-section-weak-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-tag-accent-strong-bg {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-tag-accent-strong-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-tag-monetary-weak-bg {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-tag-monetary-weak-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-tag-neutral-strong-bg {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-tag-neutral-strong-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-tag-neutral-weak-bg {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-tag-neutral-weak-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .p-1 {\n padding: 0.25rem;\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 .pb-1 {\n padding-bottom: 0.25rem;\n}\n\n #ijs .pb-4 {\n padding-bottom: 1rem;\n}\n\n #ijs .pl-3 {\n padding-left: 0.75rem;\n}\n\n #ijs .pr-1 {\n padding-right: 0.25rem;\n}\n\n #ijs .pt-2 {\n padding-top: 0.5rem;\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-filter {\n font-family: var(--i-font-filter);\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-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-card-title {\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-filter {\n font-weight: var(--i-weight-filter);\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 .text-copy-accent {\n --tw-text-opacity: 1;\n color: oklch(var(--i-copy-accent) / var(--tw-text-opacity));\n}\n\n #ijs .text-copy-accent-icon {\n --tw-text-opacity: 1;\n color: oklch(var(--i-copy-accent-icon) / var(--tw-text-opacity));\n}\n\n #ijs .text-copy-accent-lowcontrast {\n color: oklch(var(--i-copy-accent-lowcontrast) / 0.67);\n}\n\n #ijs .text-copy-job-info {\n --tw-text-opacity: 1;\n color: oklch(var(--i-copy-info) / var(--tw-text-opacity));\n}\n\n #ijs .text-copy-neutral {\n --tw-text-opacity: 1;\n color: oklch(var(--i-copy) / var(--tw-text-opacity));\n}\n\n #ijs .text-copy-neutral-icon {\n --tw-text-opacity: 1;\n color: oklch(var(--i-copy-icon) / var(--tw-text-opacity));\n}\n\n #ijs .text-copy-neutral-lowcontrast {\n --tw-text-opacity: 1;\n color: oklch(var(--i-copy-lowcontrast) / var(--tw-text-opacity));\n}\n\n #ijs .text-interactive-accent-text {\n --tw-text-opacity: 1;\n color: oklch(var(--i-interactive-accent-text) / var(--tw-text-opacity));\n}\n\n #ijs .text-interactive-neutral-text {\n --tw-text-opacity: 1;\n color: oklch(var(--i-interactive-neutral-text) / var(--tw-text-opacity));\n}\n\n #ijs .text-tag-accent-strong-copy {\n --tw-text-opacity: 1;\n color: oklch(var(--i-tag-accent-strong-copy) / var(--tw-text-opacity));\n}\n\n #ijs .text-tag-monetary-weak-copy {\n --tw-text-opacity: 1;\n color: oklch(var(--i-tag-monetary-weak-copy) / var(--tw-text-opacity));\n}\n\n #ijs .text-tag-neutral-strong-copy {\n --tw-text-opacity: 1;\n color: oklch(var(--i-tag-neutral-strong-copy) / var(--tw-text-opacity));\n}\n\n #ijs .text-tag-neutral-weak-copy {\n --tw-text-opacity: 1;\n color: oklch(var(--i-tag-neutral-weak-copy) / var(--tw-text-opacity));\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 {\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-opacity: 1;\n --tw-ring-color: oklch(var(--i-job-card-stroke-color) / var(--tw-ring-opacity));\n}\n\n #ijs .ring-section-strong-stroke {\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-section-strong-stroke-color) / var(--tw-ring-opacity));\n}\n\n #ijs .ring-section-weak-stroke {\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-section-weak-stroke-color) / var(--tw-ring-opacity));\n}\n\n #ijs .ring-tag-accent-strong-stroke {\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-tag-accent-strong-stroke-color) / var(--tw-ring-opacity));\n}\n\n #ijs .ring-tag-neutral-strong-stroke {\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-tag-neutral-strong-stroke-color) / var(--tw-ring-opacity));\n}\n\n #ijs .ring-tag-neutral-weak-stroke {\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-tag-neutral-weak-stroke-color) / var(--tw-ring-opacity));\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 .duration-1000 {\n transition-duration: 1000ms;\n}\n\n #ijs .duration-300 {\n transition-duration: 300ms;\n}\n\n #ijs .duration-500 {\n transition-duration: 500ms;\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-filter {\n font-style: var(--i-style-filter);\n}\n\n #ijs .font-style-tag {\n font-style: var(--i-style-filter);\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-opacity: 1;\n --tw-ring-color: oklch(var(--i-a-7) / 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 .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 .hover\\:bg-interactive-accent-bg-hover:hover {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-interactive-accent-bg-hover) / var(--tw-bg-opacity));\n}\n\n #ijs .hover\\:bg-interactive-neutral-bg-hover:hover {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-interactive-neutral-bg-hover) / var(--tw-bg-opacity));\n}\n\n #ijs .focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\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\\:bg-job-card-bg-active:active {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-job-card-bg-active) / var(--tw-bg-opacity));\n}\n\n #ijs .active\\:ring-job-card-stroke-active:active {\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-job-card-stroke-color-active) / var(--tw-ring-opacity));\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\\:flex {\n display: flex;\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-col {\n flex-direction: column;\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";
3666
+ const tailwind = "#ijs {\n font-size: 16px;\n font-family: sans-serif;\n --tw-content: '';\n font-family:\n system-ui,\n -apple-system,\n BlinkMacSystemFont,\n Segoe UI,\n Roboto,\n Oxygen,\n Ubuntu,\n Cantarell,\n Open Sans,\n Helvetica Neue,\n sans-serif;\n}\n\n #ijs * {\n box-sizing: border-box;\n border-style: solid;\n border-width: 0;\n -webkit-tap-highlight-color: transparent;\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 display: block;\n margin: 0;\n padding: 0;\n border: unset;\n background: unset;\n text-align: unset;\n }\n\n #ijs :is(svg) {\n display: block;\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 .isolate {\n isolation: isolate;\n}\n\n #ijs .m-2 {\n margin: 0.5rem;\n}\n\n #ijs .m-9 {\n margin: 2.25rem;\n}\n\n #ijs .mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n\n #ijs .-mt-4 {\n margin-top: -1rem;\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 .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 0.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 0.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 #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 .items-stretch {\n align-items: stretch;\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 .overflow-hidden {\n overflow: hidden;\n}\n\n #ijs .overflow-x-auto {\n overflow-x: auto;\n}\n\n #ijs .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n #ijs .whitespace-nowrap {\n white-space: nowrap;\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 {\n border-width: 1px;\n}\n\n #ijs .bg-\\[currentColor\\] {\n background-color: currentColor;\n}\n\n #ijs .bg-app {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-app-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-job-card-bg {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-job-card-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-section-strong-bg {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-section-strong-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-section-weak-bg {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-section-weak-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-tag-accent-strong-bg {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-tag-accent-strong-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-tag-monetary-weak-bg {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-tag-monetary-weak-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-tag-neutral-strong-bg {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-tag-neutral-strong-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .bg-tag-neutral-weak-bg {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-tag-neutral-weak-bg) / var(--tw-bg-opacity));\n}\n\n #ijs .p-1 {\n padding: 0.25rem;\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 .pb-1 {\n padding-bottom: 0.25rem;\n}\n\n #ijs .pb-4 {\n padding-bottom: 1rem;\n}\n\n #ijs .pl-3 {\n padding-left: 0.75rem;\n}\n\n #ijs .pr-1 {\n padding-right: 0.25rem;\n}\n\n #ijs .pt-2 {\n padding-top: 0.5rem;\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-filter {\n font-family: var(--i-font-filter);\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-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-card-title {\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-filter {\n font-weight: var(--i-weight-filter);\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 .text-copy-accent {\n --tw-text-opacity: 1;\n color: oklch(var(--i-copy-accent) / var(--tw-text-opacity));\n}\n\n #ijs .text-copy-accent-icon {\n --tw-text-opacity: 1;\n color: oklch(var(--i-copy-accent-icon) / var(--tw-text-opacity));\n}\n\n #ijs .text-copy-accent-lowcontrast {\n color: oklch(var(--i-copy-accent-lowcontrast) / 0.67);\n}\n\n #ijs .text-copy-job-info {\n --tw-text-opacity: 1;\n color: oklch(var(--i-copy-info) / var(--tw-text-opacity));\n}\n\n #ijs .text-copy-neutral {\n --tw-text-opacity: 1;\n color: oklch(var(--i-copy) / var(--tw-text-opacity));\n}\n\n #ijs .text-copy-neutral-icon {\n --tw-text-opacity: 1;\n color: oklch(var(--i-copy-icon) / var(--tw-text-opacity));\n}\n\n #ijs .text-copy-neutral-lowcontrast {\n --tw-text-opacity: 1;\n color: oklch(var(--i-copy-lowcontrast) / var(--tw-text-opacity));\n}\n\n #ijs .text-interactive-accent-text {\n --tw-text-opacity: 1;\n color: oklch(var(--i-interactive-accent-text) / var(--tw-text-opacity));\n}\n\n #ijs .text-interactive-neutral-text {\n --tw-text-opacity: 1;\n color: oklch(var(--i-interactive-neutral-text) / var(--tw-text-opacity));\n}\n\n #ijs .text-tag-accent-strong-copy {\n --tw-text-opacity: 1;\n color: oklch(var(--i-tag-accent-strong-copy) / var(--tw-text-opacity));\n}\n\n #ijs .text-tag-monetary-weak-copy {\n --tw-text-opacity: 1;\n color: oklch(var(--i-tag-monetary-weak-copy) / var(--tw-text-opacity));\n}\n\n #ijs .text-tag-neutral-strong-copy {\n --tw-text-opacity: 1;\n color: oklch(var(--i-tag-neutral-strong-copy) / var(--tw-text-opacity));\n}\n\n #ijs .text-tag-neutral-weak-copy {\n --tw-text-opacity: 1;\n color: oklch(var(--i-tag-neutral-weak-copy) / var(--tw-text-opacity));\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 {\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-opacity: 1;\n --tw-ring-color: oklch(var(--i-job-card-stroke-color) / var(--tw-ring-opacity));\n}\n\n #ijs .ring-section-strong-stroke {\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-section-strong-stroke-color) / var(--tw-ring-opacity));\n}\n\n #ijs .ring-section-weak-stroke {\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-section-weak-stroke-color) / var(--tw-ring-opacity));\n}\n\n #ijs .ring-tag-accent-strong-stroke {\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-tag-accent-strong-stroke-color) / var(--tw-ring-opacity));\n}\n\n #ijs .ring-tag-neutral-strong-stroke {\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-tag-neutral-strong-stroke-color) / var(--tw-ring-opacity));\n}\n\n #ijs .ring-tag-neutral-weak-stroke {\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-tag-neutral-weak-stroke-color) / var(--tw-ring-opacity));\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 .duration-1000 {\n transition-duration: 1000ms;\n}\n\n #ijs .duration-300 {\n transition-duration: 300ms;\n}\n\n #ijs .duration-500 {\n transition-duration: 500ms;\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-filter {\n font-style: var(--i-style-filter);\n}\n\n #ijs .font-style-tag {\n font-style: var(--i-style-filter);\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-opacity: 1;\n --tw-ring-color: oklch(var(--i-a-7) / 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 .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 .hover\\:bg-interactive-accent-bg-hover:hover {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-interactive-accent-bg-hover) / var(--tw-bg-opacity));\n}\n\n #ijs .hover\\:bg-interactive-neutral-bg-hover:hover {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-interactive-neutral-bg-hover) / var(--tw-bg-opacity));\n}\n\n #ijs .focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\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\\:bg-job-card-bg-active:active {\n --tw-bg-opacity: 1;\n background-color: oklch(var(--i-job-card-bg-active) / var(--tw-bg-opacity));\n}\n\n #ijs .active\\:ring-job-card-stroke-active:active {\n --tw-ring-opacity: 1;\n --tw-ring-color: oklch(var(--i-job-card-stroke-color-active) / var(--tw-ring-opacity));\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\\:flex {\n display: flex;\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-col {\n flex-direction: column;\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";
3452
3667
  const match = (m2) => {
3453
3668
  const patterns = [];
3454
3669
  const i2 = (m22) => ({
@@ -6845,17 +7060,9 @@ const generateColorThemeCss = (theme) => {
6845
7060
  ${colorsCss.concat(tokenCss).join("\n")}
6846
7061
  }`;
6847
7062
  };
7063
+ const FILTER_KEYS = ["company_id", "company_name", "industry", "employment_type", "location_type", "pay_type", "pay_currency", "pay_mask", "pay", "pay_min", "pay_max", "title", "category", "skills", "address_1", "address_2", "town", "city", "postcode", "country", "contract_type", "pay_display"];
6848
7064
  const createJobSearchDomManager = () => {
6849
7065
  return {
6850
- addStyle: (css, id) => {
6851
- const head = document.head;
6852
- const existing = head.querySelector(`style#${id}`);
6853
- existing == null ? void 0 : existing.remove();
6854
- const element = document.createElement("style");
6855
- element.id = id;
6856
- element.innerHTML = css;
6857
- head.appendChild(element);
6858
- },
6859
7066
  getRenderTargetElement: () => {
6860
7067
  const element = document.body.querySelector(`#${JOB_SEARCH_ELEMENT_ID}`);
6861
7068
  invariant(element, `Element with id ${JOB_SEARCH_ELEMENT_ID} not found.`);
@@ -6874,7 +7081,9 @@ const jobSearchPlugin = (params) => sdk.createPlugin(({
6874
7081
  }, tailwind), y$2("style", {
6875
7082
  id: "inploi-job-search-theme"
6876
7083
  }, generateColorThemeCss(params.theme))];
6877
- const App = y$2(g$3, {}, [styleElements, y$2(JobSearch, {
7084
+ const App = y$2(ErrorBoundary, {
7085
+ Fallback
7086
+ }, [styleElements, y$2(JobSearch, {
6878
7087
  params,
6879
7088
  apiClient,
6880
7089
  logger,
@@ -6885,7 +7094,7 @@ const jobSearchPlugin = (params) => sdk.createPlugin(({
6885
7094
  * Useful when server-side rendering to avoid CLS.
6886
7095
  */
6887
7096
  renderToString: () => {
6888
- return b$1(App);
7097
+ return b$1(y$2(g$3, {}, App));
6889
7098
  },
6890
7099
  /** Renders the Job Search Plugin inside the container element. */
6891
7100
  render: async () => {
@@ -6894,5 +7103,6 @@ const jobSearchPlugin = (params) => sdk.createPlugin(({
6894
7103
  }
6895
7104
  };
6896
7105
  });
7106
+ exports.FILTER_KEYS = FILTER_KEYS;
6897
7107
  exports.createJobSearchDomManager = createJobSearchDomManager;
6898
7108
  exports.jobSearchPlugin = jobSearchPlugin;