@epfl-sti/poesis 0.3.2 → 0.3.4

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-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);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{--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{--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 ee, SunFill as j, X as M, XCircleFill as N, XLg as P } from "react-bootstrap-icons";
6
+ import { useTranslation as F } from "react-i18next";
7
+ import te from "react-select";
8
+ import { FloatingFocusManager as I, FloatingPortal as L, arrow as R, autoUpdate as z, flip as B, offset as V, shift as H, useClick as U, useDismiss as W, useFloating as G, useFocus as ne, useHover as re, useInteractions as K, useListNavigation as ie, useRole as q } from "@floating-ui/react";
9
+ import { createPortal as ae } from "react-dom";
10
10
  //#region src/components/ui/Avatar.tsx
11
- var de = {
11
+ var oe = {
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 se(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 ce({ 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
+ oe[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: se(t)
40
40
  })
41
41
  });
42
42
  }
43
43
  //#endregion
44
44
  //#region src/components/ui/Badge.tsx
45
- var me = {
45
+ var le = {
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
+ }, ue = {
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 J({ 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 ${ue[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
+ le[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 de = {
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 Y({ 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 ${de[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 fe = {
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
+ }, pe = {
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
+ }, me = {
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
+ }, he = 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
+ fe[e],
131
+ pe[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(Y, {
138
+ size: me[t],
139
139
  "aria-hidden": "true"
140
140
  }) : i,
141
141
  s,
142
142
  !n && a
143
143
  ]
144
144
  });
145
- }), xe = {
145
+ }), ge = {
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
+ }, _e = {
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
+ }, ve = 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
+ ge[e],
166
+ _e[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(Y, {
172
172
  size: "sm",
173
173
  "aria-hidden": "true"
174
174
  }) : i
175
175
  });
176
- }), W = {
176
+ }), ye = {
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
- }, we = {
180
+ }, be = {
181
181
  sm: 14,
182
182
  md: 16,
183
183
  lg: 18
184
184
  };
185
- function Te(e, t, n, r) {
185
+ function xe(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,19 +192,19 @@ function Te(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 Ee = 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 Se = 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 } = F(), 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 = Te(w, e, a, o), D = we[l], O = w <= 1, k = w >= e, A = [
203
+ ]), E = xe(w, e, a, o), D = be[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
- W[l]
207
+ ye[l]
208
208
  ].join(" "), ee = (e) => [A, e ? "bg-epfl-canard text-white" : "text-text-primary hover:bg-bg-tertiary"].filter(Boolean).join(" "), j = (e) => [
209
209
  A,
210
210
  "text-text-secondary hover:bg-bg-tertiary",
@@ -241,7 +241,7 @@ var Ee = 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", W[l]].join(" "),
244
+ className: ["inline-flex items-center justify-center select-none text-text-secondary", ye[l]].join(" "),
245
245
  children: "…"
246
246
  }, e);
247
247
  let t = e === w;
@@ -282,10 +282,10 @@ var Ee = 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 De(e) {
285
+ function Ce(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 Oe({ 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 we({ 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 Oe({ 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: De(e.size)
378
+ children: Ce(e.size)
379
379
  }),
380
380
  /* @__PURE__ */ d("button", {
381
381
  type: "button",
@@ -384,7 +384,7 @@ function Oe({ 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(M, { size: 14 })
388
388
  })
389
389
  ]
390
390
  }, `${e.name}-${e.size}-${t}`))
@@ -394,30 +394,30 @@ function Oe({ 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 ke = {
397
+ var Te = {
398
398
  sm: "h-1.5",
399
399
  md: "h-2.5",
400
400
  lg: "h-4"
401
- }, Ae = {
401
+ }, Ee = {
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
- }, je = t(function({ value: e, variant: t = "primary", size: n = "md", showLabel: r = !1, formatLabel: i, className: a = "", ...o }, s) {
407
+ }, De = 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", ke[n]].join(" "),
414
+ className: ["flex-1 overflow-hidden rounded-full bg-bg-tertiary", Te[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", Ae[t]].join(" "),
420
+ className: ["h-full rounded-full transition-all duration-300 ease-out", Ee[t]].join(" "),
421
421
  style: { width: `${c}%` }
422
422
  })
423
423
  }), r && /* @__PURE__ */ d("span", {
@@ -425,7 +425,7 @@ var ke = {
425
425
  children: l
426
426
  })]
427
427
  });
428
- }), Me = t(function({ label: e, indeterminate: t = !1, helperText: r, error: o, className: c = "", id: l, disabled: u, ...p }, m) {
428
+ }), X = 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 ke = {
465
465
  children: o ?? r
466
466
  })]
467
467
  });
468
- }), Ne = {
468
+ }), Oe = {
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
- }, Pe = {
472
+ }, ke = {
473
473
  sm: "pl-8",
474
474
  md: "pl-10",
475
475
  lg: "pl-11"
476
- }, Fe = {
476
+ }, Ae = {
477
477
  sm: "pr-8",
478
478
  md: "pr-10",
479
479
  lg: "pr-11"
480
- }, G = {
480
+ }, je = {
481
481
  sm: "[&>svg]:size-4",
482
482
  md: "[&>svg]:size-5",
483
483
  lg: "[&>svg]:size-5"
484
- }, Ie = t(function({ label: e, helperText: t, error: n, leftIcon: r, rightIcon: i, inputSize: o = "md", className: s = "", id: c, disabled: l, ...u }, p) {
484
+ }, Me = 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 ke = {
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 ${G[o]}`,
498
+ className: `pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3 text-text-secondary ${je[o]}`,
499
499
  "aria-hidden": "true",
500
500
  children: r
501
501
  }),
@@ -511,14 +511,14 @@ var ke = {
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
- Ne[o],
515
- r ? Pe[o] : "",
516
- i ? Fe[o] : ""
514
+ Oe[o],
515
+ r ? ke[o] : "",
516
+ i ? Ae[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 ${G[o]}`,
521
+ className: `pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-text-secondary ${je[o]}`,
522
522
  "aria-hidden": "true",
523
523
  children: i
524
524
  })
@@ -531,15 +531,15 @@ var ke = {
531
531
  })
532
532
  ]
533
533
  });
534
- }), K = e(null);
535
- function Le() {
536
- let e = r(K);
534
+ }), Ne = e(null);
535
+ function Pe() {
536
+ let e = r(Ne);
537
537
  if (!e) throw Error("RadioGroup.Item must be used within RadioGroup");
538
538
  return e;
539
539
  }
540
- function q({ name: e, value: t, onChange: n, label: r, helperText: i, error: o, orientation: s = "vertical", disabled: c = !1, children: l, className: u = "" }) {
540
+ function Fe({ 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(K.Provider, {
542
+ return /* @__PURE__ */ d(Ne.Provider, {
543
543
  value: {
544
544
  name: m,
545
545
  value: t,
@@ -570,8 +570,8 @@ function q({ name: e, value: t, onChange: n, label: r, helperText: i, error: o,
570
570
  })
571
571
  });
572
572
  }
573
- function Re({ value: e, label: t, description: n, disabled: r }) {
574
- let { name: i, value: o, onChange: s, disabled: c, hasError: l } = Le(), u = a(), p = c || r;
573
+ function Ie({ value: e, label: t, description: n, disabled: r }) {
574
+ let { name: i, value: o, onChange: s, disabled: c, hasError: l } = Pe(), 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 Re({ value: e, label: t, description: n, disabled: r }) {
603
603
  })]
604
604
  });
605
605
  }
606
- q.Item = Re;
606
+ Fe.Item = Ie;
607
607
  //#endregion
608
608
  //#region src/theme/reactSelectStyles.ts
609
- var ze = (e) => ({
609
+ var Le = (e) => ({
610
610
  ...e,
611
611
  borderRadius: 8,
612
612
  colors: {
@@ -621,7 +621,7 @@ var ze = (e) => ({
621
621
  neutral20: "var(--color-border)",
622
622
  neutral30: "var(--color-border-strong)",
623
623
  neutral40: "var(--color-text-muted)",
624
- neutral50: "var(--color-text-secondary)",
624
+ neutral50: "var(--color-text-muted)",
625
625
  neutral60: "var(--color-text-secondary)",
626
626
  neutral70: "var(--color-text-primary)",
627
627
  neutral80: "var(--color-text-primary)",
@@ -629,49 +629,75 @@ var ze = (e) => ({
629
629
  danger: "var(--color-error)",
630
630
  dangerLight: "var(--color-error-bg)"
631
631
  }
632
- }), J = {
632
+ }), Z = {
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
+ }, Re = {
638
+ sm: "!min-h-8 !text-small",
639
+ md: "!min-h-10 !text-body",
640
+ lg: "!min-h-12 !text-body"
641
+ }, Q = {
642
+ sm: 32,
643
+ md: 40,
644
+ lg: 48
637
645
  };
638
- //#endregion
639
- //#region src/components/ui/Select.tsx
640
- function Be({ label: e, helperText: t, error: n, className: r = "", ...i }) {
641
- let o = a(), s = i.inputId ?? o, c = `${s}-helper`, l = !!n;
646
+ function ze({ label: e, helperText: t, error: n, selectSize: r = "md", className: i = "", ...o }) {
647
+ let s = a(), c = o.inputId ?? s, l = `${c}-helper`, u = !!n;
642
648
  return /* @__PURE__ */ f("div", {
643
- className: `flex flex-col gap-1.5 ${r}`,
649
+ className: `flex flex-col gap-1.5 ${i}`,
644
650
  children: [
645
651
  e && /* @__PURE__ */ d("label", {
646
- htmlFor: s,
652
+ htmlFor: c,
647
653
  className: "text-small font-medium text-text-primary",
648
654
  children: e
649
655
  }),
650
- /* @__PURE__ */ d(re, {
651
- inputId: s,
652
- theme: ze,
656
+ /* @__PURE__ */ d(te, {
657
+ inputId: c,
658
+ theme: Le,
653
659
  menuPortalTarget: document.body,
654
660
  styles: {
661
+ control: (e, t) => ({
662
+ ...e,
663
+ minHeight: Q[r],
664
+ height: t.isMulti ? void 0 : Q[r]
665
+ }),
666
+ valueContainer: (e) => ({
667
+ ...e,
668
+ height: o.isMulti ? void 0 : Q[r] - 2,
669
+ padding: "0 6px"
670
+ }),
671
+ input: (e) => ({
672
+ ...e,
673
+ margin: 0,
674
+ paddingTop: 0,
675
+ paddingBottom: 0
676
+ }),
677
+ indicatorsContainer: (e) => ({
678
+ ...e,
679
+ height: o.isMulti ? void 0 : Q[r] - 2
680
+ }),
655
681
  menuPortal: (e) => ({
656
682
  ...e,
657
683
  zIndex: 50
658
684
  }),
659
- ...i.styles
685
+ ...o.styles
660
686
  },
661
687
  classNames: {
662
- ...J,
688
+ ...Z,
663
689
  control: (e) => {
664
- let t = J.control?.(e) ?? "";
665
- return l ? `${t} !border-error !focus:ring-error` : t;
690
+ let t = `${Z.control?.(e) ?? ""} ${Re[r]}`;
691
+ return u ? `${t} !border-error !focus:ring-error` : t;
666
692
  }
667
693
  },
668
- "aria-invalid": l || void 0,
669
- "aria-errormessage": l ? c : void 0,
670
- ...i
694
+ "aria-invalid": u || void 0,
695
+ "aria-errormessage": u ? l : void 0,
696
+ ...o
671
697
  }),
672
698
  (t || n) && /* @__PURE__ */ d("p", {
673
- id: c,
674
- className: `text-caption ${l ? "text-error" : "text-text-secondary"}`,
699
+ id: l,
700
+ className: `text-caption ${u ? "text-error" : "text-text-secondary"}`,
675
701
  children: n ?? t
676
702
  })
677
703
  ]
@@ -679,7 +705,7 @@ function Be({ label: e, helperText: t, error: n, className: r = "", ...i }) {
679
705
  }
680
706
  //#endregion
681
707
  //#region src/components/ui/Switch.tsx
682
- var Ve = 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) {
683
709
  let c = a(), l = r ?? c, u = `${l}-helper`;
684
710
  return /* @__PURE__ */ f("div", {
685
711
  className: `flex flex-col gap-1 ${n}`,
@@ -722,7 +748,7 @@ var Ve = t(function({ label: e, helperText: t, className: n = "", id: r, disable
722
748
  children: t
723
749
  })]
724
750
  });
725
- }), He = 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) {
726
752
  let _ = a(), v = u ?? _, y = `${v}-helper`, b = !!r, x = s(null), S = n(() => {
727
753
  let e = x.current;
728
754
  !e || !o || (e.style.height = "auto", e.style.height = `${e.scrollHeight}px`);
@@ -772,20 +798,20 @@ var Ve = t(function({ label: e, helperText: t, className: n = "", id: r, disable
772
798
  })
773
799
  ]
774
800
  });
775
- }), Ue = e({
801
+ }), He = e({
776
802
  close: () => {},
777
803
  getItemProps: () => ({}),
778
804
  activeIndex: null,
779
805
  setActiveIndex: () => {}
780
806
  });
781
- function We() {
807
+ function Ue() {
782
808
  return /* @__PURE__ */ d("div", {
783
809
  role: "separator",
784
810
  className: "my-1 border-t border-border"
785
811
  });
786
812
  }
787
- var Ge = t(function({ children: e, icon: t, danger: n = !1, disabled: i = !1, onClick: a, className: o = "", ...s }, c) {
788
- let { close: l } = r(Ue);
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);
789
815
  return /* @__PURE__ */ f("button", {
790
816
  ref: c,
791
817
  type: "button",
@@ -808,22 +834,22 @@ var Ge = t(function({ children: e, icon: t, danger: n = !1, disabled: i = !1, on
808
834
  }), e]
809
835
  });
810
836
  });
811
- function Ke({ trigger: e, children: t, placement: r = "bottom-start", className: i = "" }) {
812
- 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: _ } = G({
813
839
  open: a,
814
840
  onOpenChange: o,
815
841
  placement: r,
816
842
  middleware: [
817
- I(4),
818
- F(),
819
- L({ padding: 8 })
843
+ V(4),
844
+ B(),
845
+ H({ padding: 8 })
820
846
  ],
821
- whileElementsMounted: P
822
- }), { getReferenceProps: v, getFloatingProps: y, getItemProps: b } = B([
823
- oe(_),
824
- R(_),
825
- V(_, { role: "menu" }),
826
- le(_, {
847
+ whileElementsMounted: z
848
+ }), { getReferenceProps: v, getFloatingProps: y, getItemProps: b } = K([
849
+ U(_),
850
+ W(_),
851
+ q(_, { role: "menu" }),
852
+ ie(_, {
827
853
  listRef: m,
828
854
  activeIndex: l,
829
855
  onNavigate: p,
@@ -835,7 +861,7 @@ function Ke({ trigger: e, children: t, placement: r = "bottom-start", className:
835
861
  className: "inline-flex",
836
862
  ...v(),
837
863
  children: e
838
- }), a && /* @__PURE__ */ d(N, { children: /* @__PURE__ */ d(ie, {
864
+ }), a && /* @__PURE__ */ d(L, { children: /* @__PURE__ */ d(I, {
839
865
  context: _,
840
866
  modal: !1,
841
867
  children: /* @__PURE__ */ d("div", {
@@ -847,7 +873,7 @@ function Ke({ trigger: e, children: t, placement: r = "bottom-start", className:
847
873
  i
848
874
  ].join(" "),
849
875
  ...y(),
850
- children: /* @__PURE__ */ d(Ue.Provider, {
876
+ children: /* @__PURE__ */ d(He.Provider, {
851
877
  value: {
852
878
  close: x,
853
879
  getItemProps: b,
@@ -861,28 +887,28 @@ function Ke({ trigger: e, children: t, placement: r = "bottom-start", className:
861
887
  }
862
888
  //#endregion
863
889
  //#region src/components/ui/Popover.tsx
864
- function qe({ trigger: e, children: t, placement: n = "bottom", open: r, onOpenChange: i, className: a = "" }) {
865
- 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 } = G({
866
892
  open: p,
867
893
  onOpenChange: l ? (e) => i?.(e) : s,
868
894
  placement: n,
869
895
  middleware: [
870
- I(8),
871
- F(),
872
- L({ padding: 8 })
896
+ V(8),
897
+ B(),
898
+ H({ padding: 8 })
873
899
  ],
874
- whileElementsMounted: P
875
- }), { getReferenceProps: _, getFloatingProps: v } = B([
876
- oe(g),
877
- R(g),
878
- V(g)
900
+ whileElementsMounted: z
901
+ }), { getReferenceProps: _, getFloatingProps: v } = K([
902
+ U(g),
903
+ W(g),
904
+ q(g)
879
905
  ]);
880
906
  return /* @__PURE__ */ f(u, { children: [/* @__PURE__ */ d("span", {
881
907
  ref: m.setReference,
882
908
  className: "inline-flex",
883
909
  ..._(),
884
910
  children: e
885
- }), p && /* @__PURE__ */ d(N, { children: /* @__PURE__ */ d(ie, {
911
+ }), p && /* @__PURE__ */ d(L, { children: /* @__PURE__ */ d(I, {
886
912
  context: g,
887
913
  modal: !1,
888
914
  children: /* @__PURE__ */ d("div", {
@@ -900,12 +926,12 @@ function qe({ trigger: e, children: t, placement: n = "bottom", open: r, onOpenC
900
926
  }
901
927
  //#endregion
902
928
  //#region src/components/ui/Tabs.tsx
903
- var Je = e({
929
+ var qe = e({
904
930
  activeValue: "",
905
931
  idPrefix: ""
906
932
  });
907
- function Ye({ value: e, children: t, className: n = "" }) {
908
- let { activeValue: i, idPrefix: a } = r(Je), o = i === e;
933
+ function Je({ value: e, children: t, className: n = "" }) {
934
+ let { activeValue: i, idPrefix: a } = r(qe), o = i === e;
909
935
  return /* @__PURE__ */ d("div", {
910
936
  id: `${a}-panel-${e}`,
911
937
  role: "tabpanel",
@@ -916,7 +942,7 @@ function Ye({ value: e, children: t, className: n = "" }) {
916
942
  children: o && t
917
943
  });
918
944
  }
919
- function Xe({ 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 = "" }) {
920
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) => {
921
947
  m || g(e), i?.(e);
922
948
  }, [m, i]), y = e.filter((e) => !e.disabled), b = (e) => {
@@ -941,7 +967,7 @@ function Xe({ items: e, value: t, defaultValue: r, onChange: i, children: o, cla
941
967
  let r = y[n];
942
968
  r && (v(r.value), (p.current?.querySelector(`[data-tab-value="${r.value}"]`))?.focus());
943
969
  };
944
- return /* @__PURE__ */ d(Je.Provider, {
970
+ return /* @__PURE__ */ d(qe.Provider, {
945
971
  value: {
946
972
  activeValue: _,
947
973
  idPrefix: u
@@ -985,39 +1011,39 @@ function Xe({ items: e, value: t, defaultValue: r, onChange: i, children: o, cla
985
1011
  }
986
1012
  //#endregion
987
1013
  //#region src/components/ui/Tooltip.tsx
988
- var Ze = {
1014
+ var Xe = {
989
1015
  top: "bottom",
990
1016
  bottom: "top",
991
1017
  left: "right",
992
1018
  right: "left"
993
1019
  };
994
- function Y({ children: e, content: t, placement: n = "top", delay: r = 200, className: i = "" }) {
995
- 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: _ } = G({
996
1022
  open: a,
997
1023
  onOpenChange: o,
998
1024
  placement: n,
999
1025
  middleware: [
1000
- I(8),
1001
- F(),
1002
- L({ padding: 8 }),
1003
- ae({ element: l })
1026
+ V(8),
1027
+ B(),
1028
+ H({ padding: 8 }),
1029
+ R({ element: l })
1004
1030
  ],
1005
- whileElementsMounted: P
1006
- }), { getReferenceProps: v, getFloatingProps: y } = B([
1007
- ce(h, {
1031
+ whileElementsMounted: z
1032
+ }), { getReferenceProps: v, getFloatingProps: y } = K([
1033
+ re(h, {
1008
1034
  delay: r,
1009
1035
  move: !1
1010
1036
  }),
1011
- se(h),
1012
- R(h),
1013
- V(h, { role: "tooltip" })
1037
+ ne(h),
1038
+ W(h),
1039
+ q(h, { role: "tooltip" })
1014
1040
  ]), b = _.split("-")[0], x = g.arrow?.x, S = g.arrow?.y;
1015
1041
  return /* @__PURE__ */ f(u, { children: [/* @__PURE__ */ d("span", {
1016
1042
  ref: p.setReference,
1017
1043
  className: "inline-flex",
1018
1044
  ...v(),
1019
1045
  children: e
1020
- }), a && t && /* @__PURE__ */ d(N, { children: /* @__PURE__ */ f("div", {
1046
+ }), a && t && /* @__PURE__ */ d(L, { children: /* @__PURE__ */ f("div", {
1021
1047
  ref: p.setFloating,
1022
1048
  style: m,
1023
1049
  role: "tooltip",
@@ -1034,7 +1060,7 @@ function Y({ children: e, content: t, placement: n = "top", delay: r = 200, clas
1034
1060
  style: {
1035
1061
  left: x == null ? "" : `${x}px`,
1036
1062
  top: S == null ? "" : `${S}px`,
1037
- [Ze[b]]: "-4px"
1063
+ [Xe[b]]: "-4px"
1038
1064
  }
1039
1065
  })]
1040
1066
  }) })] });
@@ -1042,7 +1068,7 @@ function Y({ children: e, content: t, placement: n = "top", delay: r = 200, clas
1042
1068
  //#endregion
1043
1069
  //#region src/hooks/useLanguage.ts
1044
1070
  function Qe() {
1045
- let { i18n: e } = M(), t = e.language ?? "en", r = n((t) => {
1071
+ let { i18n: e } = F(), t = e.language ?? "en", r = n((t) => {
1046
1072
  e.changeLanguage(t);
1047
1073
  }, [e]);
1048
1074
  return {
@@ -1083,57 +1109,57 @@ function et({ className: e = "" }) {
1083
1109
  }
1084
1110
  //#endregion
1085
1111
  //#region src/hooks/useTheme.ts
1086
- var X = "poesis-theme", Z = /* @__PURE__ */ new Set();
1087
- function tt() {
1088
- Z.forEach((e) => e());
1112
+ var tt = "poesis-theme", nt = /* @__PURE__ */ new Set();
1113
+ function rt() {
1114
+ nt.forEach((e) => e());
1089
1115
  }
1090
- function nt(e) {
1091
- return Z.add(e), () => Z.delete(e);
1116
+ function it(e) {
1117
+ return nt.add(e), () => nt.delete(e);
1092
1118
  }
1093
- function rt() {
1119
+ function at() {
1094
1120
  return document.documentElement.classList.contains("dark") ? "dark" : "light";
1095
1121
  }
1096
- function it() {
1122
+ function ot() {
1097
1123
  return "light";
1098
1124
  }
1099
- function Q(e) {
1100
- e === "dark" ? document.documentElement.classList.add("dark") : document.documentElement.classList.remove("dark"), localStorage.setItem(X, e), tt();
1125
+ function $(e) {
1126
+ e === "dark" ? document.documentElement.classList.add("dark") : document.documentElement.classList.remove("dark"), localStorage.setItem(tt, e), rt();
1101
1127
  }
1102
- function at() {
1103
- let e = localStorage.getItem(X);
1128
+ function st() {
1129
+ let e = localStorage.getItem(tt);
1104
1130
  if (e) {
1105
- Q(e);
1131
+ $(e);
1106
1132
  return;
1107
1133
  }
1108
1134
  let t = window.matchMedia("(prefers-color-scheme: dark)").matches;
1109
- Q(t ? "dark" : "light");
1135
+ $(t ? "dark" : "light");
1110
1136
  }
1111
- function ot() {
1112
- let e = l(nt, rt, it);
1137
+ function ct() {
1138
+ let e = l(it, at, ot);
1113
1139
  return i(() => {
1114
1140
  let e = window.matchMedia("(prefers-color-scheme: dark)"), t = (e) => {
1115
- localStorage.getItem(X) || Q(e.matches ? "dark" : "light");
1141
+ localStorage.getItem(tt) || $(e.matches ? "dark" : "light");
1116
1142
  };
1117
1143
  return e.addEventListener("change", t), () => e.removeEventListener("change", t);
1118
1144
  }, []), {
1119
1145
  theme: e,
1120
1146
  toggleTheme: n(() => {
1121
- Q(e === "dark" ? "light" : "dark");
1147
+ $(e === "dark" ? "light" : "dark");
1122
1148
  }, [e]),
1123
1149
  setTheme: n((e) => {
1124
- Q(e);
1150
+ $(e);
1125
1151
  }, []),
1126
1152
  isDark: e === "dark"
1127
1153
  };
1128
1154
  }
1129
1155
  //#endregion
1130
1156
  //#region src/components/ui/ThemeToggle.tsx
1131
- function st({ variant: e = "ghost", size: t = "md", className: n }) {
1132
- let { isDark: r, toggleTheme: i } = ot(), { t: a } = M();
1133
- return /* @__PURE__ */ d(Ce, {
1157
+ function lt({ variant: e = "ghost", size: t = "md", className: n }) {
1158
+ let { isDark: r, toggleTheme: i } = ct(), { t: a } = F();
1159
+ return /* @__PURE__ */ d(ve, {
1134
1160
  variant: e,
1135
1161
  size: t,
1136
- icon: d(r ? ee : T, { size: 16 }),
1162
+ icon: d(r ? j : T, { size: 16 }),
1137
1163
  "aria-label": a("theme.toggleTheme"),
1138
1164
  onClick: i,
1139
1165
  className: n
@@ -1141,8 +1167,8 @@ function st({ variant: e = "ghost", size: t = "md", className: n }) {
1141
1167
  }
1142
1168
  //#endregion
1143
1169
  //#region src/components/layout/TopNav.tsx
1144
- var ct = "https://www.epfl.ch/campus/services/website//wp-content/themes/wp-theme-2018/assets/svg/epfl-logo.svg?refresh=now";
1145
- function lt({ 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 }) {
1146
1172
  return /* @__PURE__ */ f("header", {
1147
1173
  className: "fixed inset-x-0 top-0 z-40 flex h-14 items-center border-b border-border bg-bg-primary px-md",
1148
1174
  children: [
@@ -1156,7 +1182,7 @@ function lt({ logo: e, logoUrl: t, categories: n = [], activeCategoryId: r, onCa
1156
1182
  /* @__PURE__ */ d("div", {
1157
1183
  className: "mr-lg flex shrink-0 items-center",
1158
1184
  children: e ?? /* @__PURE__ */ d("img", {
1159
- src: t ?? ct,
1185
+ src: t ?? ut,
1160
1186
  alt: "EPFL",
1161
1187
  className: "h-[30px] w-auto"
1162
1188
  })
@@ -1185,30 +1211,30 @@ function lt({ logo: e, logoUrl: t, categories: n = [], activeCategoryId: r, onCa
1185
1211
  }
1186
1212
  //#endregion
1187
1213
  //#region src/components/layout/SideNav.tsx
1188
- var $ = "sidebar-fold-state", ut = (e) => e.toString().toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "").trim().replace(/[^\w\s-]/g, "").replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, ""), dt = (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) => {
1189
1215
  try {
1190
- let t = localStorage.getItem($);
1216
+ let t = localStorage.getItem(ft);
1191
1217
  if (t) return JSON.parse(t)[e] === !0;
1192
1218
  } catch {}
1193
1219
  return !1;
1194
- }, ft = (e, t) => {
1220
+ }, ht = (e, t) => {
1195
1221
  try {
1196
- let n = localStorage.getItem($), r = n ? JSON.parse(n) : {};
1197
- r[e] = t, localStorage.setItem($, JSON.stringify(r));
1222
+ let n = localStorage.getItem(ft), r = n ? JSON.parse(n) : {};
1223
+ r[e] = t, localStorage.setItem(ft, JSON.stringify(r));
1198
1224
  } catch {}
1199
1225
  };
1200
- function pt(e, t) {
1201
- let n = `sidebar-${e ? ut(e) : "fallback"}-open`, [r, i] = c(t ? dt(n) : !0);
1226
+ function gt(e, t) {
1227
+ let n = `sidebar-${e ? pt(e) : "fallback"}-open`, [r, i] = c(t ? mt(n) : !0);
1202
1228
  return {
1203
1229
  isOpen: r,
1204
1230
  toggle: () => {
1205
1231
  if (!t) return;
1206
1232
  let e = !r;
1207
- i(e), ft(n, e);
1233
+ i(e), ht(n, e);
1208
1234
  }
1209
1235
  };
1210
1236
  }
1211
- function mt({ sections: e = [], activeLinkId: t, onLinkClick: n, collapsed: r = !1, foldable: i = !1, homeLink: a }) {
1237
+ function _t({ sections: e = [], activeLinkId: t, onLinkClick: n, collapsed: r = !1, foldable: i = !1, homeLink: a }) {
1212
1238
  return /* @__PURE__ */ d("aside", {
1213
1239
  className: ["poesis-desktop-flex flex-col border-r border-border bg-bg-secondary overflow-y-auto transition-[width] duration-200", r ? "w-16" : "w-64"].join(" "),
1214
1240
  children: /* @__PURE__ */ d("nav", {
@@ -1232,7 +1258,7 @@ function mt({ sections: e = [], activeLinkId: t, onLinkClick: n, collapsed: r =
1232
1258
  className: "shrink-0"
1233
1259
  }), !r && /* @__PURE__ */ d("span", { children: a.label })]
1234
1260
  })
1235
- }), e.map((e) => /* @__PURE__ */ d(gt, {
1261
+ }), e.map((e) => /* @__PURE__ */ d(yt, {
1236
1262
  section: e,
1237
1263
  activeLinkId: t,
1238
1264
  onLinkClick: n,
@@ -1243,22 +1269,22 @@ function mt({ sections: e = [], activeLinkId: t, onLinkClick: n, collapsed: r =
1243
1269
  })
1244
1270
  });
1245
1271
  }
1246
- function ht({ counters: e }) {
1272
+ function vt({ counters: e }) {
1247
1273
  let t = e?.filter((e) => e.count > 0);
1248
1274
  return t?.length ? /* @__PURE__ */ d("span", {
1249
1275
  className: "ml-auto flex items-center gap-1",
1250
- children: t.map((e, t) => /* @__PURE__ */ d(Y, {
1276
+ children: t.map((e, t) => /* @__PURE__ */ d(Ze, {
1251
1277
  content: e.tooltip,
1252
1278
  placement: "top",
1253
- children: /* @__PURE__ */ d(H, {
1279
+ children: /* @__PURE__ */ d(J, {
1254
1280
  color: e.color,
1255
1281
  children: e.count > 99 ? "99+" : e.count
1256
1282
  })
1257
1283
  }, t))
1258
1284
  }) : null;
1259
1285
  }
1260
- function gt({ section: e, activeLinkId: t, onLinkClick: n, collapsed: r, foldable: i }) {
1261
- let { isOpen: a, toggle: o } = pt(e.title, i);
1286
+ function yt({ section: e, activeLinkId: t, onLinkClick: n, collapsed: r, foldable: i }) {
1287
+ let { isOpen: a, toggle: o } = gt(e.title, i);
1262
1288
  return /* @__PURE__ */ f("li", {
1263
1289
  className: "border-b border-border last:border-b-0",
1264
1290
  children: [e.title && !r && (i ? /* @__PURE__ */ f("button", {
@@ -1286,7 +1312,7 @@ function gt({ section: e, activeLinkId: t, onLinkClick: n, collapsed: r, foldabl
1286
1312
  children: [
1287
1313
  e.icon && /* @__PURE__ */ d(e.icon, { size: 18 }),
1288
1314
  !r && /* @__PURE__ */ d("span", { children: e.label }),
1289
- !r && /* @__PURE__ */ d(ht, { counters: e.counters })
1315
+ !r && /* @__PURE__ */ d(vt, { counters: e.counters })
1290
1316
  ]
1291
1317
  }) }, e.id);
1292
1318
  })
@@ -1295,7 +1321,7 @@ function gt({ section: e, activeLinkId: t, onLinkClick: n, collapsed: r, foldabl
1295
1321
  }
1296
1322
  //#endregion
1297
1323
  //#region src/components/layout/BurgerDrawer.tsx
1298
- function _t({ 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 }) {
1299
1325
  let p = s(null);
1300
1326
  return i(() => {
1301
1327
  if (!e) return;
@@ -1328,7 +1354,7 @@ function _t({ open: e, onClose: t, categories: n = [], activeCategoryId: r, onCa
1328
1354
  onClick: t,
1329
1355
  className: "flex size-9 items-center justify-center rounded-md text-text-secondary hover:bg-bg-tertiary hover:text-text-primary",
1330
1356
  "aria-label": "Close menu",
1331
- children: /* @__PURE__ */ d(ne, { size: 18 })
1357
+ children: /* @__PURE__ */ d(P, { size: 18 })
1332
1358
  })]
1333
1359
  }), /* @__PURE__ */ f("div", {
1334
1360
  className: "flex-1 overflow-y-auto p-sm",
@@ -1345,7 +1371,7 @@ function _t({ open: e, onClose: t, categories: n = [], activeCategoryId: r, onCa
1345
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(" "),
1346
1372
  children: [e.icon && /* @__PURE__ */ d(e.icon, { size: 16 }), e.label]
1347
1373
  }, e.id))]
1348
- }), o.map((e) => /* @__PURE__ */ d(yt, {
1374
+ }), o.map((e) => /* @__PURE__ */ d(St, {
1349
1375
  section: e,
1350
1376
  activeLinkId: c,
1351
1377
  onLinkClick: (e) => {
@@ -1355,21 +1381,21 @@ function _t({ open: e, onClose: t, categories: n = [], activeCategoryId: r, onCa
1355
1381
  })]
1356
1382
  })] });
1357
1383
  }
1358
- function vt({ counters: e }) {
1384
+ function xt({ counters: e }) {
1359
1385
  let t = e?.filter((e) => e.count > 0);
1360
1386
  return t?.length ? /* @__PURE__ */ d("span", {
1361
1387
  className: "ml-auto flex items-center gap-1",
1362
- children: t.map((e, t) => /* @__PURE__ */ d(Y, {
1388
+ children: t.map((e, t) => /* @__PURE__ */ d(Ze, {
1363
1389
  content: e.tooltip,
1364
1390
  placement: "top",
1365
- children: /* @__PURE__ */ d(H, {
1391
+ children: /* @__PURE__ */ d(J, {
1366
1392
  color: e.color,
1367
1393
  children: e.count > 99 ? "99+" : e.count
1368
1394
  })
1369
1395
  }, t))
1370
1396
  }) : null;
1371
1397
  }
1372
- function yt({ section: e, activeLinkId: t, onLinkClick: n }) {
1398
+ function St({ section: e, activeLinkId: t, onLinkClick: n }) {
1373
1399
  let [r, i] = c(!0);
1374
1400
  return /* @__PURE__ */ f("div", {
1375
1401
  className: "mb-xs flex flex-col",
@@ -1393,7 +1419,7 @@ function yt({ section: e, activeLinkId: t, onLinkClick: n }) {
1393
1419
  children: [
1394
1420
  e.icon && /* @__PURE__ */ d(e.icon, { size: 18 }),
1395
1421
  /* @__PURE__ */ d("span", { children: e.label }),
1396
- /* @__PURE__ */ d(vt, { counters: e.counters })
1422
+ /* @__PURE__ */ d(xt, { counters: e.counters })
1397
1423
  ]
1398
1424
  }) }, e.id);
1399
1425
  })
@@ -1402,8 +1428,8 @@ function yt({ section: e, activeLinkId: t, onLinkClick: n }) {
1402
1428
  }
1403
1429
  //#endregion
1404
1430
  //#region src/components/layout/Footer.tsx
1405
- var bt = "https://www.epfl.ch/campus/services/website//wp-content/themes/wp-theme-2018/assets/svg/epfl-logo.svg?refresh=now", xt = () => (/* @__PURE__ */ new Date()).getFullYear();
1406
- function St() {
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() {
1407
1433
  return /* @__PURE__ */ d("footer", {
1408
1434
  role: "contentinfo",
1409
1435
  className: "bg-bg-secondary border-t border-border mt-auto",
@@ -1416,7 +1442,7 @@ function St() {
1416
1442
  children: /* @__PURE__ */ d("a", {
1417
1443
  href: "https://www.epfl.ch/en/",
1418
1444
  children: /* @__PURE__ */ d("img", {
1419
- src: bt,
1445
+ src: Ct,
1420
1446
  alt: "Logo EPFL",
1421
1447
  className: "h-8 w-auto",
1422
1448
  style: {
@@ -1468,7 +1494,7 @@ function St() {
1468
1494
  className: "m-0 text-text-muted text-small",
1469
1495
  children: [
1470
1496
  "© ",
1471
- xt(),
1497
+ wt(),
1472
1498
  " EPFL, all rights reserved"
1473
1499
  ]
1474
1500
  })]
@@ -1507,9 +1533,9 @@ function St() {
1507
1533
  }
1508
1534
  //#endregion
1509
1535
  //#region src/components/layout/UserMenu.tsx
1510
- function Ct({ onLogin: e }) {
1511
- let { t } = M();
1512
- return /* @__PURE__ */ d(be, {
1536
+ function Et({ onLogin: e }) {
1537
+ let { t } = F();
1538
+ return /* @__PURE__ */ d(he, {
1513
1539
  variant: "primary",
1514
1540
  size: "sm",
1515
1541
  iconLeft: /* @__PURE__ */ d(p, { size: 14 }),
@@ -1517,10 +1543,10 @@ function Ct({ onLogin: e }) {
1517
1543
  children: t("auth.login")
1518
1544
  });
1519
1545
  }
1520
- function wt({ user: e, onLogout: t }) {
1521
- let { t: n } = M();
1522
- return /* @__PURE__ */ f(Ke, {
1523
- trigger: /* @__PURE__ */ d(pe, {
1546
+ function Dt({ user: e, onLogout: t }) {
1547
+ let { t: n } = F();
1548
+ return /* @__PURE__ */ f(Ge, {
1549
+ trigger: /* @__PURE__ */ d(ce, {
1524
1550
  src: e.avatarUrl,
1525
1551
  name: e.name,
1526
1552
  size: "sm",
@@ -1538,8 +1564,8 @@ function wt({ user: e, onLogout: t }) {
1538
1564
  children: e.email
1539
1565
  })]
1540
1566
  }),
1541
- /* @__PURE__ */ d(We, {}),
1542
- /* @__PURE__ */ d(Ge, {
1567
+ /* @__PURE__ */ d(Ue, {}),
1568
+ /* @__PURE__ */ d(We, {
1543
1569
  icon: /* @__PURE__ */ d(m, { size: 14 }),
1544
1570
  onClick: t,
1545
1571
  children: n("auth.logout")
@@ -1549,12 +1575,12 @@ function wt({ user: e, onLogout: t }) {
1549
1575
  }
1550
1576
  //#endregion
1551
1577
  //#region src/components/layout/PageShell.tsx
1552
- function Tt({ 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 }) {
1553
1579
  let [_, v] = c(!1);
1554
1580
  return /* @__PURE__ */ f("div", {
1555
1581
  className: "flex h-screen flex-col bg-bg-primary",
1556
1582
  children: [
1557
- /* @__PURE__ */ d(lt, {
1583
+ /* @__PURE__ */ d(dt, {
1558
1584
  logo: t,
1559
1585
  logoUrl: n,
1560
1586
  categories: r,
@@ -1565,7 +1591,7 @@ function Tt({ children: e, logo: t, logoUrl: n, categories: r = [], activeCatego
1565
1591
  }),
1566
1592
  /* @__PURE__ */ f("div", {
1567
1593
  className: "flex flex-1 overflow-hidden pt-14",
1568
- children: [/* @__PURE__ */ d(mt, {
1594
+ children: [/* @__PURE__ */ d(_t, {
1569
1595
  sections: o,
1570
1596
  activeLinkId: s,
1571
1597
  onLinkClick: l,
@@ -1581,10 +1607,10 @@ function Tt({ children: e, logo: t, logoUrl: n, categories: r = [], activeCatego
1581
1607
  className: "mx-auto max-w-[var(--container-6xl)]",
1582
1608
  children: e
1583
1609
  })
1584
- }), g && /* @__PURE__ */ d(St, {})]
1610
+ }), g && /* @__PURE__ */ d(Tt, {})]
1585
1611
  })]
1586
1612
  }),
1587
- /* @__PURE__ */ d(_t, {
1613
+ /* @__PURE__ */ d(bt, {
1588
1614
  open: _,
1589
1615
  onClose: () => v(!1),
1590
1616
  categories: r,
@@ -1603,7 +1629,7 @@ function Tt({ children: e, logo: t, logoUrl: n, categories: r = [], activeCatego
1603
1629
  }
1604
1630
  //#endregion
1605
1631
  //#region src/components/data-display/Card.tsx
1606
- var Et = 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) {
1607
1633
  let c = t || n;
1608
1634
  return /* @__PURE__ */ f("div", {
1609
1635
  ref: s,
@@ -1637,7 +1663,7 @@ var Et = t(function({ header: e, footer: t, actions: n, noPadding: r = !1, class
1637
1663
  })
1638
1664
  ]
1639
1665
  });
1640
- }), Dt = 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) {
1641
1667
  let o = t === "horizontal";
1642
1668
  return /* @__PURE__ */ d("dl", {
1643
1669
  ref: a,
@@ -1658,7 +1684,7 @@ var Et = t(function({ header: e, footer: t, actions: n, noPadding: r = !1, class
1658
1684
  })]
1659
1685
  }, t))
1660
1686
  });
1661
- }), Ot = 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) {
1662
1688
  return /* @__PURE__ */ f("div", {
1663
1689
  ref: o,
1664
1690
  className: ["flex flex-col items-center justify-center text-center py-2xl px-lg", i].filter(Boolean).join(" "),
@@ -1685,7 +1711,7 @@ var Et = t(function({ header: e, footer: t, actions: n, noPadding: r = !1, class
1685
1711
  });
1686
1712
  //#endregion
1687
1713
  //#region src/components/data-display/Table.tsx
1688
- function kt(e, t) {
1714
+ function Mt(e, t) {
1689
1715
  if (!e.sortValue || t.length === 0) return "text";
1690
1716
  for (let n of t) {
1691
1717
  let t = e.sortValue(n);
@@ -1693,30 +1719,76 @@ function kt(e, t) {
1693
1719
  }
1694
1720
  return "text";
1695
1721
  }
1696
- function At({ active: e, direction: t, columnType: n }) {
1697
- 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 : ee : t === "asc" ? D : O, {
1698
1724
  size: 14,
1699
1725
  className: "ml-1 inline",
1700
1726
  "aria-hidden": !0
1701
- }) : /* @__PURE__ */ d(O, {
1727
+ }) : /* @__PURE__ */ d(k, {
1702
1728
  size: 14,
1703
1729
  className: "ml-1 inline opacity-30",
1704
1730
  "aria-hidden": !0
1705
1731
  });
1706
1732
  }
1707
- var jt = t(function({ columns: e, data: t, rowKey: r, striped: i = !1, sort: a, onSortChange: s, emptyContent: l, className: u = "", ...p }, m) {
1708
- let [h, g] = c(), _ = a ?? h, v = n((e) => {
1709
- 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(X, {
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, hiddenColumns: h, onHiddenColumnsChange: g, defaultHiddenColumns: _, selectionKey: v, selectedValues: y, onSelectionChange: b, className: x = "", ...S }, C) {
1765
+ let [w, T] = c(), E = a ?? w, D = n((e) => {
1766
+ let t = E?.column === e && E.direction === "asc" ? {
1710
1767
  column: e,
1711
1768
  direction: "desc"
1712
1769
  } : {
1713
1770
  column: e,
1714
1771
  direction: "asc"
1715
1772
  };
1716
- s ? s(t) : g(t);
1717
- }, [_, s]), y = o(() => {
1718
- if (!_ || s) return t;
1719
- let n = e.find((e) => e.key === _.column);
1773
+ s ? s(t) : T(t);
1774
+ }, [E, s]), [O, k] = c(() => new Set(_ ?? [])), A = o(() => h ? new Set(h) : O, [h, O]), ee = n((e) => {
1775
+ let t = new Set(A);
1776
+ t.has(e) ? t.delete(e) : t.add(e), g ? g(Array.from(t)) : k(t);
1777
+ }, [A, g]), [j, M] = c(() => /* @__PURE__ */ new Set()), N = o(() => y ? new Set(y) : j, [y, j]), P = n((e) => {
1778
+ let t = Array.from(e);
1779
+ b ? b(t) : M(e);
1780
+ }, [b]), F = n((e) => {
1781
+ let t = new Set(N);
1782
+ t.has(e) ? t.delete(e) : t.add(e), P(t);
1783
+ }, [N, P]), te = n((e) => {
1784
+ P(e.length > 0 && e.every((e) => N.has(e)) ? /* @__PURE__ */ new Set() : new Set(e));
1785
+ }, [N, P]), I = o(() => m ? e.filter((e) => !A.has(e.key)) : e, [
1786
+ e,
1787
+ A,
1788
+ m
1789
+ ]), L = o(() => {
1790
+ if (!E || s) return t;
1791
+ let n = e.find((e) => e.key === E.column);
1720
1792
  if (!n?.sortValue) return t;
1721
1793
  let r = n.sortValue;
1722
1794
  return [...t].sort((e, t) => {
@@ -1725,64 +1797,95 @@ var jt = t(function({ columns: e, data: t, rowKey: r, striped: i = !1, sort: a,
1725
1797
  if (n == null) return 1;
1726
1798
  if (i == null) return -1;
1727
1799
  let a = typeof n == "number" && typeof i == "number" ? n - i : String(n).localeCompare(String(i));
1728
- return _.direction === "asc" ? a : -a;
1800
+ return E.direction === "asc" ? a : -a;
1729
1801
  });
1730
1802
  }, [
1731
1803
  t,
1732
- _,
1804
+ E,
1733
1805
  e,
1734
1806
  s
1735
- ]), b = o(() => {
1807
+ ]), R = o(() => v ? L.map((e) => e[v]) : [], [L, v]), z = R.length > 0 && R.every((e) => N.has(e)), B = !z && R.some((e) => N.has(e)), V = o(() => {
1736
1808
  let n = /* @__PURE__ */ new Map();
1737
- for (let r of e) r.sortable && n.set(r.key, kt(r, t));
1809
+ for (let r of e) r.sortable && n.set(r.key, Mt(r, t));
1738
1810
  return n;
1739
- }, [e, t]), x = y.length === 0;
1740
- return /* @__PURE__ */ d("div", {
1741
- ref: m,
1742
- className: ["overflow-x-auto rounded-md border border-border", u].filter(Boolean).join(" "),
1743
- ...p,
1744
- children: /* @__PURE__ */ f("table", {
1811
+ }, [e, t]), H = I.length + (v ? 1 : 0), U = L.length === 0;
1812
+ return /* @__PURE__ */ f("div", {
1813
+ ref: C,
1814
+ className: ["overflow-x-auto rounded-md border border-border", x].filter(Boolean).join(" "),
1815
+ ...S,
1816
+ children: [(p || m) && /* @__PURE__ */ f("div", {
1817
+ className: "flex items-center justify-between gap-md px-md py-sm border-b border-border bg-bg-primary",
1818
+ children: [/* @__PURE__ */ d("div", {
1819
+ className: "flex items-center gap-sm min-w-0",
1820
+ children: p
1821
+ }), m && /* @__PURE__ */ d(Pt, {
1822
+ columns: e,
1823
+ hiddenSet: A,
1824
+ onToggle: ee
1825
+ })]
1826
+ }), /* @__PURE__ */ f("table", {
1745
1827
  className: "w-full text-body text-left",
1746
- children: [/* @__PURE__ */ d("thead", { children: /* @__PURE__ */ d("tr", {
1747
- className: "bg-bg-secondary border-b border-border",
1748
- children: e.map((e) => {
1749
- let t = _?.column === e.key;
1750
- return /* @__PURE__ */ d("th", {
1751
- className: [
1752
- "px-md py-sm font-semibold text-small text-text-secondary whitespace-nowrap",
1753
- e.sortable && "cursor-pointer select-none hover:text-text-primary",
1754
- e.headerClassName
1755
- ].filter(Boolean).join(" "),
1756
- onClick: e.sortable ? () => v(e.key) : void 0,
1757
- "aria-sort": t ? _.direction === "asc" ? "ascending" : "descending" : e.sortable ? "none" : void 0,
1758
- children: /* @__PURE__ */ f("span", {
1759
- className: "inline-flex items-center",
1760
- children: [e.header, e.sortable && /* @__PURE__ */ d(At, {
1761
- active: t,
1762
- direction: t ? _.direction : void 0,
1763
- columnType: b.get(e.key) ?? "text"
1764
- })]
1828
+ children: [/* @__PURE__ */ d("thead", {
1829
+ className: u ? "sticky top-0 z-10" : void 0,
1830
+ children: /* @__PURE__ */ f("tr", {
1831
+ className: "bg-bg-secondary border-b border-border",
1832
+ children: [v && /* @__PURE__ */ d("th", {
1833
+ className: "w-10 px-sm py-sm text-center",
1834
+ children: /* @__PURE__ */ d(X, {
1835
+ checked: z,
1836
+ indeterminate: B,
1837
+ onChange: () => te(R),
1838
+ "aria-label": "Select all rows"
1765
1839
  })
1766
- }, e.key);
1840
+ }), I.map((e) => {
1841
+ let t = E?.column === e.key;
1842
+ return /* @__PURE__ */ d("th", {
1843
+ className: [
1844
+ "px-md py-sm font-semibold text-small text-text-secondary whitespace-nowrap",
1845
+ e.sortable && "cursor-pointer select-none hover:text-text-primary",
1846
+ e.headerClassName
1847
+ ].filter(Boolean).join(" "),
1848
+ onClick: e.sortable ? () => D(e.key) : void 0,
1849
+ "aria-sort": t ? E.direction === "asc" ? "ascending" : "descending" : e.sortable ? "none" : void 0,
1850
+ children: /* @__PURE__ */ f("span", {
1851
+ className: "inline-flex items-center",
1852
+ children: [e.header, e.sortable && /* @__PURE__ */ d(Nt, {
1853
+ active: t,
1854
+ direction: t ? E.direction : void 0,
1855
+ columnType: V.get(e.key) ?? "text"
1856
+ })]
1857
+ })
1858
+ }, e.key);
1859
+ })]
1767
1860
  })
1768
- }) }), /* @__PURE__ */ d("tbody", { children: x ? /* @__PURE__ */ d("tr", { children: /* @__PURE__ */ d("td", {
1769
- colSpan: e.length,
1861
+ }), /* @__PURE__ */ d("tbody", { children: U ? /* @__PURE__ */ d("tr", { children: /* @__PURE__ */ d("td", {
1862
+ colSpan: H,
1770
1863
  className: "px-md py-xl text-center text-text-secondary",
1771
1864
  children: l ?? "No data available."
1772
- }) }) : y.map((t, n) => /* @__PURE__ */ d("tr", {
1773
- className: [
1774
- "border-b border-border last:border-b-0 transition-colors",
1775
- i && n % 2 == 1 && "bg-bg-tertiary/50",
1776
- "hover:bg-bg-tertiary/70"
1777
- ].filter(Boolean).join(" "),
1778
- children: e.map((e) => /* @__PURE__ */ d("td", {
1779
- className: ["px-md py-sm text-text-primary", e.cellClassName].filter(Boolean).join(" "),
1780
- children: e.cell(t, n)
1781
- }, e.key))
1782
- }, r(t, n))) })]
1783
- })
1865
+ }) }) : L.map((e, t) => {
1866
+ let n = v ? e[v] : void 0;
1867
+ return /* @__PURE__ */ f("tr", {
1868
+ className: [
1869
+ "border-b border-border last:border-b-0 transition-colors",
1870
+ i && t % 2 == 1 && "bg-bg-tertiary/50",
1871
+ "hover:bg-bg-tertiary/70"
1872
+ ].filter(Boolean).join(" "),
1873
+ children: [v && /* @__PURE__ */ d("td", {
1874
+ className: "w-10 px-sm py-sm text-center",
1875
+ children: /* @__PURE__ */ d(X, {
1876
+ checked: N.has(n),
1877
+ onChange: () => F(n),
1878
+ "aria-label": `Select row ${n}`
1879
+ })
1880
+ }), I.map((n) => /* @__PURE__ */ d("td", {
1881
+ className: ["px-md py-sm text-text-primary", n.cellClassName].filter(Boolean).join(" "),
1882
+ children: n.cell(e, t)
1883
+ }, n.key))]
1884
+ }, r(e, t));
1885
+ }) })]
1886
+ })]
1784
1887
  });
1785
- }), Mt = {
1888
+ }), It = {
1786
1889
  success: {
1787
1890
  bg: "bg-success-bg",
1788
1891
  border: "border-success/30",
@@ -1799,7 +1902,7 @@ var jt = t(function({ columns: e, data: t, rowKey: r, striped: i = !1, sort: a,
1799
1902
  bg: "bg-error-bg",
1800
1903
  border: "border-error/30",
1801
1904
  text: "text-error",
1802
- icon: te
1905
+ icon: N
1803
1906
  },
1804
1907
  info: {
1805
1908
  bg: "bg-info-bg",
@@ -1808,8 +1911,8 @@ var jt = t(function({ columns: e, data: t, rowKey: r, striped: i = !1, sort: a,
1808
1911
  icon: C
1809
1912
  }
1810
1913
  };
1811
- function Nt({ variant: e, title: t, children: n, dismissible: r = !1, onDismiss: i, className: a = "" }) {
1812
- let [o, s] = c(!0), { bg: l, border: u, text: p, icon: m } = Mt[e];
1914
+ function Lt({ variant: e, title: t, children: n, dismissible: r = !1, onDismiss: i, className: a = "" }) {
1915
+ let [o, s] = c(!0), { bg: l, border: u, text: p, icon: m } = It[e];
1813
1916
  if (!o) return null;
1814
1917
  let h = () => {
1815
1918
  s(!1), i?.();
@@ -1838,19 +1941,19 @@ function Nt({ variant: e, title: t, children: n, dismissible: r = !1, onDismiss:
1838
1941
  onClick: h,
1839
1942
  className: "shrink-0 p-1 rounded-sm text-text-secondary hover:text-text-primary hover:bg-bg-tertiary transition-colors cursor-pointer",
1840
1943
  "aria-label": "Dismiss alert",
1841
- children: /* @__PURE__ */ d(j, { size: 16 })
1944
+ children: /* @__PURE__ */ d(M, { size: 16 })
1842
1945
  })
1843
1946
  ]
1844
1947
  });
1845
1948
  }
1846
1949
  //#endregion
1847
1950
  //#region src/components/feedback/Dialog.tsx
1848
- var Pt = {
1951
+ var Rt = {
1849
1952
  sm: "max-w-[24rem]",
1850
1953
  md: "max-w-[32rem]",
1851
1954
  lg: "max-w-[42rem]"
1852
1955
  };
1853
- function Ft({ open: e, onClose: t, title: n, size: r = "md", children: a, footer: o, className: c = "" }) {
1956
+ function zt({ open: e, onClose: t, title: n, size: r = "md", children: a, footer: o, className: c = "" }) {
1854
1957
  let l = s(null);
1855
1958
  i(() => {
1856
1959
  if (!e) return;
@@ -1877,7 +1980,7 @@ function Ft({ open: e, onClose: t, title: n, size: r = "md", children: a, footer
1877
1980
  e.shiftKey && document.activeElement === n ? (e.preventDefault(), r.focus()) : !e.shiftKey && document.activeElement === r && (e.preventDefault(), n.focus());
1878
1981
  }
1879
1982
  };
1880
- return e ? ue(/* @__PURE__ */ f("div", {
1983
+ return e ? ae(/* @__PURE__ */ f("div", {
1881
1984
  style: {
1882
1985
  position: "fixed",
1883
1986
  inset: 0,
@@ -1909,7 +2012,7 @@ function Ft({ open: e, onClose: t, title: n, size: r = "md", children: a, footer
1909
2012
  children: /* @__PURE__ */ f("div", {
1910
2013
  ref: l,
1911
2014
  tabIndex: -1,
1912
- className: `relative z-10 flex flex-col w-full ${Pt[r]} rounded-lg border border-border bg-bg-primary shadow-xl outline-none animate-dialog-in ${c}`,
2015
+ 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}`,
1913
2016
  children: [
1914
2017
  n && /* @__PURE__ */ f("div", {
1915
2018
  className: "flex items-center justify-between px-lg py-md border-b border-border",
@@ -1922,7 +2025,7 @@ function Ft({ open: e, onClose: t, title: n, size: r = "md", children: a, footer
1922
2025
  onClick: t,
1923
2026
  className: "shrink-0 p-1 rounded-sm text-text-secondary hover:text-text-primary hover:bg-bg-tertiary transition-colors cursor-pointer",
1924
2027
  "aria-label": "Close dialog",
1925
- children: /* @__PURE__ */ d(j, { size: 18 })
2028
+ children: /* @__PURE__ */ d(M, { size: 18 })
1926
2029
  })]
1927
2030
  }),
1928
2031
  /* @__PURE__ */ d("div", {
@@ -1940,8 +2043,8 @@ function Ft({ open: e, onClose: t, title: n, size: r = "md", children: a, footer
1940
2043
  }
1941
2044
  //#endregion
1942
2045
  //#region src/components/feedback/ConfirmDialog.tsx
1943
- function It({ 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" }) {
1944
- return /* @__PURE__ */ f(Ft, {
2046
+ 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" }) {
2047
+ return /* @__PURE__ */ f(zt, {
1945
2048
  open: e,
1946
2049
  onClose: t,
1947
2050
  title: r,
@@ -1973,22 +2076,22 @@ function It({ open: e, onCancel: t, onConfirm: n, title: r, children: i, confirm
1973
2076
  s ? "bg-error hover:bg-error/80" : "bg-primary hover:bg-primary-hover",
1974
2077
  c && "opacity-80 pointer-events-none"
1975
2078
  ].filter(Boolean).join(" "),
1976
- children: [c && /* @__PURE__ */ d(U, { size: "sm" }), a]
2079
+ children: [c && /* @__PURE__ */ d(Y, { size: "sm" }), a]
1977
2080
  })]
1978
2081
  })]
1979
2082
  });
1980
2083
  }
1981
2084
  //#endregion
1982
2085
  //#region src/components/feedback/toastContext.ts
1983
- var Lt = e(null);
1984
- function Rt() {
1985
- let e = r(Lt);
2086
+ var Vt = e(null);
2087
+ function Ht() {
2088
+ let e = r(Vt);
1986
2089
  if (!e) throw Error("useToast must be used within a <ToastProvider>");
1987
2090
  return e;
1988
2091
  }
1989
2092
  //#endregion
1990
2093
  //#region src/components/feedback/Toast.tsx
1991
- var zt = {
2094
+ var Ut = {
1992
2095
  success: {
1993
2096
  bg: "bg-bg-primary",
1994
2097
  accent: "bg-success",
@@ -2005,7 +2108,7 @@ var zt = {
2005
2108
  bg: "bg-bg-primary",
2006
2109
  accent: "bg-error",
2007
2110
  text: "text-error",
2008
- icon: te
2111
+ icon: N
2009
2112
  },
2010
2113
  info: {
2011
2114
  bg: "bg-bg-primary",
@@ -2014,8 +2117,8 @@ var zt = {
2014
2117
  icon: C
2015
2118
  }
2016
2119
  };
2017
- function Bt({ toast: e, onRemove: t }) {
2018
- let { variant: n, title: r, message: a, duration: o = 5e3 } = e, { bg: l, accent: u, text: p, icon: m } = zt[n], [h, g] = c(100), _ = s(0), v = s(0);
2120
+ function Wt({ toast: e, onRemove: t }) {
2121
+ 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);
2019
2122
  return i(() => {
2020
2123
  if (o <= 0) return;
2021
2124
  _.current = performance.now();
@@ -2059,7 +2162,7 @@ function Bt({ toast: e, onRemove: t }) {
2059
2162
  onClick: () => t(e.id),
2060
2163
  className: "shrink-0 p-1 rounded-sm text-text-secondary hover:text-text-primary hover:bg-bg-tertiary transition-colors cursor-pointer",
2061
2164
  "aria-label": "Dismiss notification",
2062
- children: /* @__PURE__ */ d(j, { size: 14 })
2165
+ children: /* @__PURE__ */ d(M, { size: 14 })
2063
2166
  })
2064
2167
  ]
2065
2168
  }), o > 0 && /* @__PURE__ */ d("div", {
@@ -2071,10 +2174,10 @@ function Bt({ toast: e, onRemove: t }) {
2071
2174
  })]
2072
2175
  });
2073
2176
  }
2074
- var Vt = 0;
2075
- function Ht({ children: e }) {
2177
+ var Gt = 0;
2178
+ function Kt({ children: e }) {
2076
2179
  let [t, r] = c([]), i = n((e) => {
2077
- let t = `toast-${++Vt}`;
2180
+ let t = `toast-${++Gt}`;
2078
2181
  return r((n) => [...n, {
2079
2182
  ...e,
2080
2183
  id: t
@@ -2082,7 +2185,7 @@ function Ht({ children: e }) {
2082
2185
  }, []), a = n((e) => {
2083
2186
  r((t) => t.filter((t) => t.id !== e));
2084
2187
  }, []);
2085
- return /* @__PURE__ */ f(Lt, {
2188
+ return /* @__PURE__ */ f(Vt, {
2086
2189
  value: {
2087
2190
  addToast: i,
2088
2191
  removeToast: a
@@ -2092,7 +2195,7 @@ function Ht({ children: e }) {
2092
2195
  className: "fixed bottom-lg right-lg z-50 flex flex-col-reverse gap-sm pointer-events-none",
2093
2196
  children: t.map((e) => /* @__PURE__ */ d("div", {
2094
2197
  className: "pointer-events-auto",
2095
- children: /* @__PURE__ */ d(Bt, {
2198
+ children: /* @__PURE__ */ d(Wt, {
2096
2199
  toast: e,
2097
2200
  onRemove: a
2098
2201
  })
@@ -2102,12 +2205,12 @@ function Ht({ children: e }) {
2102
2205
  }
2103
2206
  //#endregion
2104
2207
  //#region src/hooks/useAuth.tsx
2105
- var Ut = e(null), Wt = {
2208
+ var qt = e(null), Jt = {
2106
2209
  name: "Alice Martin",
2107
2210
  email: "alice.martin@epfl.ch",
2108
2211
  role: "admin"
2109
2212
  };
2110
- function Gt({ initialUser: e = Wt, children: t }) {
2213
+ function Yt({ initialUser: e = Jt, children: t }) {
2111
2214
  let [n, r] = c(e), i = (e) => r((t) => ({
2112
2215
  ...t,
2113
2216
  role: e
@@ -2115,17 +2218,17 @@ function Gt({ initialUser: e = Wt, children: t }) {
2115
2218
  user: n,
2116
2219
  setRole: i
2117
2220
  }), [n]);
2118
- return /* @__PURE__ */ d(Ut.Provider, {
2221
+ return /* @__PURE__ */ d(qt.Provider, {
2119
2222
  value: a,
2120
2223
  children: t
2121
2224
  });
2122
2225
  }
2123
- function Kt() {
2124
- let e = r(Ut);
2226
+ function Xt() {
2227
+ let e = r(qt);
2125
2228
  if (!e) throw Error("useAuth must be used within an AuthProvider");
2126
2229
  return e;
2127
2230
  }
2128
2231
  //#endregion
2129
- export { Nt as Alert, Gt as AuthProvider, pe as Avatar, H as Badge, _t as BurgerDrawer, be as Button, Et as Card, Me as Checkbox, It as ConfirmDialog, Dt as DescriptionList, Ft as Dialog, We as DropdownDivider, Ge as DropdownItem, Ke as DropdownMenu, Ot as EmptyState, Oe as FileUpload, St as Footer, Ce as IconButton, Ie as Input, et as LanguageSwitcher, Ct as LoginButton, Tt as PageShell, Ee as Pagination, qe as Popover, je as ProgressBar, q as RadioGroup, Be as Select, mt as SideNav, U as Spinner, Ve as Switch, Ye as TabPanel, jt as Table, Xe as Tabs, He as Textarea, st as ThemeToggle, Ht as ToastProvider, Y as Tooltip, lt as TopNav, wt as UserMenu, J as epflSelectClassNames, ze as epflSelectTheme, at as initTheme, Kt as useAuth, Qe as useLanguage, ot as useTheme, Rt as useToast };
2232
+ export { Lt as Alert, Yt as AuthProvider, ce as Avatar, J as Badge, bt as BurgerDrawer, he as Button, kt as Card, X as Checkbox, Bt as ConfirmDialog, At as DescriptionList, zt as Dialog, Ue as DropdownDivider, We as DropdownItem, Ge as DropdownMenu, jt as EmptyState, we as FileUpload, Tt as Footer, ve as IconButton, Me as Input, et as LanguageSwitcher, Et as LoginButton, Ot as PageShell, Se as Pagination, Ke as Popover, De as ProgressBar, Fe as RadioGroup, ze as Select, _t as SideNav, Y 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, Z as epflSelectClassNames, Le as epflSelectTheme, st as initTheme, Xt as useAuth, Qe as useLanguage, ct as useTheme, Ht as useToast };
2130
2233
 
2131
2234
  //# sourceMappingURL=poesis.js.map