diff --git a/groups/ACAAB/assets/acaab-hero.png b/groups/ACAAB/assets/acaab-hero.png deleted file mode 100644 index 33f70e0..0000000 Binary files a/groups/ACAAB/assets/acaab-hero.png and /dev/null differ diff --git a/groups/ACAAB/assets/acaab.css b/groups/ACAAB/assets/acaab.css deleted file mode 100644 index 836b606..0000000 --- a/groups/ACAAB/assets/acaab.css +++ /dev/null @@ -1 +0,0 @@ -@import"https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@400;700&family=Roboto:wght@300;400;500;700&family=Merriweather:wght@700;900&display=swap";/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-scroll-snap-strictness:proximity;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:"Roboto", ui-sans-serif, system-ui, sans-serif;--font-serif:"Merriweather", ui-serif, Georgia, serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-100:oklch(93.6% .032 17.717);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-orange-50:oklch(98% .016 73.684);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-600:oklch(66.6% .179 58.318);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-600:oklch(68.1% .162 75.834);--color-green-50:oklch(98.2% .018 155.826);--color-green-600:oklch(62.7% .194 149.214);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-teal-600:oklch(60% .118 184.704);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-100:oklch(95.6% .045 203.388);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-500:oklch(71.5% .143 215.221);--color-cyan-600:oklch(60.9% .126 221.723);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-500:oklch(60.6% .25 292.717);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-pink-500:oklch(65.6% .241 354.308);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-600:oklch(58.6% .253 17.585);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--drop-shadow-sm:0 1px 2px #00000026;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--blur-md:12px;--blur-3xl:64px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--font-display:"Roboto Condensed", sans-serif;--color-untan-navy:#003150;--color-untan-yellow:#feb401;--color-untan-blue:#1e40af;--color-primary-navy:#003150;--color-primary-gold:#feb401}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:calc(var(--spacing) * 0)}.left-3{left:calc(var(--spacing) * 3)}.left-4{left:calc(var(--spacing) * 4)}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[300\]{z-index:300}.col-span-4{grid-column:span 4/span 4}.col-span-5{grid-column:span 5/span 5}.col-span-7{grid-column:span 7/span 7}.col-span-8{grid-column:span 8/span 8}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-auto{margin-inline:auto}.my-2{margin-block:calc(var(--spacing) * 2)}.-mt-12{margin-top:calc(var(--spacing) * -12)}.-mt-16{margin-top:calc(var(--spacing) * -16)}.-mt-20{margin-top:calc(var(--spacing) * -20)}.mt-0{margin-top:calc(var(--spacing) * 0)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-20{margin-top:calc(var(--spacing) * 20)}.mt-auto{margin-top:auto}.-mr-12{margin-right:calc(var(--spacing) * -12)}.-mr-16{margin-right:calc(var(--spacing) * -16)}.-mr-20{margin-right:calc(var(--spacing) * -20)}.-mb-12{margin-bottom:calc(var(--spacing) * -12)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.mb-12{margin-bottom:calc(var(--spacing) * 12)}.mb-16{margin-bottom:calc(var(--spacing) * 16)}.-ml-12{margin-left:calc(var(--spacing) * -12)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-auto{margin-left:auto}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1{height:calc(var(--spacing) * 1)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-20{height:calc(var(--spacing) * 20)}.h-24{height:calc(var(--spacing) * 24)}.h-32{height:calc(var(--spacing) * 32)}.h-40{height:calc(var(--spacing) * 40)}.h-52{height:calc(var(--spacing) * 52)}.h-56{height:calc(var(--spacing) * 56)}.h-80{height:calc(var(--spacing) * 80)}.h-\[72px\]{height:72px}.h-\[300px\]{height:300px}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-0{max-height:calc(var(--spacing) * 0)}.max-h-\[90vh\]{max-height:90vh}.max-h-screen{max-height:100vh}.min-h-\[44px\]{min-height:44px}.min-h-screen{min-height:100vh}.w-1{width:calc(var(--spacing) * 1)}.w-1\/3{width:33.3333%}.w-1\/4{width:25%}.w-2\/3{width:66.6667%}.w-3\/4{width:75%}.w-5\/6{width:83.3333%}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-32{width:calc(var(--spacing) * 32)}.w-40{width:calc(var(--spacing) * 40)}.w-80{width:calc(var(--spacing) * 80)}.w-\[1rem\]{width:1rem}.w-\[300px\]{width:300px}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[300px\]{max-width:300px}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.min-w-\[100px\]{min-width:100px}.min-w-\[120px\]{min-width:120px}.min-w-\[130px\]{min-width:130px}.min-w-\[160px\]{min-width:160px}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.origin-bottom{transform-origin:bottom}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.snap-x{scroll-snap-type:x var(--tw-scroll-snap-strictness)}.snap-mandatory{--tw-scroll-snap-strictness:mandatory}.snap-start{scroll-snap-align:start}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}.gap-12{gap:calc(var(--spacing) * 12)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.self-stretch{align-self:stretch}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-4{border-top-style:var(--tw-border-style);border-top-width:4px}.border-t-\[6px\]{border-top-style:var(--tw-border-style);border-top-width:6px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-4{border-bottom-style:var(--tw-border-style);border-bottom-width:4px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-black\/10{border-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.border-black\/10{border-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.border-blue-100{border-color:var(--color-blue-100)}.border-emerald-100{border-color:var(--color-emerald-100)}.border-orange-100{border-color:var(--color-orange-100)}.border-primary-gold{border-color:var(--color-primary-gold)}.border-primary-navy\/20{border-color:#00315033}@supports (color:color-mix(in lab,red,red)){.border-primary-navy\/20{border-color:color-mix(in oklab,var(--color-primary-navy) 20%,transparent)}}.border-purple-100{border-color:var(--color-purple-100)}.border-slate-100{border-color:var(--color-slate-100)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.border-untan-navy{border-color:var(--color-untan-navy)}.border-untan-yellow{border-color:var(--color-untan-yellow)}.border-untan-yellow\/20{border-color:#feb40133}@supports (color:color-mix(in lab,red,red)){.border-untan-yellow\/20{border-color:color-mix(in oklab,var(--color-untan-yellow) 20%,transparent)}}.border-white{border-color:var(--color-white)}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.border-white\/30{border-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.border-white\/30{border-color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.bg-\[\#25D366\]{background-color:#25d366}.bg-\[\#00243d\]{background-color:#00243d}.bg-\[\#FDB813\]{background-color:#fdb813}.bg-\[\#feb401\]{background-color:#feb401}.bg-amber-50{background-color:var(--color-amber-50)}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/50{background-color:#eff6ff80}@supports (color:color-mix(in lab,red,red)){.bg-blue-50\/50{background-color:color-mix(in oklab,var(--color-blue-50) 50%,transparent)}}.bg-blue-600{background-color:var(--color-blue-600)}.bg-cyan-50{background-color:var(--color-cyan-50)}.bg-cyan-300\/10{background-color:#53eafd1a}@supports (color:color-mix(in lab,red,red)){.bg-cyan-300\/10{background-color:color-mix(in oklab,var(--color-cyan-300) 10%,transparent)}}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-600{background-color:var(--color-emerald-600)}.bg-green-50{background-color:var(--color-green-50)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-600{background-color:var(--color-orange-600)}.bg-primary-gold{background-color:var(--color-primary-gold)}.bg-primary-gold\/20{background-color:#feb40133}@supports (color:color-mix(in lab,red,red)){.bg-primary-gold\/20{background-color:color-mix(in oklab,var(--color-primary-gold) 20%,transparent)}}.bg-primary-navy{background-color:var(--color-primary-navy)}.bg-primary-navy\/5{background-color:#0031500d}@supports (color:color-mix(in lab,red,red)){.bg-primary-navy\/5{background-color:color-mix(in oklab,var(--color-primary-navy) 5%,transparent)}}.bg-primary-navy\/10{background-color:#0031501a}@supports (color:color-mix(in lab,red,red)){.bg-primary-navy\/10{background-color:color-mix(in oklab,var(--color-primary-navy) 10%,transparent)}}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-600{background-color:var(--color-purple-600)}.bg-red-100{background-color:var(--color-red-100)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-200{background-color:var(--color-slate-200)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-untan-navy{background-color:var(--color-untan-navy)}.bg-untan-yellow{background-color:var(--color-untan-yellow)}.bg-untan-yellow\/10{background-color:#feb4011a}@supports (color:color-mix(in lab,red,red)){.bg-untan-yellow\/10{background-color:color-mix(in oklab,var(--color-untan-yellow) 10%,transparent)}}.bg-untan-yellow\/20{background-color:#feb40133}@supports (color:color-mix(in lab,red,red)){.bg-untan-yellow\/20{background-color:color-mix(in oklab,var(--color-untan-yellow) 20%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.bg-white\/10{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.bg-white\/80{background-color:#fffc}@supports (color:color-mix(in lab,red,red)){.bg-white\/80{background-color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.bg-white\/90{background-color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.bg-white\/90{background-color:color-mix(in oklab,var(--color-white) 90%,transparent)}}.bg-white\/95{background-color:#fffffff2}@supports (color:color-mix(in lab,red,red)){.bg-white\/95{background-color:color-mix(in oklab,var(--color-white) 95%,transparent)}}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-amber-400{--tw-gradient-from:var(--color-amber-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-black\/80{--tw-gradient-from:#000c}@supports (color:color-mix(in lab,red,red)){.from-black\/80{--tw-gradient-from:color-mix(in oklab, var(--color-black) 80%, transparent)}}.from-black\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-blue-50{--tw-gradient-from:var(--color-blue-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-blue-500{--tw-gradient-from:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-blue-600{--tw-gradient-from:var(--color-blue-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-cyan-500{--tw-gradient-from:var(--color-cyan-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-emerald-50{--tw-gradient-from:var(--color-emerald-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-emerald-500{--tw-gradient-from:var(--color-emerald-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-orange-50{--tw-gradient-from:var(--color-orange-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-primary-navy\/80{--tw-gradient-from:#003150cc}@supports (color:color-mix(in lab,red,red)){.from-primary-navy\/80{--tw-gradient-from:color-mix(in oklab, var(--color-primary-navy) 80%, transparent)}}.from-primary-navy\/80{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-purple-50{--tw-gradient-from:var(--color-purple-50);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-purple-500{--tw-gradient-from:var(--color-purple-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-red-500{--tw-gradient-from:var(--color-red-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-sky-400{--tw-gradient-from:var(--color-sky-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-slate-700{--tw-gradient-from:var(--color-slate-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-slate-800{--tw-gradient-from:var(--color-slate-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-untan-navy{--tw-gradient-from:var(--color-untan-navy);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-violet-500{--tw-gradient-from:var(--color-violet-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-black\/20{--tw-gradient-via:#0003}@supports (color:color-mix(in lab,red,red)){.via-black\/20{--tw-gradient-via:color-mix(in oklab, var(--color-black) 20%, transparent)}}.via-black\/20{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-untan-navy\/80{--tw-gradient-via:#003150cc}@supports (color:color-mix(in lab,red,red)){.via-untan-navy\/80{--tw-gradient-via:color-mix(in oklab, var(--color-untan-navy) 80%, transparent)}}.via-untan-navy\/80{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-blue-600{--tw-gradient-to:var(--color-blue-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-blue-700{--tw-gradient-to:var(--color-blue-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-indigo-700{--tw-gradient-to:var(--color-indigo-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-orange-500{--tw-gradient-to:var(--color-orange-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-pink-500{--tw-gradient-to:var(--color-pink-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-purple-600{--tw-gradient-to:var(--color-purple-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-red-600{--tw-gradient-to:var(--color-red-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-sky-500{--tw-gradient-to:var(--color-sky-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-slate-800{--tw-gradient-to:var(--color-slate-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-slate-900{--tw-gradient-to:var(--color-slate-900);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-teal-600{--tw-gradient-to:var(--color-teal-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-white{--tw-gradient-to:var(--color-white);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-bottom{object-position:bottom}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-14{padding-block:calc(var(--spacing) * 14)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-16{padding-top:calc(var(--spacing) * 16)}.pt-\[88px\]{padding-top:88px}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-9{padding-right:calc(var(--spacing) * 9)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pb-10{padding-bottom:calc(var(--spacing) * 10)}.pb-20{padding-bottom:calc(var(--spacing) * 20)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-display{font-family:var(--font-display)}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[3\.5rem\]{font-size:3.5rem}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.1em\]{--tw-tracking:.1em;letter-spacing:.1em}.tracking-\[0\.15em\]{--tw-tracking:.15em;letter-spacing:.15em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-100{color:var(--color-amber-100)}.text-amber-600{color:var(--color-amber-600)}.text-blue-100{color:var(--color-blue-100)}.text-blue-400{color:var(--color-blue-400)}.text-blue-600{color:var(--color-blue-600)}.text-cyan-100{color:var(--color-cyan-100)}.text-cyan-600{color:var(--color-cyan-600)}.text-emerald-100{color:var(--color-emerald-100)}.text-emerald-600{color:var(--color-emerald-600)}.text-green-600{color:var(--color-green-600)}.text-indigo-600{color:var(--color-indigo-600)}.text-orange-600{color:var(--color-orange-600)}.text-pink-500{color:var(--color-pink-500)}.text-primary-gold{color:var(--color-primary-gold)}.text-primary-navy{color:var(--color-primary-navy)}.text-purple-600{color:var(--color-purple-600)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-rose-600{color:var(--color-rose-600)}.text-slate-100{color:var(--color-slate-100)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-untan-blue{color:var(--color-untan-blue)}.text-untan-yellow{color:var(--color-untan-yellow)}.text-violet-100{color:var(--color-violet-100)}.text-white{color:var(--color-white)}.text-white\/30{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.text-white\/30{color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.text-white\/40{color:#fff6}@supports (color:color-mix(in lab,red,red)){.text-white\/40{color:color-mix(in oklab,var(--color-white) 40%,transparent)}}.text-white\/60{color:#fff9}@supports (color:color-mix(in lab,red,red)){.text-white\/60{color:color-mix(in oklab,var(--color-white) 60%,transparent)}}.text-yellow-600{color:var(--color-yellow-600)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.decoration-primary-gold{-webkit-text-decoration-color:var(--color-primary-gold);text-decoration-color:var(--color-primary-gold)}.decoration-slate-300{-webkit-text-decoration-color:var(--color-slate-300);text-decoration-color:var(--color-slate-300)}.decoration-2{text-decoration-thickness:2px}.decoration-4{text-decoration-thickness:4px}.underline-offset-4{text-underline-offset:4px}.underline-offset-\[10px\]{text-underline-offset:10px}.underline-offset-\[12px\]{text-underline-offset:12px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.opacity-95{opacity:.95}.opacity-100{opacity:1}.opacity-\[0\.02\]{opacity:.02}.mix-blend-overlay{mix-blend-mode:overlay}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_10px_30px_-10px_rgba\(253\,184\,19\,0\.4\)\]{--tw-shadow:0 10px 30px -10px var(--tw-shadow-color,#fdb81366);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[\#25D366\]\/20{--tw-shadow-color:#25d36633}@supports (color:color-mix(in lab,red,red)){.shadow-\[\#25D366\]\/20{--tw-shadow-color:color-mix(in oklab, oklab(76.0953% -.174012 .10152/.2) var(--tw-shadow-alpha), transparent)}}.ring-primary-navy\/10{--tw-ring-color:#0031501a}@supports (color:color-mix(in lab,red,red)){.ring-primary-navy\/10{--tw-ring-color:color-mix(in oklab, var(--color-primary-navy) 10%, transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);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,)}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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,)}.drop-shadow-\[0_15px_35px_rgba\(0\,0\,0\,0\.25\)\]{--tw-drop-shadow-size:drop-shadow(0 15px 35px var(--tw-drop-shadow-color,#00000040));--tw-drop-shadow:var(--tw-drop-shadow-size);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,)}.drop-shadow-sm{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-sm));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,)}.filter{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,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-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,);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,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-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,);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,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-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,);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,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.will-change-auto{will-change:auto}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:scale-y-110:is(:where(.group):hover *){--tw-scale-y:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:rotate-3:is(:where(.group):hover *){rotate:3deg}.group-hover\:gap-2:is(:where(.group):hover *){gap:calc(var(--spacing) * 2)}.group-hover\:bg-amber-600:is(:where(.group):hover *){background-color:var(--color-amber-600)}.group-hover\:bg-blue-600:is(:where(.group):hover *){background-color:var(--color-blue-600)}.group-hover\:bg-cyan-600:is(:where(.group):hover *){background-color:var(--color-cyan-600)}.group-hover\:bg-emerald-600:is(:where(.group):hover *){background-color:var(--color-emerald-600)}.group-hover\:bg-green-600:is(:where(.group):hover *){background-color:var(--color-green-600)}.group-hover\:bg-indigo-600:is(:where(.group):hover *){background-color:var(--color-indigo-600)}.group-hover\:bg-orange-600:is(:where(.group):hover *){background-color:var(--color-orange-600)}.group-hover\:bg-primary-gold:is(:where(.group):hover *){background-color:var(--color-primary-gold)}.group-hover\:bg-purple-600:is(:where(.group):hover *){background-color:var(--color-purple-600)}.group-hover\:bg-rose-600:is(:where(.group):hover *){background-color:var(--color-rose-600)}.group-hover\:bg-yellow-600:is(:where(.group):hover *){background-color:var(--color-yellow-600)}.group-hover\:text-untan-blue:is(:where(.group):hover *){color:var(--color-untan-blue)}.group-hover\:text-white:is(:where(.group):hover *){color:var(--color-white)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/btn\:translate-x-1:is(:where(.group\/btn):hover *){--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}}.selection\:bg-untan-yellow ::selection{background-color:var(--color-untan-yellow)}.selection\:bg-untan-yellow::selection{background-color:var(--color-untan-yellow)}.selection\:text-black ::selection{color:var(--color-black)}.selection\:text-black::selection{color:var(--color-black)}@media(hover:hover){.hover\:-translate-y-1:hover{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-\[1\.02\]:hover{scale:1.02}.hover\:gap-3:hover{gap:calc(var(--spacing) * 3)}.hover\:border-blue-300:hover{border-color:var(--color-blue-300)}.hover\:border-emerald-300:hover{border-color:var(--color-emerald-300)}.hover\:border-orange-300:hover{border-color:var(--color-orange-300)}.hover\:border-primary-navy:hover{border-color:var(--color-primary-navy)}.hover\:border-primary-navy\/30:hover{border-color:#0031504d}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary-navy\/30:hover{border-color:color-mix(in oklab,var(--color-primary-navy) 30%,transparent)}}.hover\:border-purple-300:hover{border-color:var(--color-purple-300)}.hover\:border-slate-300:hover{border-color:var(--color-slate-300)}.hover\:bg-\[\#20c05a\]:hover{background-color:#20c05a}.hover\:bg-black\/5:hover{background-color:#0000000d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/5:hover{background-color:color-mix(in oklab,var(--color-black) 5%,transparent)}}.hover\:bg-black\/10:hover{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/10:hover{background-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.hover\:bg-blue-50:hover{background-color:var(--color-blue-50)}.hover\:bg-orange-50:hover{background-color:var(--color-orange-50)}.hover\:bg-primary-navy:hover{background-color:var(--color-primary-navy)}.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-untan-blue:hover{background-color:var(--color-untan-blue)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.hover\:text-primary-gold:hover{color:var(--color-primary-gold)}.hover\:text-primary-navy:hover{color:var(--color-primary-navy)}.hover\:text-slate-600:hover{color:var(--color-slate-600)}.hover\:text-untan-blue:hover{color:var(--color-untan-blue)}.hover\:text-untan-yellow:hover{color:var(--color-untan-yellow)}.hover\:text-white:hover{color:var(--color-white)}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-primary-gold:focus{--tw-ring-color:var(--color-primary-gold)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}@media(min-width:40rem){.sm\:inline{display:inline}.sm\:h-20{height:calc(var(--spacing) * 20)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:gap-6{gap:calc(var(--spacing) * 6)}.sm\:border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.sm\:border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.sm\:pt-0{padding-top:calc(var(--spacing) * 0)}.sm\:pl-5{padding-left:calc(var(--spacing) * 5)}.sm\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media(min-width:48rem){.md\:col-span-2{grid-column:span 2/span 2}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-\[1\.25rem\]{width:1.25rem}.md\:max-w-\[420px\]{max-width:420px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:gap-1\.5{gap:calc(var(--spacing) * 1.5)}.md\:gap-3{gap:calc(var(--spacing) * 3)}.md\:px-0{padding-inline:calc(var(--spacing) * 0)}.md\:px-6{padding-inline:calc(var(--spacing) * 6)}.md\:py-6{padding-block:calc(var(--spacing) * 6)}.md\:py-8{padding-block:calc(var(--spacing) * 8)}.md\:py-12{padding-block:calc(var(--spacing) * 12)}.md\:py-16{padding-block:calc(var(--spacing) * 16)}.md\:pt-8{padding-top:calc(var(--spacing) * 8)}.md\:text-left{text-align:left}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.md\:text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.md\:text-\[4\.5rem\]{font-size:4.5rem}.md\:text-\[10px\]{font-size:10px}.md\:text-\[11px\]{font-size:11px}.md\:text-\[12px\]{font-size:12px}.md\:leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}}@media(min-width:64rem){.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:h-14{height:calc(var(--spacing) * 14)}.lg\:h-20{height:calc(var(--spacing) * 20)}.lg\:h-\[190px\]{height:190px}.lg\:w-14{width:calc(var(--spacing) * 14)}.lg\:w-20{width:calc(var(--spacing) * 20)}.lg\:w-\[1\.5rem\]{width:1.5rem}.lg\:max-w-\[450px\]{max-width:450px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:justify-center{justify-content:center}.lg\:justify-end{justify-content:flex-end}.lg\:gap-3{gap:calc(var(--spacing) * 3)}.lg\:gap-4{gap:calc(var(--spacing) * 4)}.lg\:gap-10{gap:calc(var(--spacing) * 10)}.lg\:px-6{padding-inline:calc(var(--spacing) * 6)}.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}.lg\:py-2{padding-block:calc(var(--spacing) * 2)}.lg\:py-4{padding-block:calc(var(--spacing) * 4)}.lg\:py-6{padding-block:calc(var(--spacing) * 6)}.lg\:py-7{padding-block:calc(var(--spacing) * 7)}.lg\:py-10{padding-block:calc(var(--spacing) * 10)}.lg\:pt-10{padding-top:calc(var(--spacing) * 10)}.lg\:pt-\[160px\]{padding-top:160px}.lg\:pl-5{padding-left:calc(var(--spacing) * 5)}.lg\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.lg\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.lg\:text-\[5rem\]{font-size:5rem}.lg\:text-\[12px\]{font-size:12px}.lg\:text-\[13px\]{font-size:13px}.lg\:text-\[36px\]{font-size:36px}.lg\:tracking-\[0\.3em\]{--tw-tracking:.3em;letter-spacing:.3em}}}.acaab-full-bleed{width:100vw;margin-left:-50vw;margin-right:-50vw;position:relative;left:50%}body{font-family:var(--font-sans);color:#334155;-webkit-font-smoothing:antialiased;background-color:#fff;overflow-x:hidden}h1,h2,h3,h4,h5,h6{font-family:var(--font-display)}.hide-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.hide-scrollbar::-webkit-scrollbar{display:none}@keyframes fade-in{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in{animation:.4s both fade-in}@media(min-width:768px){.stats-grid{grid-template-columns:1fr auto 1fr auto 1fr}}.proj-card{width:75vw}@media(min-width:768px){.proj-card{width:42vw}}@media(min-width:1024px){.proj-card{width:28vw}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-scroll-snap-strictness{syntax:"*";inherits:false;initial-value:proximity}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes pulse{50%{opacity:.5}} diff --git a/groups/ACAAB/assets/acaab.js b/groups/ACAAB/assets/acaab.js deleted file mode 100644 index 6c6bdef..0000000 --- a/groups/ACAAB/assets/acaab.js +++ /dev/null @@ -1,169 +0,0 @@ -(function(){const E=document.createElement("link").relList;if(E&&E.supports&&E.supports("modulepreload"))return;for(const U of document.querySelectorAll('link[rel="modulepreload"]'))s(U);new MutationObserver(U=>{for(const H of U)if(H.type==="childList")for(const Y of H.addedNodes)Y.tagName==="LINK"&&Y.rel==="modulepreload"&&s(Y)}).observe(document,{childList:!0,subtree:!0});function A(U){const H={};return U.integrity&&(H.integrity=U.integrity),U.referrerPolicy&&(H.referrerPolicy=U.referrerPolicy),U.crossOrigin==="use-credentials"?H.credentials="include":U.crossOrigin==="anonymous"?H.credentials="omit":H.credentials="same-origin",H}function s(U){if(U.ep)return;U.ep=!0;const H=A(U);fetch(U.href,H)}})();var vf={exports:{}},_n={};/** - * @license React - * react-jsx-runtime.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Ed;function Sh(){if(Ed)return _n;Ed=1;var r=Symbol.for("react.transitional.element"),E=Symbol.for("react.fragment");function A(s,U,H){var Y=null;if(H!==void 0&&(Y=""+H),U.key!==void 0&&(Y=""+U.key),"key"in U){H={};for(var $ in U)$!=="key"&&(H[$]=U[$])}else H=U;return U=H.ref,{$$typeof:r,type:s,key:Y,ref:U!==void 0?U:null,props:H}}return _n.Fragment=E,_n.jsx=A,_n.jsxs=A,_n}var _d;function Nh(){return _d||(_d=1,vf.exports=Sh()),vf.exports}var f=Nh(),gf={exports:{}},V={};/** - * @license React - * react.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Md;function jh(){if(Md)return V;Md=1;var r=Symbol.for("react.transitional.element"),E=Symbol.for("react.portal"),A=Symbol.for("react.fragment"),s=Symbol.for("react.strict_mode"),U=Symbol.for("react.profiler"),H=Symbol.for("react.consumer"),Y=Symbol.for("react.context"),$=Symbol.for("react.forward_ref"),M=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),q=Symbol.for("react.lazy"),_=Symbol.for("react.activity"),X=Symbol.iterator;function Z(m){return m===null||typeof m!="object"?null:(m=X&&m[X]||m["@@iterator"],typeof m=="function"?m:null)}var tl={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Nl=Object.assign,Sl={};function _l(m,T,O){this.props=m,this.context=T,this.refs=Sl,this.updater=O||tl}_l.prototype.isReactComponent={},_l.prototype.setState=function(m,T){if(typeof m!="object"&&typeof m!="function"&&m!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,m,T,"setState")},_l.prototype.forceUpdate=function(m){this.updater.enqueueForceUpdate(this,m,"forceUpdate")};function Vl(){}Vl.prototype=_l.prototype;function yl(m,T,O){this.props=m,this.context=T,this.refs=Sl,this.updater=O||tl}var Ml=yl.prototype=new Vl;Ml.constructor=yl,Nl(Ml,_l.prototype),Ml.isPureReactComponent=!0;var Kl=Array.isArray;function Rl(){}var W={H:null,A:null,T:null,S:null},Dl=Object.prototype.hasOwnProperty;function Il(m,T,O){var R=O.ref;return{$$typeof:r,type:m,key:T,ref:R!==void 0?R:null,props:O}}function Et(m,T){return Il(m.type,T,m.props)}function z(m){return typeof m=="object"&&m!==null&&m.$$typeof===r}function G(m){var T={"=":"=0",":":"=2"};return"$"+m.replace(/[=:]/g,function(O){return T[O]})}var kl=/\/+/g;function it(m,T){return typeof m=="object"&&m!==null&&m.key!=null?G(""+m.key):T.toString(36)}function $l(m){switch(m.status){case"fulfilled":return m.value;case"rejected":throw m.reason;default:switch(typeof m.status=="string"?m.then(Rl,Rl):(m.status="pending",m.then(function(T){m.status==="pending"&&(m.status="fulfilled",m.value=T)},function(T){m.status==="pending"&&(m.status="rejected",m.reason=T)})),m.status){case"fulfilled":return m.value;case"rejected":throw m.reason}}throw m}function S(m,T,O,R,K){var I=typeof m;(I==="undefined"||I==="boolean")&&(m=null);var fl=!1;if(m===null)fl=!0;else switch(I){case"bigint":case"string":case"number":fl=!0;break;case"object":switch(m.$$typeof){case r:case E:fl=!0;break;case q:return fl=m._init,S(fl(m._payload),T,O,R,K)}}if(fl)return K=K(m),fl=R===""?"."+it(m,0):R,Kl(K)?(O="",fl!=null&&(O=fl.replace(kl,"$&/")+"/"),S(K,T,O,"",function(Ha){return Ha})):K!=null&&(z(K)&&(K=Et(K,O+(K.key==null||m&&m.key===K.key?"":(""+K.key).replace(kl,"$&/")+"/")+fl)),T.push(K)),1;fl=0;var Wl=R===""?".":R+":";if(Kl(m))for(var zl=0;zl>>1,vl=S[rl];if(0>>1;rlU(O,Q))RU(K,O)?(S[rl]=K,S[R]=Q,rl=R):(S[rl]=O,S[T]=Q,rl=T);else if(RU(K,Q))S[rl]=K,S[R]=Q,rl=R;else break l}}return D}function U(S,D){var Q=S.sortIndex-D.sortIndex;return Q!==0?Q:S.id-D.id}if(r.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var H=performance;r.unstable_now=function(){return H.now()}}else{var Y=Date,$=Y.now();r.unstable_now=function(){return Y.now()-$}}var M=[],p=[],q=1,_=null,X=3,Z=!1,tl=!1,Nl=!1,Sl=!1,_l=typeof setTimeout=="function"?setTimeout:null,Vl=typeof clearTimeout=="function"?clearTimeout:null,yl=typeof setImmediate<"u"?setImmediate:null;function Ml(S){for(var D=A(p);D!==null;){if(D.callback===null)s(p);else if(D.startTime<=S)s(p),D.sortIndex=D.expirationTime,E(M,D);else break;D=A(p)}}function Kl(S){if(Nl=!1,Ml(S),!tl)if(A(M)!==null)tl=!0,Rl||(Rl=!0,G());else{var D=A(p);D!==null&&$l(Kl,D.startTime-S)}}var Rl=!1,W=-1,Dl=5,Il=-1;function Et(){return Sl?!0:!(r.unstable_now()-IlS&&Et());){var rl=_.callback;if(typeof rl=="function"){_.callback=null,X=_.priorityLevel;var vl=rl(_.expirationTime<=S);if(S=r.unstable_now(),typeof vl=="function"){_.callback=vl,Ml(S),D=!0;break t}_===A(M)&&s(M),Ml(S)}else s(M);_=A(M)}if(_!==null)D=!0;else{var m=A(p);m!==null&&$l(Kl,m.startTime-S),D=!1}}break l}finally{_=null,X=Q,Z=!1}D=void 0}}finally{D?G():Rl=!1}}}var G;if(typeof yl=="function")G=function(){yl(z)};else if(typeof MessageChannel<"u"){var kl=new MessageChannel,it=kl.port2;kl.port1.onmessage=z,G=function(){it.postMessage(null)}}else G=function(){_l(z,0)};function $l(S,D){W=_l(function(){S(r.unstable_now())},D)}r.unstable_IdlePriority=5,r.unstable_ImmediatePriority=1,r.unstable_LowPriority=4,r.unstable_NormalPriority=3,r.unstable_Profiling=null,r.unstable_UserBlockingPriority=2,r.unstable_cancelCallback=function(S){S.callback=null},r.unstable_forceFrameRate=function(S){0>S||125rl?(S.sortIndex=Q,E(p,S),A(M)===null&&S===A(p)&&(Nl?(Vl(W),W=-1):Nl=!0,$l(Kl,Q-rl))):(S.sortIndex=vl,E(M,S),tl||Z||(tl=!0,Rl||(Rl=!0,G()))),S},r.unstable_shouldYield=Et,r.unstable_wrapCallback=function(S){var D=X;return function(){var Q=X;X=D;try{return S.apply(this,arguments)}finally{X=Q}}}})(xf)),xf}var Ud;function zh(){return Ud||(Ud=1,pf.exports=Th()),pf.exports}var Sf={exports:{}},Jl={};/** - * @license React - * react-dom.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Cd;function Ah(){if(Cd)return Jl;Cd=1;var r=jf();function E(M){var p="https://react.dev/errors/"+M;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(r)}catch(E){console.error(E)}}return r(),Sf.exports=Ah(),Sf.exports}/** - * @license React - * react-dom-client.production.js - * - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var Rd;function _h(){if(Rd)return Mn;Rd=1;var r=zh(),E=jf(),A=Eh();function s(l){var t="https://react.dev/errors/"+l;if(1vl||(l.current=rl[vl],rl[vl]=null,vl--)}function O(l,t){vl++,rl[vl]=l.current,l.current=t}var R=m(null),K=m(null),I=m(null),fl=m(null);function Wl(l,t){switch(O(I,t),O(K,l),O(R,null),t.nodeType){case 9:case 11:l=(l=t.documentElement)&&(l=l.namespaceURI)?Wr(l):0;break;default:if(l=t.tagName,t=t.namespaceURI)t=Wr(t),l=Fr(t,l);else switch(l){case"svg":l=1;break;case"math":l=2;break;default:l=0}}T(R),O(R,l)}function zl(){T(R),T(K),T(I)}function Ha(l){l.memoizedState!==null&&O(fl,l);var t=R.current,e=Fr(t,l.type);t!==e&&(O(K,l),O(R,e))}function On(l){K.current===l&&(T(R),T(K)),fl.current===l&&(T(fl),Tn._currentValue=Q)}var Fu,zf;function _e(l){if(Fu===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);Fu=t&&t[1]||"",zf=-1)":-1n||o[a]!==v[n]){var x=` -`+o[a].replace(" at new "," at ");return l.displayName&&x.includes("")&&(x=x.replace("",l.displayName)),x}while(1<=a&&0<=n);break}}}finally{Iu=!1,Error.prepareStackTrace=e}return(e=l?l.displayName||l.name:"")?_e(e):""}function Id(l,t){switch(l.tag){case 26:case 27:case 5:return _e(l.type);case 16:return _e("Lazy");case 13:return l.child!==t&&t!==null?_e("Suspense Fallback"):_e("Suspense");case 19:return _e("SuspenseList");case 0:case 15:return Pu(l.type,!1);case 11:return Pu(l.type.render,!1);case 1:return Pu(l.type,!0);case 31:return _e("Activity");default:return""}}function Af(l){try{var t="",e=null;do t+=Id(l,e),e=l,l=l.return;while(l);return t}catch(a){return` -Error generating stack: `+a.message+` -`+a.stack}}var li=Object.prototype.hasOwnProperty,ti=r.unstable_scheduleCallback,ei=r.unstable_cancelCallback,Pd=r.unstable_shouldYield,lm=r.unstable_requestPaint,ct=r.unstable_now,tm=r.unstable_getCurrentPriorityLevel,Ef=r.unstable_ImmediatePriority,_f=r.unstable_UserBlockingPriority,Un=r.unstable_NormalPriority,em=r.unstable_LowPriority,Mf=r.unstable_IdlePriority,am=r.log,nm=r.unstable_setDisableYieldValue,Ra=null,ft=null;function le(l){if(typeof am=="function"&&nm(l),ft&&typeof ft.setStrictMode=="function")try{ft.setStrictMode(Ra,l)}catch{}}var st=Math.clz32?Math.clz32:cm,um=Math.log,im=Math.LN2;function cm(l){return l>>>=0,l===0?32:31-(um(l)/im|0)|0}var Cn=256,Hn=262144,Rn=4194304;function Me(l){var t=l&42;if(t!==0)return t;switch(l&-l){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return l&261888;case 262144:case 524288:case 1048576:case 2097152:return l&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return l&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return l}}function Bn(l,t,e){var a=l.pendingLanes;if(a===0)return 0;var n=0,u=l.suspendedLanes,i=l.pingedLanes;l=l.warmLanes;var c=a&134217727;return c!==0?(a=c&~u,a!==0?n=Me(a):(i&=c,i!==0?n=Me(i):e||(e=c&~l,e!==0&&(n=Me(e))))):(c=a&~u,c!==0?n=Me(c):i!==0?n=Me(i):e||(e=a&~l,e!==0&&(n=Me(e)))),n===0?0:t!==0&&t!==n&&(t&u)===0&&(u=n&-n,e=t&-t,u>=e||u===32&&(e&4194048)!==0)?t:n}function Ba(l,t){return(l.pendingLanes&~(l.suspendedLanes&~l.pingedLanes)&t)===0}function fm(l,t){switch(l){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Df(){var l=Rn;return Rn<<=1,(Rn&62914560)===0&&(Rn=4194304),l}function ai(l){for(var t=[],e=0;31>e;e++)t.push(l);return t}function qa(l,t){l.pendingLanes|=t,t!==268435456&&(l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0)}function sm(l,t,e,a,n,u){var i=l.pendingLanes;l.pendingLanes=e,l.suspendedLanes=0,l.pingedLanes=0,l.warmLanes=0,l.expiredLanes&=e,l.entangledLanes&=e,l.errorRecoveryDisabledLanes&=e,l.shellSuspendCounter=0;var c=l.entanglements,o=l.expirationTimes,v=l.hiddenUpdates;for(e=i&~e;0"u")return null;try{return l.activeElement||l.body}catch{return l.body}}var ym=/[\n"\\]/g;function bt(l){return l.replace(ym,function(t){return"\\"+t.charCodeAt(0).toString(16)+" "})}function si(l,t,e,a,n,u,i,c){l.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?l.type=i:l.removeAttribute("type"),t!=null?i==="number"?(t===0&&l.value===""||l.value!=t)&&(l.value=""+gt(t)):l.value!==""+gt(t)&&(l.value=""+gt(t)):i!=="submit"&&i!=="reset"||l.removeAttribute("value"),t!=null?oi(l,i,gt(t)):e!=null?oi(l,i,gt(e)):a!=null&&l.removeAttribute("value"),n==null&&u!=null&&(l.defaultChecked=!!u),n!=null&&(l.checked=n&&typeof n!="function"&&typeof n!="symbol"),c!=null&&typeof c!="function"&&typeof c!="symbol"&&typeof c!="boolean"?l.name=""+gt(c):l.removeAttribute("name")}function Xf(l,t,e,a,n,u,i,c){if(u!=null&&typeof u!="function"&&typeof u!="symbol"&&typeof u!="boolean"&&(l.type=u),t!=null||e!=null){if(!(u!=="submit"&&u!=="reset"||t!=null)){fi(l);return}e=e!=null?""+gt(e):"",t=t!=null?""+gt(t):e,c||t===l.value||(l.value=t),l.defaultValue=t}a=a??n,a=typeof a!="function"&&typeof a!="symbol"&&!!a,l.checked=c?l.checked:!!a,l.defaultChecked=!!a,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(l.name=i),fi(l)}function oi(l,t,e){t==="number"&&Ln(l.ownerDocument)===l||l.defaultValue===""+e||(l.defaultValue=""+e)}function Ie(l,t,e,a){if(l=l.options,t){t={};for(var n=0;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),yi=!1;if(qt)try{var Ga={};Object.defineProperty(Ga,"passive",{get:function(){yi=!0}}),window.addEventListener("test",Ga,Ga),window.removeEventListener("test",Ga,Ga)}catch{yi=!1}var ee=null,vi=null,Gn=null;function Wf(){if(Gn)return Gn;var l,t=vi,e=t.length,a,n="value"in ee?ee.value:ee.textContent,u=n.length;for(l=0;l=Za),es=" ",as=!1;function ns(l,t){switch(l){case"keyup":return Xm.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function us(l){return l=l.detail,typeof l=="object"&&"data"in l?l.data:null}var ea=!1;function Vm(l,t){switch(l){case"compositionend":return us(t);case"keypress":return t.which!==32?null:(as=!0,es);case"textInput":return l=t.data,l===es&&as?null:l;default:return null}}function Km(l,t){if(ea)return l==="compositionend"||!Si&&ns(l,t)?(l=Wf(),Gn=vi=ee=null,ea=!1,l):null;switch(l){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:e,offset:t-l};l=a}l:{for(;e;){if(e.nextSibling){e=e.nextSibling;break l}e=e.parentNode}e=void 0}e=ms(e)}}function ys(l,t){return l&&t?l===t?!0:l&&l.nodeType===3?!1:t&&t.nodeType===3?ys(l,t.parentNode):"contains"in l?l.contains(t):l.compareDocumentPosition?!!(l.compareDocumentPosition(t)&16):!1:!1}function vs(l){l=l!=null&&l.ownerDocument!=null&&l.ownerDocument.defaultView!=null?l.ownerDocument.defaultView:window;for(var t=Ln(l.document);t instanceof l.HTMLIFrameElement;){try{var e=typeof t.contentWindow.location.href=="string"}catch{e=!1}if(e)l=t.contentWindow;else break;t=Ln(l.document)}return t}function Ti(l){var t=l&&l.nodeName&&l.nodeName.toLowerCase();return t&&(t==="input"&&(l.type==="text"||l.type==="search"||l.type==="tel"||l.type==="url"||l.type==="password")||t==="textarea"||l.contentEditable==="true")}var l0=qt&&"documentMode"in document&&11>=document.documentMode,aa=null,zi=null,Ja=null,Ai=!1;function gs(l,t,e){var a=e.window===e?e.document:e.nodeType===9?e:e.ownerDocument;Ai||aa==null||aa!==Ln(a)||(a=aa,"selectionStart"in a&&Ti(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Ja&&ka(Ja,a)||(Ja=a,a=Hu(zi,"onSelect"),0>=i,n-=i,Ot=1<<32-st(t)+n|e<J?(al=B,B=null):al=B.sibling;var il=g(h,B,y[J],N);if(il===null){B===null&&(B=al);break}l&&B&&il.alternate===null&&t(h,B),d=u(il,d,J),ul===null?L=il:ul.sibling=il,ul=il,B=al}if(J===y.length)return e(h,B),nl&&Lt(h,J),L;if(B===null){for(;JJ?(al=B,B=null):al=B.sibling;var Te=g(h,B,il.value,N);if(Te===null){B===null&&(B=al);break}l&&B&&Te.alternate===null&&t(h,B),d=u(Te,d,J),ul===null?L=Te:ul.sibling=Te,ul=Te,B=al}if(il.done)return e(h,B),nl&&Lt(h,J),L;if(B===null){for(;!il.done;J++,il=y.next())il=j(h,il.value,N),il!==null&&(d=u(il,d,J),ul===null?L=il:ul.sibling=il,ul=il);return nl&&Lt(h,J),L}for(B=a(B);!il.done;J++,il=y.next())il=b(B,h,J,il.value,N),il!==null&&(l&&il.alternate!==null&&B.delete(il.key===null?J:il.key),d=u(il,d,J),ul===null?L=il:ul.sibling=il,ul=il);return l&&B.forEach(function(xh){return t(h,xh)}),nl&&Lt(h,J),L}function hl(h,d,y,N){if(typeof y=="object"&&y!==null&&y.type===Nl&&y.key===null&&(y=y.props.children),typeof y=="object"&&y!==null){switch(y.$$typeof){case Z:l:{for(var L=y.key;d!==null;){if(d.key===L){if(L=y.type,L===Nl){if(d.tag===7){e(h,d.sibling),N=n(d,y.props.children),N.return=h,h=N;break l}}else if(d.elementType===L||typeof L=="object"&&L!==null&&L.$$typeof===Dl&&we(L)===d.type){e(h,d.sibling),N=n(d,y.props),ln(N,y),N.return=h,h=N;break l}e(h,d);break}else t(h,d);d=d.sibling}y.type===Nl?(N=Re(y.props.children,h.mode,N,y.key),N.return=h,h=N):(N=Fn(y.type,y.key,y.props,null,h.mode,N),ln(N,y),N.return=h,h=N)}return i(h);case tl:l:{for(L=y.key;d!==null;){if(d.key===L)if(d.tag===4&&d.stateNode.containerInfo===y.containerInfo&&d.stateNode.implementation===y.implementation){e(h,d.sibling),N=n(d,y.children||[]),N.return=h,h=N;break l}else{e(h,d);break}else t(h,d);d=d.sibling}N=Ci(y,h.mode,N),N.return=h,h=N}return i(h);case Dl:return y=we(y),hl(h,d,y,N)}if($l(y))return C(h,d,y,N);if(G(y)){if(L=G(y),typeof L!="function")throw Error(s(150));return y=L.call(y),w(h,d,y,N)}if(typeof y.then=="function")return hl(h,d,nu(y),N);if(y.$$typeof===yl)return hl(h,d,lu(h,y),N);uu(h,y)}return typeof y=="string"&&y!==""||typeof y=="number"||typeof y=="bigint"?(y=""+y,d!==null&&d.tag===6?(e(h,d.sibling),N=n(d,y),N.return=h,h=N):(e(h,d),N=Ui(y,h.mode,N),N.return=h,h=N),i(h)):e(h,d)}return function(h,d,y,N){try{Pa=0;var L=hl(h,d,y,N);return ha=null,L}catch(B){if(B===ma||B===eu)throw B;var ul=rt(29,B,null,h.mode);return ul.lanes=N,ul.return=h,ul}finally{}}}var Qe=ws(!0),Gs=ws(!1),ce=!1;function Vi(l){l.updateQueue={baseState:l.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ki(l,t){l=l.updateQueue,t.updateQueue===l&&(t.updateQueue={baseState:l.baseState,firstBaseUpdate:l.firstBaseUpdate,lastBaseUpdate:l.lastBaseUpdate,shared:l.shared,callbacks:null})}function fe(l){return{lane:l,tag:0,payload:null,callback:null,next:null}}function se(l,t,e){var a=l.updateQueue;if(a===null)return null;if(a=a.shared,(cl&2)!==0){var n=a.pending;return n===null?t.next=t:(t.next=n.next,n.next=t),a.pending=t,t=Wn(l),Ts(l,null,e),t}return $n(l,a,t,e),Wn(l)}function tn(l,t,e){if(t=t.updateQueue,t!==null&&(t=t.shared,(e&4194048)!==0)){var a=t.lanes;a&=l.pendingLanes,e|=a,t.lanes=e,Uf(l,e)}}function ki(l,t){var e=l.updateQueue,a=l.alternate;if(a!==null&&(a=a.updateQueue,e===a)){var n=null,u=null;if(e=e.firstBaseUpdate,e!==null){do{var i={lane:e.lane,tag:e.tag,payload:e.payload,callback:null,next:null};u===null?n=u=i:u=u.next=i,e=e.next}while(e!==null);u===null?n=u=t:u=u.next=t}else n=u=t;e={baseState:a.baseState,firstBaseUpdate:n,lastBaseUpdate:u,shared:a.shared,callbacks:a.callbacks},l.updateQueue=e;return}l=e.lastBaseUpdate,l===null?e.firstBaseUpdate=t:l.next=t,e.lastBaseUpdate=t}var Ji=!1;function en(){if(Ji){var l=da;if(l!==null)throw l}}function an(l,t,e,a){Ji=!1;var n=l.updateQueue;ce=!1;var u=n.firstBaseUpdate,i=n.lastBaseUpdate,c=n.shared.pending;if(c!==null){n.shared.pending=null;var o=c,v=o.next;o.next=null,i===null?u=v:i.next=v,i=o;var x=l.alternate;x!==null&&(x=x.updateQueue,c=x.lastBaseUpdate,c!==i&&(c===null?x.firstBaseUpdate=v:c.next=v,x.lastBaseUpdate=o))}if(u!==null){var j=n.baseState;i=0,x=v=o=null,c=u;do{var g=c.lane&-536870913,b=g!==c.lane;if(b?(el&g)===g:(a&g)===g){g!==0&&g===ra&&(Ji=!0),x!==null&&(x=x.next={lane:0,tag:c.tag,payload:c.payload,callback:null,next:null});l:{var C=l,w=c;g=t;var hl=e;switch(w.tag){case 1:if(C=w.payload,typeof C=="function"){j=C.call(hl,j,g);break l}j=C;break l;case 3:C.flags=C.flags&-65537|128;case 0:if(C=w.payload,g=typeof C=="function"?C.call(hl,j,g):C,g==null)break l;j=_({},j,g);break l;case 2:ce=!0}}g=c.callback,g!==null&&(l.flags|=64,b&&(l.flags|=8192),b=n.callbacks,b===null?n.callbacks=[g]:b.push(g))}else b={lane:g,tag:c.tag,payload:c.payload,callback:c.callback,next:null},x===null?(v=x=b,o=j):x=x.next=b,i|=g;if(c=c.next,c===null){if(c=n.shared.pending,c===null)break;b=c,c=b.next,b.next=null,n.lastBaseUpdate=b,n.shared.pending=null}}while(!0);x===null&&(o=j),n.baseState=o,n.firstBaseUpdate=v,n.lastBaseUpdate=x,u===null&&(n.shared.lanes=0),he|=i,l.lanes=i,l.memoizedState=j}}function Qs(l,t){if(typeof l!="function")throw Error(s(191,l));l.call(t)}function Xs(l,t){var e=l.callbacks;if(e!==null)for(l.callbacks=null,l=0;lu?u:8;var i=S.T,c={};S.T=c,mc(l,!1,t,e);try{var o=n(),v=S.S;if(v!==null&&v(c,o),o!==null&&typeof o=="object"&&typeof o.then=="function"){var x=s0(o,a);cn(l,t,x,vt(l))}else cn(l,t,a,vt(l))}catch(j){cn(l,t,{then:function(){},status:"rejected",reason:j},vt())}finally{D.p=u,i!==null&&c.types!==null&&(i.types=c.types),S.T=i}}function y0(){}function rc(l,t,e,a){if(l.tag!==5)throw Error(s(476));var n=No(l).queue;So(l,n,t,Q,e===null?y0:function(){return jo(l),e(a)})}function No(l){var t=l.memoizedState;if(t!==null)return t;t={memoizedState:Q,baseState:Q,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Xt,lastRenderedState:Q},next:null};var e={};return t.next={memoizedState:e,baseState:e,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Xt,lastRenderedState:e},next:null},l.memoizedState=t,l=l.alternate,l!==null&&(l.memoizedState=t),t}function jo(l){var t=No(l);t.next===null&&(t=l.alternate.memoizedState),cn(l,t.next.queue,{},vt())}function dc(){return Gl(Tn)}function To(){return El().memoizedState}function zo(){return El().memoizedState}function v0(l){for(var t=l.return;t!==null;){switch(t.tag){case 24:case 3:var e=vt();l=fe(e);var a=se(t,l,e);a!==null&&(ut(a,t,e),tn(a,t,e)),t={cache:Gi()},l.payload=t;return}t=t.return}}function g0(l,t,e){var a=vt();e={lane:a,revertLane:0,gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null},yu(l)?Eo(t,e):(e=Di(l,t,e,a),e!==null&&(ut(e,l,a),_o(e,t,a)))}function Ao(l,t,e){var a=vt();cn(l,t,e,a)}function cn(l,t,e,a){var n={lane:a,revertLane:0,gesture:null,action:e,hasEagerState:!1,eagerState:null,next:null};if(yu(l))Eo(t,n);else{var u=l.alternate;if(l.lanes===0&&(u===null||u.lanes===0)&&(u=t.lastRenderedReducer,u!==null))try{var i=t.lastRenderedState,c=u(i,e);if(n.hasEagerState=!0,n.eagerState=c,ot(c,i))return $n(l,t,n,0),gl===null&&Jn(),!1}catch{}finally{}if(e=Di(l,t,n,a),e!==null)return ut(e,l,a),_o(e,t,a),!0}return!1}function mc(l,t,e,a){if(a={lane:2,revertLane:Vc(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},yu(l)){if(t)throw Error(s(479))}else t=Di(l,e,a,2),t!==null&&ut(t,l,2)}function yu(l){var t=l.alternate;return l===k||t!==null&&t===k}function Eo(l,t){va=fu=!0;var e=l.pending;e===null?t.next=t:(t.next=e.next,e.next=t),l.pending=t}function _o(l,t,e){if((e&4194048)!==0){var a=t.lanes;a&=l.pendingLanes,e|=a,t.lanes=e,Uf(l,e)}}var fn={readContext:Gl,use:ru,useCallback:jl,useContext:jl,useEffect:jl,useImperativeHandle:jl,useLayoutEffect:jl,useInsertionEffect:jl,useMemo:jl,useReducer:jl,useRef:jl,useState:jl,useDebugValue:jl,useDeferredValue:jl,useTransition:jl,useSyncExternalStore:jl,useId:jl,useHostTransitionStatus:jl,useFormState:jl,useActionState:jl,useOptimistic:jl,useMemoCache:jl,useCacheRefresh:jl};fn.useEffectEvent=jl;var Mo={readContext:Gl,use:ru,useCallback:function(l,t){return Fl().memoizedState=[l,t===void 0?null:t],l},useContext:Gl,useEffect:ro,useImperativeHandle:function(l,t,e){e=e!=null?e.concat([l]):null,mu(4194308,4,vo.bind(null,t,l),e)},useLayoutEffect:function(l,t){return mu(4194308,4,l,t)},useInsertionEffect:function(l,t){mu(4,2,l,t)},useMemo:function(l,t){var e=Fl();t=t===void 0?null:t;var a=l();if(Xe){le(!0);try{l()}finally{le(!1)}}return e.memoizedState=[a,t],a},useReducer:function(l,t,e){var a=Fl();if(e!==void 0){var n=e(t);if(Xe){le(!0);try{e(t)}finally{le(!1)}}}else n=t;return a.memoizedState=a.baseState=n,l={pending:null,lanes:0,dispatch:null,lastRenderedReducer:l,lastRenderedState:n},a.queue=l,l=l.dispatch=g0.bind(null,k,l),[a.memoizedState,l]},useRef:function(l){var t=Fl();return l={current:l},t.memoizedState=l},useState:function(l){l=ic(l);var t=l.queue,e=Ao.bind(null,k,t);return t.dispatch=e,[l.memoizedState,e]},useDebugValue:sc,useDeferredValue:function(l,t){var e=Fl();return oc(e,l,t)},useTransition:function(){var l=ic(!1);return l=So.bind(null,k,l.queue,!0,!1),Fl().memoizedState=l,[!1,l]},useSyncExternalStore:function(l,t,e){var a=k,n=Fl();if(nl){if(e===void 0)throw Error(s(407));e=e()}else{if(e=t(),gl===null)throw Error(s(349));(el&127)!==0||$s(a,t,e)}n.memoizedState=e;var u={value:e,getSnapshot:t};return n.queue=u,ro(Fs.bind(null,a,u,l),[l]),a.flags|=2048,ba(9,{destroy:void 0},Ws.bind(null,a,u,e,t),null),e},useId:function(){var l=Fl(),t=gl.identifierPrefix;if(nl){var e=Ut,a=Ot;e=(a&~(1<<32-st(a)-1)).toString(32)+e,t="_"+t+"R_"+e,e=su++,0<\/script>",u=u.removeChild(u.firstChild);break;case"select":u=typeof a.is=="string"?i.createElement("select",{is:a.is}):i.createElement("select"),a.multiple?u.multiple=!0:a.size&&(u.size=a.size);break;default:u=typeof a.is=="string"?i.createElement(n,{is:a.is}):i.createElement(n)}}u[Ll]=t,u[Pl]=a;l:for(i=t.child;i!==null;){if(i.tag===5||i.tag===6)u.appendChild(i.stateNode);else if(i.tag!==4&&i.tag!==27&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===t)break l;for(;i.sibling===null;){if(i.return===null||i.return===t)break l;i=i.return}i.sibling.return=i.return,i=i.sibling}t.stateNode=u;l:switch(Xl(u,n,a),n){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break l;case"img":a=!0;break l;default:a=!1}a&&Vt(t)}}return pl(t),Ec(t,t.type,l===null?null:l.memoizedProps,t.pendingProps,e),null;case 6:if(l&&t.stateNode!=null)l.memoizedProps!==a&&Vt(t);else{if(typeof a!="string"&&t.stateNode===null)throw Error(s(166));if(l=I.current,sa(t)){if(l=t.stateNode,e=t.memoizedProps,a=null,n=wl,n!==null)switch(n.tag){case 27:case 5:a=n.memoizedProps}l[Ll]=t,l=!!(l.nodeValue===e||a!==null&&a.suppressHydrationWarning===!0||Jr(l.nodeValue,e)),l||ue(t,!0)}else l=Ru(l).createTextNode(a),l[Ll]=t,t.stateNode=l}return pl(t),null;case 31:if(e=t.memoizedState,l===null||l.memoizedState!==null){if(a=sa(t),e!==null){if(l===null){if(!a)throw Error(s(318));if(l=t.memoizedState,l=l!==null?l.dehydrated:null,!l)throw Error(s(557));l[Ll]=t}else Be(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;pl(t),l=!1}else e=qi(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=e),l=!0;if(!l)return t.flags&256?(mt(t),t):(mt(t),null);if((t.flags&128)!==0)throw Error(s(558))}return pl(t),null;case 13:if(a=t.memoizedState,l===null||l.memoizedState!==null&&l.memoizedState.dehydrated!==null){if(n=sa(t),a!==null&&a.dehydrated!==null){if(l===null){if(!n)throw Error(s(318));if(n=t.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(s(317));n[Ll]=t}else Be(),(t.flags&128)===0&&(t.memoizedState=null),t.flags|=4;pl(t),n=!1}else n=qi(),l!==null&&l.memoizedState!==null&&(l.memoizedState.hydrationErrors=n),n=!0;if(!n)return t.flags&256?(mt(t),t):(mt(t),null)}return mt(t),(t.flags&128)!==0?(t.lanes=e,t):(e=a!==null,l=l!==null&&l.memoizedState!==null,e&&(a=t.child,n=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(n=a.alternate.memoizedState.cachePool.pool),u=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(u=a.memoizedState.cachePool.pool),u!==n&&(a.flags|=2048)),e!==l&&e&&(t.child.flags|=8192),xu(t,t.updateQueue),pl(t),null);case 4:return zl(),l===null&&$c(t.stateNode.containerInfo),pl(t),null;case 10:return Gt(t.type),pl(t),null;case 19:if(T(Al),a=t.memoizedState,a===null)return pl(t),null;if(n=(t.flags&128)!==0,u=a.rendering,u===null)if(n)on(a,!1);else{if(Tl!==0||l!==null&&(l.flags&128)!==0)for(l=t.child;l!==null;){if(u=cu(l),u!==null){for(t.flags|=128,on(a,!1),l=u.updateQueue,t.updateQueue=l,xu(t,l),t.subtreeFlags=0,l=e,e=t.child;e!==null;)zs(e,l),e=e.sibling;return O(Al,Al.current&1|2),nl&&Lt(t,a.treeForkCount),t.child}l=l.sibling}a.tail!==null&&ct()>zu&&(t.flags|=128,n=!0,on(a,!1),t.lanes=4194304)}else{if(!n)if(l=cu(u),l!==null){if(t.flags|=128,n=!0,l=l.updateQueue,t.updateQueue=l,xu(t,l),on(a,!0),a.tail===null&&a.tailMode==="hidden"&&!u.alternate&&!nl)return pl(t),null}else 2*ct()-a.renderingStartTime>zu&&e!==536870912&&(t.flags|=128,n=!0,on(a,!1),t.lanes=4194304);a.isBackwards?(u.sibling=t.child,t.child=u):(l=a.last,l!==null?l.sibling=u:t.child=u,a.last=u)}return a.tail!==null?(l=a.tail,a.rendering=l,a.tail=l.sibling,a.renderingStartTime=ct(),l.sibling=null,e=Al.current,O(Al,n?e&1|2:e&1),nl&&Lt(t,a.treeForkCount),l):(pl(t),null);case 22:case 23:return mt(t),Wi(),a=t.memoizedState!==null,l!==null?l.memoizedState!==null!==a&&(t.flags|=8192):a&&(t.flags|=8192),a?(e&536870912)!==0&&(t.flags&128)===0&&(pl(t),t.subtreeFlags&6&&(t.flags|=8192)):pl(t),e=t.updateQueue,e!==null&&xu(t,e.retryQueue),e=null,l!==null&&l.memoizedState!==null&&l.memoizedState.cachePool!==null&&(e=l.memoizedState.cachePool.pool),a=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(a=t.memoizedState.cachePool.pool),a!==e&&(t.flags|=2048),l!==null&&T(Le),null;case 24:return e=null,l!==null&&(e=l.memoizedState.cache),t.memoizedState.cache!==e&&(t.flags|=2048),Gt(Ol),pl(t),null;case 25:return null;case 30:return null}throw Error(s(156,t.tag))}function N0(l,t){switch(Ri(t),t.tag){case 1:return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 3:return Gt(Ol),zl(),l=t.flags,(l&65536)!==0&&(l&128)===0?(t.flags=l&-65537|128,t):null;case 26:case 27:case 5:return On(t),null;case 31:if(t.memoizedState!==null){if(mt(t),t.alternate===null)throw Error(s(340));Be()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 13:if(mt(t),l=t.memoizedState,l!==null&&l.dehydrated!==null){if(t.alternate===null)throw Error(s(340));Be()}return l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 19:return T(Al),null;case 4:return zl(),null;case 10:return Gt(t.type),null;case 22:case 23:return mt(t),Wi(),l!==null&&T(Le),l=t.flags,l&65536?(t.flags=l&-65537|128,t):null;case 24:return Gt(Ol),null;case 25:return null;default:return null}}function Po(l,t){switch(Ri(t),t.tag){case 3:Gt(Ol),zl();break;case 26:case 27:case 5:On(t);break;case 4:zl();break;case 31:t.memoizedState!==null&&mt(t);break;case 13:mt(t);break;case 19:T(Al);break;case 10:Gt(t.type);break;case 22:case 23:mt(t),Wi(),l!==null&&T(Le);break;case 24:Gt(Ol)}}function rn(l,t){try{var e=t.updateQueue,a=e!==null?e.lastEffect:null;if(a!==null){var n=a.next;e=n;do{if((e.tag&l)===l){a=void 0;var u=e.create,i=e.inst;a=u(),i.destroy=a}e=e.next}while(e!==n)}}catch(c){ol(t,t.return,c)}}function de(l,t,e){try{var a=t.updateQueue,n=a!==null?a.lastEffect:null;if(n!==null){var u=n.next;a=u;do{if((a.tag&l)===l){var i=a.inst,c=i.destroy;if(c!==void 0){i.destroy=void 0,n=t;var o=e,v=c;try{v()}catch(x){ol(n,o,x)}}}a=a.next}while(a!==u)}}catch(x){ol(t,t.return,x)}}function lr(l){var t=l.updateQueue;if(t!==null){var e=l.stateNode;try{Xs(t,e)}catch(a){ol(l,l.return,a)}}}function tr(l,t,e){e.props=Ze(l.type,l.memoizedProps),e.state=l.memoizedState;try{e.componentWillUnmount()}catch(a){ol(l,t,a)}}function dn(l,t){try{var e=l.ref;if(e!==null){switch(l.tag){case 26:case 27:case 5:var a=l.stateNode;break;case 30:a=l.stateNode;break;default:a=l.stateNode}typeof e=="function"?l.refCleanup=e(a):e.current=a}}catch(n){ol(l,t,n)}}function Ct(l,t){var e=l.ref,a=l.refCleanup;if(e!==null)if(typeof a=="function")try{a()}catch(n){ol(l,t,n)}finally{l.refCleanup=null,l=l.alternate,l!=null&&(l.refCleanup=null)}else if(typeof e=="function")try{e(null)}catch(n){ol(l,t,n)}else e.current=null}function er(l){var t=l.type,e=l.memoizedProps,a=l.stateNode;try{l:switch(t){case"button":case"input":case"select":case"textarea":e.autoFocus&&a.focus();break l;case"img":e.src?a.src=e.src:e.srcSet&&(a.srcset=e.srcSet)}}catch(n){ol(l,l.return,n)}}function _c(l,t,e){try{var a=l.stateNode;Z0(a,l.type,e,t),a[Pl]=t}catch(n){ol(l,l.return,n)}}function ar(l){return l.tag===5||l.tag===3||l.tag===26||l.tag===27&&pe(l.type)||l.tag===4}function Mc(l){l:for(;;){for(;l.sibling===null;){if(l.return===null||ar(l.return))return null;l=l.return}for(l.sibling.return=l.return,l=l.sibling;l.tag!==5&&l.tag!==6&&l.tag!==18;){if(l.tag===27&&pe(l.type)||l.flags&2||l.child===null||l.tag===4)continue l;l.child.return=l,l=l.child}if(!(l.flags&2))return l.stateNode}}function Dc(l,t,e){var a=l.tag;if(a===5||a===6)l=l.stateNode,t?(e.nodeType===9?e.body:e.nodeName==="HTML"?e.ownerDocument.body:e).insertBefore(l,t):(t=e.nodeType===9?e.body:e.nodeName==="HTML"?e.ownerDocument.body:e,t.appendChild(l),e=e._reactRootContainer,e!=null||t.onclick!==null||(t.onclick=Bt));else if(a!==4&&(a===27&&pe(l.type)&&(e=l.stateNode,t=null),l=l.child,l!==null))for(Dc(l,t,e),l=l.sibling;l!==null;)Dc(l,t,e),l=l.sibling}function Su(l,t,e){var a=l.tag;if(a===5||a===6)l=l.stateNode,t?e.insertBefore(l,t):e.appendChild(l);else if(a!==4&&(a===27&&pe(l.type)&&(e=l.stateNode),l=l.child,l!==null))for(Su(l,t,e),l=l.sibling;l!==null;)Su(l,t,e),l=l.sibling}function nr(l){var t=l.stateNode,e=l.memoizedProps;try{for(var a=l.type,n=t.attributes;n.length;)t.removeAttributeNode(n[0]);Xl(t,a,e),t[Ll]=l,t[Pl]=e}catch(u){ol(l,l.return,u)}}var Kt=!1,Hl=!1,Oc=!1,ur=typeof WeakSet=="function"?WeakSet:Set,Yl=null;function j0(l,t){if(l=l.containerInfo,Ic=Qu,l=vs(l),Ti(l)){if("selectionStart"in l)var e={start:l.selectionStart,end:l.selectionEnd};else l:{e=(e=l.ownerDocument)&&e.defaultView||window;var a=e.getSelection&&e.getSelection();if(a&&a.rangeCount!==0){e=a.anchorNode;var n=a.anchorOffset,u=a.focusNode;a=a.focusOffset;try{e.nodeType,u.nodeType}catch{e=null;break l}var i=0,c=-1,o=-1,v=0,x=0,j=l,g=null;t:for(;;){for(var b;j!==e||n!==0&&j.nodeType!==3||(c=i+n),j!==u||a!==0&&j.nodeType!==3||(o=i+a),j.nodeType===3&&(i+=j.nodeValue.length),(b=j.firstChild)!==null;)g=j,j=b;for(;;){if(j===l)break t;if(g===e&&++v===n&&(c=i),g===u&&++x===a&&(o=i),(b=j.nextSibling)!==null)break;j=g,g=j.parentNode}j=b}e=c===-1||o===-1?null:{start:c,end:o}}else e=null}e=e||{start:0,end:0}}else e=null;for(Pc={focusedElem:l,selectionRange:e},Qu=!1,Yl=t;Yl!==null;)if(t=Yl,l=t.child,(t.subtreeFlags&1028)!==0&&l!==null)l.return=t,Yl=l;else for(;Yl!==null;){switch(t=Yl,u=t.alternate,l=t.flags,t.tag){case 0:if((l&4)!==0&&(l=t.updateQueue,l=l!==null?l.events:null,l!==null))for(e=0;e title"))),Xl(u,a,e),u[Ll]=l,ql(u),a=u;break l;case"link":var i=rd("link","href",n).get(a+(e.href||""));if(i){for(var c=0;chl&&(i=hl,hl=w,w=i);var h=hs(c,w),d=hs(c,hl);if(h&&d&&(b.rangeCount!==1||b.anchorNode!==h.node||b.anchorOffset!==h.offset||b.focusNode!==d.node||b.focusOffset!==d.offset)){var y=j.createRange();y.setStart(h.node,h.offset),b.removeAllRanges(),w>hl?(b.addRange(y),b.extend(d.node,d.offset)):(y.setEnd(d.node,d.offset),b.addRange(y))}}}}for(j=[],b=c;b=b.parentNode;)b.nodeType===1&&j.push({element:b,left:b.scrollLeft,top:b.scrollTop});for(typeof c.focus=="function"&&c.focus(),c=0;ce?32:e,S.T=null,e=Yc,Yc=null;var u=ve,i=Ft;if(Bl=0,ja=ve=null,Ft=0,(cl&6)!==0)throw Error(s(331));var c=cl;if(cl|=4,vr(u.current),mr(u,u.current,i,e),cl=c,bn(0,!1),ft&&typeof ft.onPostCommitFiberRoot=="function")try{ft.onPostCommitFiberRoot(Ra,u)}catch{}return!0}finally{D.p=n,S.T=a,Hr(l,t)}}function Br(l,t,e){t=xt(e,t),t=gc(l.stateNode,t,2),l=se(l,t,2),l!==null&&(qa(l,2),Ht(l))}function ol(l,t,e){if(l.tag===3)Br(l,l,e);else for(;t!==null;){if(t.tag===3){Br(t,l,e);break}else if(t.tag===1){var a=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(ye===null||!ye.has(a))){l=xt(e,l),e=qo(2),a=se(t,e,2),a!==null&&(Yo(e,a,t,l),qa(a,2),Ht(a));break}}t=t.return}}function Qc(l,t,e){var a=l.pingCache;if(a===null){a=l.pingCache=new A0;var n=new Set;a.set(t,n)}else n=a.get(t),n===void 0&&(n=new Set,a.set(t,n));n.has(e)||(Hc=!0,n.add(e),l=O0.bind(null,l,t,e),t.then(l,l))}function O0(l,t,e){var a=l.pingCache;a!==null&&a.delete(t),l.pingedLanes|=l.suspendedLanes&e,l.warmLanes&=~e,gl===l&&(el&e)===e&&(Tl===4||Tl===3&&(el&62914560)===el&&300>ct()-Tu?(cl&2)===0&&Ta(l,0):Rc|=e,Na===el&&(Na=0)),Ht(l)}function qr(l,t){t===0&&(t=Df()),l=He(l,t),l!==null&&(qa(l,t),Ht(l))}function U0(l){var t=l.memoizedState,e=0;t!==null&&(e=t.retryLane),qr(l,e)}function C0(l,t){var e=0;switch(l.tag){case 31:case 13:var a=l.stateNode,n=l.memoizedState;n!==null&&(e=n.retryLane);break;case 19:a=l.stateNode;break;case 22:a=l.stateNode._retryCache;break;default:throw Error(s(314))}a!==null&&a.delete(t),qr(l,e)}function H0(l,t){return ti(l,t)}var Ou=null,Aa=null,Xc=!1,Uu=!1,Zc=!1,be=0;function Ht(l){l!==Aa&&l.next===null&&(Aa===null?Ou=Aa=l:Aa=Aa.next=l),Uu=!0,Xc||(Xc=!0,B0())}function bn(l,t){if(!Zc&&Uu){Zc=!0;do for(var e=!1,a=Ou;a!==null;){if(l!==0){var n=a.pendingLanes;if(n===0)var u=0;else{var i=a.suspendedLanes,c=a.pingedLanes;u=(1<<31-st(42|l)+1)-1,u&=n&~(i&~c),u=u&201326741?u&201326741|1:u?u|2:0}u!==0&&(e=!0,Gr(a,u))}else u=el,u=Bn(a,a===gl?u:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(u&3)===0||Ba(a,u)||(e=!0,Gr(a,u));a=a.next}while(e);Zc=!1}}function R0(){Yr()}function Yr(){Uu=Xc=!1;var l=0;be!==0&&K0()&&(l=be);for(var t=ct(),e=null,a=Ou;a!==null;){var n=a.next,u=Lr(a,t);u===0?(a.next=null,e===null?Ou=n:e.next=n,n===null&&(Aa=e)):(e=a,(l!==0||(u&3)!==0)&&(Uu=!0)),a=n}Bl!==0&&Bl!==5||bn(l),be!==0&&(be=0)}function Lr(l,t){for(var e=l.suspendedLanes,a=l.pingedLanes,n=l.expirationTimes,u=l.pendingLanes&-62914561;0c)break;var x=o.transferSize,j=o.initiatorType;x&&$r(j)&&(o=o.responseEnd,i+=x*(o"u"?null:document;function cd(l,t,e){var a=Ea;if(a&&typeof t=="string"&&t){var n=bt(t);n='link[rel="'+l+'"][href="'+n+'"]',typeof e=="string"&&(n+='[crossorigin="'+e+'"]'),id.has(n)||(id.add(n),l={rel:l,crossOrigin:e,href:t},a.querySelector(n)===null&&(t=a.createElement("link"),Xl(t,"link",l),ql(t),a.head.appendChild(t)))}}function th(l){It.D(l),cd("dns-prefetch",l,null)}function eh(l,t){It.C(l,t),cd("preconnect",l,t)}function ah(l,t,e){It.L(l,t,e);var a=Ea;if(a&&l&&t){var n='link[rel="preload"][as="'+bt(t)+'"]';t==="image"&&e&&e.imageSrcSet?(n+='[imagesrcset="'+bt(e.imageSrcSet)+'"]',typeof e.imageSizes=="string"&&(n+='[imagesizes="'+bt(e.imageSizes)+'"]')):n+='[href="'+bt(l)+'"]';var u=n;switch(t){case"style":u=_a(l);break;case"script":u=Ma(l)}At.has(u)||(l=_({rel:"preload",href:t==="image"&&e&&e.imageSrcSet?void 0:l,as:t},e),At.set(u,l),a.querySelector(n)!==null||t==="style"&&a.querySelector(Nn(u))||t==="script"&&a.querySelector(jn(u))||(t=a.createElement("link"),Xl(t,"link",l),ql(t),a.head.appendChild(t)))}}function nh(l,t){It.m(l,t);var e=Ea;if(e&&l){var a=t&&typeof t.as=="string"?t.as:"script",n='link[rel="modulepreload"][as="'+bt(a)+'"][href="'+bt(l)+'"]',u=n;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":u=Ma(l)}if(!At.has(u)&&(l=_({rel:"modulepreload",href:l},t),At.set(u,l),e.querySelector(n)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(e.querySelector(jn(u)))return}a=e.createElement("link"),Xl(a,"link",l),ql(a),e.head.appendChild(a)}}}function uh(l,t,e){It.S(l,t,e);var a=Ea;if(a&&l){var n=We(a).hoistableStyles,u=_a(l);t=t||"default";var i=n.get(u);if(!i){var c={loading:0,preload:null};if(i=a.querySelector(Nn(u)))c.loading=5;else{l=_({rel:"stylesheet",href:l,"data-precedence":t},e),(e=At.get(u))&&cf(l,e);var o=i=a.createElement("link");ql(o),Xl(o,"link",l),o._p=new Promise(function(v,x){o.onload=v,o.onerror=x}),o.addEventListener("load",function(){c.loading|=1}),o.addEventListener("error",function(){c.loading|=2}),c.loading|=4,qu(i,t,a)}i={type:"stylesheet",instance:i,count:1,state:c},n.set(u,i)}}}function ih(l,t){It.X(l,t);var e=Ea;if(e&&l){var a=We(e).hoistableScripts,n=Ma(l),u=a.get(n);u||(u=e.querySelector(jn(n)),u||(l=_({src:l,async:!0},t),(t=At.get(n))&&ff(l,t),u=e.createElement("script"),ql(u),Xl(u,"link",l),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function ch(l,t){It.M(l,t);var e=Ea;if(e&&l){var a=We(e).hoistableScripts,n=Ma(l),u=a.get(n);u||(u=e.querySelector(jn(n)),u||(l=_({src:l,async:!0,type:"module"},t),(t=At.get(n))&&ff(l,t),u=e.createElement("script"),ql(u),Xl(u,"link",l),e.head.appendChild(u)),u={type:"script",instance:u,count:1,state:null},a.set(n,u))}}function fd(l,t,e,a){var n=(n=I.current)?Bu(n):null;if(!n)throw Error(s(446));switch(l){case"meta":case"title":return null;case"style":return typeof e.precedence=="string"&&typeof e.href=="string"?(t=_a(e.href),e=We(n).hoistableStyles,a=e.get(t),a||(a={type:"style",instance:null,count:0,state:null},e.set(t,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(e.rel==="stylesheet"&&typeof e.href=="string"&&typeof e.precedence=="string"){l=_a(e.href);var u=We(n).hoistableStyles,i=u.get(l);if(i||(n=n.ownerDocument||n,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},u.set(l,i),(u=n.querySelector(Nn(l)))&&!u._p&&(i.instance=u,i.state.loading=5),At.has(l)||(e={rel:"preload",as:"style",href:e.href,crossOrigin:e.crossOrigin,integrity:e.integrity,media:e.media,hrefLang:e.hrefLang,referrerPolicy:e.referrerPolicy},At.set(l,e),u||fh(n,l,e,i.state))),t&&a===null)throw Error(s(528,""));return i}if(t&&a!==null)throw Error(s(529,""));return null;case"script":return t=e.async,e=e.src,typeof e=="string"&&t&&typeof t!="function"&&typeof t!="symbol"?(t=Ma(e),e=We(n).hoistableScripts,a=e.get(t),a||(a={type:"script",instance:null,count:0,state:null},e.set(t,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(s(444,l))}}function _a(l){return'href="'+bt(l)+'"'}function Nn(l){return'link[rel="stylesheet"]['+l+"]"}function sd(l){return _({},l,{"data-precedence":l.precedence,precedence:null})}function fh(l,t,e,a){l.querySelector('link[rel="preload"][as="style"]['+t+"]")?a.loading=1:(t=l.createElement("link"),a.preload=t,t.addEventListener("load",function(){return a.loading|=1}),t.addEventListener("error",function(){return a.loading|=2}),Xl(t,"link",e),ql(t),l.head.appendChild(t))}function Ma(l){return'[src="'+bt(l)+'"]'}function jn(l){return"script[async]"+l}function od(l,t,e){if(t.count++,t.instance===null)switch(t.type){case"style":var a=l.querySelector('style[data-href~="'+bt(e.href)+'"]');if(a)return t.instance=a,ql(a),a;var n=_({},e,{"data-href":e.href,"data-precedence":e.precedence,href:null,precedence:null});return a=(l.ownerDocument||l).createElement("style"),ql(a),Xl(a,"style",n),qu(a,e.precedence,l),t.instance=a;case"stylesheet":n=_a(e.href);var u=l.querySelector(Nn(n));if(u)return t.state.loading|=4,t.instance=u,ql(u),u;a=sd(e),(n=At.get(n))&&cf(a,n),u=(l.ownerDocument||l).createElement("link"),ql(u);var i=u;return i._p=new Promise(function(c,o){i.onload=c,i.onerror=o}),Xl(u,"link",a),t.state.loading|=4,qu(u,e.precedence,l),t.instance=u;case"script":return u=Ma(e.src),(n=l.querySelector(jn(u)))?(t.instance=n,ql(n),n):(a=e,(n=At.get(u))&&(a=_({},e),ff(a,n)),l=l.ownerDocument||l,n=l.createElement("script"),ql(n),Xl(n,"link",a),l.head.appendChild(n),t.instance=n);case"void":return null;default:throw Error(s(443,t.type))}else t.type==="stylesheet"&&(t.state.loading&4)===0&&(a=t.instance,t.state.loading|=4,qu(a,e.precedence,l));return t.instance}function qu(l,t,e){for(var a=e.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),n=a.length?a[a.length-1]:null,u=n,i=0;i title"):null)}function sh(l,t,e){if(e===1||t.itemProp!=null)return!1;switch(l){case"meta":case"title":return!0;case"style":if(typeof t.precedence!="string"||typeof t.href!="string"||t.href==="")break;return!0;case"link":if(typeof t.rel!="string"||typeof t.href!="string"||t.href===""||t.onLoad||t.onError)break;switch(t.rel){case"stylesheet":return l=t.disabled,typeof t.precedence=="string"&&l==null;default:return!0}case"script":if(t.async&&typeof t.async!="function"&&typeof t.async!="symbol"&&!t.onLoad&&!t.onError&&t.src&&typeof t.src=="string")return!0}return!1}function md(l){return!(l.type==="stylesheet"&&(l.state.loading&3)===0)}function oh(l,t,e,a){if(e.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(e.state.loading&4)===0){if(e.instance===null){var n=_a(a.href),u=t.querySelector(Nn(n));if(u){t=u._p,t!==null&&typeof t=="object"&&typeof t.then=="function"&&(l.count++,l=Lu.bind(l),t.then(l,l)),e.state.loading|=4,e.instance=u,ql(u);return}u=t.ownerDocument||t,a=sd(a),(n=At.get(n))&&cf(a,n),u=u.createElement("link"),ql(u);var i=u;i._p=new Promise(function(c,o){i.onload=c,i.onerror=o}),Xl(u,"link",a),e.instance=u}l.stylesheets===null&&(l.stylesheets=new Map),l.stylesheets.set(e,t),(t=e.state.preload)&&(e.state.loading&3)===0&&(l.count++,e=Lu.bind(l),t.addEventListener("load",e),t.addEventListener("error",e))}}var sf=0;function rh(l,t){return l.stylesheets&&l.count===0&&Gu(l,l.stylesheets),0sf?50:800)+t);return l.unsuspend=e,function(){l.unsuspend=null,clearTimeout(a),clearTimeout(n)}}:null}function Lu(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Gu(this,this.stylesheets);else if(this.unsuspend){var l=this.unsuspend;this.unsuspend=null,l()}}}var wu=null;function Gu(l,t){l.stylesheets=null,l.unsuspend!==null&&(l.count++,wu=new Map,t.forEach(dh,l),wu=null,Lu.call(l))}function dh(l,t){if(!(t.state.loading&4)){var e=wu.get(l);if(e)var a=e.get(null);else{e=new Map,wu.set(l,e);for(var n=l.querySelectorAll("link[data-precedence],style[data-precedence]"),u=0;u"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(r)}catch(E){console.error(E)}}return r(),bf.exports=_h(),bf.exports}var Dh=Mh();const Oh={id:{nav:{tentangKami:"Tentang Kami",program:"Program",sdm:"SDM",fasilitas:"Fasilitas",karyaAgenda:"Karya & Agenda",kontak:"Kontak",satuUntan:"SATU UNTAN"},hero:{badge:"MAHASISWA & PRESTASI",title:"Sorotan dan Prestasi Karya Mahasiswa",desc:"Galeri pencapaian, penghargaan, dan portofolio inovasi teknologi yang dikembangkan oleh mahasiswa Program Studi Informatika Universitas Tanjungpura."},about:{title:"Tentang Program Studi",desc:"Program Studi Informatika Universitas Tanjungpura adalah program yang berfokus pada pengembangan ilmu komputer, rekayasa perangkat lunak, dan inovasi teknologi informasi. Mahasiswa kami aktif berprestasi di tingkat regional, nasional, maupun internasional, membawa nama baik Kalimantan Barat ke panggung dunia.",tag:"Program Studi"},stats:{totalPrestasi:"Total Prestasi",totalProyek:"Total Proyek Mahasiswa"},achievement:{sectionTitle:"Prestasi Mahasiswa",sectionDesc:"Daftar pencapaian dan penghargaan yang diraih oleh mahasiswa Informatika UNTAN di berbagai kompetisi.",filterTitle:"Filter Prestasi",searchPlaceholder:"Cari nama, prestasi, bidang...",allLevel:"Semua Tingkat",allField:"Semua Bidang",allYear:"Semua Tahun",resetFilter:"Reset Filter",noData:"Tidak ada prestasi yang sesuai filter.",noDataSub:"Coba ubah pilihan filter atau kata kunci pencarian.",showing:"Menampilkan",matching:"prestasi yang sesuai filter",loadMore:"Muat Lebih Banyak",showLess:"Tampilkan Lebih Sedikit",allShown:"prestasi telah ditampilkan.",readMore:"Baca Selengkapnya"},project:{sectionTitle:"Top Projects & Portofolio",sectionDesc:"Jelajahi inovasi digital dan aplikasi nyata yang dikembangkan oleh mahasiswa Informatika UNTAN.",scrollHint:"← Geser untuk melihat lebih banyak →",explore:"Telusuri Lanjut",visitLink:"Kunjungi Proyek",noLink:"Link tidak tersedia",by:"oleh",readMore:"Baca Selengkapnya",filterTitle:"Filter Portofolio",searchPlaceholder:"Cari judul, mahasiswa, bidang...",allField:"Semua Bidang",allYear:"Semua Tahun",resetFilter:"Reset Filter",noData:"Tidak ada proyek yang sesuai filter.",noDataSub:"Coba ubah pilihan filter atau kata kunci pencarian.",showing:"Menampilkan",matching:"proyek yang sesuai filter",loadMore:"Muat Lebih Banyak",showLess:"Tampilkan Lebih Sedikit",allShown:"proyek telah ditampilkan."},modal:{close:"Tutup",nim:"NIM",angkatan:"Angkatan",tahun:"Tahun",tingkat:"Tingkat",bidang:"Bidang",kompetisi:"Kompetisi",peringkat:"Peringkat",tim:"Tim / Nama",deskripsi:"Deskripsi",mahasiswa:"Mahasiswa",link:"Link Proyek",namaProyek:"Nama Proyek"},cta:{badge:"HUBUNGI KAMI",title:"Ingin Tahu Lebih Lanjut?",desc:"Tertarik bergabung dengan Program Studi Informatika UNTAN, mendaftarkan prestasi mahasiswa, atau menjalin kerja sama? Hubungi kami sekarang.",waButton:"Chat via WhatsApp",webButton:"Kunjungi Website Kami",contactTitle:"Informasi Kontak",emailLabel:"Email",email:"informatika@untan.ac.id",phone:"+62 561 577963",address:"Jl. Prof. Dr. H. Hadari Nawawi, Bansir Laut, Pontianak Tenggara, 78124"},footer:{desc:`Program Studi Informatika, Universitas Tanjungpura. -Jl. Prof. Dr. H. Hadari Nawawi, Bansir Laut, Kec. Pontianak Tenggara, Kota Pontianak, Kalimantan Barat 78124`,kategori:"Kategori",tautan:"Tautan Penting",berita:"Berita & Informasi",pengumuman:"Pengumuman Akademik",prestasi:"Prestasi Mahasiswa",siakad:"SIAKAD UNTAN",elearning:"E-Learning UNTAN",privacy:"Kebijakan Privasi",terms:"Syarat & Ketentuan",rights:"All rights reserved."}},en:{nav:{tentangKami:"About Us",program:"Programs",sdm:"Human Resources",fasilitas:"Facilities",karyaAgenda:"Works & Events",kontak:"Contact",satuUntan:"SATU UNTAN"},hero:{badge:"STUDENTS & ACHIEVEMENTS",title:"Student Spotlights & Achievements",desc:"Gallery of accomplishments, awards, and technology innovation portfolios developed by Informatics students of Tanjungpura University."},about:{title:"About the Study Program",desc:"The Informatics Study Program at Tanjungpura University focuses on computer science, software engineering, and information technology innovation. Our students actively excel at regional, national, and international levels, representing West Kalimantan on the world stage.",tag:"Study Program"},stats:{totalPrestasi:"Total Achievements",totalProyek:"Total Student Projects"},achievement:{sectionTitle:"Student Achievements",sectionDesc:"List of awards and accomplishments by Informatics UNTAN students in various competitions.",filterTitle:"Filter Achievements",searchPlaceholder:"Search name, achievement, field...",allLevel:"All Levels",allField:"All Fields",allYear:"All Years",resetFilter:"Reset Filter",noData:"No achievements match the current filter.",noDataSub:"Try adjusting your filter or search keyword.",showing:"Showing",matching:"matching achievements",loadMore:"Load More",showLess:"Show Less",allShown:"achievements displayed.",readMore:"Read More"},project:{sectionTitle:"Top Projects & Portfolios",sectionDesc:"Explore digital innovations and real-world applications developed by Informatics UNTAN students.",scrollHint:"← Swipe to see more →",explore:"Explore More",visitLink:"Visit Project",noLink:"Link unavailable",by:"by",readMore:"Read More",filterTitle:"Filter Portfolios",searchPlaceholder:"Search title, student, field...",allField:"All Fields",allYear:"All Years",resetFilter:"Reset Filter",noData:"No projects match the current filter.",noDataSub:"Try adjusting your filter or search keyword.",showing:"Showing",matching:"matching projects",loadMore:"Load More",showLess:"Show Less",allShown:"projects displayed."},modal:{close:"Close",nim:"Student ID",angkatan:"Batch",tahun:"Year",tingkat:"Level",bidang:"Field",kompetisi:"Competition",peringkat:"Rank",tim:"Team / Name",deskripsi:"Description",mahasiswa:"Student",link:"Project Link",namaProyek:"Project Name"},cta:{badge:"CONTACT US",title:"Want to Know More?",desc:"Interested in joining the Informatics Study Program at UNTAN, registering a student achievement, or establishing a partnership? Contact us now.",waButton:"Chat via WhatsApp",webButton:"Visit Our Website",contactTitle:"Contact Information",emailLabel:"Email",address:"Jl. Prof. Dr. H. Hadari Nawawi, Bansir Laut, Pontianak Tenggara, 78124"},footer:{desc:`Informatics Study Program, Tanjungpura University. -Jl. Prof. Dr. H. Hadari Nawawi, Bansir Laut, Kec. Pontianak Tenggara, Pontianak City, West Kalimantan 78124`,kategori:"Categories",tautan:"Important Links",berita:"News & Information",pengumuman:"Academic Announcements",prestasi:"Student Achievements",siakad:"SIAKAD UNTAN",elearning:"E-Learning UNTAN",privacy:"Privacy Policy",terms:"Terms & Conditions",rights:"All rights reserved."}}},Uh="if_untan_lang";function Ch(){const r=localStorage.getItem(Uh);return r==="id"||r==="en"?r:(navigator.language||"id").toLowerCase().startsWith("en")?"en":"id"}const Gd=F.createContext(null);function Hh({children:r}){const[E,A]=F.useState(Ch);F.useEffect(()=>{const U=H=>{const Y=H.detail;((Y==null?void 0:Y.lang)==="en"||(Y==null?void 0:Y.lang)==="id")&&A(Y.lang)};return document.addEventListener("languageChanged",U),()=>document.removeEventListener("languageChanged",U)},[]);const s=()=>A(U=>U==="id"?"en":"id");return f.jsx(Gd.Provider,{value:{lang:E,t:Oh[E],toggleLang:s},children:r})}function Ee(){const r=F.useContext(Gd);if(!r)throw new Error("useLang must be used within LanguageProvider");return r}const Ua="https://api.ifuntanhub.dev",Qd={1:"Kecerdasan Buatan",2:"Cyber Security",3:"Data",4:"Software Engineering",5:"Competitive Programming",6:"IoT",7:"Smart City",8:"Web3",9:"Karya Tulis Ilmiah",10:"Robotik"};function Rh(r){const E=r.match(/(Juara\s+\d+|Juara\s+Harapan\s*\d*|Top\s+\d+|Finalis|Peringkat\s+\d+|Medali\s+\w+)/i);return E?E[0]:"Pemenang"}function Bh(r,E){const A=`${r} ${E}`.toLowerCase();return A.includes("internasional")||A.includes("international")||A.includes("global")||A.includes("world")||A.includes("asean")||A.includes("unesco")?"Internasional":A.includes("regional")||A.includes("kalbar")||A.includes("kalimantan")||A.includes("provinsi")||A.includes("kota")||A.includes("kabupaten")||A.includes("lokal")?"Regional":"Nasional"}function qh(r){return r.replace(/^(Juara\s+\d+|Juara\s+Harapan\s*\d*|Top\s+\d+|Finalis|Peringkat\s+\d+|Medali\s+\w+)\s+(di\s+|pada\s+|dalam\s+)?/i,"").trim()}async function Yh(){const r=await fetch(`${Ua}/items/prestasi?fields=*.*`);if(!r.ok)throw new Error(`Failed to fetch achievements: ${r.statusText}`);return((await r.json()).data||[]).filter(s=>s.status==="published").map(s=>{const U=String(s.id),H=s.nama_prestasi||"Untitled Achievement";let Y="Umum";s.bidang_id&&(typeof s.bidang_id=="object"&&s.bidang_id.nama_bidang?Y=s.bidang_id.nama_bidang:Y=Qd[s.bidang_id]||"Umum");const $=Rh(H),M=Bh(H,Y),p=qh(H),q=parseInt(s.tahun)||new Date().getFullYear(),_=Array.isArray(s.anggota)?s.anggota:[],X=s.nama_tim||(_.length>0?_[0].nama:"Mahasiswa");let Z=`https://picsum.photos/seed/prestasi-${U}/800/600`;if(s.galeri&&Array.isArray(s.galeri)&&s.galeri.length>0){const Sl=s.galeri[0],_l=typeof Sl=="string"?Sl:Sl.directus_files_id||Sl.id;_l&&(Z=`${Ua}/assets/${_l}`)}else s.foto&&(Z=`${Ua}/assets/${s.foto}`);const tl=(s.nama_tim||s.nama_prestasi||"IF").substring(0,2).toUpperCase(),Nl=s.deskripsi||`${X} berhasil meraih prestasi luar biasa sebagai ${$} dalam ajang ${p} tahun ${q} pada bidang ${Y.toLowerCase()}.`;return{id:U,title:H,category:Y,competition:p,rank:$,year:q,level:M,description:Nl,team:X,nim:s.nim||void 0,generation:s.angkatan?`Angkatan ${s.angkatan}`:"Informatika",image:Z,avatar:tl,members:_.map(Sl=>({nama:Sl.nama,angkatan:Sl.angkatan?parseInt(Sl.angkatan):void 0}))}})}async function Lh(){const r=await fetch(`${Ua}/items/portfolio?fields=*,bidang.bidang_id.nama_bidang,galeri.*`);if(!r.ok)throw new Error(`Failed to fetch portfolio: ${r.statusText}`);return((await r.json()).data||[]).filter(s=>s.status==="published").map(s=>{const U=String(s.id),H=s.nama_proyek||"Untitled Project",Y=Array.isArray(s.anggota)?s.anggota:[],$=s.nama_mahasiswa||(Y.length>0?Y[0].nama:"Mahasiswa"),M=parseInt(s.tahun)||new Date().getFullYear(),p=s.deskripsi||"Tidak ada deskripsi.";let q=[];s.bidang&&Array.isArray(s.bidang)&&(q=s.bidang.map(Z=>Z.bidang_id&&typeof Z.bidang_id=="object"&&Z.bidang_id.nama_bidang?Z.bidang_id.nama_bidang:typeof Z.bidang_id=="number"&&Qd[Z.bidang_id]||"Umum").filter(Boolean)),q.length===0&&(q=["Umum"]);let _=s.url||void 0;_&&!/^https?:\/\//i.test(_)&&(_=`https://${_}`);let X=`https://picsum.photos/seed/project-${U}/800/600`;if(s.galeri&&Array.isArray(s.galeri)&&s.galeri.length>0){const Z=s.galeri[0],tl=typeof Z=="string"?Z:Z.directus_files_id||Z.id;tl&&(X=`${Ua}/assets/${tl}`)}else s.foto&&(X=`${Ua}/assets/${s.foto}`);return{id:U,title:H,studentName:$,nim:s.nim||void 0,year:M,category:q,description:p,image:X,link:_,catatan:s.catatan||void 0,members:Y.map(Z=>({nama:Z.nama,nim:Z.nim||void 0}))}})}const Xd=F.createContext(void 0);function wh({children:r}){const[E,A]=F.useState([]),[s,U]=F.useState([]),[H,Y]=F.useState(!0),[$,M]=F.useState(null),p=async()=>{Y(!0),M(null);try{const q=await Promise.allSettled([Yh(),Lh()]),_=q[0],X=q[1];let Z=!1,tl=[];_.status==="fulfilled"?A(_.value):(console.error("Failed to fetch achievements:",_.reason),tl.push("Gagal memuat data prestasi."),Z=!0),X.status==="fulfilled"?U(X.value):(console.error("Failed to fetch projects:",X.reason),tl.push("Gagal memuat data portofolio."),Z=!0),Z&&M(tl.join(" "))}catch(q){console.error("Unexpected error loading API data:",q),M("Terjadi kesalahan yang tidak terduga saat memuat data.")}finally{Y(!1)}};return F.useEffect(()=>{p()},[]),f.jsx(Xd.Provider,{value:{achievements:E,projects:s,loading:H,error:$,refetch:p},children:r})}function Tf(){const r=F.useContext(Xd);if(r===void 0)throw new Error("useData must be used within a DataProvider");return r}function Gh(){const{t:r}=Ee();return f.jsxs("div",{id:"hero",className:"acaab-full-bleed bg-untan-navy text-white pt-6 md:pt-8 lg:pt-10 mb-8 border-t border-white/10 relative",children:[f.jsx("div",{className:"container mx-auto px-4 lg:px-8 relative z-10",children:f.jsxs("div",{className:"grid lg:grid-cols-2 gap-6 lg:gap-10 items-center",children:[f.jsxs("div",{className:"max-w-3xl py-6 md:py-8 lg:py-10",children:[f.jsx("span",{className:"inline-block bg-untan-yellow text-slate-900 text-[10px] md:text-xs font-bold uppercase tracking-widest px-2 py-0.5 mb-3",children:r.hero.badge}),f.jsx("h1",{className:"text-2xl md:text-3xl lg:text-[36px] font-bold font-serif leading-tight md:leading-snug tracking-tight mb-3",children:r.hero.title}),f.jsx("p",{className:"text-slate-300 max-w-2xl text-sm md:text-base leading-relaxed",children:r.hero.desc})]}),f.jsxs("div",{className:"relative flex justify-center lg:justify-end items-end",children:[f.jsx("div",{className:"absolute bottom-0 w-[300px] h-[300px] bg-cyan-300/10 rounded-full blur-3xl"}),f.jsxs("div",{className:"relative",children:[f.jsx("img",{src:new URL(""+new URL("acaab-hero.png",import.meta.url).href,import.meta.url).href,alt:"Mahasiswa Informatika UNTAN",className:`\r - relative z-10\r - w-full\r - max-w-[300px]\r - md:max-w-[420px]\r - lg:max-w-[450px]\r - h-auto\r - object-contain\r - opacity-95\r - drop-shadow-[0_15px_35px_rgba(0,0,0,0.25)]\r - hover:scale-[1.02]\r - transition-all\r - duration-500\r - `}),f.jsx("div",{className:"absolute bottom-0 left-0 w-full h-40 bg-gradient-to-t from-untan-navy to-transparent z-20"}),f.jsx("div",{className:"absolute top-0 left-0 h-full w-20 bg-gradient-to-r from-untan-navy to-transparent z-20"})]})]})]})}),f.jsx("div",{className:"absolute top-0 right-0 -mr-20 -mt-20 w-80 h-80 bg-untan-yellow/10 rounded-full blur-3xl pointer-events-none"})]})}function Zd(r,E=1600){const[A,s]=F.useState(0),U=F.useRef(null),H=F.useRef(!1);return F.useEffect(()=>{H.current=!1;let Y,$;return $=new IntersectionObserver(([M])=>{if(M.isIntersecting&&!H.current){H.current=!0;let p=null;const q=_=>{p||(p=_);const X=Math.min((_-p)/E,1),Z=1-Math.pow(1-X,4);s(Math.round(r*Z)),X<1?Y=requestAnimationFrame(q):s(r)};Y=requestAnimationFrame(q)}},{threshold:.4}),U.current&&$.observe(U.current),()=>{$.disconnect(),Y&&cancelAnimationFrame(Y)}},[r,E]),{count:A,elRef:U}}function qd({value:r,label:E}){const{count:A,elRef:s}=Zd(r);return f.jsxs("div",{ref:s,className:"flex flex-col items-center justify-center gap-1 md:gap-1.5 px-2 h-full",children:[f.jsx("div",{className:"text-[3.5rem] md:text-[4.5rem] lg:text-[5rem] font-black font-display text-primary-navy leading-none tabular-nums",children:A}),f.jsx("div",{className:"text-[10px] md:text-[11px] lg:text-[13px] leading-none font-extrabold uppercase tracking-[0.1em] text-primary-navy text-center",children:E})]})}function Nf({label:r,value:E,delay:A=0}){const{count:s,elRef:U}=Zd(E,1600+A);return f.jsxs("div",{ref:U,className:"flex items-center gap-2 md:gap-3 lg:gap-4",children:[f.jsx("span",{className:"text-[10px] md:text-[11px] lg:text-[12px] leading-none font-extrabold uppercase tracking-[0.1em] text-primary-navy text-right",children:r}),f.jsx("span",{className:"text-lg md:text-xl lg:text-2xl leading-none font-black font-display text-primary-navy tabular-nums text-right w-[1rem] md:w-[1.25rem] lg:w-[1.5rem]",children:s})]})}function Yd(){return f.jsx("div",{className:"hidden md:flex items-center justify-center self-stretch",children:f.jsx("div",{className:"w-px h-full bg-primary-navy/10 rounded-full"})})}function Ld(){return f.jsx("div",{className:"block md:hidden h-px w-2/3 mx-auto bg-primary-navy/10 my-2 rounded-full"})}function Qh(){const{t:r,lang:E}=Ee(),{achievements:A,projects:s}=Tf(),U=A.length,H=s.length,Y=A.filter(_=>_.level==="Internasional").length,$=A.filter(_=>_.level==="Nasional").length,M=A.filter(_=>_.level==="Regional").length,p=new Date().toLocaleDateString(E==="id"?"id-ID":"en-US",{day:"numeric",month:"long",year:"numeric"}),q=E==="id"?`Data Terkumpul Per ${p}`:`Data Collected As Of ${p}`;return f.jsxs("div",{id:"tentang",children:[f.jsx("section",{className:"relative z-10 mb-2 rounded-xl overflow-hidden shadow-[0_10px_30px_-10px_rgba(253,184,19,0.4)]",children:f.jsxs("div",{className:"bg-[#FDB813] relative",children:[f.jsx("div",{className:"absolute inset-0 bg-white/5 mix-blend-overlay pointer-events-none"}),f.jsxs("div",{className:"relative grid grid-cols-1 stats-grid items-stretch px-4 md:px-6 lg:px-8 py-5 md:py-6 lg:py-7",children:[f.jsx("div",{className:"flex items-center justify-center",children:f.jsx(qd,{value:U,label:r.stats.totalPrestasi})}),f.jsx(Yd,{}),f.jsx(Ld,{}),f.jsx("div",{className:"flex items-center justify-center",children:f.jsx(qd,{value:H,label:r.stats.totalProyek})}),f.jsx(Yd,{}),f.jsx(Ld,{}),f.jsx("div",{className:"flex justify-center items-center px-4 md:px-0",children:f.jsxs("div",{className:"flex flex-col justify-center items-end gap-2 md:gap-3 lg:gap-3",children:[f.jsx(Nf,{label:"Internasional",value:Y,delay:0}),f.jsx(Nf,{label:"Nasional",value:$,delay:150}),f.jsx(Nf,{label:"Regional",value:M,delay:300})]})})]})]})}),f.jsx("p",{className:"text-[9px] md:text-[10px] font-semibold text-slate-400 tracking-wide mb-16 text-right pr-1",children:q})]})}/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Xh=r=>r.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Zh=r=>r.replace(/^([A-Z])|[\s-_]+(\w)/g,(E,A,s)=>s?s.toUpperCase():A.toLowerCase()),wd=r=>{const E=Zh(r);return E.charAt(0).toUpperCase()+E.slice(1)},Vd=(...r)=>r.filter((E,A,s)=>!!E&&E.trim()!==""&&s.indexOf(E)===A).join(" ").trim(),Vh=r=>{for(const E in r)if(E.startsWith("aria-")||E==="role"||E==="title")return!0};/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */var Kh={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const kh=F.forwardRef(({color:r="currentColor",size:E=24,strokeWidth:A=2,absoluteStrokeWidth:s,className:U="",children:H,iconNode:Y,...$},M)=>F.createElement("svg",{ref:M,...Kh,width:E,height:E,stroke:r,strokeWidth:s?Number(A)*24/Number(E):A,className:Vd("lucide",U),...!H&&!Vh($)&&{"aria-hidden":"true"},...$},[...Y.map(([p,q])=>F.createElement(p,q)),...Array.isArray(H)?H:[H]]));/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Zl=(r,E)=>{const A=F.forwardRef(({className:s,...U},H)=>F.createElement(kh,{ref:H,iconNode:E,className:Vd(`lucide-${Xh(wd(r))}`,`lucide-${r}`,s),...U}));return A.displayName=wd(r),A};/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Jh=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],$h=Zl("arrow-right",Jh);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Wh=[["path",{d:"m15.477 12.89 1.515 8.526a.5.5 0 0 1-.81.47l-3.58-2.687a1 1 0 0 0-1.197 0l-3.586 2.686a.5.5 0 0 1-.81-.469l1.514-8.526",key:"1yiouv"}],["circle",{cx:"12",cy:"8",r:"6",key:"1vp47v"}]],Fh=Zl("award",Wh);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ih=[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]],Kd=Zl("book-open",Ih);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Ph=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]],Dn=Zl("calendar",Ph);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ly=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],Pt=Zl("chevron-down",ly);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ty=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],ey=Zl("chevron-left",ty);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ay=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],ny=Zl("chevron-right",ay);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const uy=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],kd=Zl("external-link",uy);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const iy=[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]],cy=Zl("file-text",iy);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const fy=[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]],Jd=Zl("funnel",fy);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const sy=[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}]],oy=Zl("message-circle",sy);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const ry=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],$d=Zl("search",ry);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const dy=[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]],Wu=Zl("tag",dy);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const my=[["path",{d:"M10 14.66v1.626a2 2 0 0 1-.976 1.696A5 5 0 0 0 7 21.978",key:"1n3hpd"}],["path",{d:"M14 14.66v1.626a2 2 0 0 0 .976 1.696A5 5 0 0 1 17 21.978",key:"rfe1zi"}],["path",{d:"M18 9h1.5a1 1 0 0 0 0-5H18",key:"7xy6bh"}],["path",{d:"M4 22h16",key:"57wxv0"}],["path",{d:"M6 9a6 6 0 0 0 12 0V3a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1z",key:"1mhfuq"}],["path",{d:"M6 9H4.5a1 1 0 0 1 0-5H6",key:"tex48p"}]],Wd=Zl("trophy",my);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const hy=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],yy=Zl("user",hy);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const vy=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],Fd=Zl("users",vy);/** - * @license lucide-react v0.546.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const gy=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],Ca=Zl("x",gy);function by({achievement:r,onReadMore:E}){const{t:A}=Ee();return f.jsxs("article",{className:"bg-white rounded-lg overflow-hidden group hover:-translate-y-1 transition-all duration-300 shadow-md hover:shadow-xl border border-slate-200 flex flex-col h-full relative",children:[f.jsx("div",{className:"absolute top-0 left-0 w-full h-1 bg-primary-navy z-10 group-hover:bg-primary-gold transition-colors"}),f.jsxs("div",{className:"relative h-56 overflow-hidden bg-slate-100",children:[f.jsx("img",{src:r.image,alt:r.title,className:"w-full h-full object-cover group-hover:scale-105 transition-transform duration-500",referrerPolicy:"no-referrer",onError:s=>{s.target.src="https://placehold.co/800x600/003150/FDB813?text=Informatika+UNTAN"}}),f.jsxs("div",{className:"absolute top-3 left-3 bg-white/95 backdrop-blur text-primary-navy font-bold px-3 py-1 rounded shadow-sm flex items-center gap-1.5 text-xs",children:[f.jsx(Wd,{size:14,className:"text-primary-gold"}),r.rank]})]}),f.jsxs("div",{className:"p-6 flex flex-col flex-grow",children:[f.jsxs("div",{className:"flex items-center gap-3 mb-3",children:[f.jsx("span",{className:"text-untan-blue text-xs font-bold uppercase tracking-wider",children:r.category}),f.jsxs("span",{className:"text-slate-400 text-xs font-medium flex items-center gap-1 border-l border-slate-300 pl-3",children:[f.jsx(Dn,{size:12}),r.year]})]}),f.jsx("h3",{className:"text-xl font-bold font-display text-primary-navy mb-3 leading-snug group-hover:text-untan-blue transition-colors",children:r.title}),f.jsx("p",{className:"text-slate-600 text-sm leading-relaxed mb-6 line-clamp-3",children:r.description}),f.jsxs("div",{className:"mt-auto border-t border-slate-100 pt-4",children:[f.jsxs("div",{className:"flex justify-between items-center mb-4",children:[f.jsxs("div",{className:"flex items-center gap-3",children:[f.jsx("div",{className:"w-8 h-8 rounded bg-primary-navy/5 flex items-center justify-center text-primary-navy font-bold text-xs ring-1 ring-primary-navy/10",children:r.avatar}),f.jsxs("div",{children:[f.jsx("span",{className:"font-bold text-slate-800 block text-sm",children:r.team}),f.jsx("span",{className:"text-slate-500 block text-xs",children:r.generation})]})]}),f.jsx("span",{className:"bg-slate-100 text-slate-600 text-[10px] px-2 py-1 rounded font-bold uppercase tracking-wide",children:r.level})]}),f.jsx("button",{onClick:()=>E(r),className:"w-full py-2.5 rounded bg-primary-navy/5 text-primary-navy font-bold hover:bg-primary-navy hover:text-white transition-all duration-300 text-sm min-h-[44px]",children:A.achievement.readMore})]})]})]})}function Oa({icon:r,label:E,value:A}){return f.jsxs("div",{className:"flex gap-2.5 items-start",children:[f.jsx("span",{className:"text-primary-gold mt-0.5 shrink-0",children:r}),f.jsxs("div",{children:[f.jsx("p",{className:"text-[10px] font-bold uppercase tracking-wider text-slate-400 leading-none mb-1",children:E}),f.jsx("p",{className:"text-sm font-semibold text-slate-800 leading-snug",children:A})]})]})}function py({achievement:r,onClose:E}){const{t:A}=Ee();return r?f.jsx("div",{className:"fixed inset-0 z-[300] flex items-center justify-center p-4 bg-black/60 backdrop-blur-sm",onClick:E,"aria-modal":"true",role:"dialog","aria-label":r.title,children:f.jsxs("div",{className:"bg-white rounded-xl max-w-2xl w-full max-h-[90vh] overflow-y-auto shadow-2xl animate-fade-in",onClick:s=>s.stopPropagation(),children:[f.jsxs("div",{className:"relative h-56 overflow-hidden rounded-t-xl bg-slate-200 shrink-0",children:[f.jsx("img",{src:r.image,alt:r.title,className:"w-full h-full object-cover",referrerPolicy:"no-referrer"}),f.jsx("div",{className:"absolute inset-0 bg-gradient-to-t from-black/80 via-black/20 to-transparent"}),f.jsx("button",{onClick:E,"aria-label":A.modal.close,className:"absolute top-3 right-3 w-9 h-9 bg-white/90 backdrop-blur rounded-full flex items-center justify-center hover:bg-white transition-colors shadow-md",children:f.jsx(Ca,{size:18,className:"text-slate-700"})}),f.jsxs("div",{className:"absolute bottom-4 left-4 flex gap-2",children:[f.jsxs("span",{className:"bg-primary-gold text-slate-900 text-xs font-bold px-3 py-1.5 rounded flex items-center gap-1.5",children:[f.jsx(Wd,{size:12}),r.rank]}),f.jsx("span",{className:"bg-white/20 backdrop-blur text-white text-xs font-bold px-3 py-1.5 rounded uppercase tracking-wide",children:r.level})]})]}),f.jsxs("div",{className:"p-6",children:[f.jsx("div",{className:"mb-1",children:f.jsx("span",{className:"text-primary-untan-blue text-xs font-bold uppercase tracking-wider",children:r.category})}),f.jsx("h2",{className:"text-xl font-bold text-primary-navy leading-snug mb-5",children:r.title}),f.jsxs("div",{className:"grid grid-cols-2 gap-4 p-4 bg-slate-50 rounded-lg mb-5",children:[f.jsx(Oa,{icon:f.jsx(Fd,{size:14}),label:A.modal.tim,value:r.team}),r.nim&&f.jsx(Oa,{icon:f.jsx(Kd,{size:14}),label:A.modal.nim,value:r.nim}),f.jsx(Oa,{icon:f.jsx(Dn,{size:14}),label:A.modal.angkatan,value:r.generation}),f.jsx(Oa,{icon:f.jsx(Dn,{size:14}),label:A.modal.tahun,value:String(r.year)}),f.jsx(Oa,{icon:f.jsx(Fh,{size:14}),label:A.modal.kompetisi,value:r.competition}),f.jsx(Oa,{icon:f.jsx(Wu,{size:14}),label:A.modal.bidang,value:r.category})]}),r.members&&r.members.length>0&&f.jsxs("div",{className:"border-t border-slate-100 pt-4 mb-4",children:[f.jsx("p",{className:"text-[10px] font-bold uppercase tracking-wider text-slate-400 mb-2",children:"Anggota Tim"}),f.jsx("ul",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2",children:r.members.map((s,U)=>f.jsxs("li",{className:"flex items-center gap-2 bg-slate-50 px-3 py-2 rounded-md",children:[f.jsx("span",{className:"w-6 h-6 rounded-full bg-primary-gold/20 text-primary-gold flex items-center justify-center text-xs font-bold shrink-0",children:s.nama.charAt(0).toUpperCase()}),f.jsxs("div",{className:"flex flex-col",children:[f.jsx("span",{className:"text-sm font-semibold text-slate-700 leading-none",children:s.nama}),s.angkatan&&f.jsxs("span",{className:"text-[10px] text-slate-500 mt-1",children:["Angkatan ",s.angkatan]})]})]},U))})]}),f.jsxs("div",{className:"border-t border-slate-100 pt-4",children:[f.jsx("p",{className:"text-[10px] font-bold uppercase tracking-wider text-slate-400 mb-2",children:A.modal.deskripsi}),f.jsx("p",{className:"text-slate-600 text-sm leading-relaxed",children:r.description.replace(/\*\*/g,"")})]}),f.jsx("button",{onClick:E,className:"mt-6 w-full py-3 bg-primary-navy text-white font-bold rounded-lg hover:bg-untan-blue transition-colors duration-200 text-sm",children:A.modal.close})]})]})}):null}const ze=3,xy=3;function Sy(){const{t:r}=Ee(),{achievements:E,loading:A,error:s,refetch:U}=Tf(),[H,Y]=F.useState(""),[$,M]=F.useState(""),[p,q]=F.useState(""),[_,X]=F.useState(""),[Z,tl]=F.useState(ze),[Nl,Sl]=F.useState(null),_l=F.useMemo(()=>[...new Set(E.map(z=>z.category))].sort(),[E]),Vl=F.useMemo(()=>[...new Set(E.map(z=>z.year))].sort((z,G)=>G-z),[E]),yl=F.useMemo(()=>{const z=H.toLowerCase().trim();return E.filter(G=>{const kl=!z||G.title.toLowerCase().includes(z)||G.team.toLowerCase().includes(z)||G.category.toLowerCase().includes(z)||G.competition.toLowerCase().includes(z),it=!$||G.level===$,$l=!p||G.category===p,S=!_||String(G.year)===_;return kl&&it&&$l&&S})},[H,$,p,_,E]),Ml=yl.slice(0,Z),Kl=Z{Y(""),M(""),q(""),X(""),tl(ze)},Dl=z=>G=>{z(G),tl(ze)},Il=()=>tl(z=>z+xy),Et=()=>{var z;tl(ze),(z=document.getElementById("achievement-grid-section"))==null||z.scrollIntoView({behavior:"smooth",block:"start"})};return f.jsxs(f.Fragment,{children:[f.jsx(py,{achievement:Nl,onClose:()=>Sl(null)}),f.jsxs("section",{id:"achievement-grid-section",className:"py-8 bg-white",children:[f.jsxs("div",{className:"max-w-7xl mx-auto px-4 lg:px-8 mb-8",children:[f.jsx("h2",{className:"text-3xl md:text-4xl font-black font-display text-primary-navy mb-2",children:r.achievement.sectionTitle}),f.jsx("p",{className:"text-slate-500 text-base max-w-2xl",children:r.achievement.sectionDesc})]}),f.jsxs("div",{className:"max-w-7xl mx-auto px-4 lg:px-8",children:[f.jsxs("div",{className:"bg-white/80 backdrop-blur-md p-4 rounded-lg shadow-sm border-t-4 border-primary-gold mb-8 space-y-3",children:[f.jsxs("div",{className:"flex items-center justify-between",children:[f.jsxs("div",{className:"text-base font-bold font-display text-primary-navy flex items-center gap-2",children:[f.jsx(Jd,{className:"text-primary-navy",size:18}),r.achievement.filterTitle]}),Rl&&f.jsxs("button",{onClick:W,className:"flex items-center gap-1 text-xs font-bold text-slate-500 hover:text-primary-navy transition-colors",children:[f.jsx(Ca,{size:13}),r.achievement.resetFilter]})]}),f.jsxs("div",{className:"relative",children:[f.jsx($d,{size:15,className:"absolute left-3 top-1/2 -translate-y-1/2 text-slate-400 pointer-events-none"}),f.jsx("input",{id:"search-achievement",type:"text",value:H,onChange:z=>{Y(z.target.value),tl(ze)},placeholder:r.achievement.searchPlaceholder,className:"w-full bg-slate-50 text-slate-700 text-sm rounded py-2 pl-9 pr-4 border border-slate-200 focus:outline-none focus:ring-2 focus:ring-primary-gold"}),H&&f.jsx("button",{onClick:()=>{Y(""),tl(ze)},className:"absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 hover:text-slate-600","aria-label":"Hapus pencarian",children:f.jsx(Ca,{size:14})})]}),f.jsxs("div",{className:"flex flex-wrap gap-3",children:[f.jsxs("div",{className:"relative flex-1 min-w-[130px]",children:[f.jsxs("select",{id:"filter-level",value:$,onChange:z=>Dl(M)(z.target.value),className:"w-full bg-slate-50 text-slate-700 font-bold text-sm rounded py-2 pl-4 pr-9 shadow-sm focus:ring-2 focus:ring-primary-gold appearance-none cursor-pointer border border-slate-200",children:[f.jsx("option",{value:"",children:r.achievement.allLevel}),f.jsx("option",{value:"Internasional",children:"Internasional"}),f.jsx("option",{value:"Nasional",children:"Nasional"}),f.jsx("option",{value:"Regional",children:"Regional"})]}),f.jsx(Pt,{size:14,className:"absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 pointer-events-none"})]}),f.jsxs("div",{className:"relative flex-1 min-w-[130px]",children:[f.jsxs("select",{id:"filter-category",value:p,onChange:z=>Dl(q)(z.target.value),className:"w-full bg-slate-50 text-slate-700 font-bold text-sm rounded py-2 pl-4 pr-9 shadow-sm focus:ring-2 focus:ring-primary-gold appearance-none cursor-pointer border border-slate-200",children:[f.jsx("option",{value:"",children:r.achievement.allField}),_l.map(z=>f.jsx("option",{value:z,children:z},z))]}),f.jsx(Pt,{size:14,className:"absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 pointer-events-none"})]}),f.jsxs("div",{className:"relative flex-1 min-w-[100px]",children:[f.jsxs("select",{id:"filter-year",value:_,onChange:z=>Dl(X)(z.target.value),className:"w-full bg-slate-50 text-slate-700 font-bold text-sm rounded py-2 pl-4 pr-9 shadow-sm focus:ring-2 focus:ring-primary-gold appearance-none cursor-pointer border border-slate-200",children:[f.jsx("option",{value:"",children:r.achievement.allYear}),Vl.map(z=>f.jsx("option",{value:String(z),children:z},z))]}),f.jsx(Pt,{size:14,className:"absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 pointer-events-none"})]})]})]}),Rl&&f.jsxs("p",{className:"text-sm text-slate-500 font-medium mb-6",children:[r.achievement.showing," ",f.jsx("span",{className:"font-bold text-primary-navy",children:yl.length})," ",r.achievement.matching]}),A?f.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-10",children:[1,2,3].map(z=>f.jsxs("div",{className:"bg-white rounded-lg border border-slate-200 overflow-hidden shadow-sm animate-pulse",children:[f.jsx("div",{className:"h-52 bg-slate-200 w-full"}),f.jsxs("div",{className:"p-6 space-y-4",children:[f.jsx("div",{className:"h-4 bg-slate-200 rounded w-1/4"}),f.jsx("div",{className:"h-6 bg-slate-200 rounded w-3/4"}),f.jsx("div",{className:"h-4 bg-slate-200 rounded w-5/6"}),f.jsx("div",{className:"h-4 bg-slate-200 rounded w-2/3"}),f.jsx("div",{className:"h-10 bg-slate-200 rounded w-1/3 mt-4"})]})]},z))}):s?f.jsxs("div",{className:"text-center py-20 text-red-500",children:[f.jsx("p",{className:"text-lg font-semibold",children:"Gagal memuat data"}),f.jsx("p",{className:"text-sm mt-1",children:s}),f.jsx("button",{onClick:U,className:"mt-4 px-4 py-2 bg-primary-navy text-white font-bold rounded hover:bg-opacity-95 transition-all text-sm",children:"Coba Lagi"})]}):Ml.length===0?f.jsxs("div",{className:"text-center py-20 text-slate-400",children:[f.jsx("p",{className:"text-lg font-semibold",children:r.achievement.noData}),f.jsx("p",{className:"text-sm mt-1",children:r.achievement.noDataSub})]}):f.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-10",children:Ml.map(z=>f.jsx("div",{className:"animate-fade-in",children:f.jsx(by,{achievement:z,onReadMore:G=>Sl(G)})},z.id))}),f.jsxs("div",{className:"mt-20 flex flex-wrap items-center justify-center gap-6",children:[Kl&&f.jsxs("button",{id:"load-more-achievement",onClick:Il,className:"text-primary-navy font-black text-lg underline underline-offset-[12px] decoration-primary-gold decoration-4 hover:text-primary-gold transition-colors flex items-center gap-2",children:[r.achievement.loadMore,f.jsx(Pt,{size:20})]}),!Kl&&Ml.length>0&&yl.length>ze&&f.jsxs("p",{className:"text-slate-400 text-sm font-medium",children:[r.achievement.showing," ",yl.length," ",r.achievement.allShown]}),Z>ze&&Ml.length>0&&f.jsxs("button",{onClick:Et,className:"text-slate-400 font-bold text-sm underline underline-offset-4 decoration-slate-300 decoration-2 hover:text-slate-600 transition-colors flex items-center gap-1.5",children:[f.jsx(Pt,{size:16,className:"rotate-180"}),r.achievement.showLess]})]})]})]})]})}function $u({icon:r,label:E,value:A}){return f.jsxs("div",{className:"flex gap-2.5 items-start",children:[f.jsx("span",{className:"text-primary-gold mt-0.5 shrink-0",children:r}),f.jsxs("div",{children:[f.jsx("p",{className:"text-[10px] font-bold uppercase tracking-wider text-slate-400 leading-none mb-1",children:E}),f.jsx("p",{className:"text-sm font-semibold text-slate-800 leading-snug",children:A})]})]})}function Ny({project:r,onClose:E}){const{t:A}=Ee();return r?f.jsx("div",{className:"fixed inset-0 z-[300] flex items-center justify-center p-4 bg-black/60 backdrop-blur-sm",onClick:E,"aria-modal":"true",role:"dialog","aria-label":r.title,children:f.jsxs("div",{className:"bg-white rounded-xl max-w-2xl w-full max-h-[90vh] overflow-y-auto shadow-2xl animate-fade-in",onClick:s=>s.stopPropagation(),children:[f.jsxs("div",{className:"relative h-56 overflow-hidden rounded-t-xl bg-slate-200 shrink-0",children:[f.jsx("img",{src:r.image,alt:r.title,className:"w-full h-full object-cover",referrerPolicy:"no-referrer"}),f.jsx("div",{className:"absolute inset-0 bg-gradient-to-t from-black/80 via-black/20 to-transparent"}),f.jsx("button",{onClick:E,"aria-label":A.modal.close,className:"absolute top-3 right-3 w-9 h-9 bg-white/90 backdrop-blur rounded-full flex items-center justify-center hover:bg-white transition-colors shadow-md",children:f.jsx(Ca,{size:18,className:"text-slate-700"})}),r.category&&r.category.length>0&&f.jsx("div",{className:"absolute bottom-4 left-4 flex flex-wrap gap-2",children:r.category.map((s,U)=>f.jsxs("span",{className:"bg-primary-gold text-slate-900 text-xs font-bold px-3 py-1.5 rounded flex items-center gap-1.5 uppercase tracking-wide",children:[f.jsx(Wu,{size:12}),s]},U))})]}),f.jsxs("div",{className:"p-6",children:[f.jsx("h2",{className:"text-xl font-bold text-primary-navy leading-snug mb-5",children:r.title}),f.jsxs("div",{className:"grid grid-cols-2 gap-4 p-4 bg-slate-50 rounded-lg mb-5",children:[r.studentName&&f.jsx($u,{icon:f.jsx(Fd,{size:14}),label:A.modal.mahasiswa,value:r.studentName}),r.nim&&f.jsx($u,{icon:f.jsx(Kd,{size:14}),label:A.modal.nim,value:r.nim}),r.year&&f.jsx($u,{icon:f.jsx(Dn,{size:14}),label:A.modal.tahun,value:String(r.year)}),r.category&&r.category.length>0&&f.jsx($u,{icon:f.jsx(Wu,{size:14}),label:A.modal.bidang,value:r.category.join(", ")})]}),r.members&&r.members.length>0&&f.jsxs("div",{className:"border-t border-slate-100 pt-4 mb-4",children:[f.jsx("p",{className:"text-[10px] font-bold uppercase tracking-wider text-slate-400 mb-2",children:"Anggota Tim"}),f.jsx("ul",{className:"grid grid-cols-1 sm:grid-cols-2 gap-2",children:r.members.map((s,U)=>f.jsxs("li",{className:"flex items-center gap-2 bg-slate-50 px-3 py-2 rounded-md border border-slate-100",children:[f.jsx("span",{className:"w-6 h-6 rounded-full bg-primary-gold/20 text-primary-gold flex items-center justify-center text-xs font-bold shrink-0",children:s.nama.charAt(0).toUpperCase()}),f.jsxs("div",{className:"flex flex-col",children:[f.jsx("span",{className:"text-sm font-semibold text-slate-700 leading-none",children:s.nama}),s.nim&&f.jsx("span",{className:"text-[10px] text-slate-500 mt-1",children:s.nim})]})]},U))})]}),f.jsxs("div",{className:"border-t border-slate-100 pt-4 mb-5",children:[f.jsx("p",{className:"text-[10px] font-bold uppercase tracking-wider text-slate-400 mb-2",children:A.modal.deskripsi}),f.jsx("p",{className:"text-slate-600 text-sm leading-relaxed",children:r.description}),r.catatan&&f.jsxs("div",{className:"mt-4 p-3 bg-blue-50/50 border border-blue-100 rounded-lg",children:[f.jsx("p",{className:"text-[10px] font-bold uppercase tracking-wider text-blue-400 mb-1",children:"Catatan Tambahan"}),f.jsx("p",{className:"text-sm text-slate-600 italic",children:r.catatan})]})]}),r.link?f.jsxs("a",{href:r.link,target:"_blank",rel:"noopener noreferrer",className:"flex items-center justify-center gap-2 w-full py-3 bg-primary-navy text-white font-bold rounded-lg hover:bg-untan-blue transition-colors duration-200 text-sm mb-3",children:[f.jsx(kd,{size:16}),A.project.visitLink]}):f.jsxs("div",{className:"flex items-center justify-center gap-2 w-full py-3 bg-slate-100 text-slate-400 font-bold rounded-lg text-sm mb-3 cursor-not-allowed",children:[f.jsx(cy,{size:16}),A.project.noLink]}),f.jsx("button",{onClick:E,className:"w-full py-2.5 border-2 border-slate-200 text-slate-600 font-bold rounded-lg hover:border-slate-300 hover:bg-slate-50 transition-colors duration-200 text-sm",children:A.modal.close})]})]})}):null}const Ae=6,jy=3;function Ty(){const{t:r}=Ee(),{projects:E,loading:A,error:s,refetch:U}=Tf(),H=F.useRef(null),[Y,$]=F.useState(null),[M,p]=F.useState(Ae),[q,_]=F.useState(""),[X,Z]=F.useState(""),[tl,Nl]=F.useState(""),Sl=F.useMemo(()=>[...new Set(E.flatMap(z=>z.category))].sort(),[E]),_l=F.useMemo(()=>[...new Set(E.map(z=>z.year))].sort((z,G)=>G-z),[E]),Vl=F.useMemo(()=>{const z=q.toLowerCase().trim();return E.filter(G=>{const kl=!z||G.title.toLowerCase().includes(z)||G.studentName.toLowerCase().includes(z)||G.category.join(" ").toLowerCase().includes(z)||G.description.toLowerCase().includes(z),it=!X||G.category.includes(X),$l=!tl||String(G.year)===tl;return kl&&it&&$l})},[q,X,tl,E]),yl=Vl.slice(0,M),Ml=M{_(""),Z(""),Nl(""),p(Ae)},W=z=>G=>{z(G),p(Ae)},Dl=()=>p(z=>z+jy),Il=()=>{var z;p(Ae),(z=document.getElementById("portofolio"))==null||z.scrollIntoView({behavior:"smooth",block:"start"})},Et=z=>{const G=H.current;if(!G)return;const kl=G.firstElementChild?G.firstElementChild.offsetWidth+24:400;G.scrollBy({left:z==="right"?kl:-kl,behavior:"smooth"})};return f.jsxs(f.Fragment,{children:[f.jsx(Ny,{project:Y,onClose:()=>$(null)}),f.jsx("section",{id:"portofolio",className:"py-16 bg-white relative overflow-hidden border-t border-slate-100",children:f.jsxs("div",{className:"max-w-7xl mx-auto px-4 lg:px-8",children:[f.jsxs("div",{className:"flex items-start justify-between mb-8 gap-4",children:[f.jsxs("div",{children:[f.jsx("h2",{className:"text-3xl md:text-4xl font-black font-display text-primary-navy mb-3",children:r.project.sectionTitle}),f.jsx("p",{className:"text-base text-slate-500 font-medium max-w-2xl",children:r.project.sectionDesc})]}),f.jsxs("div",{className:"flex items-center gap-2 shrink-0 mt-1",children:[f.jsx("button",{onClick:()=>Et("left"),"aria-label":"Geser kiri",className:"w-10 h-10 rounded-full border-2 border-primary-navy/20 flex items-center justify-center text-primary-navy hover:bg-primary-navy hover:text-white hover:border-primary-navy transition-all duration-200 shadow-sm",children:f.jsx(ey,{size:20})}),f.jsx("button",{onClick:()=>Et("right"),"aria-label":"Geser kanan",className:"w-10 h-10 rounded-full border-2 border-primary-navy/20 flex items-center justify-center text-primary-navy hover:bg-primary-navy hover:text-white hover:border-primary-navy transition-all duration-200 shadow-sm",children:f.jsx(ny,{size:20})})]})]}),f.jsxs("div",{className:"bg-white/80 backdrop-blur-md p-4 rounded-lg shadow-sm border-t-4 border-primary-gold mb-8 space-y-3",children:[f.jsxs("div",{className:"flex items-center justify-between",children:[f.jsxs("div",{className:"text-base font-bold font-display text-primary-navy flex items-center gap-2",children:[f.jsx(Jd,{className:"text-primary-navy",size:18}),r.project.filterTitle]}),Kl&&f.jsxs("button",{onClick:Rl,className:"flex items-center gap-1 text-xs font-bold text-slate-500 hover:text-primary-navy transition-colors",children:[f.jsx(Ca,{size:13}),r.project.resetFilter]})]}),f.jsxs("div",{className:"relative",children:[f.jsx($d,{size:15,className:"absolute left-3 top-1/2 -translate-y-1/2 text-slate-400 pointer-events-none"}),f.jsx("input",{id:"search-project",type:"text",value:q,onChange:z=>{_(z.target.value),p(Ae)},placeholder:r.project.searchPlaceholder,className:"w-full bg-slate-50 text-slate-700 text-sm rounded py-2 pl-9 pr-4 border border-slate-200 focus:outline-none focus:ring-2 focus:ring-primary-gold"}),q&&f.jsx("button",{onClick:()=>{_(""),p(Ae)},className:"absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 hover:text-slate-600","aria-label":"Hapus pencarian",children:f.jsx(Ca,{size:14})})]}),f.jsxs("div",{className:"flex flex-wrap gap-3",children:[f.jsxs("div",{className:"relative flex-1 min-w-[160px]",children:[f.jsxs("select",{id:"filter-project-category",value:X,onChange:z=>W(Z)(z.target.value),className:"w-full bg-slate-50 text-slate-700 font-bold text-sm rounded py-2 pl-4 pr-9 shadow-sm focus:ring-2 focus:ring-primary-gold appearance-none cursor-pointer border border-slate-200",children:[f.jsx("option",{value:"",children:r.project.allField}),Sl.map(z=>f.jsx("option",{value:z,children:z},z))]}),f.jsx(Pt,{size:14,className:"absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 pointer-events-none"})]}),f.jsxs("div",{className:"relative flex-1 min-w-[120px]",children:[f.jsxs("select",{id:"filter-project-year",value:tl,onChange:z=>W(Nl)(z.target.value),className:"w-full bg-slate-50 text-slate-700 font-bold text-sm rounded py-2 pl-4 pr-9 shadow-sm focus:ring-2 focus:ring-primary-gold appearance-none cursor-pointer border border-slate-200",children:[f.jsx("option",{value:"",children:r.project.allYear}),_l.map(z=>f.jsx("option",{value:String(z),children:z},z))]}),f.jsx(Pt,{size:14,className:"absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 pointer-events-none"})]})]})]}),Kl&&f.jsxs("p",{className:"text-sm text-slate-500 font-medium mb-6",children:[r.project.showing," ",f.jsx("span",{className:"font-bold text-primary-navy",children:Vl.length})," ",r.project.matching]}),A?f.jsx("div",{className:"flex gap-6 overflow-x-auto pb-10 hide-scrollbar",children:[1,2,3].map(z=>f.jsxs("div",{className:"snap-start shrink-0 proj-card bg-white rounded-lg border border-slate-200 overflow-hidden shadow-md animate-pulse flex flex-col",children:[f.jsx("div",{className:"h-52 bg-slate-200 w-full"}),f.jsxs("div",{className:"p-5 space-y-4 flex-grow flex flex-col justify-between",children:[f.jsxs("div",{className:"space-y-2",children:[f.jsx("div",{className:"h-4 bg-slate-200 rounded w-1/4"}),f.jsx("div",{className:"h-5 bg-slate-200 rounded w-3/4"}),f.jsx("div",{className:"h-4 bg-slate-200 rounded w-5/6"}),f.jsx("div",{className:"h-4 bg-slate-200 rounded w-2/3"})]}),f.jsx("div",{className:"h-10 bg-slate-200 rounded w-1/3 mt-4"})]})]},z))}):s?f.jsxs("div",{className:"text-center py-10 text-red-500 w-full",children:[f.jsx("p",{className:"text-lg font-semibold",children:"Gagal memuat portofolio"}),f.jsx("p",{className:"text-sm mt-1",children:s}),f.jsx("button",{onClick:U,className:"mt-4 px-4 py-2 bg-primary-navy text-white font-bold rounded hover:bg-opacity-95 transition-all text-sm",children:"Coba Lagi"})]}):yl.length===0?f.jsxs("div",{className:"text-center py-20 text-slate-400",children:[f.jsx("p",{className:"text-lg font-semibold",children:r.project.noData}),f.jsx("p",{className:"text-sm mt-1",children:r.project.noDataSub})]}):f.jsxs(f.Fragment,{children:[f.jsx("div",{ref:H,className:"flex gap-6 overflow-x-auto pb-10 hide-scrollbar snap-x snap-mandatory",style:{scrollbarWidth:"none",msOverflowStyle:"none"},children:yl.map(z=>f.jsxs("div",{className:"snap-start shrink-0 proj-card bg-white rounded-lg overflow-hidden shadow-md border border-slate-200 group flex flex-col relative",children:[f.jsx("div",{className:"absolute top-0 left-0 w-1 h-full bg-primary-gold z-10 transition-transform origin-bottom group-hover:scale-y-110"}),f.jsxs("div",{className:"h-52 overflow-hidden relative",children:[f.jsx("img",{src:z.image,alt:z.title,className:"w-full h-full object-cover group-hover:scale-105 transition-transform duration-500",referrerPolicy:"no-referrer",onError:G=>{G.target.src="https://placehold.co/800x600/003150/FDB813?text=Informatika+UNTAN"}}),f.jsxs("div",{className:"absolute inset-0 bg-gradient-to-t from-primary-navy/80 to-transparent p-5 flex flex-col justify-end",children:[f.jsx("h4",{className:"text-lg font-bold font-display text-white leading-snug mb-1",children:z.title}),z.category&&z.category.length>0&&f.jsx("div",{className:"flex flex-wrap gap-2 mt-1",children:z.category.map((G,kl)=>f.jsxs("span",{className:"inline-flex items-center gap-1 text-[10px] font-bold text-primary-gold uppercase tracking-wider bg-black/30 px-2 py-1 rounded backdrop-blur-sm",children:[f.jsx(Wu,{size:10}),G]},kl))})]})]}),f.jsxs("div",{className:"p-5 flex flex-col flex-grow",children:[f.jsxs("div",{className:"flex flex-wrap items-center gap-3 mb-3 text-xs text-slate-500 font-medium",children:[z.studentName&&f.jsxs("span",{className:"flex items-center gap-1",children:[f.jsx(yy,{size:11,className:"text-slate-400"}),z.studentName]}),z.year&&f.jsxs("span",{className:"flex items-center gap-1",children:[f.jsx(Dn,{size:11,className:"text-slate-400"}),z.year]})]}),f.jsx("p",{className:"text-slate-600 text-sm leading-relaxed mb-5 flex-grow line-clamp-3",children:z.description}),f.jsxs("div",{className:"flex items-center gap-3 mt-auto",children:[f.jsxs("button",{onClick:()=>$(z),className:"text-primary-navy font-bold text-sm tracking-wide hover:text-untan-blue flex items-center gap-2 group/btn",style:{minHeight:"44px"},children:[r.project.readMore,f.jsx($h,{size:15,className:"group-hover/btn:translate-x-1 transition-transform"})]}),z.link&&f.jsxs("a",{href:z.link,target:"_blank",rel:"noopener noreferrer",className:"ml-auto flex items-center gap-1.5 text-xs font-bold text-slate-500 hover:text-primary-navy transition-colors border border-slate-200 hover:border-primary-navy/30 rounded px-3 py-2",style:{minHeight:"44px"},children:[f.jsx(kd,{size:13}),r.project.visitLink]})]})]})]},z.id))}),f.jsx("p",{className:"text-center text-xs text-slate-400 font-medium mt-2 select-none",children:r.project.scrollHint}),f.jsxs("div",{className:"mt-10 flex flex-wrap items-center justify-center gap-6",children:[Ml&&f.jsxs("button",{id:"load-more-project",onClick:Dl,className:"text-primary-navy font-black text-base underline underline-offset-[10px] decoration-primary-gold decoration-4 hover:text-primary-gold transition-colors flex items-center gap-2",children:[r.project.loadMore,f.jsx(Pt,{size:18})]}),!Ml&&yl.length>0&&Vl.length>Ae&&f.jsxs("p",{className:"text-slate-400 text-sm font-medium",children:[r.project.showing," ",Vl.length," ",r.project.allShown]}),M>Ae&&yl.length>0&&f.jsxs("button",{onClick:Il,className:"text-slate-400 font-bold text-sm underline underline-offset-4 decoration-slate-300 decoration-2 hover:text-slate-600 transition-colors flex items-center gap-1.5",children:[f.jsx(Pt,{size:16,className:"rotate-180"}),r.project.showLess]})]})]})]})})]})}const zy="6285123456789";function Ay(){const{t:r,lang:E}=Ee(),A=`https://wa.me/${zy}?text=${encodeURIComponent(E==="id"?"Halo, saya ingin mendaftarkan prestasi atau karya saya.":"Hello, I would like to register my achievement or work.")}`;return f.jsx("section",{className:"acaab-full-bleed bg-untan-navy py-14 md:py-16 border-t border-white/10",children:f.jsx("div",{className:"max-w-7xl mx-auto px-4 lg:px-8",children:f.jsxs("div",{className:"bg-untan-yellow/10 border border-untan-yellow/20 rounded-2xl px-8 py-10 md:py-12 flex flex-col md:flex-row items-center justify-between gap-8",children:[f.jsxs("div",{className:"text-center md:text-left",children:[f.jsx("span",{className:"inline-block bg-untan-yellow text-slate-900 text-[10px] font-bold uppercase tracking-widest px-2 py-0.5 mb-4 rounded-sm",children:r.cta.badge}),f.jsx("h2",{className:"text-white text-2xl md:text-3xl font-bold font-serif leading-snug mb-3",children:r.cta.title}),f.jsx("p",{className:"text-slate-300 text-sm md:text-base leading-relaxed max-w-lg",children:r.cta.desc})]}),f.jsx("div",{className:"flex flex-col items-center gap-3 shrink-0",children:f.jsxs("a",{href:A,target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-2.5 bg-[#25D366] hover:bg-[#20c05a] text-white text-sm font-bold px-6 py-3 rounded-full transition-all hover:scale-105 shadow-lg shadow-[#25D366]/20 whitespace-nowrap",children:[f.jsx(oy,{size:18}),r.cta.waButton]})})]})})})}function Ey(){return f.jsx(Hh,{children:f.jsxs(wh,{children:[f.jsx("nav",{className:"py-4","aria-label":"Breadcrumb",children:f.jsxs("ol",{className:"flex items-center text-[10px] md:text-xs text-slate-500 font-medium tracking-wide uppercase",children:[f.jsx("li",{children:f.jsx("a",{href:"https://informatika.untan.ac.id",target:"_blank",rel:"noopener noreferrer",className:"hover:text-untan-blue transition-colors",children:"Beranda"})}),f.jsx("li",{children:f.jsx("span",{className:"mx-2 text-slate-300","aria-hidden":"true",children:"/"})}),f.jsx("li",{children:f.jsx("span",{className:"text-slate-800 font-bold","aria-current":"page",children:"Mahasiswa & Prestasi"})})]})}),f.jsx(Gh,{}),f.jsxs("section",{className:"acaab-full-bleed pb-20",children:[f.jsx("div",{className:"max-w-7xl mx-auto px-4 lg:px-8",children:f.jsx(Qh,{})}),f.jsx(Sy,{}),f.jsx(Ty,{})]}),f.jsx(Ay,{})]})})}Dh.createRoot(document.getElementById("root")).render(f.jsx(F.StrictMode,{children:f.jsx(Ey,{})})); diff --git a/groups/ACAAB/assets/src/index.html b/groups/ACAAB/assets/src/index.html deleted file mode 100644 index 77a0f00..0000000 --- a/groups/ACAAB/assets/src/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - ACAAB — Dev Preview - - - - - -
⚡ DEV MODE — Navbar & footer tidak tampil di sini. Gunakan kit dev server (root) untuk preview lengkap.
-
- - diff --git a/groups/ACAAB/package-lock.json b/groups/ACAAB/package-lock.json deleted file mode 100644 index 3983319..0000000 --- a/groups/ACAAB/package-lock.json +++ /dev/null @@ -1,2515 +0,0 @@ -{ - "name": "acaab-prestasi-karya", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "acaab-prestasi-karya", - "version": "1.0.0", - "dependencies": { - "lucide-react": "^0.546.0", - "motion": "^12.23.24", - "react": "^19.0.0", - "react-dom": "^19.0.0" - }, - "devDependencies": { - "@tailwindcss/vite": "^4.1.14", - "@types/react": "^19.2.15", - "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^5.0.4", - "tailwindcss": "^4.1.14", - "typescript": "~5.8.2", - "vite": "^6.2.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", - "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.29.7", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", - "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", - "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.7", - "@babel/helper-compilation-targets": "^7.29.7", - "@babel/helper-module-transforms": "^7.29.7", - "@babel/helpers": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/template": "^7.29.7", - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", - "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", - "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.29.7", - "@babel/helper-validator-option": "^7.29.7", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", - "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", - "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", - "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7", - "@babel/traverse": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", - "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", - "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", - "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", - "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", - "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.7" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz", - "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz", - "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", - "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", - "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.7", - "@babel/helper-globals": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.7", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", - "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", - "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.4.tgz", - "integrity": "sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.4.tgz", - "integrity": "sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.4.tgz", - "integrity": "sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.4.tgz", - "integrity": "sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.4.tgz", - "integrity": "sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.4.tgz", - "integrity": "sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.4.tgz", - "integrity": "sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.4.tgz", - "integrity": "sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.4.tgz", - "integrity": "sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.4.tgz", - "integrity": "sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.4.tgz", - "integrity": "sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.4.tgz", - "integrity": "sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.4.tgz", - "integrity": "sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.4.tgz", - "integrity": "sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.4.tgz", - "integrity": "sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.4.tgz", - "integrity": "sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.4.tgz", - "integrity": "sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.4.tgz", - "integrity": "sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.4.tgz", - "integrity": "sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.4.tgz", - "integrity": "sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.4.tgz", - "integrity": "sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.4.tgz", - "integrity": "sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.4.tgz", - "integrity": "sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.4.tgz", - "integrity": "sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.4.tgz", - "integrity": "sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@tailwindcss/node": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.0.tgz", - "integrity": "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/remapping": "^2.3.5", - "enhanced-resolve": "^5.21.0", - "jiti": "^2.6.1", - "lightningcss": "1.32.0", - "magic-string": "^0.30.21", - "source-map-js": "^1.2.1", - "tailwindcss": "4.3.0" - } - }, - "node_modules/@tailwindcss/oxide": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.0.tgz", - "integrity": "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.3.0", - "@tailwindcss/oxide-darwin-arm64": "4.3.0", - "@tailwindcss/oxide-darwin-x64": "4.3.0", - "@tailwindcss/oxide-freebsd-x64": "4.3.0", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", - "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", - "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", - "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", - "@tailwindcss/oxide-linux-x64-musl": "4.3.0", - "@tailwindcss/oxide-wasm32-wasi": "4.3.0", - "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", - "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" - } - }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.0.tgz", - "integrity": "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.0.tgz", - "integrity": "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.0.tgz", - "integrity": "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.0.tgz", - "integrity": "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.0.tgz", - "integrity": "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.0.tgz", - "integrity": "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.0.tgz", - "integrity": "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.0.tgz", - "integrity": "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.0.tgz", - "integrity": "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.0.tgz", - "integrity": "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA==", - "bundleDependencies": [ - "@napi-rs/wasm-runtime", - "@emnapi/core", - "@emnapi/runtime", - "@tybys/wasm-util", - "@emnapi/wasi-threads", - "tslib" - ], - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.10.0", - "@emnapi/runtime": "^1.10.0", - "@emnapi/wasi-threads": "^1.2.1", - "@napi-rs/wasm-runtime": "^1.1.4", - "@tybys/wasm-util": "^0.10.1", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.0.tgz", - "integrity": "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.0.tgz", - "integrity": "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/vite": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.0.tgz", - "integrity": "sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tailwindcss/node": "4.3.0", - "@tailwindcss/oxide": "4.3.0", - "tailwindcss": "4.3.0" - }, - "peerDependencies": { - "vite": "^5.2.0 || ^6 || ^7 || ^8" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "19.2.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.15.tgz", - "integrity": "sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "csstype": "^3.2.2" - } - }, - "node_modules/@types/react-dom": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^19.2.0" - } - }, - "node_modules/@vitejs/plugin-react": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.2.0.tgz", - "integrity": "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.29.0", - "@babel/plugin-transform-react-jsx-self": "^7.27.1", - "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-rc.3", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.18.0" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/baseline-browser-mapping": { - "version": "2.10.32", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.32.tgz", - "integrity": "sha512-wbPvpyjJPC0zdfdKXxqEL3Ea+bOMD/87X4lftiJkkaBiuG6ALQy1SLmEd7BSmVCuwCQsBrCamgBoLyfFDD1EPg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/browserslist": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", - "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "baseline-browser-mapping": "^2.10.12", - "caniuse-lite": "^1.0.30001782", - "electron-to-chromium": "^1.5.328", - "node-releases": "^2.0.36", - "update-browserslist-db": "^1.2.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001793", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz", - "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.364", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.364.tgz", - "integrity": "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw==", - "dev": true, - "license": "ISC" - }, - "node_modules/enhanced-resolve": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.22.1.tgz", - "integrity": "sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.3.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/framer-motion": { - "version": "12.40.0", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.40.0.tgz", - "integrity": "sha512-uaBd3qC1v3KQqBEjwTUd183K6PbS+j0yR9w9VmEOLWA/tnUcSn8Xa3uck7t4dgpDoUss8xQTcj8W2L07lrnLFg==", - "license": "MIT", - "dependencies": { - "motion-dom": "^12.40.0", - "motion-utils": "^12.39.0", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "@emotion/is-prop-valid": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@emotion/is-prop-valid": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/jiti": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", - "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/lightningcss": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", - "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.32.0", - "lightningcss-darwin-arm64": "1.32.0", - "lightningcss-darwin-x64": "1.32.0", - "lightningcss-freebsd-x64": "1.32.0", - "lightningcss-linux-arm-gnueabihf": "1.32.0", - "lightningcss-linux-arm64-gnu": "1.32.0", - "lightningcss-linux-arm64-musl": "1.32.0", - "lightningcss-linux-x64-gnu": "1.32.0", - "lightningcss-linux-x64-musl": "1.32.0", - "lightningcss-win32-arm64-msvc": "1.32.0", - "lightningcss-win32-x64-msvc": "1.32.0" - } - }, - "node_modules/lightningcss-android-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", - "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", - "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", - "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", - "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", - "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", - "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", - "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", - "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", - "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", - "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", - "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lucide-react": { - "version": "0.546.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.546.0.tgz", - "integrity": "sha512-Z94u6fKT43lKeYHiVyvyR8fT7pwCzDu7RyMPpTvh054+xahSgj4HFQ+NmflvzdXsoAjYGdCguGaFKYuvq0ThCQ==", - "license": "ISC", - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/motion": { - "version": "12.40.0", - "resolved": "https://registry.npmjs.org/motion/-/motion-12.40.0.tgz", - "integrity": "sha512-yjrHUrBFW6kQvjJwRsoiPSAhC5tRwRqNGJWmiJ4CrGnbKp0V88AdzkhBmDoqIsIPfarOe0Uddd37Xq43/gIocA==", - "license": "MIT", - "dependencies": { - "framer-motion": "^12.40.0", - "tslib": "^2.4.0" - }, - "peerDependencies": { - "@emotion/is-prop-valid": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@emotion/is-prop-valid": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/motion-dom": { - "version": "12.40.0", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.40.0.tgz", - "integrity": "sha512-HxU3ZaBwNPVQUBQf1xxgq+7JrPNZvjLVxgbpEZL7RrWJnsxOf0/OM+yrHG9ogLQ31Do/r57Oz2gQWPK+6q62mg==", - "license": "MIT", - "dependencies": { - "motion-utils": "^12.39.0" - } - }, - "node_modules/motion-utils": { - "version": "12.39.0", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.39.0.tgz", - "integrity": "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==", - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", - "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-releases": { - "version": "2.0.46", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.46.tgz", - "integrity": "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.5.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", - "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.12", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/react": { - "version": "19.2.6", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz", - "integrity": "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.2.6", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.6.tgz", - "integrity": "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g==", - "license": "MIT", - "dependencies": { - "scheduler": "^0.27.0" - }, - "peerDependencies": { - "react": "^19.2.6" - } - }, - "node_modules/react-refresh": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz", - "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "4.60.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.4.tgz", - "integrity": "sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.60.4", - "@rollup/rollup-android-arm64": "4.60.4", - "@rollup/rollup-darwin-arm64": "4.60.4", - "@rollup/rollup-darwin-x64": "4.60.4", - "@rollup/rollup-freebsd-arm64": "4.60.4", - "@rollup/rollup-freebsd-x64": "4.60.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.60.4", - "@rollup/rollup-linux-arm-musleabihf": "4.60.4", - "@rollup/rollup-linux-arm64-gnu": "4.60.4", - "@rollup/rollup-linux-arm64-musl": "4.60.4", - "@rollup/rollup-linux-loong64-gnu": "4.60.4", - "@rollup/rollup-linux-loong64-musl": "4.60.4", - "@rollup/rollup-linux-ppc64-gnu": "4.60.4", - "@rollup/rollup-linux-ppc64-musl": "4.60.4", - "@rollup/rollup-linux-riscv64-gnu": "4.60.4", - "@rollup/rollup-linux-riscv64-musl": "4.60.4", - "@rollup/rollup-linux-s390x-gnu": "4.60.4", - "@rollup/rollup-linux-x64-gnu": "4.60.4", - "@rollup/rollup-linux-x64-musl": "4.60.4", - "@rollup/rollup-openbsd-x64": "4.60.4", - "@rollup/rollup-openharmony-arm64": "4.60.4", - "@rollup/rollup-win32-arm64-msvc": "4.60.4", - "@rollup/rollup-win32-ia32-msvc": "4.60.4", - "@rollup/rollup-win32-x64-gnu": "4.60.4", - "@rollup/rollup-win32-x64-msvc": "4.60.4", - "fsevents": "~2.3.2" - } - }, - "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "license": "MIT" - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tailwindcss": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.0.tgz", - "integrity": "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/tapable": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", - "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", - "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/vite": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz", - "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.4.4", - "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - } - } -} diff --git a/groups/ACAAB/package.json b/groups/ACAAB/package.json deleted file mode 100644 index a12cc87..0000000 --- a/groups/ACAAB/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "acaab-prestasi-karya", - "private": true, - "version": "1.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "preview": "vite preview" - }, - "dependencies": { - "lucide-react": "^0.546.0", - "motion": "^12.23.24", - "react": "^19.0.0", - "react-dom": "^19.0.0" - }, - "devDependencies": { - "@tailwindcss/vite": "^4.1.14", - "@types/react": "^19.2.15", - "@types/react-dom": "^19.2.3", - "@vitejs/plugin-react": "^5.0.4", - "tailwindcss": "^4.1.14", - "typescript": "~5.8.2", - "vite": "^6.2.0" - } -} diff --git a/groups/ACAAB/src/App.tsx b/groups/ACAAB/src/App.tsx deleted file mode 100644 index 7d87c22..0000000 --- a/groups/ACAAB/src/App.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { LanguageProvider } from './context/LanguageContext'; -import { DataProvider } from './context/DataContext'; -import Hero from './components/Hero'; -import Stats from './components/Stats'; -import AchievementGrid from './components/AchievementGrid'; -import ProjectCarousel from './components/ProjectCarousel'; -import CTA from './components/CTA'; - -export default function App() { - return ( - - - {/* Breadcrumb */} - - - - -
-
- -
- - -
- - -
-
- ); -} \ No newline at end of file diff --git a/groups/ACAAB/src/components/AchievementCard.tsx b/groups/ACAAB/src/components/AchievementCard.tsx deleted file mode 100644 index 1eeb227..0000000 --- a/groups/ACAAB/src/components/AchievementCard.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import type { Achievement } from '../data'; -import { Trophy, Calendar } from 'lucide-react'; -import { useLang } from '../context/LanguageContext'; - -interface AchievementCardProps { - achievement: Achievement; - onReadMore: (achievement: Achievement) => void; -} - -export default function AchievementCard({ achievement, onReadMore }: AchievementCardProps) { - const { t } = useLang(); - - return ( -
-
- -
- {achievement.title} { - (e.target as HTMLImageElement).src = 'https://placehold.co/800x600/003150/FDB813?text=Informatika+UNTAN'; - }} - /> -
- - {achievement.rank} -
-
- -
-
- - {achievement.category} - - - - {achievement.year} - -
- -

- {achievement.title} -

- -

- {achievement.description} -

- -
-
-
-
- {achievement.avatar} -
-
- {achievement.team} - {achievement.generation} -
-
- - {achievement.level} - -
- - -
-
-
- ); -} diff --git a/groups/ACAAB/src/components/AchievementGrid.tsx b/groups/ACAAB/src/components/AchievementGrid.tsx deleted file mode 100644 index e4ec0b0..0000000 --- a/groups/ACAAB/src/components/AchievementGrid.tsx +++ /dev/null @@ -1,270 +0,0 @@ -import { useState, useMemo } from 'react'; -import { Filter, ChevronDown, Search, X } from 'lucide-react'; -import { type Achievement } from '../data'; -import { useData } from '../context/DataContext'; -import AchievementCard from './AchievementCard'; -import AchievementModal from './AchievementModal'; -import { useLang } from '../context/LanguageContext'; - -const INITIAL_COUNT = 3; -const LOAD_MORE_COUNT = 3; - -export default function AchievementGrid() { - const { t } = useLang(); - const { achievements, loading, error, refetch } = useData(); - const [searchQuery, setSearchQuery] = useState(''); - const [filterLevel, setFilterLevel] = useState(''); - const [filterCategory, setFilterCategory] = useState(''); - const [filterYear, setFilterYear] = useState(''); - const [visibleCount, setVisibleCount] = useState(INITIAL_COUNT); - const [selectedAchievement, setSelectedAchievement] = useState(null); - - // Derive unique categories and years from data - const categories = useMemo( - () => [...new Set(achievements.map((a) => a.category))].sort(), - [achievements] - ); - const years = useMemo( - () => [...new Set(achievements.map((a) => a.year))].sort((a: number, b: number) => b - a), - [achievements] - ); - - // Filter + search logic - const filtered = useMemo(() => { - const q = searchQuery.toLowerCase().trim(); - return achievements.filter((a) => { - const matchSearch = - !q || - a.title.toLowerCase().includes(q) || - a.team.toLowerCase().includes(q) || - a.category.toLowerCase().includes(q) || - a.competition.toLowerCase().includes(q); - const matchLevel = !filterLevel || a.level === filterLevel; - const matchCategory = !filterCategory || a.category === filterCategory; - const matchYear = !filterYear || String(a.year) === filterYear; - return matchSearch && matchLevel && matchCategory && matchYear; - }); - }, [searchQuery, filterLevel, filterCategory, filterYear, achievements]); - - const visible = filtered.slice(0, visibleCount); - const hasMore = visibleCount < filtered.length; - const isFiltered = searchQuery || filterLevel || filterCategory || filterYear; - - const resetFilters = () => { - setSearchQuery(''); - setFilterLevel(''); - setFilterCategory(''); - setFilterYear(''); - setVisibleCount(INITIAL_COUNT); - }; - - const handleFilterChange = (setter: (v: string) => void) => (v: string) => { - setter(v); - setVisibleCount(INITIAL_COUNT); - }; - - const handleLoadMore = () => setVisibleCount((prev) => prev + LOAD_MORE_COUNT); - - const handleShowLess = () => { - setVisibleCount(INITIAL_COUNT); - document.getElementById('achievement-grid-section')?.scrollIntoView({ behavior: 'smooth', block: 'start' }); - }; - - return ( - <> - {/* Achievement Modal */} - setSelectedAchievement(null)} /> - -
- {/* Section header */} -
-

- {t.achievement.sectionTitle} -

-

- {t.achievement.sectionDesc} -

-
- -
- {/* Filter + Search Section */} -
- {/* Row 1: Label + Reset */} -
-
- - {t.achievement.filterTitle} -
- {isFiltered && ( - - )} -
- - {/* Row 2: Search bar */} -
- - { setSearchQuery(e.target.value); setVisibleCount(INITIAL_COUNT); }} - placeholder={t.achievement.searchPlaceholder} - className="w-full bg-slate-50 text-slate-700 text-sm rounded py-2 pl-9 pr-4 border border-slate-200 focus:outline-none focus:ring-2 focus:ring-primary-gold" - /> - {searchQuery && ( - - )} -
- - {/* Row 3: Dropdowns */} -
- {/* Level Filter */} -
- - -
- - {/* Category Filter */} -
- - -
- - {/* Year Filter */} -
- - -
-
-
- - {/* Results count */} - {isFiltered && ( -

- {t.achievement.showing}{' '} - {filtered.length}{' '} - {t.achievement.matching} -

- )} - - {/* Grid */} - {loading ? ( -
- {[1, 2, 3].map((n) => ( -
-
-
-
-
-
-
-
-
-
- ))} -
- ) : error ? ( -
-

Gagal memuat data

-

{error}

- -
- ) : visible.length === 0 ? ( -
-

{t.achievement.noData}

-

{t.achievement.noDataSub}

-
- ) : ( -
- {visible.map((achievement) => ( -
- setSelectedAchievement(a)} - /> -
- ))} -
- )} - - {/* Load More / Show Less */} -
- {hasMore && ( - - )} - - {!hasMore && visible.length > 0 && filtered.length > INITIAL_COUNT && ( -

- {t.achievement.showing} {filtered.length} {t.achievement.allShown} -

- )} - - {visibleCount > INITIAL_COUNT && visible.length > 0 && ( - - )} -
-
-
- - ); -} diff --git a/groups/ACAAB/src/components/AchievementModal.tsx b/groups/ACAAB/src/components/AchievementModal.tsx deleted file mode 100644 index 72d249c..0000000 --- a/groups/ACAAB/src/components/AchievementModal.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import type { ReactNode } from 'react'; -import { X, Trophy, Calendar, Award, Users, BookOpen, Tag } from 'lucide-react'; -import type { Achievement } from '../data'; -import { useLang } from '../context/LanguageContext'; - -interface AchievementModalProps { - achievement: Achievement | null; - onClose: () => void; -} - -function InfoRow({ icon, label, value }: { icon: ReactNode; label: string; value: string }) { - return ( -
- {icon} -
-

{label}

-

{value}

-
-
- ); -} - -export default function AchievementModal({ achievement, onClose }: AchievementModalProps) { - const { t } = useLang(); - if (!achievement) return null; - - return ( -
-
e.stopPropagation()} - > - {/* Image header */} -
- {achievement.title} -
- - {/* Close button */} - - - {/* Rank badge */} -
- - - {achievement.rank} - - - {achievement.level} - -
-
- - {/* Content */} -
-
- - {achievement.category} - -
-

{achievement.title}

- - {/* Info grid */} -
- } label={t.modal.tim} value={achievement.team} /> - {achievement.nim && ( - } label={t.modal.nim} value={achievement.nim} /> - )} - } label={t.modal.angkatan} value={achievement.generation} /> - } label={t.modal.tahun} value={String(achievement.year)} /> - } label={t.modal.kompetisi} value={achievement.competition} /> - } label={t.modal.bidang} value={achievement.category} /> -
- - {/* Members list */} - {achievement.members && achievement.members.length > 0 && ( -
-

Anggota Tim

-
    - {achievement.members.map((m, i) => ( -
  • - - {m.nama.charAt(0).toUpperCase()} - -
    - {m.nama} - {m.angkatan && Angkatan {m.angkatan}} -
    -
  • - ))} -
-
- )} - - {/* Description */} -
-

{t.modal.deskripsi}

-

{achievement.description.replace(/\*\*/g, '')}

-
- - {/* Close button */} - -
-
-
- ); -} diff --git a/groups/ACAAB/src/components/CTA.tsx b/groups/ACAAB/src/components/CTA.tsx deleted file mode 100644 index 1dc7050..0000000 --- a/groups/ACAAB/src/components/CTA.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { MessageCircle } from 'lucide-react'; -import { useLang } from '../context/LanguageContext'; - -const WA_NUMBER = '6285123456789'; // Ganti dengan nomor WhatsApp resmi - -export default function CTA() { - const { t, lang } = useLang(); - const waLink = `https://wa.me/${WA_NUMBER}?text=${encodeURIComponent(lang === 'id' ? 'Halo, saya ingin mendaftarkan prestasi atau karya saya.' : 'Hello, I would like to register my achievement or work.')}`; - - return ( -
-
-
- - {/* LEFT TEXT */} -
- - {t.cta.badge} - -

- {t.cta.title} -

-

- {t.cta.desc} -

-
- - {/* RIGHT CTA */} - - -
-
-
- ); -} \ No newline at end of file diff --git a/groups/ACAAB/src/components/Footer.tsx b/groups/ACAAB/src/components/Footer.tsx deleted file mode 100644 index c5ac035..0000000 --- a/groups/ACAAB/src/components/Footer.tsx +++ /dev/null @@ -1,109 +0,0 @@ -import { useLang } from '../context/LanguageContext'; - -export default function Footer() { - const { t } = useLang(); - const currentYear = new Date().getFullYear(); - - return ( - - ); -} \ No newline at end of file diff --git a/groups/ACAAB/src/components/Header.tsx b/groups/ACAAB/src/components/Header.tsx deleted file mode 100644 index 25d2472..0000000 --- a/groups/ACAAB/src/components/Header.tsx +++ /dev/null @@ -1,164 +0,0 @@ -import { useState, type MouseEvent } from 'react'; -import { Search, Menu, X, ChevronDown, Globe } from 'lucide-react'; -import { useLang } from '../context/LanguageContext'; - -export default function Header() { - const [isOpen, setIsOpen] = useState(false); - const { lang, t, toggleLang } = useLang(); - - const navLinks = [ - { label: t.nav.tentangKami, hasDropdown: true, href: '#' }, - { label: t.nav.program, hasDropdown: true, href: '#' }, - { label: t.nav.sdm, hasDropdown: false, href: '#' }, - { label: t.nav.fasilitas, hasDropdown: false, href: '#' }, - { label: t.nav.karyaAgenda, hasDropdown: false, href: '#achievement-grid-section' }, - { label: t.nav.kontak, hasDropdown: false, href: '#kontak' }, - ]; - - const handleSmoothScroll = (e: MouseEvent, href: string) => { - if (href.startsWith('#') && href.length > 1) { - e.preventDefault(); - const target = document.querySelector(href); - if (target) { - target.scrollIntoView({ behavior: 'smooth', block: 'start' }); - setIsOpen(false); - } - } - }; - - return ( - <> - - - {/* Spacer */} -
- - ); -} diff --git a/groups/ACAAB/src/components/Hero.tsx b/groups/ACAAB/src/components/Hero.tsx deleted file mode 100644 index 1b5fb4f..0000000 --- a/groups/ACAAB/src/components/Hero.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { useLang } from '../context/LanguageContext'; - -export default function Hero() { - const { t } = useLang(); - - return ( -
-
- -
- - {/* LEFT CONTENT */} -
- - {t.hero.badge} - -

- {t.hero.title} -

-

- {t.hero.desc} -

-
- - {/* RIGHT IMAGE */} -
- {/* Glow behind image */} -
- -
- Mahasiswa Informatika UNTAN - {/* Gradient fade bawah */} -
- {/* Gradient fade kiri */} -
-
-
- -
-
- - {/* Decorative Glow */} -
-
- ); -} \ No newline at end of file diff --git a/groups/ACAAB/src/components/ProjectCarousel.tsx b/groups/ACAAB/src/components/ProjectCarousel.tsx deleted file mode 100644 index 58876c4..0000000 --- a/groups/ACAAB/src/components/ProjectCarousel.tsx +++ /dev/null @@ -1,378 +0,0 @@ -import { useData } from '../context/DataContext'; -import { useRef, useState, useMemo } from 'react'; -import { ArrowRight, ChevronLeft, ChevronRight, ChevronDown, User, Tag, Calendar, ExternalLink, Filter, Search, X } from 'lucide-react'; -import { type Project } from '../data'; -import ProjectModal from './ProjectModal'; -import { useLang } from '../context/LanguageContext'; - -const INITIAL_COUNT = 6; -const LOAD_MORE_COUNT = 3; - - - -export default function ProjectCarousel() { - const { t } = useLang(); - const { projects, loading, error, refetch } = useData(); - const scrollRef = useRef(null); - const [selectedProject, setSelectedProject] = useState(null); - const [visibleCount, setVisibleCount] = useState(INITIAL_COUNT); - - // Filter state - const [searchQuery, setSearchQuery] = useState(''); - const [filterCategory, setFilterCategory] = useState(''); - const [filterYear, setFilterYear] = useState(''); - - const categories = useMemo( - () => [...new Set(projects.flatMap((p) => p.category))].sort(), - [projects] - ); - - const years = useMemo( - () => [...new Set(projects.map((p) => p.year))].sort((a: number, b: number) => b - a), - [projects] - ); - - // Filter + search logic - const filtered = useMemo(() => { - const q = searchQuery.toLowerCase().trim(); - return projects.filter((p) => { - const matchSearch = - !q || - p.title.toLowerCase().includes(q) || - p.studentName.toLowerCase().includes(q) || - p.category.join(' ').toLowerCase().includes(q) || - p.description.toLowerCase().includes(q); - const matchCategory = !filterCategory || p.category.includes(filterCategory); - const matchYear = !filterYear || String(p.year) === filterYear; - return matchSearch && matchCategory && matchYear; - }); - }, [searchQuery, filterCategory, filterYear, projects]); - - const visibleProjects = filtered.slice(0, visibleCount); - const hasMore = visibleCount < filtered.length; - const isFiltered = searchQuery || filterCategory || filterYear; - - const resetFilters = () => { - setSearchQuery(''); - setFilterCategory(''); - setFilterYear(''); - setVisibleCount(INITIAL_COUNT); - }; - - const handleFilterChange = (setter: (v: string) => void) => (v: string) => { - setter(v); - setVisibleCount(INITIAL_COUNT); - }; - - const handleLoadMore = () => setVisibleCount((prev) => prev + LOAD_MORE_COUNT); - - const handleShowLess = () => { - setVisibleCount(INITIAL_COUNT); - document.getElementById('portofolio')?.scrollIntoView({ behavior: 'smooth', block: 'start' }); - }; - - const scroll = (direction: 'left' | 'right') => { - const container = scrollRef.current; - if (!container) return; - const cardWidth = container.firstElementChild - ? (container.firstElementChild as HTMLElement).offsetWidth + 24 - : 400; - container.scrollBy({ left: direction === 'right' ? cardWidth : -cardWidth, behavior: 'smooth' }); - }; - - return ( - <> - {/* Project Modal */} - setSelectedProject(null)} /> - -
-
- {/* Header row */} -
-
-

- {t.project.sectionTitle} -

-

- {t.project.sectionDesc} -

-
- - {/* Scroll control buttons */} -
- - -
-
- - - {/* Filter + Search Section */} -
- {/* Row 1: Label + Reset */} -
-
- - {t.project.filterTitle} -
- {isFiltered && ( - - )} -
- - {/* Row 2: Search bar */} -
- - { setSearchQuery(e.target.value); setVisibleCount(INITIAL_COUNT); }} - placeholder={t.project.searchPlaceholder} - className="w-full bg-slate-50 text-slate-700 text-sm rounded py-2 pl-9 pr-4 border border-slate-200 focus:outline-none focus:ring-2 focus:ring-primary-gold" - /> - {searchQuery && ( - - )} -
- - {/* Row 3: Dropdowns */} -
- {/* Category Filter */} -
- - -
- - {/* Year Filter */} -
- - -
-
-
- - {/* Results count */} - {isFiltered && ( -

- {t.project.showing}{' '} - {filtered.length}{' '} - {t.project.matching} -

- )} - - {/* Cards */} - {loading ? ( -
- {[1, 2, 3].map((n) => ( -
-
-
-
-
-
-
-
-
-
-
-
- ))} -
- ) : error ? ( -
-

Gagal memuat portofolio

-

{error}

- -
- ) : visibleProjects.length === 0 ? ( -
-

{t.project.noData}

-

{t.project.noDataSub}

-
- ) : ( - <> - {/* Scrollable cards */} -
- {visibleProjects.map((project) => ( -
-
- - {/* Image */} -
- {project.title} { - (e.target as HTMLImageElement).src = 'https://placehold.co/800x600/003150/FDB813?text=Informatika+UNTAN'; - }} - /> -
-

- {project.title} -

- {project.category && project.category.length > 0 && ( -
- {project.category.map((cat, i) => ( - - - {cat} - - ))} -
- )} -
-
- - {/* Body */} -
- {/* Meta row */} -
- {project.studentName && ( - - - {project.studentName} - - )} - {project.year && ( - - - {project.year} - - )} -
- -

- {project.description} -

- - {/* Actions */} -
- - - {project.link && ( - - - {t.project.visitLink} - - )} -
-
-
- ))} -
- - {/* Scroll hint */} -

- {t.project.scrollHint} -

- - {/* Load More / Show Less */} -
- {hasMore && ( - - )} - - {!hasMore && visibleProjects.length > 0 && filtered.length > INITIAL_COUNT && ( -

- {t.project.showing} {filtered.length} {t.project.allShown} -

- )} - - {visibleCount > INITIAL_COUNT && visibleProjects.length > 0 && ( - - )} -
- - )} -
-
- - ); -} diff --git a/groups/ACAAB/src/components/ProjectModal.tsx b/groups/ACAAB/src/components/ProjectModal.tsx deleted file mode 100644 index aa42218..0000000 --- a/groups/ACAAB/src/components/ProjectModal.tsx +++ /dev/null @@ -1,151 +0,0 @@ -import type { ReactNode } from 'react'; -import { X, ExternalLink, Users, BookOpen, Calendar, Tag, FileText } from 'lucide-react'; -import type { Project } from '../data'; -import { useLang } from '../context/LanguageContext'; - -interface ProjectModalProps { - project: Project | null; - onClose: () => void; -} - -function InfoRow({ icon, label, value }: { icon: ReactNode; label: string; value: string }) { - return ( -
- {icon} -
-

{label}

-

{value}

-
-
- ); -} - -export default function ProjectModal({ project, onClose }: ProjectModalProps) { - const { t } = useLang(); - if (!project) return null; - - return ( -
-
e.stopPropagation()} - > - {/* Image header */} -
- {project.title} -
- - {/* Close button */} - - - {/* Category badge */} - {project.category && project.category.length > 0 && ( -
- {project.category.map((cat, i) => ( - - - {cat} - - ))} -
- )} -
- - {/* Content */} -
-

{project.title}

- - {/* Info grid */} -
- {project.studentName && ( - } label={t.modal.mahasiswa} value={project.studentName} /> - )} - {project.nim && ( - } label={t.modal.nim} value={project.nim} /> - )} - {project.year && ( - } label={t.modal.tahun} value={String(project.year)} /> - )} - {project.category && project.category.length > 0 && ( - } label={t.modal.bidang} value={project.category.join(', ')} /> - )} -
- - {/* Members list */} - {project.members && project.members.length > 0 && ( -
-

Anggota Tim

-
    - {project.members.map((m, i) => ( -
  • - - {m.nama.charAt(0).toUpperCase()} - -
    - {m.nama} - {m.nim && {m.nim}} -
    -
  • - ))} -
-
- )} - - {/* Description */} -
-

{t.modal.deskripsi}

-

{project.description}

- {project.catatan && ( -
-

Catatan Tambahan

-

{project.catatan}

-
- )} -
- - {/* Project link */} - {project.link ? ( - - - {t.project.visitLink} - - ) : ( -
- - {t.project.noLink} -
- )} - - -
-
-
- ); -} diff --git a/groups/ACAAB/src/components/Stats.tsx b/groups/ACAAB/src/components/Stats.tsx deleted file mode 100644 index 75577bb..0000000 --- a/groups/ACAAB/src/components/Stats.tsx +++ /dev/null @@ -1,174 +0,0 @@ -import type { ReactNode } from 'react'; -import { useEffect, useRef, useState } from 'react'; -import { useLang } from '../context/LanguageContext'; -import { useData } from '../context/DataContext'; -import { BookOpen, Award, Globe2 } from 'lucide-react'; - -/* ── Animated counter hook ─────────────────────────────────────────────── */ -function useCountUp(target: number, duration = 1600) { - const [count, setCount] = useState(0); - const elRef = useRef(null); - const triggered = useRef(false); - - useEffect(() => { - triggered.current = false; - let animationFrameId: number; - let observer: IntersectionObserver; - - observer = new IntersectionObserver( - ([entry]) => { - if (entry.isIntersecting && !triggered.current) { - triggered.current = true; - - let startTimestamp: number | null = null; - - const step = (timestamp: number) => { - if (!startTimestamp) startTimestamp = timestamp; - const progress = Math.min((timestamp - startTimestamp) / duration, 1); - - // easeOutQuart easing function - const easeProgress = 1 - Math.pow(1 - progress, 4); - - setCount(Math.round(target * easeProgress)); - - if (progress < 1) { - animationFrameId = requestAnimationFrame(step); - } else { - setCount(target); - } - }; - - animationFrameId = requestAnimationFrame(step); - } - }, - { threshold: 0.4 }, - ); - - if (elRef.current) observer.observe(elRef.current); - - return () => { - observer.disconnect(); - if (animationFrameId) cancelAnimationFrame(animationFrameId); - }; - }, [target, duration]); - - return { count, elRef }; -} - -/* ── Big stat ──────────────────────────────────────────────────────────── */ -function BigStat({ value, label }: { value: number; label: string }) { - const { count, elRef } = useCountUp(value); - return ( -
-
- {count} -
-
- {label} -
-
- ); -} - -/* ── Level row ──────────────────────────────────────────────────────────── */ -function LevelRow({ label, value, delay = 0 }: { label: string; value: number; delay?: number }) { - const { count, elRef } = useCountUp(value, 1600 + delay); - return ( -
- - {label} - - - {count} - -
- ); -} - -/* ── Dividers ───────────────────────────────────────────────────────────── */ -function VDivider() { - return ( -
-
-
- ); -} -function HDivider() { - return
; -} - -/* ── Main export ────────────────────────────────────────────────────────── */ -export default function Stats() { - const { t, lang } = useLang(); - const { achievements, projects } = useData(); - const totalPrestasi = achievements.length; - const totalProyek = projects.length; - const internasional = achievements.filter(a => a.level === 'Internasional').length; - const nasional = achievements.filter(a => a.level === 'Nasional').length; - const regional = achievements.filter(a => a.level === 'Regional').length; - - const today = new Date().toLocaleDateString( - lang === 'id' ? 'id-ID' : 'en-US', - { day: 'numeric', month: 'long', year: 'numeric' } - ); - const dataNote = lang === 'id' - ? `Data Terkumpul Per ${today}` - : `Data Collected As Of ${today}`; - - return ( -
- {/* ── Stats bar ─────────────────────────────────────────────────── */} -
-
-
-
- - {/* ① Total Prestasi */} -
- -
- - - - - {/* ② Total Proyek */} -
- -
- - - - - {/* ③ Level breakdown */} -
-
- - - -
-
- -
-
-
- - {/* Keterangan tanggal — di luar kotak, rata kanan */} -

- {dataNote} -

-
- ); -} - -/* ── Fact card helper ───────────────────────────────────────────────────── */ -function FactCard({ icon, label, value }: { icon: ReactNode; label: string; value: string }) { - return ( -
- {icon} -
-

{label}

-

{value}

-
-
- ); -} \ No newline at end of file diff --git a/groups/ACAAB/src/context/DataContext.tsx b/groups/ACAAB/src/context/DataContext.tsx deleted file mode 100644 index bdf7f11..0000000 --- a/groups/ACAAB/src/context/DataContext.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react'; -import { Achievement, Project } from '../data'; -import { fetchAchievementsFromAPI, fetchProjectsFromAPI } from '../services/api'; - -interface DataContextType { - achievements: Achievement[]; - projects: Project[]; - loading: boolean; - error: string | null; - refetch: () => Promise; -} - -const DataContext = createContext(undefined); - -export function DataProvider({ children }: { children: ReactNode }) { - const [achievements, setAchievements] = useState([]); - const [projects, setProjects] = useState([]); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - - const loadData = async () => { - setLoading(true); - setError(null); - - try { - const results = await Promise.allSettled([ - fetchAchievementsFromAPI(), - fetchProjectsFromAPI(), - ]); - - const achievementsRes = results[0]; - const projectsRes = results[1]; - - let hasError = false; - let errorMsgs: string[] = []; - - if (achievementsRes.status === 'fulfilled') { - setAchievements(achievementsRes.value); - } else { - console.error('Failed to fetch achievements:', achievementsRes.reason); - errorMsgs.push('Gagal memuat data prestasi.'); - hasError = true; - } - - if (projectsRes.status === 'fulfilled') { - setProjects(projectsRes.value); - } else { - console.error('Failed to fetch projects:', projectsRes.reason); - errorMsgs.push('Gagal memuat data portofolio.'); - hasError = true; - } - - if (hasError) { - setError(errorMsgs.join(' ')); - } - } catch (err: any) { - console.error('Unexpected error loading API data:', err); - setError('Terjadi kesalahan yang tidak terduga saat memuat data.'); - } finally { - setLoading(false); - } - }; - - useEffect(() => { - loadData(); - }, []); - - return ( - - {children} - - ); -} - -export function useData() { - const context = useContext(DataContext); - if (context === undefined) { - throw new Error('useData must be used within a DataProvider'); - } - return context; -} diff --git a/groups/ACAAB/src/context/LanguageContext.tsx b/groups/ACAAB/src/context/LanguageContext.tsx deleted file mode 100644 index c24663e..0000000 --- a/groups/ACAAB/src/context/LanguageContext.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { createContext, useContext, useState, useEffect, type ReactNode } from 'react'; -import { translations, type Lang, type Translations } from '../i18n'; - -const KIT_STORAGE_KEY = 'if_untan_lang'; - -function readKitLang(): Lang { - const saved = localStorage.getItem(KIT_STORAGE_KEY); - if (saved === 'id' || saved === 'en') return saved; - const browser = (navigator.language || 'id').toLowerCase(); - return browser.startsWith('en') ? 'en' : 'id'; -} - -interface LanguageContextType { - lang: Lang; - t: Translations; - toggleLang: () => void; -} - -const LanguageContext = createContext(null); - -export function LanguageProvider({ children }: { children: ReactNode }) { - const [lang, setLang] = useState(readKitLang); - - // Sync dengan kit's language toggle (tombol ID/EN di navbar) - useEffect(() => { - const handler = (e: Event) => { - const detail = (e as CustomEvent<{ lang: string }>).detail; - if (detail?.lang === 'en' || detail?.lang === 'id') { - setLang(detail.lang as Lang); - } - }; - document.addEventListener('languageChanged', handler); - return () => document.removeEventListener('languageChanged', handler); - }, []); - - const toggleLang = () => setLang((prev) => (prev === 'id' ? 'en' : 'id')); - - return ( - - {children} - - ); -} - -export function useLang() { - const ctx = useContext(LanguageContext); - if (!ctx) throw new Error('useLang must be used within LanguageProvider'); - return ctx; -} diff --git a/groups/ACAAB/src/data.ts b/groups/ACAAB/src/data.ts deleted file mode 100644 index bb2cf91..0000000 --- a/groups/ACAAB/src/data.ts +++ /dev/null @@ -1,257 +0,0 @@ -export interface Achievement { - id: string; - title: string; - category: string; - competition: string; - rank: string; - year: number; - level: 'Nasional' | 'Internasional' | 'Regional'; - description: string; - team: string; - nim?: string; - generation: string; - image: string; - avatar: string; - members?: Array<{nama: string; angkatan?: number}>; -} - -export interface Project { - id: string; - title: string; - studentName: string; - nim?: string; - year: number; - category: string[]; - description: string; - image: string; - link?: string; - catatan?: string; - members?: Array<{nama: string; nim?: string}>; -} - -/* -export const ACHIEVEMENTS: Achievement[] = [ - { - id: '1', - title: 'Gemastik XVI: Smart Agriculture AI System', - category: 'Kecerdasan Buatan', - competition: 'Gemastik XVI', - rank: 'Juara 1', - year: 2023, - level: 'Nasional', - description: 'Sistem deteksi dini penyakit tanaman menggunakan Computer Vision dan Deep Learning untuk membantu petani meningkatkan hasil panen secara berkelanjutan.', - team: 'Tim Bima Sakti', - nim: 'H1031201001', - generation: 'Angkatan 2020', - image: 'https://picsum.photos/seed/ai-agri/800/600', - avatar: 'BS', - }, - { - id: '2', - title: 'ASEAN Cyber Shield Hackathon', - category: 'Cyber Security', - competition: 'ASEAN Cyber Shield', - rank: '10 Besar', - year: 2023, - level: 'Internasional', - description: 'Mengembangkan solusi pertahanan siber proaktif terhadap ancaman zero-day dalam kompetisi keamanan siber tingkat regional Asia Tenggara.', - team: 'DefendUntan', - nim: 'H1031211042', - generation: 'Angkatan 2021', - image: 'https://picsum.photos/seed/cyber/800/600', - avatar: 'DU', - }, - { - id: '3', - title: 'Innovation in Image Processing for Healthcare', - category: 'Kecerdasan Buatan', - competition: 'PIMNAS 36', - rank: 'Medali Emas', - year: 2024, - level: 'Nasional', - description: 'Riset mengenai otomatisasi identifikasi sel kanker melalui citra mikroskopis menggunakan arsitektur Neural Network yang dioptimalkan.', - team: 'Alpha Medical', - nim: 'H1031221015', - generation: 'Angkatan 2022', - image: 'https://picsum.photos/seed/medical/800/600', - avatar: 'AM', - }, - { - id: '4', - title: 'Smart Waste Management – IOT Challenge', - category: 'IoT', - competition: 'IOT Challenge ITS 2024', - rank: 'Juara 2', - year: 2024, - level: 'Nasional', - description: 'Sistem pengelolaan sampah cerdas berbasis sensor IoT yang mampu mendeteksi kapasitas tempat sampah dan mengoptimalkan rute pengangkutan sampah kota.', - team: 'Tim GreenTech', - nim: 'H1031211058', - generation: 'Angkatan 2021', - image: 'https://picsum.photos/seed/waste/800/600', - avatar: 'GT', - }, - { - id: '5', - title: 'UXID National Design Challenge', - category: 'Software Engineering', - competition: 'UXID National Challenge', - rank: 'Finalis Top 5', - year: 2023, - level: 'Nasional', - description: 'Desain antarmuka aplikasi kesehatan mental yang berpusat pada pengguna remaja, mengintegrasikan prinsip aksesibilitas dan human-centered design.', - team: 'Tim Pixel Prima', - nim: 'H1031221033', - generation: 'Angkatan 2022', - image: 'https://picsum.photos/seed/ux/800/600', - avatar: 'PP', - }, - { - id: '6', - title: 'Pekan Ilmiah Mahasiswa – Lomba Antar Kampus Kalbar', - category: 'Software Engineering', - competition: 'PIM Kalbar 2024', - rank: 'Juara 1', - year: 2024, - level: 'Regional', - description: 'Aplikasi sistem informasi keuangan UMKM berbasis cloud yang memudahkan pelaku usaha kecil menengah di Kalimantan Barat dalam pengelolaan keuangan digital.', - team: 'Tim Borneo Dev', - nim: 'H1031231005', - generation: 'Angkatan 2023', - image: 'https://picsum.photos/seed/finance/800/600', - avatar: 'BD', - }, - { - id: '7', - title: 'International AI for Good Hackathon – UNESCO', - category: 'Kecerdasan Buatan', - competition: 'AI for Good UNESCO', - rank: 'Top 10 Global', - year: 2024, - level: 'Internasional', - description: 'Solusi AI untuk deteksi deforestasi hutan tropis secara real-time menggunakan citra satelit dan machine learning, mendukung pelestarian lingkungan global.', - team: 'Tim EarthAI', - nim: 'H1031201022', - generation: 'Angkatan 2020', - image: 'https://picsum.photos/seed/deforest/800/600', - avatar: 'EA', - }, - { - id: '8', - title: 'Kompetisi Antar Kampus – Data Science Cup Untan', - category: 'Data', - competition: 'Data Science Cup 2023', - rank: 'Juara 2', - year: 2023, - level: 'Regional', - description: 'Analisis prediktif kepadatan lalu lintas Kota Pontianak menggunakan model time-series dan visualisasi data interaktif untuk mendukung kebijakan transportasi kota.', - team: 'Tim DataNesia', - nim: 'H1031211077', - generation: 'Angkatan 2021', - image: 'https://picsum.photos/seed/datascience/800/600', - avatar: 'DN', - }, -]; - -export const PROJECTS: Project[] = [ - { - id: 'p1', - title: 'IoT Environment Monitoring System', - studentName: 'Reza Firmansyah', - nim: 'H1031201031', - year: 2023, - category: 'IoT', - description: 'Platform pemantauan kualitas udara dan tanah secara real-time di area gambut Kalimantan Barat menggunakan sensor terdistribusi.', - image: 'https://picsum.photos/seed/iot/800/600', - link: 'https://github.com/informatika-untan/iot-env-monitor', - }, - { - id: 'p2', - title: 'Smart City Data Analytics', - studentName: 'Anisa Putri Rahmadani', - nim: 'H1031211019', - year: 2023, - category: 'Data', - description: 'Visualisasi dan analisis mobilitas kendaraan di Kota Pontianak untuk mengoptimalkan manajemen lalu lintas perkotaan.', - image: 'https://picsum.photos/seed/analytics/800/600', - }, - { - id: 'p3', - title: 'Open Education Platform', - studentName: 'Dimas Aryo Wicaksono', - nim: 'H1031221044', - year: 2024, - category: 'Software Engineering', - description: 'Sistem manajemen pembelajaran inklusif yang dirancang khusus untuk memenuhi standar kurikulum berbasis OBE (Outcome-Based Education).', - image: 'https://picsum.photos/seed/edu/800/600', - link: 'https://github.com/informatika-untan/open-edu', - }, - { - id: 'p4', - title: 'AI-Powered Crop Disease Detector', - studentName: 'Siti Nur Halimah', - nim: 'H1031201008', - year: 2024, - category: 'Kecerdasan Buatan', - description: 'Aplikasi mobile berbasis deep learning untuk mendeteksi penyakit tanaman padi secara instan hanya dari foto daun menggunakan kamera smartphone.', - image: 'https://picsum.photos/seed/cropai/800/600', - link: 'https://github.com/informatika-untan/crop-detector', - }, - { - id: 'p5', - title: 'Borneo Wildlife Tracker', - studentName: 'Ahmad Fauzi', - nim: 'H1031211063', - year: 2023, - category: 'IoT', - description: 'Sistem pelacakan satwa liar Kalimantan menggunakan GPS collar dan dashboard web real-time untuk mendukung riset konservasi fauna.', - image: 'https://picsum.photos/seed/wildlife/800/600', - }, - { - id: 'p6', - title: 'Digital UMKM Marketplace', - studentName: 'Lestari Dewi Kusuma', - nim: 'H1031221028', - year: 2024, - category: 'Software Engineering', - description: 'Platform e-commerce khusus UMKM Kalimantan Barat dengan fitur manajemen stok, laporan keuangan otomatis, dan integrasi pembayaran digital.', - image: 'https://picsum.photos/seed/marketplace/800/600', - link: 'https://github.com/informatika-untan/umkm-marketplace', - }, - { - id: 'p7', - title: 'Campus Navigation AR', - studentName: 'Bagas Prasetyo', - nim: 'H1031231012', - year: 2024, - category: 'Software Engineering', - description: 'Aplikasi augmented reality untuk navigasi kampus UNTAN yang memandu mahasiswa baru menemukan ruang kelas, lab, dan fasilitas secara interaktif.', - image: 'https://picsum.photos/seed/ar-nav/800/600', - }, - { - id: 'p8', - title: 'Flood Early Warning System', - studentName: 'Yuni Karlina', - nim: 'H1031211088', - year: 2023, - category: 'IoT', - description: 'Sistem peringatan dini banjir berbasis jaringan sensor IoT di sepanjang Sungai Kapuas yang mengirim notifikasi real-time ke warga sekitar.', - image: 'https://picsum.photos/seed/flood/800/600', - link: 'https://github.com/informatika-untan/flood-warning', - }, - { - id: 'p9', - title: 'Mental Health Support Chatbot', - studentName: 'Rizky Pratama', - nim: 'H1031221051', - year: 2024, - category: 'Kecerdasan Buatan', - description: 'Chatbot AI empatik untuk dukungan kesehatan mental mahasiswa, dilengkapi deteksi sentimen dan sistem rujukan ke konselor kampus.', - image: 'https://picsum.photos/seed/mentalbot/800/600', - }, -]; -*/ - -export const ACHIEVEMENTS: Achievement[] = []; -export const PROJECTS: Project[] = []; - diff --git a/groups/ACAAB/src/gambar/hero.png b/groups/ACAAB/src/gambar/hero.png deleted file mode 100644 index 33f70e0..0000000 Binary files a/groups/ACAAB/src/gambar/hero.png and /dev/null differ diff --git a/groups/ACAAB/src/i18n.ts b/groups/ACAAB/src/i18n.ts deleted file mode 100644 index 6447a4d..0000000 --- a/groups/ACAAB/src/i18n.ts +++ /dev/null @@ -1,215 +0,0 @@ -export type Lang = 'id' | 'en'; - -export const translations = { - id: { - nav: { - tentangKami: 'Tentang Kami', - program: 'Program', - sdm: 'SDM', - fasilitas: 'Fasilitas', - karyaAgenda: 'Karya & Agenda', - kontak: 'Kontak', - satuUntan: 'SATU UNTAN', - }, - hero: { - badge: 'MAHASISWA & PRESTASI', - title: 'Sorotan dan Prestasi Karya Mahasiswa', - desc: 'Galeri pencapaian, penghargaan, dan portofolio inovasi teknologi yang dikembangkan oleh mahasiswa Program Studi Informatika Universitas Tanjungpura.', - }, - about: { - title: 'Tentang Program Studi', - desc: 'Program Studi Informatika Universitas Tanjungpura adalah program yang berfokus pada pengembangan ilmu komputer, rekayasa perangkat lunak, dan inovasi teknologi informasi. Mahasiswa kami aktif berprestasi di tingkat regional, nasional, maupun internasional, membawa nama baik Kalimantan Barat ke panggung dunia.', - tag: 'Program Studi', - }, - stats: { - totalPrestasi: 'Total Prestasi', - totalProyek: 'Total Proyek Mahasiswa', - }, - achievement: { - sectionTitle: 'Prestasi Mahasiswa', - sectionDesc: 'Daftar pencapaian dan penghargaan yang diraih oleh mahasiswa Informatika UNTAN di berbagai kompetisi.', - filterTitle: 'Filter Prestasi', - searchPlaceholder: 'Cari nama, prestasi, bidang...', - allLevel: 'Semua Tingkat', - allField: 'Semua Bidang', - allYear: 'Semua Tahun', - resetFilter: 'Reset Filter', - noData: 'Tidak ada prestasi yang sesuai filter.', - noDataSub: 'Coba ubah pilihan filter atau kata kunci pencarian.', - showing: 'Menampilkan', - matching: 'prestasi yang sesuai filter', - loadMore: 'Muat Lebih Banyak', - showLess: 'Tampilkan Lebih Sedikit', - allShown: 'prestasi telah ditampilkan.', - readMore: 'Baca Selengkapnya', - }, - project: { - sectionTitle: 'Top Projects & Portofolio', - sectionDesc: 'Jelajahi inovasi digital dan aplikasi nyata yang dikembangkan oleh mahasiswa Informatika UNTAN.', - scrollHint: '← Geser untuk melihat lebih banyak →', - explore: 'Telusuri Lanjut', - visitLink: 'Kunjungi Proyek', - noLink: 'Link tidak tersedia', - by: 'oleh', - readMore: 'Baca Selengkapnya', - filterTitle: 'Filter Portofolio', - searchPlaceholder: 'Cari judul, mahasiswa, bidang...', - allField: 'Semua Bidang', - allYear: 'Semua Tahun', - resetFilter: 'Reset Filter', - noData: 'Tidak ada proyek yang sesuai filter.', - noDataSub: 'Coba ubah pilihan filter atau kata kunci pencarian.', - showing: 'Menampilkan', - matching: 'proyek yang sesuai filter', - loadMore: 'Muat Lebih Banyak', - showLess: 'Tampilkan Lebih Sedikit', - allShown: 'proyek telah ditampilkan.', - }, - modal: { - close: 'Tutup', - nim: 'NIM', - angkatan: 'Angkatan', - tahun: 'Tahun', - tingkat: 'Tingkat', - bidang: 'Bidang', - kompetisi: 'Kompetisi', - peringkat: 'Peringkat', - tim: 'Tim / Nama', - deskripsi: 'Deskripsi', - mahasiswa: 'Mahasiswa', - link: 'Link Proyek', - namaProyek: 'Nama Proyek', - }, - cta: { - badge: 'HUBUNGI KAMI', - title: 'Ingin Tahu Lebih Lanjut?', - desc: 'Tertarik bergabung dengan Program Studi Informatika UNTAN, mendaftarkan prestasi mahasiswa, atau menjalin kerja sama? Hubungi kami sekarang.', - waButton: 'Chat via WhatsApp', - webButton: 'Kunjungi Website Kami', - contactTitle: 'Informasi Kontak', - emailLabel: 'Email', - email: 'informatika@untan.ac.id', - phone: '+62 561 577963', - address: 'Jl. Prof. Dr. H. Hadari Nawawi, Bansir Laut, Pontianak Tenggara, 78124', - }, - footer: { - desc: 'Program Studi Informatika, Universitas Tanjungpura.\nJl. Prof. Dr. H. Hadari Nawawi, Bansir Laut, Kec. Pontianak Tenggara, Kota Pontianak, Kalimantan Barat 78124', - kategori: 'Kategori', - tautan: 'Tautan Penting', - berita: 'Berita & Informasi', - pengumuman: 'Pengumuman Akademik', - prestasi: 'Prestasi Mahasiswa', - siakad: 'SIAKAD UNTAN', - elearning: 'E-Learning UNTAN', - privacy: 'Kebijakan Privasi', - terms: 'Syarat & Ketentuan', - rights: 'All rights reserved.', - }, - }, - - en: { - nav: { - tentangKami: 'About Us', - program: 'Programs', - sdm: 'Human Resources', - fasilitas: 'Facilities', - karyaAgenda: 'Works & Events', - kontak: 'Contact', - satuUntan: 'SATU UNTAN', - }, - hero: { - badge: 'STUDENTS & ACHIEVEMENTS', - title: 'Student Spotlights & Achievements', - desc: 'Gallery of accomplishments, awards, and technology innovation portfolios developed by Informatics students of Tanjungpura University.', - }, - about: { - title: 'About the Study Program', - desc: 'The Informatics Study Program at Tanjungpura University focuses on computer science, software engineering, and information technology innovation. Our students actively excel at regional, national, and international levels, representing West Kalimantan on the world stage.', - tag: 'Study Program', - }, - stats: { - totalPrestasi: 'Total Achievements', - totalProyek: 'Total Student Projects', - }, - achievement: { - sectionTitle: 'Student Achievements', - sectionDesc: 'List of awards and accomplishments by Informatics UNTAN students in various competitions.', - filterTitle: 'Filter Achievements', - searchPlaceholder: 'Search name, achievement, field...', - allLevel: 'All Levels', - allField: 'All Fields', - allYear: 'All Years', - resetFilter: 'Reset Filter', - noData: 'No achievements match the current filter.', - noDataSub: 'Try adjusting your filter or search keyword.', - showing: 'Showing', - matching: 'matching achievements', - loadMore: 'Load More', - showLess: 'Show Less', - allShown: 'achievements displayed.', - readMore: 'Read More', - }, - project: { - sectionTitle: 'Top Projects & Portfolios', - sectionDesc: 'Explore digital innovations and real-world applications developed by Informatics UNTAN students.', - scrollHint: '← Swipe to see more →', - explore: 'Explore More', - visitLink: 'Visit Project', - noLink: 'Link unavailable', - by: 'by', - readMore: 'Read More', - filterTitle: 'Filter Portfolios', - searchPlaceholder: 'Search title, student, field...', - allField: 'All Fields', - allYear: 'All Years', - resetFilter: 'Reset Filter', - noData: 'No projects match the current filter.', - noDataSub: 'Try adjusting your filter or search keyword.', - showing: 'Showing', - matching: 'matching projects', - loadMore: 'Load More', - showLess: 'Show Less', - allShown: 'projects displayed.', - }, - modal: { - close: 'Close', - nim: 'Student ID', - angkatan: 'Batch', - tahun: 'Year', - tingkat: 'Level', - bidang: 'Field', - kompetisi: 'Competition', - peringkat: 'Rank', - tim: 'Team / Name', - deskripsi: 'Description', - mahasiswa: 'Student', - link: 'Project Link', - namaProyek: 'Project Name', - }, - cta: { - badge: 'CONTACT US', - title: 'Want to Know More?', - desc: 'Interested in joining the Informatics Study Program at UNTAN, registering a student achievement, or establishing a partnership? Contact us now.', - waButton: 'Chat via WhatsApp', - webButton: 'Visit Our Website', - contactTitle: 'Contact Information', - emailLabel: 'Email', - address: 'Jl. Prof. Dr. H. Hadari Nawawi, Bansir Laut, Pontianak Tenggara, 78124', - }, - footer: { - desc: 'Informatics Study Program, Tanjungpura University.\nJl. Prof. Dr. H. Hadari Nawawi, Bansir Laut, Kec. Pontianak Tenggara, Pontianak City, West Kalimantan 78124', - kategori: 'Categories', - tautan: 'Important Links', - berita: 'News & Information', - pengumuman: 'Academic Announcements', - prestasi: 'Student Achievements', - siakad: 'SIAKAD UNTAN', - elearning: 'E-Learning UNTAN', - privacy: 'Privacy Policy', - terms: 'Terms & Conditions', - rights: 'All rights reserved.', - }, - }, -} as const; - -export type Translations = typeof translations.id; diff --git a/groups/ACAAB/src/index.css b/groups/ACAAB/src/index.css deleted file mode 100644 index 3087eb2..0000000 --- a/groups/ACAAB/src/index.css +++ /dev/null @@ -1,69 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@400;700&family=Roboto:wght@300;400;500;700&family=Merriweather:wght@700;900&display=swap'); -@import "tailwindcss"; - -/* Break out of the kit's container to go full-width */ -.acaab-full-bleed { - width: 100vw; - position: relative; - left: 50%; - margin-left: -50vw; - margin-right: -50vw; -} - -body { overflow-x: hidden; } - -@theme { - --font-sans: "Roboto", ui-sans-serif, system-ui, sans-serif; - --font-display: "Roboto Condensed", sans-serif; - --font-serif: "Merriweather", ui-serif, Georgia, serif; - - --color-untan-navy: #003150; - --color-untan-yellow: #feb401; - --color-untan-blue: #1e40af; - --color-primary-navy: #003150; - --color-primary-gold: #feb401; -} - -body { - font-family: var(--font-sans); - background-color: #ffffff; - color: #334155; - -webkit-font-smoothing: antialiased; -} - -h1, h2, h3, h4, h5, h6 { - font-family: var(--font-display); -} - -/* Hide scrollbar for carousel while keeping scroll functionality */ -.hide-scrollbar { - -ms-overflow-style: none; - scrollbar-width: none; -} -.hide-scrollbar::-webkit-scrollbar { - display: none; -} - -/* Fade-in animation for dynamically loaded cards */ -@keyframes fade-in { - from { opacity: 0; transform: translateY(16px); } - to { opacity: 1; transform: translateY(0); } -} -.animate-fade-in { - animation: fade-in 0.4s ease both; -} - -/* Explicitly scan all component files so arbitrary Tailwind classes compile */ -@source "./**/*.tsx"; - -/* Stats bar 3-column layout (replaces md:grid-cols-[1fr_auto_1fr_auto_1fr]) */ -@media (min-width: 768px) { - .stats-grid { - grid-template-columns: 1fr auto 1fr auto 1fr; - } -} - -/* Project carousel card widths (replaces w-[85vw] md:w-[60vw] lg:w-[38vw]) */ -.proj-card { width: 75vw; } -@media (min-width: 768px) { .proj-card { width: 42vw; } } -@media (min-width: 1024px) { .proj-card { width: 28vw; } } diff --git a/groups/ACAAB/src/index.html b/groups/ACAAB/src/index.html deleted file mode 100644 index 714ed40..0000000 --- a/groups/ACAAB/src/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - ACAAB — Dev Preview - - - -
⚡ DEV MODE — Navbar & footer tidak tampil di sini. Gunakan kit dev server (root) untuk preview lengkap.
-
- - - diff --git a/groups/ACAAB/src/main.tsx b/groups/ACAAB/src/main.tsx deleted file mode 100644 index 080dac3..0000000 --- a/groups/ACAAB/src/main.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import {StrictMode} from 'react'; -import {createRoot} from 'react-dom/client'; -import App from './App.tsx'; -import './index.css'; - -createRoot(document.getElementById('root')!).render( - - - , -); diff --git a/groups/ACAAB/src/services/api.ts b/groups/ACAAB/src/services/api.ts deleted file mode 100644 index ab9b126..0000000 --- a/groups/ACAAB/src/services/api.ts +++ /dev/null @@ -1,204 +0,0 @@ -import { Achievement, Project } from '../data'; - -// Determine API Base URL dynamically from Vite env, fallback to hardcoded if not set -const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || 'https://api.ifuntanhub.dev'; - -const BIDANG_MAP: Record = { - 1: 'Kecerdasan Buatan', - 2: 'Cyber Security', - 3: 'Data', - 4: 'Software Engineering', - 5: 'Competitive Programming', - 6: 'IoT', - 7: 'Smart City', - 8: 'Web3', - 9: 'Karya Tulis Ilmiah', - 10: 'Robotik', -}; - - - -/** - * Helper to parse Rank/Juara from Achievement title - */ -function extractRank(title: string): string { - const match = title.match(/(Juara\s+\d+|Juara\s+Harapan\s*\d*|Top\s+\d+|Finalis|Peringkat\s+\d+|Medali\s+\w+)/i); - return match ? match[0] : 'Pemenang'; -} - -/** - * Helper to parse Level (Nasional, Internasional, Regional) from title/category - */ -function extractLevel(title: string, category: string): 'Nasional' | 'Internasional' | 'Regional' { - const text = `${title} ${category}`.toLowerCase(); - if ( - text.includes('internasional') || - text.includes('international') || - text.includes('global') || - text.includes('world') || - text.includes('asean') || - text.includes('unesco') - ) { - return 'Internasional'; - } - if ( - text.includes('regional') || - text.includes('kalbar') || - text.includes('kalimantan') || - text.includes('provinsi') || - text.includes('kota') || - text.includes('kabupaten') || - text.includes('lokal') - ) { - return 'Regional'; - } - return 'Nasional'; // Default fallback -} - -/** - * Helper to extract competition name from full achievement title - */ -function extractCompetition(title: string): string { - return title - .replace(/^(Juara\s+\d+|Juara\s+Harapan\s*\d*|Top\s+\d+|Finalis|Peringkat\s+\d+|Medali\s+\w+)\s+(di\s+|pada\s+|dalam\s+)?/i, '') - .trim(); -} - -/** - * Fetch achievements from API - */ -export async function fetchAchievementsFromAPI(): Promise { - const response = await fetch(`${API_BASE_URL}/items/prestasi?fields=*.*`); - if (!response.ok) { - throw new Error(`Failed to fetch achievements: ${response.statusText}`); - } - const result = await response.json(); - const data = result.data || []; - - return data - .filter((item: any) => item.status === 'published') - .map((item: any) => { - const id = String(item.id); - const title = item.nama_prestasi || 'Untitled Achievement'; - - let category = 'Umum'; - if (item.bidang_id) { - if (typeof item.bidang_id === 'object' && item.bidang_id.nama_bidang) { - category = item.bidang_id.nama_bidang; - } else { - category = BIDANG_MAP[item.bidang_id as number] || 'Umum'; - } - } - - const rank = extractRank(title); - const level = extractLevel(title, category); - const competition = extractCompetition(title); - const year = parseInt(item.tahun) || new Date().getFullYear(); - - const anggota = Array.isArray(item.anggota) ? item.anggota : []; - const team = item.nama_tim || (anggota.length > 0 ? anggota[0].nama : 'Mahasiswa'); - - // Handle image url mapping for directus assets - let image = `https://picsum.photos/seed/prestasi-${id}/800/600`; - if (item.galeri && Array.isArray(item.galeri) && item.galeri.length > 0) { - const firstImg = item.galeri[0]; - const imgId = typeof firstImg === 'string' ? firstImg : (firstImg.directus_files_id || firstImg.id); - if (imgId) image = `${API_BASE_URL}/assets/${imgId}`; - } else if (item.foto) { - image = `${API_BASE_URL}/assets/${item.foto}`; - } - - const avatar = (item.nama_tim || item.nama_prestasi || 'IF') - .substring(0, 2) - .toUpperCase(); - - const description = item.deskripsi || `${team} berhasil meraih prestasi luar biasa sebagai ${rank} dalam ajang ${competition} tahun ${year} pada bidang ${category.toLowerCase()}.`; - - return { - id, - title, - category, - competition, - rank, - year, - level, - description, - team, - nim: item.nim || undefined, - generation: item.angkatan ? `Angkatan ${item.angkatan}` : 'Informatika', - image, - avatar, - members: anggota.map((m: any) => ({ nama: m.nama, angkatan: m.angkatan ? parseInt(m.angkatan) : undefined })), - }; - }); -} - -/** - * Fetch projects/portfolio from API - */ -export async function fetchProjectsFromAPI(): Promise { - const response = await fetch(`${API_BASE_URL}/items/portfolio?fields=*,bidang.bidang_id.nama_bidang,galeri.*`); - if (!response.ok) { - throw new Error(`Failed to fetch portfolio: ${response.statusText}`); - } - const result = await response.json(); - const data = result.data || []; - - return data - .filter((item: any) => item.status === 'published') - .map((item: any) => { - const id = String(item.id); - const title = item.nama_proyek || 'Untitled Project'; - - const anggota = Array.isArray(item.anggota) ? item.anggota : []; - const studentName = item.nama_mahasiswa || (anggota.length > 0 ? anggota[0].nama : 'Mahasiswa'); - - const year = parseInt(item.tahun) || new Date().getFullYear(); - const description = item.deskripsi || 'Tidak ada deskripsi.'; - - let categories: string[] = []; - if (item.bidang && Array.isArray(item.bidang)) { - categories = item.bidang.map((b: any) => { - if (b.bidang_id && typeof b.bidang_id === 'object' && b.bidang_id.nama_bidang) { - return b.bidang_id.nama_bidang; - } - if (typeof b.bidang_id === 'number') { - return BIDANG_MAP[b.bidang_id] || 'Umum'; - } - return 'Umum'; - }).filter(Boolean); - } - - if (categories.length === 0) { - categories = ['Umum']; - } - - let link = item.url || undefined; - if (link && !/^https?:\/\//i.test(link)) { - link = `https://${link}`; - } - - let image = `https://picsum.photos/seed/project-${id}/800/600`; - if (item.galeri && Array.isArray(item.galeri) && item.galeri.length > 0) { - const firstImg = item.galeri[0]; - const imgId = typeof firstImg === 'string' ? firstImg : (firstImg.directus_files_id || firstImg.id); - if (imgId) image = `${API_BASE_URL}/assets/${imgId}`; - } else if (item.foto) { - image = `${API_BASE_URL}/assets/${item.foto}`; - } - - return { - id, - title, - studentName, - nim: item.nim || undefined, - year, - category: categories, - description, - image, - link, - catatan: item.catatan || undefined, - members: anggota.map((m: any) => ({ nama: m.nama, nim: m.nim || undefined })), - }; - }); -} diff --git a/groups/ACAAB/src/services/sheets.ts b/groups/ACAAB/src/services/sheets.ts deleted file mode 100644 index d730681..0000000 --- a/groups/ACAAB/src/services/sheets.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Achievement, Project } from '../data'; - -/** - * Google Sheets Service - */ - -const SPREADSHEET_ID = import.meta.env.VITE_SPREADSHEET_ID; -const API_KEY = import.meta.env.VITE_GOOGLE_API_KEY; - -export async function fetchSheetData(range: string) { - const url = `https://sheets.googleapis.com/v4/spreadsheets/${SPREADSHEET_ID}/values/${range}?key=${API_KEY}`; - - try { - const response = await fetch(url); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - const data = await response.json(); - return data.values; - } catch (error) { - console.error('Error fetching sheet data:', error); - return null; - } -} - -export async function getMappedData() { - const values = await fetchSheetData('Form Responses 1!A2:J200'); - if (!values) return { achievements: [], projects: [] }; - - const achievements: Achievement[] = []; - const projects: Project[] = []; - - values.forEach((row: any[], index: number) => { - // New Mapping: - // 0: Nama Mahasiswa (A) - // 1: NIM Mahasiswa (B) - // 2: Angkatan (C) - // 3: Jenis Data (D) - // 4: Nama Prestasi (E) - // 5: Tahun (F) - // 6: Tingkat (G) - // 7: Bidang (H) - // 8: Deskripsi (I) - // 9: Gambar (J) - - const type = row[3]; // Jenis Data - const id = `sheet-${index}`; - const imageUrl = row[9] || `https://picsum.photos/seed/${id}/800/600`; - - if (type === 'Prestasi') { - achievements.push({ - id, - title: row[4] || 'Untitled Achievement', - category: row[7] || 'Umum', - competition: row[4] || 'Kompetisi', - rank: 'Peserta', - year: parseInt(row[5]) || new Date().getFullYear(), - level: (row[6] as any) || 'Nasional', - description: row[8] || '', - team: row[0] || 'Mahasiswa', - nim: row[1], - generation: `Angkatan ${row[2] || '-'}`, - image: imageUrl, - avatar: (row[0] || 'M').substring(0, 2).toUpperCase(), - }); - } else if (type === 'Proyek') { - projects.push({ - id: `p-${id}`, - title: row[4] || 'Untitled Project', - studentName: row[0] || 'Mahasiswa', - nim: row[1], - year: parseInt(row[5]) || new Date().getFullYear(), - category: row[7] || 'Software', - description: row[8] || '', - image: imageUrl, - link: undefined, // No link column mentioned in new structure - }); - } - }); - - return { achievements, projects }; -} diff --git a/groups/ACAAB/src/vite-env.d.ts b/groups/ACAAB/src/vite-env.d.ts deleted file mode 100644 index 3ba6bf1..0000000 --- a/groups/ACAAB/src/vite-env.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/// - -interface ImportMetaEnv { - readonly VITE_SPREADSHEET_ID: string - readonly VITE_GOOGLE_API_KEY: string - readonly VITE_API_BASE_URL: string -} - -interface ImportMeta { - readonly env: ImportMetaEnv -} diff --git a/groups/ACAAB/tsconfig.json b/groups/ACAAB/tsconfig.json deleted file mode 100644 index d88f175..0000000 --- a/groups/ACAAB/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2022", - "experimentalDecorators": true, - "useDefineForClassFields": false, - "module": "ESNext", - "lib": [ - "ES2022", - "DOM", - "DOM.Iterable" - ], - "skipLibCheck": true, - "moduleResolution": "bundler", - "isolatedModules": true, - "moduleDetection": "force", - "allowJs": true, - "jsx": "react-jsx", - "paths": { - "@/*": [ - "./*" - ] - }, - "allowImportingTsExtensions": true, - "noEmit": true - } -} diff --git a/groups/ACAAB/vite.config.ts b/groups/ACAAB/vite.config.ts deleted file mode 100644 index 9f1f278..0000000 --- a/groups/ACAAB/vite.config.ts +++ /dev/null @@ -1,41 +0,0 @@ -import tailwindcss from '@tailwindcss/vite'; -import react from '@vitejs/plugin-react'; -import path from 'path'; -import { defineConfig } from 'vite'; - -export default defineConfig(({ command }) => ({ - plugins: [react(), tailwindcss()], - - // Relative base so asset URLs resolve correctly from any subdirectory - base: './', - - // Dev: root = src/ so HMR works against src/index.html - // Build: root = . so rollup can resolve src/index.html as input - root: command === 'serve' ? './src' : '.', - - resolve: { - alias: { '@': path.resolve(__dirname, '.') }, - }, - - server: { - port: 3000, - host: true, - }, - - build: { - outDir: path.resolve(__dirname, 'assets'), - emptyOutDir: true, - rollupOptions: { - input: path.resolve(__dirname, 'src/index.html'), - output: { - entryFileNames: 'acaab.js', - chunkFileNames: 'acaab-[name].js', - assetFileNames: (assetInfo) => { - const name = assetInfo.names?.[0] ?? ''; - if (name.endsWith('.css')) return 'acaab.css'; - return 'acaab-[name][extname]'; - }, - }, - }, - }, -}));