@epfl-sti/poesis 0.3.3 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/poesis.js CHANGED
@@ -1,23 +1,23 @@
1
1
  (function(){try{if(typeof document<`u`){var e=document.createElement(`style`);e.appendChild(document.createTextNode(`/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
2
- @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-divide-y-reverse:0;--tw-border-style:solid;--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-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-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-600:oklch(57.7% .245 27.325);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-xl:36rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--shadow-sm:0 1px 2px #0000000f;--shadow-md:0 2px 8px #00000014;--shadow-lg:0 4px 16px #0000001a;--shadow-xl:0 8px 32px #0000001f;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--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);--color-epfl-red:red;--color-epfl-red-dark:#b51f1f;--color-epfl-leman:#00a79f;--color-epfl-canard:#007480;--color-epfl-canard-dark:#004248;--color-primary:var(--action-primary);--color-primary-hover:var(--action-primary-hover);--color-bg-primary:var(--bg-primary);--color-bg-secondary:var(--bg-secondary);--color-bg-tertiary:var(--bg-tertiary);--color-border:var(--border-default);--color-border-strong:var(--border-strong);--color-text-primary:var(--text-primary);--color-text-secondary:var(--text-secondary);--color-text-muted:var(--text-muted);--color-success:var(--semantic-success);--color-success-bg:var(--semantic-success-bg);--color-warning:var(--semantic-warning);--color-warning-bg:var(--semantic-warning-bg);--color-error:var(--semantic-error);--color-error-bg:var(--semantic-error-bg);--color-info:var(--semantic-info);--color-info-bg:var(--semantic-info-bg);--radius-full:9999px;--spacing-xs:4px;--spacing-sm:8px;--spacing-md:16px;--spacing-lg:24px;--spacing-xl:32px;--spacing-2xl:48px;--text-h1:2rem;--text-h1--line-height:1.2;--text-h2:1.5rem;--text-h2--line-height:1.3;--text-h3:1.25rem;--text-h3--line-height:1.4;--text-body:.9375rem;--text-body--line-height:1.5;--text-small:.8125rem;--text-small--line-height:1.5;--text-caption:.75rem;--text-caption--line-height:1.4}}@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%;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;-webkit-text-decoration:inherit;-webkit-text-decoration: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]){appearance:button}::file-selector-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-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.right-0{right:calc(var(--spacing) * 0)}.right-lg{right:var(--spacing-lg)}.bottom-lg{bottom:var(--spacing-lg)}.left-0{left:calc(var(--spacing) * 0)}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing) * 1)}.mt-0\\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-auto{margin-top:auto}.mt-lg{margin-top:var(--spacing-lg)}.mt-md{margin-top:var(--spacing-md)}.mt-sm{margin-top:var(--spacing-sm)}.mt-xs{margin-top:var(--spacing-xs)}.mr-lg{margin-right:var(--spacing-lg)}.mr-sm{margin-right:var(--spacing-sm)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-lg{margin-bottom:var(--spacing-lg)}.mb-md{margin-bottom:var(--spacing-md)}.mb-sm{margin-bottom:var(--spacing-sm)}.mb-xs{margin-bottom:var(--spacing-xs)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-11{width:calc(var(--spacing) * 11);height:calc(var(--spacing) * 11)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-14{width:calc(var(--spacing) * 14);height:calc(var(--spacing) * 14)}.size-16{width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.size-20{width:calc(var(--spacing) * 20);height:calc(var(--spacing) * 20)}.size-full{width:100%;height:100%}.h-0\\.5{height:calc(var(--spacing) * .5)}.h-1\\.5{height:calc(var(--spacing) * 1.5)}.h-2\\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-20{height:calc(var(--spacing) * 20)}.h-64{height:calc(var(--spacing) * 64)}.h-96{height:calc(var(--spacing) * 96)}.h-\\[30px\\]{height:30px}.h-full{height:100%}.h-screen{height:100vh}.\\!min-h-8{min-height:calc(var(--spacing) * 8)!important}.\\!min-h-10{min-height:calc(var(--spacing) * 10)!important}.\\!min-h-12{min-height:calc(var(--spacing) * 12)!important}.min-h-screen{min-height:100vh}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-7{width:calc(var(--spacing) * 7)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-16{width:calc(var(--spacing) * 16)}.w-40{width:calc(var(--spacing) * 40)}.w-48{width:calc(var(--spacing) * 48)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-96{width:calc(var(--spacing) * 96)}.w-\\[4px\\]{width:4px}.w-\\[8px\\]{width:8px}.w-\\[16px\\]{width:16px}.w-\\[24px\\]{width:24px}.w-\\[32px\\]{width:32px}.w-\\[48px\\]{width:48px}.w-auto{width:auto}.w-full{width:100%}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\\[24rem\\]{max-width:24rem}.max-w-\\[32rem\\]{max-width:32rem}.max-w-\\[42rem\\]{max-width:42rem}.max-w-\\[600px\\]{max-width:600px}.max-w-\\[var\\(--container-6xl\\)\\]{max-width:var(--container-6xl)}.max-w-\\[var\\(--container-md\\)\\]{max-width:var(--container-md)}.max-w-\\[var\\(--container-xl\\)\\]{max-width:var(--container-xl)}.max-w-\\[var\\(--container-xs\\)\\]{max-width:var(--container-xs)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--spacing-md)}.max-w-screen{max-width:100vw}.max-w-sm{max-width:var(--spacing-sm)}.max-w-xl{max-width:var(--spacing-xl)}.max-w-xs{max-width:var(--spacing-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-7{min-width:calc(var(--spacing) * 7)}.min-w-9{min-width:calc(var(--spacing) * 9)}.min-w-11{min-width:calc(var(--spacing) * 11)}.min-w-\\[10rem\\]{min-width:10rem}.min-w-\\[280px\\]{min-width:280px}.min-w-\\[500px\\]{min-width:500px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.rotate-45{rotate:45deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-dialog-in{animation:.2s ease-out dialog-in}.animate-floating-in{animation:.15s ease-out floating-in}.animate-slide-in{animation:.25s ease-out slide-in}.animate-spin{animation:var(--animate-spin)}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-none{list-style-type:none}.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))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.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-2xl{gap:var(--spacing-2xl)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-lg{gap:var(--spacing-lg)}.gap-md{gap:var(--spacing-md)}.gap-px{gap:1px}.gap-sm{gap:var(--spacing-sm)}.gap-xl{gap:var(--spacing-xl)}.gap-xs{gap:var(--spacing-xs)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--color-border)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.\\!rounded-lg{border-radius:var(--radius-lg)!important}.\\!rounded-md{border-radius:var(--radius-md)!important}.\\!rounded-sm{border-radius:var(--radius-sm)!important}.rounded{border-radius:.25rem}.rounded-full{border-radius:var(--radius-full)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.\\!border{border-style:var(--tw-border-style)!important;border-width:1px!important}.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-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-2{border-right-style:var(--tw-border-style);border-right-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.\\!border-border{border-color:var(--color-border)!important}.\\!border-epfl-canard{border-color:var(--color-epfl-canard)!important}.\\!border-error{border-color:var(--color-error)!important}.\\!border-primary{border-color:var(--color-primary)!important}.border-border{border-color:var(--color-border)}.border-border-strong{border-color:var(--color-border-strong)}.border-error,.border-error\\/30{border-color:var(--color-error)}@supports (color:color-mix(in lab, red, red)){.border-error\\/30{border-color:color-mix(in oklab, var(--color-error) 30%, transparent)}}.border-info\\/30{border-color:var(--color-info)}@supports (color:color-mix(in lab, red, red)){.border-info\\/30{border-color:color-mix(in oklab, var(--color-info) 30%, transparent)}}.border-primary{border-color:var(--color-primary)}.border-red-600{border-color:var(--color-red-600)}.border-success\\/30{border-color:var(--color-success)}@supports (color:color-mix(in lab, red, red)){.border-success\\/30{border-color:color-mix(in oklab, var(--color-success) 30%, transparent)}}.border-transparent{border-color:#0000}.border-warning\\/30{border-color:var(--color-warning)}@supports (color:color-mix(in lab, red, red)){.border-warning\\/30{border-color:color-mix(in oklab, var(--color-warning) 30%, transparent)}}.\\!bg-bg-tertiary{background-color:var(--color-bg-tertiary)!important}.\\!bg-epfl-canard{background-color:var(--color-epfl-canard)!important}.\\!bg-primary{background-color:var(--color-primary)!important}.bg-bg-primary{background-color:var(--color-bg-primary)}.bg-bg-secondary{background-color:var(--color-bg-secondary)}.bg-bg-tertiary,.bg-bg-tertiary\\/50{background-color:var(--color-bg-tertiary)}@supports (color:color-mix(in lab, red, red)){.bg-bg-tertiary\\/50{background-color:color-mix(in oklab, var(--color-bg-tertiary) 50%, transparent)}}.bg-black\\/40{background-color:#0006}@supports (color:color-mix(in lab, red, red)){.bg-black\\/40{background-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.bg-black\\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-border{background-color:var(--color-border)}.bg-border-strong{background-color:var(--color-border-strong)}.bg-epfl-canard{background-color:var(--color-epfl-canard)}.bg-epfl-canard-dark{background-color:var(--color-epfl-canard-dark)}.bg-epfl-leman{background-color:var(--color-epfl-leman)}.bg-epfl-red{background-color:var(--color-epfl-red)}.bg-epfl-red-dark{background-color:var(--color-epfl-red-dark)}.bg-error{background-color:var(--color-error)}.bg-error-bg{background-color:var(--color-error-bg)}.bg-info{background-color:var(--color-info)}.bg-info-bg{background-color:var(--color-info-bg)}.bg-primary,.bg-primary\\/5{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/5{background-color:color-mix(in oklab, var(--color-primary) 5%, transparent)}}.bg-primary\\/10{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/10{background-color:color-mix(in oklab, var(--color-primary) 10%, transparent)}}.bg-success{background-color:var(--color-success)}.bg-success-bg{background-color:var(--color-success-bg)}.bg-text-muted{background-color:var(--color-text-muted)}.bg-text-primary{background-color:var(--color-text-primary)}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--color-warning)}.bg-warning-bg{background-color:var(--color-warning-bg)}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing) * 0)}.p-0\\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-2xl{padding:var(--spacing-2xl)}.p-16{padding:calc(var(--spacing) * 16)}.p-lg{padding:var(--spacing-lg)}.p-md{padding:var(--spacing-md)}.p-sm{padding:var(--spacing-sm)}.p-xl{padding:var(--spacing-xl)}.p-xs{padding:var(--spacing-xs)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-lg{padding-inline:var(--spacing-lg)}.px-md{padding-inline:var(--spacing-md)}.px-sm{padding-inline:var(--spacing-sm)}.px-xs{padding-inline:var(--spacing-xs)}.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-2xl{padding-block:var(--spacing-2xl)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-lg{padding-block:var(--spacing-lg)}.py-md{padding-block:var(--spacing-md)}.py-sm{padding-block:var(--spacing-sm)}.py-xl{padding-block:var(--spacing-xl)}.py-xs{padding-block:var(--spacing-xs)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-14{padding-top:calc(var(--spacing) * 14)}.pt-md{padding-top:var(--spacing-md)}.pt-sm{padding-top:var(--spacing-sm)}.pt-xl{padding-top:var(--spacing-xl)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pr-11{padding-right:calc(var(--spacing) * 11)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-10{padding-left:calc(var(--spacing) * 10)}.pl-11{padding-left:calc(var(--spacing) * 11)}.pl-14{padding-left:calc(var(--spacing) * 14)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.\\!text-body{font-size:var(--text-body)!important;line-height:var(--tw-leading,var(--text-body--line-height))!important}.\\!text-small{font-size:var(--text-small)!important;line-height:var(--tw-leading,var(--text-small--line-height))!important}.text-body{font-size:var(--text-body);line-height:var(--tw-leading,var(--text-body--line-height))}.text-caption{font-size:var(--text-caption);line-height:var(--tw-leading,var(--text-caption--line-height))}.text-h1{font-size:var(--text-h1);line-height:var(--tw-leading,var(--text-h1--line-height))}.text-h2{font-size:var(--text-h2);line-height:var(--tw-leading,var(--text-h2--line-height))}.text-h3{font-size:var(--text-h3);line-height:var(--tw-leading,var(--text-h3--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-small{font-size:var(--text-small);line-height:var(--tw-leading,var(--text-small--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-\\[1\\.2\\]{--tw-leading:1.2;line-height:1.2}.leading-\\[1\\.3\\]{--tw-leading:1.3;line-height:1.3}.leading-\\[1\\.4\\]{--tw-leading:1.4;line-height:1.4}.leading-\\[1\\.5\\]{--tw-leading:1.5;line-height:1.5}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.\\!text-white{color:var(--color-white)!important}.text-bg-primary{color:var(--color-bg-primary)}.text-epfl-canard{color:var(--color-epfl-canard)}.text-epfl-leman{color:var(--color-epfl-leman)}.text-epfl-red{color:var(--color-epfl-red)}.text-error{color:var(--color-error)}.text-info{color:var(--color-info)}.text-primary{color:var(--color-primary)}.text-success{color:var(--color-success)}.text-text-muted{color:var(--color-text-muted)}.text-text-primary{color:var(--color-text-primary)}.text-text-secondary{color:var(--color-text-secondary)}.text-warning{color:var(--color-warning)}.text-white{color:var(--color-white)}.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,)}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.decoration-dotted{text-decoration-style:dotted}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-100{opacity:1}.\\!shadow-lg{--tw-shadow:0 4px 16px var(--tw-shadow-color,#0000001a)!important;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)!important}.\\!shadow-sm{--tw-shadow:0 1px 2px var(--tw-shadow-color,#0000000f)!important;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)!important}.shadow-lg{--tw-shadow:0 4px 16px 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 2px 8px var(--tw-shadow-color,#00000014);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 2px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 8px 32px var(--tw-shadow-color,#0000001f);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)!important;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)!important}.\\!ring-epfl-canard{--tw-ring-color:var(--color-epfl-canard)!important}.\\!ring-primary{--tw-ring-color:var(--color-primary)!important}.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,)}.transition-\\[width\\]{transition-property:width;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-opacity{transition-property:opacity;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))}.transition-none{transition-property:none}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.peer-checked\\:bg-primary:is(:where(.peer):checked~*){background-color:var(--color-primary)}.peer-focus-visible\\:ring-2:is(:where(.peer):focus-visible~*){--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)}.peer-focus-visible\\:ring-primary:is(:where(.peer):focus-visible~*){--tw-ring-color:var(--color-primary)}.peer-focus-visible\\:ring-offset-2:is(:where(.peer):focus-visible~*){--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.peer-focus-visible\\:ring-offset-bg-primary:is(:where(.peer):focus-visible~*){--tw-ring-offset-color:var(--color-bg-primary)}.peer-disabled\\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.placeholder\\:text-text-muted::placeholder{color:var(--color-text-muted)}.after\\:absolute:after{content:var(--tw-content);position:absolute}.after\\:top-0\\.5:after{content:var(--tw-content);top:calc(var(--spacing) * .5)}.after\\:left-0\\.5:after{content:var(--tw-content);left:calc(var(--spacing) * .5)}.after\\:size-5:after{content:var(--tw-content);width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.after\\:rounded-full:after{content:var(--tw-content);border-radius:var(--radius-full)}.after\\:bg-white:after{content:var(--tw-content);background-color:var(--color-white)}.after\\:shadow-sm:after{content:var(--tw-content);--tw-shadow:0 1px 2px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.after\\:transition-transform:after{content:var(--tw-content);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))}.after\\:content-\\[\\'\\'\\]:after{--tw-content:"";content:var(--tw-content)}.peer-checked\\:after\\:translate-x-5:is(:where(.peer):checked~*):after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing) * 5);translate:var(--tw-translate-x) var(--tw-translate-y)}.last\\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.checked\\:border-\\[5px\\]:checked{border-style:var(--tw-border-style);border-width:5px}.checked\\:border-primary:checked{border-color:var(--color-primary)}.checked\\:bg-primary:checked{background-color:var(--color-primary)}.checked\\:bg-\\[url\\(\\'data\\:image\\/svg\\+xml\\,\\%3Csvg\\%20viewBox\\%3D\\%220\\%200\\%2016\\%2016\\%22\\%20fill\\%3D\\%22white\\%22\\%20xmlns\\%3D\\%22http\\%3A\\%2F\\%2Fwww\\.w3\\.org\\%2F2000\\%2Fsvg\\%22\\%3E\\%3Cpath\\%20d\\%3D\\%22M12\\.207\\%204\\.793a1\\%201\\%200\\%20010\\%201\\.414l-5\\%205a1\\%201\\%200\\%2001-1\\.414\\%200l-2-2a1\\%201\\%200\\%20011\\.414-1\\.414L6\\.5\\%209\\.086l4\\.293-4\\.293a1\\%201\\%200\\%20011\\.414\\%200z\\%22\\%2F\\%3E\\%3C\\%2Fsvg\\%3E\\'\\)\\]:checked{background-image:url(data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22white%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.207%204.793a1%201%200%20010%201.414l-5%205a1%201%200%2001-1.414%200l-2-2a1%201%200%20011.414-1.414L6.5%209.086l4.293-4.293a1%201%200%20011.414%200z%22%2F%3E%3C%2Fsvg%3E)}.checked\\:bg-center:checked{background-position:50%}.checked\\:bg-no-repeat:checked{background-repeat:no-repeat}.indeterminate\\:border-primary:indeterminate{border-color:var(--color-primary)}.indeterminate\\:bg-primary:indeterminate{background-color:var(--color-primary)}.indeterminate\\:bg-\\[url\\(\\'data\\:image\\/svg\\+xml\\,\\%3Csvg\\%20viewBox\\%3D\\%220\\%200\\%2016\\%2016\\%22\\%20fill\\%3D\\%22white\\%22\\%20xmlns\\%3D\\%22http\\%3A\\%2F\\%2Fwww\\.w3\\.org\\%2F2000\\%2Fsvg\\%22\\%3E\\%3Crect\\%20x\\%3D\\%223\\%22\\%20y\\%3D\\%227\\%22\\%20width\\%3D\\%2210\\%22\\%20height\\%3D\\%222\\%22\\%20rx\\%3D\\%221\\%22\\%2F\\%3E\\%3C\\%2Fsvg\\%3E\\'\\)\\]:indeterminate{background-image:url(data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22white%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20x%3D%223%22%20y%3D%227%22%20width%3D%2210%22%20height%3D%222%22%20rx%3D%221%22%2F%3E%3C%2Fsvg%3E)}.indeterminate\\:bg-center:indeterminate{background-position:50%}.indeterminate\\:bg-no-repeat:indeterminate{background-repeat:no-repeat}@media (hover:hover){.hover\\:border-border-strong:hover{border-color:var(--color-border-strong)}.hover\\:border-error:hover{border-color:var(--color-error)}.hover\\:border-primary:hover{border-color:var(--color-primary)}.hover\\:bg-bg-secondary:hover{background-color:var(--color-bg-secondary)}.hover\\:bg-bg-tertiary:hover,.hover\\:bg-bg-tertiary\\/70:hover{background-color:var(--color-bg-tertiary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-bg-tertiary\\/70:hover{background-color:color-mix(in oklab, var(--color-bg-tertiary) 70%, transparent)}}.hover\\:bg-error-bg:hover{background-color:var(--color-error-bg)}.hover\\:bg-error\\/80:hover{background-color:var(--color-error)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-error\\/80:hover{background-color:color-mix(in oklab, var(--color-error) 80%, transparent)}}.hover\\:bg-primary-hover:hover{background-color:var(--color-primary-hover)}.hover\\:text-primary:hover{color:var(--color-primary)}.hover\\:text-text-primary:hover{color:var(--color-text-primary)}.hover\\:text-text-secondary:hover{color:var(--color-text-secondary)}.hover\\:opacity-90:hover{opacity:.9}}.focus\\:border-error:focus{border-color:var(--color-error)}.focus\\:border-primary:focus{border-color:var(--color-primary)}.focus\\:bg-bg-tertiary:focus{background-color:var(--color-bg-tertiary)}.focus\\:bg-error-bg:focus{background-color:var(--color-error-bg)}.focus\\:ring-1:focus{--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)}.focus\\:ring-error:focus{--tw-ring-color:var(--color-error)}.focus\\:ring-primary:focus{--tw-ring-color:var(--color-primary)}.focus-visible\\:ring-2:focus-visible{--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-visible\\:ring-epfl-canard:focus-visible{--tw-ring-color:var(--color-epfl-canard)}.focus-visible\\:ring-error:focus-visible{--tw-ring-color:var(--color-error)}.focus-visible\\:ring-primary:focus-visible{--tw-ring-color:var(--color-primary)}.focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\\:ring-offset-bg-primary:focus-visible{--tw-ring-offset-color:var(--color-bg-primary)}.focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:bg-bg-secondary:disabled{background-color:var(--color-bg-secondary)}.disabled\\:opacity-50:disabled{opacity:.5}@media (width>=40rem){.sm\\:col-span-2{grid-column:span 2/span 2}.sm\\:w-1\\/3{width:33.3333%}.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\\:flex-row{flex-direction:row}.sm\\:gap-lg{gap:var(--spacing-lg)}}@media (width>=48rem){.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=64rem){.lg\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\\:px-lg{padding-inline:var(--spacing-lg)}}.\\[\\&\\>svg\\]\\:size-4>svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\[\\&\\>svg\\]\\:size-5>svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg-primary:#fff;--bg-secondary:#f5f5f5;--bg-tertiary:#e6e6e6;--border-default:#d5d5d5;--border-strong:#c1c1c1;--text-primary:#212121;--text-secondary:#707070;--text-muted:#8e8e8e;--semantic-success:#1b874b;--semantic-success-bg:#e8f5e9;--semantic-warning:#d4860a;--semantic-warning-bg:#fff3e0;--semantic-error:#d32f2f;--semantic-error-bg:#ffebee;--semantic-info:#1976d2;--semantic-info-bg:#e3f2fd;--action-primary:#007480;--action-primary-hover:#004248;--logo-filter:brightness(0);--logo-opacity:.5}.dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-primary:#1a1a1a;--bg-secondary:#242424;--bg-tertiary:#2e2e2e;--border-default:#3a3a3a;--border-strong:#505050;--text-primary:#f0f0f0;--text-secondary:#a0a0a0;--text-muted:#707070;--semantic-success:#34d37a;--semantic-success-bg:#1a2e1a;--semantic-warning:#ffad33;--semantic-warning-bg:#2e2410;--semantic-error:#ff6b6b;--semantic-error-bg:#2e1515;--semantic-info:#64b5f6;--semantic-info-bg:#152538;--action-primary:#009ba6;--action-primary-hover:#007480;--logo-filter:brightness(0) invert(1);--logo-opacity:1;--shadow-sm:0 1px 2px #0000004d;--shadow-md:0 2px 8px #0006;--shadow-lg:0 4px 16px #00000080;--shadow-xl:0 8px 32px #0009}@keyframes slide-in{0%{opacity:0;transform:translate(1rem)}to{opacity:1;transform:translate(0)}}@keyframes dialog-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes floating-in{0%{opacity:0}to{opacity:1}}body{font-family:var(--font-sans);font-size:var(--text-body);line-height:var(--text-body--line-height);color:var(--color-text-primary);background-color:var(--color-bg-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.poesis-desktop-flex{display:none}.poesis-mobile-only{display:flex}@media (width>=1024px){.poesis-desktop-flex{display:flex}.poesis-mobile-only{display:none}}@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-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@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:"<percentage>";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:"<percentage>";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:"<length>";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-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:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}
2
+ @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-divide-y-reverse:0;--tw-border-style:solid;--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-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-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-600:oklch(57.7% .245 27.325);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-xl:36rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--shadow-sm:0 1px 2px #0000000f;--shadow-md:0 2px 8px #00000014;--shadow-lg:0 4px 16px #0000001a;--shadow-xl:0 8px 32px #0000001f;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--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);--color-epfl-red:red;--color-epfl-red-dark:#b51f1f;--color-epfl-leman:#00a79f;--color-epfl-canard:#007480;--color-epfl-canard-dark:#004248;--color-primary:var(--action-primary);--color-primary-hover:var(--action-primary-hover);--color-bg-primary:var(--bg-primary);--color-bg-secondary:var(--bg-secondary);--color-bg-tertiary:var(--bg-tertiary);--color-border:var(--border-default);--color-border-strong:var(--border-strong);--color-text-primary:var(--text-primary);--color-text-secondary:var(--text-secondary);--color-text-muted:var(--text-muted);--color-success:var(--semantic-success);--color-success-bg:var(--semantic-success-bg);--color-warning:var(--semantic-warning);--color-warning-bg:var(--semantic-warning-bg);--color-error:var(--semantic-error);--color-error-bg:var(--semantic-error-bg);--color-info:var(--semantic-info);--color-info-bg:var(--semantic-info-bg);--radius-full:9999px;--spacing-xs:4px;--spacing-sm:8px;--spacing-md:16px;--spacing-lg:24px;--spacing-xl:32px;--spacing-2xl:48px;--text-h1:2rem;--text-h1--line-height:1.2;--text-h2:1.5rem;--text-h2--line-height:1.3;--text-h3:1.25rem;--text-h3--line-height:1.4;--text-body:.9375rem;--text-body--line-height:1.5;--text-small:.8125rem;--text-small--line-height:1.5;--text-caption:.75rem;--text-caption--line-height:1.4}}@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%;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;-webkit-text-decoration:inherit;-webkit-text-decoration: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]){appearance:button}::file-selector-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-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.right-0{right:calc(var(--spacing) * 0)}.right-lg{right:var(--spacing-lg)}.bottom-lg{bottom:var(--spacing-lg)}.left-0{left:calc(var(--spacing) * 0)}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing) * 0)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing) * 1)}.mt-0\\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-auto{margin-top:auto}.mt-lg{margin-top:var(--spacing-lg)}.mt-md{margin-top:var(--spacing-md)}.mt-sm{margin-top:var(--spacing-sm)}.mt-xs{margin-top:var(--spacing-xs)}.mr-lg{margin-right:var(--spacing-lg)}.mr-sm{margin-right:var(--spacing-sm)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-lg{margin-bottom:var(--spacing-lg)}.mb-md{margin-bottom:var(--spacing-md)}.mb-sm{margin-bottom:var(--spacing-sm)}.mb-xs{margin-bottom:var(--spacing-xs)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-11{width:calc(var(--spacing) * 11);height:calc(var(--spacing) * 11)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-14{width:calc(var(--spacing) * 14);height:calc(var(--spacing) * 14)}.size-16{width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.size-20{width:calc(var(--spacing) * 20);height:calc(var(--spacing) * 20)}.size-full{width:100%;height:100%}.h-0\\.5{height:calc(var(--spacing) * .5)}.h-1\\.5{height:calc(var(--spacing) * 1.5)}.h-2\\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-20{height:calc(var(--spacing) * 20)}.h-64{height:calc(var(--spacing) * 64)}.h-96{height:calc(var(--spacing) * 96)}.h-\\[30px\\]{height:30px}.h-full{height:100%}.h-screen{height:100vh}.\\!min-h-8{min-height:calc(var(--spacing) * 8)!important}.\\!min-h-10{min-height:calc(var(--spacing) * 10)!important}.\\!min-h-12{min-height:calc(var(--spacing) * 12)!important}.min-h-screen{min-height:100vh}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-7{width:calc(var(--spacing) * 7)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-16{width:calc(var(--spacing) * 16)}.w-40{width:calc(var(--spacing) * 40)}.w-48{width:calc(var(--spacing) * 48)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-96{width:calc(var(--spacing) * 96)}.w-\\[4px\\]{width:4px}.w-\\[8px\\]{width:8px}.w-\\[16px\\]{width:16px}.w-\\[24px\\]{width:24px}.w-\\[32px\\]{width:32px}.w-\\[48px\\]{width:48px}.w-auto{width:auto}.w-full{width:100%}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\\[24rem\\]{max-width:24rem}.max-w-\\[32rem\\]{max-width:32rem}.max-w-\\[42rem\\]{max-width:42rem}.max-w-\\[600px\\]{max-width:600px}.max-w-\\[var\\(--container-6xl\\)\\]{max-width:var(--container-6xl)}.max-w-\\[var\\(--container-md\\)\\]{max-width:var(--container-md)}.max-w-\\[var\\(--container-xl\\)\\]{max-width:var(--container-xl)}.max-w-\\[var\\(--container-xs\\)\\]{max-width:var(--container-xs)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--spacing-md)}.max-w-screen{max-width:100vw}.max-w-sm{max-width:var(--spacing-sm)}.max-w-xl{max-width:var(--spacing-xl)}.max-w-xs{max-width:var(--spacing-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-7{min-width:calc(var(--spacing) * 7)}.min-w-9{min-width:calc(var(--spacing) * 9)}.min-w-11{min-width:calc(var(--spacing) * 11)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-\\[10rem\\]{min-width:10rem}.min-w-\\[280px\\]{min-width:280px}.min-w-\\[500px\\]{min-width:500px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.rotate-45{rotate:45deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-dialog-in{animation:.2s ease-out dialog-in}.animate-floating-in{animation:.15s ease-out floating-in}.animate-slide-in{animation:.25s ease-out slide-in}.animate-spin{animation:var(--animate-spin)}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-none{list-style-type:none}.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))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.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-2xl{gap:var(--spacing-2xl)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-lg{gap:var(--spacing-lg)}.gap-md{gap:var(--spacing-md)}.gap-px{gap:1px}.gap-sm{gap:var(--spacing-sm)}.gap-xl{gap:var(--spacing-xl)}.gap-xs{gap:var(--spacing-xs)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--color-border)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.\\!rounded-lg{border-radius:var(--radius-lg)!important}.\\!rounded-md{border-radius:var(--radius-md)!important}.\\!rounded-sm{border-radius:var(--radius-sm)!important}.rounded{border-radius:.25rem}.rounded-full{border-radius:var(--radius-full)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.\\!border{border-style:var(--tw-border-style)!important;border-width:1px!important}.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-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-2{border-right-style:var(--tw-border-style);border-right-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.\\!border-border{border-color:var(--color-border)!important}.\\!border-error{border-color:var(--color-error)!important}.\\!border-primary{border-color:var(--color-primary)!important}.border-border{border-color:var(--color-border)}.border-border-strong{border-color:var(--color-border-strong)}.border-error,.border-error\\/30{border-color:var(--color-error)}@supports (color:color-mix(in lab, red, red)){.border-error\\/30{border-color:color-mix(in oklab, var(--color-error) 30%, transparent)}}.border-info\\/30{border-color:var(--color-info)}@supports (color:color-mix(in lab, red, red)){.border-info\\/30{border-color:color-mix(in oklab, var(--color-info) 30%, transparent)}}.border-primary{border-color:var(--color-primary)}.border-red-600{border-color:var(--color-red-600)}.border-success\\/30{border-color:var(--color-success)}@supports (color:color-mix(in lab, red, red)){.border-success\\/30{border-color:color-mix(in oklab, var(--color-success) 30%, transparent)}}.border-transparent{border-color:#0000}.border-warning\\/30{border-color:var(--color-warning)}@supports (color:color-mix(in lab, red, red)){.border-warning\\/30{border-color:color-mix(in oklab, var(--color-warning) 30%, transparent)}}.\\!bg-bg-tertiary{background-color:var(--color-bg-tertiary)!important}.\\!bg-primary{background-color:var(--color-primary)!important}.bg-bg-primary{background-color:var(--color-bg-primary)}.bg-bg-secondary{background-color:var(--color-bg-secondary)}.bg-bg-tertiary,.bg-bg-tertiary\\/50{background-color:var(--color-bg-tertiary)}@supports (color:color-mix(in lab, red, red)){.bg-bg-tertiary\\/50{background-color:color-mix(in oklab, var(--color-bg-tertiary) 50%, transparent)}}.bg-black\\/40{background-color:#0006}@supports (color:color-mix(in lab, red, red)){.bg-black\\/40{background-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.bg-black\\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-border{background-color:var(--color-border)}.bg-border-strong{background-color:var(--color-border-strong)}.bg-epfl-canard{background-color:var(--color-epfl-canard)}.bg-epfl-canard-dark{background-color:var(--color-epfl-canard-dark)}.bg-epfl-leman{background-color:var(--color-epfl-leman)}.bg-epfl-red{background-color:var(--color-epfl-red)}.bg-epfl-red-dark{background-color:var(--color-epfl-red-dark)}.bg-error{background-color:var(--color-error)}.bg-error-bg{background-color:var(--color-error-bg)}.bg-info{background-color:var(--color-info)}.bg-info-bg{background-color:var(--color-info-bg)}.bg-primary,.bg-primary\\/5{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/5{background-color:color-mix(in oklab, var(--color-primary) 5%, transparent)}}.bg-primary\\/10{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\\/10{background-color:color-mix(in oklab, var(--color-primary) 10%, transparent)}}.bg-success{background-color:var(--color-success)}.bg-success-bg{background-color:var(--color-success-bg)}.bg-text-muted{background-color:var(--color-text-muted)}.bg-text-primary{background-color:var(--color-text-primary)}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--color-warning)}.bg-warning-bg{background-color:var(--color-warning-bg)}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing) * 0)}.p-0\\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-2xl{padding:var(--spacing-2xl)}.p-16{padding:calc(var(--spacing) * 16)}.p-lg{padding:var(--spacing-lg)}.p-md{padding:var(--spacing-md)}.p-sm{padding:var(--spacing-sm)}.p-xl{padding:var(--spacing-xl)}.p-xs{padding:var(--spacing-xs)}.px-1\\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-lg{padding-inline:var(--spacing-lg)}.px-md{padding-inline:var(--spacing-md)}.px-sm{padding-inline:var(--spacing-sm)}.px-xs{padding-inline:var(--spacing-xs)}.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-2xl{padding-block:var(--spacing-2xl)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-lg{padding-block:var(--spacing-lg)}.py-md{padding-block:var(--spacing-md)}.py-sm{padding-block:var(--spacing-sm)}.py-xl{padding-block:var(--spacing-xl)}.py-xs{padding-block:var(--spacing-xs)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-14{padding-top:calc(var(--spacing) * 14)}.pt-md{padding-top:var(--spacing-md)}.pt-sm{padding-top:var(--spacing-sm)}.pt-xl{padding-top:var(--spacing-xl)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pr-11{padding-right:calc(var(--spacing) * 11)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-10{padding-left:calc(var(--spacing) * 10)}.pl-11{padding-left:calc(var(--spacing) * 11)}.pl-14{padding-left:calc(var(--spacing) * 14)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.\\!text-body{font-size:var(--text-body)!important;line-height:var(--tw-leading,var(--text-body--line-height))!important}.\\!text-small{font-size:var(--text-small)!important;line-height:var(--tw-leading,var(--text-small--line-height))!important}.text-body{font-size:var(--text-body);line-height:var(--tw-leading,var(--text-body--line-height))}.text-caption{font-size:var(--text-caption);line-height:var(--tw-leading,var(--text-caption--line-height))}.text-h1{font-size:var(--text-h1);line-height:var(--tw-leading,var(--text-h1--line-height))}.text-h2{font-size:var(--text-h2);line-height:var(--tw-leading,var(--text-h2--line-height))}.text-h3{font-size:var(--text-h3);line-height:var(--tw-leading,var(--text-h3--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-small{font-size:var(--text-small);line-height:var(--tw-leading,var(--text-small--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-\\[1\\.2\\]{--tw-leading:1.2;line-height:1.2}.leading-\\[1\\.3\\]{--tw-leading:1.3;line-height:1.3}.leading-\\[1\\.4\\]{--tw-leading:1.4;line-height:1.4}.leading-\\[1\\.5\\]{--tw-leading:1.5;line-height:1.5}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.\\!text-white{color:var(--color-white)!important}.text-bg-primary{color:var(--color-bg-primary)}.text-epfl-canard{color:var(--color-epfl-canard)}.text-epfl-leman{color:var(--color-epfl-leman)}.text-epfl-red{color:var(--color-epfl-red)}.text-error{color:var(--color-error)}.text-info{color:var(--color-info)}.text-primary{color:var(--color-primary)}.text-success{color:var(--color-success)}.text-text-muted{color:var(--color-text-muted)}.text-text-primary{color:var(--color-text-primary)}.text-text-secondary{color:var(--color-text-secondary)}.text-warning{color:var(--color-warning)}.text-white{color:var(--color-white)}.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,)}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.decoration-dotted{text-decoration-style:dotted}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-100{opacity:1}.\\!shadow-lg{--tw-shadow:0 4px 16px var(--tw-shadow-color,#0000001a)!important;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)!important}.\\!shadow-sm{--tw-shadow:0 1px 2px var(--tw-shadow-color,#0000000f)!important;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)!important}.shadow-lg{--tw-shadow:0 4px 16px 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 2px 8px var(--tw-shadow-color,#00000014);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 2px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 8px 32px var(--tw-shadow-color,#0000001f);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)!important;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)!important}.\\!ring-primary{--tw-ring-color:var(--color-primary)!important}.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,)}.transition-\\[width\\]{transition-property:width;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-opacity{transition-property:opacity;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))}.transition-none{transition-property:none}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.peer-checked\\:bg-primary:is(:where(.peer):checked~*){background-color:var(--color-primary)}.peer-focus-visible\\:ring-2:is(:where(.peer):focus-visible~*){--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)}.peer-focus-visible\\:ring-primary:is(:where(.peer):focus-visible~*){--tw-ring-color:var(--color-primary)}.peer-focus-visible\\:ring-offset-2:is(:where(.peer):focus-visible~*){--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.peer-focus-visible\\:ring-offset-bg-primary:is(:where(.peer):focus-visible~*){--tw-ring-offset-color:var(--color-bg-primary)}.peer-disabled\\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.placeholder\\:text-text-muted::placeholder{color:var(--color-text-muted)}.after\\:absolute:after{content:var(--tw-content);position:absolute}.after\\:top-0\\.5:after{content:var(--tw-content);top:calc(var(--spacing) * .5)}.after\\:left-0\\.5:after{content:var(--tw-content);left:calc(var(--spacing) * .5)}.after\\:size-5:after{content:var(--tw-content);width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.after\\:rounded-full:after{content:var(--tw-content);border-radius:var(--radius-full)}.after\\:bg-white:after{content:var(--tw-content);background-color:var(--color-white)}.after\\:shadow-sm:after{content:var(--tw-content);--tw-shadow:0 1px 2px var(--tw-shadow-color,#0000000f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.after\\:transition-transform:after{content:var(--tw-content);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))}.after\\:content-\\[\\'\\'\\]:after{--tw-content:"";content:var(--tw-content)}.peer-checked\\:after\\:translate-x-5:is(:where(.peer):checked~*):after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing) * 5);translate:var(--tw-translate-x) var(--tw-translate-y)}.last\\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.checked\\:border-\\[5px\\]:checked{border-style:var(--tw-border-style);border-width:5px}.checked\\:border-primary:checked{border-color:var(--color-primary)}.checked\\:bg-primary:checked{background-color:var(--color-primary)}.checked\\:bg-\\[url\\(\\'data\\:image\\/svg\\+xml\\,\\%3Csvg\\%20viewBox\\%3D\\%220\\%200\\%2016\\%2016\\%22\\%20fill\\%3D\\%22white\\%22\\%20xmlns\\%3D\\%22http\\%3A\\%2F\\%2Fwww\\.w3\\.org\\%2F2000\\%2Fsvg\\%22\\%3E\\%3Cpath\\%20d\\%3D\\%22M12\\.207\\%204\\.793a1\\%201\\%200\\%20010\\%201\\.414l-5\\%205a1\\%201\\%200\\%2001-1\\.414\\%200l-2-2a1\\%201\\%200\\%20011\\.414-1\\.414L6\\.5\\%209\\.086l4\\.293-4\\.293a1\\%201\\%200\\%20011\\.414\\%200z\\%22\\%2F\\%3E\\%3C\\%2Fsvg\\%3E\\'\\)\\]:checked{background-image:url(data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22white%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.207%204.793a1%201%200%20010%201.414l-5%205a1%201%200%2001-1.414%200l-2-2a1%201%200%20011.414-1.414L6.5%209.086l4.293-4.293a1%201%200%20011.414%200z%22%2F%3E%3C%2Fsvg%3E)}.checked\\:bg-center:checked{background-position:50%}.checked\\:bg-no-repeat:checked{background-repeat:no-repeat}.indeterminate\\:border-primary:indeterminate{border-color:var(--color-primary)}.indeterminate\\:bg-primary:indeterminate{background-color:var(--color-primary)}.indeterminate\\:bg-\\[url\\(\\'data\\:image\\/svg\\+xml\\,\\%3Csvg\\%20viewBox\\%3D\\%220\\%200\\%2016\\%2016\\%22\\%20fill\\%3D\\%22white\\%22\\%20xmlns\\%3D\\%22http\\%3A\\%2F\\%2Fwww\\.w3\\.org\\%2F2000\\%2Fsvg\\%22\\%3E\\%3Crect\\%20x\\%3D\\%223\\%22\\%20y\\%3D\\%227\\%22\\%20width\\%3D\\%2210\\%22\\%20height\\%3D\\%222\\%22\\%20rx\\%3D\\%221\\%22\\%2F\\%3E\\%3C\\%2Fsvg\\%3E\\'\\)\\]:indeterminate{background-image:url(data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2016%2016%22%20fill%3D%22white%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20x%3D%223%22%20y%3D%227%22%20width%3D%2210%22%20height%3D%222%22%20rx%3D%221%22%2F%3E%3C%2Fsvg%3E)}.indeterminate\\:bg-center:indeterminate{background-position:50%}.indeterminate\\:bg-no-repeat:indeterminate{background-repeat:no-repeat}@media (hover:hover){.hover\\:border-border-strong:hover{border-color:var(--color-border-strong)}.hover\\:border-error:hover{border-color:var(--color-error)}.hover\\:border-primary:hover{border-color:var(--color-primary)}.hover\\:bg-bg-secondary:hover{background-color:var(--color-bg-secondary)}.hover\\:bg-bg-tertiary:hover,.hover\\:bg-bg-tertiary\\/70:hover{background-color:var(--color-bg-tertiary)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-bg-tertiary\\/70:hover{background-color:color-mix(in oklab, var(--color-bg-tertiary) 70%, transparent)}}.hover\\:bg-error-bg:hover{background-color:var(--color-error-bg)}.hover\\:bg-error\\/80:hover{background-color:var(--color-error)}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-error\\/80:hover{background-color:color-mix(in oklab, var(--color-error) 80%, transparent)}}.hover\\:bg-primary-hover:hover{background-color:var(--color-primary-hover)}.hover\\:text-primary:hover{color:var(--color-primary)}.hover\\:text-text-primary:hover{color:var(--color-text-primary)}.hover\\:text-text-secondary:hover{color:var(--color-text-secondary)}.hover\\:opacity-90:hover{opacity:.9}}.focus\\:border-error:focus{border-color:var(--color-error)}.focus\\:border-primary:focus{border-color:var(--color-primary)}.focus\\:bg-bg-tertiary:focus{background-color:var(--color-bg-tertiary)}.focus\\:bg-error-bg:focus{background-color:var(--color-error-bg)}.focus\\:ring-1:focus{--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)}.focus\\:ring-error:focus{--tw-ring-color:var(--color-error)}.focus\\:ring-primary:focus{--tw-ring-color:var(--color-primary)}.focus-visible\\:ring-2:focus-visible{--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-visible\\:ring-epfl-canard:focus-visible{--tw-ring-color:var(--color-epfl-canard)}.focus-visible\\:ring-error:focus-visible{--tw-ring-color:var(--color-error)}.focus-visible\\:ring-primary:focus-visible{--tw-ring-color:var(--color-primary)}.focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\\:ring-offset-bg-primary:focus-visible{--tw-ring-offset-color:var(--color-bg-primary)}.focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:bg-bg-secondary:disabled{background-color:var(--color-bg-secondary)}.disabled\\:opacity-50:disabled{opacity:.5}@media (width>=40rem){.sm\\:col-span-2{grid-column:span 2/span 2}.sm\\:w-1\\/3{width:33.3333%}.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\\:flex-row{flex-direction:row}.sm\\:gap-lg{gap:var(--spacing-lg)}}@media (width>=48rem){.md\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=64rem){.lg\\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\\:px-lg{padding-inline:var(--spacing-lg)}}.\\[\\&\\>svg\\]\\:size-4>svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\\[\\&\\>svg\\]\\:size-5>svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg-primary:#fff;--bg-secondary:#f5f5f5;--bg-tertiary:#e6e6e6;--border-default:#d5d5d5;--border-strong:#c1c1c1;--text-primary:#212121;--text-secondary:#707070;--text-muted:#8e8e8e;--semantic-success:#1b874b;--semantic-success-bg:#e8f5e9;--semantic-warning:#d4860a;--semantic-warning-bg:#fff3e0;--semantic-error:#d32f2f;--semantic-error-bg:#ffebee;--semantic-info:#1976d2;--semantic-info-bg:#e3f2fd;--action-primary:#007480;--action-primary-hover:#004248;--logo-filter:brightness(0);--logo-opacity:.5}.dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg-primary:#1a1a1a;--bg-secondary:#242424;--bg-tertiary:#2e2e2e;--border-default:#3a3a3a;--border-strong:#505050;--text-primary:#f0f0f0;--text-secondary:#a0a0a0;--text-muted:#707070;--semantic-success:#34d37a;--semantic-success-bg:#1a2e1a;--semantic-warning:#ffad33;--semantic-warning-bg:#2e2410;--semantic-error:#ff6b6b;--semantic-error-bg:#2e1515;--semantic-info:#64b5f6;--semantic-info-bg:#152538;--action-primary:#009ba6;--action-primary-hover:#007480;--logo-filter:brightness(0) invert(1);--logo-opacity:1;--shadow-sm:0 1px 2px #0000004d;--shadow-md:0 2px 8px #0006;--shadow-lg:0 4px 16px #00000080;--shadow-xl:0 8px 32px #0009}@keyframes slide-in{0%{opacity:0;transform:translate(1rem)}to{opacity:1;transform:translate(0)}}@keyframes dialog-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes floating-in{0%{opacity:0}to{opacity:1}}body{font-family:var(--font-sans);font-size:var(--text-body);line-height:var(--text-body--line-height);color:var(--color-text-primary);background-color:var(--color-bg-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.poesis-desktop-flex{display:none}.poesis-mobile-only{display:flex}@media (width>=1024px){.poesis-desktop-flex{display:flex}.poesis-mobile-only{display:none}}@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-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@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:"<percentage>";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:"<percentage>";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:"<length>";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-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:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}
3
3
  /*$vite$:1*/`)),document.head.appendChild(e)}}catch(e){console.error(`vite-plugin-css-injected-by-js`,e)}})();import { createContext as e, forwardRef as t, useCallback as n, useContext as r, useEffect as i, useId as a, useMemo as o, useRef as s, useState as c, useSyncExternalStore as l } from "react";
4
4
  import { Fragment as u, jsx as d, jsxs as f } from "react/jsx-runtime";
5
- import { BoxArrowInRight as p, BoxArrowRight as m, CheckCircleFill as h, ChevronBarLeft as g, ChevronBarRight as _, ChevronDown as v, ChevronLeft as y, ChevronRight as b, CloudArrowUp as x, ExclamationTriangleFill as S, InfoCircleFill as C, List as w, MoonFill as T, SortAlphaDown as E, SortAlphaDownAlt as D, SortDown as O, SortNumericDown as k, SortNumericDownAlt as A, SunFill as ee, X as j, XCircleFill as te, XLg as ne } from "react-bootstrap-icons";
6
- import { useTranslation as M } from "react-i18next";
7
- import re from "react-select";
8
- import { FloatingFocusManager as ie, FloatingPortal as N, arrow as ae, autoUpdate as P, flip as F, offset as I, shift as L, useClick as oe, useDismiss as R, useFloating as z, useFocus as se, useHover as ce, useInteractions as B, useListNavigation as le, useRole as V } from "@floating-ui/react";
9
- import { createPortal as ue } from "react-dom";
5
+ import { BoxArrowInRight as p, BoxArrowRight as m, CheckCircleFill as h, ChevronBarLeft as g, ChevronBarRight as _, ChevronDown as v, ChevronLeft as y, ChevronRight as b, CloudArrowUp as x, ExclamationTriangleFill as S, InfoCircleFill as C, List as w, MoonFill as T, Sliders as E, SortAlphaDown as D, SortAlphaDownAlt as O, SortDown as k, SortNumericDown as A, SortNumericDownAlt as j, SunFill as M, X as N, XCircleFill as P, XLg as F } from "react-bootstrap-icons";
6
+ import { useTranslation as I } from "react-i18next";
7
+ import ee from "react-select";
8
+ import { FloatingFocusManager as L, FloatingPortal as R, arrow as z, autoUpdate as B, flip as V, offset as H, shift as U, useClick as W, useDismiss as G, useFloating as K, useFocus as te, useHover as ne, useInteractions as q, useListNavigation as re, useRole as J } from "@floating-ui/react";
9
+ import { createPortal as ie } from "react-dom";
10
10
  //#region src/components/ui/Avatar.tsx
11
- var de = {
11
+ var ae = {
12
12
  sm: "size-8 text-caption",
13
13
  md: "size-10 text-small",
14
14
  lg: "size-14 text-body"
15
15
  };
16
- function fe(e) {
16
+ function oe(e) {
17
17
  let t = e.trim().split(/\s+/);
18
18
  return t.length === 0 ? "?" : t.length === 1 ? t[0][0].toUpperCase() : (t[0][0] + t[t.length - 1][0]).toUpperCase();
19
19
  }
20
- function pe({ src: e, name: t, size: n = "md", alt: r, className: i = "", ...a }) {
20
+ function se({ src: e, name: t, size: n = "md", alt: r, className: i = "", ...a }) {
21
21
  let [o, s] = c(!1), l = !!e && !o;
22
22
  return /* @__PURE__ */ d("span", {
23
23
  role: "img",
@@ -25,7 +25,7 @@ function pe({ src: e, name: t, size: n = "md", alt: r, className: i = "", ...a }
25
25
  className: [
26
26
  "inline-flex items-center justify-center rounded-full overflow-hidden",
27
27
  "bg-primary text-white font-semibold select-none shrink-0",
28
- de[n],
28
+ ae[n],
29
29
  i
30
30
  ].join(" "),
31
31
  ...a,
@@ -36,35 +36,35 @@ function pe({ src: e, name: t, size: n = "md", alt: r, className: i = "", ...a }
36
36
  onError: () => s(!0)
37
37
  }) : /* @__PURE__ */ d("span", {
38
38
  "aria-hidden": "true",
39
- children: fe(t)
39
+ children: oe(t)
40
40
  })
41
41
  });
42
42
  }
43
43
  //#endregion
44
44
  //#region src/components/ui/Badge.tsx
45
- var me = {
45
+ var ce = {
46
46
  default: "bg-bg-tertiary text-text-primary",
47
47
  success: "bg-success-bg text-success",
48
48
  warning: "bg-warning-bg text-warning",
49
49
  error: "bg-error-bg text-error",
50
50
  info: "bg-info-bg text-info"
51
- }, he = {
51
+ }, le = {
52
52
  default: "bg-text-muted",
53
53
  success: "bg-success",
54
54
  warning: "bg-warning",
55
55
  error: "bg-error",
56
56
  info: "bg-info"
57
57
  };
58
- function H({ color: e = "default", dot: t, className: n = "", children: r, ...i }) {
58
+ function Y({ color: e = "default", dot: t, className: n = "", children: r, ...i }) {
59
59
  return t ? /* @__PURE__ */ d("span", {
60
60
  role: "status",
61
- className: `inline-block size-2.5 rounded-full ${he[e]} ${n}`,
61
+ className: `inline-block size-2.5 rounded-full ${le[e]} ${n}`,
62
62
  ...i
63
63
  }) : /* @__PURE__ */ d("span", {
64
64
  className: [
65
65
  "inline-flex items-center rounded-sm px-2 py-0.5",
66
66
  "text-caption font-medium leading-none",
67
- me[e],
67
+ ce[e],
68
68
  n
69
69
  ].join(" "),
70
70
  ...i,
@@ -73,17 +73,17 @@ function H({ color: e = "default", dot: t, className: n = "", children: r, ...i
73
73
  }
74
74
  //#endregion
75
75
  //#region src/components/ui/Spinner.tsx
76
- var ge = {
76
+ var ue = {
77
77
  sm: "size-4",
78
78
  md: "size-6",
79
79
  lg: "size-8"
80
80
  };
81
- function U({ size: e = "md", className: t = "", ...n }) {
81
+ function X({ size: e = "md", className: t = "", ...n }) {
82
82
  return /* @__PURE__ */ f("svg", {
83
83
  viewBox: "0 0 24 24",
84
84
  fill: "none",
85
85
  xmlns: "http://www.w3.org/2000/svg",
86
- className: `animate-spin ${ge[e]} ${t}`,
86
+ className: `animate-spin ${ue[e]} ${t}`,
87
87
  role: "status",
88
88
  "aria-label": "Loading",
89
89
  ...n,
@@ -103,20 +103,20 @@ function U({ size: e = "md", className: t = "", ...n }) {
103
103
  }
104
104
  //#endregion
105
105
  //#region src/components/ui/Button.tsx
106
- var _e = {
106
+ var de = {
107
107
  primary: "bg-primary text-white hover:bg-primary-hover focus-visible:ring-primary",
108
108
  secondary: "border border-border text-text-primary bg-bg-primary hover:bg-bg-tertiary focus-visible:ring-primary",
109
109
  ghost: "text-text-primary hover:bg-bg-tertiary focus-visible:ring-primary",
110
110
  danger: "bg-error text-white hover:opacity-90 focus-visible:ring-error"
111
- }, ve = {
111
+ }, fe = {
112
112
  sm: "text-small px-3 py-1 gap-1.5",
113
113
  md: "text-body px-4 py-2 gap-2",
114
114
  lg: "text-body px-5 py-2.5 gap-2"
115
- }, ye = {
115
+ }, pe = {
116
116
  sm: "sm",
117
117
  md: "sm",
118
118
  lg: "md"
119
- }, be = t(function({ variant: e = "primary", size: t = "md", loading: n = !1, disabled: r, iconLeft: i, iconRight: a, className: o = "", children: s, ...c }, l) {
119
+ }, me = t(function({ variant: e = "primary", size: t = "md", loading: n = !1, disabled: r, iconLeft: i, iconRight: a, className: o = "", children: s, ...c }, l) {
120
120
  let u = r || n;
121
121
  return /* @__PURE__ */ f("button", {
122
122
  ref: l,
@@ -127,31 +127,31 @@ var _e = {
127
127
  "inline-flex items-center justify-center font-medium rounded-md",
128
128
  "transition-colors duration-150 cursor-pointer",
129
129
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
130
- _e[e],
131
- ve[t],
130
+ de[e],
131
+ fe[t],
132
132
  u && "opacity-50 pointer-events-none",
133
133
  o
134
134
  ].filter(Boolean).join(" "),
135
135
  ...c,
136
136
  children: [
137
- n ? /* @__PURE__ */ d(U, {
138
- size: ye[t],
137
+ n ? /* @__PURE__ */ d(X, {
138
+ size: pe[t],
139
139
  "aria-hidden": "true"
140
140
  }) : i,
141
141
  s,
142
142
  !n && a
143
143
  ]
144
144
  });
145
- }), xe = {
145
+ }), he = {
146
146
  primary: "bg-primary text-white hover:bg-primary-hover focus-visible:ring-primary",
147
147
  secondary: "border border-border text-text-primary bg-bg-primary hover:bg-bg-tertiary focus-visible:ring-primary",
148
148
  ghost: "text-text-primary hover:bg-bg-tertiary focus-visible:ring-primary",
149
149
  danger: "bg-error text-white hover:opacity-90 focus-visible:ring-error"
150
- }, Se = {
150
+ }, ge = {
151
151
  sm: "size-7 text-small",
152
152
  md: "size-9 text-body",
153
153
  lg: "size-11 text-body"
154
- }, Ce = t(function({ variant: e = "ghost", size: t = "md", loading: n = !1, disabled: r, icon: i, className: a = "", ...o }, s) {
154
+ }, _e = t(function({ variant: e = "ghost", size: t = "md", loading: n = !1, disabled: r, icon: i, className: a = "", ...o }, s) {
155
155
  let c = r || n;
156
156
  return /* @__PURE__ */ d("button", {
157
157
  ref: s,
@@ -162,27 +162,27 @@ var _e = {
162
162
  "inline-flex items-center justify-center rounded-md",
163
163
  "transition-colors duration-150 cursor-pointer",
164
164
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
165
- xe[e],
166
- Se[t],
165
+ he[e],
166
+ ge[t],
167
167
  c && "opacity-50 pointer-events-none",
168
168
  a
169
169
  ].filter(Boolean).join(" "),
170
170
  ...o,
171
- children: n ? /* @__PURE__ */ d(U, {
171
+ children: n ? /* @__PURE__ */ d(X, {
172
172
  size: "sm",
173
173
  "aria-hidden": "true"
174
174
  }) : i
175
175
  });
176
- }), we = {
176
+ }), ve = {
177
177
  sm: "h-7 min-w-7 px-1.5 text-small",
178
178
  md: "h-9 min-w-9 px-2 text-body",
179
179
  lg: "h-11 min-w-11 px-3 text-body"
180
- }, Te = {
180
+ }, ye = {
181
181
  sm: 14,
182
182
  md: 16,
183
183
  lg: 18
184
184
  };
185
- function Ee(e, t, n, r) {
185
+ function be(e, t, n, r) {
186
186
  if (t <= r * 2 + n * 2 + 3) return Array.from({ length: t }, (e, t) => t + 1);
187
187
  let i = Array.from({ length: r }, (e, t) => t + 1), a = Array.from({ length: r }, (e, n) => t - r + 1 + n), o = Math.max(r + 2, e - n), s = Math.min(t - r - 1, e + n), c = o > r + 2, l = s < t - r - 1, u = [];
188
188
  if (u.push(...i), c) u.push("ellipsis-start");
@@ -192,20 +192,20 @@ function Ee(e, t, n, r) {
192
192
  else for (let e = s + 1; e <= t - r; e++) u.push(e);
193
193
  return u.push(...a), u;
194
194
  }
195
- var De = t(function({ totalPages: e, page: t, defaultPage: r = 1, onChange: i, siblingCount: a = 1, boundaryCount: o = 1, showFirstLast: s = !1, size: l = "md", disabled: u = !1, className: p = "", ...m }, h) {
196
- let { t: v } = M(), x = t !== void 0, [S, C] = c(r), w = Math.min(Math.max(x ? t : S, 1), e), T = n((t) => {
195
+ var xe = t(function({ totalPages: e, page: t, defaultPage: r = 1, onChange: i, siblingCount: a = 1, boundaryCount: o = 1, showFirstLast: s = !1, size: l = "md", disabled: u = !1, className: p = "", ...m }, h) {
196
+ let { t: v } = I(), x = t !== void 0, [S, C] = c(r), w = Math.min(Math.max(x ? t : S, 1), e), T = n((t) => {
197
197
  let n = Math.min(Math.max(t, 1), e);
198
198
  x || C(n), i?.(n);
199
199
  }, [
200
200
  x,
201
201
  i,
202
202
  e
203
- ]), E = Ee(w, e, a, o), D = Te[l], O = w <= 1, k = w >= e, A = [
203
+ ]), E = be(w, e, a, o), D = ye[l], O = w <= 1, k = w >= e, A = [
204
204
  "inline-flex items-center justify-center rounded-md font-medium",
205
205
  "transition-colors duration-150 cursor-pointer",
206
206
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-epfl-canard",
207
- we[l]
208
- ].join(" "), ee = (e) => [A, e ? "bg-epfl-canard text-white" : "text-text-primary hover:bg-bg-tertiary"].filter(Boolean).join(" "), j = (e) => [
207
+ ve[l]
208
+ ].join(" "), j = (e) => [A, e ? "bg-epfl-canard text-white" : "text-text-primary hover:bg-bg-tertiary"].filter(Boolean).join(" "), M = (e) => [
209
209
  A,
210
210
  "text-text-secondary hover:bg-bg-tertiary",
211
211
  (u || e) && "opacity-40 pointer-events-none"
@@ -220,7 +220,7 @@ var De = t(function({ totalPages: e, page: t, defaultPage: r = 1, onChange: i, s
220
220
  type: "button",
221
221
  "aria-label": v("common.first"),
222
222
  disabled: u || O,
223
- className: j(O),
223
+ className: M(O),
224
224
  onClick: () => T(1),
225
225
  children: /* @__PURE__ */ d(g, {
226
226
  size: D,
@@ -231,7 +231,7 @@ var De = t(function({ totalPages: e, page: t, defaultPage: r = 1, onChange: i, s
231
231
  type: "button",
232
232
  "aria-label": v("common.previous"),
233
233
  disabled: u || O,
234
- className: j(O),
234
+ className: M(O),
235
235
  onClick: () => T(w - 1),
236
236
  children: /* @__PURE__ */ d(y, {
237
237
  size: D,
@@ -241,7 +241,7 @@ var De = t(function({ totalPages: e, page: t, defaultPage: r = 1, onChange: i, s
241
241
  E.map((e) => {
242
242
  if (typeof e == "string") return /* @__PURE__ */ d("span", {
243
243
  "aria-hidden": !0,
244
- className: ["inline-flex items-center justify-center select-none text-text-secondary", we[l]].join(" "),
244
+ className: ["inline-flex items-center justify-center select-none text-text-secondary", ve[l]].join(" "),
245
245
  children: "…"
246
246
  }, e);
247
247
  let t = e === w;
@@ -250,7 +250,7 @@ var De = t(function({ totalPages: e, page: t, defaultPage: r = 1, onChange: i, s
250
250
  "aria-current": t ? "page" : void 0,
251
251
  "aria-label": v("common.goToPage", { page: e }),
252
252
  disabled: u,
253
- className: [ee(t), u && "opacity-40 pointer-events-none"].filter(Boolean).join(" "),
253
+ className: [j(t), u && "opacity-40 pointer-events-none"].filter(Boolean).join(" "),
254
254
  onClick: () => T(e),
255
255
  children: e
256
256
  }, e);
@@ -259,7 +259,7 @@ var De = t(function({ totalPages: e, page: t, defaultPage: r = 1, onChange: i, s
259
259
  type: "button",
260
260
  "aria-label": v("common.next"),
261
261
  disabled: u || k,
262
- className: j(k),
262
+ className: M(k),
263
263
  onClick: () => T(w + 1),
264
264
  children: /* @__PURE__ */ d(b, {
265
265
  size: D,
@@ -270,7 +270,7 @@ var De = t(function({ totalPages: e, page: t, defaultPage: r = 1, onChange: i, s
270
270
  type: "button",
271
271
  "aria-label": v("common.last"),
272
272
  disabled: u || k,
273
- className: j(k),
273
+ className: M(k),
274
274
  onClick: () => T(e),
275
275
  children: /* @__PURE__ */ d(_, {
276
276
  size: D,
@@ -282,10 +282,10 @@ var De = t(function({ totalPages: e, page: t, defaultPage: r = 1, onChange: i, s
282
282
  });
283
283
  //#endregion
284
284
  //#region src/components/ui/FileUpload.tsx
285
- function Oe(e) {
285
+ function Se(e) {
286
286
  return e < 1024 ? `${e} B` : e < 1024 * 1024 ? `${(e / 1024).toFixed(1)} KB` : `${(e / (1024 * 1024)).toFixed(1)} MB`;
287
287
  }
288
- function ke({ accept: e, multiple: t = !1, maxSize: r, onFilesSelected: i, onReject: a, disabled: o = !1, label: l = "Drop files here or click to browse", helperText: u, error: p, illustration: m, className: h = "" }) {
288
+ function Ce({ accept: e, multiple: t = !1, maxSize: r, onFilesSelected: i, onReject: a, disabled: o = !1, label: l = "Drop files here or click to browse", helperText: u, error: p, illustration: m, className: h = "" }) {
289
289
  let [g, _] = c(!1), [v, y] = c([]), b = s(null), S = !!p, C = n((e) => {
290
290
  let n = Array.from(e), o = [], s = [];
291
291
  for (let e of n) r && e.size > r ? s.push(e) : o.push(e);
@@ -375,7 +375,7 @@ function ke({ accept: e, multiple: t = !1, maxSize: r, onFilesSelected: i, onRej
375
375
  }),
376
376
  /* @__PURE__ */ d("span", {
377
377
  className: "shrink-0 text-text-secondary",
378
- children: Oe(e.size)
378
+ children: Se(e.size)
379
379
  }),
380
380
  /* @__PURE__ */ d("button", {
381
381
  type: "button",
@@ -384,7 +384,7 @@ function ke({ accept: e, multiple: t = !1, maxSize: r, onFilesSelected: i, onRej
384
384
  },
385
385
  className: "shrink-0 p-0.5 rounded-sm text-text-secondary hover:text-text-primary hover:bg-bg-tertiary transition-colors cursor-pointer",
386
386
  "aria-label": `Remove ${e.name}`,
387
- children: /* @__PURE__ */ d(j, { size: 14 })
387
+ children: /* @__PURE__ */ d(N, { size: 14 })
388
388
  })
389
389
  ]
390
390
  }, `${e.name}-${e.size}-${t}`))
@@ -394,30 +394,30 @@ function ke({ accept: e, multiple: t = !1, maxSize: r, onFilesSelected: i, onRej
394
394
  }
395
395
  //#endregion
396
396
  //#region src/components/ui/ProgressBar.tsx
397
- var Ae = {
397
+ var we = {
398
398
  sm: "h-1.5",
399
399
  md: "h-2.5",
400
400
  lg: "h-4"
401
- }, je = {
401
+ }, Te = {
402
402
  primary: "bg-primary",
403
403
  success: "bg-success",
404
404
  warning: "bg-warning",
405
405
  error: "bg-error",
406
406
  info: "bg-info"
407
- }, Me = t(function({ value: e, variant: t = "primary", size: n = "md", showLabel: r = !1, formatLabel: i, className: a = "", ...o }, s) {
407
+ }, Ee = t(function({ value: e, variant: t = "primary", size: n = "md", showLabel: r = !1, formatLabel: i, className: a = "", ...o }, s) {
408
408
  let c = Math.round(Math.min(100, Math.max(0, e))), l = i ? i(c) : `${c}%`;
409
409
  return /* @__PURE__ */ f("div", {
410
410
  ref: s,
411
411
  className: `flex items-center gap-2 ${a}`,
412
412
  ...o,
413
413
  children: [/* @__PURE__ */ d("div", {
414
- className: ["flex-1 overflow-hidden rounded-full bg-bg-tertiary", Ae[n]].join(" "),
414
+ className: ["flex-1 overflow-hidden rounded-full bg-bg-tertiary", we[n]].join(" "),
415
415
  role: "progressbar",
416
416
  "aria-valuenow": c,
417
417
  "aria-valuemin": 0,
418
418
  "aria-valuemax": 100,
419
419
  children: /* @__PURE__ */ d("div", {
420
- className: ["h-full rounded-full transition-all duration-300 ease-out", je[t]].join(" "),
420
+ className: ["h-full rounded-full transition-all duration-300 ease-out", Te[t]].join(" "),
421
421
  style: { width: `${c}%` }
422
422
  })
423
423
  }), r && /* @__PURE__ */ d("span", {
@@ -425,7 +425,7 @@ var Ae = {
425
425
  children: l
426
426
  })]
427
427
  });
428
- }), Ne = t(function({ label: e, indeterminate: t = !1, helperText: r, error: o, className: c = "", id: l, disabled: u, ...p }, m) {
428
+ }), Z = t(function({ label: e, indeterminate: t = !1, helperText: r, error: o, className: c = "", id: l, disabled: u, ...p }, m) {
429
429
  let h = a(), g = l ?? h, _ = `${g}-helper`, v = !!o, y = s(null), b = n((e) => {
430
430
  y.current = e, typeof m == "function" ? m(e) : m && (m.current = e);
431
431
  }, [m]);
@@ -465,23 +465,23 @@ var Ae = {
465
465
  children: o ?? r
466
466
  })]
467
467
  });
468
- }), Pe = {
468
+ }), De = {
469
469
  sm: "h-8 text-small px-2.5",
470
470
  md: "h-10 text-body px-3",
471
471
  lg: "h-12 text-body px-3.5"
472
- }, Fe = {
472
+ }, Oe = {
473
473
  sm: "pl-8",
474
474
  md: "pl-10",
475
475
  lg: "pl-11"
476
- }, Ie = {
476
+ }, ke = {
477
477
  sm: "pr-8",
478
478
  md: "pr-10",
479
479
  lg: "pr-11"
480
- }, Le = {
480
+ }, Ae = {
481
481
  sm: "[&>svg]:size-4",
482
482
  md: "[&>svg]:size-5",
483
483
  lg: "[&>svg]:size-5"
484
- }, Re = t(function({ label: e, helperText: t, error: n, leftIcon: r, rightIcon: i, inputSize: o = "md", className: s = "", id: c, disabled: l, ...u }, p) {
484
+ }, je = t(function({ label: e, helperText: t, error: n, leftIcon: r, rightIcon: i, inputSize: o = "md", className: s = "", id: c, disabled: l, ...u }, p) {
485
485
  let m = a(), h = c ?? m, g = `${h}-helper`, _ = !!n;
486
486
  return /* @__PURE__ */ f("div", {
487
487
  className: `flex flex-col gap-1.5 ${s}`,
@@ -495,7 +495,7 @@ var Ae = {
495
495
  className: "relative",
496
496
  children: [
497
497
  r && /* @__PURE__ */ d("span", {
498
- className: `pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3 text-text-secondary ${Le[o]}`,
498
+ className: `pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3 text-text-secondary ${Ae[o]}`,
499
499
  "aria-hidden": "true",
500
500
  children: r
501
501
  }),
@@ -511,14 +511,14 @@ var Ae = {
511
511
  "focus:border-primary focus:ring-1 focus:ring-primary",
512
512
  "disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-bg-secondary",
513
513
  _ ? "border-error focus:border-error focus:ring-error" : "border-border hover:border-border-strong",
514
- Pe[o],
515
- r ? Fe[o] : "",
516
- i ? Ie[o] : ""
514
+ De[o],
515
+ r ? Oe[o] : "",
516
+ i ? ke[o] : ""
517
517
  ].join(" "),
518
518
  ...u
519
519
  }),
520
520
  i && /* @__PURE__ */ d("span", {
521
- className: `pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-text-secondary ${Le[o]}`,
521
+ className: `pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-text-secondary ${Ae[o]}`,
522
522
  "aria-hidden": "true",
523
523
  children: i
524
524
  })
@@ -531,15 +531,15 @@ var Ae = {
531
531
  })
532
532
  ]
533
533
  });
534
- }), W = e(null);
535
- function ze() {
536
- let e = r(W);
534
+ }), Me = e(null);
535
+ function Ne() {
536
+ let e = r(Me);
537
537
  if (!e) throw Error("RadioGroup.Item must be used within RadioGroup");
538
538
  return e;
539
539
  }
540
- function G({ name: e, value: t, onChange: n, label: r, helperText: i, error: o, orientation: s = "vertical", disabled: c = !1, children: l, className: u = "" }) {
540
+ function Pe({ name: e, value: t, onChange: n, label: r, helperText: i, error: o, orientation: s = "vertical", disabled: c = !1, children: l, className: u = "" }) {
541
541
  let p = a(), m = e ?? p, h = `${`${m}-group`}-helper`, g = !!o;
542
- return /* @__PURE__ */ d(W.Provider, {
542
+ return /* @__PURE__ */ d(Me.Provider, {
543
543
  value: {
544
544
  name: m,
545
545
  value: t,
@@ -570,8 +570,8 @@ function G({ name: e, value: t, onChange: n, label: r, helperText: i, error: o,
570
570
  })
571
571
  });
572
572
  }
573
- function Be({ value: e, label: t, description: n, disabled: r }) {
574
- let { name: i, value: o, onChange: s, disabled: c, hasError: l } = ze(), u = a(), p = c || r;
573
+ function Fe({ value: e, label: t, description: n, disabled: r }) {
574
+ let { name: i, value: o, onChange: s, disabled: c, hasError: l } = Ne(), u = a(), p = c || r;
575
575
  return /* @__PURE__ */ f("div", {
576
576
  className: "flex items-start gap-2",
577
577
  children: [/* @__PURE__ */ d("input", {
@@ -603,10 +603,10 @@ function Be({ value: e, label: t, description: n, disabled: r }) {
603
603
  })]
604
604
  });
605
605
  }
606
- G.Item = Be;
606
+ Pe.Item = Fe;
607
607
  //#endregion
608
608
  //#region src/theme/reactSelectStyles.ts
609
- var Ve = (e) => ({
609
+ var Ie = (e) => ({
610
610
  ...e,
611
611
  borderRadius: 8,
612
612
  colors: {
@@ -629,21 +629,21 @@ var Ve = (e) => ({
629
629
  danger: "var(--color-error)",
630
630
  dangerLight: "var(--color-error-bg)"
631
631
  }
632
- }), K = {
632
+ }), Le = {
633
633
  control: ({ isFocused: e }) => `!shadow-sm !rounded-md !border-border ${e ? "!border-primary !ring-1 !ring-primary" : ""}`,
634
634
  menu: () => "!rounded-lg !shadow-lg !border !border-border",
635
635
  option: ({ isFocused: e, isSelected: t }) => `${t ? "!bg-primary !text-white" : e ? "!bg-bg-tertiary" : ""}`,
636
636
  multiValue: () => "!rounded-sm !bg-bg-tertiary"
637
- }, He = {
637
+ }, Re = {
638
638
  sm: "!min-h-8 !text-small",
639
639
  md: "!min-h-10 !text-body",
640
640
  lg: "!min-h-12 !text-body"
641
- }, q = {
641
+ }, Q = {
642
642
  sm: 32,
643
643
  md: 40,
644
644
  lg: 48
645
645
  };
646
- function Ue({ label: e, helperText: t, error: n, selectSize: r = "md", className: i = "", ...o }) {
646
+ function ze({ label: e, helperText: t, error: n, selectSize: r = "md", className: i = "", ...o }) {
647
647
  let s = a(), c = o.inputId ?? s, l = `${c}-helper`, u = !!n;
648
648
  return /* @__PURE__ */ f("div", {
649
649
  className: `flex flex-col gap-1.5 ${i}`,
@@ -653,19 +653,19 @@ function Ue({ label: e, helperText: t, error: n, selectSize: r = "md", className
653
653
  className: "text-small font-medium text-text-primary",
654
654
  children: e
655
655
  }),
656
- /* @__PURE__ */ d(re, {
656
+ /* @__PURE__ */ d(ee, {
657
657
  inputId: c,
658
- theme: Ve,
658
+ theme: Ie,
659
659
  menuPortalTarget: document.body,
660
660
  styles: {
661
661
  control: (e, t) => ({
662
662
  ...e,
663
- minHeight: q[r],
664
- height: t.isMulti ? void 0 : q[r]
663
+ minHeight: Q[r],
664
+ height: t.isMulti ? void 0 : Q[r]
665
665
  }),
666
666
  valueContainer: (e) => ({
667
667
  ...e,
668
- height: o.isMulti ? void 0 : q[r] - 2,
668
+ height: o.isMulti ? void 0 : Q[r] - 2,
669
669
  padding: "0 6px"
670
670
  }),
671
671
  input: (e) => ({
@@ -676,7 +676,7 @@ function Ue({ label: e, helperText: t, error: n, selectSize: r = "md", className
676
676
  }),
677
677
  indicatorsContainer: (e) => ({
678
678
  ...e,
679
- height: o.isMulti ? void 0 : q[r] - 2
679
+ height: o.isMulti ? void 0 : Q[r] - 2
680
680
  }),
681
681
  menuPortal: (e) => ({
682
682
  ...e,
@@ -685,9 +685,9 @@ function Ue({ label: e, helperText: t, error: n, selectSize: r = "md", className
685
685
  ...o.styles
686
686
  },
687
687
  classNames: {
688
- ...K,
688
+ ...Le,
689
689
  control: (e) => {
690
- let t = `${K.control?.(e) ?? ""} ${He[r]}`;
690
+ let t = `${Le.control?.(e) ?? ""} ${Re[r]}`;
691
691
  return u ? `${t} !border-error !focus:ring-error` : t;
692
692
  }
693
693
  },
@@ -705,7 +705,7 @@ function Ue({ label: e, helperText: t, error: n, selectSize: r = "md", className
705
705
  }
706
706
  //#endregion
707
707
  //#region src/components/ui/Switch.tsx
708
- var We = t(function({ label: e, helperText: t, className: n = "", id: r, disabled: i, ...o }, s) {
708
+ var Be = t(function({ label: e, helperText: t, className: n = "", id: r, disabled: i, ...o }, s) {
709
709
  let c = a(), l = r ?? c, u = `${l}-helper`;
710
710
  return /* @__PURE__ */ f("div", {
711
711
  className: `flex flex-col gap-1 ${n}`,
@@ -748,7 +748,7 @@ var We = t(function({ label: e, helperText: t, className: n = "", id: r, disable
748
748
  children: t
749
749
  })]
750
750
  });
751
- }), Ge = t(function({ label: e, helperText: t, error: r, autoGrow: o = !1, minRows: c = 3, className: l = "", id: u, disabled: p, onChange: m, ...h }, g) {
751
+ }), Ve = t(function({ label: e, helperText: t, error: r, autoGrow: o = !1, minRows: c = 3, className: l = "", id: u, disabled: p, onChange: m, ...h }, g) {
752
752
  let _ = a(), v = u ?? _, y = `${v}-helper`, b = !!r, x = s(null), S = n(() => {
753
753
  let e = x.current;
754
754
  !e || !o || (e.style.height = "auto", e.style.height = `${e.scrollHeight}px`);
@@ -798,20 +798,20 @@ var We = t(function({ label: e, helperText: t, className: n = "", id: r, disable
798
798
  })
799
799
  ]
800
800
  });
801
- }), Ke = e({
801
+ }), He = e({
802
802
  close: () => {},
803
803
  getItemProps: () => ({}),
804
804
  activeIndex: null,
805
805
  setActiveIndex: () => {}
806
806
  });
807
- function qe() {
807
+ function Ue() {
808
808
  return /* @__PURE__ */ d("div", {
809
809
  role: "separator",
810
810
  className: "my-1 border-t border-border"
811
811
  });
812
812
  }
813
- var Je = t(function({ children: e, icon: t, danger: n = !1, disabled: i = !1, onClick: a, className: o = "", ...s }, c) {
814
- let { close: l } = r(Ke);
813
+ var We = t(function({ children: e, icon: t, danger: n = !1, disabled: i = !1, onClick: a, className: o = "", ...s }, c) {
814
+ let { close: l } = r(He);
815
815
  return /* @__PURE__ */ f("button", {
816
816
  ref: c,
817
817
  type: "button",
@@ -834,22 +834,22 @@ var Je = t(function({ children: e, icon: t, danger: n = !1, disabled: i = !1, on
834
834
  }), e]
835
835
  });
836
836
  });
837
- function Ye({ trigger: e, children: t, placement: r = "bottom-start", className: i = "" }) {
838
- let [a, o] = c(!1), [l, p] = c(null), m = s([]), { refs: h, floatingStyles: g, context: _ } = z({
837
+ function Ge({ trigger: e, children: t, placement: r = "bottom-start", className: i = "" }) {
838
+ let [a, o] = c(!1), [l, p] = c(null), m = s([]), { refs: h, floatingStyles: g, context: _ } = K({
839
839
  open: a,
840
840
  onOpenChange: o,
841
841
  placement: r,
842
842
  middleware: [
843
- I(4),
844
- F(),
845
- L({ padding: 8 })
843
+ H(4),
844
+ V(),
845
+ U({ padding: 8 })
846
846
  ],
847
- whileElementsMounted: P
848
- }), { getReferenceProps: v, getFloatingProps: y, getItemProps: b } = B([
849
- oe(_),
850
- R(_),
851
- V(_, { role: "menu" }),
852
- le(_, {
847
+ whileElementsMounted: B
848
+ }), { getReferenceProps: v, getFloatingProps: y, getItemProps: b } = q([
849
+ W(_),
850
+ G(_),
851
+ J(_, { role: "menu" }),
852
+ re(_, {
853
853
  listRef: m,
854
854
  activeIndex: l,
855
855
  onNavigate: p,
@@ -861,7 +861,7 @@ function Ye({ trigger: e, children: t, placement: r = "bottom-start", className:
861
861
  className: "inline-flex",
862
862
  ...v(),
863
863
  children: e
864
- }), a && /* @__PURE__ */ d(N, { children: /* @__PURE__ */ d(ie, {
864
+ }), a && /* @__PURE__ */ d(R, { children: /* @__PURE__ */ d(L, {
865
865
  context: _,
866
866
  modal: !1,
867
867
  children: /* @__PURE__ */ d("div", {
@@ -873,7 +873,7 @@ function Ye({ trigger: e, children: t, placement: r = "bottom-start", className:
873
873
  i
874
874
  ].join(" "),
875
875
  ...y(),
876
- children: /* @__PURE__ */ d(Ke.Provider, {
876
+ children: /* @__PURE__ */ d(He.Provider, {
877
877
  value: {
878
878
  close: x,
879
879
  getItemProps: b,
@@ -887,28 +887,28 @@ function Ye({ trigger: e, children: t, placement: r = "bottom-start", className:
887
887
  }
888
888
  //#endregion
889
889
  //#region src/components/ui/Popover.tsx
890
- function Xe({ trigger: e, children: t, placement: n = "bottom", open: r, onOpenChange: i, className: a = "" }) {
891
- let [o, s] = c(!1), l = r !== void 0, p = l ? r : o, { refs: m, floatingStyles: h, context: g } = z({
890
+ function Ke({ trigger: e, children: t, placement: n = "bottom", open: r, onOpenChange: i, className: a = "" }) {
891
+ let [o, s] = c(!1), l = r !== void 0, p = l ? r : o, { refs: m, floatingStyles: h, context: g } = K({
892
892
  open: p,
893
893
  onOpenChange: l ? (e) => i?.(e) : s,
894
894
  placement: n,
895
895
  middleware: [
896
- I(8),
897
- F(),
898
- L({ padding: 8 })
896
+ H(8),
897
+ V(),
898
+ U({ padding: 8 })
899
899
  ],
900
- whileElementsMounted: P
901
- }), { getReferenceProps: _, getFloatingProps: v } = B([
902
- oe(g),
903
- R(g),
904
- V(g)
900
+ whileElementsMounted: B
901
+ }), { getReferenceProps: _, getFloatingProps: v } = q([
902
+ W(g),
903
+ G(g),
904
+ J(g)
905
905
  ]);
906
906
  return /* @__PURE__ */ f(u, { children: [/* @__PURE__ */ d("span", {
907
907
  ref: m.setReference,
908
908
  className: "inline-flex",
909
909
  ..._(),
910
910
  children: e
911
- }), p && /* @__PURE__ */ d(N, { children: /* @__PURE__ */ d(ie, {
911
+ }), p && /* @__PURE__ */ d(R, { children: /* @__PURE__ */ d(L, {
912
912
  context: g,
913
913
  modal: !1,
914
914
  children: /* @__PURE__ */ d("div", {
@@ -926,12 +926,12 @@ function Xe({ trigger: e, children: t, placement: n = "bottom", open: r, onOpenC
926
926
  }
927
927
  //#endregion
928
928
  //#region src/components/ui/Tabs.tsx
929
- var Ze = e({
929
+ var qe = e({
930
930
  activeValue: "",
931
931
  idPrefix: ""
932
932
  });
933
- function Qe({ value: e, children: t, className: n = "" }) {
934
- let { activeValue: i, idPrefix: a } = r(Ze), o = i === e;
933
+ function Je({ value: e, children: t, className: n = "" }) {
934
+ let { activeValue: i, idPrefix: a } = r(qe), o = i === e;
935
935
  return /* @__PURE__ */ d("div", {
936
936
  id: `${a}-panel-${e}`,
937
937
  role: "tabpanel",
@@ -942,7 +942,7 @@ function Qe({ value: e, children: t, className: n = "" }) {
942
942
  children: o && t
943
943
  });
944
944
  }
945
- function $e({ items: e, value: t, defaultValue: r, onChange: i, children: o, className: l = "" }) {
945
+ function Ye({ items: e, value: t, defaultValue: r, onChange: i, children: o, className: l = "" }) {
946
946
  let u = a().replace(/:/g, ""), p = s(null), m = t !== void 0, [h, g] = c(() => r ?? e.find((e) => !e.disabled)?.value ?? e[0]?.value ?? ""), _ = m ? t : h, v = n((e) => {
947
947
  m || g(e), i?.(e);
948
948
  }, [m, i]), y = e.filter((e) => !e.disabled), b = (e) => {
@@ -967,7 +967,7 @@ function $e({ items: e, value: t, defaultValue: r, onChange: i, children: o, cla
967
967
  let r = y[n];
968
968
  r && (v(r.value), (p.current?.querySelector(`[data-tab-value="${r.value}"]`))?.focus());
969
969
  };
970
- return /* @__PURE__ */ d(Ze.Provider, {
970
+ return /* @__PURE__ */ d(qe.Provider, {
971
971
  value: {
972
972
  activeValue: _,
973
973
  idPrefix: u
@@ -1011,39 +1011,39 @@ function $e({ items: e, value: t, defaultValue: r, onChange: i, children: o, cla
1011
1011
  }
1012
1012
  //#endregion
1013
1013
  //#region src/components/ui/Tooltip.tsx
1014
- var et = {
1014
+ var Xe = {
1015
1015
  top: "bottom",
1016
1016
  bottom: "top",
1017
1017
  left: "right",
1018
1018
  right: "left"
1019
1019
  };
1020
- function J({ children: e, content: t, placement: n = "top", delay: r = 200, className: i = "" }) {
1021
- let [a, o] = c(!1), l = s(null), { refs: p, floatingStyles: m, context: h, middlewareData: g, placement: _ } = z({
1020
+ function Ze({ children: e, content: t, placement: n = "top", delay: r = 200, className: i = "" }) {
1021
+ let [a, o] = c(!1), l = s(null), { refs: p, floatingStyles: m, context: h, middlewareData: g, placement: _ } = K({
1022
1022
  open: a,
1023
1023
  onOpenChange: o,
1024
1024
  placement: n,
1025
1025
  middleware: [
1026
- I(8),
1027
- F(),
1028
- L({ padding: 8 }),
1029
- ae({ element: l })
1026
+ H(8),
1027
+ V(),
1028
+ U({ padding: 8 }),
1029
+ z({ element: l })
1030
1030
  ],
1031
- whileElementsMounted: P
1032
- }), { getReferenceProps: v, getFloatingProps: y } = B([
1033
- ce(h, {
1031
+ whileElementsMounted: B
1032
+ }), { getReferenceProps: v, getFloatingProps: y } = q([
1033
+ ne(h, {
1034
1034
  delay: r,
1035
1035
  move: !1
1036
1036
  }),
1037
- se(h),
1038
- R(h),
1039
- V(h, { role: "tooltip" })
1037
+ te(h),
1038
+ G(h),
1039
+ J(h, { role: "tooltip" })
1040
1040
  ]), b = _.split("-")[0], x = g.arrow?.x, S = g.arrow?.y;
1041
1041
  return /* @__PURE__ */ f(u, { children: [/* @__PURE__ */ d("span", {
1042
1042
  ref: p.setReference,
1043
1043
  className: "inline-flex",
1044
1044
  ...v(),
1045
1045
  children: e
1046
- }), a && t && /* @__PURE__ */ d(N, { children: /* @__PURE__ */ f("div", {
1046
+ }), a && t && /* @__PURE__ */ d(R, { children: /* @__PURE__ */ f("div", {
1047
1047
  ref: p.setFloating,
1048
1048
  style: m,
1049
1049
  role: "tooltip",
@@ -1060,15 +1060,15 @@ function J({ children: e, content: t, placement: n = "top", delay: r = 200, clas
1060
1060
  style: {
1061
1061
  left: x == null ? "" : `${x}px`,
1062
1062
  top: S == null ? "" : `${S}px`,
1063
- [et[b]]: "-4px"
1063
+ [Xe[b]]: "-4px"
1064
1064
  }
1065
1065
  })]
1066
1066
  }) })] });
1067
1067
  }
1068
1068
  //#endregion
1069
1069
  //#region src/hooks/useLanguage.ts
1070
- function tt() {
1071
- let { i18n: e } = M(), t = e.language ?? "en", r = n((t) => {
1070
+ function Qe() {
1071
+ let { i18n: e } = I(), t = e.language ?? "en", r = n((t) => {
1072
1072
  e.changeLanguage(t);
1073
1073
  }, [e]);
1074
1074
  return {
@@ -1081,20 +1081,20 @@ function tt() {
1081
1081
  }
1082
1082
  //#endregion
1083
1083
  //#region src/components/ui/LanguageSwitcher.tsx
1084
- var nt = [{
1084
+ var $e = [{
1085
1085
  value: "en",
1086
1086
  label: "EN"
1087
1087
  }, {
1088
1088
  value: "fr",
1089
1089
  label: "FR"
1090
1090
  }];
1091
- function rt({ className: e = "" }) {
1092
- let { language: t, setLanguage: n } = tt();
1091
+ function et({ className: e = "" }) {
1092
+ let { language: t, setLanguage: n } = Qe();
1093
1093
  return /* @__PURE__ */ d("div", {
1094
1094
  role: "radiogroup",
1095
1095
  "aria-label": "Language",
1096
1096
  className: ["inline-flex items-center rounded-full border border-border bg-bg-secondary p-0.5", e].filter(Boolean).join(" "),
1097
- children: nt.map(({ value: e, label: r }) => {
1097
+ children: $e.map(({ value: e, label: r }) => {
1098
1098
  let i = t === e;
1099
1099
  return /* @__PURE__ */ d("button", {
1100
1100
  type: "button",
@@ -1109,57 +1109,57 @@ function rt({ className: e = "" }) {
1109
1109
  }
1110
1110
  //#endregion
1111
1111
  //#region src/hooks/useTheme.ts
1112
- var Y = "poesis-theme", X = /* @__PURE__ */ new Set();
1113
- function it() {
1114
- X.forEach((e) => e());
1112
+ var tt = "poesis-theme", nt = /* @__PURE__ */ new Set();
1113
+ function rt() {
1114
+ nt.forEach((e) => e());
1115
1115
  }
1116
- function at(e) {
1117
- return X.add(e), () => X.delete(e);
1116
+ function it(e) {
1117
+ return nt.add(e), () => nt.delete(e);
1118
1118
  }
1119
- function ot() {
1119
+ function at() {
1120
1120
  return document.documentElement.classList.contains("dark") ? "dark" : "light";
1121
1121
  }
1122
- function st() {
1122
+ function ot() {
1123
1123
  return "light";
1124
1124
  }
1125
- function Z(e) {
1126
- e === "dark" ? document.documentElement.classList.add("dark") : document.documentElement.classList.remove("dark"), localStorage.setItem(Y, e), it();
1125
+ function $(e) {
1126
+ e === "dark" ? document.documentElement.classList.add("dark") : document.documentElement.classList.remove("dark"), localStorage.setItem(tt, e), rt();
1127
1127
  }
1128
- function ct() {
1129
- let e = localStorage.getItem(Y);
1128
+ function st() {
1129
+ let e = localStorage.getItem(tt);
1130
1130
  if (e) {
1131
- Z(e);
1131
+ $(e);
1132
1132
  return;
1133
1133
  }
1134
1134
  let t = window.matchMedia("(prefers-color-scheme: dark)").matches;
1135
- Z(t ? "dark" : "light");
1135
+ $(t ? "dark" : "light");
1136
1136
  }
1137
- function lt() {
1138
- let e = l(at, ot, st);
1137
+ function ct() {
1138
+ let e = l(it, at, ot);
1139
1139
  return i(() => {
1140
1140
  let e = window.matchMedia("(prefers-color-scheme: dark)"), t = (e) => {
1141
- localStorage.getItem(Y) || Z(e.matches ? "dark" : "light");
1141
+ localStorage.getItem(tt) || $(e.matches ? "dark" : "light");
1142
1142
  };
1143
1143
  return e.addEventListener("change", t), () => e.removeEventListener("change", t);
1144
1144
  }, []), {
1145
1145
  theme: e,
1146
1146
  toggleTheme: n(() => {
1147
- Z(e === "dark" ? "light" : "dark");
1147
+ $(e === "dark" ? "light" : "dark");
1148
1148
  }, [e]),
1149
1149
  setTheme: n((e) => {
1150
- Z(e);
1150
+ $(e);
1151
1151
  }, []),
1152
1152
  isDark: e === "dark"
1153
1153
  };
1154
1154
  }
1155
1155
  //#endregion
1156
1156
  //#region src/components/ui/ThemeToggle.tsx
1157
- function ut({ variant: e = "ghost", size: t = "md", className: n }) {
1158
- let { isDark: r, toggleTheme: i } = lt(), { t: a } = M();
1159
- return /* @__PURE__ */ d(Ce, {
1157
+ function lt({ variant: e = "ghost", size: t = "md", className: n }) {
1158
+ let { isDark: r, toggleTheme: i } = ct(), { t: a } = I();
1159
+ return /* @__PURE__ */ d(_e, {
1160
1160
  variant: e,
1161
1161
  size: t,
1162
- icon: d(r ? ee : T, { size: 16 }),
1162
+ icon: d(r ? M : T, { size: 16 }),
1163
1163
  "aria-label": a("theme.toggleTheme"),
1164
1164
  onClick: i,
1165
1165
  className: n
@@ -1167,8 +1167,8 @@ function ut({ variant: e = "ghost", size: t = "md", className: n }) {
1167
1167
  }
1168
1168
  //#endregion
1169
1169
  //#region src/components/layout/TopNav.tsx
1170
- var dt = "https://www.epfl.ch/campus/services/website//wp-content/themes/wp-theme-2018/assets/svg/epfl-logo.svg?refresh=now";
1171
- function ft({ logo: e, logoUrl: t, categories: n = [], activeCategoryId: r, onCategoryChange: i, actions: a, onBurgerClick: o }) {
1170
+ var ut = "https://www.epfl.ch/campus/services/website//wp-content/themes/wp-theme-2018/assets/svg/epfl-logo.svg?refresh=now";
1171
+ function dt({ logo: e, logoUrl: t, categories: n = [], activeCategoryId: r, onCategoryChange: i, actions: a, onBurgerClick: o }) {
1172
1172
  return /* @__PURE__ */ f("header", {
1173
1173
  className: "fixed inset-x-0 top-0 z-40 flex h-14 items-center border-b border-border bg-bg-primary px-md",
1174
1174
  children: [
@@ -1182,7 +1182,7 @@ function ft({ logo: e, logoUrl: t, categories: n = [], activeCategoryId: r, onCa
1182
1182
  /* @__PURE__ */ d("div", {
1183
1183
  className: "mr-lg flex shrink-0 items-center",
1184
1184
  children: e ?? /* @__PURE__ */ d("img", {
1185
- src: t ?? dt,
1185
+ src: t ?? ut,
1186
1186
  alt: "EPFL",
1187
1187
  className: "h-[30px] w-auto"
1188
1188
  })
@@ -1211,16 +1211,16 @@ function ft({ logo: e, logoUrl: t, categories: n = [], activeCategoryId: r, onCa
1211
1211
  }
1212
1212
  //#endregion
1213
1213
  //#region src/components/layout/SideNav.tsx
1214
- var Q = "sidebar-fold-state", pt = (e) => e.toString().toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").trim().replace(/[^\w\s-]/g, "").replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, ""), mt = (e) => {
1214
+ var ft = "sidebar-fold-state", pt = (e) => e.toString().toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").trim().replace(/[^\w\s-]/g, "").replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, ""), mt = (e) => {
1215
1215
  try {
1216
- let t = localStorage.getItem(Q);
1216
+ let t = localStorage.getItem(ft);
1217
1217
  if (t) return JSON.parse(t)[e] === !0;
1218
1218
  } catch {}
1219
1219
  return !1;
1220
1220
  }, ht = (e, t) => {
1221
1221
  try {
1222
- let n = localStorage.getItem(Q), r = n ? JSON.parse(n) : {};
1223
- r[e] = t, localStorage.setItem(Q, JSON.stringify(r));
1222
+ let n = localStorage.getItem(ft), r = n ? JSON.parse(n) : {};
1223
+ r[e] = t, localStorage.setItem(ft, JSON.stringify(r));
1224
1224
  } catch {}
1225
1225
  };
1226
1226
  function gt(e, t) {
@@ -1273,10 +1273,10 @@ function vt({ counters: e }) {
1273
1273
  let t = e?.filter((e) => e.count > 0);
1274
1274
  return t?.length ? /* @__PURE__ */ d("span", {
1275
1275
  className: "ml-auto flex items-center gap-1",
1276
- children: t.map((e, t) => /* @__PURE__ */ d(J, {
1276
+ children: t.map((e, t) => /* @__PURE__ */ d(Ze, {
1277
1277
  content: e.tooltip,
1278
1278
  placement: "top",
1279
- children: /* @__PURE__ */ d(H, {
1279
+ children: /* @__PURE__ */ d(Y, {
1280
1280
  color: e.color,
1281
1281
  children: e.count > 99 ? "99+" : e.count
1282
1282
  })
@@ -1321,7 +1321,7 @@ function yt({ section: e, activeLinkId: t, onLinkClick: n, collapsed: r, foldabl
1321
1321
  }
1322
1322
  //#endregion
1323
1323
  //#region src/components/layout/BurgerDrawer.tsx
1324
- function $({ open: e, onClose: t, categories: n = [], activeCategoryId: r, onCategoryChange: a, sections: o = [], activeLinkId: c, onLinkClick: l }) {
1324
+ function bt({ open: e, onClose: t, categories: n = [], activeCategoryId: r, onCategoryChange: a, sections: o = [], activeLinkId: c, onLinkClick: l }) {
1325
1325
  let p = s(null);
1326
1326
  return i(() => {
1327
1327
  if (!e) return;
@@ -1354,7 +1354,7 @@ function $({ open: e, onClose: t, categories: n = [], activeCategoryId: r, onCat
1354
1354
  onClick: t,
1355
1355
  className: "flex size-9 items-center justify-center rounded-md text-text-secondary hover:bg-bg-tertiary hover:text-text-primary",
1356
1356
  "aria-label": "Close menu",
1357
- children: /* @__PURE__ */ d(ne, { size: 18 })
1357
+ children: /* @__PURE__ */ d(F, { size: 18 })
1358
1358
  })]
1359
1359
  }), /* @__PURE__ */ f("div", {
1360
1360
  className: "flex-1 overflow-y-auto p-sm",
@@ -1371,7 +1371,7 @@ function $({ open: e, onClose: t, categories: n = [], activeCategoryId: r, onCat
1371
1371
  className: ["flex items-center gap-sm rounded-md px-sm py-xs text-small font-medium transition-colors", e.id === r ? "bg-primary/10 text-primary" : "text-text-secondary hover:bg-bg-tertiary hover:text-text-primary"].join(" "),
1372
1372
  children: [e.icon && /* @__PURE__ */ d(e.icon, { size: 16 }), e.label]
1373
1373
  }, e.id))]
1374
- }), o.map((e) => /* @__PURE__ */ d(xt, {
1374
+ }), o.map((e) => /* @__PURE__ */ d(St, {
1375
1375
  section: e,
1376
1376
  activeLinkId: c,
1377
1377
  onLinkClick: (e) => {
@@ -1381,21 +1381,21 @@ function $({ open: e, onClose: t, categories: n = [], activeCategoryId: r, onCat
1381
1381
  })]
1382
1382
  })] });
1383
1383
  }
1384
- function bt({ counters: e }) {
1384
+ function xt({ counters: e }) {
1385
1385
  let t = e?.filter((e) => e.count > 0);
1386
1386
  return t?.length ? /* @__PURE__ */ d("span", {
1387
1387
  className: "ml-auto flex items-center gap-1",
1388
- children: t.map((e, t) => /* @__PURE__ */ d(J, {
1388
+ children: t.map((e, t) => /* @__PURE__ */ d(Ze, {
1389
1389
  content: e.tooltip,
1390
1390
  placement: "top",
1391
- children: /* @__PURE__ */ d(H, {
1391
+ children: /* @__PURE__ */ d(Y, {
1392
1392
  color: e.color,
1393
1393
  children: e.count > 99 ? "99+" : e.count
1394
1394
  })
1395
1395
  }, t))
1396
1396
  }) : null;
1397
1397
  }
1398
- function xt({ section: e, activeLinkId: t, onLinkClick: n }) {
1398
+ function St({ section: e, activeLinkId: t, onLinkClick: n }) {
1399
1399
  let [r, i] = c(!0);
1400
1400
  return /* @__PURE__ */ f("div", {
1401
1401
  className: "mb-xs flex flex-col",
@@ -1419,7 +1419,7 @@ function xt({ section: e, activeLinkId: t, onLinkClick: n }) {
1419
1419
  children: [
1420
1420
  e.icon && /* @__PURE__ */ d(e.icon, { size: 18 }),
1421
1421
  /* @__PURE__ */ d("span", { children: e.label }),
1422
- /* @__PURE__ */ d(bt, { counters: e.counters })
1422
+ /* @__PURE__ */ d(xt, { counters: e.counters })
1423
1423
  ]
1424
1424
  }) }, e.id);
1425
1425
  })
@@ -1428,8 +1428,8 @@ function xt({ section: e, activeLinkId: t, onLinkClick: n }) {
1428
1428
  }
1429
1429
  //#endregion
1430
1430
  //#region src/components/layout/Footer.tsx
1431
- var St = "https://www.epfl.ch/campus/services/website//wp-content/themes/wp-theme-2018/assets/svg/epfl-logo.svg?refresh=now", Ct = () => (/* @__PURE__ */ new Date()).getFullYear();
1432
- function wt() {
1431
+ var Ct = "https://www.epfl.ch/campus/services/website//wp-content/themes/wp-theme-2018/assets/svg/epfl-logo.svg?refresh=now", wt = () => (/* @__PURE__ */ new Date()).getFullYear();
1432
+ function Tt() {
1433
1433
  return /* @__PURE__ */ d("footer", {
1434
1434
  role: "contentinfo",
1435
1435
  className: "bg-bg-secondary border-t border-border mt-auto",
@@ -1442,7 +1442,7 @@ function wt() {
1442
1442
  children: /* @__PURE__ */ d("a", {
1443
1443
  href: "https://www.epfl.ch/en/",
1444
1444
  children: /* @__PURE__ */ d("img", {
1445
- src: St,
1445
+ src: Ct,
1446
1446
  alt: "Logo EPFL",
1447
1447
  className: "h-8 w-auto",
1448
1448
  style: {
@@ -1494,7 +1494,7 @@ function wt() {
1494
1494
  className: "m-0 text-text-muted text-small",
1495
1495
  children: [
1496
1496
  "© ",
1497
- Ct(),
1497
+ wt(),
1498
1498
  " EPFL, all rights reserved"
1499
1499
  ]
1500
1500
  })]
@@ -1533,9 +1533,9 @@ function wt() {
1533
1533
  }
1534
1534
  //#endregion
1535
1535
  //#region src/components/layout/UserMenu.tsx
1536
- function Tt({ onLogin: e }) {
1537
- let { t } = M();
1538
- return /* @__PURE__ */ d(be, {
1536
+ function Et({ onLogin: e }) {
1537
+ let { t } = I();
1538
+ return /* @__PURE__ */ d(me, {
1539
1539
  variant: "primary",
1540
1540
  size: "sm",
1541
1541
  iconLeft: /* @__PURE__ */ d(p, { size: 14 }),
@@ -1543,10 +1543,10 @@ function Tt({ onLogin: e }) {
1543
1543
  children: t("auth.login")
1544
1544
  });
1545
1545
  }
1546
- function Et({ user: e, onLogout: t }) {
1547
- let { t: n } = M();
1548
- return /* @__PURE__ */ f(Ye, {
1549
- trigger: /* @__PURE__ */ d(pe, {
1546
+ function Dt({ user: e, onLogout: t }) {
1547
+ let { t: n } = I();
1548
+ return /* @__PURE__ */ f(Ge, {
1549
+ trigger: /* @__PURE__ */ d(se, {
1550
1550
  src: e.avatarUrl,
1551
1551
  name: e.name,
1552
1552
  size: "sm",
@@ -1564,8 +1564,8 @@ function Et({ user: e, onLogout: t }) {
1564
1564
  children: e.email
1565
1565
  })]
1566
1566
  }),
1567
- /* @__PURE__ */ d(qe, {}),
1568
- /* @__PURE__ */ d(Je, {
1567
+ /* @__PURE__ */ d(Ue, {}),
1568
+ /* @__PURE__ */ d(We, {
1569
1569
  icon: /* @__PURE__ */ d(m, { size: 14 }),
1570
1570
  onClick: t,
1571
1571
  children: n("auth.logout")
@@ -1575,12 +1575,12 @@ function Et({ user: e, onLogout: t }) {
1575
1575
  }
1576
1576
  //#endregion
1577
1577
  //#region src/components/layout/PageShell.tsx
1578
- function Dt({ children: e, logo: t, logoUrl: n, categories: r = [], activeCategoryId: i, onCategoryChange: a, sections: o = [], activeLinkId: s, onLinkClick: l, actions: u, sideNavCollapsed: p = !1, sideNavFoldable: m = !1, sideNavHomeLink: h, showFooter: g = !0 }) {
1578
+ function Ot({ children: e, logo: t, logoUrl: n, categories: r = [], activeCategoryId: i, onCategoryChange: a, sections: o = [], activeLinkId: s, onLinkClick: l, actions: u, sideNavCollapsed: p = !1, sideNavFoldable: m = !1, sideNavHomeLink: h, showFooter: g = !0 }) {
1579
1579
  let [_, v] = c(!1);
1580
1580
  return /* @__PURE__ */ f("div", {
1581
1581
  className: "flex h-screen flex-col bg-bg-primary",
1582
1582
  children: [
1583
- /* @__PURE__ */ d(ft, {
1583
+ /* @__PURE__ */ d(dt, {
1584
1584
  logo: t,
1585
1585
  logoUrl: n,
1586
1586
  categories: r,
@@ -1607,10 +1607,10 @@ function Dt({ children: e, logo: t, logoUrl: n, categories: r = [], activeCatego
1607
1607
  className: "mx-auto max-w-[var(--container-6xl)]",
1608
1608
  children: e
1609
1609
  })
1610
- }), g && /* @__PURE__ */ d(wt, {})]
1610
+ }), g && /* @__PURE__ */ d(Tt, {})]
1611
1611
  })]
1612
1612
  }),
1613
- /* @__PURE__ */ d($, {
1613
+ /* @__PURE__ */ d(bt, {
1614
1614
  open: _,
1615
1615
  onClose: () => v(!1),
1616
1616
  categories: r,
@@ -1629,7 +1629,7 @@ function Dt({ children: e, logo: t, logoUrl: n, categories: r = [], activeCatego
1629
1629
  }
1630
1630
  //#endregion
1631
1631
  //#region src/components/data-display/Card.tsx
1632
- var Ot = t(function({ header: e, footer: t, actions: n, noPadding: r = !1, className: i = "", children: a, ...o }, s) {
1632
+ var kt = t(function({ header: e, footer: t, actions: n, noPadding: r = !1, className: i = "", children: a, ...o }, s) {
1633
1633
  let c = t || n;
1634
1634
  return /* @__PURE__ */ f("div", {
1635
1635
  ref: s,
@@ -1663,7 +1663,7 @@ var Ot = t(function({ header: e, footer: t, actions: n, noPadding: r = !1, class
1663
1663
  })
1664
1664
  ]
1665
1665
  });
1666
- }), kt = t(function({ items: e, layout: t = "horizontal", dividers: n = !0, className: r = "", ...i }, a) {
1666
+ }), At = t(function({ items: e, layout: t = "horizontal", dividers: n = !0, className: r = "", ...i }, a) {
1667
1667
  let o = t === "horizontal";
1668
1668
  return /* @__PURE__ */ d("dl", {
1669
1669
  ref: a,
@@ -1684,7 +1684,7 @@ var Ot = t(function({ header: e, footer: t, actions: n, noPadding: r = !1, class
1684
1684
  })]
1685
1685
  }, t))
1686
1686
  });
1687
- }), At = t(function({ illustration: e, title: t, description: n, action: r, className: i = "", ...a }, o) {
1687
+ }), jt = t(function({ illustration: e, title: t, description: n, action: r, className: i = "", ...a }, o) {
1688
1688
  return /* @__PURE__ */ f("div", {
1689
1689
  ref: o,
1690
1690
  className: ["flex flex-col items-center justify-center text-center py-2xl px-lg", i].filter(Boolean).join(" "),
@@ -1711,7 +1711,7 @@ var Ot = t(function({ header: e, footer: t, actions: n, noPadding: r = !1, class
1711
1711
  });
1712
1712
  //#endregion
1713
1713
  //#region src/components/data-display/Table.tsx
1714
- function jt(e, t) {
1714
+ function Mt(e, t) {
1715
1715
  if (!e.sortValue || t.length === 0) return "text";
1716
1716
  for (let n of t) {
1717
1717
  let t = e.sortValue(n);
@@ -1719,30 +1719,91 @@ function jt(e, t) {
1719
1719
  }
1720
1720
  return "text";
1721
1721
  }
1722
- function Mt({ active: e, direction: t, columnType: n }) {
1723
- return e ? d(n === "numeric" ? t === "asc" ? k : A : t === "asc" ? E : D, {
1722
+ function Nt({ active: e, direction: t, columnType: n }) {
1723
+ return e ? d(n === "numeric" ? t === "asc" ? A : j : t === "asc" ? D : O, {
1724
1724
  size: 14,
1725
1725
  className: "ml-1 inline",
1726
1726
  "aria-hidden": !0
1727
- }) : /* @__PURE__ */ d(O, {
1727
+ }) : /* @__PURE__ */ d(k, {
1728
1728
  size: 14,
1729
1729
  className: "ml-1 inline opacity-30",
1730
1730
  "aria-hidden": !0
1731
1731
  });
1732
1732
  }
1733
- var Nt = t(function({ columns: e, data: t, rowKey: r, striped: i = !1, sort: a, onSortChange: s, emptyContent: l, className: u = "", ...p }, m) {
1734
- let [h, g] = c(), _ = a ?? h, v = n((e) => {
1735
- let t = _?.column === e && _.direction === "asc" ? {
1733
+ function Pt({ columns: e, hiddenSet: t, onToggle: n }) {
1734
+ let r = e.filter((e) => e.hideable !== !1), i = r.filter((e) => !t.has(e.key)).length;
1735
+ return /* @__PURE__ */ d(Ke, {
1736
+ placement: "bottom-end",
1737
+ trigger: /* @__PURE__ */ f("button", {
1738
+ type: "button",
1739
+ className: "inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-small font-medium text-text-secondary hover:text-text-primary hover:bg-bg-secondary border border-border transition-colors",
1740
+ "aria-label": "Toggle column visibility",
1741
+ children: [/* @__PURE__ */ d(E, {
1742
+ size: 14,
1743
+ "aria-hidden": !0
1744
+ }), "Columns"]
1745
+ }),
1746
+ className: "min-w-48",
1747
+ children: /* @__PURE__ */ f("div", {
1748
+ className: "flex flex-col gap-1",
1749
+ children: [/* @__PURE__ */ d("p", {
1750
+ className: "text-caption font-semibold text-text-secondary mb-1",
1751
+ children: "Visible columns"
1752
+ }), r.map((e) => {
1753
+ let r = !t.has(e.key), a = r && i <= 1;
1754
+ return /* @__PURE__ */ d(Z, {
1755
+ label: e.header,
1756
+ checked: r,
1757
+ disabled: a,
1758
+ onChange: () => n(e.key)
1759
+ }, e.key);
1760
+ })]
1761
+ })
1762
+ });
1763
+ }
1764
+ var Ft = t(function({ columns: e, data: t, rowKey: r, striped: i = !1, sort: a, onSortChange: s, emptyContent: l, stickyHeader: u = !1, toolbar: p, columnVisibility: m = !1, columnVisibilityKey: h, hiddenColumns: g, onHiddenColumnsChange: _, defaultHiddenColumns: v, selectionKey: y, selectedValues: b, onSelectionChange: x, className: S = "", ...C }, w) {
1765
+ let [T, E] = c(), D = a ?? T, O = n((e) => {
1766
+ let t = D?.column === e && D.direction === "asc" ? {
1736
1767
  column: e,
1737
1768
  direction: "desc"
1738
1769
  } : {
1739
1770
  column: e,
1740
1771
  direction: "asc"
1741
1772
  };
1742
- s ? s(t) : g(t);
1743
- }, [_, s]), y = o(() => {
1744
- if (!_ || s) return t;
1745
- let n = e.find((e) => e.key === _.column);
1773
+ s ? s(t) : E(t);
1774
+ }, [D, s]), [k, A] = c(() => {
1775
+ if (h) try {
1776
+ let e = localStorage.getItem(h);
1777
+ if (e) return new Set(JSON.parse(e));
1778
+ } catch {}
1779
+ return new Set(v ?? []);
1780
+ }), j = o(() => g ? new Set(g) : k, [g, k]), M = n((e) => {
1781
+ let t = new Set(j);
1782
+ t.has(e) ? t.delete(e) : t.add(e);
1783
+ let n = Array.from(t);
1784
+ if (h) try {
1785
+ localStorage.setItem(h, JSON.stringify(n));
1786
+ } catch {}
1787
+ _ ? _(n) : A(t);
1788
+ }, [
1789
+ j,
1790
+ _,
1791
+ h
1792
+ ]), [N, P] = c(() => /* @__PURE__ */ new Set()), F = o(() => b ? new Set(b) : N, [b, N]), I = n((e) => {
1793
+ let t = Array.from(e);
1794
+ x ? x(t) : P(e);
1795
+ }, [x]), ee = n((e) => {
1796
+ let t = new Set(F);
1797
+ t.has(e) ? t.delete(e) : t.add(e), I(t);
1798
+ }, [F, I]), L = n((e) => {
1799
+ I(e.length > 0 && e.every((e) => F.has(e)) ? /* @__PURE__ */ new Set() : new Set(e));
1800
+ }, [F, I]), R = o(() => m ? e.filter((e) => !j.has(e.key)) : e, [
1801
+ e,
1802
+ j,
1803
+ m
1804
+ ]), z = o(() => {
1805
+ if (!D || s) return t;
1806
+ let n = e.find((e) => e.key === D.column);
1746
1807
  if (!n?.sortValue) return t;
1747
1808
  let r = n.sortValue;
1748
1809
  return [...t].sort((e, t) => {
@@ -1751,64 +1812,95 @@ var Nt = t(function({ columns: e, data: t, rowKey: r, striped: i = !1, sort: a,
1751
1812
  if (n == null) return 1;
1752
1813
  if (i == null) return -1;
1753
1814
  let a = typeof n == "number" && typeof i == "number" ? n - i : String(n).localeCompare(String(i));
1754
- return _.direction === "asc" ? a : -a;
1815
+ return D.direction === "asc" ? a : -a;
1755
1816
  });
1756
1817
  }, [
1757
1818
  t,
1758
- _,
1819
+ D,
1759
1820
  e,
1760
1821
  s
1761
- ]), b = o(() => {
1822
+ ]), B = o(() => y ? z.map((e) => e[y]) : [], [z, y]), V = B.length > 0 && B.every((e) => F.has(e)), H = !V && B.some((e) => F.has(e)), U = o(() => {
1762
1823
  let n = /* @__PURE__ */ new Map();
1763
- for (let r of e) r.sortable && n.set(r.key, jt(r, t));
1824
+ for (let r of e) r.sortable && n.set(r.key, Mt(r, t));
1764
1825
  return n;
1765
- }, [e, t]), x = y.length === 0;
1766
- return /* @__PURE__ */ d("div", {
1767
- ref: m,
1768
- className: ["overflow-x-auto rounded-md border border-border", u].filter(Boolean).join(" "),
1769
- ...p,
1770
- children: /* @__PURE__ */ f("table", {
1826
+ }, [e, t]), W = R.length + (y ? 1 : 0), G = z.length === 0;
1827
+ return /* @__PURE__ */ f("div", {
1828
+ ref: w,
1829
+ className: ["overflow-x-auto rounded-md border border-border", S].filter(Boolean).join(" "),
1830
+ ...C,
1831
+ children: [(p || m) && /* @__PURE__ */ f("div", {
1832
+ className: "flex items-center justify-between gap-md px-md py-sm border-b border-border bg-bg-primary",
1833
+ children: [/* @__PURE__ */ d("div", {
1834
+ className: "flex items-center gap-sm min-w-0",
1835
+ children: p
1836
+ }), m && /* @__PURE__ */ d(Pt, {
1837
+ columns: e,
1838
+ hiddenSet: j,
1839
+ onToggle: M
1840
+ })]
1841
+ }), /* @__PURE__ */ f("table", {
1771
1842
  className: "w-full text-body text-left",
1772
- children: [/* @__PURE__ */ d("thead", { children: /* @__PURE__ */ d("tr", {
1773
- className: "bg-bg-secondary border-b border-border",
1774
- children: e.map((e) => {
1775
- let t = _?.column === e.key;
1776
- return /* @__PURE__ */ d("th", {
1777
- className: [
1778
- "px-md py-sm font-semibold text-small text-text-secondary whitespace-nowrap",
1779
- e.sortable && "cursor-pointer select-none hover:text-text-primary",
1780
- e.headerClassName
1781
- ].filter(Boolean).join(" "),
1782
- onClick: e.sortable ? () => v(e.key) : void 0,
1783
- "aria-sort": t ? _.direction === "asc" ? "ascending" : "descending" : e.sortable ? "none" : void 0,
1784
- children: /* @__PURE__ */ f("span", {
1785
- className: "inline-flex items-center",
1786
- children: [e.header, e.sortable && /* @__PURE__ */ d(Mt, {
1787
- active: t,
1788
- direction: t ? _.direction : void 0,
1789
- columnType: b.get(e.key) ?? "text"
1790
- })]
1843
+ children: [/* @__PURE__ */ d("thead", {
1844
+ className: u ? "sticky top-0 z-10" : void 0,
1845
+ children: /* @__PURE__ */ f("tr", {
1846
+ className: "bg-bg-secondary border-b border-border",
1847
+ children: [y && /* @__PURE__ */ d("th", {
1848
+ className: "w-10 px-sm py-sm text-center",
1849
+ children: /* @__PURE__ */ d(Z, {
1850
+ checked: V,
1851
+ indeterminate: H,
1852
+ onChange: () => L(B),
1853
+ "aria-label": "Select all rows"
1791
1854
  })
1792
- }, e.key);
1855
+ }), R.map((e) => {
1856
+ let t = D?.column === e.key;
1857
+ return /* @__PURE__ */ d("th", {
1858
+ className: [
1859
+ "px-md py-sm font-semibold text-small text-text-secondary whitespace-nowrap",
1860
+ e.sortable && "cursor-pointer select-none hover:text-text-primary",
1861
+ e.headerClassName
1862
+ ].filter(Boolean).join(" "),
1863
+ onClick: e.sortable ? () => O(e.key) : void 0,
1864
+ "aria-sort": t ? D.direction === "asc" ? "ascending" : "descending" : e.sortable ? "none" : void 0,
1865
+ children: /* @__PURE__ */ f("span", {
1866
+ className: "inline-flex items-center",
1867
+ children: [e.header, e.sortable && /* @__PURE__ */ d(Nt, {
1868
+ active: t,
1869
+ direction: t ? D.direction : void 0,
1870
+ columnType: U.get(e.key) ?? "text"
1871
+ })]
1872
+ })
1873
+ }, e.key);
1874
+ })]
1793
1875
  })
1794
- }) }), /* @__PURE__ */ d("tbody", { children: x ? /* @__PURE__ */ d("tr", { children: /* @__PURE__ */ d("td", {
1795
- colSpan: e.length,
1876
+ }), /* @__PURE__ */ d("tbody", { children: G ? /* @__PURE__ */ d("tr", { children: /* @__PURE__ */ d("td", {
1877
+ colSpan: W,
1796
1878
  className: "px-md py-xl text-center text-text-secondary",
1797
1879
  children: l ?? "No data available."
1798
- }) }) : y.map((t, n) => /* @__PURE__ */ d("tr", {
1799
- className: [
1800
- "border-b border-border last:border-b-0 transition-colors",
1801
- i && n % 2 == 1 && "bg-bg-tertiary/50",
1802
- "hover:bg-bg-tertiary/70"
1803
- ].filter(Boolean).join(" "),
1804
- children: e.map((e) => /* @__PURE__ */ d("td", {
1805
- className: ["px-md py-sm text-text-primary", e.cellClassName].filter(Boolean).join(" "),
1806
- children: e.cell(t, n)
1807
- }, e.key))
1808
- }, r(t, n))) })]
1809
- })
1880
+ }) }) : z.map((e, t) => {
1881
+ let n = y ? e[y] : void 0;
1882
+ return /* @__PURE__ */ f("tr", {
1883
+ className: [
1884
+ "border-b border-border last:border-b-0 transition-colors",
1885
+ i && t % 2 == 1 && "bg-bg-tertiary/50",
1886
+ "hover:bg-bg-tertiary/70"
1887
+ ].filter(Boolean).join(" "),
1888
+ children: [y && /* @__PURE__ */ d("td", {
1889
+ className: "w-10 px-sm py-sm text-center",
1890
+ children: /* @__PURE__ */ d(Z, {
1891
+ checked: F.has(n),
1892
+ onChange: () => ee(n),
1893
+ "aria-label": `Select row ${n}`
1894
+ })
1895
+ }), R.map((n) => /* @__PURE__ */ d("td", {
1896
+ className: ["px-md py-sm text-text-primary", n.cellClassName].filter(Boolean).join(" "),
1897
+ children: n.cell(e, t)
1898
+ }, n.key))]
1899
+ }, r(e, t));
1900
+ }) })]
1901
+ })]
1810
1902
  });
1811
- }), Pt = {
1903
+ }), It = {
1812
1904
  success: {
1813
1905
  bg: "bg-success-bg",
1814
1906
  border: "border-success/30",
@@ -1825,7 +1917,7 @@ var Nt = t(function({ columns: e, data: t, rowKey: r, striped: i = !1, sort: a,
1825
1917
  bg: "bg-error-bg",
1826
1918
  border: "border-error/30",
1827
1919
  text: "text-error",
1828
- icon: te
1920
+ icon: P
1829
1921
  },
1830
1922
  info: {
1831
1923
  bg: "bg-info-bg",
@@ -1834,8 +1926,8 @@ var Nt = t(function({ columns: e, data: t, rowKey: r, striped: i = !1, sort: a,
1834
1926
  icon: C
1835
1927
  }
1836
1928
  };
1837
- function Ft({ variant: e, title: t, children: n, dismissible: r = !1, onDismiss: i, className: a = "" }) {
1838
- let [o, s] = c(!0), { bg: l, border: u, text: p, icon: m } = Pt[e];
1929
+ function Lt({ variant: e, title: t, children: n, dismissible: r = !1, onDismiss: i, className: a = "" }) {
1930
+ let [o, s] = c(!0), { bg: l, border: u, text: p, icon: m } = It[e];
1839
1931
  if (!o) return null;
1840
1932
  let h = () => {
1841
1933
  s(!1), i?.();
@@ -1864,19 +1956,19 @@ function Ft({ variant: e, title: t, children: n, dismissible: r = !1, onDismiss:
1864
1956
  onClick: h,
1865
1957
  className: "shrink-0 p-1 rounded-sm text-text-secondary hover:text-text-primary hover:bg-bg-tertiary transition-colors cursor-pointer",
1866
1958
  "aria-label": "Dismiss alert",
1867
- children: /* @__PURE__ */ d(j, { size: 16 })
1959
+ children: /* @__PURE__ */ d(N, { size: 16 })
1868
1960
  })
1869
1961
  ]
1870
1962
  });
1871
1963
  }
1872
1964
  //#endregion
1873
1965
  //#region src/components/feedback/Dialog.tsx
1874
- var It = {
1966
+ var Rt = {
1875
1967
  sm: "max-w-[24rem]",
1876
1968
  md: "max-w-[32rem]",
1877
1969
  lg: "max-w-[42rem]"
1878
1970
  };
1879
- function Lt({ open: e, onClose: t, title: n, size: r = "md", children: a, footer: o, className: c = "" }) {
1971
+ function zt({ open: e, onClose: t, title: n, size: r = "md", children: a, footer: o, className: c = "" }) {
1880
1972
  let l = s(null);
1881
1973
  i(() => {
1882
1974
  if (!e) return;
@@ -1903,7 +1995,7 @@ function Lt({ open: e, onClose: t, title: n, size: r = "md", children: a, footer
1903
1995
  e.shiftKey && document.activeElement === n ? (e.preventDefault(), r.focus()) : !e.shiftKey && document.activeElement === r && (e.preventDefault(), n.focus());
1904
1996
  }
1905
1997
  };
1906
- return e ? ue(/* @__PURE__ */ f("div", {
1998
+ return e ? ie(/* @__PURE__ */ f("div", {
1907
1999
  style: {
1908
2000
  position: "fixed",
1909
2001
  inset: 0,
@@ -1935,7 +2027,7 @@ function Lt({ open: e, onClose: t, title: n, size: r = "md", children: a, footer
1935
2027
  children: /* @__PURE__ */ f("div", {
1936
2028
  ref: l,
1937
2029
  tabIndex: -1,
1938
- className: `relative z-10 flex flex-col w-full ${It[r]} rounded-lg border border-border bg-bg-primary shadow-xl outline-none animate-dialog-in ${c}`,
2030
+ className: `relative z-10 flex flex-col w-full ${Rt[r]} rounded-lg border border-border bg-bg-primary shadow-xl outline-none animate-dialog-in ${c}`,
1939
2031
  children: [
1940
2032
  n && /* @__PURE__ */ f("div", {
1941
2033
  className: "flex items-center justify-between px-lg py-md border-b border-border",
@@ -1948,7 +2040,7 @@ function Lt({ open: e, onClose: t, title: n, size: r = "md", children: a, footer
1948
2040
  onClick: t,
1949
2041
  className: "shrink-0 p-1 rounded-sm text-text-secondary hover:text-text-primary hover:bg-bg-tertiary transition-colors cursor-pointer",
1950
2042
  "aria-label": "Close dialog",
1951
- children: /* @__PURE__ */ d(j, { size: 18 })
2043
+ children: /* @__PURE__ */ d(N, { size: 18 })
1952
2044
  })]
1953
2045
  }),
1954
2046
  /* @__PURE__ */ d("div", {
@@ -1966,8 +2058,8 @@ function Lt({ open: e, onClose: t, title: n, size: r = "md", children: a, footer
1966
2058
  }
1967
2059
  //#endregion
1968
2060
  //#region src/components/feedback/ConfirmDialog.tsx
1969
- function Rt({ open: e, onCancel: t, onConfirm: n, title: r, children: i, confirmLabel: a = "Confirm", cancelLabel: o = "Cancel", danger: s = !1, submitting: c = !1, size: l = "sm" }) {
1970
- return /* @__PURE__ */ f(Lt, {
2061
+ function Bt({ open: e, onCancel: t, onConfirm: n, title: r, children: i, confirmLabel: a = "Confirm", cancelLabel: o = "Cancel", danger: s = !1, submitting: c = !1, size: l = "sm" }) {
2062
+ return /* @__PURE__ */ f(zt, {
1971
2063
  open: e,
1972
2064
  onClose: t,
1973
2065
  title: r,
@@ -1999,22 +2091,22 @@ function Rt({ open: e, onCancel: t, onConfirm: n, title: r, children: i, confirm
1999
2091
  s ? "bg-error hover:bg-error/80" : "bg-primary hover:bg-primary-hover",
2000
2092
  c && "opacity-80 pointer-events-none"
2001
2093
  ].filter(Boolean).join(" "),
2002
- children: [c && /* @__PURE__ */ d(U, { size: "sm" }), a]
2094
+ children: [c && /* @__PURE__ */ d(X, { size: "sm" }), a]
2003
2095
  })]
2004
2096
  })]
2005
2097
  });
2006
2098
  }
2007
2099
  //#endregion
2008
2100
  //#region src/components/feedback/toastContext.ts
2009
- var zt = e(null);
2010
- function Bt() {
2011
- let e = r(zt);
2101
+ var Vt = e(null);
2102
+ function Ht() {
2103
+ let e = r(Vt);
2012
2104
  if (!e) throw Error("useToast must be used within a <ToastProvider>");
2013
2105
  return e;
2014
2106
  }
2015
2107
  //#endregion
2016
2108
  //#region src/components/feedback/Toast.tsx
2017
- var Vt = {
2109
+ var Ut = {
2018
2110
  success: {
2019
2111
  bg: "bg-bg-primary",
2020
2112
  accent: "bg-success",
@@ -2031,7 +2123,7 @@ var Vt = {
2031
2123
  bg: "bg-bg-primary",
2032
2124
  accent: "bg-error",
2033
2125
  text: "text-error",
2034
- icon: te
2126
+ icon: P
2035
2127
  },
2036
2128
  info: {
2037
2129
  bg: "bg-bg-primary",
@@ -2040,8 +2132,8 @@ var Vt = {
2040
2132
  icon: C
2041
2133
  }
2042
2134
  };
2043
- function Ht({ toast: e, onRemove: t }) {
2044
- let { variant: n, title: r, message: a, duration: o = 5e3 } = e, { bg: l, accent: u, text: p, icon: m } = Vt[n], [h, g] = c(100), _ = s(0), v = s(0);
2135
+ function Wt({ toast: e, onRemove: t }) {
2136
+ let { variant: n, title: r, message: a, duration: o = 5e3 } = e, { bg: l, accent: u, text: p, icon: m } = Ut[n], [h, g] = c(100), _ = s(0), v = s(0);
2045
2137
  return i(() => {
2046
2138
  if (o <= 0) return;
2047
2139
  _.current = performance.now();
@@ -2085,7 +2177,7 @@ function Ht({ toast: e, onRemove: t }) {
2085
2177
  onClick: () => t(e.id),
2086
2178
  className: "shrink-0 p-1 rounded-sm text-text-secondary hover:text-text-primary hover:bg-bg-tertiary transition-colors cursor-pointer",
2087
2179
  "aria-label": "Dismiss notification",
2088
- children: /* @__PURE__ */ d(j, { size: 14 })
2180
+ children: /* @__PURE__ */ d(N, { size: 14 })
2089
2181
  })
2090
2182
  ]
2091
2183
  }), o > 0 && /* @__PURE__ */ d("div", {
@@ -2097,10 +2189,10 @@ function Ht({ toast: e, onRemove: t }) {
2097
2189
  })]
2098
2190
  });
2099
2191
  }
2100
- var Ut = 0;
2101
- function Wt({ children: e }) {
2192
+ var Gt = 0;
2193
+ function Kt({ children: e }) {
2102
2194
  let [t, r] = c([]), i = n((e) => {
2103
- let t = `toast-${++Ut}`;
2195
+ let t = `toast-${++Gt}`;
2104
2196
  return r((n) => [...n, {
2105
2197
  ...e,
2106
2198
  id: t
@@ -2108,7 +2200,7 @@ function Wt({ children: e }) {
2108
2200
  }, []), a = n((e) => {
2109
2201
  r((t) => t.filter((t) => t.id !== e));
2110
2202
  }, []);
2111
- return /* @__PURE__ */ f(zt, {
2203
+ return /* @__PURE__ */ f(Vt, {
2112
2204
  value: {
2113
2205
  addToast: i,
2114
2206
  removeToast: a
@@ -2118,7 +2210,7 @@ function Wt({ children: e }) {
2118
2210
  className: "fixed bottom-lg right-lg z-50 flex flex-col-reverse gap-sm pointer-events-none",
2119
2211
  children: t.map((e) => /* @__PURE__ */ d("div", {
2120
2212
  className: "pointer-events-auto",
2121
- children: /* @__PURE__ */ d(Ht, {
2213
+ children: /* @__PURE__ */ d(Wt, {
2122
2214
  toast: e,
2123
2215
  onRemove: a
2124
2216
  })
@@ -2128,12 +2220,12 @@ function Wt({ children: e }) {
2128
2220
  }
2129
2221
  //#endregion
2130
2222
  //#region src/hooks/useAuth.tsx
2131
- var Gt = e(null), Kt = {
2223
+ var qt = e(null), Jt = {
2132
2224
  name: "Alice Martin",
2133
2225
  email: "alice.martin@epfl.ch",
2134
2226
  role: "admin"
2135
2227
  };
2136
- function qt({ initialUser: e = Kt, children: t }) {
2228
+ function Yt({ initialUser: e = Jt, children: t }) {
2137
2229
  let [n, r] = c(e), i = (e) => r((t) => ({
2138
2230
  ...t,
2139
2231
  role: e
@@ -2141,17 +2233,17 @@ function qt({ initialUser: e = Kt, children: t }) {
2141
2233
  user: n,
2142
2234
  setRole: i
2143
2235
  }), [n]);
2144
- return /* @__PURE__ */ d(Gt.Provider, {
2236
+ return /* @__PURE__ */ d(qt.Provider, {
2145
2237
  value: a,
2146
2238
  children: t
2147
2239
  });
2148
2240
  }
2149
- function Jt() {
2150
- let e = r(Gt);
2241
+ function Xt() {
2242
+ let e = r(qt);
2151
2243
  if (!e) throw Error("useAuth must be used within an AuthProvider");
2152
2244
  return e;
2153
2245
  }
2154
2246
  //#endregion
2155
- export { Ft as Alert, qt as AuthProvider, pe as Avatar, H as Badge, $ as BurgerDrawer, be as Button, Ot as Card, Ne as Checkbox, Rt as ConfirmDialog, kt as DescriptionList, Lt as Dialog, qe as DropdownDivider, Je as DropdownItem, Ye as DropdownMenu, At as EmptyState, ke as FileUpload, wt as Footer, Ce as IconButton, Re as Input, rt as LanguageSwitcher, Tt as LoginButton, Dt as PageShell, De as Pagination, Xe as Popover, Me as ProgressBar, G as RadioGroup, Ue as Select, _t as SideNav, U as Spinner, We as Switch, Qe as TabPanel, Nt as Table, $e as Tabs, Ge as Textarea, ut as ThemeToggle, Wt as ToastProvider, J as Tooltip, ft as TopNav, Et as UserMenu, K as epflSelectClassNames, Ve as epflSelectTheme, ct as initTheme, Jt as useAuth, tt as useLanguage, lt as useTheme, Bt as useToast };
2247
+ export { Lt as Alert, Yt as AuthProvider, se as Avatar, Y as Badge, bt as BurgerDrawer, me as Button, kt as Card, Z as Checkbox, Bt as ConfirmDialog, At as DescriptionList, zt as Dialog, Ue as DropdownDivider, We as DropdownItem, Ge as DropdownMenu, jt as EmptyState, Ce as FileUpload, Tt as Footer, _e as IconButton, je as Input, et as LanguageSwitcher, Et as LoginButton, Ot as PageShell, xe as Pagination, Ke as Popover, Ee as ProgressBar, Pe as RadioGroup, ze as Select, _t as SideNav, X as Spinner, Be as Switch, Je as TabPanel, Ft as Table, Ye as Tabs, Ve as Textarea, lt as ThemeToggle, Kt as ToastProvider, Ze as Tooltip, dt as TopNav, Dt as UserMenu, Le as epflSelectClassNames, Ie as epflSelectTheme, st as initTheme, Xt as useAuth, Qe as useLanguage, ct as useTheme, Ht as useToast };
2156
2248
 
2157
2249
  //# sourceMappingURL=poesis.js.map