diff --git a/dist/_app/immutable/assets/0.B2YDv0ji.css b/dist/_app/immutable/assets/0.B2YDv0ji.css new file mode 100644 index 0000000..74869c0 --- /dev/null +++ b/dist/_app/immutable/assets/0.B2YDv0ji.css @@ -0,0 +1 @@ +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}:root,[data-theme]{background-color:var(--fallback-b1,oklch(var(--b1)/1));color:var(--fallback-bc,oklch(var(--bc)/1))}@supports not (color: oklch(0 0 0)){:root{color-scheme:light;--fallback-p: #491eff;--fallback-pc: #d4dbff;--fallback-s: #ff41c7;--fallback-sc: #fff9fc;--fallback-a: #00cfbd;--fallback-ac: #00100d;--fallback-n: #2b3440;--fallback-nc: #d7dde4;--fallback-b1: #ffffff;--fallback-b2: #e5e6e6;--fallback-b3: #e5e6e6;--fallback-bc: #1f2937;--fallback-in: #00b3f0;--fallback-inc: #000000;--fallback-su: #00ca92;--fallback-suc: #000000;--fallback-wa: #ffc22d;--fallback-wac: #000000;--fallback-er: #ff6f70;--fallback-erc: #000000}@media (prefers-color-scheme: dark){:root{color-scheme:dark;--fallback-p: #7582ff;--fallback-pc: #050617;--fallback-s: #ff71cf;--fallback-sc: #190211;--fallback-a: #00c7b5;--fallback-ac: #000e0c;--fallback-n: #2a323c;--fallback-nc: #a6adbb;--fallback-b1: #1d232a;--fallback-b2: #191e24;--fallback-b3: #15191e;--fallback-bc: #a6adbb;--fallback-in: #00b3f0;--fallback-inc: #000000;--fallback-su: #00ca92;--fallback-suc: #000000;--fallback-wa: #ffc22d;--fallback-wac: #000000;--fallback-er: #ff6f70;--fallback-erc: #000000}}}html{-webkit-tap-highlight-color:transparent}:root{color-scheme:light;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .89824 .06192 275.75;--ac: .15352 .0368 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .4912 .3096 275.75;--s: .6971 .329 342.55;--sc: .9871 .0106 342.55;--a: .7676 .184 183.61;--n: .321785 .02476 255.701624;--nc: .894994 .011585 252.096176;--b1: 1 0 0;--b2: .961151 0 0;--b3: .924169 .00108 197.137559;--bc: .278078 .029596 256.847952}@media (prefers-color-scheme: dark){:root{color-scheme:dark;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .13138 .0392 275.75;--sc: .1496 .052 342.55;--ac: .14902 .0334 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .6569 .196 275.75;--s: .748 .26 342.55;--a: .7451 .167 183.61;--n: .313815 .021108 254.139175;--nc: .746477 .0216 264.435964;--b1: .253267 .015896 252.417568;--b2: .232607 .013807 253.100675;--b3: .211484 .01165 254.087939;--bc: .746477 .0216 264.435964}}[data-theme=light]{color-scheme:light;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .89824 .06192 275.75;--ac: .15352 .0368 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .4912 .3096 275.75;--s: .6971 .329 342.55;--sc: .9871 .0106 342.55;--a: .7676 .184 183.61;--n: .321785 .02476 255.701624;--nc: .894994 .011585 252.096176;--b1: 1 0 0;--b2: .961151 0 0;--b3: .924169 .00108 197.137559;--bc: .278078 .029596 256.847952}[data-theme=dark]{color-scheme:dark;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .13138 .0392 275.75;--sc: .1496 .052 342.55;--ac: .14902 .0334 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .6569 .196 275.75;--s: .748 .26 342.55;--a: .7451 .167 183.61;--n: .313815 .021108 254.139175;--nc: .746477 .0216 264.435964;--b1: .253267 .015896 252.417568;--b2: .232607 .013807 253.100675;--b3: .211484 .01165 254.087939;--bc: .746477 .0216 264.435964}a{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity))}p{font-size:1.25rem;line-height:1.75rem}li{margin-left:2rem;list-style-type:disc;padding-top:.25rem;padding-bottom:.25rem;font-size:1.25rem;line-height:1.75rem}h1{border-bottom-width:2px;--tw-border-opacity: 1;border-bottom-color:rgb(156 163 175 / var(--tw-border-opacity));background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fdba74 var(--tw-gradient-from-position);--tw-gradient-to: rgb(253 186 116 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fed7aa var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;font-size:1.875rem;line-height:2.25rem;font-weight:800;color:transparent}@media (prefers-color-scheme: dark){h1{--tw-border-opacity: 1;border-bottom-color:rgb(255 255 255 / var(--tw-border-opacity))}}h2{margin-bottom:1rem;margin-top:1rem;border-bottom-width:2px;--tw-border-opacity: 1;border-bottom-color:rgb(156 163 175 / var(--tw-border-opacity));background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fdba74 var(--tw-gradient-from-position);--tw-gradient-to: rgb(253 186 116 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fed7aa var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;font-size:1.5rem;line-height:2rem;font-weight:800;color:transparent}@media (prefers-color-scheme: dark){h2{--tw-border-opacity: 1;border-bottom-color:rgb(255 255 255 / var(--tw-border-opacity))}}h3{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fed7aa var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 215 170 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fdba74 var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;text-align:right;font-size:1.5rem;line-height:2rem;font-weight:800;color:transparent;text-decoration-line:underline}h4{background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fed7aa var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 215 170 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fdba74 var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;text-align:right;font-size:1.5rem;line-height:2rem;font-weight:800;color:transparent;text-decoration-line:underline}pre{margin-top:1rem;margin-bottom:1rem;overflow-x:scroll;border-left-width:2px;--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)));padding:.5rem .5rem .5rem 1rem}pre::-webkit-scrollbar{display:none}pre{-ms-overflow-style:none;scrollbar-width:none}ul{margin-top:.5rem;margin-bottom:.5rem}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.alert{display:grid;width:100%;grid-auto-flow:row;align-content:flex-start;align-items:center;justify-items:center;gap:1rem;text-align:center;border-radius:var(--rounded-box, 1rem);border-width:1px;--tw-border-opacity: 1;border-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));padding:1rem;--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--alert-bg: var(--fallback-b2,oklch(var(--b2)/1));--alert-bg-mix: var(--fallback-b1,oklch(var(--b1)/1));background-color:var(--alert-bg)}@media (min-width: 640px){.alert{grid-auto-flow:column;grid-template-columns:auto minmax(auto,1fr);justify-items:start;text-align:start}}@media (hover:hover){.label a:hover{--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)))}.menu li>*:not(ul):not(.menu-title):not(details):active,.menu li>*:not(ul):not(.menu-title):not(details).active,.menu li>details>summary:active{--tw-bg-opacity: 1;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)))}.table tr.hover:hover,.table tr.hover:nth-child(2n):hover{--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}.table-zebra tr.hover:hover,.table-zebra tr.hover:nth-child(2n):hover{--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}}.btn{display:inline-flex;height:3rem;min-height:3rem;flex-shrink:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;justify-content:center;border-radius:var(--rounded-btn, .5rem);border-color:transparent;border-color:oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity));padding-left:1rem;padding-right:1rem;text-align:center;font-size:.875rem;line-height:1em;gap:.5rem;font-weight:600;text-decoration-line:none;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);border-width:var(--border-btn, 1px);animation:button-pop var(--animation-btn, .25s) ease-out;transition-property:color,background-color,border-color,opacity,box-shadow,transform;--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);outline-color:var(--fallback-bc,oklch(var(--bc)/1));background-color:oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity));--tw-bg-opacity: 1;--tw-border-opacity: 1}.btn-disabled,.btn[disabled],.btn:disabled{pointer-events:none}:where(.btn:is(input[type=checkbox])),:where(.btn:is(input[type=radio])){width:auto;-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn:is(input[type=checkbox]):after,.btn:is(input[type=radio]):after{--tw-content: attr(aria-label);content:var(--tw-content)}.checkbox{flex-shrink:0;--chkbg: var(--fallback-bc,oklch(var(--bc)/1));--chkfg: var(--fallback-b1,oklch(var(--b1)/1));height:1.5rem;width:1.5rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--rounded-btn, .5rem);border-width:1px;border-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));--tw-border-opacity: .2}.drawer{position:relative;display:grid;grid-auto-columns:max-content auto;width:100%}.drawer-content{grid-column-start:2;grid-row-start:1;min-width:0px}.drawer-side{pointer-events:none;position:fixed;inset-inline-start:0px;top:0;grid-column-start:1;grid-row-start:1;display:grid;width:100%;grid-template-columns:repeat(1,minmax(0,1fr));grid-template-rows:repeat(1,minmax(0,1fr));align-items:flex-start;justify-items:start;overflow-y:auto;overscroll-behavior:contain;height:100vh;height:100dvh}.drawer-side>.drawer-overlay{position:sticky;top:0;place-self:stretch;cursor:pointer;background-color:transparent;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.2s}.drawer-side>*{grid-column-start:1;grid-row-start:1}.drawer-side>*:not(.drawer-overlay){transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.3s;will-change:transform;transform:translate(-100%)}[dir=rtl] .drawer-side>*:not(.drawer-overlay){transform:translate(100%)}.drawer-toggle{position:fixed;height:0px;width:0px;-webkit-appearance:none;-moz-appearance:none;appearance:none;opacity:0}.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible}.drawer-toggle:checked~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}.drawer-end .drawer-toggle~.drawer-content{grid-column-start:1}.drawer-end .drawer-toggle~.drawer-side{grid-column-start:2;justify-items:end}.drawer-end .drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(100%)}[dir=rtl] .drawer-end .drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(-100%)}.drawer-end .drawer-toggle:checked~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}@media (hover: hover){.btn:hover{--tw-border-opacity: 1;border-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}@supports (color: color-mix(in oklab,black,black)){.btn:hover{background-color:color-mix(in oklab,oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity, 1)) 90%,black);border-color:color-mix(in oklab,oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity, 1)) 90%,black)}}@supports not (color: oklch(0 0 0)){.btn:hover{background-color:var(--btn-color, var(--fallback-b2));border-color:var(--btn-color, var(--fallback-b2))}}.btn.glass:hover{--glass-opacity: 25%;--glass-border-opacity: 15%}.btn-outline.btn-primary:hover{--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}@supports (color: color-mix(in oklab,black,black)){.btn-outline.btn-primary:hover{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}.btn-disabled:hover,.btn[disabled]:hover,.btn:disabled:hover{--tw-border-opacity: 0;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-bg-opacity: .2;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-text-opacity: .2}@supports (color: color-mix(in oklab,black,black)){.btn:is(input[type=checkbox]:checked):hover,.btn:is(input[type=radio]:checked):hover{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(.active):hover,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(.active):hover{cursor:pointer;outline:2px solid transparent;outline-offset:2px}@supports (color: oklch(0 0 0)){:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(.active):hover,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(.active):hover{background-color:var(--fallback-bc,oklch(var(--bc)/.1))}}}.footer{display:grid;width:100%;grid-auto-flow:row;place-items:start;-moz-column-gap:1rem;column-gap:1rem;row-gap:2.5rem;font-size:.875rem;line-height:1.25rem}.footer>*{display:grid;place-items:start;gap:.5rem}@media (min-width: 48rem){.footer{grid-auto-flow:column}.footer-center{grid-auto-flow:row dense}}.label{display:flex;-webkit-user-select:none;-moz-user-select:none;user-select:none;align-items:center;justify-content:space-between;padding:.5rem .25rem}.input{flex-shrink:1;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:3rem;padding-left:1rem;padding-right:1rem;font-size:1rem;line-height:2;line-height:1.5rem;border-radius:var(--rounded-btn, .5rem);border-width:1px;border-color:transparent;--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.link{cursor:pointer;text-decoration-line:underline}.menu{display:flex;flex-direction:column;flex-wrap:wrap;font-size:.875rem;line-height:1.25rem;padding:.5rem}.menu :where(li ul){position:relative;white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem}.menu :where(li:not(.menu-title)>*:not(ul):not(details):not(.menu-title)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){display:grid;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;grid-auto-columns:minmax(auto,max-content) auto max-content;-webkit-user-select:none;-moz-user-select:none;user-select:none}.menu li.disabled{cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;user-select:none;color:var(--fallback-bc,oklch(var(--bc)/.3))}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}:where(.menu li){position:relative;display:flex;flex-shrink:0;flex-direction:column;flex-wrap:wrap;align-items:stretch}:where(.menu li) .badge{justify-self:end}.btm-nav>*:where(.active){border-top-width:2px;--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.btm-nav>* .label{font-size:1rem;line-height:1.5rem}.btn:active:hover,.btn:active:focus{animation:button-pop 0s ease-out;transform:scale(var(--btn-focus-scale, .97))}@supports not (color: oklch(0 0 0)){.btn{background-color:var(--btn-color, var(--fallback-b2));border-color:var(--btn-color, var(--fallback-b2))}.btn-primary{--btn-color: var(--fallback-p)}}@supports (color: color-mix(in oklab,black,black)){.btn-outline.btn-primary.btn-active{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}.btn:focus-visible{outline-style:solid;outline-width:2px;outline-offset:2px}.btn-primary{--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));outline-color:var(--fallback-p,oklch(var(--p)/1))}@supports (color: oklch(0 0 0)){.btn-primary{--btn-color: var(--p)}}.btn.glass{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);outline-color:currentColor}.btn.glass.btn-active{--glass-opacity: 25%;--glass-border-opacity: 15%}.btn-outline.btn-primary{--tw-text-opacity: 1;color:var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity)))}.btn-outline.btn-primary.btn-active{--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}.btn.btn-disabled,.btn[disabled],.btn:disabled{--tw-border-opacity: 0;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-bg-opacity: .2;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-text-opacity: .2}.btn:is(input[type=checkbox]:checked),.btn:is(input[type=radio]:checked){--tw-border-opacity: 1;border-color:var(--fallback-p,oklch(var(--p)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}.btn:is(input[type=checkbox]:checked):focus-visible,.btn:is(input[type=radio]:checked):focus-visible{outline-color:var(--fallback-p,oklch(var(--p)/1))}@keyframes button-pop{0%{transform:scale(var(--btn-focus-scale, .98))}40%{transform:scale(1.02)}to{transform:scale(1)}}.checkbox:focus{box-shadow:none}.checkbox:focus-visible{outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:var(--fallback-bc,oklch(var(--bc)/1))}.checkbox:checked,.checkbox[checked=true],.checkbox[aria-checked=true]{background-repeat:no-repeat;animation:checkmark var(--animation-input, .2s) ease-out;background-color:var(--chkbg);background-image:linear-gradient(-45deg,transparent 65%,var(--chkbg) 65.99%),linear-gradient(45deg,transparent 75%,var(--chkbg) 75.99%),linear-gradient(-45deg,var(--chkbg) 40%,transparent 40.99%),linear-gradient(45deg,var(--chkbg) 30%,var(--chkfg) 30.99%,var(--chkfg) 40%,transparent 40.99%),linear-gradient(-45deg,var(--chkfg) 50%,var(--chkbg) 50.99%)}.checkbox:indeterminate{--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));background-repeat:no-repeat;animation:checkmark var(--animation-input, .2s) ease-out;background-image:linear-gradient(90deg,transparent 80%,var(--chkbg) 80%),linear-gradient(-90deg,transparent 80%,var(--chkbg) 80%),linear-gradient(0deg,var(--chkbg) 43%,var(--chkfg) 43%,var(--chkfg) 57%,var(--chkbg) 57%)}.checkbox:disabled{cursor:not-allowed;border-color:transparent;--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.2}@keyframes checkmark{0%{background-position-y:5px}50%{background-position-y:-2px}to{background-position-y:0}}.drawer-toggle:checked~.drawer-side>.drawer-overlay{background-color:#0006}.drawer-toggle:focus-visible~.drawer-content label.drawer-button{outline-style:solid;outline-width:2px;outline-offset:2px}.input input:focus{outline:2px solid transparent;outline-offset:2px}.input[list]::-webkit-calendar-picker-indicator{line-height:1em}.input:focus,.input:focus-within{box-shadow:none;border-color:var(--fallback-bc,oklch(var(--bc)/.2));outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:var(--fallback-bc,oklch(var(--bc)/.2))}.input-disabled,.input:disabled,.input[disabled]{cursor:not-allowed;--tw-border-opacity: 1;border-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));color:var(--fallback-bc,oklch(var(--bc)/.4))}.input-disabled::-moz-placeholder,.input:disabled::-moz-placeholder,.input[disabled]::-moz-placeholder{color:var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));--tw-placeholder-opacity: .2}.input-disabled::placeholder,.input:disabled::placeholder,.input[disabled]::placeholder{color:var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));--tw-placeholder-opacity: .2}.input::-webkit-date-and-time-value{text-align:inherit}.link:focus{outline:2px solid transparent;outline-offset:2px}.link:focus-visible{outline:2px solid currentColor;outline-offset:2px}:where(.menu li:empty){--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.1;margin:.5rem 1rem;height:1px}.menu :where(li ul):before{position:absolute;bottom:.75rem;inset-inline-start:0px;top:.75rem;width:1px;--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.1;content:""}.menu :where(li:not(.menu-title)>*:not(ul):not(details):not(.menu-title)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--rounded-btn, .5rem);padding:.5rem 1rem;text-align:start;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.2s;text-wrap:balance}:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(summary):not(.active).focus,:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(summary):not(.active):focus,:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):is(summary):not(.active):focus-visible,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(summary):not(.active).focus,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(summary):not(.active):focus,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):is(summary):not(.active):focus-visible{cursor:pointer;background-color:var(--fallback-bc,oklch(var(--bc)/.1));--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));outline:2px solid transparent;outline-offset:2px}.menu li>*:not(ul):not(.menu-title):not(details):active,.menu li>*:not(ul):not(.menu-title):not(details).active,.menu li>details>summary:active{--tw-bg-opacity: 1;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)))}.menu :where(li>details>summary)::-webkit-details-marker{display:none}.menu :where(li>details>summary):after,.menu :where(li>.menu-dropdown-toggle):after{justify-self:end;display:block;margin-top:-.5rem;height:.5rem;width:.5rem;transform:rotate(45deg);transition-property:transform,margin-top;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);content:"";transform-origin:75% 75%;box-shadow:2px 2px;pointer-events:none}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{transform:rotate(225deg);margin-top:0}.mockup-phone .display{overflow:hidden;border-radius:40px;margin-top:-25px}.mockup-browser .mockup-browser-toolbar .input{position:relative;margin-left:auto;margin-right:auto;display:block;height:1.75rem;width:24rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));padding-left:2rem;direction:ltr}.mockup-browser .mockup-browser-toolbar .input:before{content:"";position:absolute;left:.5rem;top:50%;aspect-ratio:1 / 1;height:.75rem;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:2px;border-color:currentColor;opacity:.6}.mockup-browser .mockup-browser-toolbar .input:after{content:"";position:absolute;left:1.25rem;top:50%;height:.5rem;--tw-translate-y: 25%;--tw-rotate: -45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:1px;border-color:currentColor;opacity:.6}@keyframes modal-pop{0%{opacity:0}}@keyframes progress-loading{50%{background-position-x:-115%}}@keyframes radiomark{0%{box-shadow:0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset}50%{box-shadow:0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset}to{box-shadow:0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset}}@keyframes rating-pop{0%{transform:translateY(-.125em)}40%{transform:translateY(-.125em)}to{transform:translateY(0)}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}.table tr.active,.table tr.active:nth-child(2n),.table-zebra tbody tr:nth-child(2n){--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}.table-zebra tr.active,.table-zebra tr.active:nth-child(2n),.table-zebra-zebra tbody tr:nth-child(2n){--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}@keyframes toast-pop{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.btm-nav-xs>*:where(.active){border-top-width:1px}.btm-nav-sm>*:where(.active){border-top-width:2px}.btm-nav-md>*:where(.active){border-top-width:2px}.btm-nav-lg>*:where(.active){border-top-width:4px}.btn-xs{height:1.5rem;min-height:1.5rem;padding-left:.5rem;padding-right:.5rem;font-size:.75rem}.btn-square:where(.btn-xs){height:1.5rem;width:1.5rem;padding:0}.btn-circle:where(.btn-xs){height:1.5rem;width:1.5rem;border-radius:9999px;padding:0}.drawer-open>.drawer-toggle{display:none}.drawer-open>.drawer-toggle~.drawer-side{pointer-events:auto;visibility:visible;position:sticky;display:block;width:auto;overscroll-behavior:auto}.drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}[dir=rtl] .drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}.drawer-open>.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible}.drawer-open>.drawer-toggle~.drawer-side>.drawer-overlay{cursor:default;background-color:transparent}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-1{margin-bottom:.25rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-0{margin-left:0}.ml-4{margin-left:1rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.contents{display:contents}.hidden{display:none}.h-24{height:6rem}.h-48{height:12rem}.h-6{height:1.5rem}.h-96{height:24rem}.h-fit{height:-moz-fit-content;height:fit-content}.min-h-full{min-height:100%}.w-24{width:6rem}.w-40{width:10rem}.w-6{width:1.5rem}.w-72{width:18rem}.w-80{width:20rem}.w-full{width:100%}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-sm{max-width:24rem}.shrink-0{flex-shrink:0}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.content-center{align-content:center}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-between{justify-content:space-between}.gap-4{gap:1rem}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.bg-base-300{--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-neutral-800{--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity))}.bg-red-800{--tw-bg-opacity: 1;background-color:rgb(153 27 27 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-orange-300{--tw-gradient-from: #fdba74 var(--tw-gradient-from-position);--tw-gradient-to: rgb(253 186 116 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-orange-200{--tw-gradient-to: #fed7aa var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.stroke-current{stroke:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.p-4{padding:1rem}.p-5{padding:1.25rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pl-0{padding-left:0}.pl-4{padding-left:1rem}.pl-8{padding-left:2rem}.pr-16{padding-right:4rem}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.text-center{text-align:center}.text-right{text-align:right}.indent-4{text-indent:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.uppercase{text-transform:uppercase}.leading-normal{line-height:1.5}.tracking-tight{letter-spacing:-.025em}.text-base-content{--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-transparent{color:transparent}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@media (min-width: 1024px){.lg\:drawer-open>.drawer-toggle{display:none}.lg\:drawer-open>.drawer-toggle~.drawer-side{pointer-events:auto;visibility:visible;position:sticky;display:block;width:auto;overscroll-behavior:auto}.lg\:drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}[dir=rtl] .lg\:drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}.lg\:drawer-open>.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible}.lg\:drawer-open>.drawer-toggle~.drawer-side>.drawer-overlay{cursor:default;background-color:transparent}}.hover\:bg-base-100:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.hover\:bg-base-200:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.hover\:text-orange-300:hover{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity))}.focus\:text-gray-400:focus{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}@media (min-width: 640px){.sm\:grid{display:grid}}@media (min-width: 768px){.md\:mt-0{margin-top:0}.md\:mt-6{margin-top:1.5rem}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-auto{height:auto}.md\:w-48{width:12rem}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:space-x-10>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2.5rem * var(--tw-space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--tw-space-x-reverse)))}.md\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.md\:rounded-none{border-radius:0}.md\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.md\:px-12{padding-left:3rem;padding-right:3rem}}@media (min-width: 1024px){.lg\:grid{display:grid}.lg\:px-16{padding-left:4rem;padding-right:4rem}.lg\:px-24{padding-left:6rem;padding-right:6rem}}@media (prefers-color-scheme: dark){.dark\:border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}.dark\:bg-base-100{--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.dark\:bg-base-300{--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}.dark\:text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.dark\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:hover\:bg-base-100:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.hover\:dark\:bg-base-200:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}} diff --git a/dist/_app/immutable/assets/0.B2YDv0ji.css.br b/dist/_app/immutable/assets/0.B2YDv0ji.css.br new file mode 100644 index 0000000..f0015f6 Binary files /dev/null and b/dist/_app/immutable/assets/0.B2YDv0ji.css.br differ diff --git a/dist/_app/immutable/assets/0.B2YDv0ji.css.gz b/dist/_app/immutable/assets/0.B2YDv0ji.css.gz new file mode 100644 index 0000000..c3e8dd5 Binary files /dev/null and b/dist/_app/immutable/assets/0.B2YDv0ji.css.gz differ diff --git a/dist/_app/immutable/assets/0.i2cAdolL.css b/dist/_app/immutable/assets/0.i2cAdolL.css deleted file mode 100644 index 00da1d2..0000000 --- a/dist/_app/immutable/assets/0.i2cAdolL.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}:root,[data-theme]{background-color:var(--fallback-b1,oklch(var(--b1)/1));color:var(--fallback-bc,oklch(var(--bc)/1))}@supports not (color: oklch(0 0 0)){:root{color-scheme:light;--fallback-p: #491eff;--fallback-pc: #d4dbff;--fallback-s: #ff41c7;--fallback-sc: #fff9fc;--fallback-a: #00cfbd;--fallback-ac: #00100d;--fallback-n: #2b3440;--fallback-nc: #d7dde4;--fallback-b1: #ffffff;--fallback-b2: #e5e6e6;--fallback-b3: #e5e6e6;--fallback-bc: #1f2937;--fallback-in: #00b3f0;--fallback-inc: #000000;--fallback-su: #00ca92;--fallback-suc: #000000;--fallback-wa: #ffc22d;--fallback-wac: #000000;--fallback-er: #ff6f70;--fallback-erc: #000000}@media (prefers-color-scheme: dark){:root{color-scheme:dark;--fallback-p: #7582ff;--fallback-pc: #050617;--fallback-s: #ff71cf;--fallback-sc: #190211;--fallback-a: #00c7b5;--fallback-ac: #000e0c;--fallback-n: #2a323c;--fallback-nc: #a6adbb;--fallback-b1: #1d232a;--fallback-b2: #191e24;--fallback-b3: #15191e;--fallback-bc: #a6adbb;--fallback-in: #00b3f0;--fallback-inc: #000000;--fallback-su: #00ca92;--fallback-suc: #000000;--fallback-wa: #ffc22d;--fallback-wac: #000000;--fallback-er: #ff6f70;--fallback-erc: #000000}}}html{-webkit-tap-highlight-color:transparent}:root{color-scheme:light;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .89824 .06192 275.75;--ac: .15352 .0368 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .4912 .3096 275.75;--s: .6971 .329 342.55;--sc: .9871 .0106 342.55;--a: .7676 .184 183.61;--n: .321785 .02476 255.701624;--nc: .894994 .011585 252.096176;--b1: 1 0 0;--b2: .961151 0 0;--b3: .924169 .00108 197.137559;--bc: .278078 .029596 256.847952}@media (prefers-color-scheme: dark){:root{color-scheme:dark;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .13138 .0392 275.75;--sc: .1496 .052 342.55;--ac: .14902 .0334 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .6569 .196 275.75;--s: .748 .26 342.55;--a: .7451 .167 183.61;--n: .313815 .021108 254.139175;--nc: .746477 .0216 264.435964;--b1: .253267 .015896 252.417568;--b2: .232607 .013807 253.100675;--b3: .211484 .01165 254.087939;--bc: .746477 .0216 264.435964}}[data-theme=light]{color-scheme:light;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .89824 .06192 275.75;--ac: .15352 .0368 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .4912 .3096 275.75;--s: .6971 .329 342.55;--sc: .9871 .0106 342.55;--a: .7676 .184 183.61;--n: .321785 .02476 255.701624;--nc: .894994 .011585 252.096176;--b1: 1 0 0;--b2: .961151 0 0;--b3: .924169 .00108 197.137559;--bc: .278078 .029596 256.847952}[data-theme=dark]{color-scheme:dark;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .13138 .0392 275.75;--sc: .1496 .052 342.55;--ac: .14902 .0334 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .6569 .196 275.75;--s: .748 .26 342.55;--a: .7451 .167 183.61;--n: .313815 .021108 254.139175;--nc: .746477 .0216 264.435964;--b1: .253267 .015896 252.417568;--b2: .232607 .013807 253.100675;--b3: .211484 .01165 254.087939;--bc: .746477 .0216 264.435964}a{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity))}p{font-size:1.25rem;line-height:1.75rem}li{margin-left:2rem;list-style-type:disc;padding-top:.25rem;padding-bottom:.25rem;font-size:1.25rem;line-height:1.75rem}h1{border-bottom-width:2px;--tw-border-opacity: 1;border-bottom-color:rgb(156 163 175 / var(--tw-border-opacity));background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fdba74 var(--tw-gradient-from-position);--tw-gradient-to: rgb(253 186 116 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fed7aa var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;font-size:1.875rem;line-height:2.25rem;font-weight:800;color:transparent}@media (prefers-color-scheme: dark){h1{--tw-border-opacity: 1;border-bottom-color:rgb(255 255 255 / var(--tw-border-opacity))}}h2{margin-bottom:1rem;margin-top:1rem;border-bottom-width:2px;--tw-border-opacity: 1;border-bottom-color:rgb(156 163 175 / var(--tw-border-opacity));background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fdba74 var(--tw-gradient-from-position);--tw-gradient-to: rgb(253 186 116 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fed7aa var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;font-size:1.5rem;line-height:2rem;font-weight:800;color:transparent}@media (prefers-color-scheme: dark){h2{--tw-border-opacity: 1;border-bottom-color:rgb(255 255 255 / var(--tw-border-opacity))}}h3{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fed7aa var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 215 170 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fdba74 var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;text-align:right;font-size:1.5rem;line-height:2rem;font-weight:800;color:transparent;text-decoration-line:underline}h4{background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fed7aa var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 215 170 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fdba74 var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;text-align:right;font-size:1.5rem;line-height:2rem;font-weight:800;color:transparent;text-decoration-line:underline}pre{margin-top:1rem;margin-bottom:1rem;border-left-width:2px;--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)));padding:.5rem .5rem .5rem 1rem}ul{margin-top:.5rem;margin-bottom:.5rem}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.alert{display:grid;width:100%;grid-auto-flow:row;align-content:flex-start;align-items:center;justify-items:center;gap:1rem;text-align:center;border-radius:var(--rounded-box, 1rem);border-width:1px;--tw-border-opacity: 1;border-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));padding:1rem;--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--alert-bg: var(--fallback-b2,oklch(var(--b2)/1));--alert-bg-mix: var(--fallback-b1,oklch(var(--b1)/1));background-color:var(--alert-bg)}@media (min-width: 640px){.alert{grid-auto-flow:column;grid-template-columns:auto minmax(auto,1fr);justify-items:start;text-align:start}}@media (hover:hover){.label a:hover{--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)))}.menu li>*:not(ul):not(.menu-title):not(details):active,.menu li>*:not(ul):not(.menu-title):not(details).active,.menu li>details>summary:active{--tw-bg-opacity: 1;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)))}.table tr.hover:hover,.table tr.hover:nth-child(2n):hover{--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}.table-zebra tr.hover:hover,.table-zebra tr.hover:nth-child(2n):hover{--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}}.btn{display:inline-flex;height:3rem;min-height:3rem;flex-shrink:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;justify-content:center;border-radius:var(--rounded-btn, .5rem);border-color:transparent;border-color:oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity));padding-left:1rem;padding-right:1rem;text-align:center;font-size:.875rem;line-height:1em;gap:.5rem;font-weight:600;text-decoration-line:none;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);border-width:var(--border-btn, 1px);animation:button-pop var(--animation-btn, .25s) ease-out;transition-property:color,background-color,border-color,opacity,box-shadow,transform;--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);outline-color:var(--fallback-bc,oklch(var(--bc)/1));background-color:oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity));--tw-bg-opacity: 1;--tw-border-opacity: 1}.btn-disabled,.btn[disabled],.btn:disabled{pointer-events:none}:where(.btn:is(input[type=checkbox])),:where(.btn:is(input[type=radio])){width:auto;-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn:is(input[type=checkbox]):after,.btn:is(input[type=radio]):after{--tw-content: attr(aria-label);content:var(--tw-content)}.checkbox{flex-shrink:0;--chkbg: var(--fallback-bc,oklch(var(--bc)/1));--chkfg: var(--fallback-b1,oklch(var(--b1)/1));height:1.5rem;width:1.5rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--rounded-btn, .5rem);border-width:1px;border-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));--tw-border-opacity: .2}.drawer{position:relative;display:grid;grid-auto-columns:max-content auto;width:100%}.drawer-content{grid-column-start:2;grid-row-start:1;min-width:0px}.drawer-side{pointer-events:none;position:fixed;inset-inline-start:0px;top:0;grid-column-start:1;grid-row-start:1;display:grid;width:100%;grid-template-columns:repeat(1,minmax(0,1fr));grid-template-rows:repeat(1,minmax(0,1fr));align-items:flex-start;justify-items:start;overflow-y:auto;overscroll-behavior:contain;height:100vh;height:100dvh}.drawer-side>.drawer-overlay{position:sticky;top:0;place-self:stretch;cursor:pointer;background-color:transparent;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.2s}.drawer-side>*{grid-column-start:1;grid-row-start:1}.drawer-side>*:not(.drawer-overlay){transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.3s;will-change:transform;transform:translate(-100%)}[dir=rtl] .drawer-side>*:not(.drawer-overlay){transform:translate(100%)}.drawer-toggle{position:fixed;height:0px;width:0px;-webkit-appearance:none;-moz-appearance:none;appearance:none;opacity:0}.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible}.drawer-toggle:checked~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}.drawer-end .drawer-toggle~.drawer-content{grid-column-start:1}.drawer-end .drawer-toggle~.drawer-side{grid-column-start:2;justify-items:end}.drawer-end .drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(100%)}[dir=rtl] .drawer-end .drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(-100%)}.drawer-end .drawer-toggle:checked~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}@media (hover: hover){.btn:hover{--tw-border-opacity: 1;border-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}@supports (color: color-mix(in oklab,black,black)){.btn:hover{background-color:color-mix(in oklab,oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity, 1)) 90%,black);border-color:color-mix(in oklab,oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity, 1)) 90%,black)}}@supports not (color: oklch(0 0 0)){.btn:hover{background-color:var(--btn-color, var(--fallback-b2));border-color:var(--btn-color, var(--fallback-b2))}}.btn.glass:hover{--glass-opacity: 25%;--glass-border-opacity: 15%}.btn-outline.btn-primary:hover{--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}@supports (color: color-mix(in oklab,black,black)){.btn-outline.btn-primary:hover{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}.btn-disabled:hover,.btn[disabled]:hover,.btn:disabled:hover{--tw-border-opacity: 0;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-bg-opacity: .2;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-text-opacity: .2}@supports (color: color-mix(in oklab,black,black)){.btn:is(input[type=checkbox]:checked):hover,.btn:is(input[type=radio]:checked):hover{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(.active):hover,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(.active):hover{cursor:pointer;outline:2px solid transparent;outline-offset:2px}@supports (color: oklch(0 0 0)){:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(.active):hover,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(.active):hover{background-color:var(--fallback-bc,oklch(var(--bc)/.1))}}}.footer{display:grid;width:100%;grid-auto-flow:row;place-items:start;-moz-column-gap:1rem;column-gap:1rem;row-gap:2.5rem;font-size:.875rem;line-height:1.25rem}.footer>*{display:grid;place-items:start;gap:.5rem}@media (min-width: 48rem){.footer{grid-auto-flow:column}.footer-center{grid-auto-flow:row dense}}.label{display:flex;-webkit-user-select:none;-moz-user-select:none;user-select:none;align-items:center;justify-content:space-between;padding:.5rem .25rem}.input{flex-shrink:1;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:3rem;padding-left:1rem;padding-right:1rem;font-size:1rem;line-height:2;line-height:1.5rem;border-radius:var(--rounded-btn, .5rem);border-width:1px;border-color:transparent;--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.link{cursor:pointer;text-decoration-line:underline}.menu{display:flex;flex-direction:column;flex-wrap:wrap;font-size:.875rem;line-height:1.25rem;padding:.5rem}.menu :where(li ul){position:relative;white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem}.menu :where(li:not(.menu-title)>*:not(ul):not(details):not(.menu-title)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){display:grid;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;grid-auto-columns:minmax(auto,max-content) auto max-content;-webkit-user-select:none;-moz-user-select:none;user-select:none}.menu li.disabled{cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;user-select:none;color:var(--fallback-bc,oklch(var(--bc)/.3))}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}:where(.menu li){position:relative;display:flex;flex-shrink:0;flex-direction:column;flex-wrap:wrap;align-items:stretch}:where(.menu li) .badge{justify-self:end}.btm-nav>*:where(.active){border-top-width:2px;--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.btm-nav>* .label{font-size:1rem;line-height:1.5rem}.btn:active:hover,.btn:active:focus{animation:button-pop 0s ease-out;transform:scale(var(--btn-focus-scale, .97))}@supports not (color: oklch(0 0 0)){.btn{background-color:var(--btn-color, var(--fallback-b2));border-color:var(--btn-color, var(--fallback-b2))}.btn-primary{--btn-color: var(--fallback-p)}}@supports (color: color-mix(in oklab,black,black)){.btn-outline.btn-primary.btn-active{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}.btn:focus-visible{outline-style:solid;outline-width:2px;outline-offset:2px}.btn-primary{--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));outline-color:var(--fallback-p,oklch(var(--p)/1))}@supports (color: oklch(0 0 0)){.btn-primary{--btn-color: var(--p)}}.btn.glass{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);outline-color:currentColor}.btn.glass.btn-active{--glass-opacity: 25%;--glass-border-opacity: 15%}.btn-outline.btn-primary{--tw-text-opacity: 1;color:var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity)))}.btn-outline.btn-primary.btn-active{--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}.btn.btn-disabled,.btn[disabled],.btn:disabled{--tw-border-opacity: 0;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-bg-opacity: .2;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-text-opacity: .2}.btn:is(input[type=checkbox]:checked),.btn:is(input[type=radio]:checked){--tw-border-opacity: 1;border-color:var(--fallback-p,oklch(var(--p)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}.btn:is(input[type=checkbox]:checked):focus-visible,.btn:is(input[type=radio]:checked):focus-visible{outline-color:var(--fallback-p,oklch(var(--p)/1))}@keyframes button-pop{0%{transform:scale(var(--btn-focus-scale, .98))}40%{transform:scale(1.02)}to{transform:scale(1)}}.checkbox:focus{box-shadow:none}.checkbox:focus-visible{outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:var(--fallback-bc,oklch(var(--bc)/1))}.checkbox:checked,.checkbox[checked=true],.checkbox[aria-checked=true]{background-repeat:no-repeat;animation:checkmark var(--animation-input, .2s) ease-out;background-color:var(--chkbg);background-image:linear-gradient(-45deg,transparent 65%,var(--chkbg) 65.99%),linear-gradient(45deg,transparent 75%,var(--chkbg) 75.99%),linear-gradient(-45deg,var(--chkbg) 40%,transparent 40.99%),linear-gradient(45deg,var(--chkbg) 30%,var(--chkfg) 30.99%,var(--chkfg) 40%,transparent 40.99%),linear-gradient(-45deg,var(--chkfg) 50%,var(--chkbg) 50.99%)}.checkbox:indeterminate{--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));background-repeat:no-repeat;animation:checkmark var(--animation-input, .2s) ease-out;background-image:linear-gradient(90deg,transparent 80%,var(--chkbg) 80%),linear-gradient(-90deg,transparent 80%,var(--chkbg) 80%),linear-gradient(0deg,var(--chkbg) 43%,var(--chkfg) 43%,var(--chkfg) 57%,var(--chkbg) 57%)}.checkbox:disabled{cursor:not-allowed;border-color:transparent;--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.2}@keyframes checkmark{0%{background-position-y:5px}50%{background-position-y:-2px}to{background-position-y:0}}.drawer-toggle:checked~.drawer-side>.drawer-overlay{background-color:#0006}.drawer-toggle:focus-visible~.drawer-content label.drawer-button{outline-style:solid;outline-width:2px;outline-offset:2px}.input input:focus{outline:2px solid transparent;outline-offset:2px}.input[list]::-webkit-calendar-picker-indicator{line-height:1em}.input:focus,.input:focus-within{box-shadow:none;border-color:var(--fallback-bc,oklch(var(--bc)/.2));outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:var(--fallback-bc,oklch(var(--bc)/.2))}.input-disabled,.input:disabled,.input[disabled]{cursor:not-allowed;--tw-border-opacity: 1;border-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));color:var(--fallback-bc,oklch(var(--bc)/.4))}.input-disabled::-moz-placeholder,.input:disabled::-moz-placeholder,.input[disabled]::-moz-placeholder{color:var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));--tw-placeholder-opacity: .2}.input-disabled::placeholder,.input:disabled::placeholder,.input[disabled]::placeholder{color:var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));--tw-placeholder-opacity: .2}.input::-webkit-date-and-time-value{text-align:inherit}.link:focus{outline:2px solid transparent;outline-offset:2px}.link:focus-visible{outline:2px solid currentColor;outline-offset:2px}:where(.menu li:empty){--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.1;margin:.5rem 1rem;height:1px}.menu :where(li ul):before{position:absolute;bottom:.75rem;inset-inline-start:0px;top:.75rem;width:1px;--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.1;content:""}.menu :where(li:not(.menu-title)>*:not(ul):not(details):not(.menu-title)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--rounded-btn, .5rem);padding:.5rem 1rem;text-align:start;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.2s;text-wrap:balance}:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(summary):not(.active).focus,:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(summary):not(.active):focus,:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):is(summary):not(.active):focus-visible,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(summary):not(.active).focus,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(summary):not(.active):focus,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):is(summary):not(.active):focus-visible{cursor:pointer;background-color:var(--fallback-bc,oklch(var(--bc)/.1));--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));outline:2px solid transparent;outline-offset:2px}.menu li>*:not(ul):not(.menu-title):not(details):active,.menu li>*:not(ul):not(.menu-title):not(details).active,.menu li>details>summary:active{--tw-bg-opacity: 1;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)))}.menu :where(li>details>summary)::-webkit-details-marker{display:none}.menu :where(li>details>summary):after,.menu :where(li>.menu-dropdown-toggle):after{justify-self:end;display:block;margin-top:-.5rem;height:.5rem;width:.5rem;transform:rotate(45deg);transition-property:transform,margin-top;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);content:"";transform-origin:75% 75%;box-shadow:2px 2px;pointer-events:none}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{transform:rotate(225deg);margin-top:0}.mockup-phone .display{overflow:hidden;border-radius:40px;margin-top:-25px}.mockup-browser .mockup-browser-toolbar .input{position:relative;margin-left:auto;margin-right:auto;display:block;height:1.75rem;width:24rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));padding-left:2rem;direction:ltr}.mockup-browser .mockup-browser-toolbar .input:before{content:"";position:absolute;left:.5rem;top:50%;aspect-ratio:1 / 1;height:.75rem;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:2px;border-color:currentColor;opacity:.6}.mockup-browser .mockup-browser-toolbar .input:after{content:"";position:absolute;left:1.25rem;top:50%;height:.5rem;--tw-translate-y: 25%;--tw-rotate: -45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:1px;border-color:currentColor;opacity:.6}@keyframes modal-pop{0%{opacity:0}}@keyframes progress-loading{50%{background-position-x:-115%}}@keyframes radiomark{0%{box-shadow:0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset}50%{box-shadow:0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset}to{box-shadow:0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset}}@keyframes rating-pop{0%{transform:translateY(-.125em)}40%{transform:translateY(-.125em)}to{transform:translateY(0)}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}.table tr.active,.table tr.active:nth-child(2n),.table-zebra tbody tr:nth-child(2n){--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}.table-zebra tr.active,.table-zebra tr.active:nth-child(2n),.table-zebra-zebra tbody tr:nth-child(2n){--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}@keyframes toast-pop{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.btm-nav-xs>*:where(.active){border-top-width:1px}.btm-nav-sm>*:where(.active){border-top-width:2px}.btm-nav-md>*:where(.active){border-top-width:2px}.btm-nav-lg>*:where(.active){border-top-width:4px}.btn-xs{height:1.5rem;min-height:1.5rem;padding-left:.5rem;padding-right:.5rem;font-size:.75rem}.btn-square:where(.btn-xs){height:1.5rem;width:1.5rem;padding:0}.btn-circle:where(.btn-xs){height:1.5rem;width:1.5rem;border-radius:9999px;padding:0}.drawer-open>.drawer-toggle{display:none}.drawer-open>.drawer-toggle~.drawer-side{pointer-events:auto;visibility:visible;position:sticky;display:block;width:auto;overscroll-behavior:auto}.drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}[dir=rtl] .drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}.drawer-open>.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible}.drawer-open>.drawer-toggle~.drawer-side>.drawer-overlay{cursor:default;background-color:transparent}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-1{margin-bottom:.25rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-0{margin-left:0}.ml-4{margin-left:1rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.contents{display:contents}.hidden{display:none}.h-24{height:6rem}.h-48{height:12rem}.h-6{height:1.5rem}.h-96{height:24rem}.h-fit{height:-moz-fit-content;height:fit-content}.min-h-full{min-height:100%}.w-24{width:6rem}.w-40{width:10rem}.w-6{width:1.5rem}.w-72{width:18rem}.w-80{width:20rem}.w-full{width:100%}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-sm{max-width:24rem}.shrink-0{flex-shrink:0}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.content-center{align-content:center}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-between{justify-content:space-between}.gap-4{gap:1rem}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.bg-base-300{--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-neutral-800{--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity))}.bg-red-800{--tw-bg-opacity: 1;background-color:rgb(153 27 27 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-orange-300{--tw-gradient-from: #fdba74 var(--tw-gradient-from-position);--tw-gradient-to: rgb(253 186 116 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-orange-200{--tw-gradient-to: #fed7aa var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.stroke-current{stroke:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.p-4{padding:1rem}.p-5{padding:1.25rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pl-0{padding-left:0}.pl-4{padding-left:1rem}.pl-8{padding-left:2rem}.pr-16{padding-right:4rem}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.text-center{text-align:center}.text-right{text-align:right}.indent-4{text-indent:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.uppercase{text-transform:uppercase}.leading-normal{line-height:1.5}.tracking-tight{letter-spacing:-.025em}.text-base-content{--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-transparent{color:transparent}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@media (min-width: 1024px){.lg\:drawer-open>.drawer-toggle{display:none}.lg\:drawer-open>.drawer-toggle~.drawer-side{pointer-events:auto;visibility:visible;position:sticky;display:block;width:auto;overscroll-behavior:auto}.lg\:drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}[dir=rtl] .lg\:drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}.lg\:drawer-open>.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible}.lg\:drawer-open>.drawer-toggle~.drawer-side>.drawer-overlay{cursor:default;background-color:transparent}}.hover\:bg-base-100:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.hover\:bg-base-200:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.hover\:text-orange-300:hover{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity))}.focus\:text-gray-400:focus{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}@media (min-width: 640px){.sm\:grid{display:grid}}@media (min-width: 768px){.md\:mt-0{margin-top:0}.md\:mt-6{margin-top:1.5rem}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-auto{height:auto}.md\:w-48{width:12rem}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:space-x-10>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2.5rem * var(--tw-space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--tw-space-x-reverse)))}.md\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.md\:rounded-none{border-radius:0}.md\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}}@media (min-width: 1024px){.lg\:grid{display:grid}.lg\:px-16{padding-left:4rem;padding-right:4rem}}@media (prefers-color-scheme: dark){.dark\:border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}.dark\:bg-base-100{--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.dark\:bg-base-300{--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}.dark\:text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.dark\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:hover\:bg-base-100:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.hover\:dark\:bg-base-200:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}} diff --git a/dist/_app/immutable/assets/0.i2cAdolL.css.br b/dist/_app/immutable/assets/0.i2cAdolL.css.br deleted file mode 100644 index 32ab0b6..0000000 Binary files a/dist/_app/immutable/assets/0.i2cAdolL.css.br and /dev/null differ diff --git a/dist/_app/immutable/assets/0.i2cAdolL.css.gz b/dist/_app/immutable/assets/0.i2cAdolL.css.gz deleted file mode 100644 index 22980b1..0000000 Binary files a/dist/_app/immutable/assets/0.i2cAdolL.css.gz and /dev/null differ diff --git a/dist/_app/immutable/assets/_layout.B2YDv0ji.css b/dist/_app/immutable/assets/_layout.B2YDv0ji.css new file mode 100644 index 0000000..74869c0 --- /dev/null +++ b/dist/_app/immutable/assets/_layout.B2YDv0ji.css @@ -0,0 +1 @@ +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}:root,[data-theme]{background-color:var(--fallback-b1,oklch(var(--b1)/1));color:var(--fallback-bc,oklch(var(--bc)/1))}@supports not (color: oklch(0 0 0)){:root{color-scheme:light;--fallback-p: #491eff;--fallback-pc: #d4dbff;--fallback-s: #ff41c7;--fallback-sc: #fff9fc;--fallback-a: #00cfbd;--fallback-ac: #00100d;--fallback-n: #2b3440;--fallback-nc: #d7dde4;--fallback-b1: #ffffff;--fallback-b2: #e5e6e6;--fallback-b3: #e5e6e6;--fallback-bc: #1f2937;--fallback-in: #00b3f0;--fallback-inc: #000000;--fallback-su: #00ca92;--fallback-suc: #000000;--fallback-wa: #ffc22d;--fallback-wac: #000000;--fallback-er: #ff6f70;--fallback-erc: #000000}@media (prefers-color-scheme: dark){:root{color-scheme:dark;--fallback-p: #7582ff;--fallback-pc: #050617;--fallback-s: #ff71cf;--fallback-sc: #190211;--fallback-a: #00c7b5;--fallback-ac: #000e0c;--fallback-n: #2a323c;--fallback-nc: #a6adbb;--fallback-b1: #1d232a;--fallback-b2: #191e24;--fallback-b3: #15191e;--fallback-bc: #a6adbb;--fallback-in: #00b3f0;--fallback-inc: #000000;--fallback-su: #00ca92;--fallback-suc: #000000;--fallback-wa: #ffc22d;--fallback-wac: #000000;--fallback-er: #ff6f70;--fallback-erc: #000000}}}html{-webkit-tap-highlight-color:transparent}:root{color-scheme:light;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .89824 .06192 275.75;--ac: .15352 .0368 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .4912 .3096 275.75;--s: .6971 .329 342.55;--sc: .9871 .0106 342.55;--a: .7676 .184 183.61;--n: .321785 .02476 255.701624;--nc: .894994 .011585 252.096176;--b1: 1 0 0;--b2: .961151 0 0;--b3: .924169 .00108 197.137559;--bc: .278078 .029596 256.847952}@media (prefers-color-scheme: dark){:root{color-scheme:dark;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .13138 .0392 275.75;--sc: .1496 .052 342.55;--ac: .14902 .0334 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .6569 .196 275.75;--s: .748 .26 342.55;--a: .7451 .167 183.61;--n: .313815 .021108 254.139175;--nc: .746477 .0216 264.435964;--b1: .253267 .015896 252.417568;--b2: .232607 .013807 253.100675;--b3: .211484 .01165 254.087939;--bc: .746477 .0216 264.435964}}[data-theme=light]{color-scheme:light;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .89824 .06192 275.75;--ac: .15352 .0368 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .4912 .3096 275.75;--s: .6971 .329 342.55;--sc: .9871 .0106 342.55;--a: .7676 .184 183.61;--n: .321785 .02476 255.701624;--nc: .894994 .011585 252.096176;--b1: 1 0 0;--b2: .961151 0 0;--b3: .924169 .00108 197.137559;--bc: .278078 .029596 256.847952}[data-theme=dark]{color-scheme:dark;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .13138 .0392 275.75;--sc: .1496 .052 342.55;--ac: .14902 .0334 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .6569 .196 275.75;--s: .748 .26 342.55;--a: .7451 .167 183.61;--n: .313815 .021108 254.139175;--nc: .746477 .0216 264.435964;--b1: .253267 .015896 252.417568;--b2: .232607 .013807 253.100675;--b3: .211484 .01165 254.087939;--bc: .746477 .0216 264.435964}a{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity))}p{font-size:1.25rem;line-height:1.75rem}li{margin-left:2rem;list-style-type:disc;padding-top:.25rem;padding-bottom:.25rem;font-size:1.25rem;line-height:1.75rem}h1{border-bottom-width:2px;--tw-border-opacity: 1;border-bottom-color:rgb(156 163 175 / var(--tw-border-opacity));background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fdba74 var(--tw-gradient-from-position);--tw-gradient-to: rgb(253 186 116 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fed7aa var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;font-size:1.875rem;line-height:2.25rem;font-weight:800;color:transparent}@media (prefers-color-scheme: dark){h1{--tw-border-opacity: 1;border-bottom-color:rgb(255 255 255 / var(--tw-border-opacity))}}h2{margin-bottom:1rem;margin-top:1rem;border-bottom-width:2px;--tw-border-opacity: 1;border-bottom-color:rgb(156 163 175 / var(--tw-border-opacity));background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fdba74 var(--tw-gradient-from-position);--tw-gradient-to: rgb(253 186 116 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fed7aa var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;font-size:1.5rem;line-height:2rem;font-weight:800;color:transparent}@media (prefers-color-scheme: dark){h2{--tw-border-opacity: 1;border-bottom-color:rgb(255 255 255 / var(--tw-border-opacity))}}h3{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fed7aa var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 215 170 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fdba74 var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;text-align:right;font-size:1.5rem;line-height:2rem;font-weight:800;color:transparent;text-decoration-line:underline}h4{background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fed7aa var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 215 170 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fdba74 var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;text-align:right;font-size:1.5rem;line-height:2rem;font-weight:800;color:transparent;text-decoration-line:underline}pre{margin-top:1rem;margin-bottom:1rem;overflow-x:scroll;border-left-width:2px;--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)));padding:.5rem .5rem .5rem 1rem}pre::-webkit-scrollbar{display:none}pre{-ms-overflow-style:none;scrollbar-width:none}ul{margin-top:.5rem;margin-bottom:.5rem}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.alert{display:grid;width:100%;grid-auto-flow:row;align-content:flex-start;align-items:center;justify-items:center;gap:1rem;text-align:center;border-radius:var(--rounded-box, 1rem);border-width:1px;--tw-border-opacity: 1;border-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));padding:1rem;--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--alert-bg: var(--fallback-b2,oklch(var(--b2)/1));--alert-bg-mix: var(--fallback-b1,oklch(var(--b1)/1));background-color:var(--alert-bg)}@media (min-width: 640px){.alert{grid-auto-flow:column;grid-template-columns:auto minmax(auto,1fr);justify-items:start;text-align:start}}@media (hover:hover){.label a:hover{--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)))}.menu li>*:not(ul):not(.menu-title):not(details):active,.menu li>*:not(ul):not(.menu-title):not(details).active,.menu li>details>summary:active{--tw-bg-opacity: 1;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)))}.table tr.hover:hover,.table tr.hover:nth-child(2n):hover{--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}.table-zebra tr.hover:hover,.table-zebra tr.hover:nth-child(2n):hover{--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}}.btn{display:inline-flex;height:3rem;min-height:3rem;flex-shrink:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;justify-content:center;border-radius:var(--rounded-btn, .5rem);border-color:transparent;border-color:oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity));padding-left:1rem;padding-right:1rem;text-align:center;font-size:.875rem;line-height:1em;gap:.5rem;font-weight:600;text-decoration-line:none;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);border-width:var(--border-btn, 1px);animation:button-pop var(--animation-btn, .25s) ease-out;transition-property:color,background-color,border-color,opacity,box-shadow,transform;--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);outline-color:var(--fallback-bc,oklch(var(--bc)/1));background-color:oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity));--tw-bg-opacity: 1;--tw-border-opacity: 1}.btn-disabled,.btn[disabled],.btn:disabled{pointer-events:none}:where(.btn:is(input[type=checkbox])),:where(.btn:is(input[type=radio])){width:auto;-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn:is(input[type=checkbox]):after,.btn:is(input[type=radio]):after{--tw-content: attr(aria-label);content:var(--tw-content)}.checkbox{flex-shrink:0;--chkbg: var(--fallback-bc,oklch(var(--bc)/1));--chkfg: var(--fallback-b1,oklch(var(--b1)/1));height:1.5rem;width:1.5rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--rounded-btn, .5rem);border-width:1px;border-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));--tw-border-opacity: .2}.drawer{position:relative;display:grid;grid-auto-columns:max-content auto;width:100%}.drawer-content{grid-column-start:2;grid-row-start:1;min-width:0px}.drawer-side{pointer-events:none;position:fixed;inset-inline-start:0px;top:0;grid-column-start:1;grid-row-start:1;display:grid;width:100%;grid-template-columns:repeat(1,minmax(0,1fr));grid-template-rows:repeat(1,minmax(0,1fr));align-items:flex-start;justify-items:start;overflow-y:auto;overscroll-behavior:contain;height:100vh;height:100dvh}.drawer-side>.drawer-overlay{position:sticky;top:0;place-self:stretch;cursor:pointer;background-color:transparent;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.2s}.drawer-side>*{grid-column-start:1;grid-row-start:1}.drawer-side>*:not(.drawer-overlay){transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.3s;will-change:transform;transform:translate(-100%)}[dir=rtl] .drawer-side>*:not(.drawer-overlay){transform:translate(100%)}.drawer-toggle{position:fixed;height:0px;width:0px;-webkit-appearance:none;-moz-appearance:none;appearance:none;opacity:0}.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible}.drawer-toggle:checked~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}.drawer-end .drawer-toggle~.drawer-content{grid-column-start:1}.drawer-end .drawer-toggle~.drawer-side{grid-column-start:2;justify-items:end}.drawer-end .drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(100%)}[dir=rtl] .drawer-end .drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(-100%)}.drawer-end .drawer-toggle:checked~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}@media (hover: hover){.btn:hover{--tw-border-opacity: 1;border-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}@supports (color: color-mix(in oklab,black,black)){.btn:hover{background-color:color-mix(in oklab,oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity, 1)) 90%,black);border-color:color-mix(in oklab,oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity, 1)) 90%,black)}}@supports not (color: oklch(0 0 0)){.btn:hover{background-color:var(--btn-color, var(--fallback-b2));border-color:var(--btn-color, var(--fallback-b2))}}.btn.glass:hover{--glass-opacity: 25%;--glass-border-opacity: 15%}.btn-outline.btn-primary:hover{--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}@supports (color: color-mix(in oklab,black,black)){.btn-outline.btn-primary:hover{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}.btn-disabled:hover,.btn[disabled]:hover,.btn:disabled:hover{--tw-border-opacity: 0;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-bg-opacity: .2;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-text-opacity: .2}@supports (color: color-mix(in oklab,black,black)){.btn:is(input[type=checkbox]:checked):hover,.btn:is(input[type=radio]:checked):hover{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(.active):hover,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(.active):hover{cursor:pointer;outline:2px solid transparent;outline-offset:2px}@supports (color: oklch(0 0 0)){:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(.active):hover,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(.active):hover{background-color:var(--fallback-bc,oklch(var(--bc)/.1))}}}.footer{display:grid;width:100%;grid-auto-flow:row;place-items:start;-moz-column-gap:1rem;column-gap:1rem;row-gap:2.5rem;font-size:.875rem;line-height:1.25rem}.footer>*{display:grid;place-items:start;gap:.5rem}@media (min-width: 48rem){.footer{grid-auto-flow:column}.footer-center{grid-auto-flow:row dense}}.label{display:flex;-webkit-user-select:none;-moz-user-select:none;user-select:none;align-items:center;justify-content:space-between;padding:.5rem .25rem}.input{flex-shrink:1;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:3rem;padding-left:1rem;padding-right:1rem;font-size:1rem;line-height:2;line-height:1.5rem;border-radius:var(--rounded-btn, .5rem);border-width:1px;border-color:transparent;--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.link{cursor:pointer;text-decoration-line:underline}.menu{display:flex;flex-direction:column;flex-wrap:wrap;font-size:.875rem;line-height:1.25rem;padding:.5rem}.menu :where(li ul){position:relative;white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem}.menu :where(li:not(.menu-title)>*:not(ul):not(details):not(.menu-title)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){display:grid;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;grid-auto-columns:minmax(auto,max-content) auto max-content;-webkit-user-select:none;-moz-user-select:none;user-select:none}.menu li.disabled{cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;user-select:none;color:var(--fallback-bc,oklch(var(--bc)/.3))}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}:where(.menu li){position:relative;display:flex;flex-shrink:0;flex-direction:column;flex-wrap:wrap;align-items:stretch}:where(.menu li) .badge{justify-self:end}.btm-nav>*:where(.active){border-top-width:2px;--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.btm-nav>* .label{font-size:1rem;line-height:1.5rem}.btn:active:hover,.btn:active:focus{animation:button-pop 0s ease-out;transform:scale(var(--btn-focus-scale, .97))}@supports not (color: oklch(0 0 0)){.btn{background-color:var(--btn-color, var(--fallback-b2));border-color:var(--btn-color, var(--fallback-b2))}.btn-primary{--btn-color: var(--fallback-p)}}@supports (color: color-mix(in oklab,black,black)){.btn-outline.btn-primary.btn-active{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}.btn:focus-visible{outline-style:solid;outline-width:2px;outline-offset:2px}.btn-primary{--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));outline-color:var(--fallback-p,oklch(var(--p)/1))}@supports (color: oklch(0 0 0)){.btn-primary{--btn-color: var(--p)}}.btn.glass{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);outline-color:currentColor}.btn.glass.btn-active{--glass-opacity: 25%;--glass-border-opacity: 15%}.btn-outline.btn-primary{--tw-text-opacity: 1;color:var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity)))}.btn-outline.btn-primary.btn-active{--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}.btn.btn-disabled,.btn[disabled],.btn:disabled{--tw-border-opacity: 0;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-bg-opacity: .2;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-text-opacity: .2}.btn:is(input[type=checkbox]:checked),.btn:is(input[type=radio]:checked){--tw-border-opacity: 1;border-color:var(--fallback-p,oklch(var(--p)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}.btn:is(input[type=checkbox]:checked):focus-visible,.btn:is(input[type=radio]:checked):focus-visible{outline-color:var(--fallback-p,oklch(var(--p)/1))}@keyframes button-pop{0%{transform:scale(var(--btn-focus-scale, .98))}40%{transform:scale(1.02)}to{transform:scale(1)}}.checkbox:focus{box-shadow:none}.checkbox:focus-visible{outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:var(--fallback-bc,oklch(var(--bc)/1))}.checkbox:checked,.checkbox[checked=true],.checkbox[aria-checked=true]{background-repeat:no-repeat;animation:checkmark var(--animation-input, .2s) ease-out;background-color:var(--chkbg);background-image:linear-gradient(-45deg,transparent 65%,var(--chkbg) 65.99%),linear-gradient(45deg,transparent 75%,var(--chkbg) 75.99%),linear-gradient(-45deg,var(--chkbg) 40%,transparent 40.99%),linear-gradient(45deg,var(--chkbg) 30%,var(--chkfg) 30.99%,var(--chkfg) 40%,transparent 40.99%),linear-gradient(-45deg,var(--chkfg) 50%,var(--chkbg) 50.99%)}.checkbox:indeterminate{--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));background-repeat:no-repeat;animation:checkmark var(--animation-input, .2s) ease-out;background-image:linear-gradient(90deg,transparent 80%,var(--chkbg) 80%),linear-gradient(-90deg,transparent 80%,var(--chkbg) 80%),linear-gradient(0deg,var(--chkbg) 43%,var(--chkfg) 43%,var(--chkfg) 57%,var(--chkbg) 57%)}.checkbox:disabled{cursor:not-allowed;border-color:transparent;--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.2}@keyframes checkmark{0%{background-position-y:5px}50%{background-position-y:-2px}to{background-position-y:0}}.drawer-toggle:checked~.drawer-side>.drawer-overlay{background-color:#0006}.drawer-toggle:focus-visible~.drawer-content label.drawer-button{outline-style:solid;outline-width:2px;outline-offset:2px}.input input:focus{outline:2px solid transparent;outline-offset:2px}.input[list]::-webkit-calendar-picker-indicator{line-height:1em}.input:focus,.input:focus-within{box-shadow:none;border-color:var(--fallback-bc,oklch(var(--bc)/.2));outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:var(--fallback-bc,oklch(var(--bc)/.2))}.input-disabled,.input:disabled,.input[disabled]{cursor:not-allowed;--tw-border-opacity: 1;border-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));color:var(--fallback-bc,oklch(var(--bc)/.4))}.input-disabled::-moz-placeholder,.input:disabled::-moz-placeholder,.input[disabled]::-moz-placeholder{color:var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));--tw-placeholder-opacity: .2}.input-disabled::placeholder,.input:disabled::placeholder,.input[disabled]::placeholder{color:var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));--tw-placeholder-opacity: .2}.input::-webkit-date-and-time-value{text-align:inherit}.link:focus{outline:2px solid transparent;outline-offset:2px}.link:focus-visible{outline:2px solid currentColor;outline-offset:2px}:where(.menu li:empty){--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.1;margin:.5rem 1rem;height:1px}.menu :where(li ul):before{position:absolute;bottom:.75rem;inset-inline-start:0px;top:.75rem;width:1px;--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.1;content:""}.menu :where(li:not(.menu-title)>*:not(ul):not(details):not(.menu-title)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--rounded-btn, .5rem);padding:.5rem 1rem;text-align:start;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.2s;text-wrap:balance}:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(summary):not(.active).focus,:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(summary):not(.active):focus,:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):is(summary):not(.active):focus-visible,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(summary):not(.active).focus,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(summary):not(.active):focus,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):is(summary):not(.active):focus-visible{cursor:pointer;background-color:var(--fallback-bc,oklch(var(--bc)/.1));--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));outline:2px solid transparent;outline-offset:2px}.menu li>*:not(ul):not(.menu-title):not(details):active,.menu li>*:not(ul):not(.menu-title):not(details).active,.menu li>details>summary:active{--tw-bg-opacity: 1;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)))}.menu :where(li>details>summary)::-webkit-details-marker{display:none}.menu :where(li>details>summary):after,.menu :where(li>.menu-dropdown-toggle):after{justify-self:end;display:block;margin-top:-.5rem;height:.5rem;width:.5rem;transform:rotate(45deg);transition-property:transform,margin-top;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);content:"";transform-origin:75% 75%;box-shadow:2px 2px;pointer-events:none}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{transform:rotate(225deg);margin-top:0}.mockup-phone .display{overflow:hidden;border-radius:40px;margin-top:-25px}.mockup-browser .mockup-browser-toolbar .input{position:relative;margin-left:auto;margin-right:auto;display:block;height:1.75rem;width:24rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));padding-left:2rem;direction:ltr}.mockup-browser .mockup-browser-toolbar .input:before{content:"";position:absolute;left:.5rem;top:50%;aspect-ratio:1 / 1;height:.75rem;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:2px;border-color:currentColor;opacity:.6}.mockup-browser .mockup-browser-toolbar .input:after{content:"";position:absolute;left:1.25rem;top:50%;height:.5rem;--tw-translate-y: 25%;--tw-rotate: -45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:1px;border-color:currentColor;opacity:.6}@keyframes modal-pop{0%{opacity:0}}@keyframes progress-loading{50%{background-position-x:-115%}}@keyframes radiomark{0%{box-shadow:0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset}50%{box-shadow:0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset}to{box-shadow:0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset}}@keyframes rating-pop{0%{transform:translateY(-.125em)}40%{transform:translateY(-.125em)}to{transform:translateY(0)}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}.table tr.active,.table tr.active:nth-child(2n),.table-zebra tbody tr:nth-child(2n){--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}.table-zebra tr.active,.table-zebra tr.active:nth-child(2n),.table-zebra-zebra tbody tr:nth-child(2n){--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}@keyframes toast-pop{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.btm-nav-xs>*:where(.active){border-top-width:1px}.btm-nav-sm>*:where(.active){border-top-width:2px}.btm-nav-md>*:where(.active){border-top-width:2px}.btm-nav-lg>*:where(.active){border-top-width:4px}.btn-xs{height:1.5rem;min-height:1.5rem;padding-left:.5rem;padding-right:.5rem;font-size:.75rem}.btn-square:where(.btn-xs){height:1.5rem;width:1.5rem;padding:0}.btn-circle:where(.btn-xs){height:1.5rem;width:1.5rem;border-radius:9999px;padding:0}.drawer-open>.drawer-toggle{display:none}.drawer-open>.drawer-toggle~.drawer-side{pointer-events:auto;visibility:visible;position:sticky;display:block;width:auto;overscroll-behavior:auto}.drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}[dir=rtl] .drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}.drawer-open>.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible}.drawer-open>.drawer-toggle~.drawer-side>.drawer-overlay{cursor:default;background-color:transparent}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-1{margin-bottom:.25rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-0{margin-left:0}.ml-4{margin-left:1rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.contents{display:contents}.hidden{display:none}.h-24{height:6rem}.h-48{height:12rem}.h-6{height:1.5rem}.h-96{height:24rem}.h-fit{height:-moz-fit-content;height:fit-content}.min-h-full{min-height:100%}.w-24{width:6rem}.w-40{width:10rem}.w-6{width:1.5rem}.w-72{width:18rem}.w-80{width:20rem}.w-full{width:100%}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-sm{max-width:24rem}.shrink-0{flex-shrink:0}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.content-center{align-content:center}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-between{justify-content:space-between}.gap-4{gap:1rem}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.bg-base-300{--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-neutral-800{--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity))}.bg-red-800{--tw-bg-opacity: 1;background-color:rgb(153 27 27 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-orange-300{--tw-gradient-from: #fdba74 var(--tw-gradient-from-position);--tw-gradient-to: rgb(253 186 116 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-orange-200{--tw-gradient-to: #fed7aa var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.stroke-current{stroke:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.p-4{padding:1rem}.p-5{padding:1.25rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pl-0{padding-left:0}.pl-4{padding-left:1rem}.pl-8{padding-left:2rem}.pr-16{padding-right:4rem}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.text-center{text-align:center}.text-right{text-align:right}.indent-4{text-indent:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.uppercase{text-transform:uppercase}.leading-normal{line-height:1.5}.tracking-tight{letter-spacing:-.025em}.text-base-content{--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-transparent{color:transparent}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@media (min-width: 1024px){.lg\:drawer-open>.drawer-toggle{display:none}.lg\:drawer-open>.drawer-toggle~.drawer-side{pointer-events:auto;visibility:visible;position:sticky;display:block;width:auto;overscroll-behavior:auto}.lg\:drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}[dir=rtl] .lg\:drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}.lg\:drawer-open>.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible}.lg\:drawer-open>.drawer-toggle~.drawer-side>.drawer-overlay{cursor:default;background-color:transparent}}.hover\:bg-base-100:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.hover\:bg-base-200:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.hover\:text-orange-300:hover{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity))}.focus\:text-gray-400:focus{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}@media (min-width: 640px){.sm\:grid{display:grid}}@media (min-width: 768px){.md\:mt-0{margin-top:0}.md\:mt-6{margin-top:1.5rem}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-auto{height:auto}.md\:w-48{width:12rem}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:space-x-10>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2.5rem * var(--tw-space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--tw-space-x-reverse)))}.md\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.md\:rounded-none{border-radius:0}.md\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.md\:px-12{padding-left:3rem;padding-right:3rem}}@media (min-width: 1024px){.lg\:grid{display:grid}.lg\:px-16{padding-left:4rem;padding-right:4rem}.lg\:px-24{padding-left:6rem;padding-right:6rem}}@media (prefers-color-scheme: dark){.dark\:border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}.dark\:bg-base-100{--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.dark\:bg-base-300{--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}.dark\:text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.dark\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:hover\:bg-base-100:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.hover\:dark\:bg-base-200:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}} diff --git a/dist/_app/immutable/assets/_layout.B2YDv0ji.css.br b/dist/_app/immutable/assets/_layout.B2YDv0ji.css.br new file mode 100644 index 0000000..f0015f6 Binary files /dev/null and b/dist/_app/immutable/assets/_layout.B2YDv0ji.css.br differ diff --git a/dist/_app/immutable/assets/_layout.B2YDv0ji.css.gz b/dist/_app/immutable/assets/_layout.B2YDv0ji.css.gz new file mode 100644 index 0000000..c3e8dd5 Binary files /dev/null and b/dist/_app/immutable/assets/_layout.B2YDv0ji.css.gz differ diff --git a/dist/_app/immutable/assets/_layout.i2cAdolL.css b/dist/_app/immutable/assets/_layout.i2cAdolL.css deleted file mode 100644 index 00da1d2..0000000 --- a/dist/_app/immutable/assets/_layout.i2cAdolL.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}:root,[data-theme]{background-color:var(--fallback-b1,oklch(var(--b1)/1));color:var(--fallback-bc,oklch(var(--bc)/1))}@supports not (color: oklch(0 0 0)){:root{color-scheme:light;--fallback-p: #491eff;--fallback-pc: #d4dbff;--fallback-s: #ff41c7;--fallback-sc: #fff9fc;--fallback-a: #00cfbd;--fallback-ac: #00100d;--fallback-n: #2b3440;--fallback-nc: #d7dde4;--fallback-b1: #ffffff;--fallback-b2: #e5e6e6;--fallback-b3: #e5e6e6;--fallback-bc: #1f2937;--fallback-in: #00b3f0;--fallback-inc: #000000;--fallback-su: #00ca92;--fallback-suc: #000000;--fallback-wa: #ffc22d;--fallback-wac: #000000;--fallback-er: #ff6f70;--fallback-erc: #000000}@media (prefers-color-scheme: dark){:root{color-scheme:dark;--fallback-p: #7582ff;--fallback-pc: #050617;--fallback-s: #ff71cf;--fallback-sc: #190211;--fallback-a: #00c7b5;--fallback-ac: #000e0c;--fallback-n: #2a323c;--fallback-nc: #a6adbb;--fallback-b1: #1d232a;--fallback-b2: #191e24;--fallback-b3: #15191e;--fallback-bc: #a6adbb;--fallback-in: #00b3f0;--fallback-inc: #000000;--fallback-su: #00ca92;--fallback-suc: #000000;--fallback-wa: #ffc22d;--fallback-wac: #000000;--fallback-er: #ff6f70;--fallback-erc: #000000}}}html{-webkit-tap-highlight-color:transparent}:root{color-scheme:light;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .89824 .06192 275.75;--ac: .15352 .0368 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .4912 .3096 275.75;--s: .6971 .329 342.55;--sc: .9871 .0106 342.55;--a: .7676 .184 183.61;--n: .321785 .02476 255.701624;--nc: .894994 .011585 252.096176;--b1: 1 0 0;--b2: .961151 0 0;--b3: .924169 .00108 197.137559;--bc: .278078 .029596 256.847952}@media (prefers-color-scheme: dark){:root{color-scheme:dark;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .13138 .0392 275.75;--sc: .1496 .052 342.55;--ac: .14902 .0334 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .6569 .196 275.75;--s: .748 .26 342.55;--a: .7451 .167 183.61;--n: .313815 .021108 254.139175;--nc: .746477 .0216 264.435964;--b1: .253267 .015896 252.417568;--b2: .232607 .013807 253.100675;--b3: .211484 .01165 254.087939;--bc: .746477 .0216 264.435964}}[data-theme=light]{color-scheme:light;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .89824 .06192 275.75;--ac: .15352 .0368 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .4912 .3096 275.75;--s: .6971 .329 342.55;--sc: .9871 .0106 342.55;--a: .7676 .184 183.61;--n: .321785 .02476 255.701624;--nc: .894994 .011585 252.096176;--b1: 1 0 0;--b2: .961151 0 0;--b3: .924169 .00108 197.137559;--bc: .278078 .029596 256.847952}[data-theme=dark]{color-scheme:dark;--in: .7206 .191 231.6;--su: 64.8% .15 160;--wa: .8471 .199 83.87;--er: .7176 .221 22.18;--pc: .13138 .0392 275.75;--sc: .1496 .052 342.55;--ac: .14902 .0334 183.61;--inc: 0 0 0;--suc: 0 0 0;--wac: 0 0 0;--erc: 0 0 0;--rounded-box: 1rem;--rounded-btn: .5rem;--rounded-badge: 1.9rem;--animation-btn: .25s;--animation-input: .2s;--btn-focus-scale: .95;--border-btn: 1px;--tab-border: 1px;--tab-radius: .5rem;--p: .6569 .196 275.75;--s: .748 .26 342.55;--a: .7451 .167 183.61;--n: .313815 .021108 254.139175;--nc: .746477 .0216 264.435964;--b1: .253267 .015896 252.417568;--b2: .232607 .013807 253.100675;--b3: .211484 .01165 254.087939;--bc: .746477 .0216 264.435964}a{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity))}p{font-size:1.25rem;line-height:1.75rem}li{margin-left:2rem;list-style-type:disc;padding-top:.25rem;padding-bottom:.25rem;font-size:1.25rem;line-height:1.75rem}h1{border-bottom-width:2px;--tw-border-opacity: 1;border-bottom-color:rgb(156 163 175 / var(--tw-border-opacity));background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fdba74 var(--tw-gradient-from-position);--tw-gradient-to: rgb(253 186 116 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fed7aa var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;font-size:1.875rem;line-height:2.25rem;font-weight:800;color:transparent}@media (prefers-color-scheme: dark){h1{--tw-border-opacity: 1;border-bottom-color:rgb(255 255 255 / var(--tw-border-opacity))}}h2{margin-bottom:1rem;margin-top:1rem;border-bottom-width:2px;--tw-border-opacity: 1;border-bottom-color:rgb(156 163 175 / var(--tw-border-opacity));background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fdba74 var(--tw-gradient-from-position);--tw-gradient-to: rgb(253 186 116 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fed7aa var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;font-size:1.5rem;line-height:2rem;font-weight:800;color:transparent}@media (prefers-color-scheme: dark){h2{--tw-border-opacity: 1;border-bottom-color:rgb(255 255 255 / var(--tw-border-opacity))}}h3{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity));background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fed7aa var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 215 170 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fdba74 var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;text-align:right;font-size:1.5rem;line-height:2rem;font-weight:800;color:transparent;text-decoration-line:underline}h4{background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #fed7aa var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 215 170 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #fdba74 var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;text-align:right;font-size:1.5rem;line-height:2rem;font-weight:800;color:transparent;text-decoration-line:underline}pre{margin-top:1rem;margin-bottom:1rem;border-left-width:2px;--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)));padding:.5rem .5rem .5rem 1rem}ul{margin-top:.5rem;margin-bottom:.5rem}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.alert{display:grid;width:100%;grid-auto-flow:row;align-content:flex-start;align-items:center;justify-items:center;gap:1rem;text-align:center;border-radius:var(--rounded-box, 1rem);border-width:1px;--tw-border-opacity: 1;border-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));padding:1rem;--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--alert-bg: var(--fallback-b2,oklch(var(--b2)/1));--alert-bg-mix: var(--fallback-b1,oklch(var(--b1)/1));background-color:var(--alert-bg)}@media (min-width: 640px){.alert{grid-auto-flow:column;grid-template-columns:auto minmax(auto,1fr);justify-items:start;text-align:start}}@media (hover:hover){.label a:hover{--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)))}.menu li>*:not(ul):not(.menu-title):not(details):active,.menu li>*:not(ul):not(.menu-title):not(details).active,.menu li>details>summary:active{--tw-bg-opacity: 1;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)))}.table tr.hover:hover,.table tr.hover:nth-child(2n):hover{--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}.table-zebra tr.hover:hover,.table-zebra tr.hover:nth-child(2n):hover{--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}}.btn{display:inline-flex;height:3rem;min-height:3rem;flex-shrink:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;justify-content:center;border-radius:var(--rounded-btn, .5rem);border-color:transparent;border-color:oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity));padding-left:1rem;padding-right:1rem;text-align:center;font-size:.875rem;line-height:1em;gap:.5rem;font-weight:600;text-decoration-line:none;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);border-width:var(--border-btn, 1px);animation:button-pop var(--animation-btn, .25s) ease-out;transition-property:color,background-color,border-color,opacity,box-shadow,transform;--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);outline-color:var(--fallback-bc,oklch(var(--bc)/1));background-color:oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity));--tw-bg-opacity: 1;--tw-border-opacity: 1}.btn-disabled,.btn[disabled],.btn:disabled{pointer-events:none}:where(.btn:is(input[type=checkbox])),:where(.btn:is(input[type=radio])){width:auto;-webkit-appearance:none;-moz-appearance:none;appearance:none}.btn:is(input[type=checkbox]):after,.btn:is(input[type=radio]):after{--tw-content: attr(aria-label);content:var(--tw-content)}.checkbox{flex-shrink:0;--chkbg: var(--fallback-bc,oklch(var(--bc)/1));--chkfg: var(--fallback-b1,oklch(var(--b1)/1));height:1.5rem;width:1.5rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--rounded-btn, .5rem);border-width:1px;border-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));--tw-border-opacity: .2}.drawer{position:relative;display:grid;grid-auto-columns:max-content auto;width:100%}.drawer-content{grid-column-start:2;grid-row-start:1;min-width:0px}.drawer-side{pointer-events:none;position:fixed;inset-inline-start:0px;top:0;grid-column-start:1;grid-row-start:1;display:grid;width:100%;grid-template-columns:repeat(1,minmax(0,1fr));grid-template-rows:repeat(1,minmax(0,1fr));align-items:flex-start;justify-items:start;overflow-y:auto;overscroll-behavior:contain;height:100vh;height:100dvh}.drawer-side>.drawer-overlay{position:sticky;top:0;place-self:stretch;cursor:pointer;background-color:transparent;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.2s}.drawer-side>*{grid-column-start:1;grid-row-start:1}.drawer-side>*:not(.drawer-overlay){transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.3s;will-change:transform;transform:translate(-100%)}[dir=rtl] .drawer-side>*:not(.drawer-overlay){transform:translate(100%)}.drawer-toggle{position:fixed;height:0px;width:0px;-webkit-appearance:none;-moz-appearance:none;appearance:none;opacity:0}.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible}.drawer-toggle:checked~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}.drawer-end .drawer-toggle~.drawer-content{grid-column-start:1}.drawer-end .drawer-toggle~.drawer-side{grid-column-start:2;justify-items:end}.drawer-end .drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(100%)}[dir=rtl] .drawer-end .drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(-100%)}.drawer-end .drawer-toggle:checked~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}@media (hover: hover){.btn:hover{--tw-border-opacity: 1;border-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}@supports (color: color-mix(in oklab,black,black)){.btn:hover{background-color:color-mix(in oklab,oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity, 1)) 90%,black);border-color:color-mix(in oklab,oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity, 1)) 90%,black)}}@supports not (color: oklch(0 0 0)){.btn:hover{background-color:var(--btn-color, var(--fallback-b2));border-color:var(--btn-color, var(--fallback-b2))}}.btn.glass:hover{--glass-opacity: 25%;--glass-border-opacity: 15%}.btn-outline.btn-primary:hover{--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}@supports (color: color-mix(in oklab,black,black)){.btn-outline.btn-primary:hover{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}.btn-disabled:hover,.btn[disabled]:hover,.btn:disabled:hover{--tw-border-opacity: 0;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-bg-opacity: .2;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-text-opacity: .2}@supports (color: color-mix(in oklab,black,black)){.btn:is(input[type=checkbox]:checked):hover,.btn:is(input[type=radio]:checked):hover{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(.active):hover,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(.active):hover{cursor:pointer;outline:2px solid transparent;outline-offset:2px}@supports (color: oklch(0 0 0)){:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(.active):hover,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(.active):hover{background-color:var(--fallback-bc,oklch(var(--bc)/.1))}}}.footer{display:grid;width:100%;grid-auto-flow:row;place-items:start;-moz-column-gap:1rem;column-gap:1rem;row-gap:2.5rem;font-size:.875rem;line-height:1.25rem}.footer>*{display:grid;place-items:start;gap:.5rem}@media (min-width: 48rem){.footer{grid-auto-flow:column}.footer-center{grid-auto-flow:row dense}}.label{display:flex;-webkit-user-select:none;-moz-user-select:none;user-select:none;align-items:center;justify-content:space-between;padding:.5rem .25rem}.input{flex-shrink:1;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:3rem;padding-left:1rem;padding-right:1rem;font-size:1rem;line-height:2;line-height:1.5rem;border-radius:var(--rounded-btn, .5rem);border-width:1px;border-color:transparent;--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.link{cursor:pointer;text-decoration-line:underline}.menu{display:flex;flex-direction:column;flex-wrap:wrap;font-size:.875rem;line-height:1.25rem;padding:.5rem}.menu :where(li ul){position:relative;white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem}.menu :where(li:not(.menu-title)>*:not(ul):not(details):not(.menu-title)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){display:grid;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;grid-auto-columns:minmax(auto,max-content) auto max-content;-webkit-user-select:none;-moz-user-select:none;user-select:none}.menu li.disabled{cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;user-select:none;color:var(--fallback-bc,oklch(var(--bc)/.3))}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}:where(.menu li){position:relative;display:flex;flex-shrink:0;flex-direction:column;flex-wrap:wrap;align-items:stretch}:where(.menu li) .badge{justify-self:end}.btm-nav>*:where(.active){border-top-width:2px;--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.btm-nav>* .label{font-size:1rem;line-height:1.5rem}.btn:active:hover,.btn:active:focus{animation:button-pop 0s ease-out;transform:scale(var(--btn-focus-scale, .97))}@supports not (color: oklch(0 0 0)){.btn{background-color:var(--btn-color, var(--fallback-b2));border-color:var(--btn-color, var(--fallback-b2))}.btn-primary{--btn-color: var(--fallback-p)}}@supports (color: color-mix(in oklab,black,black)){.btn-outline.btn-primary.btn-active{background-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black);border-color:color-mix(in oklab,var(--fallback-p,oklch(var(--p)/1)) 90%,black)}}.btn:focus-visible{outline-style:solid;outline-width:2px;outline-offset:2px}.btn-primary{--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));outline-color:var(--fallback-p,oklch(var(--p)/1))}@supports (color: oklch(0 0 0)){.btn-primary{--btn-color: var(--p)}}.btn.glass{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);outline-color:currentColor}.btn.glass.btn-active{--glass-opacity: 25%;--glass-border-opacity: 15%}.btn-outline.btn-primary{--tw-text-opacity: 1;color:var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity)))}.btn-outline.btn-primary.btn-active{--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}.btn.btn-disabled,.btn[disabled],.btn:disabled{--tw-border-opacity: 0;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-bg-opacity: .2;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));--tw-text-opacity: .2}.btn:is(input[type=checkbox]:checked),.btn:is(input[type=radio]:checked){--tw-border-opacity: 1;border-color:var(--fallback-p,oklch(var(--p)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)))}.btn:is(input[type=checkbox]:checked):focus-visible,.btn:is(input[type=radio]:checked):focus-visible{outline-color:var(--fallback-p,oklch(var(--p)/1))}@keyframes button-pop{0%{transform:scale(var(--btn-focus-scale, .98))}40%{transform:scale(1.02)}to{transform:scale(1)}}.checkbox:focus{box-shadow:none}.checkbox:focus-visible{outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:var(--fallback-bc,oklch(var(--bc)/1))}.checkbox:checked,.checkbox[checked=true],.checkbox[aria-checked=true]{background-repeat:no-repeat;animation:checkmark var(--animation-input, .2s) ease-out;background-color:var(--chkbg);background-image:linear-gradient(-45deg,transparent 65%,var(--chkbg) 65.99%),linear-gradient(45deg,transparent 75%,var(--chkbg) 75.99%),linear-gradient(-45deg,var(--chkbg) 40%,transparent 40.99%),linear-gradient(45deg,var(--chkbg) 30%,var(--chkfg) 30.99%,var(--chkfg) 40%,transparent 40.99%),linear-gradient(-45deg,var(--chkfg) 50%,var(--chkbg) 50.99%)}.checkbox:indeterminate{--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));background-repeat:no-repeat;animation:checkmark var(--animation-input, .2s) ease-out;background-image:linear-gradient(90deg,transparent 80%,var(--chkbg) 80%),linear-gradient(-90deg,transparent 80%,var(--chkbg) 80%),linear-gradient(0deg,var(--chkbg) 43%,var(--chkfg) 43%,var(--chkfg) 57%,var(--chkbg) 57%)}.checkbox:disabled{cursor:not-allowed;border-color:transparent;--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.2}@keyframes checkmark{0%{background-position-y:5px}50%{background-position-y:-2px}to{background-position-y:0}}.drawer-toggle:checked~.drawer-side>.drawer-overlay{background-color:#0006}.drawer-toggle:focus-visible~.drawer-content label.drawer-button{outline-style:solid;outline-width:2px;outline-offset:2px}.input input:focus{outline:2px solid transparent;outline-offset:2px}.input[list]::-webkit-calendar-picker-indicator{line-height:1em}.input:focus,.input:focus-within{box-shadow:none;border-color:var(--fallback-bc,oklch(var(--bc)/.2));outline-style:solid;outline-width:2px;outline-offset:2px;outline-color:var(--fallback-bc,oklch(var(--bc)/.2))}.input-disabled,.input:disabled,.input[disabled]{cursor:not-allowed;--tw-border-opacity: 1;border-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));color:var(--fallback-bc,oklch(var(--bc)/.4))}.input-disabled::-moz-placeholder,.input:disabled::-moz-placeholder,.input[disabled]::-moz-placeholder{color:var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));--tw-placeholder-opacity: .2}.input-disabled::placeholder,.input:disabled::placeholder,.input[disabled]::placeholder{color:var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));--tw-placeholder-opacity: .2}.input::-webkit-date-and-time-value{text-align:inherit}.link:focus{outline:2px solid transparent;outline-offset:2px}.link:focus-visible{outline:2px solid currentColor;outline-offset:2px}:where(.menu li:empty){--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.1;margin:.5rem 1rem;height:1px}.menu :where(li ul):before{position:absolute;bottom:.75rem;inset-inline-start:0px;top:.75rem;width:1px;--tw-bg-opacity: 1;background-color:var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));opacity:.1;content:""}.menu :where(li:not(.menu-title)>*:not(ul):not(details):not(.menu-title)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--rounded-btn, .5rem);padding:.5rem 1rem;text-align:start;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.2s;text-wrap:balance}:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(summary):not(.active).focus,:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):not(summary):not(.active):focus,:where(.menu li:not(.menu-title):not(.disabled)>*:not(ul):not(details):not(.menu-title)):is(summary):not(.active):focus-visible,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(summary):not(.active).focus,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):not(summary):not(.active):focus,:where(.menu li:not(.menu-title):not(.disabled)>details>summary:not(.menu-title)):is(summary):not(.active):focus-visible{cursor:pointer;background-color:var(--fallback-bc,oklch(var(--bc)/.1));--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));outline:2px solid transparent;outline-offset:2px}.menu li>*:not(ul):not(.menu-title):not(details):active,.menu li>*:not(ul):not(.menu-title):not(details).active,.menu li>details>summary:active{--tw-bg-opacity: 1;background-color:var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));--tw-text-opacity: 1;color:var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)))}.menu :where(li>details>summary)::-webkit-details-marker{display:none}.menu :where(li>details>summary):after,.menu :where(li>.menu-dropdown-toggle):after{justify-self:end;display:block;margin-top:-.5rem;height:.5rem;width:.5rem;transform:rotate(45deg);transition-property:transform,margin-top;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);content:"";transform-origin:75% 75%;box-shadow:2px 2px;pointer-events:none}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{transform:rotate(225deg);margin-top:0}.mockup-phone .display{overflow:hidden;border-radius:40px;margin-top:-25px}.mockup-browser .mockup-browser-toolbar .input{position:relative;margin-left:auto;margin-right:auto;display:block;height:1.75rem;width:24rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));padding-left:2rem;direction:ltr}.mockup-browser .mockup-browser-toolbar .input:before{content:"";position:absolute;left:.5rem;top:50%;aspect-ratio:1 / 1;height:.75rem;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:2px;border-color:currentColor;opacity:.6}.mockup-browser .mockup-browser-toolbar .input:after{content:"";position:absolute;left:1.25rem;top:50%;height:.5rem;--tw-translate-y: 25%;--tw-rotate: -45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:9999px;border-width:1px;border-color:currentColor;opacity:.6}@keyframes modal-pop{0%{opacity:0}}@keyframes progress-loading{50%{background-position-x:-115%}}@keyframes radiomark{0%{box-shadow:0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset}50%{box-shadow:0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset}to{box-shadow:0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset,0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset}}@keyframes rating-pop{0%{transform:translateY(-.125em)}40%{transform:translateY(-.125em)}to{transform:translateY(0)}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}.table tr.active,.table tr.active:nth-child(2n),.table-zebra tbody tr:nth-child(2n){--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}.table-zebra tr.active,.table-zebra tr.active:nth-child(2n),.table-zebra-zebra tbody tr:nth-child(2n){--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}@keyframes toast-pop{0%{transform:scale(.9);opacity:0}to{transform:scale(1);opacity:1}}.btm-nav-xs>*:where(.active){border-top-width:1px}.btm-nav-sm>*:where(.active){border-top-width:2px}.btm-nav-md>*:where(.active){border-top-width:2px}.btm-nav-lg>*:where(.active){border-top-width:4px}.btn-xs{height:1.5rem;min-height:1.5rem;padding-left:.5rem;padding-right:.5rem;font-size:.75rem}.btn-square:where(.btn-xs){height:1.5rem;width:1.5rem;padding:0}.btn-circle:where(.btn-xs){height:1.5rem;width:1.5rem;border-radius:9999px;padding:0}.drawer-open>.drawer-toggle{display:none}.drawer-open>.drawer-toggle~.drawer-side{pointer-events:auto;visibility:visible;position:sticky;display:block;width:auto;overscroll-behavior:auto}.drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}[dir=rtl] .drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}.drawer-open>.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible}.drawer-open>.drawer-toggle~.drawer-side>.drawer-overlay{cursor:default;background-color:transparent}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-1{margin-bottom:.25rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-0{margin-left:0}.ml-4{margin-left:1rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.contents{display:contents}.hidden{display:none}.h-24{height:6rem}.h-48{height:12rem}.h-6{height:1.5rem}.h-96{height:24rem}.h-fit{height:-moz-fit-content;height:fit-content}.min-h-full{min-height:100%}.w-24{width:6rem}.w-40{width:10rem}.w-6{width:1.5rem}.w-72{width:18rem}.w-80{width:20rem}.w-full{width:100%}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-sm{max-width:24rem}.shrink-0{flex-shrink:0}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.content-center{align-content:center}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-between{justify-content:space-between}.gap-4{gap:1rem}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.bg-base-300{--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-neutral-800{--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity))}.bg-red-800{--tw-bg-opacity: 1;background-color:rgb(153 27 27 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-orange-300{--tw-gradient-from: #fdba74 var(--tw-gradient-from-position);--tw-gradient-to: rgb(253 186 116 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-orange-200{--tw-gradient-to: #fed7aa var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.stroke-current{stroke:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.p-4{padding:1rem}.p-5{padding:1.25rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pl-0{padding-left:0}.pl-4{padding-left:1rem}.pl-8{padding-left:2rem}.pr-16{padding-right:4rem}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.text-center{text-align:center}.text-right{text-align:right}.indent-4{text-indent:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.uppercase{text-transform:uppercase}.leading-normal{line-height:1.5}.tracking-tight{letter-spacing:-.025em}.text-base-content{--tw-text-opacity: 1;color:var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)))}.text-gray-100{--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-transparent{color:transparent}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@media (min-width: 1024px){.lg\:drawer-open>.drawer-toggle{display:none}.lg\:drawer-open>.drawer-toggle~.drawer-side{pointer-events:auto;visibility:visible;position:sticky;display:block;width:auto;overscroll-behavior:auto}.lg\:drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}[dir=rtl] .lg\:drawer-open>.drawer-toggle~.drawer-side>*:not(.drawer-overlay){transform:translate(0)}.lg\:drawer-open>.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible}.lg\:drawer-open>.drawer-toggle~.drawer-side>.drawer-overlay{cursor:default;background-color:transparent}}.hover\:bg-base-100:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.hover\:bg-base-200:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}.hover\:text-gray-400:hover{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.hover\:text-orange-300:hover{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity))}.focus\:text-gray-400:focus{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}@media (min-width: 640px){.sm\:grid{display:grid}}@media (min-width: 768px){.md\:mt-0{margin-top:0}.md\:mt-6{margin-top:1.5rem}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-auto{height:auto}.md\:w-48{width:12rem}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-rows-3{grid-template-rows:repeat(3,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:space-x-10>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2.5rem * var(--tw-space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--tw-space-x-reverse)))}.md\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.md\:rounded-none{border-radius:0}.md\:rounded-l-lg{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}}@media (min-width: 1024px){.lg\:grid{display:grid}.lg\:px-16{padding-left:4rem;padding-right:4rem}}@media (prefers-color-scheme: dark){.dark\:border-gray-700{--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity))}.dark\:bg-base-100{--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.dark\:bg-base-300{--tw-bg-opacity: 1;background-color:var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)))}.dark\:text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.dark\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:hover\:bg-base-100:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)))}.hover\:dark\:bg-base-200:hover{--tw-bg-opacity: 1;background-color:var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)))}} diff --git a/dist/_app/immutable/assets/_layout.i2cAdolL.css.br b/dist/_app/immutable/assets/_layout.i2cAdolL.css.br deleted file mode 100644 index 32ab0b6..0000000 Binary files a/dist/_app/immutable/assets/_layout.i2cAdolL.css.br and /dev/null differ diff --git a/dist/_app/immutable/assets/_layout.i2cAdolL.css.gz b/dist/_app/immutable/assets/_layout.i2cAdolL.css.gz deleted file mode 100644 index 22980b1..0000000 Binary files a/dist/_app/immutable/assets/_layout.i2cAdolL.css.gz and /dev/null differ diff --git a/dist/_app/immutable/chunks/Info.NO-uVT9H.js.br b/dist/_app/immutable/chunks/Info.NO-uVT9H.js.br deleted file mode 100644 index 5262ab1..0000000 Binary files a/dist/_app/immutable/chunks/Info.NO-uVT9H.js.br and /dev/null differ diff --git a/dist/_app/immutable/chunks/Info.NO-uVT9H.js.gz b/dist/_app/immutable/chunks/Info.NO-uVT9H.js.gz deleted file mode 100644 index 7674058..0000000 Binary files a/dist/_app/immutable/chunks/Info.NO-uVT9H.js.gz and /dev/null differ diff --git a/dist/_app/immutable/chunks/Info.NO-uVT9H.js b/dist/_app/immutable/chunks/Info.bs_Ss2Q-.js similarity index 90% rename from dist/_app/immutable/chunks/Info.NO-uVT9H.js rename to dist/_app/immutable/chunks/Info.bs_Ss2Q-.js index 30d4cc1..dbca55a 100644 --- a/dist/_app/immutable/chunks/Info.NO-uVT9H.js +++ b/dist/_app/immutable/chunks/Info.bs_Ss2Q-.js @@ -1 +1 @@ -import{s as w,n as v,o as x}from"./scheduler.aZRR5A_O.js";import{S as E,i as b,g as _,C as g,s as y,H as j,h as k,j as h,D as p,f as c,c as H,E as I,k as n,a as M,y as f}from"./index.ciNBPAxl.js";import{m as S}from"./marked.esm.hS8hU7E4.js";function B(m){let e,t,a,o,s,l;return{c(){e=_("div"),t=g("svg"),a=g("path"),o=y(),s=_("span"),l=new j(!1),this.h()},l(i){e=k(i,"DIV",{class:!0});var r=h(e);t=p(r,"svg",{xmlns:!0,fill:!0,viewBox:!0,class:!0});var d=h(t);a=p(d,"path",{"stroke-linecap":!0,"stroke-linejoin":!0,"stroke-width":!0,d:!0}),h(a).forEach(c),d.forEach(c),o=H(r),s=k(r,"SPAN",{class:!0});var u=h(s);l=I(u,!1),u.forEach(c),r.forEach(c),this.h()},h(){n(a,"stroke-linecap","round"),n(a,"stroke-linejoin","round"),n(a,"stroke-width","2"),n(a,"d","M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"),n(t,"xmlns","http://www.w3.org/2000/svg"),n(t,"fill","none"),n(t,"viewBox","0 0 24 24"),n(t,"class","stroke-current shrink-0 w-6 h-6"),l.a=null,n(s,"class","text-2xl"),n(e,"class","alert bg-base-300 dark:bg-base-300")},m(i,r){M(i,e,r),f(e,t),f(t,a),f(e,o),f(e,s),l.m(m[0],s)},p(i,[r]){r&1&&l.p(i[0])},i:v,o:v,d(i){i&&c(e)}}}function C(m,e,t){let{info:a}=e,{markdown:o}=e;return x(()=>{o&&S(a)}),m.$$set=s=>{"info"in s&&t(0,a=s.info),"markdown"in s&&t(1,o=s.markdown)},[a,o]}class A extends E{constructor(e){super(),b(this,e,C,B,w,{info:0,markdown:1})}}export{A as I}; +import{s as w,n as v,o as x}from"./scheduler.aZRR5A_O.js";import{S as E,i as b,g as _,D as g,s as y,H as j,h as k,j as h,E as p,f as c,c as H,C as I,k as n,a as M,y as f}from"./index.AIcdAWo0.js";import{m as S}from"./marked.esm.hS8hU7E4.js";function B(m){let e,t,a,o,s,l;return{c(){e=_("div"),t=g("svg"),a=g("path"),o=y(),s=_("span"),l=new j(!1),this.h()},l(i){e=k(i,"DIV",{class:!0});var r=h(e);t=p(r,"svg",{xmlns:!0,fill:!0,viewBox:!0,class:!0});var d=h(t);a=p(d,"path",{"stroke-linecap":!0,"stroke-linejoin":!0,"stroke-width":!0,d:!0}),h(a).forEach(c),d.forEach(c),o=H(r),s=k(r,"SPAN",{class:!0});var u=h(s);l=I(u,!1),u.forEach(c),r.forEach(c),this.h()},h(){n(a,"stroke-linecap","round"),n(a,"stroke-linejoin","round"),n(a,"stroke-width","2"),n(a,"d","M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"),n(t,"xmlns","http://www.w3.org/2000/svg"),n(t,"fill","none"),n(t,"viewBox","0 0 24 24"),n(t,"class","stroke-current shrink-0 w-6 h-6"),l.a=null,n(s,"class","text-2xl"),n(e,"class","alert bg-base-300 dark:bg-base-300")},m(i,r){M(i,e,r),f(e,t),f(t,a),f(e,o),f(e,s),l.m(m[0],s)},p(i,[r]){r&1&&l.p(i[0])},i:v,o:v,d(i){i&&c(e)}}}function C(m,e,t){let{info:a}=e,{markdown:o}=e;return x(()=>{o&&S(a)}),m.$$set=s=>{"info"in s&&t(0,a=s.info),"markdown"in s&&t(1,o=s.markdown)},[a,o]}class A extends E{constructor(e){super(),b(this,e,C,B,w,{info:0,markdown:1})}}export{A as I}; diff --git a/dist/_app/immutable/chunks/Info.bs_Ss2Q-.js.br b/dist/_app/immutable/chunks/Info.bs_Ss2Q-.js.br new file mode 100644 index 0000000..30f113a Binary files /dev/null and b/dist/_app/immutable/chunks/Info.bs_Ss2Q-.js.br differ diff --git a/dist/_app/immutable/chunks/Info.bs_Ss2Q-.js.gz b/dist/_app/immutable/chunks/Info.bs_Ss2Q-.js.gz new file mode 100644 index 0000000..c29ba9e Binary files /dev/null and b/dist/_app/immutable/chunks/Info.bs_Ss2Q-.js.gz differ diff --git a/dist/_app/immutable/chunks/SoftwareCard.4ve1z996.js b/dist/_app/immutable/chunks/SoftwareCard.4ve1z996.js new file mode 100644 index 0000000..3efbcf6 --- /dev/null +++ b/dist/_app/immutable/chunks/SoftwareCard.4ve1z996.js @@ -0,0 +1 @@ +import{s as B,e as M,n as z}from"./scheduler.aZRR5A_O.js";import{S as F,i as J,g as d,s as S,m as D,h as m,j as g,c as V,n as q,f as h,k as s,a as K,y as l,o as C}from"./index.AIcdAWo0.js";function L(i){let e,t,u,_,f,n,c,a,k,y,v,w,I,b,x;return{c(){e=d("a"),t=d("img"),_=S(),f=d("div"),n=d("div"),c=d("div"),a=d("h5"),k=D(i[0]),y=S(),v=d("p"),w=D(i[1]),I=S(),b=d("p"),x=D(i[4]),this.h()},l(o){e=m(o,"A",{href:!0,class:!0});var r=g(e);t=m(r,"IMG",{class:!0,src:!0,alt:!0}),_=V(r),f=m(r,"DIV",{class:!0});var P=g(f);n=m(P,"DIV",{class:!0});var E=g(n);c=m(E,"DIV",{class:!0});var j=g(c);a=m(j,"H5",{class:!0});var A=g(a);k=q(A,i[0]),A.forEach(h),y=V(j),v=m(j,"P",{class:!0});var G=g(v);w=q(G,i[1]),G.forEach(h),j.forEach(h),I=V(E),b=m(E,"P",{class:!0});var H=g(b);x=q(H,i[4]),H.forEach(h),E.forEach(h),P.forEach(h),r.forEach(h),this.h()},h(){s(t,"class","object-cover w-full rounded-t-lg h-96 md:h-auto md:w-48 md:rounded-none md:rounded-l-lg"),M(t.src,u=i[3])||s(t,"src",u),s(t,"alt",""),s(a,"class","inline mb-2 text-2xl font-bold tracking-tight text-gray-900 dark:text-white"),s(v,"class","inline text-right"),s(c,"class","flex justify-between"),s(b,"class","mb-3 font-normal text-gray-700 dark:text-gray-400"),s(n,"class","flex flex-col justify-between p-4 leading-normal w-full"),s(f,"class","flex flex-col items-start md:items-end w-full"),s(e,"href",i[2]),s(e,"class","flex flex-col items-center rounded-lg shadow md:flex-row dark:hover:bg-base-100 hover:bg-base-100 bg-base-300 dark:bg-base-300")},m(o,r){K(o,e,r),l(e,t),l(e,_),l(e,f),l(f,n),l(n,c),l(c,a),l(a,k),l(c,y),l(c,v),l(v,w),l(n,I),l(n,b),l(b,x)},p(o,[r]){r&8&&!M(t.src,u=o[3])&&s(t,"src",u),r&1&&C(k,o[0]),r&2&&C(w,o[1]),r&16&&C(x,o[4]),r&4&&s(e,"href",o[2])},i:z,o:z,d(o){o&&h(e)}}}function N(i,e,t){let{name:u}=e,{creator:_}=e,{link:f}=e,{image:n}=e,{description:c}=e;return i.$$set=a=>{"name"in a&&t(0,u=a.name),"creator"in a&&t(1,_=a.creator),"link"in a&&t(2,f=a.link),"image"in a&&t(3,n=a.image),"description"in a&&t(4,c=a.description)},[u,_,f,n,c]}class R extends F{constructor(e){super(),J(this,e,N,L,B,{name:0,creator:1,link:2,image:3,description:4})}}export{R as S}; diff --git a/dist/_app/immutable/chunks/SoftwareCard.4ve1z996.js.br b/dist/_app/immutable/chunks/SoftwareCard.4ve1z996.js.br new file mode 100644 index 0000000..0115a87 Binary files /dev/null and b/dist/_app/immutable/chunks/SoftwareCard.4ve1z996.js.br differ diff --git a/dist/_app/immutable/chunks/SoftwareCard.4ve1z996.js.gz b/dist/_app/immutable/chunks/SoftwareCard.4ve1z996.js.gz new file mode 100644 index 0000000..4630af3 Binary files /dev/null and b/dist/_app/immutable/chunks/SoftwareCard.4ve1z996.js.gz differ diff --git a/dist/_app/immutable/chunks/SoftwareCard.9Bpc13j4.js b/dist/_app/immutable/chunks/SoftwareCard.9Bpc13j4.js deleted file mode 100644 index 053a7fb..0000000 --- a/dist/_app/immutable/chunks/SoftwareCard.9Bpc13j4.js +++ /dev/null @@ -1 +0,0 @@ -import{s as H,e as D,n as G}from"./scheduler.aZRR5A_O.js";import{S as M,i as V,g as _,s as S,m as j,h as b,j as v,c as y,n as q,f as k,k as i,a as z,y as c,o as C}from"./index.ciNBPAxl.js";function B(l){let e,a,f,d,s,o,m,t,h,w,E,u,x;return{c(){e=_("a"),a=_("img"),d=S(),s=_("div"),o=_("h5"),m=j(l[0]),t=S(),h=_("p"),w=j(l[1]),E=S(),u=_("p"),x=j(l[4]),this.h()},l(n){e=b(n,"A",{href:!0,class:!0});var r=v(e);a=b(r,"IMG",{class:!0,src:!0,alt:!0}),d=y(r),s=b(r,"DIV",{class:!0});var g=v(s);o=b(g,"H5",{class:!0});var I=v(o);m=q(I,l[0]),I.forEach(k),t=y(g),h=b(g,"P",{class:!0});var P=v(h);w=q(P,l[1]),P.forEach(k),E=y(g),u=b(g,"P",{class:!0});var A=v(u);x=q(A,l[4]),A.forEach(k),g.forEach(k),r.forEach(k),this.h()},h(){i(a,"class","object-cover w-full rounded-t-lg h-96 md:h-auto md:w-48 md:rounded-none md:rounded-l-lg"),D(a.src,f=l[3])||i(a,"src",f),i(a,"alt",""),i(o,"class","mb-2 text-2xl font-bold tracking-tight text-gray-900 dark:text-white"),i(h,"class","text-right"),i(u,"class","mb-3 font-normal text-gray-700 dark:text-gray-400"),i(s,"class","flex flex-col justify-between p-4 leading-normal"),i(e,"href",l[2]),i(e,"class","flex flex-col items-center rounded-lg shadow md:flex-row dark:hover:bg-base-100 hover:bg-base-100 bg-base-300 dark:bg-base-300")},m(n,r){z(n,e,r),c(e,a),c(e,d),c(e,s),c(s,o),c(o,m),c(s,t),c(s,h),c(h,w),c(s,E),c(s,u),c(u,x)},p(n,[r]){r&8&&!D(a.src,f=n[3])&&i(a,"src",f),r&1&&C(m,n[0]),r&2&&C(w,n[1]),r&16&&C(x,n[4]),r&4&&i(e,"href",n[2])},i:G,o:G,d(n){n&&k(e)}}}function F(l,e,a){let{name:f}=e,{creator:d}=e,{link:s}=e,{image:o}=e,{description:m}=e;return l.$$set=t=>{"name"in t&&a(0,f=t.name),"creator"in t&&a(1,d=t.creator),"link"in t&&a(2,s=t.link),"image"in t&&a(3,o=t.image),"description"in t&&a(4,m=t.description)},[f,d,s,o,m]}class L extends M{constructor(e){super(),V(this,e,F,B,H,{name:0,creator:1,link:2,image:3,description:4})}}export{L as S}; diff --git a/dist/_app/immutable/chunks/SoftwareCard.9Bpc13j4.js.br b/dist/_app/immutable/chunks/SoftwareCard.9Bpc13j4.js.br deleted file mode 100644 index 21ad0cc..0000000 Binary files a/dist/_app/immutable/chunks/SoftwareCard.9Bpc13j4.js.br and /dev/null differ diff --git a/dist/_app/immutable/chunks/SoftwareCard.9Bpc13j4.js.gz b/dist/_app/immutable/chunks/SoftwareCard.9Bpc13j4.js.gz deleted file mode 100644 index 257bfcb..0000000 Binary files a/dist/_app/immutable/chunks/SoftwareCard.9Bpc13j4.js.gz and /dev/null differ diff --git a/dist/_app/immutable/chunks/ajouter_information._ytOF6l3.js b/dist/_app/immutable/chunks/ajouter_information._ytOF6l3.js new file mode 100644 index 0000000..cbc1ac5 --- /dev/null +++ b/dist/_app/immutable/chunks/ajouter_information._ytOF6l3.js @@ -0,0 +1 @@ +import{s as y,x as $,y as w,n as G}from"./scheduler.aZRR5A_O.js";import{S as O,i as P,r as R,u as S,v as k,d as I,t as V,w as A,g as _,s as h,h as g,x as v,c as x,k as B,a as i,f as r}from"./index.AIcdAWo0.js";import{G as D,g as E,a as T}from"./guides.RN6emr9S.js";function F(f){let t,d="Ce site est conçu pour être rapidement mis à jour par la communauté des live coders francophones. Chaque section est construite automatiquement à partir des données mises à disposition par chacun : Évènements, Membres, Outils, Guides, Réseaux, Resources, Presse, etc. En séparant les données de la mise en page, cela permet au site d’évoluer rapidement et indépendamment des données amassées :)",l,a,s="Où se situent les données ?",n,u,z="Les données sont intégrées à la source du site :",C,p,L='

1) Rendez-vous sur le dépôt dans le dossier lib/data : ici.

2) Vous y trouverez un fichier JSON pour chaque section du site.

3) Éditez depuis l’éditeur intégré de GitHub ou modifiez en local.

4) Soumettez vos changements, attendez la mise à jour du site !

',b,m,M="Où se situent les guides ?",H,c,q='Les guides répondent à un format différent. Il existe un autre article qui vous guidera pour en créer/modifier un guide.';return{c(){t=_("p"),t.innerHTML=d,l=h(),a=_("h2"),a.textContent=s,n=h(),u=_("p"),u.textContent=z,C=h(),p=_("div"),p.innerHTML=L,b=h(),m=_("h2"),m.textContent=M,H=h(),c=_("p"),c.innerHTML=q,this.h()},l(e){t=g(e,"P",{"data-svelte-h":!0}),v(t)!=="svelte-1r1wqsk"&&(t.innerHTML=d),l=x(e),a=g(e,"H2",{"data-svelte-h":!0}),v(a)!=="svelte-17idpzd"&&(a.textContent=s),n=x(e),u=g(e,"P",{"data-svelte-h":!0}),v(u)!=="svelte-1wkphp0"&&(u.textContent=z),C=x(e),p=g(e,"DIV",{class:!0,"data-svelte-h":!0}),v(p)!=="svelte-p5v4nz"&&(p.innerHTML=L),b=x(e),m=g(e,"H2",{"data-svelte-h":!0}),v(m)!=="svelte-aapbly"&&(m.textContent=M),H=x(e),c=g(e,"P",{"data-svelte-h":!0}),v(c)!=="svelte-q9p27"&&(c.innerHTML=q),this.h()},h(){B(p,"class","pl-8 mt-4")},m(e,o){i(e,t,o),i(e,l,o),i(e,a,o),i(e,n,o),i(e,u,o),i(e,C,o),i(e,p,o),i(e,b,o),i(e,m,o),i(e,H,o),i(e,c,o)},p:G,d(e){e&&(r(t),r(l),r(a),r(n),r(u),r(C),r(p),r(b),r(m),r(H),r(c))}}}function J(f){let t,d;const l=[f[0],j];let a={$$slots:{default:[F]},$$scope:{ctx:f}};for(let s=0;s{d(0,t=$($({},t),w(l)))},t=w(t),[t]}class W extends O{constructor(t){super(),P(this,t,N,J,y,{})}}export{W as default,j as metadata}; diff --git a/dist/_app/immutable/chunks/ajouter_information._ytOF6l3.js.br b/dist/_app/immutable/chunks/ajouter_information._ytOF6l3.js.br new file mode 100644 index 0000000..1492da6 Binary files /dev/null and b/dist/_app/immutable/chunks/ajouter_information._ytOF6l3.js.br differ diff --git a/dist/_app/immutable/chunks/ajouter_information._ytOF6l3.js.gz b/dist/_app/immutable/chunks/ajouter_information._ytOF6l3.js.gz new file mode 100644 index 0000000..1f15288 Binary files /dev/null and b/dist/_app/immutable/chunks/ajouter_information._ytOF6l3.js.gz differ diff --git a/dist/_app/immutable/chunks/dynamic-import-helper.0gtGTknh.js b/dist/_app/immutable/chunks/dynamic-import-helper.0gtGTknh.js new file mode 100644 index 0000000..3a43120 --- /dev/null +++ b/dist/_app/immutable/chunks/dynamic-import-helper.0gtGTknh.js @@ -0,0 +1 @@ +const t=(r,n)=>{const e=r[n];return e?typeof e=="function"?e():Promise.resolve(e):new Promise((i,o)=>{(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(o.bind(null,new Error("Unknown variable dynamic import: "+n)))})};export{t as _}; diff --git a/dist/_app/immutable/chunks/dynamic-import-helper.0gtGTknh.js.br b/dist/_app/immutable/chunks/dynamic-import-helper.0gtGTknh.js.br new file mode 100644 index 0000000..f5ed825 Binary files /dev/null and b/dist/_app/immutable/chunks/dynamic-import-helper.0gtGTknh.js.br differ diff --git a/dist/_app/immutable/chunks/dynamic-import-helper.0gtGTknh.js.gz b/dist/_app/immutable/chunks/dynamic-import-helper.0gtGTknh.js.gz new file mode 100644 index 0000000..2b39ead Binary files /dev/null and b/dist/_app/immutable/chunks/dynamic-import-helper.0gtGTknh.js.gz differ diff --git a/dist/_app/immutable/chunks/guides.RN6emr9S.js b/dist/_app/immutable/chunks/guides.RN6emr9S.js new file mode 100644 index 0000000..34668e5 --- /dev/null +++ b/dist/_app/immutable/chunks/guides.RN6emr9S.js @@ -0,0 +1 @@ +import{s as u,c as r,u as _,g as d,d as m}from"./scheduler.aZRR5A_O.js";import{S as g,i as h,g as y,h as k,j as b,f as c,a as j,d as C,t as E}from"./index.AIcdAWo0.js";function A(s,o){const i={},f={},e={$$scope:1};let t=s.length;for(;t--;){const n=s[t],a=o[t];if(a){for(const l in n)l in a||(f[l]=1);for(const l in a)e[l]||(i[l]=a[l],e[l]=1);s[t]=a}else for(const l in n)e[l]=1}for(const n in f)n in i||(i[n]=void 0);return i}function I(s){return typeof s=="object"&&s!==null?s:{}}function G(s){let o,i;const f=s[3].default,e=r(f,s,s[2],null);return{c(){o=y("article"),e&&e.c()},l(t){o=k(t,"ARTICLE",{});var n=b(o);e&&e.l(n),n.forEach(c)},m(t,n){j(t,o,n),e&&e.m(o,null),i=!0},p(t,[n]){e&&e.p&&(!i||n&4)&&_(e,f,t,t[2],i?m(f,t[2],n,null):d(t[2]),null)},i(t){i||(C(e,t),i=!0)},o(t){E(e,t),i=!1},d(t){t&&c(o),e&&e.d(t)}}}function S(s,o,i){let{$$slots:f={},$$scope:e}=o,{title:t}=o,{date:n}=o;return s.$$set=a=>{"title"in a&&i(0,t=a.title),"date"in a&&i(1,n=a.date),"$$scope"in a&&i(2,e=a.$$scope)},[t,n,e,f]}class L extends g{constructor(o){super(),h(this,o,S,G,u,{title:0,date:1})}}export{L as G,I as a,A as g}; diff --git a/dist/_app/immutable/chunks/guides.RN6emr9S.js.br b/dist/_app/immutable/chunks/guides.RN6emr9S.js.br new file mode 100644 index 0000000..0195212 Binary files /dev/null and b/dist/_app/immutable/chunks/guides.RN6emr9S.js.br differ diff --git a/dist/_app/immutable/chunks/guides.RN6emr9S.js.gz b/dist/_app/immutable/chunks/guides.RN6emr9S.js.gz new file mode 100644 index 0000000..d3f7f71 Binary files /dev/null and b/dist/_app/immutable/chunks/guides.RN6emr9S.js.gz differ diff --git a/dist/_app/immutable/chunks/index.ciNBPAxl.js b/dist/_app/immutable/chunks/index.AIcdAWo0.js similarity index 99% rename from dist/_app/immutable/chunks/index.ciNBPAxl.js rename to dist/_app/immutable/chunks/index.AIcdAWo0.js index 9800e71..5f0457b 100644 --- a/dist/_app/immutable/chunks/index.ciNBPAxl.js +++ b/dist/_app/immutable/chunks/index.AIcdAWo0.js @@ -1 +1 @@ -import{r as p,n as x,f as N,h as B,i as b,j as D,k as v,l as P,m as j,p as E,q as I,v as R,w as q}from"./scheduler.aZRR5A_O.js";let $=!1;function G(){$=!0}function O(){$=!1}function z(e,t,n,i){for(;e>1);n(s)<=i?e=s+1:t=s}return e}function U(e){if(e.hydrate_init)return;e.hydrate_init=!0;let t=e.childNodes;if(e.nodeName==="HEAD"){const r=[];for(let a=0;a0&&t[n[s]].claim_order<=a?s+1:z(1,s,_=>t[n[_]].claim_order,a))-1;i[r]=n[u]+1;const o=u+1;n[o]=r,s=Math.max(o,s)}const c=[],l=[];let f=t.length-1;for(let r=n[s]+1;r!=0;r=i[r-1]){for(c.push(t[r-1]);f>=r;f--)l.push(t[f]);f--}for(;f>=0;f--)l.push(t[f]);c.reverse(),l.sort((r,a)=>r.claim_order-a.claim_order);for(let r=0,a=0;r=c[a].claim_order;)a++;const u=ae.removeEventListener(t,n,i)}function le(e,t,n){n==null?e.removeAttribute(t):e.getAttribute(t)!==n&&e.setAttribute(t,n)}function ae(e){return e.dataset.svelteH}function J(e){return Array.from(e.childNodes)}function L(e){e.claim_info===void 0&&(e.claim_info={last_index:0,total_claimed:0})}function C(e,t,n,i,s=!1){L(e);const c=(()=>{for(let l=e.claim_info.last_index;l=0;l--){const f=e[l];if(t(f)){const r=n(f);return r===void 0?e.splice(l,1):e[l]=r,s?r===void 0&&e.claim_info.last_index--:e.claim_info.last_index=l,f}}return i()})();return c.claim_order=e.claim_info.total_claimed,e.claim_info.total_claimed+=1,c}function M(e,t,n,i){return C(e,s=>s.nodeName===t,s=>{const c=[];for(let l=0;ls.removeAttribute(l))},()=>i(t))}function ce(e,t,n){return M(e,t,n,S)}function fe(e,t,n){return M(e,t,n,H)}function K(e,t){return C(e,n=>n.nodeType===3,n=>{const i=""+t;if(n.data.startsWith(i)){if(n.data.length!==i.length)return n.splitText(i.length)}else n.data=i},()=>g(t),!0)}function oe(e){return K(e," ")}function A(e,t,n){for(let i=n;i0&&n.push(s);return n}class Q{is_svg=!1;e=void 0;n=void 0;t=void 0;a=void 0;constructor(t=!1){this.is_svg=t,this.e=this.n=null}c(t){this.h(t)}m(t,n,i=null){this.e||(this.is_svg?this.e=H(n.nodeName):this.e=S(n.nodeType===11?"TEMPLATE":n.nodeName),this.t=n.tagName!=="TEMPLATE"?n:n.content,this.c(t)),this.i(i)}h(t){this.e.innerHTML=t,this.n=Array.from(this.e.nodeName==="TEMPLATE"?this.e.content.childNodes:this.e.childNodes)}i(t){for(let n=0;n{h.delete(e),i&&(n&&e.d(1),i())}),e.o(t)}else i&&i()}function xe(e){e&&e.c()}function ge(e,t){e&&e.l(t)}function Y(e,t,n){const{fragment:i,after_update:s}=e.$$;i&&i.m(t,n),v(()=>{const c=e.$$.on_mount.map(I).filter(b);e.$$.on_destroy?e.$$.on_destroy.push(...c):p(c),e.$$.on_mount=[]}),s.forEach(v)}function Z(e,t){const n=e.$$;n.fragment!==null&&(P(n.after_update),p(n.on_destroy),n.fragment&&n.fragment.d(t),n.on_destroy=n.fragment=null,n.ctx=[])}function k(e,t){e.$$.dirty[0]===-1&&(R.push(e),q(),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<{const w=T.length?T[0]:_;return a.ctx&&s(a.ctx[o],a.ctx[o]=w)&&(!a.skip_bound&&a.bound[o]&&a.bound[o](w),u&&k(e,o)),_}):[],a.update(),u=!0,p(a.before_update),a.fragment=i?i(a.ctx):!1,t.target){if(t.hydrate){G();const o=J(t.target);a.fragment&&a.fragment.l(o),o.forEach(m)}else a.fragment&&a.fragment.c();t.intro&&X(e.$$.fragment),Y(e,t.target,t.anchor),O(),B()}E(r)}class we{$$=void 0;$$set=void 0;$destroy(){Z(this,1),this.$destroy=x}$on(t,n){if(!b(n))return x;const i=this.$$.callbacks[t]||(this.$$.callbacks[t]=[]);return i.push(n),()=>{const s=i.indexOf(n);s!==-1&&i.splice(s,1)}}$set(t){this.$$set&&!D(t)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}}const ee="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(ee);export{he as A,ne as B,H as C,fe as D,ue as E,y as H,we as S,F as a,$e as b,oe as c,X as d,se as e,m as f,S as g,ce as h,Te as i,J as j,le as k,_e as l,g as m,K as n,de as o,pe as p,me as q,xe as r,ie as s,ye as t,ge as u,Y as v,Z as w,ae as x,V as y,re as z}; +import{r as p,n as x,f as N,h as B,i as b,j as D,k as v,l as P,m as j,p as E,q as I,v as R,w as q}from"./scheduler.aZRR5A_O.js";let $=!1;function G(){$=!0}function O(){$=!1}function z(e,t,n,i){for(;e>1);n(s)<=i?e=s+1:t=s}return e}function U(e){if(e.hydrate_init)return;e.hydrate_init=!0;let t=e.childNodes;if(e.nodeName==="HEAD"){const r=[];for(let a=0;a0&&t[n[s]].claim_order<=a?s+1:z(1,s,_=>t[n[_]].claim_order,a))-1;i[r]=n[u]+1;const o=u+1;n[o]=r,s=Math.max(o,s)}const c=[],l=[];let f=t.length-1;for(let r=n[s]+1;r!=0;r=i[r-1]){for(c.push(t[r-1]);f>=r;f--)l.push(t[f]);f--}for(;f>=0;f--)l.push(t[f]);c.reverse(),l.sort((r,a)=>r.claim_order-a.claim_order);for(let r=0,a=0;r=c[a].claim_order;)a++;const u=ae.removeEventListener(t,n,i)}function le(e,t,n){n==null?e.removeAttribute(t):e.getAttribute(t)!==n&&e.setAttribute(t,n)}function ae(e){return e.dataset.svelteH}function J(e){return Array.from(e.childNodes)}function L(e){e.claim_info===void 0&&(e.claim_info={last_index:0,total_claimed:0})}function C(e,t,n,i,s=!1){L(e);const c=(()=>{for(let l=e.claim_info.last_index;l=0;l--){const f=e[l];if(t(f)){const r=n(f);return r===void 0?e.splice(l,1):e[l]=r,s?r===void 0&&e.claim_info.last_index--:e.claim_info.last_index=l,f}}return i()})();return c.claim_order=e.claim_info.total_claimed,e.claim_info.total_claimed+=1,c}function M(e,t,n,i){return C(e,s=>s.nodeName===t,s=>{const c=[];for(let l=0;ls.removeAttribute(l))},()=>i(t))}function ce(e,t,n){return M(e,t,n,S)}function fe(e,t,n){return M(e,t,n,H)}function K(e,t){return C(e,n=>n.nodeType===3,n=>{const i=""+t;if(n.data.startsWith(i)){if(n.data.length!==i.length)return n.splitText(i.length)}else n.data=i},()=>g(t),!0)}function oe(e){return K(e," ")}function A(e,t,n){for(let i=n;i0&&n.push(s);return n}class Q{is_svg=!1;e=void 0;n=void 0;t=void 0;a=void 0;constructor(t=!1){this.is_svg=t,this.e=this.n=null}c(t){this.h(t)}m(t,n,i=null){this.e||(this.is_svg?this.e=H(n.nodeName):this.e=S(n.nodeType===11?"TEMPLATE":n.nodeName),this.t=n.tagName!=="TEMPLATE"?n:n.content,this.c(t)),this.i(i)}h(t){this.e.innerHTML=t,this.n=Array.from(this.e.nodeName==="TEMPLATE"?this.e.content.childNodes:this.e.childNodes)}i(t){for(let n=0;n{h.delete(e),i&&(n&&e.d(1),i())}),e.o(t)}else i&&i()}function xe(e){e&&e.c()}function ge(e,t){e&&e.l(t)}function Y(e,t,n){const{fragment:i,after_update:s}=e.$$;i&&i.m(t,n),v(()=>{const c=e.$$.on_mount.map(I).filter(b);e.$$.on_destroy?e.$$.on_destroy.push(...c):p(c),e.$$.on_mount=[]}),s.forEach(v)}function Z(e,t){const n=e.$$;n.fragment!==null&&(P(n.after_update),p(n.on_destroy),n.fragment&&n.fragment.d(t),n.on_destroy=n.fragment=null,n.ctx=[])}function k(e,t){e.$$.dirty[0]===-1&&(R.push(e),q(),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<{const w=T.length?T[0]:_;return a.ctx&&s(a.ctx[o],a.ctx[o]=w)&&(!a.skip_bound&&a.bound[o]&&a.bound[o](w),u&&k(e,o)),_}):[],a.update(),u=!0,p(a.before_update),a.fragment=i?i(a.ctx):!1,t.target){if(t.hydrate){G();const o=J(t.target);a.fragment&&a.fragment.l(o),o.forEach(m)}else a.fragment&&a.fragment.c();t.intro&&X(e.$$.fragment),Y(e,t.target,t.anchor),O(),B()}E(r)}class we{$$=void 0;$$set=void 0;$destroy(){Z(this,1),this.$destroy=x}$on(t,n){if(!b(n))return x;const i=this.$$.callbacks[t]||(this.$$.callbacks[t]=[]);return i.push(n),()=>{const s=i.indexOf(n);s!==-1&&i.splice(s,1)}}$set(t){this.$$set&&!D(t)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}}const ee="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(ee);export{he as A,ne as B,ue as C,H as D,fe as E,y as H,we as S,F as a,$e as b,oe as c,X as d,se as e,m as f,S as g,ce as h,Te as i,J as j,le as k,_e as l,g as m,K as n,de as o,pe as p,me as q,xe as r,ie as s,ye as t,ge as u,Y as v,Z as w,ae as x,V as y,re as z}; diff --git a/dist/_app/immutable/chunks/index.AIcdAWo0.js.br b/dist/_app/immutable/chunks/index.AIcdAWo0.js.br new file mode 100644 index 0000000..037ba04 Binary files /dev/null and b/dist/_app/immutable/chunks/index.AIcdAWo0.js.br differ diff --git a/dist/_app/immutable/chunks/index.ciNBPAxl.js.gz b/dist/_app/immutable/chunks/index.AIcdAWo0.js.gz similarity index 95% rename from dist/_app/immutable/chunks/index.ciNBPAxl.js.gz rename to dist/_app/immutable/chunks/index.AIcdAWo0.js.gz index aff1ba2..a36560e 100644 Binary files a/dist/_app/immutable/chunks/index.ciNBPAxl.js.gz and b/dist/_app/immutable/chunks/index.AIcdAWo0.js.gz differ diff --git a/dist/_app/immutable/chunks/index.ciNBPAxl.js.br b/dist/_app/immutable/chunks/index.ciNBPAxl.js.br deleted file mode 100644 index 1b04976..0000000 Binary files a/dist/_app/immutable/chunks/index.ciNBPAxl.js.br and /dev/null differ diff --git a/dist/_app/immutable/chunks/livecoding_supercollider.sLrjm2WB.js b/dist/_app/immutable/chunks/livecoding_supercollider.sLrjm2WB.js new file mode 100644 index 0000000..d3ae46e --- /dev/null +++ b/dist/_app/immutable/chunks/livecoding_supercollider.sLrjm2WB.js @@ -0,0 +1,90 @@ +import{s as el,x as Ts,y as $a,n as tl}from"./scheduler.aZRR5A_O.js";import{S as nl,i as sl,r as As,u as qs,v as Fs,d as Ms,t as Hs,w as Ps,g as u,s as i,H as z,h as o,x as b,c as r,j as $,C as R,f as t,k as B,a as s}from"./index.AIcdAWo0.js";import{G as al,g as ll,a as Ra}from"./guides.RN6emr9S.js";import{I as Ba}from"./Info.bs_Ss2Q-.js";var ja=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},il={exports:{}};(function(J){var y=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT + * @author Lea Verou + * @namespace + * @public + */var m=function(h){var w=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,x=0,L={},f={manual:h.Prism&&h.Prism.manual,disableWorkerMessageHandler:h.Prism&&h.Prism.disableWorkerMessageHandler,util:{encode:function a(l){return l instanceof q?new q(l.type,a(l.content),l.alias):Array.isArray(l)?l.map(a):l.replace(/&/g,"&").replace(/"u")return null;if("currentScript"in document&&1<2)return document.currentScript;try{throw new Error}catch(c){var a=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(c.stack)||[])[1];if(a){var l=document.getElementsByTagName("script");for(var p in l)if(l[p].src==a)return l[p]}return null}},isActive:function(a,l,p){for(var c="no-"+l;a;){var d=a.classList;if(d.contains(l))return!0;if(d.contains(c))return!1;a=a.parentElement}return!!p}},languages:{plain:L,plaintext:L,text:L,txt:L,extend:function(a,l){var p=f.util.clone(f.languages[a]);for(var c in l)p[c]=l[c];return p},insertBefore:function(a,l,p,c){c=c||f.languages;var d=c[a],g={};for(var k in d)if(d.hasOwnProperty(k)){if(k==l)for(var v in p)p.hasOwnProperty(v)&&(g[v]=p[v]);p.hasOwnProperty(k)||(g[k]=d[k])}var _=c[a];return c[a]=g,f.languages.DFS(f.languages,function(F,P){P===_&&F!=a&&(this[F]=g)}),g},DFS:function a(l,p,c,d){d=d||{};var g=f.util.objId;for(var k in l)if(l.hasOwnProperty(k)){p.call(l,k,l[k],c||k);var v=l[k],_=f.util.type(v);_==="Object"&&!d[g(v)]?(d[g(v)]=!0,a(v,p,null,d)):_==="Array"&&!d[g(v)]&&(d[g(v)]=!0,a(v,p,k,d))}}},plugins:{},highlightAll:function(a,l){f.highlightAllUnder(document,a,l)},highlightAllUnder:function(a,l,p){var c={callback:p,container:a,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};f.hooks.run("before-highlightall",c),c.elements=Array.prototype.slice.apply(c.container.querySelectorAll(c.selector)),f.hooks.run("before-all-elements-highlight",c);for(var d=0,g;g=c.elements[d++];)f.highlightElement(g,l===!0,c.callback)},highlightElement:function(a,l,p){var c=f.util.getLanguage(a),d=f.languages[c];f.util.setLanguage(a,c);var g=a.parentElement;g&&g.nodeName.toLowerCase()==="pre"&&f.util.setLanguage(g,c);var k=a.textContent,v={element:a,language:c,grammar:d,code:k};function _(P){v.highlightedCode=P,f.hooks.run("before-insert",v),v.element.innerHTML=v.highlightedCode,f.hooks.run("after-highlight",v),f.hooks.run("complete",v),p&&p.call(v.element)}if(f.hooks.run("before-sanity-check",v),g=v.element.parentElement,g&&g.nodeName.toLowerCase()==="pre"&&!g.hasAttribute("tabindex")&&g.setAttribute("tabindex","0"),!v.code){f.hooks.run("complete",v),p&&p.call(v.element);return}if(f.hooks.run("before-highlight",v),!v.grammar){_(f.util.encode(v.code));return}if(l&&h.Worker){var F=new Worker(f.filename);F.onmessage=function(P){_(P.data)},F.postMessage(JSON.stringify({language:v.language,code:v.code,immediateClose:!0}))}else _(f.highlight(v.code,v.grammar,v.language))},highlight:function(a,l,p){var c={code:a,grammar:l,language:p};if(f.hooks.run("before-tokenize",c),!c.grammar)throw new Error('The language "'+c.language+'" has no grammar.');return c.tokens=f.tokenize(c.code,c.grammar),f.hooks.run("after-tokenize",c),q.stringify(f.util.encode(c.tokens),c.language)},tokenize:function(a,l){var p=l.rest;if(p){for(var c in p)l[c]=p[c];delete l.rest}var d=new G;return D(d,d.head,a),te(a,d,l,d.head,0),j(d)},hooks:{all:{},add:function(a,l){var p=f.hooks.all;p[a]=p[a]||[],p[a].push(l)},run:function(a,l){var p=f.hooks.all[a];if(!(!p||!p.length))for(var c=0,d;d=p[c++];)d(l)}},Token:q};h.Prism=f;function q(a,l,p,c){this.type=a,this.content=l,this.alias=p,this.length=(c||"").length|0}q.stringify=function a(l,p){if(typeof l=="string")return l;if(Array.isArray(l)){var c="";return l.forEach(function(_){c+=a(_,p)}),c}var d={type:l.type,content:a(l.content,p),tag:"span",classes:["token",l.type],attributes:{},language:p},g=l.alias;g&&(Array.isArray(g)?Array.prototype.push.apply(d.classes,g):d.classes.push(g)),f.hooks.run("wrap",d);var k="";for(var v in d.attributes)k+=" "+v+'="'+(d.attributes[v]||"").replace(/"/g,""")+'"';return"<"+d.tag+' class="'+d.classes.join(" ")+'"'+k+">"+d.content+""};function H(a,l,p,c){a.lastIndex=l;var d=a.exec(p);if(d&&c&&d[1]){var g=d[1].length;d.index+=g,d[0]=d[0].slice(g)}return d}function te(a,l,p,c,d,g){for(var k in p)if(!(!p.hasOwnProperty(k)||!p[k])){var v=p[k];v=Array.isArray(v)?v:[v];for(var _=0;_=g.reach);E+=S.value.length,S=S.next){var O=S.value;if(l.length>a.length)return;if(!(O instanceof q)){var W=1,M;if(se){if(M=H(ae,E,a,ne),!M||M.index>=a.length)break;var I=M.index,Z=M.index+M[0].length,U=E;for(U+=S.value.length;I>=U;)S=S.next,U+=S.value.length;if(U-=S.value.length,E=U,S.value instanceof q)continue;for(var V=S;V!==l.tail&&(Ug.reach&&(g.reach=pt);var X=S.prev;K&&(X=D(l,X,K),E+=K.length),Y(l,X,W);var ct=new q(k,P?f.tokenize(le,P):le,Q,le);if(S=D(l,X,ct),N&&D(l,S,N),W>1){var ee={cause:k+","+_,reach:pt};te(a,l,p,S.prev,E,ee),g&&ee.reach>g.reach&&(g.reach=ee.reach)}}}}}}function G(){var a={value:null,prev:null,next:null},l={value:null,prev:a,next:null};a.next=l,this.head=a,this.tail=l,this.length=0}function D(a,l,p){var c=l.next,d={value:p,prev:l,next:c};return l.next=d,c.prev=d,a.length++,d}function Y(a,l,p){for(var c=l.next,d=0;d/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},m.languages.markup.tag.inside["attr-value"].inside.entity=m.languages.markup.entity,m.languages.markup.doctype.inside["internal-subset"].inside=m.languages.markup,m.hooks.add("wrap",function(h){h.type==="entity"&&(h.attributes.title=h.content.replace(/&/,"&"))}),Object.defineProperty(m.languages.markup.tag,"addInlined",{value:function(w,x){var L={};L["language-"+x]={pattern:/(^$)/i,lookbehind:!0,inside:m.languages[x]},L.cdata=/^$/i;var f={"included-cdata":{pattern://i,inside:L}};f["language-"+x]={pattern:/[\s\S]+/,inside:m.languages[x]};var q={};q[w]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return w}),"i"),lookbehind:!0,greedy:!0,inside:f},m.languages.insertBefore("markup","cdata",q)}}),Object.defineProperty(m.languages.markup.tag,"addAttribute",{value:function(h,w){m.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+h+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[w,"language-"+w],inside:m.languages[w]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),m.languages.html=m.languages.markup,m.languages.mathml=m.languages.markup,m.languages.svg=m.languages.markup,m.languages.xml=m.languages.extend("markup",{}),m.languages.ssml=m.languages.xml,m.languages.atom=m.languages.xml,m.languages.rss=m.languages.xml,function(h){var w=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;h.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+w.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+w.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+w.source+"$"),alias:"url"}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+w.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:w,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},h.languages.css.atrule.inside.rest=h.languages.css;var x=h.languages.markup;x&&(x.tag.addInlined("style","css"),x.tag.addAttribute("style","css"))}(m),m.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},m.languages.javascript=m.languages.extend("clike",{"class-name":[m.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+(/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source)+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),m.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,m.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:m.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:m.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:m.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:m.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:m.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),m.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:m.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),m.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),m.languages.markup&&(m.languages.markup.tag.addInlined("script","javascript"),m.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),m.languages.js=m.languages.javascript,function(){if(typeof m>"u"||typeof document>"u")return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var h="Loading…",w=function(T,C){return"✖ Error "+T+" while fetching file: "+C},x="✖ Error: File does not exist or is empty",L={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},f="data-src-status",q="loading",H="loaded",te="failed",G="pre[data-src]:not(["+f+'="'+H+'"]):not(['+f+'="'+q+'"])';function D(T,C,A){var a=new XMLHttpRequest;a.open("GET",T,!0),a.onreadystatechange=function(){a.readyState==4&&(a.status<400&&a.responseText?C(a.responseText):a.status>=400?A(w(a.status,a.statusText)):A(x))},a.send(null)}function Y(T){var C=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(T||"");if(C){var A=Number(C[1]),a=C[2],l=C[3];return a?l?[A,Number(l)]:[A,void 0]:[A,A]}}m.hooks.add("before-highlightall",function(T){T.selector+=", "+G}),m.hooks.add("before-sanity-check",function(T){var C=T.element;if(C.matches(G)){T.code="",C.setAttribute(f,q);var A=C.appendChild(document.createElement("CODE"));A.textContent=h;var a=C.getAttribute("data-src"),l=T.language;if(l==="none"){var p=(/\.(\w+)$/.exec(a)||[,"none"])[1];l=L[p]||p}m.util.setLanguage(A,l),m.util.setLanguage(C,l);var c=m.plugins.autoloader;c&&c.loadLanguages(l),D(a,function(d){C.setAttribute(f,H);var g=Y(C.getAttribute("data-range"));if(g){var k=d.split(/\r\n?|\n/g),v=g[0],_=g[1]==null?k.length:g[1];v<0&&(v+=k.length),v=Math.max(0,Math.min(v-1,k.length)),_<0&&(_+=k.length),_=Math.max(0,Math.min(_,k.length)),d=k.slice(v,_).join(` +`),C.hasAttribute("data-start")||C.setAttribute("data-start",String(v+1))}A.textContent=d,m.highlightElement(A)},function(d){C.setAttribute(f,te),A.textContent=d})}}),m.plugins.fileHighlight={highlight:function(C){for(var A=(C||document).querySelectorAll(G),a=0,l;l=A[a++];)m.highlightElement(l)}};var j=!1;m.fileHighlight=function(){j||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),j=!0),m.plugins.fileHighlight.highlight.apply(this,arguments)}}()})(il);function rl(J){let y,m="Introduction",h,w,x='Après avoir travaillé longtemps sur Sardine et Topos, je me suis posé la question de savoir si j’étais encore capable de live coder sur SuperCollider. J’ai donc décidé de ramasser tout ce que je sais pour constituer un environnement de live coding minimal et efficace. Ce document est le résultat de cette expérience. Il existe aussi un petit Quark qui va un peu plus loin que ce guide, mais que je ne documente pas encore. J’avais une certaine jalousie latente vis à vis des artistes qui utilisent SuperCollider sans recourir à aucune extension ou surcouche logicielle qui facilite la tâche. Le langage et l’environnement de SuperCollider est monstrueux (de complexité, de détails, etc). Il offre toutefois un avantage intéressant : SuperCollider est très versatile. Au sein d’un seul langage / interface, il est possible de passer d’une section du code lié aux patterns musicaux à une autre partie du code directement liée à la synthèse et à l’écriture de traitements sonores. On peut aussi s’en servir pour écrire des utilitaires divers et des interfaces graphiques si besoin. SuperCollider est aussi un environnement relativement minimal et économe pour la production et le travail du son, développé depuis plus de vingt ans. Cela garantit de pouvoir le faire tourner sur toutes les machines sans aucun problème.',L,f,q,H,te='SuperCollider a joué un rôle crucial dans le développement du live coding au cours de ces 20 dernières années (dès la parution de SuperCollider 2). Il est toujours utilisé par l’immense majorité des artistes et performers sous une forme directe ou indirecte (au travers de Tidal, FoxDot ou Sonic Pi). Bien que ces derniers soient aujourd’hui populaires, il est également intéressant de voir que l’on peut réaliser peu ou prou la même chose tout en éliminant toute une catégorie de problèmes liés à l’installation, au déploiement ou à la personnalisation de ces interfaces.',G,D,Y,j,T,C,A,a,l='SuperCollider Logo',p,c,d,g,k="Mise en place",v,_,F='La mise en place est relativement simple. Nous aurons uniquement besoin de l’environnement de base et de la librairie JITLib, livrée par défaut avec SuperCollider. Nous augmenterons progressivement SuperCollider avec des plugins (Quarks) mais cela ne requiert pas d’installation directe et peut même se révéler facultatif.',P,ne,se,Q,dt='1) Téléchargez et installez SuperCollider depuis le site officiel.',ae,S,E='2) Optionnel : téléchargez sc3-plugins, une collection officielle d’objets supplémentaires.',O,W,M,Z,U="Il est important de bien comprendre comment est structuré SuperCollider. Il s’agit d’un environnement composé de plusieurs briques logicielles interconnectées (ou non) :",V,I,le=`
  • SCLang : un langage de programmation inspiré de la famille C ou +SmallTalk
  • SCSynth / SCServer : un serveur chargé de l’exécution audio
  • SCIDE : l’éditeur par défaut, qui lie ces deux premiers composants
  • `,K,N,pt=`SCIDE est utile, mais si vous préférez utiliser un autre éditeur, il est +possible de lier VSCode, Emacs ou Neovim. SCLang et SCSynth sont les deux composants les plus importants, l’un servant au contrôle de l’autre. L’architecture de SuperCollider est toujours axée sur la différence entre un client (le langage) et le serveur (qui exécute l’audio).`,X,ct,ee,ie,Es="Commandes de base",mt,re,zs="Lorsque vous ouvrez SCIDE, vous vous trouvez face à un document texte vierge. C’est dans cette zone que vous devez programmer et écrire votre code. SuperCollider est un langage interprété. Cela signifie que vous allez graduellement soumettre du code à évaluation et recevoir le résultat des commandes éxecutées. Cela peut parfois poser problème aux débutants qui ne sont pas habitués à cette manière de concevoir la programmation :",ft,ue,$s=`
  • l’évaluation d’un fichier ne s’effectue pas toujours de manière linéaire. On +peut évaluer du code bloc par bloc ou modifier un bloc à la volée. +SuperCollider identifie un bloc à l’aide des parenthèses ().
  • il est possible d’évaluer un fichier de manière linéaire si besoin. Il existe +des commandes spécifiques pour ce faire (par ex. "blabla/mon_fichier.scd".loadRelative).
  • la librairie standard (classes, extensions) est lue / interprétée de manière +linéaire au démarrage de l’interpréteur. Vous ne pourrez pas démarrer +l’interpréteur si une erreur est identifiée dans cette partie du code : Library has not been compiled successfully.
  • `,gt,vt,bt,oe,Rs="Selon votre éditeur, les commandes pour évaluer du code ligne par ligne ou bloc par bloc peuvent varier (Shift + Enter, Control + Enter, etc). Vous pourrez trouvez les commandes dans le menu Language de SCIDE. Pour vérifier que tout fonctionne, évaluez la ligne suivante (note : les commentaires sont précédés des caractères // et ne sont pas évalués) :",ht,pe,kt,Da='s.boot // Démarrage du serveur',xt,ce,Bs=`Attendez quelques secondes pour vérifier que tout se passe correctement puis +tuez le serveur :`,Ct,de,_t,Oa='Server.killAll // Tuer le serveur',wt,me,js=`SuperCollider permet de prendre l’habitude de ne pas considérer le code +comme un texte linéaire mais comme une interface, ce qui est une caractéristique +commune des outils de live coding. C’est aussi une constante des +environnements pour la programmation musicale (Max/MSP, Pure Data) qui +éliminent / gomment la distinction entre travail sur le programme et exécution +du programme.`,yt,St,Lt,fe,Is=`Ce guide ne vous apprendra pas les rudiments du langage. Il existe de très +nombreux guides qui font cela très bien. Notez la parution récente d’un nouvel +ouvrage : SuperCollider for the Creative Musician par Eli Fieldsteel, également auteur d’une série de vidéos que je recommande.`,Tt,At,qt,ge,Ds="Prérequis",Ft,Mt,Ht,ve,Os="Dès maintenant, je pars du principe que vous êtes à l’aise avec l’environnement SuperCollider et que vous avez au moins quelques rudiments de son utilisation. Il n’est pas nécessaire d’en connaître beaucoup mais au moins de savoir évaluer du code, naviguer dans les fichiers d’aide et de maîtriser quelques raccourcis clavier. Le reste viendra naturellement en pratiquant. Voici quelques suggestions pour découvrir SuperCollider et son utilisation :",Pt,be,Us=`
  • se familiariser avec chaque élément de l’interface (s.scope, +s.freqscope, s.gui)
  • se familiariser avec la documentation intégrée, lire les guides disponibles
  • apprendre comment contrôler le serveur (s, Server.default) et l’interpréteur
    • démarrer et arrêter le serveur
    • recompiler la librairie / redémarrer l’interpréteur
  • apprendre la syntaxe de base d’une SynthDef (définition de synthèse)
  • apprendre à jouer avec la librairie des patterns (Pbind, Pseq, etc)
  • `,Et,he,Gs="Paramétrage du serveur",zt,$t,Rt,ke,Vs=`Nous allons maintenant commencer à travailler sur un fichier de lancement +réutilisable pour SuperCollider. Créez un fichier nommé startup.scd ou +tout autre nom qui vous permettra de l’identifier facilement.`,Bt,jt,It,xe,Ns="Choisir une interface audio",Dt,Ot,Ut,Ce,Js="Pour connaître le nom des périphériques audio disponibles :",Gt,_e,Vt,Ua=`ServerOptions.devices; // Tout ce qui est disponible +ServerOptions.inDevices; // Les entrées uniquement +ServerOptions.outDevices; // Les sorties uniquement`,Nt,we,Qs="Il est possible de spécifier une entrée et une sortie différente :",Jt,ye,Qt,Ga=`Server.default.options.inDevice_("Built-in Microph"); +Server.default.options.outDevice_("Built-in Output");`,Wt,Se,Ws="On peut aussi utiliser le même device pour l’entrée et la sortie :",Zt,Le,Xt,Va=`s.options.device = "BlackHole 16ch"; // Choix de l'interface +Server.default.options.device_("BlackHole 16ch"); // Alternative`,Yt,Kt,en,Te,Zs=`Pour appliquer les modifications, il sera nécessaire de redémarrer le serveur. +Veillez à ce que votre entrée et votre sortie audio soient à la même fréquence +d’échantillonnage (sampling rate). Si ce n’est pas le cas, le serveur refusera +de démarrer, ce qui est une erreur très courante. Paramétrez votre fréquence +sur 44100hz ou 48000hz.`,tn,nn,sn,Ae,Xs=`Note : si vous avez pour habitude d’utiliser des écouteurs ou haut-parleurs +Bluetooth, les OS modernes ont tendance à changer automatiquement la +fréquence d’échantillonnage à la connexion/déconnexion. Il en va de même des +micros et carte sons externes.`,an,ln,rn,qe,Ys="Router le son de SuperCollider vers un autre logiciel",un,on,pn,Fe,Ks='Il est tout à fait possible d’utiliser SuperCollider comme source principale et de router ensuite le son vers un autre logiciel pour le traitement. Cela vous permettra d’enregistrer plus facilement en multipiste, de disposer d’effets ou de synthétiseurs supplémentaires, etc. Vous pourrez aussi contrôler une partie de votre dispositif en MIDI ou OSC directement depuis SuperCollider. Pour pouvoir router librement les signaux sortants de SuperCollider, il est préférable d’utiliser une interface virtuelle comme BlackHole (cross-platform), Loopback (MacOS, payant), Jack (cross-platform) ou VB-Audio VoiceMeeter (Windows, payant). Ces logiciels permettent de créer des bus audio virtuels qui peuvent être utilisés comme entrée ou sortie par SuperCollider aussi bien que par n’importe quel autre logiciel. L’utilisation de bus audios virtuels offre une grande flexibilité et je recommande de prendre l’habitude de les utiliser.',cn,dn,mn,Me,ea=`1) Choisir comme entrée/sortie une interface virtuelle (BlackHole, Loopback, +etc).`,fn,He,ta=`2) Choisir comme entrée dans le logiciel de traitement le bus virtuel que vous +venez de créer.`,gn,Pe,na="3) Traiter / enregistrer le son canal par canal dans votre logiciel.",vn,bn,hn,Ee,sa='Routage de SuperCollider dans Reaper',kn,xn,Cn,ze,aa="Protéger ses oreilles",_n,wn,yn,$e,la=`SuperCollider vous permet de manipuler le son sans aucune restriction. C’est très utile mais c’est aussi assez dangereux non seulement +pour vous mais aussi pour votre public si vous vous produisez sur scène : +larsens, clipping, explosion du volume, etc. Heureusement, ce problème est +connu et il existe des moyens efficaces de se protéger. Nous allons utiliser le +système de plugins interne pour installer un Quark très utile. Avec la +commande suivante, installez BatLib:`,Sn,Re,Ln,Na='Quarks.install("https://github.com/supercollider-quarks/BatLib")',Tn,Be,ia=`Recompilez ensuite la librairie et vous pourrez utiliser le +StageLimiter. Il vous sauvera sans doute la vie de nombreuses fois. Vous +verrez comment on le démarre dans le récapitulatif plus bas. TLDR, la commande +est :`,An,je,qn,Ja='StageLimiter.activate;',Fn,Ie,ra=`Si vous routez le son de SuperCollider vers une autre application, n’hésitez +pas à installer des protections similaires dans cette application (limiter, +etc).`,Mn,Hn,Pn,De,ua="Choisir un dossier de stockage",En,zn,$n,Oe,oa=`Plutôt que de tout stocker dans le dossier par défaut, je préfère utiliser un +dossier qui contient tout ce dont j’ai besoin pour travailler : configuration, +définitions de synthèse, échantillons sonores. Cela permet de n’avoir qu’une +seule route à retenir si le système est relativement unifié. J’ai choisi de tout +stocker dans .config/livecoding/, ce qui est une route assez prévisible pour +tout ceux qui sont habitués à utiliser le terminal sur MacOS / Linux. +Voici à quoi ressemble mon dossier :`,Rn,Ue,Bn,Qa=`. +├── Configuration.scd +├── README.md +├── Synthdefs.scd +└── samples`,jn,Ge,In,Dn,On,Ve,pa=`Toute la configuration sera chargée à partir de la route +/Users/bubo/.config/livecoding. Il vous faudra changer ce chemin pour que cela +cole avec le dossier que vous aurez choisi. Pareillement, vous n’êtes pas +obligés de suivre cette étape qui repose uniquement sur une préférence +personnelle.`,Un,Gn,Vn,Ne,ca="Chargement automatique des échantillons",Nn,Jn,Qn,Je,da='Plutôt que de charger les échantillons sonores au cas par cas, en précisant chaque chemin individuellement, je préfère automatiquement charger une grande bibliothèque d’échantillons. Par défaut, il n’existe aucun mécanisme permettant de gérer cela. Beaucoup de musiciens ont toutefois trouvé des solutions élégantes et assez minimales. Je me suis fié à la technique utilisé par Scott Carver. Il utilise une série d’extensions conçues spécialement par ses soins.',Wn,Zn,Xn,Qe,ma="Pour installer les Quarks, on utilise une nouvelle fois la commande Quarks.install :",Yn,We,Kn,Wa=`Quarks.install("https://github.com/scztt/Require.quark"); +Quarks.install("https://github.com/scztt/Singleton.quark");`,es,ts,ns,Ze,fa='Une fois que cela est fait, il nous reste à installer la pièce finale, SAMP, qui est mentionnée dans un topic de discussion du forum SuperCollider. Il vous faudra créer ce fichier dans le dossier Extensions. Vous pouvez y accéder dans votre dossier de configuration SuperCollider (dépend de l’OS). Pour obtenir le chemin vers ce dossier, évaluez le code suivant dans SuperCollider :',ss,Xe,as,Za='Platform.userExtensionDir',ls,Ye,ga=`Créez ensuite SAMP.sc dans le dossier Extensions et collez le code du +lien précédemment ouvert. C’est tout ce dont vous avez besoin. Fermez tout et +recompilez la librairie une nouvelle fois. Nous détaillerons ultérieurement l’utilisation de SAMP pour gérer vos échantillons. Sachez que vous y avez maintenant accès !`,is,rs,us,Ke,va="Note : SAMP permet de réaliser un lazy loading des échantillons. Il s’agit d’une technique qui permet de ne pas surcharger d’entrée de jeu la RAM de votre ordinateur en mettant en cache trop d’échantillons. L’utilisation des ressources sera progressive, les échantillons étant chargés uniquement lorsque l’utilisateur les requiert.",os,ps,cs,et,ba="Récapitulatif",ds,ms,fs,tt,ha="Voici le code complet que j’utilise pour le démarrage et la configuration d’un serveur audio minimal pour le live coding :",gs,nt,vs,Xa=`( + s.options.numBuffers = 1024 * 128; // Nombre de buffers disponibles pour stocker des samples + s.options.memSize = 8192 * 64; // Mémoire disponible pour le serveur + s.options.numWireBufs = 2048; // Augmenter ce nombre si "exceeded number of interconnect buffers" + s.options.maxNodes = 1024 * 32; // Changer cette valeur si le son saute avec le message "too many nodes" + s.options.device = "BlackHole 16ch"; // Choix de l'interface audio à utiliser + s.options.numOutputBusChannels = 2; // Indiquer le nombre de sorties de son interface audio + s.options.numInputBusChannels = 2; // Indiquer le nombre d'entrées de son interface audio + p=ProxySpace.push(s.boot); // Démarrage du serveur dans un ProxySpace (JITLIB) + p.makeTempoClock; // Gestion du tempo + p.clock.tempo = 120/60; + SAMP.root = "/Users/bubo/.config/livecoding/samples/"; // Chemin vers les samples + SAMP.lazyLoading = true; // Chargement paresseux (permet de ne pas remplir la mémoire pour rien) + s.waitForBoot({ + "/Users/bubo/.config/livecoding/Synthdefs.scd".load; // Chargement des synthétiseurs + StageLimiter.activate; // StageLimiter pour les oreilles + "== 💻 LIVE CODING PRÊT 💻 == ".postln; + }); +)`,bs,st,ka="Sauvegardez cet extrait de code dans un fichier .scd situé dans votre dossier de stockage. Vous pourrez ensuite l’évaluer à chaque fois que vous voudrez démarrer à l’aide de la commande suivante qu’il vous faudra évaluer dans l’interpréteur :",hs,at,ks,Ya='"/Users/bubo/.config/livecoding/Configuration.scd".load;',xs,lt,xa="Si vous souhaitez démarrer SuperCollider avec cette configuration par défaut, vous pouvez également tirer parti du fichier de démarrage, qui s’exécute automatiquement à l’ouverture de SCIDe. Ce dernier se situe dans votre dossier de configuration SuperCollider. Vous pouvez le trouver en évaluant le code suivant :",Cs,it,_s,Ka='Platform.userAppSupportDir',ws,rt,Ca=`Il devrait exister un fichier startup.scd que vous pouvez remplir avec la +configuration ci-dessus, en adaptant les chemins.`,ys,ut,_a="Conclusion",Ss,ot,wa=`Cette configuration sera amenée à évoluer et pourra même faire l’objet d’une +refonte complète lorsque vous serez amenés à pré-charger d’autres composants : +synthétiseurs, effets pré-déclarés, etc. Nous y reviendrons.`,Ls;return j=new Ba({props:{info:`Ce guide est une approche personnelle de SuperCollider. Je ne +suis pas particulièrement expert sur le sujet et j'accueille volontiers toutes +les suggestions pour améliorer cette série d'articles.`,markdown:"false"}}),Ge=new Ba({props:{info:"Ce graphe est généré avec la commande tree -L 1",markdown:"false"}}),{c(){y=u("h2"),y.textContent=m,h=i(),w=u("p"),w.innerHTML=x,L=i(),f=u("br"),q=i(),H=u("p"),H.innerHTML=te,G=i(),D=u("br"),Y=i(),As(j.$$.fragment),T=i(),C=u("br"),A=i(),a=u("p"),a.innerHTML=l,p=i(),c=u("br"),d=i(),g=u("h2"),g.textContent=k,v=i(),_=u("p"),_.innerHTML=F,P=i(),ne=u("br"),se=i(),Q=u("p"),Q.innerHTML=dt,ae=i(),S=u("p"),S.innerHTML=E,O=i(),W=u("br"),M=i(),Z=u("p"),Z.innerHTML=U,V=i(),I=u("ul"),I.innerHTML=le,K=i(),N=u("p"),N.innerHTML=pt,X=i(),ct=u("br"),ee=i(),ie=u("h2"),ie.textContent=Es,mt=i(),re=u("p"),re.innerHTML=zs,ft=i(),ue=u("ul"),ue.innerHTML=$s,gt=i(),vt=u("br"),bt=i(),oe=u("p"),oe.innerHTML=Rs,ht=i(),pe=u("pre"),kt=new z(!1),xt=i(),ce=u("p"),ce.textContent=Bs,Ct=i(),de=u("pre"),_t=new z(!1),wt=i(),me=u("p"),me.innerHTML=js,yt=i(),St=u("br"),Lt=i(),fe=u("p"),fe.innerHTML=Is,Tt=i(),At=u("br"),qt=i(),ge=u("h2"),ge.textContent=Ds,Ft=i(),Mt=u("br"),Ht=i(),ve=u("p"),ve.innerHTML=Os,Pt=i(),be=u("ul"),be.innerHTML=Us,Et=i(),he=u("h2"),he.textContent=Gs,zt=i(),$t=u("br"),Rt=i(),ke=u("p"),ke.innerHTML=Vs,Bt=i(),jt=u("br"),It=i(),xe=u("h3"),xe.textContent=Ns,Dt=i(),Ot=u("br"),Ut=i(),Ce=u("p"),Ce.textContent=Js,Gt=i(),_e=u("pre"),Vt=new z(!1),Nt=i(),we=u("p"),we.textContent=Qs,Jt=i(),ye=u("pre"),Qt=new z(!1),Wt=i(),Se=u("p"),Se.innerHTML=Ws,Zt=i(),Le=u("pre"),Xt=new z(!1),Yt=i(),Kt=u("br"),en=i(),Te=u("p"),Te.innerHTML=Zs,tn=i(),nn=u("br"),sn=i(),Ae=u("p"),Ae.innerHTML=Xs,an=i(),ln=u("br"),rn=i(),qe=u("h3"),qe.textContent=Ys,un=i(),on=u("br"),pn=i(),Fe=u("p"),Fe.innerHTML=Ks,cn=i(),dn=u("br"),mn=i(),Me=u("p"),Me.textContent=ea,fn=i(),He=u("p"),He.textContent=ta,gn=i(),Pe=u("p"),Pe.textContent=na,vn=i(),bn=u("br"),hn=i(),Ee=u("p"),Ee.innerHTML=sa,kn=i(),xn=u("br"),Cn=i(),ze=u("h3"),ze.textContent=aa,_n=i(),wn=u("br"),yn=i(),$e=u("p"),$e.innerHTML=la,Sn=i(),Re=u("pre"),Ln=new z(!1),Tn=i(),Be=u("p"),Be.innerHTML=ia,An=i(),je=u("pre"),qn=new z(!1),Fn=i(),Ie=u("p"),Ie.innerHTML=ra,Mn=i(),Hn=u("br"),Pn=i(),De=u("h3"),De.textContent=ua,En=i(),zn=u("br"),$n=i(),Oe=u("p"),Oe.innerHTML=oa,Rn=i(),Ue=u("pre"),Bn=new z(!1),jn=i(),As(Ge.$$.fragment),In=i(),Dn=u("br"),On=i(),Ve=u("p"),Ve.innerHTML=pa,Un=i(),Gn=u("br"),Vn=i(),Ne=u("h3"),Ne.textContent=ca,Nn=i(),Jn=u("br"),Qn=i(),Je=u("p"),Je.innerHTML=da,Wn=i(),Zn=u("br"),Xn=i(),Qe=u("p"),Qe.innerHTML=ma,Yn=i(),We=u("pre"),Kn=new z(!1),es=i(),ts=u("br"),ns=i(),Ze=u("p"),Ze.innerHTML=fa,ss=i(),Xe=u("pre"),as=new z(!1),ls=i(),Ye=u("p"),Ye.innerHTML=ga,is=i(),rs=u("br"),us=i(),Ke=u("p"),Ke.innerHTML=va,os=i(),ps=u("br"),cs=i(),et=u("h3"),et.textContent=ba,ds=i(),ms=u("br"),fs=i(),tt=u("p"),tt.innerHTML=ha,gs=i(),nt=u("pre"),vs=new z(!1),bs=i(),st=u("p"),st.innerHTML=ka,hs=i(),at=u("pre"),ks=new z(!1),xs=i(),lt=u("p"),lt.innerHTML=xa,Cs=i(),it=u("pre"),_s=new z(!1),ws=i(),rt=u("p"),rt.innerHTML=Ca,ys=i(),ut=u("h2"),ut.textContent=_a,Ss=i(),ot=u("p"),ot.textContent=wa,this.h()},l(e){y=o(e,"H2",{"data-svelte-h":!0}),b(y)!=="svelte-1ukekoe"&&(y.textContent=m),h=r(e),w=o(e,"P",{"data-svelte-h":!0}),b(w)!=="svelte-7rkpty"&&(w.innerHTML=x),L=r(e),f=o(e,"BR",{}),q=r(e),H=o(e,"P",{"data-svelte-h":!0}),b(H)!=="svelte-1rjzs2d"&&(H.innerHTML=te),G=r(e),D=o(e,"BR",{}),Y=r(e),qs(j.$$.fragment,e),T=r(e),C=o(e,"BR",{}),A=r(e),a=o(e,"P",{"data-svelte-h":!0}),b(a)!=="svelte-50dijs"&&(a.innerHTML=l),p=r(e),c=o(e,"BR",{}),d=r(e),g=o(e,"H2",{"data-svelte-h":!0}),b(g)!=="svelte-xnmkjo"&&(g.textContent=k),v=r(e),_=o(e,"P",{"data-svelte-h":!0}),b(_)!=="svelte-1rinzxc"&&(_.innerHTML=F),P=r(e),ne=o(e,"BR",{}),se=r(e),Q=o(e,"P",{"data-svelte-h":!0}),b(Q)!=="svelte-d8v93c"&&(Q.innerHTML=dt),ae=r(e),S=o(e,"P",{"data-svelte-h":!0}),b(S)!=="svelte-1takps0"&&(S.innerHTML=E),O=r(e),W=o(e,"BR",{}),M=r(e),Z=o(e,"P",{"data-svelte-h":!0}),b(Z)!=="svelte-1vyl27o"&&(Z.innerHTML=U),V=r(e),I=o(e,"UL",{"data-svelte-h":!0}),b(I)!=="svelte-hv4bkw"&&(I.innerHTML=le),K=r(e),N=o(e,"P",{"data-svelte-h":!0}),b(N)!=="svelte-3smba5"&&(N.innerHTML=pt),X=r(e),ct=o(e,"BR",{}),ee=r(e),ie=o(e,"H2",{"data-svelte-h":!0}),b(ie)!=="svelte-hua5op"&&(ie.textContent=Es),mt=r(e),re=o(e,"P",{"data-svelte-h":!0}),b(re)!=="svelte-1bj8gjt"&&(re.innerHTML=zs),ft=r(e),ue=o(e,"UL",{"data-svelte-h":!0}),b(ue)!=="svelte-8eutst"&&(ue.innerHTML=$s),gt=r(e),vt=o(e,"BR",{}),bt=r(e),oe=o(e,"P",{"data-svelte-h":!0}),b(oe)!=="svelte-oa7hms"&&(oe.innerHTML=Rs),ht=r(e),pe=o(e,"PRE",{class:!0});var n=$(pe);kt=R(n,!1),n.forEach(t),xt=r(e),ce=o(e,"P",{"data-svelte-h":!0}),b(ce)!=="svelte-51uwhi"&&(ce.textContent=Bs),Ct=r(e),de=o(e,"PRE",{class:!0});var ya=$(de);_t=R(ya,!1),ya.forEach(t),wt=r(e),me=o(e,"P",{"data-svelte-h":!0}),b(me)!=="svelte-10i0i02"&&(me.innerHTML=js),yt=r(e),St=o(e,"BR",{}),Lt=r(e),fe=o(e,"P",{"data-svelte-h":!0}),b(fe)!=="svelte-1xrvjb"&&(fe.innerHTML=Is),Tt=r(e),At=o(e,"BR",{}),qt=r(e),ge=o(e,"H2",{"data-svelte-h":!0}),b(ge)!=="svelte-11x115w"&&(ge.textContent=Ds),Ft=r(e),Mt=o(e,"BR",{}),Ht=r(e),ve=o(e,"P",{"data-svelte-h":!0}),b(ve)!=="svelte-oiiynv"&&(ve.innerHTML=Os),Pt=r(e),be=o(e,"UL",{"data-svelte-h":!0}),b(be)!=="svelte-1kykvor"&&(be.innerHTML=Us),Et=r(e),he=o(e,"H2",{"data-svelte-h":!0}),b(he)!=="svelte-1gkj9qe"&&(he.textContent=Gs),zt=r(e),$t=o(e,"BR",{}),Rt=r(e),ke=o(e,"P",{"data-svelte-h":!0}),b(ke)!=="svelte-89t05y"&&(ke.innerHTML=Vs),Bt=r(e),jt=o(e,"BR",{}),It=r(e),xe=o(e,"H3",{"data-svelte-h":!0}),b(xe)!=="svelte-tt5viu"&&(xe.textContent=Ns),Dt=r(e),Ot=o(e,"BR",{}),Ut=r(e),Ce=o(e,"P",{"data-svelte-h":!0}),b(Ce)!=="svelte-1b1pdsx"&&(Ce.textContent=Js),Gt=r(e),_e=o(e,"PRE",{class:!0});var Sa=$(_e);Vt=R(Sa,!1),Sa.forEach(t),Nt=r(e),we=o(e,"P",{"data-svelte-h":!0}),b(we)!=="svelte-zxgqi1"&&(we.textContent=Qs),Jt=r(e),ye=o(e,"PRE",{class:!0});var La=$(ye);Qt=R(La,!1),La.forEach(t),Wt=r(e),Se=o(e,"P",{"data-svelte-h":!0}),b(Se)!=="svelte-1ph5p4m"&&(Se.innerHTML=Ws),Zt=r(e),Le=o(e,"PRE",{class:!0});var Ta=$(Le);Xt=R(Ta,!1),Ta.forEach(t),Yt=r(e),Kt=o(e,"BR",{}),en=r(e),Te=o(e,"P",{"data-svelte-h":!0}),b(Te)!=="svelte-1my7crh"&&(Te.innerHTML=Zs),tn=r(e),nn=o(e,"BR",{}),sn=r(e),Ae=o(e,"P",{"data-svelte-h":!0}),b(Ae)!=="svelte-ysw906"&&(Ae.innerHTML=Xs),an=r(e),ln=o(e,"BR",{}),rn=r(e),qe=o(e,"H3",{"data-svelte-h":!0}),b(qe)!=="svelte-kfth7w"&&(qe.textContent=Ys),un=r(e),on=o(e,"BR",{}),pn=r(e),Fe=o(e,"P",{"data-svelte-h":!0}),b(Fe)!=="svelte-aiy4wh"&&(Fe.innerHTML=Ks),cn=r(e),dn=o(e,"BR",{}),mn=r(e),Me=o(e,"P",{"data-svelte-h":!0}),b(Me)!=="svelte-nb5dha"&&(Me.textContent=ea),fn=r(e),He=o(e,"P",{"data-svelte-h":!0}),b(He)!=="svelte-uv9hed"&&(He.textContent=ta),gn=r(e),Pe=o(e,"P",{"data-svelte-h":!0}),b(Pe)!=="svelte-1edr512"&&(Pe.textContent=na),vn=r(e),bn=o(e,"BR",{}),hn=r(e),Ee=o(e,"P",{"data-svelte-h":!0}),b(Ee)!=="svelte-fbrdfo"&&(Ee.innerHTML=sa),kn=r(e),xn=o(e,"BR",{}),Cn=r(e),ze=o(e,"H3",{"data-svelte-h":!0}),b(ze)!=="svelte-4wsstc"&&(ze.textContent=aa),_n=r(e),wn=o(e,"BR",{}),yn=r(e),$e=o(e,"P",{"data-svelte-h":!0}),b($e)!=="svelte-1jfe1ue"&&($e.innerHTML=la),Sn=r(e),Re=o(e,"PRE",{class:!0});var Aa=$(Re);Ln=R(Aa,!1),Aa.forEach(t),Tn=r(e),Be=o(e,"P",{"data-svelte-h":!0}),b(Be)!=="svelte-1xdvwf3"&&(Be.innerHTML=ia),An=r(e),je=o(e,"PRE",{class:!0});var qa=$(je);qn=R(qa,!1),qa.forEach(t),Fn=r(e),Ie=o(e,"P",{"data-svelte-h":!0}),b(Ie)!=="svelte-gq30x"&&(Ie.innerHTML=ra),Mn=r(e),Hn=o(e,"BR",{}),Pn=r(e),De=o(e,"H3",{"data-svelte-h":!0}),b(De)!=="svelte-eqy1p7"&&(De.textContent=ua),En=r(e),zn=o(e,"BR",{}),$n=r(e),Oe=o(e,"P",{"data-svelte-h":!0}),b(Oe)!=="svelte-1izbaiv"&&(Oe.innerHTML=oa),Rn=r(e),Ue=o(e,"PRE",{class:!0});var Fa=$(Ue);Bn=R(Fa,!1),Fa.forEach(t),jn=r(e),qs(Ge.$$.fragment,e),In=r(e),Dn=o(e,"BR",{}),On=r(e),Ve=o(e,"P",{"data-svelte-h":!0}),b(Ve)!=="svelte-835hap"&&(Ve.innerHTML=pa),Un=r(e),Gn=o(e,"BR",{}),Vn=r(e),Ne=o(e,"H3",{"data-svelte-h":!0}),b(Ne)!=="svelte-9mx1vr"&&(Ne.textContent=ca),Nn=r(e),Jn=o(e,"BR",{}),Qn=r(e),Je=o(e,"P",{"data-svelte-h":!0}),b(Je)!=="svelte-nmdp3e"&&(Je.innerHTML=da),Wn=r(e),Zn=o(e,"BR",{}),Xn=r(e),Qe=o(e,"P",{"data-svelte-h":!0}),b(Qe)!=="svelte-1xxxj79"&&(Qe.innerHTML=ma),Yn=r(e),We=o(e,"PRE",{class:!0});var Ma=$(We);Kn=R(Ma,!1),Ma.forEach(t),es=r(e),ts=o(e,"BR",{}),ns=r(e),Ze=o(e,"P",{"data-svelte-h":!0}),b(Ze)!=="svelte-broz1s"&&(Ze.innerHTML=fa),ss=r(e),Xe=o(e,"PRE",{class:!0});var Ha=$(Xe);as=R(Ha,!1),Ha.forEach(t),ls=r(e),Ye=o(e,"P",{"data-svelte-h":!0}),b(Ye)!=="svelte-1kgbl5n"&&(Ye.innerHTML=ga),is=r(e),rs=o(e,"BR",{}),us=r(e),Ke=o(e,"P",{"data-svelte-h":!0}),b(Ke)!=="svelte-j6tawo"&&(Ke.innerHTML=va),os=r(e),ps=o(e,"BR",{}),cs=r(e),et=o(e,"H3",{"data-svelte-h":!0}),b(et)!=="svelte-ri7iuh"&&(et.textContent=ba),ds=r(e),ms=o(e,"BR",{}),fs=r(e),tt=o(e,"P",{"data-svelte-h":!0}),b(tt)!=="svelte-9svk99"&&(tt.innerHTML=ha),gs=r(e),nt=o(e,"PRE",{class:!0});var Pa=$(nt);vs=R(Pa,!1),Pa.forEach(t),bs=r(e),st=o(e,"P",{"data-svelte-h":!0}),b(st)!=="svelte-4w91o5"&&(st.innerHTML=ka),hs=r(e),at=o(e,"PRE",{class:!0});var Ea=$(at);ks=R(Ea,!1),Ea.forEach(t),xs=r(e),lt=o(e,"P",{"data-svelte-h":!0}),b(lt)!=="svelte-1ofmlv6"&&(lt.innerHTML=xa),Cs=r(e),it=o(e,"PRE",{class:!0});var za=$(it);_s=R(za,!1),za.forEach(t),ws=r(e),rt=o(e,"P",{"data-svelte-h":!0}),b(rt)!=="svelte-16ctipw"&&(rt.innerHTML=Ca),ys=r(e),ut=o(e,"H2",{"data-svelte-h":!0}),b(ut)!=="svelte-grw4hp"&&(ut.textContent=_a),Ss=r(e),ot=o(e,"P",{"data-svelte-h":!0}),b(ot)!=="svelte-qw3nrf"&&(ot.textContent=wa),this.h()},h(){kt.a=null,B(pe,"class","language-js"),_t.a=null,B(de,"class","language-js"),Vt.a=null,B(_e,"class","language-supercollider"),Qt.a=null,B(ye,"class","language-supercollider"),Xt.a=null,B(Le,"class","language-supercollider"),Ln.a=null,B(Re,"class","language-supercollider"),qn.a=null,B(je,"class","language-supercollider"),Bn.a=null,B(Ue,"class","language-bash"),Kn.a=null,B(We,"class","language-supercollider"),as.a=null,B(Xe,"class","language-supercollider"),vs.a=null,B(nt,"class","language-supercollider"),ks.a=null,B(at,"class","language-supercollider"),_s.a=null,B(it,"class","language-supercollider")},m(e,n){s(e,y,n),s(e,h,n),s(e,w,n),s(e,L,n),s(e,f,n),s(e,q,n),s(e,H,n),s(e,G,n),s(e,D,n),s(e,Y,n),Fs(j,e,n),s(e,T,n),s(e,C,n),s(e,A,n),s(e,a,n),s(e,p,n),s(e,c,n),s(e,d,n),s(e,g,n),s(e,v,n),s(e,_,n),s(e,P,n),s(e,ne,n),s(e,se,n),s(e,Q,n),s(e,ae,n),s(e,S,n),s(e,O,n),s(e,W,n),s(e,M,n),s(e,Z,n),s(e,V,n),s(e,I,n),s(e,K,n),s(e,N,n),s(e,X,n),s(e,ct,n),s(e,ee,n),s(e,ie,n),s(e,mt,n),s(e,re,n),s(e,ft,n),s(e,ue,n),s(e,gt,n),s(e,vt,n),s(e,bt,n),s(e,oe,n),s(e,ht,n),s(e,pe,n),kt.m(Da,pe),s(e,xt,n),s(e,ce,n),s(e,Ct,n),s(e,de,n),_t.m(Oa,de),s(e,wt,n),s(e,me,n),s(e,yt,n),s(e,St,n),s(e,Lt,n),s(e,fe,n),s(e,Tt,n),s(e,At,n),s(e,qt,n),s(e,ge,n),s(e,Ft,n),s(e,Mt,n),s(e,Ht,n),s(e,ve,n),s(e,Pt,n),s(e,be,n),s(e,Et,n),s(e,he,n),s(e,zt,n),s(e,$t,n),s(e,Rt,n),s(e,ke,n),s(e,Bt,n),s(e,jt,n),s(e,It,n),s(e,xe,n),s(e,Dt,n),s(e,Ot,n),s(e,Ut,n),s(e,Ce,n),s(e,Gt,n),s(e,_e,n),Vt.m(Ua,_e),s(e,Nt,n),s(e,we,n),s(e,Jt,n),s(e,ye,n),Qt.m(Ga,ye),s(e,Wt,n),s(e,Se,n),s(e,Zt,n),s(e,Le,n),Xt.m(Va,Le),s(e,Yt,n),s(e,Kt,n),s(e,en,n),s(e,Te,n),s(e,tn,n),s(e,nn,n),s(e,sn,n),s(e,Ae,n),s(e,an,n),s(e,ln,n),s(e,rn,n),s(e,qe,n),s(e,un,n),s(e,on,n),s(e,pn,n),s(e,Fe,n),s(e,cn,n),s(e,dn,n),s(e,mn,n),s(e,Me,n),s(e,fn,n),s(e,He,n),s(e,gn,n),s(e,Pe,n),s(e,vn,n),s(e,bn,n),s(e,hn,n),s(e,Ee,n),s(e,kn,n),s(e,xn,n),s(e,Cn,n),s(e,ze,n),s(e,_n,n),s(e,wn,n),s(e,yn,n),s(e,$e,n),s(e,Sn,n),s(e,Re,n),Ln.m(Na,Re),s(e,Tn,n),s(e,Be,n),s(e,An,n),s(e,je,n),qn.m(Ja,je),s(e,Fn,n),s(e,Ie,n),s(e,Mn,n),s(e,Hn,n),s(e,Pn,n),s(e,De,n),s(e,En,n),s(e,zn,n),s(e,$n,n),s(e,Oe,n),s(e,Rn,n),s(e,Ue,n),Bn.m(Qa,Ue),s(e,jn,n),Fs(Ge,e,n),s(e,In,n),s(e,Dn,n),s(e,On,n),s(e,Ve,n),s(e,Un,n),s(e,Gn,n),s(e,Vn,n),s(e,Ne,n),s(e,Nn,n),s(e,Jn,n),s(e,Qn,n),s(e,Je,n),s(e,Wn,n),s(e,Zn,n),s(e,Xn,n),s(e,Qe,n),s(e,Yn,n),s(e,We,n),Kn.m(Wa,We),s(e,es,n),s(e,ts,n),s(e,ns,n),s(e,Ze,n),s(e,ss,n),s(e,Xe,n),as.m(Za,Xe),s(e,ls,n),s(e,Ye,n),s(e,is,n),s(e,rs,n),s(e,us,n),s(e,Ke,n),s(e,os,n),s(e,ps,n),s(e,cs,n),s(e,et,n),s(e,ds,n),s(e,ms,n),s(e,fs,n),s(e,tt,n),s(e,gs,n),s(e,nt,n),vs.m(Xa,nt),s(e,bs,n),s(e,st,n),s(e,hs,n),s(e,at,n),ks.m(Ya,at),s(e,xs,n),s(e,lt,n),s(e,Cs,n),s(e,it,n),_s.m(Ka,it),s(e,ws,n),s(e,rt,n),s(e,ys,n),s(e,ut,n),s(e,Ss,n),s(e,ot,n),Ls=!0},p:tl,i(e){Ls||(Ms(j.$$.fragment,e),Ms(Ge.$$.fragment,e),Ls=!0)},o(e){Hs(j.$$.fragment,e),Hs(Ge.$$.fragment,e),Ls=!1},d(e){e&&(t(y),t(h),t(w),t(L),t(f),t(q),t(H),t(G),t(D),t(Y),t(T),t(C),t(A),t(a),t(p),t(c),t(d),t(g),t(v),t(_),t(P),t(ne),t(se),t(Q),t(ae),t(S),t(O),t(W),t(M),t(Z),t(V),t(I),t(K),t(N),t(X),t(ct),t(ee),t(ie),t(mt),t(re),t(ft),t(ue),t(gt),t(vt),t(bt),t(oe),t(ht),t(pe),t(xt),t(ce),t(Ct),t(de),t(wt),t(me),t(yt),t(St),t(Lt),t(fe),t(Tt),t(At),t(qt),t(ge),t(Ft),t(Mt),t(Ht),t(ve),t(Pt),t(be),t(Et),t(he),t(zt),t($t),t(Rt),t(ke),t(Bt),t(jt),t(It),t(xe),t(Dt),t(Ot),t(Ut),t(Ce),t(Gt),t(_e),t(Nt),t(we),t(Jt),t(ye),t(Wt),t(Se),t(Zt),t(Le),t(Yt),t(Kt),t(en),t(Te),t(tn),t(nn),t(sn),t(Ae),t(an),t(ln),t(rn),t(qe),t(un),t(on),t(pn),t(Fe),t(cn),t(dn),t(mn),t(Me),t(fn),t(He),t(gn),t(Pe),t(vn),t(bn),t(hn),t(Ee),t(kn),t(xn),t(Cn),t(ze),t(_n),t(wn),t(yn),t($e),t(Sn),t(Re),t(Tn),t(Be),t(An),t(je),t(Fn),t(Ie),t(Mn),t(Hn),t(Pn),t(De),t(En),t(zn),t($n),t(Oe),t(Rn),t(Ue),t(jn),t(In),t(Dn),t(On),t(Ve),t(Un),t(Gn),t(Vn),t(Ne),t(Nn),t(Jn),t(Qn),t(Je),t(Wn),t(Zn),t(Xn),t(Qe),t(Yn),t(We),t(es),t(ts),t(ns),t(Ze),t(ss),t(Xe),t(ls),t(Ye),t(is),t(rs),t(us),t(Ke),t(os),t(ps),t(cs),t(et),t(ds),t(ms),t(fs),t(tt),t(gs),t(nt),t(bs),t(st),t(hs),t(at),t(xs),t(lt),t(Cs),t(it),t(ws),t(rt),t(ys),t(ut),t(Ss),t(ot)),Ps(j,e),Ps(Ge,e)}}}function ul(J){let y,m;const h=[J[0],Ia];let w={$$slots:{default:[rl]},$$scope:{ctx:J}};for(let x=0;x{m(0,y=Ts(Ts({},y),$a(h)))},y=$a(y),[y]}class fl extends nl{constructor(y){super(),sl(this,y,ol,ul,el,{})}}export{fl as default,Ia as metadata}; diff --git a/dist/_app/immutable/chunks/livecoding_supercollider.sLrjm2WB.js.br b/dist/_app/immutable/chunks/livecoding_supercollider.sLrjm2WB.js.br new file mode 100644 index 0000000..af1113e Binary files /dev/null and b/dist/_app/immutable/chunks/livecoding_supercollider.sLrjm2WB.js.br differ diff --git a/dist/_app/immutable/chunks/livecoding_supercollider.sLrjm2WB.js.gz b/dist/_app/immutable/chunks/livecoding_supercollider.sLrjm2WB.js.gz new file mode 100644 index 0000000..c6e4929 Binary files /dev/null and b/dist/_app/immutable/chunks/livecoding_supercollider.sLrjm2WB.js.gz differ diff --git a/dist/_app/immutable/chunks/livecoding_supercollider_2.8rv2dy6_.js b/dist/_app/immutable/chunks/livecoding_supercollider_2.8rv2dy6_.js new file mode 100644 index 0000000..9c82a5b --- /dev/null +++ b/dist/_app/immutable/chunks/livecoding_supercollider_2.8rv2dy6_.js @@ -0,0 +1,58 @@ +import{s as Fa,x as it,y as Ha,n as Va}from"./scheduler.aZRR5A_O.js";import{S as Ga,i as Aa,r as ga,u as Ma,v as Sa,d as Na,t as Oa,w as ja,g as a,s as p,H as f,h as o,x as u,c as l,j as v,C as b,f as e,l as Ka,k as r,a as t}from"./index.AIcdAWo0.js";import{G as Qa,g as Wa,a as Pa}from"./guides.RN6emr9S.js";import{I as Xa}from"./Info.bs_Ss2Q-.js";function Ya(zn){let c,L="Introduction",x,d,i="Le labyrinthe SuperCollider",m,k,rt=`

    Si vous avez lu et suivi le premier article, tout est en place et vous devriez +maintenant être prêt à jouer. L’une des qualités mais aussi l’un des défauts de SuperCollider est de ne +pas vous astreindre à suivre une route particulière concernant la manière dont il vous faut approcher la création sonore lorsque vous débutez. Le logiciel est extrêmement générique et chaque +utilisateur développe progressivement ses propres abstractions et une logique qui lui est propre. Il existe plusieurs dizaines de mécanismes +distincts et la documentation tentaculaire du logiciel recommande souvent des +approches contradictoires ou des solutions qui ne fonctionneront pas +nécessairement avec votre méthode de travail. Il est donc nécessaire d’être toujours +conscient des choix que vous avez opéré et ne pas hésiter à revenir en +arrière si ces derniers ne vous conviennent pas. SuperCollider est un logiciel +déjà ancien, et la librairie standard est si vaste qu’il est difficile de la comprendre entièrement et encore moins de la maîtriser. Il +est toutefois possible de développer une certaine expertise pour utiliser SuperCollider d’une certaine manière et de construire progressivement ses connaissances en fonction des projets.


    `,In,H,mt="JITLib et le live coding",hn,Bn,En,P,dt='L’approche que nous suivons dans ce guide repose sur la librairie JITLib. Cette librairie développée par Julian Rohrhuber est devenue si populaire qu’elle est désormais intégrée par défaut à SuperCollider lors de l’installation. Les avantages offerts par cette dernière ne sont pas évidents à saisir lorsqu’on débute sur SuperCollider. Un grand nombre d’utilisateurs l’ignorent complètement dans leur travail. La raison qui nous pousse à l’utiliser est que cette dernière est prévue, par défaut, pour permettre le live coding. Même dans ce domaine déjà très spécifique, JITLib reste encore relativement générique. Le mécanisme que la librairie implémente est très simple : JITLib permet de remplacer à chaud, en temps réel, n’importe quelle donnée (audio, information) par une information de nature similaire. Voici la traduction du premier paragraphe de la documentation :',Jn,$n,Un,_,kt="

    La programmation just in time (ou la programmation conversationnelle, le live coding, la programmation à la volée, la programmation interactive) est un paradigme qui inclut l’activité de programmation dans le déroulement du programme. Dans ce paradigme, le programme n’est pas considéré comme un outil qui est conçu avant d’être utilisé plus tard de manière productive. Plutôt, il s’agit de concevoir la conception dynamique des programmes comme une description et comme une conversation. Écrire du code devient une partie intégrante de l’expérience musicale ou de la pratique expérimentale.

    ",Dn,Fn,Vn,y,ft="JITLib intègre ce principe à SuperCollider de manière assez approfondie. On se retrouve rarement bloqué du fait d’une incompatibilité entre la librairie standard et JITLib. Par ailleurs, JITLib est si finement intégré qu’il est parfois délicat de savoir si telle ou telle fonctionnalité relève de cette librairie ou vient de l’installation standard de SuperCollider.",Gn,An,Kn,g,vt="Conseils de lecture",Qn,Wn,Xn,M,bt="Cette partie du guide est de loin la plus pénible. Elle introduit tout les concepts importants que nous manipulerons pour faire de la musique avec SuperCollider. Il s’agit en quelque sorte du solfège élémentaire pour un live coder utilisant SuperCollider. Je suis conscient que les premiers paragraphes sont particulièrement difficiles pour un utilisateur débutant. N’hésitez pas à continuer votre lecture si un détail vous échappe, vous finirez sans doute par comprendre ultérieurement par la pratique. Ne vous laissez pas arrêter par du vocabulaire ou des concepts peu familiers.",Yn,S,xt="ProxySpace et Ndefs",Zn,N,Lt="Le principe de base de la librairie",ne,ee,se,O,_t="Tout commence avec un peu de vocabulaire. JITLib introduit la notion de ProxySpace, un environnement de références vers des proxys : ”an environment of references on a server”. Une référence est un nom associé à un objet. C’est aussi simple que ~a = 2 ou ~a est un proxy et 2 un objet. Ce système fonctionne à l’aide de proxys, il nous faut donc comprendre ce qu’est un proxy. C’est une notion relativement simple, il s’agit d’un objet qui contient quelque chose.",te,ae,pe,q,qt="

    Proxy: un proxy est un contenant pour quelque chose qui tourne sur le serveur, généralement un contrôle ou un algorithme audio. C’est un objet vide ou non-vide. Un proxy peut contenir le node d’un oscillateur (cf. la suite) mais il pourrait aussi contenir un filtre audio, un synthétiseur que nous venons de créer ou même un pattern algorithmique. Le proxy englobe ce qu’il contient et réalise à notre place tout un tas d’opérations qu’il est d’ordinaire nécessaire de gérer manuellement. Par exemple, on peut remplacer le contenu d’un proxy par un autre node sans interruption du signal, supprimer le contenant d’un proxy sans pour autant supprimer la boîte elle-même.

    ",oe,le,ue,j,Tt="Un ProxySpace est un ensemble de clés et de valeurs, un grand sac dans lequel on manipule des proxy. Les clés sont des références vers des NodeProxy. Tout ceci est sans aucune importance tant que nous ne le manipulons pas pour générer du son.",ce,ie,re,w,Ct="Remplacer l’environnement par défaut par un ProxySpace",me,de,ke,R,Ht="Dans le guide précédent se trouvait une ligne assez inhabituelle, celle qui nous servait pour démarrer le serveur :",fe,z,ve,wa='p = ProxySpace.push(s.boot);',be,I,Pt="Sans entrer dans le détail, cette ligne réalise deux actions distinctes :",xe,T,yt="

    1) elle démarre le serveur audio de SuperCollider (s.boot)

    2) elle pousse l’environnement par défaut dans un ProxySpace

    ",Le,_e,qe,h,gt="Avec la méthode push, toutes les variables globales de l’environnement actuel deviennent mécaniquement des NodeProxy dans le ProxySpace. Pour s’en convaincre, il suffit de taper le nom d’une variable et d’observer la valeur de retour :",Te,Ce,He,B,Pe,Ra='~bob; // -> NodeProxy.nil(localhost, nil)',ye,E,Mt="Ce n’est pas très parlant si vous n’êtes oas habitués à SuperCollider ou à la programmation. Essayons maintenant de voir ce que cela signifie lorsque nous souhaitons manipuler du son, sans spécifiquement aborder tout les détails. Évaluez le code suivant ligne par ligne :",ge,J,Me,za=`~osc = {SinOsc.ar(200) * 0.5}; // J'évalue, rien ne se passe. Associe une fonction audio à un NodeProxy +~osc.play; // On connecte l'audio à la sortie et on joue la fonction +~osc = {SinOsc.ar(400) * 0.5}; // On remplace la fonction précédente par une autre (sans interruption !) +~osc.stop(fadeTime: 4); // On stoppe avec un joli fade-out +~osc.clear; // On libère la mémoire`,Se,Ne,Oe,$,St="Nous avons associé une fonction audio ({SinOsc.ar(200) * 0.5}) à une référence (~osc). C’est tout le principe de JITLib. Cette association peut être remplacée à tout moment sans interruption grâce au proxy. Le NodeProxy nommé ~osc accepte un grand nombre de manipulations différentes et son rôle est totalement redéfini par rapport au comportement habituel d’une variable en dehors de l’utilisation de JITLib.",je,we,Re,U,Nt="Ce n’est plus une variable, c’est un Proxy dans notre ProxySpace. La ligne ~osc.stop(fadeTime: 4) démontre aussi que les NodeProxy intègrent de nombreuses méthodes destinées à gérer l’audio: fade in, fade out, contrôle du niveau des sources : etc.",ze,Ie,he,D,Ot="Nous allons utiliser ce principe fondamental introduit par JITLib tout au long de ce guide pour contrôler tout ce que nous souhaitons / pouvons contrôler : algorithmes audio, patterns algorithmiques, effets sonores, etc. Il est essentiel de retenir ce principe du proxy car il nous permet de savoir réellement ce que nous sommes en train de manipuler à tout moment au cours du jeu : essentiellement des NodeProxy.",Be,Ee,Je,F,jt="Sans en savoir beaucoup plus, il est déjà possible de faire un petit peu de musique en s’amusant à remplacer une source par un autre :",$e,V,Ue,Ia=`~osc = {SinOsc.ar([200, 100]) * 0.5}; // On associe une source à un NodeProxy, un double oscillateur +~osc.play(fadeTime: 4); // On lance le NodeProxy avec un fade-in +~osc.fadeTime = 4; // On change le fadeTime général + +~osc = {LPF.ar(SinOsc.ar([400, 100]), SinOsc.ar(1/4).range(200,2000)) * 0.5}; // On remplace la source +~osc = {LPF.ar(SinOsc.ar([800, 350]), SinOsc.ar(1/4).range(200,2000)) * 0.5}; // On remplace la source +~osc = {LPF.ar(SinOsc.ar([200, 150]), SinOsc.ar(1/4).range(200,2000)) * 0.5}; // On remplace la source + +~osc.stop(fadeTime: 4); // Fade-out +~osc.clear; // On libère la mémoire`,De,Fe,Ve,G,wt="Même si tout reste assez primitif pour le moment, on peut déjà faire beaucoup de choses en suivant ce principe. Il est possible d’utiliser n’importe quel algorithme audio et de le mettre à jour graduellement tout au long d’une performance. Ce type de live coding centré autour de la musique à jour d’un générateur sonore se prête plutôt bien à de la musique électro-acoustique, ambient, noise, etc.",Ge,Ae,Ke,A,Rt="Les Ndefs : une autre manière de faire la même chose",Qe,We,Xe,K,zt="La technique que nous utilisons avec ProxySpace.push(s.boot) dissimule l’utilisation que nous faisons des NodeProxy. Cette fonctionnalité a été intégrée car elle permet de gagner du temps de frappe mais elle a pour désavantage de rendre plus difficilement perceptible ce que nous sommes réellement en train de faire. À première vue, il semble que ~a = 2 soit juste une assignation de variable comme dans un langage de programmation classique. Pourtant, il s’agit d’une opération qui crée/modifie un NodeProxy.",Ye,Ze,ns,Q,It="Nous occultons le fait que les variables globales de SuperCollider sont maintenant des NodeProxy. Il est possible de se passer entièrement de Proxyspace.push et de cet avantage/désagrément en utilisant les Ndefs. Il s’agit d’une préférence personnelle, presque d’ordre stylistique.",es,ss,ts,W,as,ps,os,X,ht="Le terme de NDef est un raccourci pour Node Proxy Definition. On retrouve du vocabulaire familier. C’est une autre manière de désigner exactement le même type d’objet que ce que nous manipulons depuis le début ! Seule la syntaxe diffère. Profitons-en quand même pour évoquer rapidement ce qu’est un node :",ls,us,cs,C,Bt="

    Node: un node est un objet défini en interne par le serveur audio de SuperCollider. Un synthétiseur est un node, beaucoup d’objets présents sur le serveur sont des nodes. Il s’agit d’un objet générique utilisé pour une opération audio : contrôle ou synthétiseur. C’est un objet abstrait, qu’on ne manipule jamais directement. Les fonctions audio que nous venons d’utiliser dans l’exemple précédent sont des nodes que l’on associe à un proxy. Un node tire ce nom du fait que ce sont des noeuds dans un graphe audio, des objets qui ont une position dans un graphe de traitement du signal.

    ",is,rs,ms,Y,Et="Les Ndefs ont pour avantage de ne pas se propager dans l’environnement local. Elles rendent tout un petit peu plus clair. Réécrivons l’exemple précédent en utilisant uniquement des Ndefs :",ds,Z,ks,ha=`Ndef(osc, {SinOsc.ar([200, 100]) * 0.5}); // On associe une source à un NodeProxy, un double oscillateur +Ndef(osc).play(fadeTime: 4); // On lance le NodeProxy avec un fade-in +Ndef(osc).fadeTime = 4; // On change le fadeTime général + +Ndef(osc, {LPF.ar(SinOsc.ar([400, 100]), SinOsc.ar(1/4).range(200,2000)) * 0.5}); // On remplace la source +Ndef(osc, {LPF.ar(SinOsc.ar([800, 350]), SinOsc.ar(1/4).range(200,2000)) * 0.5}); // On remplace la source +Ndef(osc, {LPF.ar(SinOsc.ar([200, 150]), SinOsc.ar(1/4).range(200,2000)) * 0.5}); // On remplace la source + +Ndef(osc).stop(fadeTime: 4); // Fade-out +Ndef(osc).clear; // On libère la mémoire`,fs,nn,Jt="C’est à vous de choisir quelle est la syntaxe que vous préférez.",vs,en,$t="Gestion des NodeProxy",bs,sn,Ut="fadeTime",xs,tn,Dt="Nous avons déjà utilisé la capacité des NodeProxy à opérer des fade-ins et des fade-outs. C’est une fonctionnalité très pratique, surtout lorsque vous manipulez des sources audio dynamiques et que vous souhaitez faire des transitions souples de l’une à l’autre. Il existe trois types de fade :",Ls,an,Ft="
  • fade-in à l’entrée : c’est un argument de la méthode .play : ~osc.play(fadeTime: 4) ou Ndef(\\osc).play(fadeTime: 4)
  • fade-in en sortie : c’est un argument de la méthode .stop ou .clear : ~osc.stop(fadeTime: 4) ou Ndef(\\osc).stop(fadeTime: 4)
  • fade général : c’est un attribut du NodeProxy que l’on contrôle avec la syntaxe ~osc.fadeTime = 4;
  • ",_s,pn,qs,Ba=`~osc = {SinOsc.ar(200) * 0.5}; // On crée une source audio + +~osc.play(fadeTime: 1); // On fait entrer doucement + +~osc.fadeTime = 12; // Transition très longue + +~osc = {SinOsc.ar(2000) * 0.5}; // Transition lente vers la fréquence voulue + +~osc.clear(fadeTime: 4); // On s'arrête`,Ts,Cs,Hs,on,Vt=".stop / .clear",Ps,ln,Gt="Les méthodes .stop et .clear ne réalisent pas la même opération :",ys,un,At="
  • .stop : déconnecte le NodeProxy du reste de la chaîne audio. Il continue à tourner (et à consommer des ressources) mais en silence ! Vous pourrez le reconnecter plus tard.
  • .clear : détruit le NodeProxy. Vous pouvez réaliser la même opération en tapant : ~osc = nil. Notez toutefois que .clear permet de spécifier un fade-out avant la destruction.
  • ",gs,cn,Kt="Si vous souhaitez vous débarrasser de tout les NodeProxy actifs, il existe cette commande :",Ms,rn,Ss,Ea='currentEnvironment.free;',Ns,mn,Qt=`Elle applique la fonction free à tout ce qui compose l’environnement global. +Puisque ce dernier est un ProxySpace, on libère tout les NodeProxy.`,Os,dn,Wt="Modifier un/des paramètres",js,kn,Xt="Vous n’êtes pas obligés de réévaluer l’algorithme dans son intégralité pour modifier une valeur sur un NodeProxy. Parfois, il est préférable de mettre à jour un paramètre sans que le fade-in et le fade-out ne s’appliquent. Ce problème sera particulièrement sensible lorsque vous utiliserez des effets tels qu’un délai ou une réverbération.",ws,Rs,zs,fn,Yt="Si vous changez uniquement de valeur en réévaluant l’algorithme en entier, cela causera des problèmes avec l’amplitude générale du signal. Cela peut aussi causer un effet de brouillon lié à la superposition de plusieurs algorithmes en cours de fade-in / fade-out. Deux méthodes existent pour mettre à jour un paramètre : .set (instantané) et .xset (progressif).",Is,vn,Zt=".set",hs,bn,na="La méthode .set met immédiatement à jour un paramètre immédiatement, dès que possible :",Bs,xn,Es,Ja=`~osc = { arg freq=200; SinOsc.ar(freq) * 0.5}; +~osc.play(fadeTime: 2); +~osc.set(\freq, 800); +~osc.set(\freq, 400); +~osc.clear(2);`,Js,Ln,ea=".xset",$s,_n,sa="La méthode .xset met immédiatement à jour un paramètre progressivement, suivant le fadeTime :",Us,qn,Ds,$a=`~osc = { arg freq=200; SinOsc.ar(freq) * 0.5}; +~osc.play(fadeTime: 2); +~osc.fadeTime = 8; // On change le fadeTime pour .xset +~osc.xset(\freq, 800); +~osc.xset(\freq, 400); +~osc.clear(2);`,Fs,Tn,ta="Contrôler plusieurs paramètres",Vs,Gs,As,Cn,aa=`Il est possible de contrôler plusieurs paramètres en une seule commande si +besoin est :`,Ks,Hn,Qs,Ua='~osc.xset(\freq, 800, amp, 0.2);',Ws,Pn,pa=`Tout dépend de ce dont vous avez besoin. Réévaluer la fonction entière peut +aussi être une stratégie intéressante dans certains cas.`,Xs,yn,oa="Communication entre NodeProxies",Ys,gn,la="On peut associer plusieurs NodeProxies pour former des algorithmes audio plus complexes et modulaires. Chaque NodeProxy peut être imaginé comme un module remplissant une fonction particulière dans un synthétiseur modulaire plus imposant. Pensez au patching dans un environnement comme Max/MSP ou Pure Data ou au patching analogique d’un synthétiseur physique.",Zs,nt,et,Mn,ua="Il est possible de définir un NodeProxy oscillateur puis un contrôle (de type LFO) pour moduler la fréquence de cet oscillateur. Voici la méthode la plus simple que vous puissiez employer :",st,Sn,tt,Da=`~source = {arg freq=400; SinOsc.ar(freq) * 0.5}; // Une source que l'on souhaite moduler +~source.play; +~source.set(\freq, 300); // On peut utiliser set pour une valeur statique +~freq = { SinOsc.ar(1/2) * 400 }; // Voici un LFO (Low Frequency Oscillator) +~source.map(\\freq, ~freq); // Utilisation de la fonction map`,at,Nn,ca=`.map possède une fonction alternative, nommée .xmap. Elle fonctionne tout +comme .set et .xset.`,pt,On,ia="Conclusion",ot,jn,ra="Dans cette section du guide, nous avons appris :",lt,wn,ma="
  • Ce qu’est un NodeProxy et un ProxySpace, l’outil de base offert par JITLib
  • La différence entre ProxySpace.push et l’utilisation explicite des NDefs
  • Comment démarrer, stopper et arrêter un NodeProxy
  • Comment contrôler le fade-in et le fade-out et la transition entre algorithmes
  • ",ut,Rn,da="Je ne fais ici qu’effleurer les différentes commandes que possèdent les NodeProxy. Si vous souhaitez en apprendre plus, allez voir la documentation. Nous utiliserons un nombre limité de méthodes au fur et à mesure, lorsque nous en aurons besoin.",ct;return W=new Xa({props:{info:"Pour être plus précis, ProxySpace.push(...) transforme le scope global en un ProxySpace. Seule les variables de a à z sont épargnées.",markdown:"false"}}),{c(){c=a("h2"),c.textContent=L,x=p(),d=a("h3"),d.innerHTML=i,m=p(),k=a("div"),k.innerHTML=rt,In=p(),H=a("h3"),H.innerHTML=mt,hn=p(),Bn=a("br"),En=p(),P=a("p"),P.innerHTML=dt,Jn=p(),$n=a("br"),Un=p(),_=a("blockquote"),_.innerHTML=kt,Dn=p(),Fn=a("br"),Vn=p(),y=a("p"),y.innerHTML=ft,Gn=p(),An=a("br"),Kn=p(),g=a("h3"),g.textContent=vt,Qn=p(),Wn=a("br"),Xn=p(),M=a("p"),M.innerHTML=bt,Yn=p(),S=a("h2"),S.innerHTML=xt,Zn=p(),N=a("h3"),N.textContent=Lt,ne=p(),ee=a("br"),se=p(),O=a("p"),O.innerHTML=_t,te=p(),ae=a("br"),pe=p(),q=a("div"),q.innerHTML=qt,oe=p(),le=a("br"),ue=p(),j=a("p"),j.innerHTML=Tt,ce=p(),ie=a("br"),re=p(),w=a("h3"),w.innerHTML=Ct,me=p(),de=a("br"),ke=p(),R=a("p"),R.textContent=Ht,fe=p(),z=a("pre"),ve=new f(!1),be=p(),I=a("p"),I.textContent=Pt,xe=p(),T=a("div"),T.innerHTML=yt,Le=p(),_e=a("br"),qe=p(),h=a("p"),h.innerHTML=gt,Te=p(),Ce=a("br"),He=p(),B=a("pre"),Pe=new f(!1),ye=p(),E=a("p"),E.innerHTML=Mt,ge=p(),J=a("pre"),Me=new f(!1),Se=p(),Ne=a("br"),Oe=p(),$=a("p"),$.innerHTML=St,je=p(),we=a("br"),Re=p(),U=a("p"),U.innerHTML=Nt,ze=p(),Ie=a("br"),he=p(),D=a("p"),D.innerHTML=Ot,Be=p(),Ee=a("br"),Je=p(),F=a("p"),F.textContent=jt,$e=p(),V=a("pre"),Ue=new f(!1),De=p(),Fe=a("br"),Ve=p(),G=a("p"),G.innerHTML=wt,Ge=p(),Ae=a("br"),Ke=p(),A=a("h3"),A.innerHTML=Rt,Qe=p(),We=a("br"),Xe=p(),K=a("p"),K.innerHTML=zt,Ye=p(),Ze=a("br"),ns=p(),Q=a("p"),Q.innerHTML=It,es=p(),ss=a("br"),ts=p(),ga(W.$$.fragment),as=p(),ps=a("br"),os=p(),X=a("p"),X.innerHTML=ht,ls=p(),us=a("br"),cs=p(),C=a("div"),C.innerHTML=Bt,is=p(),rs=a("br"),ms=p(),Y=a("p"),Y.innerHTML=Et,ds=p(),Z=a("pre"),ks=new f(!1),fs=p(),nn=a("p"),nn.textContent=Jt,vs=p(),en=a("h2"),en.innerHTML=$t,bs=p(),sn=a("h3"),sn.innerHTML=Ut,xs=p(),tn=a("p"),tn.innerHTML=Dt,Ls=p(),an=a("ul"),an.innerHTML=Ft,_s=p(),pn=a("pre"),qs=new f(!1),Ts=p(),Cs=a("br"),Hs=p(),on=a("h3"),on.innerHTML=Vt,Ps=p(),ln=a("p"),ln.innerHTML=Gt,ys=p(),un=a("ul"),un.innerHTML=At,gs=p(),cn=a("p"),cn.innerHTML=Kt,Ms=p(),rn=a("pre"),Ss=new f(!1),Ns=p(),mn=a("p"),mn.innerHTML=Qt,Os=p(),dn=a("h2"),dn.textContent=Wt,js=p(),kn=a("p"),kn.innerHTML=Xt,ws=p(),Rs=a("br"),zs=p(),fn=a("p"),fn.innerHTML=Yt,Is=p(),vn=a("h3"),vn.innerHTML=Zt,hs=p(),bn=a("p"),bn.innerHTML=na,Bs=p(),xn=a("pre"),Es=new f(!1),Js=p(),Ln=a("h3"),Ln.innerHTML=ea,$s=p(),_n=a("p"),_n.innerHTML=sa,Us=p(),qn=a("pre"),Ds=new f(!1),Fs=p(),Tn=a("h3"),Tn.textContent=ta,Vs=p(),Gs=a("br"),As=p(),Cn=a("p"),Cn.textContent=aa,Ks=p(),Hn=a("pre"),Qs=new f(!1),Ws=p(),Pn=a("p"),Pn.textContent=pa,Xs=p(),yn=a("h2"),yn.innerHTML=oa,Ys=p(),gn=a("p"),gn.innerHTML=la,Zs=p(),nt=a("br"),et=p(),Mn=a("p"),Mn.innerHTML=ua,st=p(),Sn=a("pre"),tt=new f(!1),at=p(),Nn=a("p"),Nn.innerHTML=ca,pt=p(),On=a("h2"),On.textContent=ia,ot=p(),jn=a("p"),jn.textContent=ra,lt=p(),wn=a("ul"),wn.innerHTML=ma,ut=p(),Rn=a("p"),Rn.innerHTML=da,this.h()},l(n){c=o(n,"H2",{"data-svelte-h":!0}),u(c)!=="svelte-1ukekoe"&&(c.textContent=L),x=l(n),d=o(n,"H3",{"data-svelte-h":!0}),u(d)!=="svelte-tla2tn"&&(d.innerHTML=i),m=l(n),k=o(n,"DIV",{style:!0,"data-svelte-h":!0}),u(k)!=="svelte-u3kyqm"&&(k.innerHTML=rt),In=l(n),H=o(n,"H3",{"data-svelte-h":!0}),u(H)!=="svelte-hvsu7a"&&(H.innerHTML=mt),hn=l(n),Bn=o(n,"BR",{}),En=l(n),P=o(n,"P",{"data-svelte-h":!0}),u(P)!=="svelte-1ebejs"&&(P.innerHTML=dt),Jn=l(n),$n=o(n,"BR",{}),Un=l(n),_=o(n,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),u(_)!=="svelte-mc41r1"&&(_.innerHTML=kt),Dn=l(n),Fn=o(n,"BR",{}),Vn=l(n),y=o(n,"P",{"data-svelte-h":!0}),u(y)!=="svelte-jjfyzb"&&(y.innerHTML=ft),Gn=l(n),An=o(n,"BR",{}),Kn=l(n),g=o(n,"H3",{"data-svelte-h":!0}),u(g)!=="svelte-kghh5b"&&(g.textContent=vt),Qn=l(n),Wn=o(n,"BR",{}),Xn=l(n),M=o(n,"P",{"data-svelte-h":!0}),u(M)!=="svelte-18ss6m2"&&(M.innerHTML=bt),Yn=l(n),S=o(n,"H2",{"data-svelte-h":!0}),u(S)!=="svelte-wziajp"&&(S.innerHTML=xt),Zn=l(n),N=o(n,"H3",{"data-svelte-h":!0}),u(N)!=="svelte-1czqyl4"&&(N.textContent=Lt),ne=l(n),ee=o(n,"BR",{}),se=l(n),O=o(n,"P",{"data-svelte-h":!0}),u(O)!=="svelte-1qme27z"&&(O.innerHTML=_t),te=l(n),ae=o(n,"BR",{}),pe=l(n),q=o(n,"DIV",{class:!0,"data-svelte-h":!0}),u(q)!=="svelte-1307hli"&&(q.innerHTML=qt),oe=l(n),le=o(n,"BR",{}),ue=l(n),j=o(n,"P",{"data-svelte-h":!0}),u(j)!=="svelte-prqoyf"&&(j.innerHTML=Tt),ce=l(n),ie=o(n,"BR",{}),re=l(n),w=o(n,"H3",{"data-svelte-h":!0}),u(w)!=="svelte-rrudo5"&&(w.innerHTML=Ct),me=l(n),de=o(n,"BR",{}),ke=l(n),R=o(n,"P",{"data-svelte-h":!0}),u(R)!=="svelte-q4c6o4"&&(R.textContent=Ht),fe=l(n),z=o(n,"PRE",{class:!0});var s=v(z);ve=b(s,!1),s.forEach(e),be=l(n),I=o(n,"P",{"data-svelte-h":!0}),u(I)!=="svelte-15qr1gz"&&(I.textContent=Pt),xe=l(n),T=o(n,"DIV",{class:!0,"data-svelte-h":!0}),u(T)!=="svelte-1b0se9j"&&(T.innerHTML=yt),Le=l(n),_e=o(n,"BR",{}),qe=l(n),h=o(n,"P",{"data-svelte-h":!0}),u(h)!=="svelte-39j5eg"&&(h.innerHTML=gt),Te=l(n),Ce=o(n,"BR",{}),He=l(n),B=o(n,"PRE",{class:!0});var ka=v(B);Pe=b(ka,!1),ka.forEach(e),ye=l(n),E=o(n,"P",{"data-svelte-h":!0}),u(E)!=="svelte-1uzz73c"&&(E.innerHTML=Mt),ge=l(n),J=o(n,"PRE",{class:!0});var fa=v(J);Me=b(fa,!1),fa.forEach(e),Se=l(n),Ne=o(n,"BR",{}),Oe=l(n),$=o(n,"P",{"data-svelte-h":!0}),u($)!=="svelte-2ptytj"&&($.innerHTML=St),je=l(n),we=o(n,"BR",{}),Re=l(n),U=o(n,"P",{"data-svelte-h":!0}),u(U)!=="svelte-4rtqxi"&&(U.innerHTML=Nt),ze=l(n),Ie=o(n,"BR",{}),he=l(n),D=o(n,"P",{"data-svelte-h":!0}),u(D)!=="svelte-1n2er81"&&(D.innerHTML=Ot),Be=l(n),Ee=o(n,"BR",{}),Je=l(n),F=o(n,"P",{"data-svelte-h":!0}),u(F)!=="svelte-nk7hbz"&&(F.textContent=jt),$e=l(n),V=o(n,"PRE",{class:!0});var va=v(V);Ue=b(va,!1),va.forEach(e),De=l(n),Fe=o(n,"BR",{}),Ve=l(n),G=o(n,"P",{"data-svelte-h":!0}),u(G)!=="svelte-mlyqm"&&(G.innerHTML=wt),Ge=l(n),Ae=o(n,"BR",{}),Ke=l(n),A=o(n,"H3",{"data-svelte-h":!0}),u(A)!=="svelte-1t7im02"&&(A.innerHTML=Rt),Qe=l(n),We=o(n,"BR",{}),Xe=l(n),K=o(n,"P",{"data-svelte-h":!0}),u(K)!=="svelte-ngon7m"&&(K.innerHTML=zt),Ye=l(n),Ze=o(n,"BR",{}),ns=l(n),Q=o(n,"P",{"data-svelte-h":!0}),u(Q)!=="svelte-f4v0jn"&&(Q.innerHTML=It),es=l(n),ss=o(n,"BR",{}),ts=l(n),Ma(W.$$.fragment,n),as=l(n),ps=o(n,"BR",{}),os=l(n),X=o(n,"P",{"data-svelte-h":!0}),u(X)!=="svelte-l6ldcg"&&(X.innerHTML=ht),ls=l(n),us=o(n,"BR",{}),cs=l(n),C=o(n,"DIV",{class:!0,"data-svelte-h":!0}),u(C)!=="svelte-19ar4er"&&(C.innerHTML=Bt),is=l(n),rs=o(n,"BR",{}),ms=l(n),Y=o(n,"P",{"data-svelte-h":!0}),u(Y)!=="svelte-1i92p2x"&&(Y.innerHTML=Et),ds=l(n),Z=o(n,"PRE",{class:!0});var ba=v(Z);ks=b(ba,!1),ba.forEach(e),fs=l(n),nn=o(n,"P",{"data-svelte-h":!0}),u(nn)!=="svelte-13bak3j"&&(nn.textContent=Jt),vs=l(n),en=o(n,"H2",{"data-svelte-h":!0}),u(en)!=="svelte-1i05dg4"&&(en.innerHTML=$t),bs=l(n),sn=o(n,"H3",{"data-svelte-h":!0}),u(sn)!=="svelte-1clix3u"&&(sn.innerHTML=Ut),xs=l(n),tn=o(n,"P",{"data-svelte-h":!0}),u(tn)!=="svelte-iadzxn"&&(tn.innerHTML=Dt),Ls=l(n),an=o(n,"UL",{"data-svelte-h":!0}),u(an)!=="svelte-1vm6l4q"&&(an.innerHTML=Ft),_s=l(n),pn=o(n,"PRE",{class:!0});var xa=v(pn);qs=b(xa,!1),xa.forEach(e),Ts=l(n),Cs=o(n,"BR",{}),Hs=l(n),on=o(n,"H3",{"data-svelte-h":!0}),u(on)!=="svelte-1pfcn9s"&&(on.innerHTML=Vt),Ps=l(n),ln=o(n,"P",{"data-svelte-h":!0}),u(ln)!=="svelte-wngjim"&&(ln.innerHTML=Gt),ys=l(n),un=o(n,"UL",{"data-svelte-h":!0}),u(un)!=="svelte-1hgojc8"&&(un.innerHTML=At),gs=l(n),cn=o(n,"P",{"data-svelte-h":!0}),u(cn)!=="svelte-qhss8m"&&(cn.innerHTML=Kt),Ms=l(n),rn=o(n,"PRE",{class:!0});var La=v(rn);Ss=b(La,!1),La.forEach(e),Ns=l(n),mn=o(n,"P",{"data-svelte-h":!0}),u(mn)!=="svelte-1scrxs3"&&(mn.innerHTML=Qt),Os=l(n),dn=o(n,"H2",{"data-svelte-h":!0}),u(dn)!=="svelte-1wfsiwi"&&(dn.textContent=Wt),js=l(n),kn=o(n,"P",{"data-svelte-h":!0}),u(kn)!=="svelte-1yofu9l"&&(kn.innerHTML=Xt),ws=l(n),Rs=o(n,"BR",{}),zs=l(n),fn=o(n,"P",{"data-svelte-h":!0}),u(fn)!=="svelte-1tefuf0"&&(fn.innerHTML=Yt),Is=l(n),vn=o(n,"H3",{"data-svelte-h":!0}),u(vn)!=="svelte-1890c3r"&&(vn.innerHTML=Zt),hs=l(n),bn=o(n,"P",{"data-svelte-h":!0}),u(bn)!=="svelte-18br2j9"&&(bn.innerHTML=na),Bs=l(n),xn=o(n,"PRE",{class:!0});var _a=v(xn);Es=b(_a,!1),_a.forEach(e),Js=l(n),Ln=o(n,"H3",{"data-svelte-h":!0}),u(Ln)!=="svelte-1ywd8zx"&&(Ln.innerHTML=ea),$s=l(n),_n=o(n,"P",{"data-svelte-h":!0}),u(_n)!=="svelte-1fkbmv9"&&(_n.innerHTML=sa),Us=l(n),qn=o(n,"PRE",{class:!0});var qa=v(qn);Ds=b(qa,!1),qa.forEach(e),Fs=l(n),Tn=o(n,"H3",{"data-svelte-h":!0}),u(Tn)!=="svelte-1vok2p4"&&(Tn.textContent=ta),Vs=l(n),Gs=o(n,"BR",{}),As=l(n),Cn=o(n,"P",{"data-svelte-h":!0}),u(Cn)!=="svelte-xi4rz2"&&(Cn.textContent=aa),Ks=l(n),Hn=o(n,"PRE",{class:!0});var Ta=v(Hn);Qs=b(Ta,!1),Ta.forEach(e),Ws=l(n),Pn=o(n,"P",{"data-svelte-h":!0}),u(Pn)!=="svelte-7x740t"&&(Pn.textContent=pa),Xs=l(n),yn=o(n,"H2",{"data-svelte-h":!0}),u(yn)!=="svelte-1rbm8z9"&&(yn.innerHTML=oa),Ys=l(n),gn=o(n,"P",{"data-svelte-h":!0}),u(gn)!=="svelte-4omyha"&&(gn.innerHTML=la),Zs=l(n),nt=o(n,"BR",{}),et=l(n),Mn=o(n,"P",{"data-svelte-h":!0}),u(Mn)!=="svelte-10x1h48"&&(Mn.innerHTML=ua),st=l(n),Sn=o(n,"PRE",{class:!0});var Ca=v(Sn);tt=b(Ca,!1),Ca.forEach(e),at=l(n),Nn=o(n,"P",{"data-svelte-h":!0}),u(Nn)!=="svelte-548767"&&(Nn.innerHTML=ca),pt=l(n),On=o(n,"H2",{"data-svelte-h":!0}),u(On)!=="svelte-grw4hp"&&(On.textContent=ia),ot=l(n),jn=o(n,"P",{"data-svelte-h":!0}),u(jn)!=="svelte-v1qoh8"&&(jn.textContent=ra),lt=l(n),wn=o(n,"UL",{"data-svelte-h":!0}),u(wn)!=="svelte-ax6drr"&&(wn.innerHTML=ma),ut=l(n),Rn=o(n,"P",{"data-svelte-h":!0}),u(Rn)!=="svelte-j92gtb"&&(Rn.innerHTML=da),this.h()},h(){Ka(k,"margin-bottom","100px"),r(_,"class","bg-base-300 px-4 py-8 border-l-2"),r(q,"class","pl-8 pt-4 pb-4 bg-base-300"),ve.a=null,r(z,"class","language-supercollider"),r(T,"class","pl-8"),Pe.a=null,r(B,"class","language-supercollider"),Me.a=null,r(J,"class","language-cpp"),Ue.a=null,r(V,"class","language-cpp"),r(C,"class","pl-8 pt-4 pb-4 bg-base-300"),ks.a=null,r(Z,"class","language-cpp"),qs.a=null,r(pn,"class","language-cpp"),Ss.a=null,r(rn,"class","language-supercollider"),Es.a=null,r(xn,"class","language-cpp"),Ds.a=null,r(qn,"class","language-cpp"),Qs.a=null,r(Hn,"class","language-supercollider"),tt.a=null,r(Sn,"class","language-cpp")},m(n,s){t(n,c,s),t(n,x,s),t(n,d,s),t(n,m,s),t(n,k,s),t(n,In,s),t(n,H,s),t(n,hn,s),t(n,Bn,s),t(n,En,s),t(n,P,s),t(n,Jn,s),t(n,$n,s),t(n,Un,s),t(n,_,s),t(n,Dn,s),t(n,Fn,s),t(n,Vn,s),t(n,y,s),t(n,Gn,s),t(n,An,s),t(n,Kn,s),t(n,g,s),t(n,Qn,s),t(n,Wn,s),t(n,Xn,s),t(n,M,s),t(n,Yn,s),t(n,S,s),t(n,Zn,s),t(n,N,s),t(n,ne,s),t(n,ee,s),t(n,se,s),t(n,O,s),t(n,te,s),t(n,ae,s),t(n,pe,s),t(n,q,s),t(n,oe,s),t(n,le,s),t(n,ue,s),t(n,j,s),t(n,ce,s),t(n,ie,s),t(n,re,s),t(n,w,s),t(n,me,s),t(n,de,s),t(n,ke,s),t(n,R,s),t(n,fe,s),t(n,z,s),ve.m(wa,z),t(n,be,s),t(n,I,s),t(n,xe,s),t(n,T,s),t(n,Le,s),t(n,_e,s),t(n,qe,s),t(n,h,s),t(n,Te,s),t(n,Ce,s),t(n,He,s),t(n,B,s),Pe.m(Ra,B),t(n,ye,s),t(n,E,s),t(n,ge,s),t(n,J,s),Me.m(za,J),t(n,Se,s),t(n,Ne,s),t(n,Oe,s),t(n,$,s),t(n,je,s),t(n,we,s),t(n,Re,s),t(n,U,s),t(n,ze,s),t(n,Ie,s),t(n,he,s),t(n,D,s),t(n,Be,s),t(n,Ee,s),t(n,Je,s),t(n,F,s),t(n,$e,s),t(n,V,s),Ue.m(Ia,V),t(n,De,s),t(n,Fe,s),t(n,Ve,s),t(n,G,s),t(n,Ge,s),t(n,Ae,s),t(n,Ke,s),t(n,A,s),t(n,Qe,s),t(n,We,s),t(n,Xe,s),t(n,K,s),t(n,Ye,s),t(n,Ze,s),t(n,ns,s),t(n,Q,s),t(n,es,s),t(n,ss,s),t(n,ts,s),Sa(W,n,s),t(n,as,s),t(n,ps,s),t(n,os,s),t(n,X,s),t(n,ls,s),t(n,us,s),t(n,cs,s),t(n,C,s),t(n,is,s),t(n,rs,s),t(n,ms,s),t(n,Y,s),t(n,ds,s),t(n,Z,s),ks.m(ha,Z),t(n,fs,s),t(n,nn,s),t(n,vs,s),t(n,en,s),t(n,bs,s),t(n,sn,s),t(n,xs,s),t(n,tn,s),t(n,Ls,s),t(n,an,s),t(n,_s,s),t(n,pn,s),qs.m(Ba,pn),t(n,Ts,s),t(n,Cs,s),t(n,Hs,s),t(n,on,s),t(n,Ps,s),t(n,ln,s),t(n,ys,s),t(n,un,s),t(n,gs,s),t(n,cn,s),t(n,Ms,s),t(n,rn,s),Ss.m(Ea,rn),t(n,Ns,s),t(n,mn,s),t(n,Os,s),t(n,dn,s),t(n,js,s),t(n,kn,s),t(n,ws,s),t(n,Rs,s),t(n,zs,s),t(n,fn,s),t(n,Is,s),t(n,vn,s),t(n,hs,s),t(n,bn,s),t(n,Bs,s),t(n,xn,s),Es.m(Ja,xn),t(n,Js,s),t(n,Ln,s),t(n,$s,s),t(n,_n,s),t(n,Us,s),t(n,qn,s),Ds.m($a,qn),t(n,Fs,s),t(n,Tn,s),t(n,Vs,s),t(n,Gs,s),t(n,As,s),t(n,Cn,s),t(n,Ks,s),t(n,Hn,s),Qs.m(Ua,Hn),t(n,Ws,s),t(n,Pn,s),t(n,Xs,s),t(n,yn,s),t(n,Ys,s),t(n,gn,s),t(n,Zs,s),t(n,nt,s),t(n,et,s),t(n,Mn,s),t(n,st,s),t(n,Sn,s),tt.m(Da,Sn),t(n,at,s),t(n,Nn,s),t(n,pt,s),t(n,On,s),t(n,ot,s),t(n,jn,s),t(n,lt,s),t(n,wn,s),t(n,ut,s),t(n,Rn,s),ct=!0},p:Va,i(n){ct||(Na(W.$$.fragment,n),ct=!0)},o(n){Oa(W.$$.fragment,n),ct=!1},d(n){n&&(e(c),e(x),e(d),e(m),e(k),e(In),e(H),e(hn),e(Bn),e(En),e(P),e(Jn),e($n),e(Un),e(_),e(Dn),e(Fn),e(Vn),e(y),e(Gn),e(An),e(Kn),e(g),e(Qn),e(Wn),e(Xn),e(M),e(Yn),e(S),e(Zn),e(N),e(ne),e(ee),e(se),e(O),e(te),e(ae),e(pe),e(q),e(oe),e(le),e(ue),e(j),e(ce),e(ie),e(re),e(w),e(me),e(de),e(ke),e(R),e(fe),e(z),e(be),e(I),e(xe),e(T),e(Le),e(_e),e(qe),e(h),e(Te),e(Ce),e(He),e(B),e(ye),e(E),e(ge),e(J),e(Se),e(Ne),e(Oe),e($),e(je),e(we),e(Re),e(U),e(ze),e(Ie),e(he),e(D),e(Be),e(Ee),e(Je),e(F),e($e),e(V),e(De),e(Fe),e(Ve),e(G),e(Ge),e(Ae),e(Ke),e(A),e(Qe),e(We),e(Xe),e(K),e(Ye),e(Ze),e(ns),e(Q),e(es),e(ss),e(ts),e(as),e(ps),e(os),e(X),e(ls),e(us),e(cs),e(C),e(is),e(rs),e(ms),e(Y),e(ds),e(Z),e(fs),e(nn),e(vs),e(en),e(bs),e(sn),e(xs),e(tn),e(Ls),e(an),e(_s),e(pn),e(Ts),e(Cs),e(Hs),e(on),e(Ps),e(ln),e(ys),e(un),e(gs),e(cn),e(Ms),e(rn),e(Ns),e(mn),e(Os),e(dn),e(js),e(kn),e(ws),e(Rs),e(zs),e(fn),e(Is),e(vn),e(hs),e(bn),e(Bs),e(xn),e(Js),e(Ln),e($s),e(_n),e(Us),e(qn),e(Fs),e(Tn),e(Vs),e(Gs),e(As),e(Cn),e(Ks),e(Hn),e(Ws),e(Pn),e(Xs),e(yn),e(Ys),e(gn),e(Zs),e(nt),e(et),e(Mn),e(st),e(Sn),e(at),e(Nn),e(pt),e(On),e(ot),e(jn),e(lt),e(wn),e(ut),e(Rn)),ja(W,n)}}}function Za(zn){let c,L;const x=[zn[0],ya];let d={$$slots:{default:[Ya]},$$scope:{ctx:zn}};for(let i=0;i{L(0,c=it(it({},c),Ha(x)))},c=Ha(c),[c]}class pp extends Ga{constructor(c){super(),Aa(this,c,np,Za,Fa,{})}}export{pp as default,ya as metadata}; diff --git a/dist/_app/immutable/chunks/livecoding_supercollider_2.8rv2dy6_.js.br b/dist/_app/immutable/chunks/livecoding_supercollider_2.8rv2dy6_.js.br new file mode 100644 index 0000000..f06d7ec Binary files /dev/null and b/dist/_app/immutable/chunks/livecoding_supercollider_2.8rv2dy6_.js.br differ diff --git a/dist/_app/immutable/chunks/livecoding_supercollider_2.8rv2dy6_.js.gz b/dist/_app/immutable/chunks/livecoding_supercollider_2.8rv2dy6_.js.gz new file mode 100644 index 0000000..b695fcc Binary files /dev/null and b/dist/_app/immutable/chunks/livecoding_supercollider_2.8rv2dy6_.js.gz differ diff --git a/dist/_app/immutable/chunks/ordinateur_crier.w4EusLTJ.js b/dist/_app/immutable/chunks/ordinateur_crier.w4EusLTJ.js new file mode 100644 index 0000000..15a35cc --- /dev/null +++ b/dist/_app/immutable/chunks/ordinateur_crier.w4EusLTJ.js @@ -0,0 +1,4 @@ +import{s as Ze,n as He}from"./scheduler.aZRR5A_O.js";import{S as Xe,i as $e,g as r,s as n,h as l,x as a,c as u,k as Ne,a as s,f as i}from"./index.AIcdAWo0.js";function et(Ve){let o,Me="À propos",I,z,O,c,Te='Cet article était initialement publié dans la revue Bugne Bugne, une “Revue lyonnaise dédiée aux musiques électroniques et aux enjeux politiques et sociaux de la fête, indépendante et non-lucrative ✊”. L’objectif de cet article était de présenter le live coding à un large public et de parler des concerts que nous organisons à Lyon. Je reprends ici l’intégralité du texte et je rajoute des liens supplémentaires pour enrichir la chose :)',R,k,B,d,_e=`J’ai pris la liberté de rajouter tout un tas de liens divers qui apportent +souvent un contrepoint décalé au texte.`,J,v,Pe="Introduction",E,f,Ie='Quelques personnes en Europe et dans le monde pratiquent le live coding. Nous sommes quelques centaines ou quelques milliers. Live coder, cela consiste à improviser de la musique directement au travers de langages de programmation, sur scène, devant tout le monde, avec les bugs, les crashs, etc. que cela implique. Tout au long de la performance, les live coders éditent du code et le soumettent à l’ordinateur. Ils découvrent le résultat en même temps que le public et sont pareillement surpris ou inquiets de ce qu’ils entendent.',F,A,D,q,ze='Live coder, cela veut tout et rien dire et personne ne semble souhaiter définir le terme précisément. On peut programmer et modifier des synthétiseurs en temps réel, créer des séquences musicales, des visuels, etc. On peut allumer des ampoules en rythme ou broder un pull sur scène, la seule limite restant le crash et la capacité technique de faire ce que l’on veut. Le live coding peut mobiliser toutes les ressources de l’ordinateur, pour le meilleur comme pour le pire. Certains aiment programmer de la musique, d’autres aiment programmer des visuels. Faites cela de manière conjointe, et vous obtenez une Algorave, une algorithmic rave party. L’idée derrière ce terme était, à l’origine, de faire de la musique de club au travers du code, de faire danser les gens sur des algorithmes. Ca ne ressemble pas du tout à de la musique de club, mais cela reste dansant quand même. C’est une musique à part, avec ses propres sonorités et ses gestes musicaux particuliers.',Y,Q,S,h,Oe="Live coder, cela ne signifie pas nécessairement programmer quelque chose pour arriver à une fin. Il n’y a pas de patron pour surveiller que vous terminiez votre programme dans les temps. Live coder, c’est surtout programmer sans but, errer dans un système musical et chercher ce qui sonne bien, ce qui sonne mal, et aussi pas mal chercher ce que l’on veut réellement faire. C’est un peu du jazz d’ordinateur. C’est une conversation à la fois avec votre ordinateur et avec votre propre capacité ou incapacité à vous exprimer musicalement au travers du code.",K,b,Re="Renouer avec l’ordinateur",U,w,ke='Il y a longtemps que les gens font ça, mais originellement, tout le monde s’en fichait. Il y a quelques décennies, il était normal d’utiliser des langages de programmation pour créer de la musique. C’était souvent la seule interface dont on disposait pour dialoguer avec la machine, pour composer, pour contrôler des synthétiseurs, des échantillonneurs, des machines, etc. L’apparition des interfaces graphiques a aussi introduit le fait de cliquer partout, puis les fenêtres, puis tout un tas d’idées et de concepts dont on n’avait pas vraiment besoin pour faire de la musique. En bref, les interfaces graphiques ont rompu quelque chose d’important dans la manière dont on approche l’interaction avec l’ordinateur.',W,G,N,g,Be='Les ordinateurs sont faits pour manger du texte, des nombres, des instructions. Ils sont ridiculement petits, puissants et versatiles. Ce sont des calculatrices qui calculent vite. Ils sont partout et sont d’ailleurs faits pour être emportés partout. On passe déjà notre vie avec. Le seul problème est que l’on ne les utilise pas comme des ordinateurs. On ne les utilise pas non plus, d’ailleurs, comme des instruments de musique et les musiciens passent généralement beaucoup de temps et consacrent beaucoup d’énergie à éviter de se confronter à la vrai nature de l’ordinateur.',V,Z,X,x,Je=`Parlons un petit peu des métaphores. Ouvrez n’importe quel logiciel de production musicale (Ableton, Fruity Loops, Pro Tools). Regardez un peu ce que l’on vous montre à l’écran. Les logiciels pour créer de la musique sont remplis de métaphores étranges que personne n’a jamais réellement souhaité. On édite des mélodies MIDI sur des piano rolls comme si l’on manipulait un piano mécanique avec des rouleaux. On montre un studio d’enregistrement avec des tranches de console et des potentiomètres alors qu’on a juste un clavier et une souris. Les synthétiseurs virtuels ont des boutons et des potentiomètres qu’on ne peut pas pousser. Vous ne pouvez cliquer que sur un bouton à la fois, et les contrôleurs sont pénibles à utiliser. Les synthétiseurs virtuels ont des lumières tristes qui ne brillent même pas et ils peuvent planter tout comme Word ou Excel. Il y a quelque chose qui coince. Il fallait initialement vendre ces logiciels aux musiciens et on leur a vendu ce qu’ils connaissent le mieux. C’est tout pareil que votre bureau avec ses dossiers, ses fichiers, etc. Votre bureau n’existe pas, et les dossiers ne sont pas des dossiers en carton jaune moche que vous rangez dans une armoire. +Les platines sont devenues des instruments lorsque les musiciens ont commencé à s’intéresser à leurs qualités musicales. De même, l’ordinateur peut devenir un instrument de musique si l’on s’intéresse à ses qualités intrinsèques : l’idée n’est pas d’éviter ce qu’il est vraiment, mais de chercher ses qualités dans le domaine musical.`,$,ee,te,m,Ee="I'm the operator with my pocket calculator I am adding, and subtracting... I'm controlling, and composing! By pressing down a special key, It plays a little melody.",se,ie,re,C,Fe='Pourtant, il est toujours possible de programmer sa musique. On peut même faire la même chose qu’avant, mais en beaucoup mieux, on peut faire la même chose que nos ancêtres, mais en temps réel. On peut tout programmer si on essaie vraiment. C’est super amusant mais c’est aussi devenu bizarre. Plus personne ne fait ça, à tel point que programmer son ordinateur en direct est devenu un parti pris. Programmer est devenu un geste expressif, tout comme peut l’être le fait de danser, de crier ou de faire un solo de guitare. C’est aussi parfois devenu un geste politique ou un acte militant. Depuis le début des années 2000, les live coders ont plus ou moins tous décidé de montrer ce qu’ils font à leur public (collectif TOPLAP, etc.) car ils estiment que c’est important. Ils font leurs concerts dans le noir et projettent leurs écrans pour que le public puisse lire le code et voir le curseur d’édition bouger :',le,ne,ue,p,Ae="Give us access to the performer's mind, to the whole human instrument. Obscurantism is dangerous. Show us your screens.",ae,oe,me,L,De="Pourquoi live coder ?",pe,j,Ye="Rémi : “Je cherchais au départ des manières de composer des rythmes complexes. J’ai sombré. J’ai découvert une nouvelle façon de faire et de contrôler la musique et c’était sans doute la manière de faire que j’avais toujours cherchée sans la trouver. Je suis plus proche des sphères de la musique DIY, et le live coding c’est un peu le DIY du numérique. En plus de bidouller l’électronique de mes synthés et j’ai commencé à pouvoir tout fabriquer, tout programmer. J’ai pu d’une certaine manière “augmenter” ou contrôler différemment tout mon matériel et j’y garde toujours ce plaisir du crash et de l’erreur. J’aime le fait que mon programme soit bancal, et qu’il puisse s’arrêter ou se comporter différemment du but premier. Je vais tout faire pour que tout se passe bien mais je ne peux jamais en être certain. J’ai jamais réussi à faire de la musique avec des logiciels faits pour cela, ça a toujours été sans saveur, incompréhensible, super compliqué à démarrer.",ce,de,ve,y,Qe="Maintenant je crois pas que se soit foncièrement plus simple à démarrer mais au moins je ne peux m’en prendre qu’à moi-même. Je viens du milieu de la technique du son, le live coding m’a aussi appris la programmation, il m’a ouvert la porte de la programmation appliquée à l’audio, et c’est maintenant ce dans quoi j’essaie de travailler.”",fe,qe,he,H,Se='Raphaël : “J’ai appris à programmer en m’intéressant au live coding. J’étais déjà assez pote avec les ordinateurs car mes amis et moi nous amusions à modder des jeux ou à créer des choses intéressantes à l’ordinateur. Je cherchais initialement une manière d’écrire de la musique qui ne soit ni partition graphique, ni partition classique. Je tape super vite sur un clavier et j’aime beaucoup manipuler du texte. Il semblait assez clair que cette pratique était faite pour moi. J’ai appris à faire de la musique avec du code avant de savoir réellement programmer. J’ai commencé ensuite à modifier les outils pour les adapter à ma pratique puis à concevoir les miens. C’est aussi fascinant que nul. On apprend beaucoup, on crée son propre instrument, mais on arrive souvent à un résultat que l’on n’avait pas anticipé ! Je m’intéressais déjà beaucoup à toutes les musiques basées sur des systèmes de règles ou sur des processus génératifs. J’aime beaucoup John Cage, non pas pour sa musique, mais pour les idées qu’il a pu transmettre à tous les musiciens qui l’ont écouté. Aujourd’hui, je live code car j’étudie ces musiques là dans un cadre universitaire mais j’y trouve également du plaisir. Cela ne se ressemble jamais, cela donne perpétuellement l’envie de recommencer. C’est le propre d’un instrument de musique, et je suis content d’avoir fait de mon ordinateur un instrument de musique.”',be,M,Ke="Le live-coding en France",we,T,Ue='Le 8 avril 2023, nous avons organisé une gigantesque algorave au Grrrnd Zero à Lyon. 19 projets différents venant de toute la France et parfois même de l’étranger (Italie, Pays-Bas, Etats-Unis) ont joué de la musique ou fait des visuels de 18h à 8h du matin. C’est sans doute la plus grosse algorave de la très longue histoire de France. Même si les gens se reconnaissent comme live coders, il n’est pas dit qu’ils se comprennent. On sait qu’on fait la même chose, mais pas nécessairement la même musique. On ne programme pas tous de la même manière, pas avec les mêmes outils ou le même langage, pas pour le même but, etc mais c’est déjà pas mal de savoir qu’on n’est pas tous seuls à avoir une lubie. Organiser des événements de live coding permet de faire vivre cette pratique et de se rendre compte sa diversité. C’est une sorte de grande foire. En France, cela est d’autant plus sensible que la plupart des live coders ont un lien avec la demoscene ou avec des cultures informatiques underground qui n’ont jamais vraiment disparues.',ge,xe,Ce,_,We=`Aujourd’hui on s’est un peu lancés comme mission de rassembler toute la communauté française ou du moins de se faire savoir qu’on existe entre nous. On essaie d’organiser des workshops, car le live coding est une pratique toujours plus simple à démarrer avec quelqu’un plutôt qu’en écumant des forums. +Nous sommes aussi allés représenter cette communauté francophone du live-coding à l’International Conférence on Live-Coding à Utrecht en avril 2023. Ça nous a permis de comparer cette scène à l’échelle mondiale et de pouvoir rencontrer en personne tous ces développeurs-artistes d’un petit milieu où tout le monde se connaît un peu.`,Le,je,ye,P,Ge='Si on cherche bien, il y a des live coders partout. Il suffit de les débusquer, souvent dans les écoles d’art, dans les écoles d’ingé ou vraiment un peu partout là où on ne pense jamais à regarder. Bizarrement, on trouve assez peu de live coding dans les conservatoires ou dans les écoles de musique. Tous les live coders ne savent pas nécessairement qu’ils live codent. Parfois, ce n’est juste pas important pour eux, ou cela leur paraît naturel. Les live coders naviguent entre milieux DIY, réseaux hackers / makers, milieu des arts numériques, etc. Considérer que le live coding est une forme d’art en soi est un réflexe assez anglais, lié à la manière dont la pratique a été popularisée dans les années 2000. En France, le live coding est souvent considéré comme un outil. Ailleurs c’est considéré comme une fin en soi, ce qui n’est pas plus mal !';return{c(){o=r("h2"),o.textContent=Me,I=n(),z=r("br"),O=n(),c=r("p"),c.innerHTML=Te,R=n(),k=r("br"),B=n(),d=r("p"),d.textContent=_e,J=n(),v=r("h2"),v.textContent=Pe,E=n(),f=r("p"),f.innerHTML=Ie,F=n(),A=r("br"),D=n(),q=r("p"),q.innerHTML=ze,Y=n(),Q=r("br"),S=n(),h=r("p"),h.innerHTML=Oe,K=n(),b=r("h2"),b.textContent=Re,U=n(),w=r("p"),w.innerHTML=ke,W=n(),G=r("br"),N=n(),g=r("p"),g.innerHTML=Be,V=n(),Z=r("br"),X=n(),x=r("p"),x.innerHTML=Je,$=n(),ee=r("br"),te=n(),m=r("blockquote"),m.innerHTML=Ee,se=n(),ie=r("br"),re=n(),C=r("p"),C.innerHTML=Fe,le=n(),ne=r("br"),ue=n(),p=r("blockquote"),p.innerHTML=Ae,ae=n(),oe=r("br"),me=n(),L=r("h2"),L.textContent=De,pe=n(),j=r("p"),j.innerHTML=Ye,ce=n(),de=r("br"),ve=n(),y=r("p"),y.innerHTML=Qe,fe=n(),qe=r("br"),he=n(),H=r("p"),H.innerHTML=Se,be=n(),M=r("h2"),M.textContent=Ke,we=n(),T=r("p"),T.innerHTML=Ue,ge=n(),xe=r("br"),Ce=n(),_=r("p"),_.innerHTML=We,Le=n(),je=r("br"),ye=n(),P=r("p"),P.innerHTML=Ge,this.h()},l(e){o=l(e,"H2",{"data-svelte-h":!0}),a(o)!=="svelte-v3hynp"&&(o.textContent=Me),I=u(e),z=l(e,"BR",{}),O=u(e),c=l(e,"P",{"data-svelte-h":!0}),a(c)!=="svelte-ipt142"&&(c.innerHTML=Te),R=u(e),k=l(e,"BR",{}),B=u(e),d=l(e,"P",{"data-svelte-h":!0}),a(d)!=="svelte-evh15u"&&(d.textContent=_e),J=u(e),v=l(e,"H2",{"data-svelte-h":!0}),a(v)!=="svelte-1ukekoe"&&(v.textContent=Pe),E=u(e),f=l(e,"P",{"data-svelte-h":!0}),a(f)!=="svelte-1jaott7"&&(f.innerHTML=Ie),F=u(e),A=l(e,"BR",{}),D=u(e),q=l(e,"P",{"data-svelte-h":!0}),a(q)!=="svelte-rjd13f"&&(q.innerHTML=ze),Y=u(e),Q=l(e,"BR",{}),S=u(e),h=l(e,"P",{"data-svelte-h":!0}),a(h)!=="svelte-ysico6"&&(h.innerHTML=Oe),K=u(e),b=l(e,"H2",{"data-svelte-h":!0}),a(b)!=="svelte-evmfyz"&&(b.textContent=Re),U=u(e),w=l(e,"P",{"data-svelte-h":!0}),a(w)!=="svelte-1hkw5fv"&&(w.innerHTML=ke),W=u(e),G=l(e,"BR",{}),N=u(e),g=l(e,"P",{"data-svelte-h":!0}),a(g)!=="svelte-6aepzc"&&(g.innerHTML=Be),V=u(e),Z=l(e,"BR",{}),X=u(e),x=l(e,"P",{"data-svelte-h":!0}),a(x)!=="svelte-carczs"&&(x.innerHTML=Je),$=u(e),ee=l(e,"BR",{}),te=u(e),m=l(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),a(m)!=="svelte-1xedkml"&&(m.innerHTML=Ee),se=u(e),ie=l(e,"BR",{}),re=u(e),C=l(e,"P",{"data-svelte-h":!0}),a(C)!=="svelte-vabc81"&&(C.innerHTML=Fe),le=u(e),ne=l(e,"BR",{}),ue=u(e),p=l(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),a(p)!=="svelte-1ezeov8"&&(p.innerHTML=Ae),ae=u(e),oe=l(e,"BR",{}),me=u(e),L=l(e,"H2",{"data-svelte-h":!0}),a(L)!=="svelte-15cy2pk"&&(L.textContent=De),pe=u(e),j=l(e,"P",{"data-svelte-h":!0}),a(j)!=="svelte-1duieby"&&(j.innerHTML=Ye),ce=u(e),de=l(e,"BR",{}),ve=u(e),y=l(e,"P",{"data-svelte-h":!0}),a(y)!=="svelte-ywnqg2"&&(y.innerHTML=Qe),fe=u(e),qe=l(e,"BR",{}),he=u(e),H=l(e,"P",{"data-svelte-h":!0}),a(H)!=="svelte-1s3sbij"&&(H.innerHTML=Se),be=u(e),M=l(e,"H2",{"data-svelte-h":!0}),a(M)!=="svelte-17h2ie8"&&(M.textContent=Ke),we=u(e),T=l(e,"P",{"data-svelte-h":!0}),a(T)!=="svelte-cpicl9"&&(T.innerHTML=Ue),ge=u(e),xe=l(e,"BR",{}),Ce=u(e),_=l(e,"P",{"data-svelte-h":!0}),a(_)!=="svelte-15i7s9r"&&(_.innerHTML=We),Le=u(e),je=l(e,"BR",{}),ye=u(e),P=l(e,"P",{"data-svelte-h":!0}),a(P)!=="svelte-1if5wzj"&&(P.innerHTML=Ge),this.h()},h(){Ne(m,"class","pl-8 text-2xl"),Ne(p,"class","pl-8 text-2xl")},m(e,t){s(e,o,t),s(e,I,t),s(e,z,t),s(e,O,t),s(e,c,t),s(e,R,t),s(e,k,t),s(e,B,t),s(e,d,t),s(e,J,t),s(e,v,t),s(e,E,t),s(e,f,t),s(e,F,t),s(e,A,t),s(e,D,t),s(e,q,t),s(e,Y,t),s(e,Q,t),s(e,S,t),s(e,h,t),s(e,K,t),s(e,b,t),s(e,U,t),s(e,w,t),s(e,W,t),s(e,G,t),s(e,N,t),s(e,g,t),s(e,V,t),s(e,Z,t),s(e,X,t),s(e,x,t),s(e,$,t),s(e,ee,t),s(e,te,t),s(e,m,t),s(e,se,t),s(e,ie,t),s(e,re,t),s(e,C,t),s(e,le,t),s(e,ne,t),s(e,ue,t),s(e,p,t),s(e,ae,t),s(e,oe,t),s(e,me,t),s(e,L,t),s(e,pe,t),s(e,j,t),s(e,ce,t),s(e,de,t),s(e,ve,t),s(e,y,t),s(e,fe,t),s(e,qe,t),s(e,he,t),s(e,H,t),s(e,be,t),s(e,M,t),s(e,we,t),s(e,T,t),s(e,ge,t),s(e,xe,t),s(e,Ce,t),s(e,_,t),s(e,Le,t),s(e,je,t),s(e,ye,t),s(e,P,t)},p:He,i:He,o:He,d(e){e&&(i(o),i(I),i(z),i(O),i(c),i(R),i(k),i(B),i(d),i(J),i(v),i(E),i(f),i(F),i(A),i(D),i(q),i(Y),i(Q),i(S),i(h),i(K),i(b),i(U),i(w),i(W),i(G),i(N),i(g),i(V),i(Z),i(X),i(x),i($),i(ee),i(te),i(m),i(se),i(ie),i(re),i(C),i(le),i(ne),i(ue),i(p),i(ae),i(oe),i(me),i(L),i(pe),i(j),i(ce),i(de),i(ve),i(y),i(fe),i(qe),i(he),i(H),i(be),i(M),i(we),i(T),i(ge),i(xe),i(Ce),i(_),i(Le),i(je),i(ye),i(P))}}}const it={title:"Les ordinateurs peuvent-t-ils crier ?",date:"2023-12-23",author:"Raphaël Forment et Rémi Georges"};class rt extends Xe{constructor(o){super(),$e(this,o,null,et,Ze,{})}}export{rt as default,it as metadata}; diff --git a/dist/_app/immutable/chunks/ordinateur_crier.w4EusLTJ.js.br b/dist/_app/immutable/chunks/ordinateur_crier.w4EusLTJ.js.br new file mode 100644 index 0000000..4963326 Binary files /dev/null and b/dist/_app/immutable/chunks/ordinateur_crier.w4EusLTJ.js.br differ diff --git a/dist/_app/immutable/chunks/ordinateur_crier.w4EusLTJ.js.gz b/dist/_app/immutable/chunks/ordinateur_crier.w4EusLTJ.js.gz new file mode 100644 index 0000000..950cd9b Binary files /dev/null and b/dist/_app/immutable/chunks/ordinateur_crier.w4EusLTJ.js.gz differ diff --git a/dist/_app/immutable/chunks/proposer_guide.X_s8Xpr2.js b/dist/_app/immutable/chunks/proposer_guide.X_s8Xpr2.js new file mode 100644 index 0000000..775ab33 --- /dev/null +++ b/dist/_app/immutable/chunks/proposer_guide.X_s8Xpr2.js @@ -0,0 +1,5 @@ +import{s as F,x as P,y as U,n as G}from"./scheduler.aZRR5A_O.js";import{S as J,i as N,r as V,u as I,v as K,d as O,t as Q,w as W,g as p,s as m,H as X,h as c,x as d,c as f,j as Y,C as Z,f as a,k as ee,a as l}from"./index.AIcdAWo0.js";import{G as te,g as se,a as B}from"./guides.RN6emr9S.js";function ne(q){let t,i='Les guides sont rédigés en MarkDown, un format de balisage léger qui facilite l’écriture et la publication. Une fois ajoutés au site, ces derniers sont automatiquement recensés et publiés. Chaque article reçoit un entête simple qui permet de l’identifier. Voici l’entête de l’article actuel :',u,o,s,r=`--- +title: Comment proposer un guide ? +date: '2023-12-22' +author: "Raphaël Maurice Forment" +---`,v,_,$="Il n’est pas nécessaire de répéter le titre au début de votre article. Chaque balise se comprend assez facilement :",M,g,z="
  • title : le titre complet de l’article
  • date : au format AAAA-MM-JJ
  • author : nom complet ou votre pseudonyme
  • ",w,h,j="Le site utilise ensuite ces données pour générer un entête. Les données peuvent ensuite être utilisées sous plusieurs formes pour faire référence au guide sur d’autres pages.",H,x,S="Contenu de l’article",y,b,A="Écrivez ce que vous voulez ! Notez que vous pouvez librement mélanger MarkDown, HTML/CSS et composants Svelte pour les plus confirmés. Vous ne devriez pas avoir de problème pour publier quoi que ce soit sous la forme que vous imaginez ! Si vous écrivez du MarkDown pur et simple, votre article recevra le style par défaut utilisé par le site.",L,C,R="Publication",T,k,D='Une fois votre article prêt, il vous faudra faire une Pull Request pour que ce dernier soit au dépôt du site et validé par un contributeur. Bonne chance ! Nous avons besoin de guides pour couvrir l’essentiel des plateformes existantes !';return{c(){t=p("p"),t.innerHTML=i,u=m(),o=p("pre"),s=new X(!1),v=m(),_=p("p"),_.textContent=$,M=m(),g=p("ul"),g.innerHTML=z,w=m(),h=p("p"),h.textContent=j,H=m(),x=p("h2"),x.textContent=S,y=m(),b=p("p"),b.innerHTML=A,L=m(),C=p("h2"),C.textContent=R,T=m(),k=p("p"),k.innerHTML=D,this.h()},l(e){t=c(e,"P",{"data-svelte-h":!0}),d(t)!=="svelte-1jy9acf"&&(t.innerHTML=i),u=f(e),o=c(e,"PRE",{class:!0});var n=Y(o);s=Z(n,!1),n.forEach(a),v=f(e),_=c(e,"P",{"data-svelte-h":!0}),d(_)!=="svelte-hsuogf"&&(_.textContent=$),M=f(e),g=c(e,"UL",{"data-svelte-h":!0}),d(g)!=="svelte-1objkrr"&&(g.innerHTML=z),w=f(e),h=c(e,"P",{"data-svelte-h":!0}),d(h)!=="svelte-uedqlf"&&(h.textContent=j),H=f(e),x=c(e,"H2",{"data-svelte-h":!0}),d(x)!=="svelte-1g5ta6o"&&(x.textContent=S),y=f(e),b=c(e,"P",{"data-svelte-h":!0}),d(b)!=="svelte-13oxmt0"&&(b.innerHTML=A),L=f(e),C=c(e,"H2",{"data-svelte-h":!0}),d(C)!=="svelte-qjxet8"&&(C.textContent=R),T=f(e),k=c(e,"P",{"data-svelte-h":!0}),d(k)!=="svelte-pldlgo"&&(k.innerHTML=D),this.h()},h(){s.a=null,ee(o,"class","language-yaml")},m(e,n){l(e,t,n),l(e,u,n),l(e,o,n),s.m(r,o),l(e,v,n),l(e,_,n),l(e,M,n),l(e,g,n),l(e,w,n),l(e,h,n),l(e,H,n),l(e,x,n),l(e,y,n),l(e,b,n),l(e,L,n),l(e,C,n),l(e,T,n),l(e,k,n)},p:G,d(e){e&&(a(t),a(u),a(o),a(v),a(_),a(M),a(g),a(w),a(h),a(H),a(x),a(y),a(b),a(L),a(C),a(T),a(k))}}}function ae(q){let t,i;const u=[q[0],E];let o={$$slots:{default:[ne]},$$scope:{ctx:q}};for(let s=0;s{i(0,t=P(P({},t),U(u)))},t=U(t),[t]}class re extends J{constructor(t){super(),N(this,t,le,ae,F,{})}}export{re as default,E as metadata}; diff --git a/dist/_app/immutable/chunks/proposer_guide.X_s8Xpr2.js.br b/dist/_app/immutable/chunks/proposer_guide.X_s8Xpr2.js.br new file mode 100644 index 0000000..52ad23f Binary files /dev/null and b/dist/_app/immutable/chunks/proposer_guide.X_s8Xpr2.js.br differ diff --git a/dist/_app/immutable/chunks/proposer_guide.X_s8Xpr2.js.gz b/dist/_app/immutable/chunks/proposer_guide.X_s8Xpr2.js.gz new file mode 100644 index 0000000..2ba4c03 Binary files /dev/null and b/dist/_app/immutable/chunks/proposer_guide.X_s8Xpr2.js.gz differ diff --git a/dist/_app/immutable/chunks/proposer_guide.jq4D-DxX.js b/dist/_app/immutable/chunks/proposer_guide.jq4D-DxX.js deleted file mode 100644 index bdd8bc7..0000000 --- a/dist/_app/immutable/chunks/proposer_guide.jq4D-DxX.js +++ /dev/null @@ -1,5 +0,0 @@ -import{s as F,c as K,u as O,g as Q,d as W,x as j,y as D,n as X}from"./scheduler.aZRR5A_O.js";import{S as J,i as N,g as m,h as d,j as V,f as r,a as p,d as G,t as I,r as Y,u as Z,v as ee,w as te,s as _,H as ne,x as g,c as v,E as se,k as le}from"./index.ciNBPAxl.js";function ae(o,t){const a={},c={},s={$$scope:1};let e=o.length;for(;e--;){const l=o[e],u=t[e];if(u){for(const f in l)f in u||(c[f]=1);for(const f in u)s[f]||(a[f]=u[f],s[f]=1);o[e]=u}else for(const f in l)s[f]=1}for(const l in c)l in a||(a[l]=void 0);return a}function U(o){return typeof o=="object"&&o!==null?o:{}}function oe(o){let t,a;const c=o[3].default,s=K(c,o,o[2],null);return{c(){t=m("article"),s&&s.c()},l(e){t=d(e,"ARTICLE",{});var l=V(t);s&&s.l(l),l.forEach(r)},m(e,l){p(e,t,l),s&&s.m(t,null),a=!0},p(e,[l]){s&&s.p&&(!a||l&4)&&O(s,c,e,e[2],a?W(c,e[2],l,null):Q(e[2]),null)},i(e){a||(G(s,e),a=!0)},o(e){I(s,e),a=!1},d(e){e&&r(t),s&&s.d(e)}}}function ue(o,t,a){let{$$slots:c={},$$scope:s}=t,{title:e}=t,{date:l}=t;return o.$$set=u=>{"title"in u&&a(0,e=u.title),"date"in u&&a(1,l=u.date),"$$scope"in u&&a(2,s=u.$$scope)},[e,l,s,c]}class ie extends J{constructor(t){super(),N(this,t,ue,oe,F,{title:0,date:1})}}function re(o){let t,a='Les guides sont rédigés en MarkDown, un format de balisage léger qui facilite l’écriture et la publication. Une fois ajoutés au site, ces derniers sont automatiquement recensés et publiés. Chaque article reçoit un entête simple. Voici l’entête de l’article actuel :',c,s,e,l=`--- -title: Comment proposer un guide ? -date: '2023-12-22' -author: "Raphaël Maurice Forment" ----`,u,f,z="Chaque balise se comprend assez facilement :",w,h,P="
  • title : le titre complet de l’article
  • date : au format AAAA-MM-JJ
  • author : nom complet ou votre pseudonyme
  • ",y,k,S="Le site utilise ensuite ces données pour générer un entête. Les données peuvent ensuite être utilisées sous plusieurs formes pour faire référence au guide sur d’autres pages.",M,b,A="Contenu de l’article",H,C,E="Écrivez ce que vous voulez ! Notez que vous pouvez librement mélanger MarkDown, HTML/CSS et composants Svelte pour les plus confirmés. Vous ne devriez pas avoir de problème particulier à publier quoi que ce soit sous la forme que vous imaginez ! Si vous écrivez du MarkDown pur et simple, votre article recevra le style par défaut utilisé par le site.",L,x,R="Publication",T,q,$='Une fois votre article prêt, il vous faudra faire une Pull Request pour que ce dernier soit ajouté au dépôt du site et validé par un contributeur. Bonne chance ! Nous avons besoin de guides pour couvrir l’essentiel des plateformes existantes !';return{c(){t=m("p"),t.innerHTML=a,c=_(),s=m("pre"),e=new ne(!1),u=_(),f=m("p"),f.textContent=z,w=_(),h=m("ul"),h.innerHTML=P,y=_(),k=m("p"),k.textContent=S,M=_(),b=m("h2"),b.textContent=A,H=_(),C=m("p"),C.innerHTML=E,L=_(),x=m("h2"),x.textContent=R,T=_(),q=m("p"),q.innerHTML=$,this.h()},l(n){t=d(n,"P",{"data-svelte-h":!0}),g(t)!=="svelte-xfb6jk"&&(t.innerHTML=a),c=v(n),s=d(n,"PRE",{class:!0});var i=V(s);e=se(i,!1),i.forEach(r),u=v(n),f=d(n,"P",{"data-svelte-h":!0}),g(f)!=="svelte-rwvclt"&&(f.textContent=z),w=v(n),h=d(n,"UL",{"data-svelte-h":!0}),g(h)!=="svelte-1objkrr"&&(h.innerHTML=P),y=v(n),k=d(n,"P",{"data-svelte-h":!0}),g(k)!=="svelte-uedqlf"&&(k.textContent=S),M=v(n),b=d(n,"H2",{"data-svelte-h":!0}),g(b)!=="svelte-1g5ta6o"&&(b.textContent=A),H=v(n),C=d(n,"P",{"data-svelte-h":!0}),g(C)!=="svelte-rulmzu"&&(C.innerHTML=E),L=v(n),x=d(n,"H2",{"data-svelte-h":!0}),g(x)!=="svelte-qjxet8"&&(x.textContent=R),T=v(n),q=d(n,"P",{"data-svelte-h":!0}),g(q)!=="svelte-1m0ijoc"&&(q.innerHTML=$),this.h()},h(){e.a=null,le(s,"class","language-yaml")},m(n,i){p(n,t,i),p(n,c,i),p(n,s,i),e.m(l,s),p(n,u,i),p(n,f,i),p(n,w,i),p(n,h,i),p(n,y,i),p(n,k,i),p(n,M,i),p(n,b,i),p(n,H,i),p(n,C,i),p(n,L,i),p(n,x,i),p(n,T,i),p(n,q,i)},p:X,d(n){n&&(r(t),r(c),r(s),r(u),r(f),r(w),r(h),r(y),r(k),r(M),r(b),r(H),r(C),r(L),r(x),r(T),r(q))}}}function ce(o){let t,a;const c=[o[0],B];let s={$$slots:{default:[re]},$$scope:{ctx:o}};for(let e=0;e{a(0,t=j(j({},t),D(c)))},t=D(t),[t]}class de extends J{constructor(t){super(),N(this,t,pe,ce,F,{})}}export{de as default,B as metadata}; diff --git a/dist/_app/immutable/chunks/proposer_guide.jq4D-DxX.js.br b/dist/_app/immutable/chunks/proposer_guide.jq4D-DxX.js.br deleted file mode 100644 index 122b28a..0000000 Binary files a/dist/_app/immutable/chunks/proposer_guide.jq4D-DxX.js.br and /dev/null differ diff --git a/dist/_app/immutable/chunks/proposer_guide.jq4D-DxX.js.gz b/dist/_app/immutable/chunks/proposer_guide.jq4D-DxX.js.gz deleted file mode 100644 index 32f08a2..0000000 Binary files a/dist/_app/immutable/chunks/proposer_guide.jq4D-DxX.js.gz and /dev/null differ diff --git a/dist/_app/immutable/entry/app.KkPoROGc.js b/dist/_app/immutable/entry/app.KkPoROGc.js new file mode 100644 index 0000000..e43eec4 --- /dev/null +++ b/dist/_app/immutable/entry/app.KkPoROGc.js @@ -0,0 +1,7 @@ +import{_ as c}from"../chunks/preload-helper.0HuHagjb.js";import{s as S,a as j,o as C,t as M,b as V}from"../chunks/scheduler.aZRR5A_O.js";import{S as U,i as z,s as B,e as d,c as F,a as w,t as h,b as P,d as g,f as E,g as G,h as H,j as J,k as A,l as p,m as K,n as Q,o as W,p as R,q as v,r as k,u as L,v as D,w as I}from"../chunks/index.AIcdAWo0.js";const nt={};function X(s){let t,i,n;var r=s[1][0];function u(e,o){return{props:{data:e[3],form:e[2]}}}return r&&(t=v(r,u(s)),s[12](t)),{c(){t&&k(t.$$.fragment),i=d()},l(e){t&&L(t.$$.fragment,e),i=d()},m(e,o){t&&D(t,e,o),w(e,i,o),n=!0},p(e,o){if(o&2&&r!==(r=e[1][0])){if(t){R();const _=t;h(_.$$.fragment,1,0,()=>{I(_,1)}),P()}r?(t=v(r,u(e)),e[12](t),k(t.$$.fragment),g(t.$$.fragment,1),D(t,i.parentNode,i)):t=null}else if(r){const _={};o&8&&(_.data=e[3]),o&4&&(_.form=e[2]),t.$set(_)}},i(e){n||(t&&g(t.$$.fragment,e),n=!0)},o(e){t&&h(t.$$.fragment,e),n=!1},d(e){e&&E(i),s[12](null),t&&I(t,e)}}}function Y(s){let t,i,n;var r=s[1][0];function u(e,o){return{props:{data:e[3],$$slots:{default:[Z]},$$scope:{ctx:e}}}}return r&&(t=v(r,u(s)),s[11](t)),{c(){t&&k(t.$$.fragment),i=d()},l(e){t&&L(t.$$.fragment,e),i=d()},m(e,o){t&&D(t,e,o),w(e,i,o),n=!0},p(e,o){if(o&2&&r!==(r=e[1][0])){if(t){R();const _=t;h(_.$$.fragment,1,0,()=>{I(_,1)}),P()}r?(t=v(r,u(e)),e[11](t),k(t.$$.fragment),g(t.$$.fragment,1),D(t,i.parentNode,i)):t=null}else if(r){const _={};o&8&&(_.data=e[3]),o&8215&&(_.$$scope={dirty:o,ctx:e}),t.$set(_)}},i(e){n||(t&&g(t.$$.fragment,e),n=!0)},o(e){t&&h(t.$$.fragment,e),n=!1},d(e){e&&E(i),s[11](null),t&&I(t,e)}}}function Z(s){let t,i,n;var r=s[1][1];function u(e,o){return{props:{data:e[4],form:e[2]}}}return r&&(t=v(r,u(s)),s[10](t)),{c(){t&&k(t.$$.fragment),i=d()},l(e){t&&L(t.$$.fragment,e),i=d()},m(e,o){t&&D(t,e,o),w(e,i,o),n=!0},p(e,o){if(o&2&&r!==(r=e[1][1])){if(t){R();const _=t;h(_.$$.fragment,1,0,()=>{I(_,1)}),P()}r?(t=v(r,u(e)),e[10](t),k(t.$$.fragment),g(t.$$.fragment,1),D(t,i.parentNode,i)):t=null}else if(r){const _={};o&16&&(_.data=e[4]),o&4&&(_.form=e[2]),t.$set(_)}},i(e){n||(t&&g(t.$$.fragment,e),n=!0)},o(e){t&&h(t.$$.fragment,e),n=!1},d(e){e&&E(i),s[10](null),t&&I(t,e)}}}function O(s){let t,i=s[6]&&T(s);return{c(){t=G("div"),i&&i.c(),this.h()},l(n){t=H(n,"DIV",{id:!0,"aria-live":!0,"aria-atomic":!0,style:!0});var r=J(t);i&&i.l(r),r.forEach(E),this.h()},h(){A(t,"id","svelte-announcer"),A(t,"aria-live","assertive"),A(t,"aria-atomic","true"),p(t,"position","absolute"),p(t,"left","0"),p(t,"top","0"),p(t,"clip","rect(0 0 0 0)"),p(t,"clip-path","inset(50%)"),p(t,"overflow","hidden"),p(t,"white-space","nowrap"),p(t,"width","1px"),p(t,"height","1px")},m(n,r){w(n,t,r),i&&i.m(t,null)},p(n,r){n[6]?i?i.p(n,r):(i=T(n),i.c(),i.m(t,null)):i&&(i.d(1),i=null)},d(n){n&&E(t),i&&i.d()}}}function T(s){let t;return{c(){t=K(s[7])},l(i){t=Q(i,s[7])},m(i,n){w(i,t,n)},p(i,n){n&128&&W(t,i[7])},d(i){i&&E(t)}}}function $(s){let t,i,n,r,u;const e=[Y,X],o=[];function _(a,m){return a[1][1]?0:1}t=_(s),i=o[t]=e[t](s);let f=s[5]&&O(s);return{c(){i.c(),n=B(),f&&f.c(),r=d()},l(a){i.l(a),n=F(a),f&&f.l(a),r=d()},m(a,m){o[t].m(a,m),w(a,n,m),f&&f.m(a,m),w(a,r,m),u=!0},p(a,[m]){let b=t;t=_(a),t===b?o[t].p(a,m):(R(),h(o[b],1,1,()=>{o[b]=null}),P(),i=o[t],i?i.p(a,m):(i=o[t]=e[t](a),i.c()),g(i,1),i.m(n.parentNode,n)),a[5]?f?f.p(a,m):(f=O(a),f.c(),f.m(r.parentNode,r)):f&&(f.d(1),f=null)},i(a){u||(g(i),u=!0)},o(a){h(i),u=!1},d(a){a&&(E(n),E(r)),o[t].d(a),f&&f.d(a)}}}function x(s,t,i){let{stores:n}=t,{page:r}=t,{constructors:u}=t,{components:e=[]}=t,{form:o}=t,{data_0:_=null}=t,{data_1:f=null}=t;j(n.page.notify);let a=!1,m=!1,b=null;C(()=>{const l=n.page.subscribe(()=>{a&&(i(6,m=!0),M().then(()=>{i(7,b=document.title||"untitled page")}))});return i(5,a=!0),l});function y(l){V[l?"unshift":"push"](()=>{e[1]=l,i(0,e)})}function N(l){V[l?"unshift":"push"](()=>{e[0]=l,i(0,e)})}function q(l){V[l?"unshift":"push"](()=>{e[0]=l,i(0,e)})}return s.$$set=l=>{"stores"in l&&i(8,n=l.stores),"page"in l&&i(9,r=l.page),"constructors"in l&&i(1,u=l.constructors),"components"in l&&i(0,e=l.components),"form"in l&&i(2,o=l.form),"data_0"in l&&i(3,_=l.data_0),"data_1"in l&&i(4,f=l.data_1)},s.$$.update=()=>{s.$$.dirty&768&&n.page.set(r)},[e,u,o,_,f,a,m,b,n,r,y,N,q]}class rt extends U{constructor(t){super(),z(this,t,x,$,S,{stores:8,page:9,constructors:1,components:0,form:2,data_0:3,data_1:4})}}const ot=[()=>c(()=>import("../nodes/0.uMzUYRGs.js"),__vite__mapDeps([0,1,2,3]),import.meta.url),()=>c(()=>import("../nodes/1.tUBg_osC.js"),__vite__mapDeps([4,1,2]),import.meta.url),()=>c(()=>import("../nodes/2.RD5SDQWd.js"),__vite__mapDeps([5,1,2,6,7]),import.meta.url),()=>c(()=>import("../nodes/3.48xp-1q7.js"),__vite__mapDeps([8,1,2,6,7]),import.meta.url),()=>c(()=>import("../nodes/4.uhJTyLRn.js"),__vite__mapDeps([9,1,2,10,6,7]),import.meta.url),()=>c(()=>import("../nodes/5.AXV32Mz_.js"),__vite__mapDeps([11,12,13,1,2]),import.meta.url),()=>c(()=>import("../nodes/6.9JEuxLd_.js"),__vite__mapDeps([14,1,2,7]),import.meta.url),()=>c(()=>import("../nodes/7.jrp5SQtg.js"),__vite__mapDeps([15,1,2,10,6,7]),import.meta.url),()=>c(()=>import("../nodes/8.id8kTULq.js"),__vite__mapDeps([16,1,2,10,6,7]),import.meta.url),()=>c(()=>import("../nodes/9.ceqUHxWv.js"),__vite__mapDeps([17,12,13,1,2]),import.meta.url),()=>c(()=>import("../nodes/10.FW_xLFIP.js"),__vite__mapDeps([18,1,2,10,19]),import.meta.url),()=>c(()=>import("../nodes/11.yj6_Ot6w.js"),__vite__mapDeps([20,1,2,10,21,19]),import.meta.url),()=>c(()=>import("../nodes/12.SIaWLFDS.js"),__vite__mapDeps([22,1,2,10,19]),import.meta.url),()=>c(()=>import("../nodes/13.b5Jjh3ef.js"),__vite__mapDeps([23,1,2,10,21,6,7,19]),import.meta.url),()=>c(()=>import("../nodes/14.ELzCsYqP.js"),__vite__mapDeps([24,1,2,6,7]),import.meta.url)],st=[],_t={"/":[2],"/accueil":[3],"/articles":[4],"/articles/[slug]":[5],"/contacts":[6],"/evenements":[7],"/guides":[8],"/guides/[slug]":[9],"/membres":[10],"/outils":[11],"/presse":[12],"/reseaux":[13],"/ressources":[14]},at={handleError:({error:s})=>{console.error(s)}};export{_t as dictionary,at as hooks,nt as matchers,ot as nodes,rt as root,st as server_loads}; +function __vite__mapDeps(indexes) { + if (!__vite__mapDeps.viteFileDeps) { + __vite__mapDeps.viteFileDeps = ["../nodes/0.uMzUYRGs.js","../chunks/scheduler.aZRR5A_O.js","../chunks/index.AIcdAWo0.js","../assets/0.B2YDv0ji.css","../nodes/1.tUBg_osC.js","../nodes/2.RD5SDQWd.js","../chunks/Info.bs_Ss2Q-.js","../chunks/marked.esm.hS8hU7E4.js","../nodes/3.48xp-1q7.js","../nodes/4.uhJTyLRn.js","../chunks/each.-oqiv04n.js","../nodes/5.AXV32Mz_.js","../chunks/preload-helper.0HuHagjb.js","../chunks/dynamic-import-helper.0gtGTknh.js","../nodes/6.9JEuxLd_.js","../nodes/7.jrp5SQtg.js","../nodes/8.id8kTULq.js","../nodes/9.ceqUHxWv.js","../nodes/10.FW_xLFIP.js","../chunks/utils.Tkfr06Vk.js","../nodes/11.yj6_Ot6w.js","../chunks/SoftwareCard.4ve1z996.js","../nodes/12.SIaWLFDS.js","../nodes/13.b5Jjh3ef.js","../nodes/14.ELzCsYqP.js"] + } + return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) +} \ No newline at end of file diff --git a/dist/_app/immutable/entry/app.KkPoROGc.js.br b/dist/_app/immutable/entry/app.KkPoROGc.js.br new file mode 100644 index 0000000..7755e58 Binary files /dev/null and b/dist/_app/immutable/entry/app.KkPoROGc.js.br differ diff --git a/dist/_app/immutable/entry/app.KkPoROGc.js.gz b/dist/_app/immutable/entry/app.KkPoROGc.js.gz new file mode 100644 index 0000000..159f191 Binary files /dev/null and b/dist/_app/immutable/entry/app.KkPoROGc.js.gz differ diff --git a/dist/_app/immutable/entry/app.eWdXDQlY.js b/dist/_app/immutable/entry/app.eWdXDQlY.js deleted file mode 100644 index d98d71d..0000000 --- a/dist/_app/immutable/entry/app.eWdXDQlY.js +++ /dev/null @@ -1,7 +0,0 @@ -import{_ as u}from"../chunks/preload-helper.0HuHagjb.js";import{s as S,a as j,o as C,t as M,b as V}from"../chunks/scheduler.aZRR5A_O.js";import{S as U,i as z,s as B,e as d,c as F,a as E,t as h,b as P,d as g,f as w,g as G,h as H,j as J,k as A,l as p,m as K,n as Q,o as W,p as R,q as v,r as k,u as L,v as D,w as I}from"../chunks/index.ciNBPAxl.js";const nt={};function X(o){let t,i,n;var r=o[1][0];function c(e,s){return{props:{data:e[3],form:e[2]}}}return r&&(t=v(r,c(o)),o[12](t)),{c(){t&&k(t.$$.fragment),i=d()},l(e){t&&L(t.$$.fragment,e),i=d()},m(e,s){t&&D(t,e,s),E(e,i,s),n=!0},p(e,s){if(s&2&&r!==(r=e[1][0])){if(t){R();const _=t;h(_.$$.fragment,1,0,()=>{I(_,1)}),P()}r?(t=v(r,c(e)),e[12](t),k(t.$$.fragment),g(t.$$.fragment,1),D(t,i.parentNode,i)):t=null}else if(r){const _={};s&8&&(_.data=e[3]),s&4&&(_.form=e[2]),t.$set(_)}},i(e){n||(t&&g(t.$$.fragment,e),n=!0)},o(e){t&&h(t.$$.fragment,e),n=!1},d(e){e&&w(i),o[12](null),t&&I(t,e)}}}function Y(o){let t,i,n;var r=o[1][0];function c(e,s){return{props:{data:e[3],$$slots:{default:[Z]},$$scope:{ctx:e}}}}return r&&(t=v(r,c(o)),o[11](t)),{c(){t&&k(t.$$.fragment),i=d()},l(e){t&&L(t.$$.fragment,e),i=d()},m(e,s){t&&D(t,e,s),E(e,i,s),n=!0},p(e,s){if(s&2&&r!==(r=e[1][0])){if(t){R();const _=t;h(_.$$.fragment,1,0,()=>{I(_,1)}),P()}r?(t=v(r,c(e)),e[11](t),k(t.$$.fragment),g(t.$$.fragment,1),D(t,i.parentNode,i)):t=null}else if(r){const _={};s&8&&(_.data=e[3]),s&8215&&(_.$$scope={dirty:s,ctx:e}),t.$set(_)}},i(e){n||(t&&g(t.$$.fragment,e),n=!0)},o(e){t&&h(t.$$.fragment,e),n=!1},d(e){e&&w(i),o[11](null),t&&I(t,e)}}}function Z(o){let t,i,n;var r=o[1][1];function c(e,s){return{props:{data:e[4],form:e[2]}}}return r&&(t=v(r,c(o)),o[10](t)),{c(){t&&k(t.$$.fragment),i=d()},l(e){t&&L(t.$$.fragment,e),i=d()},m(e,s){t&&D(t,e,s),E(e,i,s),n=!0},p(e,s){if(s&2&&r!==(r=e[1][1])){if(t){R();const _=t;h(_.$$.fragment,1,0,()=>{I(_,1)}),P()}r?(t=v(r,c(e)),e[10](t),k(t.$$.fragment),g(t.$$.fragment,1),D(t,i.parentNode,i)):t=null}else if(r){const _={};s&16&&(_.data=e[4]),s&4&&(_.form=e[2]),t.$set(_)}},i(e){n||(t&&g(t.$$.fragment,e),n=!0)},o(e){t&&h(t.$$.fragment,e),n=!1},d(e){e&&w(i),o[10](null),t&&I(t,e)}}}function O(o){let t,i=o[6]&&T(o);return{c(){t=G("div"),i&&i.c(),this.h()},l(n){t=H(n,"DIV",{id:!0,"aria-live":!0,"aria-atomic":!0,style:!0});var r=J(t);i&&i.l(r),r.forEach(w),this.h()},h(){A(t,"id","svelte-announcer"),A(t,"aria-live","assertive"),A(t,"aria-atomic","true"),p(t,"position","absolute"),p(t,"left","0"),p(t,"top","0"),p(t,"clip","rect(0 0 0 0)"),p(t,"clip-path","inset(50%)"),p(t,"overflow","hidden"),p(t,"white-space","nowrap"),p(t,"width","1px"),p(t,"height","1px")},m(n,r){E(n,t,r),i&&i.m(t,null)},p(n,r){n[6]?i?i.p(n,r):(i=T(n),i.c(),i.m(t,null)):i&&(i.d(1),i=null)},d(n){n&&w(t),i&&i.d()}}}function T(o){let t;return{c(){t=K(o[7])},l(i){t=Q(i,o[7])},m(i,n){E(i,t,n)},p(i,n){n&128&&W(t,i[7])},d(i){i&&w(t)}}}function $(o){let t,i,n,r,c;const e=[Y,X],s=[];function _(a,m){return a[1][1]?0:1}t=_(o),i=s[t]=e[t](o);let l=o[5]&&O(o);return{c(){i.c(),n=B(),l&&l.c(),r=d()},l(a){i.l(a),n=F(a),l&&l.l(a),r=d()},m(a,m){s[t].m(a,m),E(a,n,m),l&&l.m(a,m),E(a,r,m),c=!0},p(a,[m]){let b=t;t=_(a),t===b?s[t].p(a,m):(R(),h(s[b],1,1,()=>{s[b]=null}),P(),i=s[t],i?i.p(a,m):(i=s[t]=e[t](a),i.c()),g(i,1),i.m(n.parentNode,n)),a[5]?l?l.p(a,m):(l=O(a),l.c(),l.m(r.parentNode,r)):l&&(l.d(1),l=null)},i(a){c||(g(i),c=!0)},o(a){h(i),c=!1},d(a){a&&(w(n),w(r)),s[t].d(a),l&&l.d(a)}}}function x(o,t,i){let{stores:n}=t,{page:r}=t,{constructors:c}=t,{components:e=[]}=t,{form:s}=t,{data_0:_=null}=t,{data_1:l=null}=t;j(n.page.notify);let a=!1,m=!1,b=null;C(()=>{const f=n.page.subscribe(()=>{a&&(i(6,m=!0),M().then(()=>{i(7,b=document.title||"untitled page")}))});return i(5,a=!0),f});function y(f){V[f?"unshift":"push"](()=>{e[1]=f,i(0,e)})}function N(f){V[f?"unshift":"push"](()=>{e[0]=f,i(0,e)})}function q(f){V[f?"unshift":"push"](()=>{e[0]=f,i(0,e)})}return o.$$set=f=>{"stores"in f&&i(8,n=f.stores),"page"in f&&i(9,r=f.page),"constructors"in f&&i(1,c=f.constructors),"components"in f&&i(0,e=f.components),"form"in f&&i(2,s=f.form),"data_0"in f&&i(3,_=f.data_0),"data_1"in f&&i(4,l=f.data_1)},o.$$.update=()=>{o.$$.dirty&768&&n.page.set(r)},[e,c,s,_,l,a,m,b,n,r,y,N,q]}class rt extends U{constructor(t){super(),z(this,t,x,$,S,{stores:8,page:9,constructors:1,components:0,form:2,data_0:3,data_1:4})}}const st=[()=>u(()=>import("../nodes/0.60GMPCkA.js"),__vite__mapDeps([0,1,2,3]),import.meta.url),()=>u(()=>import("../nodes/1.pZvj6-CS.js"),__vite__mapDeps([4,1,2]),import.meta.url),()=>u(()=>import("../nodes/2.YD8HTYt7.js"),__vite__mapDeps([5,1,2,6,7]),import.meta.url),()=>u(()=>import("../nodes/3.qqim2H7R.js"),__vite__mapDeps([8,1,2,6,7]),import.meta.url),()=>u(()=>import("../nodes/4.CPFN9ZRQ.js"),__vite__mapDeps([9,1,2,7]),import.meta.url),()=>u(()=>import("../nodes/5.LhrW8NTK.js"),__vite__mapDeps([10,1,2,11,6,7]),import.meta.url),()=>u(()=>import("../nodes/6.uAKuUh7A.js"),__vite__mapDeps([12,1,2,11,6,7]),import.meta.url),()=>u(()=>import("../nodes/7.1t__7h1j.js"),__vite__mapDeps([13,14,1,2]),import.meta.url),()=>u(()=>import("../nodes/8.WpdHpzGp.js"),__vite__mapDeps([15,1,2,11,16]),import.meta.url),()=>u(()=>import("../nodes/9.RIT4c5a5.js"),__vite__mapDeps([17,1,2,11,18,16]),import.meta.url),()=>u(()=>import("../nodes/10.a7r1yW9n.js"),__vite__mapDeps([19,1,2,11,16]),import.meta.url),()=>u(()=>import("../nodes/11.wHHXrLZY.js"),__vite__mapDeps([20,1,2,11,18,6,7,16]),import.meta.url),()=>u(()=>import("../nodes/12.lDmIZB1G.js"),__vite__mapDeps([21,1,2,6,7]),import.meta.url)],ot=[],_t={"/":[2],"/accueil":[3],"/contacts":[4],"/evenements":[5],"/guides":[6],"/guides/[slug]":[7],"/membres":[8],"/outils":[9],"/presse":[10],"/reseaux":[11],"/ressources":[12]},at={handleError:({error:o})=>{console.error(o)}};export{_t as dictionary,at as hooks,nt as matchers,st as nodes,rt as root,ot as server_loads}; -function __vite__mapDeps(indexes) { - if (!__vite__mapDeps.viteFileDeps) { - __vite__mapDeps.viteFileDeps = ["../nodes/0.60GMPCkA.js","../chunks/scheduler.aZRR5A_O.js","../chunks/index.ciNBPAxl.js","../assets/0.i2cAdolL.css","../nodes/1.pZvj6-CS.js","../nodes/2.YD8HTYt7.js","../chunks/Info.NO-uVT9H.js","../chunks/marked.esm.hS8hU7E4.js","../nodes/3.qqim2H7R.js","../nodes/4.CPFN9ZRQ.js","../nodes/5.LhrW8NTK.js","../chunks/each.-oqiv04n.js","../nodes/6.uAKuUh7A.js","../nodes/7.1t__7h1j.js","../chunks/preload-helper.0HuHagjb.js","../nodes/8.WpdHpzGp.js","../chunks/utils.Tkfr06Vk.js","../nodes/9.RIT4c5a5.js","../chunks/SoftwareCard.9Bpc13j4.js","../nodes/10.a7r1yW9n.js","../nodes/11.wHHXrLZY.js","../nodes/12.lDmIZB1G.js"] - } - return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) -} \ No newline at end of file diff --git a/dist/_app/immutable/entry/app.eWdXDQlY.js.br b/dist/_app/immutable/entry/app.eWdXDQlY.js.br deleted file mode 100644 index 0bcf49f..0000000 Binary files a/dist/_app/immutable/entry/app.eWdXDQlY.js.br and /dev/null differ diff --git a/dist/_app/immutable/entry/app.eWdXDQlY.js.gz b/dist/_app/immutable/entry/app.eWdXDQlY.js.gz deleted file mode 100644 index fcc6d80..0000000 Binary files a/dist/_app/immutable/entry/app.eWdXDQlY.js.gz and /dev/null differ diff --git a/dist/_app/immutable/entry/start.eDKqTZyY.js b/dist/_app/immutable/entry/start.8lMiaYl3.js similarity index 83% rename from dist/_app/immutable/entry/start.eDKqTZyY.js rename to dist/_app/immutable/entry/start.8lMiaYl3.js index ea47cc1..90b130f 100644 --- a/dist/_app/immutable/entry/start.eDKqTZyY.js +++ b/dist/_app/immutable/entry/start.8lMiaYl3.js @@ -1,4 +1,4 @@ -import{n as $e,s as $t,o as Ie,t as Pe}from"../chunks/scheduler.aZRR5A_O.js";new URL("sveltekit-internal://");function It(e,n){return e==="/"||n==="ignore"?e:n==="never"?e.endsWith("/")?e.slice(0,-1):e:n==="always"&&!e.endsWith("/")?e+"/":e}function Pt(e){return e.split("%25").map(decodeURI).join("%25")}function jt(e){for(const n in e)e[n]=decodeURIComponent(e[n]);return e}function je({href:e}){return e.split("#")[0]}const xt=["href","pathname","search","toString","toJSON"];function Lt(e,n,s){const o=new URL(e);Object.defineProperty(o,"searchParams",{value:new Proxy(o.searchParams,{get(l,f){if(f==="get"||f==="getAll"||f==="has")return i=>(s(i),l[f](i));n();const _=Reflect.get(l,f);return typeof _=="function"?_.bind(l):_}}),enumerable:!0,configurable:!0});for(const l of xt)Object.defineProperty(o,l,{get(){return n(),e[l]},enumerable:!0,configurable:!0});return Nt(o),o}function Nt(e){Object.defineProperty(e,"hash",{get(){throw new Error("Cannot access event.url.hash. Consider using `$page.url.hash` inside a component instead")}})}const Ut="/__data.json",Tt=".html__data.json";function Ct(e){return e.endsWith(".html")?e.replace(/\.html$/,Tt):e.replace(/\/$/,"")+Ut}function Dt(...e){let n=5381;for(const s of e)if(typeof s=="string"){let o=s.length;for(;o;)n=n*33^s.charCodeAt(--o)}else if(ArrayBuffer.isView(s)){const o=new Uint8Array(s.buffer,s.byteOffset,s.byteLength);let l=o.length;for(;l;)n=n*33^o[--l]}else throw new TypeError("value must be a string or TypedArray");return(n>>>0).toString(36)}const ht=window.fetch;window.fetch=(e,n)=>((e instanceof Request?e.method:n?.method||"GET")!=="GET"&&se.delete(Me(e)),ht(e,n));const se=new Map;function Vt(e){const n=atob(e),s=new Uint8Array(n.length);for(let o=0;o0){const o=Me(e,s),l=se.get(o);if(l){if(performance.now(){const l=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(o);if(l)return n.push({name:l[1],matcher:l[2],optional:!1,rest:!0,chained:!0}),"(?:/(.*))?";const f=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(o);if(f)return n.push({name:f[1],matcher:f[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!o)return;const _=o.split(/\[(.+?)\](?!\])/);return"/"+_.map((d,c)=>{if(c%2){if(d.startsWith("x+"))return xe(String.fromCharCode(parseInt(d.slice(2),16)));if(d.startsWith("u+"))return xe(String.fromCharCode(...d.slice(2).split("-").map(R=>parseInt(R,16))));const g=Ft.exec(d);if(!g)throw new Error(`Invalid param: ${d}. Params and matcher names can only have underscores and alphanumeric characters.`);const[,w,I,k,$]=g;return n.push({name:k,matcher:$,optional:!!w,rest:!!I,chained:I?c===1&&_[0]==="":!1}),I?"(.*?)":w?"([^/]*)?":"([^/]+?)"}return xe(d)}).join("")}).join("")}/?$`),params:n}}function Gt(e){return!/^\([^)]+\)$/.test(e)}function Ht(e){return e.slice(1).split("/").filter(Gt)}function Jt(e,n,s){const o={},l=e.slice(1),f=l.filter(i=>i!==void 0);let _=0;for(let i=0;ig).join("/"),_=0),c===void 0){d.rest&&(o[d.name]="");continue}if(!d.matcher||s[d.matcher](c)){o[d.name]=c;const g=n[i+1],w=l[i+1];g&&!g.rest&&g.optional&&w&&d.chained&&(_=0),!g&&!w&&Object.keys(o).length===f.length&&(_=0);continue}if(d.optional&&d.chained){_++;continue}return}if(!_)return o}function xe(e){return e.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function Kt({nodes:e,server_loads:n,dictionary:s,matchers:o}){const l=new Set(n);return Object.entries(s).map(([i,[d,c,g]])=>{const{pattern:w,params:I}=Bt(i),k={id:i,exec:$=>{const R=w.exec($);if(R)return Jt(R,I,o)},errors:[1,...g||[]].map($=>e[$]),layouts:[0,...c||[]].map(_),leaf:f(d)};return k.errors.length=k.layouts.length=Math.max(k.errors.length,k.layouts.length),k});function f(i){const d=i<0;return d&&(i=~i),[d,e[i]]}function _(i){return i===void 0?i:[l.has(i),e[i]]}}function Fe(e,n=JSON.parse){try{return n(sessionStorage[e])}catch{}}function Le(e,n,s=JSON.stringify){const o=s(n);try{sessionStorage[e]=o}catch{}}const W=[];function Be(e,n=$e){let s;const o=new Set;function l(i){if($t(e,i)&&(e=i,s)){const d=!W.length;for(const c of o)c[1](),W.push(c,e);if(d){for(let c=0;c{o.delete(c),o.size===0&&s&&(s(),s=null)}}return{set:l,update:f,subscribe:_}}const q=globalThis.__sveltekit_qg8pvi?.base??"",zt=globalThis.__sveltekit_qg8pvi?.assets??q,Yt="1703349664352",_t="sveltekit:snapshot",gt="sveltekit:scroll",mt="sveltekit:states",Ne="sveltekit:pageurl",B="sveltekit:history",K="sveltekit:navigation",ve={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},ie=location.origin;function ae(e){if(e instanceof URL)return e;let n=document.baseURI;if(!n){const s=document.getElementsByTagName("base");n=s.length?s[0].href:document.URL}return new URL(e,n)}function qe(){return{x:pageXOffset,y:pageYOffset}}function X(e,n){return e.getAttribute(`data-sveltekit-${n}`)}const at={...ve,"":ve.hover};function yt(e){let n=e.assignedSlot??e.parentNode;return n?.nodeType===11&&(n=n.host),n}function ot(e,n){for(;e&&e!==n;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=yt(e)}}function Ue(e,n){let s;try{s=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI)}catch{}const o=e instanceof SVGAElement?e.target.baseVal:e.target,l=!s||!!o||ye(s,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),f=s?.origin===ie&&e.hasAttribute("download");return{url:s,external:l,target:o,download:f}}function _e(e){let n=null,s=null,o=null,l=null,f=null,_=null,i=e;for(;i&&i!==document.documentElement;)o===null&&(o=X(i,"preload-code")),l===null&&(l=X(i,"preload-data")),n===null&&(n=X(i,"keepfocus")),s===null&&(s=X(i,"noscroll")),f===null&&(f=X(i,"reload")),_===null&&(_=X(i,"replacestate")),i=yt(i);function d(c){switch(c){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:at[o??"off"],preload_data:at[l??"off"],keepfocus:d(n),noscroll:d(s),reload:d(f),replace_state:d(_)}}function st(e){const n=Be(e);let s=!0;function o(){s=!0,n.update(_=>_)}function l(_){s=!1,n.set(_)}function f(_){let i;return n.subscribe(d=>{(i===void 0||s&&d!==i)&&_(i=d)})}return{notify:o,set:l,subscribe:f}}function Wt(){const{set:e,subscribe:n}=Be(!1);let s;async function o(){clearTimeout(s);try{const l=await fetch(`${zt}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!l.ok)return!1;const _=(await l.json()).version!==Yt;return _&&(e(!0),clearTimeout(s)),_}catch{return!1}}return{subscribe:n,check:o}}function ye(e,n){return e.origin!==ie||!e.pathname.startsWith(n)}class Te extends Error{constructor(n,s){super(n),this.name="DevalueError",this.path=s.join("")}}function it(e){return Object(e)!==e}const Xt=Object.getOwnPropertyNames(Object.prototype).sort().join("\0");function Zt(e){const n=Object.getPrototypeOf(e);return n===Object.prototype||n===null||Object.getOwnPropertyNames(n).sort().join("\0")===Xt}function Qt(e){return Object.prototype.toString.call(e).slice(8,-1)}function en(e){switch(e){case'"':return'\\"';case"<":return"\\u003C";case"\\":return"\\\\";case` -`:return"\\n";case"\r":return"\\r";case" ":return"\\t";case"\b":return"\\b";case"\f":return"\\f";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";default:return e<" "?`\\u${e.charCodeAt(0).toString(16).padStart(4,"0")}`:""}}function Q(e){let n="",s=0;const o=e.length;for(let l=0;l0&&(w+=","),R in c?(f.push(`[${R}]`),w+=i(c[R]),f.pop()):w+=vt;w+="]";break;case"Set":w='["Set"';for(const R of c)w+=`,${i(R)}`;w+="]";break;case"Map":w='["Map"';for(const[R,D]of c)f.push(`.get(${it(R)?Ce(R):"..."})`),w+=`,${i(R)},${i(D)}`;w+="]";break;default:if(!Zt(c))throw new Te("Cannot stringify arbitrary non-POJOs",f);if(Object.getOwnPropertySymbols(c).length>0)throw new Te("Cannot stringify POJOs with symbolic keys",f);if(Object.getPrototypeOf(c)===null){w='["null"';for(const R in c)f.push(`.${R}`),w+=`,${Q(R)},${i(c[R])}`,f.pop();w+="]"}else{w="{";let R=!1;for(const D in c)R&&(w+=","),R=!0,f.push(`.${D}`),w+=`${Q(D)}:${i(c[D])}`,f.pop();w+="}"}}return s[g]=w,g}const d=i(e);return d<0?`${d}`:`[${s.join(",")}]`}function Ce(e){const n=typeof e;return n==="string"?Q(e):e instanceof String?Q(e.toString()):e===void 0?Ge.toString():e===0&&1/e<0?He.toString():n==="bigint"?`["BigInt","${e}"]`:String(e)}const St=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...St];const rn=new Set([...St]);[...rn];function an(e){return e.filter(n=>n!=null)}class we{constructor(n,s){this.status=n,typeof s=="string"?this.body={message:s}:s?this.body=s:this.body={message:`Error: ${n}`}}toString(){return JSON.stringify(this.body)}}class ct{constructor(n,s){this.status=n,this.location=s}}class Je extends Error{constructor(n,s,o){super(o),this.status=n,this.text=s}}const on="x-sveltekit-invalidated",sn="x-sveltekit-trailing-slash";function cn(e){e.client}const G={url:st({}),page:st({}),navigating:Be(null),updated:Wt()};function ge(e){return e instanceof we||e instanceof Je?e.status:500}function ln(e){return e instanceof Je?e.text:"Internal Error"}const z=Fe(gt)??{},oe=Fe(mt,tn)??{},ce=Fe(_t)??{},lt=history.pushState,me=history.replaceState;function De(e){z[e]=qe()}function ft(e,n){let s=e+1;for(;z[s];)delete z[s],s+=1;for(s=n+1;ce[s];)delete ce[s],s+=1}function Z(e){return location.href=e.href,new Promise(()=>{})}function ut(){}function fn(e,n){const s=Kt(e),o=e.nodes[0],l=e.nodes[1];o(),l();const f=document.documentElement,_=[],i=[];let d=null;const c={before_navigate:[],on_navigate:[],after_navigate:[]};let g={branch:[],error:null,url:null},w=!1,I=!1,k=!0,$=!1,R=!1,D=!1,ee=!1,le=!1,M,L=history.state?.[B],V=history.state?.[K];L||(L=V=Date.now(),me.call(history,{...history.state,[B]:L,[K]:V},"",location.href));const be=z[L];be&&(history.scrollRestoration="manual",scrollTo(be.x,be.y));let j,Y,ke;async function Ke(){if(await(ke||=Promise.resolve()),!ke)return;ke=null;const r=ne(g.url,!0);d=null;const t=Y={},a=r&&await Ae(r);t===Y&&(a&&(a.type==="redirect"?await fe(new URL(a.location,g.url).href,{},1,t):(a.props.page!==void 0&&(j=a.props.page),M.$set(a.props))),_.length=0)}function ze(r){i.some(t=>t?.snapshot)&&(ce[r]=i.map(t=>t?.snapshot?.capture()))}function Ye(r){ce[r]?.forEach((t,a)=>{i[a]?.snapshot?.restore(t)})}function We(){De(L),Le(gt,z),ze(V),Le(_t,ce),Le(mt,oe,nn)}async function fe(r,t,a,u){return pe({type:"goto",url:ae(r),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,redirect_count:a,state:t.state,nav_token:u,accept:()=>{t.invalidateAll&&(le=!0)}})}async function Xe(r){return d={id:r.id,promise:Ae(r).then(t=>(t.type==="loaded"&&t.state.error&&(d=null),t))},d.promise}async function ue(r){const t=s.find(a=>a.exec(tt(r)));t&&await Promise.all([...t.layouts,t.leaf].map(a=>a?.[1]()))}function Ze(r){g=r.state;const t=document.querySelector("style[data-sveltekit]");t&&t.remove(),j=r.props.page,M=new e.root({target:n,props:{...r.props,stores:G,components:i},hydrate:!0}),Ye(V);const a={from:null,to:{params:g.params,route:{id:g.route?.id??null},url:new URL(location.href)},willUnload:!1,type:"enter",complete:Promise.resolve()};c.after_navigate.forEach(u=>u(a)),I=!0}async function te({url:r,params:t,branch:a,status:u,error:p,route:h,form:m}){let v="never";for(const A of a)A?.slash!==void 0&&(v=A.slash);r.pathname=It(r.pathname,v),r.search=r.search;const E={type:"loaded",state:{url:r,params:t,branch:a,error:p,route:h},props:{constructors:an(a).map(A=>A.node.component),page:j}};m!==void 0&&(E.props.form=m);let b={},N=!j,U=0;for(let A=0;A(v&&(E.route=!0),y[A])}),params:new Proxy(u,{get:(y,A)=>(v&&E.params.add(A),y[A])}),data:h?.data??null,url:Lt(a,()=>{v&&(E.url=!0)},y=>{v&&E.search_params.add(y)}),async fetch(y,A){let x;y instanceof Request?(x=y.url,A={body:y.method==="GET"||y.method==="HEAD"?void 0:await y.blob(),cache:y.cache,credentials:y.credentials,headers:y.headers,integrity:y.integrity,keepalive:y.keepalive,method:y.method,mode:y.mode,redirect:y.redirect,referrer:y.referrer,referrerPolicy:y.referrerPolicy,signal:y.signal,...A}):x=y;const O=new URL(x,a);return v&&N(O.href),O.origin===a.origin&&(x=O.href.slice(a.origin.length)),I?Mt(x,O.href,A):qt(x,A)},setHeaders:()=>{},depends:N,parent(){return v&&(E.parent=!0),t()},untrack(y){v=!1;try{return y()}finally{v=!0}}};m=await b.universal.load.call(null,U)??null}return{node:b,loader:r,server:h,universal:b.universal?.load?{type:"data",data:m,uses:E}:null,data:m??h?.data??null,slash:q&&(a.pathname===q||a.pathname===q+"/")?"always":b.universal?.trailingSlash??h?.slash}}function Qe(r,t,a,u,p,h){if(le)return!0;if(!p)return!1;if(p.parent&&r||p.route&&t||p.url&&a)return!0;for(const m of p.search_params)if(u.has(m))return!0;for(const m of p.params)if(h[m]!==g.params[m])return!0;for(const m of p.dependencies)if(_.some(v=>v(new URL(m))))return!0;return!1}function Se(r,t){return r?.type==="data"?r:r?.type==="skip"?t??null:null}function Rt(r,t){if(!r)return new Set(t.searchParams.keys());const a=new Set([...r.searchParams.keys(),...t.searchParams.keys()]);for(const u of a){const p=r.searchParams.getAll(u),h=t.searchParams.getAll(u);p.every(m=>h.includes(m))&&h.every(m=>p.includes(m))&&a.delete(u)}return a}async function Ae({id:r,invalidating:t,url:a,params:u,route:p}){if(d?.id===r)return d.promise;const{errors:h,layouts:m,leaf:v}=p,E=[...m,v];h.forEach(S=>S?.().catch(()=>{})),E.forEach(S=>S?.[1]().catch(()=>{}));let b=null;const N=g.url?r!==g.url.pathname+g.url.search:!1,U=g.route?p.id!==g.route.id:!1,y=Rt(g.url,a);let A=!1;const x=E.map((S,P)=>{const T=g.branch[P],C=!!S?.[0]&&(T?.loader!==S[1]||Qe(A,U,N,y,T.server?.uses,u));return C&&(A=!0),C});if(x.some(Boolean)){try{b=await dt(a,x)}catch(S){return de({status:ge(S),error:await re(S,{url:a,params:u,route:{id:p.id}}),url:a,route:p})}if(b.type==="redirect")return b}const O=b?.nodes;let F=!1;const H=E.map(async(S,P)=>{if(!S)return;const T=g.branch[P],C=O?.[P];if((!C||C.type==="skip")&&S[1]===T?.loader&&!Qe(F,U,N,y,T.universal?.uses,u))return T;if(F=!0,C?.type==="error")throw C;return Ee({loader:S[1],url:a,params:u,route:p,parent:async()=>{const Re={};for(let Oe=0;Oe{});const J=[];for(let S=0;SPromise.resolve({}),server_data_node:Se(h)}),E={node:await l(),loader:l,universal:null,server:null,data:null};return await te({url:a,params:p,branch:[v,E],status:r,error:t,route:null})}function ne(r,t){if(ye(r,q))return;const a=tt(r.pathname);for(const u of s){const p=u.exec(a);if(p)return{id:r.pathname+r.search,invalidating:t,route:u,params:jt(p),url:r}}}function tt(r){return Pt(r.slice(q.length)||"/")}function nt({url:r,type:t,intent:a,delta:u}){let p=!1;const h=pt(g,a,r,t);u!==void 0&&(h.navigation.delta=u);const m={...h.navigation,cancel:()=>{p=!0,h.reject(new Error("navigation was cancelled"))}};return R||c.before_navigate.forEach(v=>v(m)),p?null:h}async function pe({type:r,url:t,popped:a,keepfocus:u,noscroll:p,replace_state:h,state:m={},redirect_count:v=0,nav_token:E={},accept:b=ut,block:N=ut}){const U=ne(t,!1),y=nt({url:t,type:r,delta:a?.delta,intent:U});if(!y){N();return}const A=L,x=V;b(),R=!0,I&&G.navigating.set(y.navigation),Y=E;let O=U&&await Ae(U);if(!O){if(ye(t,q))return await Z(t);O=await rt(t,{id:null},await re(new Je(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404)}if(t=U?.url||t,Y!==E)return y.reject(new Error("navigation was aborted")),!1;if(O.type==="redirect")if(v>=20)O=await de({status:500,error:await re(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}});else return fe(new URL(O.location,t).href,{},v+1,E),!1;else O.props.page.status>=400&&await G.updated.check()&&await Z(t);if(_.length=0,le=!1,$=!0,De(A),ze(x),O.props.page.url.pathname!==t.pathname&&(t.pathname=O.props.page.url.pathname),m=a?a.state:m,!a){const S=h?0:1,P={[B]:L+=S,[K]:V+=S};(h?me:lt).call(history,P,"",t),h||ft(L,V)}if(oe[L]=m,d=null,O.props.page.state=m,I){g=O.state,O.props.page&&(O.props.page.url=t);const S=(await Promise.all(c.on_navigate.map(P=>P(y.navigation)))).filter(P=>typeof P=="function");if(S.length>0){let P=function(){c.after_navigate=c.after_navigate.filter(T=>!S.includes(T))};S.push(P),c.after_navigate.push(...S)}M.$set(O.props),ee=!0}else Ze(O);const{activeElement:F}=document;await Pe();const H=a?a.scroll:p?qe():null;if(k){const S=t.hash&&document.getElementById(decodeURIComponent(t.hash.slice(1)));H?scrollTo(H.x,H.y):S?S.scrollIntoView():scrollTo(0,0)}const J=document.activeElement!==F&&document.activeElement!==document.body;!u&&!J&&Ve(),k=!0,O.props.page&&(j=O.props.page),R=!1,r==="popstate"&&Ye(V),y.fulfil(void 0),c.after_navigate.forEach(S=>S(y.navigation)),G.navigating.set(null),$=!1}async function rt(r,t,a,u){return r.origin===ie&&r.pathname===location.pathname&&!w?await de({status:u,error:a,url:r,route:t}):await Z(r)}function Ot(){let r;f.addEventListener("mousemove",h=>{const m=h.target;clearTimeout(r),r=setTimeout(()=>{u(m,2)},20)});function t(h){u(h.composedPath()[0],1)}f.addEventListener("mousedown",t),f.addEventListener("touchstart",t,{passive:!0});const a=new IntersectionObserver(h=>{for(const m of h)m.isIntersecting&&(ue(m.target.href),a.unobserve(m.target))},{threshold:0});function u(h,m){const v=ot(h,f);if(!v)return;const{url:E,external:b,download:N}=Ue(v,q);if(b||N)return;const U=_e(v);if(!U.reload)if(m<=U.preload_data){const y=ne(E,!1);y&&Xe(y)}else m<=U.preload_code&&ue(E.pathname)}function p(){a.disconnect();for(const h of f.querySelectorAll("a")){const{url:m,external:v,download:E}=Ue(h,q);if(v||E)continue;const b=_e(h);b.reload||(b.preload_code===ve.viewport&&a.observe(h),b.preload_code===ve.eager&&ue(m.pathname))}}c.after_navigate.push(p),p()}function re(r,t){if(r instanceof we)return r.body;const a=ge(r),u=ln(r);return e.hooks.handleError({error:r,event:t,status:a,message:u})??{message:u}}return{after_navigate:r=>{Ie(()=>(c.after_navigate.push(r),()=>{const t=c.after_navigate.indexOf(r);c.after_navigate.splice(t,1)}))},before_navigate:r=>{Ie(()=>(c.before_navigate.push(r),()=>{const t=c.before_navigate.indexOf(r);c.before_navigate.splice(t,1)}))},on_navigate:r=>{Ie(()=>(c.on_navigate.push(r),()=>{const t=c.on_navigate.indexOf(r);c.on_navigate.splice(t,1)}))},disable_scroll_handling:()=>{($||!I)&&(k=!1)},goto:(r,t={})=>(r=ae(r),r.origin!==ie?Promise.reject(new Error("goto: invalid URL")):fe(r,t,0)),invalidate:r=>{if(typeof r=="function")_.push(r);else{const{href:t}=new URL(r,location.href);_.push(a=>a.href===t)}return Ke()},invalidate_all:()=>(le=!0,Ke()),preload_data:async r=>{const t=ae(r),a=ne(t,!1);if(!a)throw new Error(`Attempted to preload a URL that does not belong to this app: ${t}`);const u=await Xe(a);if(u.type==="redirect")return{type:u.type,location:u.location};const{status:p,data:h}=u.props.page??j;return{type:u.type,status:p,data:h}},preload_code:r=>ue(r),push_state:(r,t)=>{const a={[B]:L+=1,[K]:V,[Ne]:j.url.href};lt.call(history,a,"",ae(r)),j={...j,state:t},M.$set({page:j}),oe[L]=t,ft(L,V)},replace_state:(r,t)=>{const a={[B]:L,[K]:V,[Ne]:j.url.href};me.call(history,a,"",ae(r)),j={...j,state:t},M.$set({page:j}),oe[L]=t},apply_action:async r=>{if(r.type==="error"){const t=new URL(location.href),{branch:a,route:u}=g;if(!u)return;const p=await et(g.branch.length,a,u.errors);if(p){const h=await te({url:t,params:g.params,branch:a.slice(0,p.idx).concat(p.node),status:r.status??500,error:r.error,route:u});g=h.state,M.$set(h.props),Pe().then(Ve)}}else r.type==="redirect"?fe(r.location,{invalidateAll:!0},0):(M.$set({form:null,page:{...j,form:r.data,status:r.status}}),await Pe(),M.$set({form:r.data}),r.type==="success"&&Ve())},_start_router:()=>{history.scrollRestoration="manual",addEventListener("beforeunload",t=>{let a=!1;if(We(),!R){const u=pt(g,void 0,null,"leave"),p={...u.navigation,cancel:()=>{a=!0,u.reject(new Error("navigation was cancelled"))}};c.before_navigate.forEach(h=>h(p))}a?(t.preventDefault(),t.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&We()}),navigator.connection?.saveData||Ot(),f.addEventListener("click",t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;const a=ot(t.composedPath()[0],f);if(!a)return;const{url:u,external:p,target:h,download:m}=Ue(a,q);if(!u)return;if(h==="_parent"||h==="_top"){if(window.parent!==window)return}else if(h&&h!=="_self")return;const v=_e(a);if(!(a instanceof SVGAElement)&&u.protocol!==location.protocol&&!(u.protocol==="https:"||u.protocol==="http:")||m)return;if(p||v.reload){nt({url:u,type:"link"})?R=!0:t.preventDefault();return}const[b,N]=u.href.split("#");if(N!==void 0&&b===je(location)){if(g.url.hash===u.hash){t.preventDefault(),a.ownerDocument.getElementById(N)?.scrollIntoView();return}if(D=!0,De(L),r(u),!v.replace_state)return;D=!1}t.preventDefault(),pe({type:"link",url:u,keepfocus:v.keepfocus,noscroll:v.noscroll,replace_state:v.replace_state??u.href===location.href})}),f.addEventListener("submit",t=>{if(t.defaultPrevented)return;const a=HTMLFormElement.prototype.cloneNode.call(t.target),u=t.submitter;if((u?.formMethod||a.method)!=="get")return;const h=new URL(u?.hasAttribute("formaction")&&u?.formAction||a.action);if(ye(h,q))return;const m=t.target,v=_e(m);if(v.reload)return;t.preventDefault(),t.stopPropagation();const E=new FormData(m),b=u?.getAttribute("name");b&&E.append(b,u?.getAttribute("value")??""),h.search=new URLSearchParams(E).toString(),pe({type:"form",url:h,keepfocus:v.keepfocus,noscroll:v.noscroll,replace_state:v.replace_state??h.href===location.href})}),addEventListener("popstate",async t=>{if(t.state?.[B]){const a=t.state[B];if(Y={},a===L)return;const u=z[a],p=oe[a]??{},h=new URL(t.state[Ne]??location.href),m=t.state[K],v=je(location)===je(g.url);if(m===V&&(ee||v)){r(h),z[L]=qe(),u&&scrollTo(u.x,u.y),p!==j.state&&(j={...j,state:p},M.$set({page:j})),L=a;return}const b=a-L;await pe({type:"popstate",url:h,popped:{state:p,scroll:u,delta:b},accept:()=>{L=a,V=m},block:()=>{history.go(-b)},nav_token:Y})}else if(!D){const a=new URL(location.href);r(a)}}),addEventListener("hashchange",()=>{D&&(D=!1,me.call(history,{...history.state,[B]:++L,[K]:V},"",location.href))});for(const t of document.querySelectorAll("link"))t.rel==="icon"&&(t.href=t.href);addEventListener("pageshow",t=>{t.persisted&&G.navigating.set(null)});function r(t){g.url=t,G.page.set({...j,url:t}),G.page.notify()}},_hydrate:async({status:r=200,error:t,node_ids:a,params:u,route:p,data:h,form:m})=>{w=!0;const v=new URL(location.href);({params:u={},route:p={id:null}}=ne(v,!1)||{});let E;try{const b=a.map(async(y,A)=>{const x=h[A];return x?.uses&&(x.uses=At(x.uses)),Ee({loader:e.nodes[y],url:v,params:u,route:p,parent:async()=>{const O={};for(let F=0;Fy===p.id);if(U){const y=U.layouts;for(let A=0;Al?"1":"0").join(""));const o=await ht(s.href);if(!o.ok){let l;throw o.headers.get("content-type")?.includes("application/json")?l=await o.json():o.status===404?l="Not Found":o.status===500&&(l="Internal Error"),new we(o.status,l)}return new Promise(async l=>{const f=new Map,_=o.body.getReader(),i=new TextDecoder;function d(g){return Et(g,{Promise:w=>new Promise((I,k)=>{f.set(w,{fulfil:I,reject:k})})})}let c="";for(;;){const{done:g,value:w}=await _.read();if(g&&!c)break;for(c+=!w&&c?` +import{n as $e,s as $t,o as Ie,t as Pe}from"../chunks/scheduler.aZRR5A_O.js";new URL("sveltekit-internal://");function It(e,n){return e==="/"||n==="ignore"?e:n==="never"?e.endsWith("/")?e.slice(0,-1):e:n==="always"&&!e.endsWith("/")?e+"/":e}function Pt(e){return e.split("%25").map(decodeURI).join("%25")}function jt(e){for(const n in e)e[n]=decodeURIComponent(e[n]);return e}function je({href:e}){return e.split("#")[0]}const xt=["href","pathname","search","toString","toJSON"];function Lt(e,n,s){const o=new URL(e);Object.defineProperty(o,"searchParams",{value:new Proxy(o.searchParams,{get(l,f){if(f==="get"||f==="getAll"||f==="has")return i=>(s(i),l[f](i));n();const _=Reflect.get(l,f);return typeof _=="function"?_.bind(l):_}}),enumerable:!0,configurable:!0});for(const l of xt)Object.defineProperty(o,l,{get(){return n(),e[l]},enumerable:!0,configurable:!0});return Nt(o),o}function Nt(e){Object.defineProperty(e,"hash",{get(){throw new Error("Cannot access event.url.hash. Consider using `$page.url.hash` inside a component instead")}})}const Ut="/__data.json",Tt=".html__data.json";function Ct(e){return e.endsWith(".html")?e.replace(/\.html$/,Tt):e.replace(/\/$/,"")+Ut}function Dt(...e){let n=5381;for(const s of e)if(typeof s=="string"){let o=s.length;for(;o;)n=n*33^s.charCodeAt(--o)}else if(ArrayBuffer.isView(s)){const o=new Uint8Array(s.buffer,s.byteOffset,s.byteLength);let l=o.length;for(;l;)n=n*33^o[--l]}else throw new TypeError("value must be a string or TypedArray");return(n>>>0).toString(36)}const ht=window.fetch;window.fetch=(e,n)=>((e instanceof Request?e.method:n?.method||"GET")!=="GET"&&se.delete(Fe(e)),ht(e,n));const se=new Map;function Vt(e){const n=atob(e),s=new Uint8Array(n.length);for(let o=0;o0){const o=Fe(e,s),l=se.get(o);if(l){if(performance.now(){const l=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(o);if(l)return n.push({name:l[1],matcher:l[2],optional:!1,rest:!0,chained:!0}),"(?:/(.*))?";const f=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(o);if(f)return n.push({name:f[1],matcher:f[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!o)return;const _=o.split(/\[(.+?)\](?!\])/);return"/"+_.map((d,c)=>{if(c%2){if(d.startsWith("x+"))return xe(String.fromCharCode(parseInt(d.slice(2),16)));if(d.startsWith("u+"))return xe(String.fromCharCode(...d.slice(2).split("-").map(R=>parseInt(R,16))));const g=qt.exec(d);if(!g)throw new Error(`Invalid param: ${d}. Params and matcher names can only have underscores and alphanumeric characters.`);const[,w,I,k,$]=g;return n.push({name:k,matcher:$,optional:!!w,rest:!!I,chained:I?c===1&&_[0]==="":!1}),I?"(.*?)":w?"([^/]*)?":"([^/]+?)"}return xe(d)}).join("")}).join("")}/?$`),params:n}}function Gt(e){return!/^\([^)]+\)$/.test(e)}function zt(e){return e.slice(1).split("/").filter(Gt)}function Ht(e,n,s){const o={},l=e.slice(1),f=l.filter(i=>i!==void 0);let _=0;for(let i=0;ig).join("/"),_=0),c===void 0){d.rest&&(o[d.name]="");continue}if(!d.matcher||s[d.matcher](c)){o[d.name]=c;const g=n[i+1],w=l[i+1];g&&!g.rest&&g.optional&&w&&d.chained&&(_=0),!g&&!w&&Object.keys(o).length===f.length&&(_=0);continue}if(d.optional&&d.chained){_++;continue}return}if(!_)return o}function xe(e){return e.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function Jt({nodes:e,server_loads:n,dictionary:s,matchers:o}){const l=new Set(n);return Object.entries(s).map(([i,[d,c,g]])=>{const{pattern:w,params:I}=Bt(i),k={id:i,exec:$=>{const R=w.exec($);if(R)return Ht(R,I,o)},errors:[1,...g||[]].map($=>e[$]),layouts:[0,...c||[]].map(_),leaf:f(d)};return k.errors.length=k.layouts.length=Math.max(k.errors.length,k.layouts.length),k});function f(i){const d=i<0;return d&&(i=~i),[d,e[i]]}function _(i){return i===void 0?i:[l.has(i),e[i]]}}function qe(e,n=JSON.parse){try{return n(sessionStorage[e])}catch{}}function Le(e,n,s=JSON.stringify){const o=s(n);try{sessionStorage[e]=o}catch{}}const W=[];function Be(e,n=$e){let s;const o=new Set;function l(i){if($t(e,i)&&(e=i,s)){const d=!W.length;for(const c of o)c[1](),W.push(c,e);if(d){for(let c=0;c{o.delete(c),o.size===0&&s&&(s(),s=null)}}return{set:l,update:f,subscribe:_}}const M=globalThis.__sveltekit_oitjxz?.base??"",Kt=globalThis.__sveltekit_oitjxz?.assets??M,Yt="1704284324812",_t="sveltekit:snapshot",gt="sveltekit:scroll",mt="sveltekit:states",Ne="sveltekit:pageurl",B="sveltekit:history",J="sveltekit:navigation",ve={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},ie=location.origin;function ae(e){if(e instanceof URL)return e;let n=document.baseURI;if(!n){const s=document.getElementsByTagName("base");n=s.length?s[0].href:document.URL}return new URL(e,n)}function Me(){return{x:pageXOffset,y:pageYOffset}}function X(e,n){return e.getAttribute(`data-sveltekit-${n}`)}const at={...ve,"":ve.hover};function yt(e){let n=e.assignedSlot??e.parentNode;return n?.nodeType===11&&(n=n.host),n}function ot(e,n){for(;e&&e!==n;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=yt(e)}}function Ue(e,n){let s;try{s=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI)}catch{}const o=e instanceof SVGAElement?e.target.baseVal:e.target,l=!s||!!o||ye(s,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),f=s?.origin===ie&&e.hasAttribute("download");return{url:s,external:l,target:o,download:f}}function _e(e){let n=null,s=null,o=null,l=null,f=null,_=null,i=e;for(;i&&i!==document.documentElement;)o===null&&(o=X(i,"preload-code")),l===null&&(l=X(i,"preload-data")),n===null&&(n=X(i,"keepfocus")),s===null&&(s=X(i,"noscroll")),f===null&&(f=X(i,"reload")),_===null&&(_=X(i,"replacestate")),i=yt(i);function d(c){switch(c){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:at[o??"off"],preload_data:at[l??"off"],keepfocus:d(n),noscroll:d(s),reload:d(f),replace_state:d(_)}}function st(e){const n=Be(e);let s=!0;function o(){s=!0,n.update(_=>_)}function l(_){s=!1,n.set(_)}function f(_){let i;return n.subscribe(d=>{(i===void 0||s&&d!==i)&&_(i=d)})}return{notify:o,set:l,subscribe:f}}function Wt(){const{set:e,subscribe:n}=Be(!1);let s;async function o(){clearTimeout(s);try{const l=await fetch(`${Kt}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!l.ok)return!1;const _=(await l.json()).version!==Yt;return _&&(e(!0),clearTimeout(s)),_}catch{return!1}}return{subscribe:n,check:o}}function ye(e,n){return e.origin!==ie||!e.pathname.startsWith(n)}class Te extends Error{constructor(n,s){super(n),this.name="DevalueError",this.path=s.join("")}}function it(e){return Object(e)!==e}const Xt=Object.getOwnPropertyNames(Object.prototype).sort().join("\0");function Zt(e){const n=Object.getPrototypeOf(e);return n===Object.prototype||n===null||Object.getOwnPropertyNames(n).sort().join("\0")===Xt}function Qt(e){return Object.prototype.toString.call(e).slice(8,-1)}function en(e){switch(e){case'"':return'\\"';case"<":return"\\u003C";case"\\":return"\\\\";case` +`:return"\\n";case"\r":return"\\r";case" ":return"\\t";case"\b":return"\\b";case"\f":return"\\f";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";default:return e<" "?`\\u${e.charCodeAt(0).toString(16).padStart(4,"0")}`:""}}function Q(e){let n="",s=0;const o=e.length;for(let l=0;l0&&(w+=","),R in c?(f.push(`[${R}]`),w+=i(c[R]),f.pop()):w+=vt;w+="]";break;case"Set":w='["Set"';for(const R of c)w+=`,${i(R)}`;w+="]";break;case"Map":w='["Map"';for(const[R,D]of c)f.push(`.get(${it(R)?Ce(R):"..."})`),w+=`,${i(R)},${i(D)}`;w+="]";break;default:if(!Zt(c))throw new Te("Cannot stringify arbitrary non-POJOs",f);if(Object.getOwnPropertySymbols(c).length>0)throw new Te("Cannot stringify POJOs with symbolic keys",f);if(Object.getPrototypeOf(c)===null){w='["null"';for(const R in c)f.push(`.${R}`),w+=`,${Q(R)},${i(c[R])}`,f.pop();w+="]"}else{w="{";let R=!1;for(const D in c)R&&(w+=","),R=!0,f.push(`.${D}`),w+=`${Q(D)}:${i(c[D])}`,f.pop();w+="}"}}return s[g]=w,g}const d=i(e);return d<0?`${d}`:`[${s.join(",")}]`}function Ce(e){const n=typeof e;return n==="string"?Q(e):e instanceof String?Q(e.toString()):e===void 0?Ge.toString():e===0&&1/e<0?ze.toString():n==="bigint"?`["BigInt","${e}"]`:String(e)}const St=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...St];const rn=new Set([...St]);[...rn];function an(e){return e.filter(n=>n!=null)}class we{constructor(n,s){this.status=n,typeof s=="string"?this.body={message:s}:s?this.body=s:this.body={message:`Error: ${n}`}}toString(){return JSON.stringify(this.body)}}class ct{constructor(n,s){this.status=n,this.location=s}}class He extends Error{constructor(n,s,o){super(o),this.status=n,this.text=s}}const on="x-sveltekit-invalidated",sn="x-sveltekit-trailing-slash";function cn(e){e.client}const G={url:st({}),page:st({}),navigating:Be(null),updated:Wt()};function ge(e){return e instanceof we||e instanceof He?e.status:500}function ln(e){return e instanceof He?e.text:"Internal Error"}const K=qe(gt)??{},oe=qe(mt,tn)??{},ce=qe(_t)??{},lt=history.pushState,me=history.replaceState;function De(e){K[e]=Me()}function ft(e,n){let s=e+1;for(;K[s];)delete K[s],s+=1;for(s=n+1;ce[s];)delete ce[s],s+=1}function Z(e){return location.href=e.href,new Promise(()=>{})}function ut(){}function fn(e,n){const s=Jt(e),o=e.nodes[0],l=e.nodes[1];o(),l();const f=document.documentElement,_=[],i=[];let d=null;const c={before_navigate:[],on_navigate:[],after_navigate:[]};let g={branch:[],error:null,url:null},w=!1,I=!1,k=!0,$=!1,R=!1,D=!1,ee=!1,le=!1,F,L=history.state?.[B],V=history.state?.[J];L||(L=V=Date.now(),me.call(history,{...history.state,[B]:L,[J]:V},"",location.href));const be=K[L];be&&(history.scrollRestoration="manual",scrollTo(be.x,be.y));let j,Y,ke;async function Je(){if(await(ke||=Promise.resolve()),!ke)return;ke=null;const r=ne(g.url,!0);d=null;const t=Y={},a=r&&await Ae(r);t===Y&&(a&&(a.type==="redirect"?await fe(new URL(a.location,g.url).href,{},1,t):(a.props.page!==void 0&&(j=a.props.page),F.$set(a.props))),_.length=0)}function Ke(r){i.some(t=>t?.snapshot)&&(ce[r]=i.map(t=>t?.snapshot?.capture()))}function Ye(r){ce[r]?.forEach((t,a)=>{i[a]?.snapshot?.restore(t)})}function We(){De(L),Le(gt,K),Ke(V),Le(_t,ce),Le(mt,oe,nn)}async function fe(r,t,a,u){return pe({type:"goto",url:ae(r),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,redirect_count:a,state:t.state,nav_token:u,accept:()=>{t.invalidateAll&&(le=!0)}})}async function Xe(r){return d={id:r.id,promise:Ae(r).then(t=>(t.type==="loaded"&&t.state.error&&(d=null),t))},d.promise}async function ue(r){const t=s.find(a=>a.exec(tt(r)));t&&await Promise.all([...t.layouts,t.leaf].map(a=>a?.[1]()))}function Ze(r){g=r.state;const t=document.querySelector("style[data-sveltekit]");t&&t.remove(),j=r.props.page,F=new e.root({target:n,props:{...r.props,stores:G,components:i},hydrate:!0}),Ye(V);const a={from:null,to:{params:g.params,route:{id:g.route?.id??null},url:new URL(location.href)},willUnload:!1,type:"enter",complete:Promise.resolve()};c.after_navigate.forEach(u=>u(a)),I=!0}async function te({url:r,params:t,branch:a,status:u,error:p,route:h,form:m}){let v="never";for(const A of a)A?.slash!==void 0&&(v=A.slash);r.pathname=It(r.pathname,v),r.search=r.search;const E={type:"loaded",state:{url:r,params:t,branch:a,error:p,route:h},props:{constructors:an(a).map(A=>A.node.component),page:j}};m!==void 0&&(E.props.form=m);let b={},N=!j,U=0;for(let A=0;A(v&&(E.route=!0),y[A])}),params:new Proxy(u,{get:(y,A)=>(v&&E.params.add(A),y[A])}),data:h?.data??null,url:Lt(a,()=>{v&&(E.url=!0)},y=>{v&&E.search_params.add(y)}),async fetch(y,A){let x;y instanceof Request?(x=y.url,A={body:y.method==="GET"||y.method==="HEAD"?void 0:await y.blob(),cache:y.cache,credentials:y.credentials,headers:y.headers,integrity:y.integrity,keepalive:y.keepalive,method:y.method,mode:y.mode,redirect:y.redirect,referrer:y.referrer,referrerPolicy:y.referrerPolicy,signal:y.signal,...A}):x=y;const O=new URL(x,a);return v&&N(O.href),O.origin===a.origin&&(x=O.href.slice(a.origin.length)),I?Ft(x,O.href,A):Mt(x,A)},setHeaders:()=>{},depends:N,parent(){return v&&(E.parent=!0),t()},untrack(y){v=!1;try{return y()}finally{v=!0}}};m=await b.universal.load.call(null,U)??null}return{node:b,loader:r,server:h,universal:b.universal?.load?{type:"data",data:m,uses:E}:null,data:m??h?.data??null,slash:M&&(a.pathname===M||a.pathname===M+"/")?"always":b.universal?.trailingSlash??h?.slash}}function Qe(r,t,a,u,p,h){if(le)return!0;if(!p)return!1;if(p.parent&&r||p.route&&t||p.url&&a)return!0;for(const m of p.search_params)if(u.has(m))return!0;for(const m of p.params)if(h[m]!==g.params[m])return!0;for(const m of p.dependencies)if(_.some(v=>v(new URL(m))))return!0;return!1}function Se(r,t){return r?.type==="data"?r:r?.type==="skip"?t??null:null}function Rt(r,t){if(!r)return new Set(t.searchParams.keys());const a=new Set([...r.searchParams.keys(),...t.searchParams.keys()]);for(const u of a){const p=r.searchParams.getAll(u),h=t.searchParams.getAll(u);p.every(m=>h.includes(m))&&h.every(m=>p.includes(m))&&a.delete(u)}return a}async function Ae({id:r,invalidating:t,url:a,params:u,route:p}){if(d?.id===r)return d.promise;const{errors:h,layouts:m,leaf:v}=p,E=[...m,v];h.forEach(S=>S?.().catch(()=>{})),E.forEach(S=>S?.[1]().catch(()=>{}));let b=null;const N=g.url?r!==g.url.pathname+g.url.search:!1,U=g.route?p.id!==g.route.id:!1,y=Rt(g.url,a);let A=!1;const x=E.map((S,P)=>{const T=g.branch[P],C=!!S?.[0]&&(T?.loader!==S[1]||Qe(A,U,N,y,T.server?.uses,u));return C&&(A=!0),C});if(x.some(Boolean)){try{b=await dt(a,x)}catch(S){return de({status:ge(S),error:await re(S,{url:a,params:u,route:{id:p.id}}),url:a,route:p})}if(b.type==="redirect")return b}const O=b?.nodes;let q=!1;const z=E.map(async(S,P)=>{if(!S)return;const T=g.branch[P],C=O?.[P];if((!C||C.type==="skip")&&S[1]===T?.loader&&!Qe(q,U,N,y,T.universal?.uses,u))return T;if(q=!0,C?.type==="error")throw C;return Ee({loader:S[1],url:a,params:u,route:p,parent:async()=>{const Re={};for(let Oe=0;Oe{});const H=[];for(let S=0;SPromise.resolve({}),server_data_node:Se(h)}),E={node:await l(),loader:l,universal:null,server:null,data:null};return await te({url:a,params:p,branch:[v,E],status:r,error:t,route:null})}function ne(r,t){if(ye(r,M))return;const a=tt(r.pathname);for(const u of s){const p=u.exec(a);if(p)return{id:r.pathname+r.search,invalidating:t,route:u,params:jt(p),url:r}}}function tt(r){return Pt(r.slice(M.length)||"/")}function nt({url:r,type:t,intent:a,delta:u}){let p=!1;const h=pt(g,a,r,t);u!==void 0&&(h.navigation.delta=u);const m={...h.navigation,cancel:()=>{p=!0,h.reject(new Error("navigation was cancelled"))}};return R||c.before_navigate.forEach(v=>v(m)),p?null:h}async function pe({type:r,url:t,popped:a,keepfocus:u,noscroll:p,replace_state:h,state:m={},redirect_count:v=0,nav_token:E={},accept:b=ut,block:N=ut}){const U=ne(t,!1),y=nt({url:t,type:r,delta:a?.delta,intent:U});if(!y){N();return}const A=L,x=V;b(),R=!0,I&&G.navigating.set(y.navigation),Y=E;let O=U&&await Ae(U);if(!O){if(ye(t,M))return await Z(t);O=await rt(t,{id:null},await re(new He(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404)}if(t=U?.url||t,Y!==E)return y.reject(new Error("navigation was aborted")),!1;if(O.type==="redirect")if(v>=20)O=await de({status:500,error:await re(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}});else return fe(new URL(O.location,t).href,{},v+1,E),!1;else O.props.page.status>=400&&await G.updated.check()&&await Z(t);if(_.length=0,le=!1,$=!0,De(A),Ke(x),O.props.page.url.pathname!==t.pathname&&(t.pathname=O.props.page.url.pathname),m=a?a.state:m,!a){const S=h?0:1,P={[B]:L+=S,[J]:V+=S};(h?me:lt).call(history,P,"",t),h||ft(L,V)}if(oe[L]=m,d=null,O.props.page.state=m,I){g=O.state,O.props.page&&(O.props.page.url=t);const S=(await Promise.all(c.on_navigate.map(P=>P(y.navigation)))).filter(P=>typeof P=="function");if(S.length>0){let P=function(){c.after_navigate=c.after_navigate.filter(T=>!S.includes(T))};S.push(P),c.after_navigate.push(...S)}F.$set(O.props),ee=!0}else Ze(O);const{activeElement:q}=document;await Pe();const z=a?a.scroll:p?Me():null;if(k){const S=t.hash&&document.getElementById(decodeURIComponent(t.hash.slice(1)));z?scrollTo(z.x,z.y):S?S.scrollIntoView():scrollTo(0,0)}const H=document.activeElement!==q&&document.activeElement!==document.body;!u&&!H&&Ve(),k=!0,O.props.page&&(j=O.props.page),R=!1,r==="popstate"&&Ye(V),y.fulfil(void 0),c.after_navigate.forEach(S=>S(y.navigation)),G.navigating.set(null),$=!1}async function rt(r,t,a,u){return r.origin===ie&&r.pathname===location.pathname&&!w?await de({status:u,error:a,url:r,route:t}):await Z(r)}function Ot(){let r;f.addEventListener("mousemove",h=>{const m=h.target;clearTimeout(r),r=setTimeout(()=>{u(m,2)},20)});function t(h){u(h.composedPath()[0],1)}f.addEventListener("mousedown",t),f.addEventListener("touchstart",t,{passive:!0});const a=new IntersectionObserver(h=>{for(const m of h)m.isIntersecting&&(ue(m.target.href),a.unobserve(m.target))},{threshold:0});function u(h,m){const v=ot(h,f);if(!v)return;const{url:E,external:b,download:N}=Ue(v,M);if(b||N)return;const U=_e(v);if(!U.reload)if(m<=U.preload_data){const y=ne(E,!1);y&&Xe(y)}else m<=U.preload_code&&ue(E.pathname)}function p(){a.disconnect();for(const h of f.querySelectorAll("a")){const{url:m,external:v,download:E}=Ue(h,M);if(v||E)continue;const b=_e(h);b.reload||(b.preload_code===ve.viewport&&a.observe(h),b.preload_code===ve.eager&&ue(m.pathname))}}c.after_navigate.push(p),p()}function re(r,t){if(r instanceof we)return r.body;const a=ge(r),u=ln(r);return e.hooks.handleError({error:r,event:t,status:a,message:u})??{message:u}}return{after_navigate:r=>{Ie(()=>(c.after_navigate.push(r),()=>{const t=c.after_navigate.indexOf(r);c.after_navigate.splice(t,1)}))},before_navigate:r=>{Ie(()=>(c.before_navigate.push(r),()=>{const t=c.before_navigate.indexOf(r);c.before_navigate.splice(t,1)}))},on_navigate:r=>{Ie(()=>(c.on_navigate.push(r),()=>{const t=c.on_navigate.indexOf(r);c.on_navigate.splice(t,1)}))},disable_scroll_handling:()=>{($||!I)&&(k=!1)},goto:(r,t={})=>(r=ae(r),r.origin!==ie?Promise.reject(new Error("goto: invalid URL")):fe(r,t,0)),invalidate:r=>{if(typeof r=="function")_.push(r);else{const{href:t}=new URL(r,location.href);_.push(a=>a.href===t)}return Je()},invalidate_all:()=>(le=!0,Je()),preload_data:async r=>{const t=ae(r),a=ne(t,!1);if(!a)throw new Error(`Attempted to preload a URL that does not belong to this app: ${t}`);const u=await Xe(a);if(u.type==="redirect")return{type:u.type,location:u.location};const{status:p,data:h}=u.props.page??j;return{type:u.type,status:p,data:h}},preload_code:r=>ue(r),push_state:(r,t)=>{const a={[B]:L+=1,[J]:V,[Ne]:j.url.href};lt.call(history,a,"",ae(r)),j={...j,state:t},F.$set({page:j}),oe[L]=t,ft(L,V)},replace_state:(r,t)=>{const a={[B]:L,[J]:V,[Ne]:j.url.href};me.call(history,a,"",ae(r)),j={...j,state:t},F.$set({page:j}),oe[L]=t},apply_action:async r=>{if(r.type==="error"){const t=new URL(location.href),{branch:a,route:u}=g;if(!u)return;const p=await et(g.branch.length,a,u.errors);if(p){const h=await te({url:t,params:g.params,branch:a.slice(0,p.idx).concat(p.node),status:r.status??500,error:r.error,route:u});g=h.state,F.$set(h.props),Pe().then(Ve)}}else r.type==="redirect"?fe(r.location,{invalidateAll:!0},0):(F.$set({form:null,page:{...j,form:r.data,status:r.status}}),await Pe(),F.$set({form:r.data}),r.type==="success"&&Ve())},_start_router:()=>{history.scrollRestoration="manual",addEventListener("beforeunload",t=>{let a=!1;if(We(),!R){const u=pt(g,void 0,null,"leave"),p={...u.navigation,cancel:()=>{a=!0,u.reject(new Error("navigation was cancelled"))}};c.before_navigate.forEach(h=>h(p))}a?(t.preventDefault(),t.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&We()}),navigator.connection?.saveData||Ot(),f.addEventListener("click",t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;const a=ot(t.composedPath()[0],f);if(!a)return;const{url:u,external:p,target:h,download:m}=Ue(a,M);if(!u)return;if(h==="_parent"||h==="_top"){if(window.parent!==window)return}else if(h&&h!=="_self")return;const v=_e(a);if(!(a instanceof SVGAElement)&&u.protocol!==location.protocol&&!(u.protocol==="https:"||u.protocol==="http:")||m)return;if(p||v.reload){nt({url:u,type:"link"})?R=!0:t.preventDefault();return}const[b,N]=u.href.split("#");if(N!==void 0&&b===je(location)){if(g.url.hash===u.hash){t.preventDefault(),a.ownerDocument.getElementById(N)?.scrollIntoView();return}if(D=!0,De(L),r(u),!v.replace_state)return;D=!1}t.preventDefault(),pe({type:"link",url:u,keepfocus:v.keepfocus,noscroll:v.noscroll,replace_state:v.replace_state??u.href===location.href})}),f.addEventListener("submit",t=>{if(t.defaultPrevented)return;const a=HTMLFormElement.prototype.cloneNode.call(t.target),u=t.submitter;if((u?.formMethod||a.method)!=="get")return;const h=new URL(u?.hasAttribute("formaction")&&u?.formAction||a.action);if(ye(h,M))return;const m=t.target,v=_e(m);if(v.reload)return;t.preventDefault(),t.stopPropagation();const E=new FormData(m),b=u?.getAttribute("name");b&&E.append(b,u?.getAttribute("value")??""),h.search=new URLSearchParams(E).toString(),pe({type:"form",url:h,keepfocus:v.keepfocus,noscroll:v.noscroll,replace_state:v.replace_state??h.href===location.href})}),addEventListener("popstate",async t=>{if(t.state?.[B]){const a=t.state[B];if(Y={},a===L)return;const u=K[a],p=oe[a]??{},h=new URL(t.state[Ne]??location.href),m=t.state[J],v=je(location)===je(g.url);if(m===V&&(ee||v)){r(h),K[L]=Me(),u&&scrollTo(u.x,u.y),p!==j.state&&(j={...j,state:p},F.$set({page:j})),L=a;return}const b=a-L;await pe({type:"popstate",url:h,popped:{state:p,scroll:u,delta:b},accept:()=>{L=a,V=m},block:()=>{history.go(-b)},nav_token:Y})}else if(!D){const a=new URL(location.href);r(a)}}),addEventListener("hashchange",()=>{D&&(D=!1,me.call(history,{...history.state,[B]:++L,[J]:V},"",location.href))});for(const t of document.querySelectorAll("link"))t.rel==="icon"&&(t.href=t.href);addEventListener("pageshow",t=>{t.persisted&&G.navigating.set(null)});function r(t){g.url=t,G.page.set({...j,url:t}),G.page.notify()}},_hydrate:async({status:r=200,error:t,node_ids:a,params:u,route:p,data:h,form:m})=>{w=!0;const v=new URL(location.href);({params:u={},route:p={id:null}}=ne(v,!1)||{});let E;try{const b=a.map(async(y,A)=>{const x=h[A];return x?.uses&&(x.uses=At(x.uses)),Ee({loader:e.nodes[y],url:v,params:u,route:p,parent:async()=>{const O={};for(let q=0;qy===p.id);if(U){const y=U.layouts;for(let A=0;Al?"1":"0").join(""));const o=await ht(s.href);if(!o.ok){let l;throw o.headers.get("content-type")?.includes("application/json")?l=await o.json():o.status===404?l="Not Found":o.status===500&&(l="Internal Error"),new we(o.status,l)}return new Promise(async l=>{const f=new Map,_=o.body.getReader(),i=new TextDecoder;function d(g){return Et(g,{Promise:w=>new Promise((I,k)=>{f.set(w,{fulfil:I,reject:k})})})}let c="";for(;;){const{done:g,value:w}=await _.read();if(g&&!c)break;for(c+=!w&&c?` `:i.decode(w);;){const I=c.indexOf(` `);if(I===-1)break;const k=JSON.parse(c.slice(0,I));if(c=c.slice(I+1),k.type==="redirect")return l(k);if(k.type==="data")k.nodes?.forEach($=>{$?.type==="data"&&($.uses=At($.uses),$.data=d($.data))}),l(k);else if(k.type==="chunk"){const{id:$,data:R,error:D}=k,ee=f.get($);f.delete($),D?ee.reject(d(D)):ee.fulfil(d(R))}}}})}function At(e){return{dependencies:new Set(e?.dependencies??[]),params:new Set(e?.params??[]),parent:!!e?.parent,route:!!e?.route,url:!!e?.url,search_params:new Set(e?.search_params??[])}}function Ve(){const e=document.querySelector("[autofocus]");if(e)e.focus();else{const n=document.body,s=n.getAttribute("tabindex");n.tabIndex=-1,n.focus({preventScroll:!0,focusVisible:!1}),s!==null?n.setAttribute("tabindex",s):n.removeAttribute("tabindex");const o=getSelection();if(o&&o.type!=="None"){const l=[];for(let f=0;f{if(o.rangeCount===l.length){for(let f=0;f{l=d,f=c});return _.catch(()=>{}),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url},to:s&&{params:n?.params??null,route:{id:n?.route?.id??null},url:s},willUnload:!n,type:o,complete:_},fulfil:l,reject:f}}async function dn(e,n,s){const o=fn(e,n);cn({client:o}),s?await o._hydrate(s):o.goto(location.href,{replaceState:!0}),o._start_router()}export{dn as start}; diff --git a/dist/_app/immutable/entry/start.8lMiaYl3.js.br b/dist/_app/immutable/entry/start.8lMiaYl3.js.br new file mode 100644 index 0000000..10ba91d Binary files /dev/null and b/dist/_app/immutable/entry/start.8lMiaYl3.js.br differ diff --git a/dist/_app/immutable/entry/start.8lMiaYl3.js.gz b/dist/_app/immutable/entry/start.8lMiaYl3.js.gz new file mode 100644 index 0000000..abd0f03 Binary files /dev/null and b/dist/_app/immutable/entry/start.8lMiaYl3.js.gz differ diff --git a/dist/_app/immutable/entry/start.eDKqTZyY.js.br b/dist/_app/immutable/entry/start.eDKqTZyY.js.br deleted file mode 100644 index 2092faa..0000000 Binary files a/dist/_app/immutable/entry/start.eDKqTZyY.js.br and /dev/null differ diff --git a/dist/_app/immutable/entry/start.eDKqTZyY.js.gz b/dist/_app/immutable/entry/start.eDKqTZyY.js.gz deleted file mode 100644 index e7c9dd5..0000000 Binary files a/dist/_app/immutable/entry/start.eDKqTZyY.js.gz and /dev/null differ diff --git a/dist/_app/immutable/nodes/0.60GMPCkA.js b/dist/_app/immutable/nodes/0.60GMPCkA.js deleted file mode 100644 index a73b7a6..0000000 --- a/dist/_app/immutable/nodes/0.60GMPCkA.js +++ /dev/null @@ -1 +0,0 @@ -import{s as ge,c as be,u as _e,g as ye,d as we}from"../chunks/scheduler.aZRR5A_O.js";import{S as Ce,i as Me,g as a,s as i,h as r,j as T,x,c as d,f as c,k as e,a as N,y as t,z as ke,d as je,t as Ae}from"../chunks/index.ciNBPAxl.js";const Ie=!0,$e=Object.freeze(Object.defineProperty({__proto__:null,prerender:Ie},Symbol.toStringTag,{value:"Module"}));function Ee(_){let v,b,m,f,p,H="livecoding.fr",R,h,le='',F,l,y,ae="Évènements",U,w,re="Membres",J,C,ne="Outils",K,M,oe="Guides",Q,k,ie="Réseaux",W,j,de="Ressources",X,A,ce="Presse",Y,I,ue="Contact",P,S,V,g,L,Z,z,ee,D,xe=' ',G,E,fe='

    Raphaël Forment

    GitHub

    ',$,te,he;const se=_[4].default,o=be(se,_,_[3],null);return{c(){v=a("div"),b=a("div"),m=a("nav"),f=a("div"),p=a("a"),p.textContent=H,R=i(),h=a("div"),h.innerHTML=le,F=i(),l=a("div"),y=a("a"),y.textContent=ae,U=i(),w=a("a"),w.textContent=re,J=i(),C=a("a"),C.textContent=ne,K=i(),M=a("a"),M.textContent=oe,Q=i(),k=a("a"),k.textContent=ie,W=i(),j=a("a"),j.textContent=de,X=i(),A=a("a"),A.textContent=ce,Y=i(),I=a("a"),I.textContent=ue,S=i(),V=a("main"),g=a("div"),L=a("input"),Z=i(),z=a("div"),o&&o.c(),ee=i(),D=a("div"),D.innerHTML=xe,G=i(),E=a("footer"),E.innerHTML=fe,this.h()},l(s){v=r(s,"DIV",{});var u=T(v);b=r(u,"DIV",{class:!0});var ve=T(b);m=r(ve,"NAV",{class:!0});var q=T(m);f=r(q,"DIV",{class:!0});var B=T(f);p=r(B,"A",{href:!0,class:!0,"data-svelte-h":!0}),x(p)!=="svelte-sv4vin"&&(p.textContent=H),R=d(B),h=r(B,"DIV",{class:!0,"data-svelte-h":!0}),x(h)!=="svelte-pz0dbb"&&(h.innerHTML=le),B.forEach(c),F=d(q),l=r(q,"DIV",{class:!0});var n=T(l);y=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),x(y)!=="svelte-1me9jmo"&&(y.textContent=ae),U=d(n),w=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),x(w)!=="svelte-1ho9i2z"&&(w.textContent=re),J=d(n),C=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),x(C)!=="svelte-1sj2l4z"&&(C.textContent=ne),K=d(n),M=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),x(M)!=="svelte-yd78nx"&&(M.textContent=oe),Q=d(n),k=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),x(k)!=="svelte-z9wl3r"&&(k.textContent=ie),W=d(n),j=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),x(j)!=="svelte-1u3kp53"&&(j.textContent=de),X=d(n),A=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),x(A)!=="svelte-1yq8r9j"&&(A.textContent=ce),Y=d(n),I=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),x(I)!=="svelte-14fua0o"&&(I.textContent=ue),n.forEach(c),q.forEach(c),ve.forEach(c),u.forEach(c),S=d(s),V=r(s,"MAIN",{class:!0});var me=T(V);g=r(me,"DIV",{class:!0});var O=T(g);L=r(O,"INPUT",{id:!0,type:!0,class:!0}),Z=d(O),z=r(O,"DIV",{class:!0});var pe=T(z);o&&o.l(pe),pe.forEach(c),ee=d(O),D=r(O,"DIV",{class:!0,"data-svelte-h":!0}),x(D)!=="svelte-15tw5rp"&&(D.innerHTML=xe),O.forEach(c),me.forEach(c),G=d(s),E=r(s,"FOOTER",{class:!0,"data-svelte-h":!0}),x(E)!=="svelte-1yg0fuy"&&(E.innerHTML=fe),this.h()},h(){e(p,"href","/"),e(p,"class","text-3xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-orange-300 to-orange-200 uppercase"),e(h,"class","flex md:hidden"),e(f,"class","flex items-center justify-between"),e(y,"href","/evenements"),e(y,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(w,"href","/membres"),e(w,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(C,"href","/outils"),e(C,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(M,"href","/guides"),e(M,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(k,"href","/reseaux"),e(k,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(j,"href","/ressources"),e(j,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(A,"href","/presse"),e(A,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(I,"href","/contacts"),e(I,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(l,"class",P="flex-col mt-8 space-y-4 md:flex md:space-y-0 md:flex-row md:items-center md:space-x-10 md:mt-0 "+(_[0]?"flex":"hidden")),e(m,"class","pl-8 py-2 md:flex md:justify-between md:items-center pr-8"),e(b,"class","bg-neutral-800 dark:bg-base-300"),e(L,"id","my-drawer-2"),e(L,"type","checkbox"),e(L,"class","drawer-toggle"),e(z,"class","drawer-content space-y-4 flex flex-col lg:px-16 px-4 py-8"),e(D,"class","drawer-side"),e(g,"class","drawer lg:drawer-open"),e(V,"class","bg-gray-100 dark:bg-base-100"),e(E,"class","footer ml-0 pl-0 pb-4 pt-4 bg-neutral-800 dark:bg-base-300 justify-between pr-16")},m(s,u){N(s,v,u),t(v,b),t(b,m),t(m,f),t(f,p),t(f,R),t(f,h),t(m,F),t(m,l),t(l,y),t(l,U),t(l,w),t(l,J),t(l,C),t(l,K),t(l,M),t(l,Q),t(l,k),t(l,W),t(l,j),t(l,X),t(l,A),t(l,Y),t(l,I),N(s,S,u),N(s,V,u),t(V,g),t(g,L),t(g,Z),t(g,z),o&&o.m(z,null),t(g,ee),t(g,D),N(s,G,u),N(s,E,u),$=!0,te||(he=ke(h,"click",_[1]),te=!0)},p(s,[u]){(!$||u&1&&P!==(P="flex-col mt-8 space-y-4 md:flex md:space-y-0 md:flex-row md:items-center md:space-x-10 md:mt-0 "+(s[0]?"flex":"hidden")))&&e(l,"class",P),o&&o.p&&(!$||u&8)&&_e(o,se,s,s[3],$?we(se,s[3],u,null):ye(s[3]),null)},i(s){$||(je(o,s),$=!0)},o(s){Ae(o,s),$=!1},d(s){s&&(c(v),c(S),c(V),c(G),c(E)),o&&o.d(s),te=!1,he()}}}function Te(_,v,b){let{$$slots:m={},$$scope:f}=v;const p=!0;let H=!1;function R(){b(0,H=!H)}return _.$$set=h=>{"$$scope"in h&&b(3,f=h.$$scope)},[H,R,p,f,m]}class He extends Ce{constructor(v){super(),Me(this,v,Te,Ee,ge,{prerender:2})}get prerender(){return this.$$.ctx[2]}}export{He as component,$e as universal}; diff --git a/dist/_app/immutable/nodes/0.60GMPCkA.js.br b/dist/_app/immutable/nodes/0.60GMPCkA.js.br deleted file mode 100644 index a5bafa2..0000000 Binary files a/dist/_app/immutable/nodes/0.60GMPCkA.js.br and /dev/null differ diff --git a/dist/_app/immutable/nodes/0.60GMPCkA.js.gz b/dist/_app/immutable/nodes/0.60GMPCkA.js.gz deleted file mode 100644 index dce86fa..0000000 Binary files a/dist/_app/immutable/nodes/0.60GMPCkA.js.gz and /dev/null differ diff --git a/dist/_app/immutable/nodes/0.uMzUYRGs.js b/dist/_app/immutable/nodes/0.uMzUYRGs.js new file mode 100644 index 0000000..f0b8d37 --- /dev/null +++ b/dist/_app/immutable/nodes/0.uMzUYRGs.js @@ -0,0 +1 @@ +import{s as ye,c as we,u as Ce,g as Ae,d as ke}from"../chunks/scheduler.aZRR5A_O.js";import{S as Me,i as je,g as a,s as o,h as r,j as V,x as c,c as i,f as u,k as e,a as P,y as t,z as Ie,d as Ee,t as Te}from"../chunks/index.AIcdAWo0.js";const Ve=!0,Le=Object.freeze(Object.defineProperty({__proto__:null,prerender:Ve},Symbol.toStringTag,{value:"Module"}));function ze(_){let v,b,m,f,p,H="livecoding.fr",N,h,re='',U,l,y,ne="Évènements",J,w,oe="Membres",K,C,ie="Outils",Q,A,de="Guides",W,k,ce="Articles",X,M,ue="Réseaux",Y,j,xe="Ressources",Z,I,fe="Presse",ee,E,he="Contact",S,G,z,g,L,te,O,se,D,ve=' ',q,T,me='

    Raphaël Forment

    GitHub

    ',$,le,pe;const ae=_[4].default,d=we(ae,_,_[3],null);return{c(){v=a("div"),b=a("div"),m=a("nav"),f=a("div"),p=a("a"),p.textContent=H,N=o(),h=a("div"),h.innerHTML=re,U=o(),l=a("div"),y=a("a"),y.textContent=ne,J=o(),w=a("a"),w.textContent=oe,K=o(),C=a("a"),C.textContent=ie,Q=o(),A=a("a"),A.textContent=de,W=o(),k=a("a"),k.textContent=ce,X=o(),M=a("a"),M.textContent=ue,Y=o(),j=a("a"),j.textContent=xe,Z=o(),I=a("a"),I.textContent=fe,ee=o(),E=a("a"),E.textContent=he,G=o(),z=a("main"),g=a("div"),L=a("input"),te=o(),O=a("div"),d&&d.c(),se=o(),D=a("div"),D.innerHTML=ve,q=o(),T=a("footer"),T.innerHTML=me,this.h()},l(s){v=r(s,"DIV",{});var x=V(v);b=r(x,"DIV",{class:!0});var ge=V(b);m=r(ge,"NAV",{class:!0});var B=V(m);f=r(B,"DIV",{class:!0});var F=V(f);p=r(F,"A",{href:!0,class:!0,"data-svelte-h":!0}),c(p)!=="svelte-sv4vin"&&(p.textContent=H),N=i(F),h=r(F,"DIV",{class:!0,"data-svelte-h":!0}),c(h)!=="svelte-pz0dbb"&&(h.innerHTML=re),F.forEach(u),U=i(B),l=r(B,"DIV",{class:!0});var n=V(l);y=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),c(y)!=="svelte-1me9jmo"&&(y.textContent=ne),J=i(n),w=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),c(w)!=="svelte-1ho9i2z"&&(w.textContent=oe),K=i(n),C=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),c(C)!=="svelte-1sj2l4z"&&(C.textContent=ie),Q=i(n),A=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),c(A)!=="svelte-yd78nx"&&(A.textContent=de),W=i(n),k=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),c(k)!=="svelte-zz9yjp"&&(k.textContent=ce),X=i(n),M=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),c(M)!=="svelte-z9wl3r"&&(M.textContent=ue),Y=i(n),j=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),c(j)!=="svelte-1u3kp53"&&(j.textContent=xe),Z=i(n),I=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),c(I)!=="svelte-1yq8r9j"&&(I.textContent=fe),ee=i(n),E=r(n,"A",{href:!0,class:!0,"data-svelte-h":!0}),c(E)!=="svelte-14fua0o"&&(E.textContent=he),n.forEach(u),B.forEach(u),ge.forEach(u),x.forEach(u),G=i(s),z=r(s,"MAIN",{class:!0});var be=V(z);g=r(be,"DIV",{class:!0});var R=V(g);L=r(R,"INPUT",{id:!0,type:!0,class:!0}),te=i(R),O=r(R,"DIV",{class:!0});var _e=V(O);d&&d.l(_e),_e.forEach(u),se=i(R),D=r(R,"DIV",{class:!0,"data-svelte-h":!0}),c(D)!=="svelte-1yk067b"&&(D.innerHTML=ve),R.forEach(u),be.forEach(u),q=i(s),T=r(s,"FOOTER",{class:!0,"data-svelte-h":!0}),c(T)!=="svelte-1yg0fuy"&&(T.innerHTML=me),this.h()},h(){e(p,"href","/"),e(p,"class","text-3xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-orange-300 to-orange-200 uppercase"),e(h,"class","flex md:hidden"),e(f,"class","flex items-center justify-between"),e(y,"href","/evenements"),e(y,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(w,"href","/membres"),e(w,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(C,"href","/outils"),e(C,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(A,"href","/guides"),e(A,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(k,"href","/articles"),e(k,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(M,"href","/reseaux"),e(M,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(j,"href","/ressources"),e(j,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(I,"href","/presse"),e(I,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(E,"href","/contacts"),e(E,"class","text-gray-100 hover:text-orange-300 flex md:hidden"),e(l,"class",S="flex-col mt-8 space-y-4 md:flex md:space-y-0 md:flex-row md:items-center md:space-x-10 md:mt-0 "+(_[0]?"flex":"hidden")),e(m,"class","pl-8 py-2 md:flex md:justify-between md:items-center pr-8"),e(b,"class","bg-neutral-800 dark:bg-base-300"),e(L,"id","my-drawer-2"),e(L,"type","checkbox"),e(L,"class","drawer-toggle"),e(O,"class","drawer-content space-y-4 flex flex-col lg:px-16 px-4 py-8"),e(D,"class","drawer-side"),e(g,"class","drawer lg:drawer-open"),e(z,"class","bg-gray-100 dark:bg-base-100"),e(T,"class","footer ml-0 pl-0 pb-4 pt-4 bg-neutral-800 dark:bg-base-300 justify-between pr-16")},m(s,x){P(s,v,x),t(v,b),t(b,m),t(m,f),t(f,p),t(f,N),t(f,h),t(m,U),t(m,l),t(l,y),t(l,J),t(l,w),t(l,K),t(l,C),t(l,Q),t(l,A),t(l,W),t(l,k),t(l,X),t(l,M),t(l,Y),t(l,j),t(l,Z),t(l,I),t(l,ee),t(l,E),P(s,G,x),P(s,z,x),t(z,g),t(g,L),t(g,te),t(g,O),d&&d.m(O,null),t(g,se),t(g,D),P(s,q,x),P(s,T,x),$=!0,le||(pe=Ie(h,"click",_[1]),le=!0)},p(s,[x]){(!$||x&1&&S!==(S="flex-col mt-8 space-y-4 md:flex md:space-y-0 md:flex-row md:items-center md:space-x-10 md:mt-0 "+(s[0]?"flex":"hidden")))&&e(l,"class",S),d&&d.p&&(!$||x&8)&&Ce(d,ae,s,s[3],$?ke(ae,s[3],x,null):Ae(s[3]),null)},i(s){$||(Ee(d,s),$=!0)},o(s){Te(d,s),$=!1},d(s){s&&(u(v),u(G),u(z),u(q),u(T)),d&&d.d(s),le=!1,pe()}}}function De(_,v,b){let{$$slots:m={},$$scope:f}=v;const p=!0;let H=!1;function N(){b(0,H=!H)}return _.$$set=h=>{"$$scope"in h&&b(3,f=h.$$scope)},[H,N,p,f,m]}class Oe extends Me{constructor(v){super(),je(this,v,De,ze,ye,{prerender:2})}get prerender(){return this.$$.ctx[2]}}export{Oe as component,Le as universal}; diff --git a/dist/_app/immutable/nodes/0.uMzUYRGs.js.br b/dist/_app/immutable/nodes/0.uMzUYRGs.js.br new file mode 100644 index 0000000..e895bf4 Binary files /dev/null and b/dist/_app/immutable/nodes/0.uMzUYRGs.js.br differ diff --git a/dist/_app/immutable/nodes/0.uMzUYRGs.js.gz b/dist/_app/immutable/nodes/0.uMzUYRGs.js.gz new file mode 100644 index 0000000..0481068 Binary files /dev/null and b/dist/_app/immutable/nodes/0.uMzUYRGs.js.gz differ diff --git a/dist/_app/immutable/nodes/1.pZvj6-CS.js.br b/dist/_app/immutable/nodes/1.pZvj6-CS.js.br deleted file mode 100644 index 8aa4b23..0000000 Binary files a/dist/_app/immutable/nodes/1.pZvj6-CS.js.br and /dev/null differ diff --git a/dist/_app/immutable/nodes/1.pZvj6-CS.js.gz b/dist/_app/immutable/nodes/1.pZvj6-CS.js.gz deleted file mode 100644 index cf6c64c..0000000 Binary files a/dist/_app/immutable/nodes/1.pZvj6-CS.js.gz and /dev/null differ diff --git a/dist/_app/immutable/nodes/1.pZvj6-CS.js b/dist/_app/immutable/nodes/1.tUBg_osC.js similarity index 89% rename from dist/_app/immutable/nodes/1.pZvj6-CS.js rename to dist/_app/immutable/nodes/1.tUBg_osC.js index 21109de..79d1c7b 100644 --- a/dist/_app/immutable/nodes/1.pZvj6-CS.js +++ b/dist/_app/immutable/nodes/1.tUBg_osC.js @@ -1 +1 @@ -import{s as r,n as o}from"../chunks/scheduler.aZRR5A_O.js";import{S as i,i as c,g as l,h,x as m,k as d,a as f,f as u}from"../chunks/index.ciNBPAxl.js";function x(s){let t,a="404: Page non trouvée !";return{c(){t=l("h1"),t.textContent=a,this.h()},l(e){t=h(e,"H1",{class:!0,"data-svelte-h":!0}),m(t)!=="svelte-6hb6i7"&&(t.textContent=a),this.h()},h(){d(t,"class","text-center")},m(e,n){f(e,t,n)},p:o,i:o,o,d(e){e&&u(t)}}}function p(s,t,a){let{data:e}=t;return e.pages,s.$$set=n=>{"data"in n&&a(0,e=n.data)},[e]}class v extends i{constructor(t){super(),c(this,t,p,x,r,{data:0})}}export{v as component}; +import{s as r,n as o}from"../chunks/scheduler.aZRR5A_O.js";import{S as i,i as c,g as l,h,x as m,k as d,a as f,f as u}from"../chunks/index.AIcdAWo0.js";function x(s){let t,a="404: Page non trouvée !";return{c(){t=l("h1"),t.textContent=a,this.h()},l(e){t=h(e,"H1",{class:!0,"data-svelte-h":!0}),m(t)!=="svelte-6hb6i7"&&(t.textContent=a),this.h()},h(){d(t,"class","text-center")},m(e,n){f(e,t,n)},p:o,i:o,o,d(e){e&&u(t)}}}function p(s,t,a){let{data:e}=t;return e.pages,s.$$set=n=>{"data"in n&&a(0,e=n.data)},[e]}class v extends i{constructor(t){super(),c(this,t,p,x,r,{data:0})}}export{v as component}; diff --git a/dist/_app/immutable/nodes/1.tUBg_osC.js.br b/dist/_app/immutable/nodes/1.tUBg_osC.js.br new file mode 100644 index 0000000..96725c3 Binary files /dev/null and b/dist/_app/immutable/nodes/1.tUBg_osC.js.br differ diff --git a/dist/_app/immutable/nodes/1.tUBg_osC.js.gz b/dist/_app/immutable/nodes/1.tUBg_osC.js.gz new file mode 100644 index 0000000..82ade11 Binary files /dev/null and b/dist/_app/immutable/nodes/1.tUBg_osC.js.gz differ diff --git a/dist/_app/immutable/nodes/8.WpdHpzGp.js b/dist/_app/immutable/nodes/10.FW_xLFIP.js similarity index 98% rename from dist/_app/immutable/nodes/8.WpdHpzGp.js rename to dist/_app/immutable/nodes/10.FW_xLFIP.js index 6a7ce06..0feb580 100644 --- a/dist/_app/immutable/nodes/8.WpdHpzGp.js +++ b/dist/_app/immutable/nodes/10.FW_xLFIP.js @@ -1 +1 @@ -import{s as N,e as F,n as I}from"../chunks/scheduler.aZRR5A_O.js";import{S as O,i as Y,g,s as j,m as S,h as _,j as w,f as d,c as x,n as V,k as p,a as z,y as h,o as G,A as K,x as T,d as A,b as Z,t as M,B as Q,r as U,u as W,v as X,w as $,p as ee}from"../chunks/index.ciNBPAxl.js";import{e as L}from"../chunks/each.-oqiv04n.js";import{s as te}from"../chunks/utils.Tkfr06Vk.js";function ae(o){let t,a,c,n,i,m,f,e,E,s,l,r,b,D,y,B;return{c(){t=g("div"),a=g("div"),c=j(),n=g("div"),i=g("img"),f=j(),e=g("h5"),E=S(o[1]),s=j(),l=g("span"),r=S(o[3]),b=j(),D=g("div"),y=g("a"),B=S("Site"),this.h()},l(v){t=_(v,"DIV",{class:!0});var u=w(t);a=_(u,"DIV",{class:!0}),w(a).forEach(d),c=x(u),n=_(u,"DIV",{class:!0});var k=w(n);i=_(k,"IMG",{class:!0,src:!0,alt:!0}),f=x(k),e=_(k,"H5",{class:!0});var P=w(e);E=V(P,o[1]),P.forEach(d),s=x(k),l=_(k,"SPAN",{class:!0});var R=w(l);r=V(R,o[3]),R.forEach(d),b=x(k),D=_(k,"DIV",{class:!0});var C=w(D);y=_(C,"A",{href:!0,class:!0});var J=w(y);B=V(J,"Site"),J.forEach(d),C.forEach(d),k.forEach(d),u.forEach(d),this.h()},h(){p(a,"class","flex justify-end px-4 pt-4"),p(i,"class","w-24 h-24 mb-3 rounded-full shadow-lg"),F(i.src,m=o[0])||p(i,"src",m),p(i,"alt","Portrait"),p(e,"class","mb-1 text-xl font-medium text-gray-900 dark:text-white"),p(l,"class","text-sm text-gray-500 dark:text-gray-400"),p(y,"href",o[2]),p(y,"class","btn btn-tertiary"),p(D,"class","flex mt-4 space-x-3 md:mt-6"),p(n,"class","flex flex-col items-center pb-10"),p(t,"class","mx-2 w-72 my-4 bg-base-300 dark:bg-base-300 border border-gray-200 rounded-lg shadow dark:border-gray-700")},m(v,u){z(v,t,u),h(t,a),h(t,c),h(t,n),h(n,i),h(n,f),h(n,e),h(e,E),h(n,s),h(n,l),h(l,r),h(n,b),h(n,D),h(D,y),h(y,B)},p(v,[u]){u&1&&!F(i.src,m=v[0])&&p(i,"src",m),u&2&&G(E,v[1]),u&8&&G(r,v[3]),u&4&&p(y,"href",v[2])},i:I,o:I,d(v){v&&d(t)}}}function se(o,t,a){let{image:c}=t,{name:n}=t,{mail:i}=t,{site:m}=t,{description:f}=t;return o.$$set=e=>{"image"in e&&a(0,c=e.image),"name"in e&&a(1,n=e.name),"mail"in e&&a(4,i=e.mail),"site"in e&&a(2,m=e.site),"description"in e&&a(3,f=e.description)},[c,n,m,f,i]}class ie extends O{constructor(t){super(),Y(this,t,se,ae,N,{image:0,name:1,mail:4,site:2,description:3})}}const re=[{name:"Raphaël Forment",description:"BuboBubo",image:"https://avatars.githubusercontent.com/u/45191785?s=400&u=3ee9062082ce04b6f08f811e657797fe9528d106&v=4",site:"https://raphaelforment.fr",mail:""},{name:"Rémi Georges",description:"Ralt144Mi",image:"https://avatars.githubusercontent.com/u/75539795?v=4",site:"https://remigeorges.fr/",mail:""},{name:"Yassin Siouda",description:"Rocoda",image:"/images/yassin.png",site:"https://yassin.siouda.com/",mail:""},{name:"Agathe Herrou",description:"th4",image:"https://club.tidalcycles.org/user_avatar/club.tidalcycles.org/th4/144/505_2.png",site:"https://th4music.net",mail:""},{name:"Raphaël Bastide",description:"_",image:"https://radicalnetworks.org/archives/2018/participants/raphael-bastide/raphaelbastide.jpg",site:"https://raphaelbastide.com",mail:""},{name:"Mamady Diarra",description:"ΛFΛLFL",image:"https://image-cdn.later.com/linkinbio_attachments/avatar/uploads-8d2b4941-bbce-6e0a-f8fd-c45c1736c9fb/thumb_md.jpg",site:"https://linkin.bio/afalfl",mail:""},{name:"AZERTYPE",description:"_",image:"https://cyberflemme.org/azertype/azertype_acceuil_fichiers/frontpage_azertype.jpg",site:"http://www.azertype.fr/",mail:""},{name:"Crash Server",description:"_",image:"https://crashserver.fr/wp-content/uploads/2021/03/transparent_blanc.png",site:"https://crashserver.fr/",mail:""},{name:"Jonathan Lefebvre",description:"Krease / VJBlind",image:"images/vj.jpeg",site:"https://www.linkedin.com/in/jonathan-lefebvre-a4867744/",mail:""},{name:"Adel Faure",description:"_",image:"https://pbs.twimg.com/profile_images/1702001658731896836/yEVPisBu_400x400.jpg",site:"https://adelfaure.net",mail:""},{name:"Léon Denise",description:"Néon Delice / ponk",image:"/images/leondenise.jpeg",site:"https://leon196.github.io/",mail:""},{name:"Sébastien Maire",description:"z0rg",image:"/images/z0rg.jpeg",site:"https://linktr.ee/z0rg",mail:""},{name:"Élie Gavoty",description:"Jules Cipher",image:"https://www.cookie.paris/static/4a546ebfffd8961ff03a81a8ba24f5f0/9f5d6/13.webp",site:"https://linktr.ee/julescipher",mail:""},{name:"Johann Philippe",description:"_",image:"https://www.ateliersmedicis.fr/sites/atelier-medicis.fr/files/styles/acteur/public/2021-04/landscape.webp?itok=zsBOuROD",site:"https://soundcloud.com/johannphilippe",mail:""},{name:"Jacopo Greco d'Alceo",description:"_",image:"https://avatars.githubusercontent.com/u/92983918?v=4",site:"https://jacopogrecodalceo.github.io/",mail:""}];function q(o,t,a){const c=o.slice();return c[1]=t[a].name,c[2]=t[a].description,c[3]=t[a].image,c[4]=t[a].site,c[5]=t[a].mail,c[7]=a,c}function H(o){let t,a,c,n;return a=new ie({props:{name:o[1],description:o[2],image:o[3],site:o[4],mail:o[5]}}),{c(){t=g("div"),U(a.$$.fragment),c=j()},l(i){t=_(i,"DIV",{});var m=w(t);W(a.$$.fragment,m),c=x(m),m.forEach(d)},m(i,m){z(i,t,m),X(a,t,null),h(t,c),n=!0},p:I,i(i){n||(A(a.$$.fragment,i),n=!0)},o(i){M(a.$$.fragment,i),n=!1},d(i){i&&d(t),$(a)}}}function ne(o){let t,a,c="Membres",n,i,m,f=L(o[0]),e=[];for(let s=0;sM(e[s],1,1,()=>{e[s]=null});return{c(){t=j(),a=g("h1"),a.textContent=c,n=j(),i=g("div");for(let s=0;s{"image"in e&&a(0,c=e.image),"name"in e&&a(1,n=e.name),"mail"in e&&a(4,i=e.mail),"site"in e&&a(2,m=e.site),"description"in e&&a(3,f=e.description)},[c,n,m,f,i]}class ie extends O{constructor(t){super(),Y(this,t,se,ae,N,{image:0,name:1,mail:4,site:2,description:3})}}const re=[{name:"Raphaël Forment",description:"BuboBubo",image:"https://avatars.githubusercontent.com/u/45191785?s=400&u=3ee9062082ce04b6f08f811e657797fe9528d106&v=4",site:"https://raphaelforment.fr",mail:""},{name:"Rémi Georges",description:"Ralt144Mi",image:"https://avatars.githubusercontent.com/u/75539795?v=4",site:"https://remigeorges.fr/",mail:""},{name:"Yassin Siouda",description:"Rocoda",image:"/images/yassin.png",site:"https://yassin.siouda.com/",mail:""},{name:"Agathe Herrou",description:"th4",image:"https://club.tidalcycles.org/user_avatar/club.tidalcycles.org/th4/144/505_2.png",site:"https://th4music.net",mail:""},{name:"Raphaël Bastide",description:"_",image:"https://radicalnetworks.org/archives/2018/participants/raphael-bastide/raphaelbastide.jpg",site:"https://raphaelbastide.com",mail:""},{name:"Mamady Diarra",description:"ΛFΛLFL",image:"https://image-cdn.later.com/linkinbio_attachments/avatar/uploads-8d2b4941-bbce-6e0a-f8fd-c45c1736c9fb/thumb_md.jpg",site:"https://linkin.bio/afalfl",mail:""},{name:"AZERTYPE",description:"_",image:"https://cyberflemme.org/azertype/azertype_acceuil_fichiers/frontpage_azertype.jpg",site:"http://www.azertype.fr/",mail:""},{name:"Crash Server",description:"_",image:"https://crashserver.fr/wp-content/uploads/2021/03/transparent_blanc.png",site:"https://crashserver.fr/",mail:""},{name:"Jonathan Lefebvre",description:"Krease / VJBlind",image:"images/vj.jpeg",site:"https://www.linkedin.com/in/jonathan-lefebvre-a4867744/",mail:""},{name:"Adel Faure",description:"_",image:"https://pbs.twimg.com/profile_images/1702001658731896836/yEVPisBu_400x400.jpg",site:"https://adelfaure.net",mail:""},{name:"Léon Denise",description:"Néon Delice / ponk",image:"/images/leondenise.jpeg",site:"https://leon196.github.io/",mail:""},{name:"Sébastien Maire",description:"z0rg",image:"/images/z0rg.jpeg",site:"https://linktr.ee/z0rg",mail:""},{name:"Élie Gavoty",description:"Jules Cipher",image:"https://www.cookie.paris/static/4a546ebfffd8961ff03a81a8ba24f5f0/9f5d6/13.webp",site:"https://linktr.ee/julescipher",mail:""},{name:"Johann Philippe",description:"_",image:"https://www.ateliersmedicis.fr/sites/atelier-medicis.fr/files/styles/acteur/public/2021-04/landscape.webp?itok=zsBOuROD",site:"https://soundcloud.com/johannphilippe",mail:""},{name:"Jacopo Greco d'Alceo",description:"_",image:"https://avatars.githubusercontent.com/u/92983918?v=4",site:"https://jacopogrecodalceo.github.io/",mail:""}];function q(o,t,a){const c=o.slice();return c[1]=t[a].name,c[2]=t[a].description,c[3]=t[a].image,c[4]=t[a].site,c[5]=t[a].mail,c[7]=a,c}function H(o){let t,a,c,n;return a=new ie({props:{name:o[1],description:o[2],image:o[3],site:o[4],mail:o[5]}}),{c(){t=g("div"),U(a.$$.fragment),c=j()},l(i){t=_(i,"DIV",{});var m=w(t);W(a.$$.fragment,m),c=x(m),m.forEach(d)},m(i,m){z(i,t,m),X(a,t,null),h(t,c),n=!0},p:I,i(i){n||(A(a.$$.fragment,i),n=!0)},o(i){M(a.$$.fragment,i),n=!1},d(i){i&&d(t),$(a)}}}function ne(o){let t,a,c="Membres",n,i,m,f=L(o[0]),e=[];for(let s=0;sM(e[s],1,1,()=>{e[s]=null});return{c(){t=j(),a=g("h1"),a.textContent=c,n=j(),i=g("div");for(let s=0;slive coding. Cette page est un recensement des groupes connus. Si vous êtes actifs, faites-le nous savoir ou ajoutez quelque chose ici depuis le dépôt GitHub.",markdown:"false"}});let u=y(r[0]),t=[];for(let e=0;e_(t[e],1,1,()=>{t[e]=null});return{c(){n=v(),a=I("h1"),a.textContent=o,c=v(),w(l.$$.fragment),g=v();for(let e=0;ex(t[e],1,1,()=>{t[e]=null});return{c(){r=v(),i=C("h1"),i.textContent=o,d=v(),u=C("p"),u.innerHTML=y,h=v();for(let e=0;eS(t[e],1,1,()=>{t[e]=null});return{c(){i=v(),o=C("h1"),o.textContent=s,d=v(),u=C("p"),u.innerHTML=k,h=v();for(let e=0;ee.length>v?e.slice(0,v-3)+"...":e;return i.$$set=e=>{"title"in e&&s(0,a=e.title),"description"in e&&s(1,d=e.description),"image"in e&&s(2,u=e.image),"link"in e&&s(3,l=e.link)},[a,d,u,l,c]}class ne extends K{constructor(t){super(),O(this,t,se,ae,T,{title:0,description:1,image:2,link:3})}}const ie=[{title:"Aux « algoraves », on danse sur une musique codée en direct",picture:"https://img.lemde.fr/2019/04/12/0/0/5122/3467/800/0/75/0/f22d969_x_FC8S1alEp4TYxEfX9-vnhW.jpg",link:"https://www.lemonde.fr/pixels/article/2019/04/13/aux-algoraves-on-danse-sur-une-musique-codee-en-direct_5449894_4408996.html",author:"Bruno Lus (Le Monde)"},{title:"OK Computer: Live coding creates music for dancing or dreaming in France's biggest algorave",picture:"https://static.euronews.com/articles/stories/07/52/54/80/1200x675_cmsv2_eb8921b9-1953-5db0-853f-6479b45a22c6-7525480.jpg",link:"https://www.euronews.com/culture/2023/05/03/ok-computer-live-coding-creates-music-for-dancing-or-dreaming-in-frances-biggest-algorave",author:"Gaël Camba (Euronews)"},{title:"Live coding : de la musique codée en direct pour danser ou rêver",picture:"https://static.euronews.com/articles/stories/07/52/54/80/1200x675_cmsv2_2c54c051-fb9c-5807-8429-da05ee6ef77d-7525480.jpg",link:"https://fr.euronews.com/culture/2023/04/26/live-coding-de-la-musique-codee-en-direct-pour-danser-ou-rever#:~:text=Live%20coding%20:%20de%20la%20musique%20cod%C3%A9e%20en%20direct%20pour%20danser%20ou%20r%C3%AAver,-Francesco%20Corvi%20se&text=Entre%20technique%20exp%C3%A9rimentale%20et%20composition,en%20programmant%20du%20code%20informatique.",author:"Gaël Camba (Euronews)"},{title:"Culture numérique : la Micro-folie sillonnera le territoire Barséquanais",picture:"https://scontent-cdg4-3.xx.fbcdn.net/v/t39.30808-6/395383692_828993012361704_4923466258603181196_n.jpg?_nc_cat=106&ccb=1-7&_nc_sid=5f2048&_nc_ohc=P4og5e7HJFcAX9sV97R&_nc_oc=AQnpycSxjK2s7sw24lYWjFB35aW1YxcaomLjlLD5bOmqnLxWcDYy3Pc19jBW1-eBsfY&_nc_ht=scontent-cdg4-3.xx&oh=00_AfA7QP0HSWCzDT1coLx7o9bCnMIdFSQpZafGNffwms03Cw&oe=654B351E",link:"https://www.lest-eclair.fr/id531959/article/2023-10-20/la-micro-folie-sillonnera-le-territoire-barsequanais",author:"L'Est Éclair"},{title:"Qu’est-ce que l’algorave, ce nouveau clubbing où ...",picture:"https://trxprds3.s3.amazonaws.com/uploads/2020/03/by-dan-hett.jpg",link:"https://www.traxmag.com/algorave-live-coding-dancefloor/",author:"Loïc Hecht (Trax Magazine)"},{title:"Le festival de jazz d'Uzeste, toujours aussi déjanté",picture:"https://www.radiofrance.fr/s3/cruiser-production/2023/08/a064c42c-f1fc-4ef8-90b8-2615d352e1e6/560x315_sc_capture-d-ecran-2023-08-09-a-15-11-31.webp",link:"https://www.radiofrance.fr/franceculture/podcasts/l-invite-e-des-matins-d-ete/le-festival-de-jazz-d-uzeste-toujours-aussi-dejante-2076865",author:"France Culture"}];function Q(i,t,s){const a=i.slice();return a[1]=t[s].title,a[2]=t[s].picture,a[3]=t[s].link,a[4]=t[s].author,a[6]=s,a}function V(i){let t,s;return t=new ne({props:{title:i[1],description:i[4],image:i[2],link:i[3]}}),{c(){U(t.$$.fragment)},l(a){Z(t.$$.fragment,a)},m(a,d){$(t,a,d),s=!0},p:B,i(a){s||(y(t.$$.fragment,a),s=!0)},o(a){F(t.$$.fragment,a),s=!1},d(a){ee(t,a)}}}function oe(i){let t,s,a="Presse",d,u,l,c=G(i[0]),e=[];for(let r=0;rF(e[r],1,1,()=>{e[r]=null});return{c(){t=C(),s=w("h1"),s.textContent=a,d=C(),u=w("div");for(let r=0;re.length>v?e.slice(0,v-3)+"...":e;return i.$$set=e=>{"title"in e&&s(0,a=e.title),"description"in e&&s(1,d=e.description),"image"in e&&s(2,u=e.image),"link"in e&&s(3,l=e.link)},[a,d,u,l,c]}class ne extends K{constructor(t){super(),O(this,t,se,ae,T,{title:0,description:1,image:2,link:3})}}const ie=[{title:"Aux « algoraves », on danse sur une musique codée en direct",picture:"https://img.lemde.fr/2019/04/12/0/0/5122/3467/800/0/75/0/f22d969_x_FC8S1alEp4TYxEfX9-vnhW.jpg",link:"https://www.lemonde.fr/pixels/article/2019/04/13/aux-algoraves-on-danse-sur-une-musique-codee-en-direct_5449894_4408996.html",author:"Bruno Lus (Le Monde)"},{title:"OK Computer: Live coding creates music for dancing or dreaming in France's biggest algorave",picture:"https://static.euronews.com/articles/stories/07/52/54/80/1200x675_cmsv2_eb8921b9-1953-5db0-853f-6479b45a22c6-7525480.jpg",link:"https://www.euronews.com/culture/2023/05/03/ok-computer-live-coding-creates-music-for-dancing-or-dreaming-in-frances-biggest-algorave",author:"Gaël Camba (Euronews)"},{title:"Live coding : de la musique codée en direct pour danser ou rêver",picture:"https://static.euronews.com/articles/stories/07/52/54/80/1200x675_cmsv2_2c54c051-fb9c-5807-8429-da05ee6ef77d-7525480.jpg",link:"https://fr.euronews.com/culture/2023/04/26/live-coding-de-la-musique-codee-en-direct-pour-danser-ou-rever#:~:text=Live%20coding%20:%20de%20la%20musique%20cod%C3%A9e%20en%20direct%20pour%20danser%20ou%20r%C3%AAver,-Francesco%20Corvi%20se&text=Entre%20technique%20exp%C3%A9rimentale%20et%20composition,en%20programmant%20du%20code%20informatique.",author:"Gaël Camba (Euronews)"},{title:"Culture numérique : la Micro-folie sillonnera le territoire Barséquanais",picture:"https://scontent-cdg4-3.xx.fbcdn.net/v/t39.30808-6/395383692_828993012361704_4923466258603181196_n.jpg?_nc_cat=106&ccb=1-7&_nc_sid=5f2048&_nc_ohc=P4og5e7HJFcAX9sV97R&_nc_oc=AQnpycSxjK2s7sw24lYWjFB35aW1YxcaomLjlLD5bOmqnLxWcDYy3Pc19jBW1-eBsfY&_nc_ht=scontent-cdg4-3.xx&oh=00_AfA7QP0HSWCzDT1coLx7o9bCnMIdFSQpZafGNffwms03Cw&oe=654B351E",link:"https://www.lest-eclair.fr/id531959/article/2023-10-20/la-micro-folie-sillonnera-le-territoire-barsequanais",author:"L'Est Éclair"},{title:"Qu’est-ce que l’algorave, ce nouveau clubbing où ...",picture:"https://trxprds3.s3.amazonaws.com/uploads/2020/03/by-dan-hett.jpg",link:"https://www.traxmag.com/algorave-live-coding-dancefloor/",author:"Loïc Hecht (Trax Magazine)"},{title:"Le festival de jazz d'Uzeste, toujours aussi déjanté",picture:"https://www.radiofrance.fr/s3/cruiser-production/2023/08/a064c42c-f1fc-4ef8-90b8-2615d352e1e6/560x315_sc_capture-d-ecran-2023-08-09-a-15-11-31.webp",link:"https://www.radiofrance.fr/franceculture/podcasts/l-invite-e-des-matins-d-ete/le-festival-de-jazz-d-uzeste-toujours-aussi-dejante-2076865",author:"France Culture"}];function Q(i,t,s){const a=i.slice();return a[1]=t[s].title,a[2]=t[s].picture,a[3]=t[s].link,a[4]=t[s].author,a[6]=s,a}function V(i){let t,s;return t=new ne({props:{title:i[1],description:i[4],image:i[2],link:i[3]}}),{c(){U(t.$$.fragment)},l(a){Z(t.$$.fragment,a)},m(a,d){$(t,a,d),s=!0},p:B,i(a){s||(y(t.$$.fragment,a),s=!0)},o(a){F(t.$$.fragment,a),s=!1},d(a){ee(t,a)}}}function oe(i){let t,s,a="Presse",d,u,l,c=G(i[0]),e=[];for(let r=0;rF(e[r],1,1,()=>{e[r]=null});return{c(){t=C(),s=w("h1"),s.textContent=a,d=C(),u=w("div");for(let r=0;rlive coding. Cette page est un recensement des groupes connus. Si vous êtes actifs, faites-le nous savoir ou ajoutez quelque chose ici depuis le dépôt GitHub.",markdown:"false"}});let l=w(r[0]),t=[];for(let e=0;e_(t[e],1,1,()=>{t[e]=null});return{c(){a=v(),o=P("h1"),o.textContent=n,c=v(),y(u.$$.fragment),f=v();for(let e=0;e

    TOPLAP : TOPLAP est le collectif historique qui a +import{s as M,n as P}from"../chunks/scheduler.aZRR5A_O.js";import{S,i as T,s as m,g as d,r as y,A as R,f as s,c as p,h as f,x as g,u as j,a as l,v as F,d as I,t as U,w as k}from"../chunks/index.AIcdAWo0.js";import{I as z}from"../chunks/Info.bs_Ss2Q-.js";function O(H){let c,n,L="Ressources",v,i,h,o,w="Sites internet",_,r,q=`

  • TOPLAP : TOPLAP est le collectif historique qui a promu la pratique du live coding à partir de sa fondation en 2004. Le collectif est toujours actif et a aujourd’hui évolué pour constituer un grand réseau international de chercheurs et d’artistes travaillant autour de la diff --git a/dist/_app/immutable/nodes/14.ELzCsYqP.js.br b/dist/_app/immutable/nodes/14.ELzCsYqP.js.br new file mode 100644 index 0000000..e296dff Binary files /dev/null and b/dist/_app/immutable/nodes/14.ELzCsYqP.js.br differ diff --git a/dist/_app/immutable/nodes/14.ELzCsYqP.js.gz b/dist/_app/immutable/nodes/14.ELzCsYqP.js.gz new file mode 100644 index 0000000..137b558 Binary files /dev/null and b/dist/_app/immutable/nodes/14.ELzCsYqP.js.gz differ diff --git a/dist/_app/immutable/nodes/2.YD8HTYt7.js b/dist/_app/immutable/nodes/2.RD5SDQWd.js similarity index 98% rename from dist/_app/immutable/nodes/2.YD8HTYt7.js rename to dist/_app/immutable/nodes/2.RD5SDQWd.js index 0c8ee88..de05b9e 100644 --- a/dist/_app/immutable/nodes/2.YD8HTYt7.js +++ b/dist/_app/immutable/nodes/2.RD5SDQWd.js @@ -1 +1 @@ -import{s as B,n as j}from"../chunks/scheduler.aZRR5A_O.js";import{S as k,i as O,s as n,g as f,r as R,A as E,f as i,c as o,h as v,x as h,u as F,a as s,v as S,d as D,t as G,w as N}from"../chunks/index.ciNBPAxl.js";import{I as Q}from"../chunks/Info.NO-uVT9H.js";function V(z){let q,r,H="Qu’est-ce que le live-coding ?",g,a,x,l,T='Historiquement, le live coding est un type de création porté par le collectif TOPLAP. Il existe de nombreux groupes en Europe et dans le monde qui sont issus de ce collectif : TOPLAP Barcelona, Livecode NYC, parmi d’autres. La pratique du live coding s’est popularisée au travers du Manifeste TOPLAP et des Algoraves (algorithmic rave parties). Il s’agit pourtant de l’arbre qui cache la forêt : le live coding est une pratique qui existe depuis la fin des années 1980, et que l’on retrouve un peu partout dans les arts numériques.',_,u,$="À propos de ce site",b,m,y='Ce site est une collection de ressources. Il est conçu pour combler un vide. La communauté francophone du live coding ne possédait pas de site permettant aux artistes et musiciens français de se trouver et d’échanger facilement. Disposer d’un site dédié permet de rompre avec la nécessité de se tenir informé sans cesse sur les réseaux sociaux sous peine de manquer une information. Ce site est conçu et maintenu par Raphaël Forment (BuboBubo).',C,p,M="L’information sur chacune des pages est randomisée pour favoriser la découverte.",L,c,I="Comment contribuer ?",w,d,A='Le site est hébergé sur GitHub. Pour ajouter une information au site, veuillez créer une Pull Request. Vous pouvez aussi contacter l’un des membres qui se chargera de transmettre l’information.',P;return a=new Q({props:{info:"Le live coding est une pratique artistique qui fait de l'acte de programmation un geste expressif et performatif. Les live coders considèrent l'interface de programmation comme un instrument de musique. Le live coding est un art au croisement entre synthèse sonore, improvisation musicale et musique algorithmique générative.

    Le live coding est au croisement de plusieurs arts et encourage des approches transdisciplinaires de la création : musique, arts visuels, informatique, jeux vidéos, danse, etc. Plus largement, le live coding est un domaine critique qui encourage les artistes à repenser leur rapport à l'informatique. Le live coding est traversé par la culture hacker, par la philosophie du logiciel libre et open source. Il souhaite également développer une nouvelle forme d'expressivité au sein des arts, en considérant l'ordinateur comme une interface pour la programmation exploratoire ou programmation conversationnelle.",markdown:"false"}}),{c(){q=n(),r=f("h1"),r.textContent=H,g=n(),R(a.$$.fragment),x=n(),l=f("p"),l.innerHTML=T,_=n(),u=f("h1"),u.textContent=$,b=n(),m=f("p"),m.innerHTML=y,C=n(),p=f("p"),p.textContent=M,L=n(),c=f("h1"),c.textContent=I,w=n(),d=f("p"),d.innerHTML=A,this.h()},l(e){E("svelte-si4wcq",document.head).forEach(i),q=o(e),r=v(e,"H1",{"data-svelte-h":!0}),h(r)!=="svelte-z12tl4"&&(r.textContent=H),g=o(e),F(a.$$.fragment,e),x=o(e),l=v(e,"P",{"data-svelte-h":!0}),h(l)!=="svelte-qso192"&&(l.innerHTML=T),_=o(e),u=v(e,"H1",{"data-svelte-h":!0}),h(u)!=="svelte-9nyscp"&&(u.textContent=$),b=o(e),m=v(e,"P",{"data-svelte-h":!0}),h(m)!=="svelte-ffh2di"&&(m.innerHTML=y),C=o(e),p=v(e,"P",{"data-svelte-h":!0}),h(p)!=="svelte-1bpzmjt"&&(p.textContent=M),L=o(e),c=v(e,"H1",{"data-svelte-h":!0}),h(c)!=="svelte-15qmnqt"&&(c.textContent=I),w=o(e),d=v(e,"P",{"data-svelte-h":!0}),h(d)!=="svelte-1ht7736"&&(d.innerHTML=A),this.h()},h(){document.title="LC.FR"},m(e,t){s(e,q,t),s(e,r,t),s(e,g,t),S(a,e,t),s(e,x,t),s(e,l,t),s(e,_,t),s(e,u,t),s(e,b,t),s(e,m,t),s(e,C,t),s(e,p,t),s(e,L,t),s(e,c,t),s(e,w,t),s(e,d,t),P=!0},p:j,i(e){P||(D(a.$$.fragment,e),P=!0)},o(e){G(a.$$.fragment,e),P=!1},d(e){e&&(i(q),i(r),i(g),i(x),i(l),i(_),i(u),i(b),i(m),i(C),i(p),i(L),i(c),i(w),i(d)),N(a,e)}}}class U extends k{constructor(q){super(),O(this,q,null,V,B,{})}}export{U as component}; +import{s as B,n as j}from"../chunks/scheduler.aZRR5A_O.js";import{S as k,i as O,s as n,g as f,r as R,A as E,f as i,c as o,h as v,x as h,u as F,a as s,v as S,d as D,t as G,w as N}from"../chunks/index.AIcdAWo0.js";import{I as Q}from"../chunks/Info.bs_Ss2Q-.js";function V(z){let q,r,H="Qu’est-ce que le live-coding ?",g,a,x,l,T='Historiquement, le live coding est un type de création porté par le collectif TOPLAP. Il existe de nombreux groupes en Europe et dans le monde qui sont issus de ce collectif : TOPLAP Barcelona, Livecode NYC, parmi d’autres. La pratique du live coding s’est popularisée au travers du Manifeste TOPLAP et des Algoraves (algorithmic rave parties). Il s’agit pourtant de l’arbre qui cache la forêt : le live coding est une pratique qui existe depuis la fin des années 1980, et que l’on retrouve un peu partout dans les arts numériques.',_,u,$="À propos de ce site",b,m,y='Ce site est une collection de ressources. Il est conçu pour combler un vide. La communauté francophone du live coding ne possédait pas de site permettant aux artistes et musiciens français de se trouver et d’échanger facilement. Disposer d’un site dédié permet de rompre avec la nécessité de se tenir informé sans cesse sur les réseaux sociaux sous peine de manquer une information. Ce site est conçu et maintenu par Raphaël Forment (BuboBubo).',C,p,M="L’information sur chacune des pages est randomisée pour favoriser la découverte.",L,c,I="Comment contribuer ?",w,d,A='Le site est hébergé sur GitHub. Pour ajouter une information au site, veuillez créer une Pull Request. Vous pouvez aussi contacter l’un des membres qui se chargera de transmettre l’information.',P;return a=new Q({props:{info:"Le live coding est une pratique artistique qui fait de l'acte de programmation un geste expressif et performatif. Les live coders considèrent l'interface de programmation comme un instrument de musique. Le live coding est un art au croisement entre synthèse sonore, improvisation musicale et musique algorithmique générative.

    Le live coding est au croisement de plusieurs arts et encourage des approches transdisciplinaires de la création : musique, arts visuels, informatique, jeux vidéos, danse, etc. Plus largement, le live coding est un domaine critique qui encourage les artistes à repenser leur rapport à l'informatique. Le live coding est traversé par la culture hacker, par la philosophie du logiciel libre et open source. Il souhaite également développer une nouvelle forme d'expressivité au sein des arts, en considérant l'ordinateur comme une interface pour la programmation exploratoire ou programmation conversationnelle.",markdown:"false"}}),{c(){q=n(),r=f("h1"),r.textContent=H,g=n(),R(a.$$.fragment),x=n(),l=f("p"),l.innerHTML=T,_=n(),u=f("h1"),u.textContent=$,b=n(),m=f("p"),m.innerHTML=y,C=n(),p=f("p"),p.textContent=M,L=n(),c=f("h1"),c.textContent=I,w=n(),d=f("p"),d.innerHTML=A,this.h()},l(e){E("svelte-si4wcq",document.head).forEach(i),q=o(e),r=v(e,"H1",{"data-svelte-h":!0}),h(r)!=="svelte-z12tl4"&&(r.textContent=H),g=o(e),F(a.$$.fragment,e),x=o(e),l=v(e,"P",{"data-svelte-h":!0}),h(l)!=="svelte-qso192"&&(l.innerHTML=T),_=o(e),u=v(e,"H1",{"data-svelte-h":!0}),h(u)!=="svelte-9nyscp"&&(u.textContent=$),b=o(e),m=v(e,"P",{"data-svelte-h":!0}),h(m)!=="svelte-ffh2di"&&(m.innerHTML=y),C=o(e),p=v(e,"P",{"data-svelte-h":!0}),h(p)!=="svelte-1bpzmjt"&&(p.textContent=M),L=o(e),c=v(e,"H1",{"data-svelte-h":!0}),h(c)!=="svelte-15qmnqt"&&(c.textContent=I),w=o(e),d=v(e,"P",{"data-svelte-h":!0}),h(d)!=="svelte-1ht7736"&&(d.innerHTML=A),this.h()},h(){document.title="LC.FR"},m(e,t){s(e,q,t),s(e,r,t),s(e,g,t),S(a,e,t),s(e,x,t),s(e,l,t),s(e,_,t),s(e,u,t),s(e,b,t),s(e,m,t),s(e,C,t),s(e,p,t),s(e,L,t),s(e,c,t),s(e,w,t),s(e,d,t),P=!0},p:j,i(e){P||(D(a.$$.fragment,e),P=!0)},o(e){G(a.$$.fragment,e),P=!1},d(e){e&&(i(q),i(r),i(g),i(x),i(l),i(_),i(u),i(b),i(m),i(C),i(p),i(L),i(c),i(w),i(d)),N(a,e)}}}class U extends k{constructor(q){super(),O(this,q,null,V,B,{})}}export{U as component}; diff --git a/dist/_app/immutable/nodes/2.RD5SDQWd.js.br b/dist/_app/immutable/nodes/2.RD5SDQWd.js.br new file mode 100644 index 0000000..8aaaf9d Binary files /dev/null and b/dist/_app/immutable/nodes/2.RD5SDQWd.js.br differ diff --git a/dist/_app/immutable/nodes/2.RD5SDQWd.js.gz b/dist/_app/immutable/nodes/2.RD5SDQWd.js.gz new file mode 100644 index 0000000..7bf4832 Binary files /dev/null and b/dist/_app/immutable/nodes/2.RD5SDQWd.js.gz differ diff --git a/dist/_app/immutable/nodes/2.YD8HTYt7.js.br b/dist/_app/immutable/nodes/2.YD8HTYt7.js.br deleted file mode 100644 index 4c8b27f..0000000 Binary files a/dist/_app/immutable/nodes/2.YD8HTYt7.js.br and /dev/null differ diff --git a/dist/_app/immutable/nodes/2.YD8HTYt7.js.gz b/dist/_app/immutable/nodes/2.YD8HTYt7.js.gz deleted file mode 100644 index 8722c33..0000000 Binary files a/dist/_app/immutable/nodes/2.YD8HTYt7.js.gz and /dev/null differ diff --git a/dist/_app/immutable/nodes/3.qqim2H7R.js b/dist/_app/immutable/nodes/3.48xp-1q7.js similarity index 98% rename from dist/_app/immutable/nodes/3.qqim2H7R.js rename to dist/_app/immutable/nodes/3.48xp-1q7.js index 82788f4..21d43bb 100644 --- a/dist/_app/immutable/nodes/3.qqim2H7R.js +++ b/dist/_app/immutable/nodes/3.48xp-1q7.js @@ -1 +1 @@ -import{s as z,n as B}from"../chunks/scheduler.aZRR5A_O.js";import{S as k,i as O,s as n,g as f,r as E,A as R,f as i,c as o,h as v,x as h,u as S,a as s,v as D,d as F,t as G,w as N}from"../chunks/index.ciNBPAxl.js";import{I as Q}from"../chunks/Info.NO-uVT9H.js";function V(j){let g,r,H="Qu’est-ce que le live-coding ?",q,a,x,l,T='Historiquement, le live coding est un type de création porté par le collectif TOPLAP. Il existe de nombreux groupes en Europe et dans le monde qui sont issus de ce collectif : TOPLAP Barcelona, Livecode NYC, parmi d’autres. La pratique du live coding s’est popularisée au travers du Manifeste TOPLAP et des Algoraves (algorithmic rave parties). Il s’agit pourtant de l’arbre qui cache la forêt : le live coding est une pratique qui existe depuis la fin des années 1980, et que l’on retrouve un peu partout dans les arts numériques.',_,u,y="À propos de ce site",b,m,$='Ce site est une collection de ressources. Il est conçu pour combler un vide. La communauté francophone du live coding ne possédait pas de site permettant aux artistes et musiciens français de se trouver et d’échanger facilement. Disposer d’un site dédié permet de rompre avec la nécessité de se tenir informé sans cesse sur les réseaux sociaux sous peine de manquer une information. Ce site est conçu et maintenu par Raphaël Forment (BuboBubo).',C,p,M="L’information sur chacune des pages est randomisée pour favoriser la découverte.",L,c,A="Comment contribuer ?",P,d,I='Le site est hébergé sur GitHub. Pour ajouter une information au site, veuillez créer une Pull Request. Vous pouvez aussi contacter l’un des membres qui se chargera de transmettre l’information.',w;return a=new Q({props:{info:"Le live coding est une pratique artistique qui fait de l'acte de programmation un geste expressif et performatif. Les live coders considèrent l'interface de programmation comme un instrument de musique. Le live coding est un art au croisement entre synthèse sonore, improvisation musicale et musique algorithmique générative.

    Le live coding est au croisement de plusieurs arts et encourage des approches transdisciplinaires de la création : musique, arts visuels, informatique, jeux vidéos, danse, etc. Plus largement, le live coding est un domaine critique qui encourage les artistes à repenser leur rapport à l'informatique. Le live coding est traversé par la culture hacker, par la philosophie du logiciel libre et open source. Il souhaite également développer une nouvelle forme d'expressivité au sein des arts, en considérant l'ordinateur comme une interface pour la programmation exploratoire ou programmation conversationnelle.",markdown:"false"}}),{c(){g=n(),r=f("h1"),r.textContent=H,q=n(),E(a.$$.fragment),x=n(),l=f("p"),l.innerHTML=T,_=n(),u=f("h1"),u.textContent=y,b=n(),m=f("p"),m.innerHTML=$,C=n(),p=f("p"),p.textContent=M,L=n(),c=f("h1"),c.textContent=A,P=n(),d=f("p"),d.innerHTML=I,this.h()},l(e){R("svelte-ydjrmh",document.head).forEach(i),g=o(e),r=v(e,"H1",{"data-svelte-h":!0}),h(r)!=="svelte-z12tl4"&&(r.textContent=H),q=o(e),S(a.$$.fragment,e),x=o(e),l=v(e,"P",{"data-svelte-h":!0}),h(l)!=="svelte-qso192"&&(l.innerHTML=T),_=o(e),u=v(e,"H1",{"data-svelte-h":!0}),h(u)!=="svelte-9nyscp"&&(u.textContent=y),b=o(e),m=v(e,"P",{"data-svelte-h":!0}),h(m)!=="svelte-ffh2di"&&(m.innerHTML=$),C=o(e),p=v(e,"P",{"data-svelte-h":!0}),h(p)!=="svelte-1bpzmjt"&&(p.textContent=M),L=o(e),c=v(e,"H1",{"data-svelte-h":!0}),h(c)!=="svelte-15qmnqt"&&(c.textContent=A),P=o(e),d=v(e,"P",{"data-svelte-h":!0}),h(d)!=="svelte-1ht7736"&&(d.innerHTML=I),this.h()},h(){document.title="Accueil"},m(e,t){s(e,g,t),s(e,r,t),s(e,q,t),D(a,e,t),s(e,x,t),s(e,l,t),s(e,_,t),s(e,u,t),s(e,b,t),s(e,m,t),s(e,C,t),s(e,p,t),s(e,L,t),s(e,c,t),s(e,P,t),s(e,d,t),w=!0},p:B,i(e){w||(F(a.$$.fragment,e),w=!0)},o(e){G(a.$$.fragment,e),w=!1},d(e){e&&(i(g),i(r),i(q),i(x),i(l),i(_),i(u),i(b),i(m),i(C),i(p),i(L),i(c),i(P),i(d)),N(a,e)}}}class U extends k{constructor(g){super(),O(this,g,null,V,z,{})}}export{U as component}; +import{s as z,n as B}from"../chunks/scheduler.aZRR5A_O.js";import{S as k,i as O,s as n,g as f,r as E,A as R,f as i,c as o,h as v,x as h,u as S,a as s,v as D,d as F,t as G,w as N}from"../chunks/index.AIcdAWo0.js";import{I as Q}from"../chunks/Info.bs_Ss2Q-.js";function V(j){let g,r,H="Qu’est-ce que le live-coding ?",q,a,x,l,T='Historiquement, le live coding est un type de création porté par le collectif TOPLAP. Il existe de nombreux groupes en Europe et dans le monde qui sont issus de ce collectif : TOPLAP Barcelona, Livecode NYC, parmi d’autres. La pratique du live coding s’est popularisée au travers du Manifeste TOPLAP et des Algoraves (algorithmic rave parties). Il s’agit pourtant de l’arbre qui cache la forêt : le live coding est une pratique qui existe depuis la fin des années 1980, et que l’on retrouve un peu partout dans les arts numériques.',_,u,y="À propos de ce site",b,m,$='Ce site est une collection de ressources. Il est conçu pour combler un vide. La communauté francophone du live coding ne possédait pas de site permettant aux artistes et musiciens français de se trouver et d’échanger facilement. Disposer d’un site dédié permet de rompre avec la nécessité de se tenir informé sans cesse sur les réseaux sociaux sous peine de manquer une information. Ce site est conçu et maintenu par Raphaël Forment (BuboBubo).',C,p,M="L’information sur chacune des pages est randomisée pour favoriser la découverte.",L,c,A="Comment contribuer ?",P,d,I='Le site est hébergé sur GitHub. Pour ajouter une information au site, veuillez créer une Pull Request. Vous pouvez aussi contacter l’un des membres qui se chargera de transmettre l’information.',w;return a=new Q({props:{info:"Le live coding est une pratique artistique qui fait de l'acte de programmation un geste expressif et performatif. Les live coders considèrent l'interface de programmation comme un instrument de musique. Le live coding est un art au croisement entre synthèse sonore, improvisation musicale et musique algorithmique générative.

    Le live coding est au croisement de plusieurs arts et encourage des approches transdisciplinaires de la création : musique, arts visuels, informatique, jeux vidéos, danse, etc. Plus largement, le live coding est un domaine critique qui encourage les artistes à repenser leur rapport à l'informatique. Le live coding est traversé par la culture hacker, par la philosophie du logiciel libre et open source. Il souhaite également développer une nouvelle forme d'expressivité au sein des arts, en considérant l'ordinateur comme une interface pour la programmation exploratoire ou programmation conversationnelle.",markdown:"false"}}),{c(){g=n(),r=f("h1"),r.textContent=H,q=n(),E(a.$$.fragment),x=n(),l=f("p"),l.innerHTML=T,_=n(),u=f("h1"),u.textContent=y,b=n(),m=f("p"),m.innerHTML=$,C=n(),p=f("p"),p.textContent=M,L=n(),c=f("h1"),c.textContent=A,P=n(),d=f("p"),d.innerHTML=I,this.h()},l(e){R("svelte-ydjrmh",document.head).forEach(i),g=o(e),r=v(e,"H1",{"data-svelte-h":!0}),h(r)!=="svelte-z12tl4"&&(r.textContent=H),q=o(e),S(a.$$.fragment,e),x=o(e),l=v(e,"P",{"data-svelte-h":!0}),h(l)!=="svelte-qso192"&&(l.innerHTML=T),_=o(e),u=v(e,"H1",{"data-svelte-h":!0}),h(u)!=="svelte-9nyscp"&&(u.textContent=y),b=o(e),m=v(e,"P",{"data-svelte-h":!0}),h(m)!=="svelte-ffh2di"&&(m.innerHTML=$),C=o(e),p=v(e,"P",{"data-svelte-h":!0}),h(p)!=="svelte-1bpzmjt"&&(p.textContent=M),L=o(e),c=v(e,"H1",{"data-svelte-h":!0}),h(c)!=="svelte-15qmnqt"&&(c.textContent=A),P=o(e),d=v(e,"P",{"data-svelte-h":!0}),h(d)!=="svelte-1ht7736"&&(d.innerHTML=I),this.h()},h(){document.title="Accueil"},m(e,t){s(e,g,t),s(e,r,t),s(e,q,t),D(a,e,t),s(e,x,t),s(e,l,t),s(e,_,t),s(e,u,t),s(e,b,t),s(e,m,t),s(e,C,t),s(e,p,t),s(e,L,t),s(e,c,t),s(e,P,t),s(e,d,t),w=!0},p:B,i(e){w||(F(a.$$.fragment,e),w=!0)},o(e){G(a.$$.fragment,e),w=!1},d(e){e&&(i(g),i(r),i(q),i(x),i(l),i(_),i(u),i(b),i(m),i(C),i(p),i(L),i(c),i(P),i(d)),N(a,e)}}}class U extends k{constructor(g){super(),O(this,g,null,V,z,{})}}export{U as component}; diff --git a/dist/_app/immutable/nodes/3.48xp-1q7.js.br b/dist/_app/immutable/nodes/3.48xp-1q7.js.br new file mode 100644 index 0000000..ded730b Binary files /dev/null and b/dist/_app/immutable/nodes/3.48xp-1q7.js.br differ diff --git a/dist/_app/immutable/nodes/3.48xp-1q7.js.gz b/dist/_app/immutable/nodes/3.48xp-1q7.js.gz new file mode 100644 index 0000000..c4ced45 Binary files /dev/null and b/dist/_app/immutable/nodes/3.48xp-1q7.js.gz differ diff --git a/dist/_app/immutable/nodes/3.qqim2H7R.js.br b/dist/_app/immutable/nodes/3.qqim2H7R.js.br deleted file mode 100644 index 065faff..0000000 Binary files a/dist/_app/immutable/nodes/3.qqim2H7R.js.br and /dev/null differ diff --git a/dist/_app/immutable/nodes/3.qqim2H7R.js.gz b/dist/_app/immutable/nodes/3.qqim2H7R.js.gz deleted file mode 100644 index dc5bb9a..0000000 Binary files a/dist/_app/immutable/nodes/3.qqim2H7R.js.gz and /dev/null differ diff --git a/dist/_app/immutable/nodes/4.CPFN9ZRQ.js.br b/dist/_app/immutable/nodes/4.CPFN9ZRQ.js.br deleted file mode 100644 index 5a5d929..0000000 Binary files a/dist/_app/immutable/nodes/4.CPFN9ZRQ.js.br and /dev/null differ diff --git a/dist/_app/immutable/nodes/4.CPFN9ZRQ.js.gz b/dist/_app/immutable/nodes/4.CPFN9ZRQ.js.gz deleted file mode 100644 index 0f81099..0000000 Binary files a/dist/_app/immutable/nodes/4.CPFN9ZRQ.js.gz and /dev/null differ diff --git a/dist/_app/immutable/nodes/4.uhJTyLRn.js b/dist/_app/immutable/nodes/4.uhJTyLRn.js new file mode 100644 index 0000000..684e414 --- /dev/null +++ b/dist/_app/immutable/nodes/4.uhJTyLRn.js @@ -0,0 +1 @@ +import{s as B}from"../chunks/scheduler.aZRR5A_O.js";import{S as D,i as M,g as $,s as P,r as T,h as k,x as z,c as j,u as U,j as E,f as h,a as g,v as F,d as G,t as J,w as K,B as N,m as y,n as w,k as S,y as v,o as A}from"../chunks/index.AIcdAWo0.js";import{e as L}from"../chunks/each.-oqiv04n.js";import{I as Q}from"../chunks/Info.bs_Ss2Q-.js";const R=async({fetch:o})=>({articles:await(await o("/api/articles")).json()}),te=Object.freeze(Object.defineProperty({__proto__:null,load:R},Symbol.toStringTag,{value:"Module"}));function O(o,t,c){const s=o.slice();return s[1]=t[c],s}function q(o){let t,c,s,r=o[1].meta.title+"",b,u,x,i,m,d=o[1].meta.date+"",p,l,e=o[1].meta.author+"",n,a;return{c(){t=$("li"),c=$("h2"),s=$("a"),b=y(r),x=P(),i=$("p"),m=y("Publié le : "),p=y(d),l=y(" par "),n=y(e),a=P(),this.h()},l(f){t=k(f,"LI",{class:!0});var _=E(t);c=k(_,"H2",{});var H=E(c);s=k(H,"A",{href:!0});var I=E(s);b=w(I,r),I.forEach(h),H.forEach(h),x=j(_),i=k(_,"P",{class:!0});var C=E(i);m=w(C,"Publié le : "),p=w(C,d),l=w(C," par "),n=w(C,e),C.forEach(h),a=j(_),_.forEach(h),this.h()},h(){S(s,"href",u=o[1].path),S(i,"class","pt-2"),S(t,"class","px-4 pb-4 my-4 rounded-lg bg-base-300 dark:bg-base-300 hover:bg-base-200 hover:dark:bg-base-200 border-1 border-color-base-100")},m(f,_){g(f,t,_),v(t,c),v(c,s),v(s,b),v(t,x),v(t,i),v(i,m),v(i,p),v(i,l),v(i,n),v(t,a)},p(f,_){_&1&&r!==(r=f[1].meta.title+"")&&A(b,r),_&1&&u!==(u=f[1].path)&&S(s,"href",u),_&1&&d!==(d=f[1].meta.date+"")&&A(p,d),_&1&&e!==(e=f[1].meta.author+"")&&A(n,e)},d(f){f&&h(t)}}}function V(o){let t,c="Articles",s,r,b,u,x="Articles publiés",i,m,d;r=new Q({props:{info:"Dada.",markdown:"false"}});let p=L(o[0].articles),l=[];for(let e=0;e{"data"in r&&c(0,s=r.data)},[s]}class ae extends D{constructor(t){super(),M(this,t,W,V,B,{data:0})}}export{ae as component,te as universal}; diff --git a/dist/_app/immutable/nodes/4.uhJTyLRn.js.br b/dist/_app/immutable/nodes/4.uhJTyLRn.js.br new file mode 100644 index 0000000..232a1f0 Binary files /dev/null and b/dist/_app/immutable/nodes/4.uhJTyLRn.js.br differ diff --git a/dist/_app/immutable/nodes/4.uhJTyLRn.js.gz b/dist/_app/immutable/nodes/4.uhJTyLRn.js.gz new file mode 100644 index 0000000..9b239e3 Binary files /dev/null and b/dist/_app/immutable/nodes/4.uhJTyLRn.js.gz differ diff --git a/dist/_app/immutable/nodes/5.AXV32Mz_.js b/dist/_app/immutable/nodes/5.AXV32Mz_.js new file mode 100644 index 0000000..f8f9510 --- /dev/null +++ b/dist/_app/immutable/nodes/5.AXV32Mz_.js @@ -0,0 +1,7 @@ +import{_ as K}from"../chunks/preload-helper.0HuHagjb.js";import{_ as N}from"../chunks/dynamic-import-helper.0gtGTknh.js";import{s as Q}from"../chunks/scheduler.aZRR5A_O.js";import{S as U,i as W,q as z,g as h,m as y,s as q,r as M,h as v,j as g,n as w,f as d,c as C,u as X,k as D,a as Y,y as r,v as B,o as H,t as F,b as Z,d as G,w as J,p as tt}from"../chunks/index.AIcdAWo0.js";async function et({params:o}){const e=await N(Object.assign({"../ordinateur_crier.md":()=>K(()=>import("../chunks/ordinateur_crier.w4EusLTJ.js"),__vite__mapDeps([0,1,2]),import.meta.url)}),`../${o.slug}.md`),{title:i,date:s,author:l}=e.metadata,$=e.default;return{title:i,date:s,author:l,content:$}}const lt=Object.freeze(Object.defineProperty({__proto__:null,load:et},Symbol.toStringTag,{value:"Module"}));function at(o){let e,i,s=o[0].title+"",l,$,c,u,O,b=o[0].date+"",j,S,_,R,E=o[0].author+"",I,T,f,t,m;var p=o[0].content;function L(a,n){return{}}return p&&(t=z(p,L())),{c(){e=h("article"),i=h("h1"),l=y(s),$=q(),c=h("div"),u=h("p"),O=y("Publié le : "),j=y(b),S=q(),_=h("p"),R=y("Auteur : "),I=y(E),T=q(),f=h("div"),t&&M(t.$$.fragment),this.h()},l(a){e=v(a,"ARTICLE",{});var n=g(e);i=v(n,"H1",{});var P=g(i);l=w(P,s),P.forEach(d),$=C(n),c=v(n,"DIV",{class:!0});var A=g(c);u=v(A,"P",{class:!0});var V=g(u);O=w(V,"Publié le : "),j=w(V,b),V.forEach(d),S=C(A),_=v(A,"P",{class:!0});var k=g(_);R=w(k,"Auteur : "),I=w(k,E),k.forEach(d),A.forEach(d),T=C(n),f=v(n,"DIV",{class:!0});var x=g(f);t&&X(t.$$.fragment,x),x.forEach(d),n.forEach(d),this.h()},h(){D(u,"class","inline font-bold"),D(_,"class","inline font-bold"),D(c,"class","pt-4 flex justify-between mb-12"),D(f,"class","px-12 content-center")},m(a,n){Y(a,e,n),r(e,i),r(i,l),r(e,$),r(e,c),r(c,u),r(u,O),r(u,j),r(c,S),r(c,_),r(_,R),r(_,I),r(e,T),r(e,f),t&&B(t,f,null),m=!0},p(a,[n]){if((!m||n&1)&&s!==(s=a[0].title+"")&&H(l,s),(!m||n&1)&&b!==(b=a[0].date+"")&&H(j,b),(!m||n&1)&&E!==(E=a[0].author+"")&&H(I,E),n&1&&p!==(p=a[0].content)){if(t){tt();const P=t;F(P.$$.fragment,1,0,()=>{J(P,1)}),Z()}p?(t=z(p,L()),M(t.$$.fragment),G(t.$$.fragment,1),B(t,f,null)):t=null}},i(a){m||(t&&G(t.$$.fragment,a),m=!0)},o(a){t&&F(t.$$.fragment,a),m=!1},d(a){a&&d(e),t&&J(t)}}}function nt(o,e,i){let{data:s}=e;return o.$$set=l=>{"data"in l&&i(0,s=l.data)},[s]}class ct extends U{constructor(e){super(),W(this,e,nt,at,Q,{data:0})}}export{ct as component,lt as universal}; +function __vite__mapDeps(indexes) { + if (!__vite__mapDeps.viteFileDeps) { + __vite__mapDeps.viteFileDeps = ["../chunks/ordinateur_crier.w4EusLTJ.js","../chunks/scheduler.aZRR5A_O.js","../chunks/index.AIcdAWo0.js"] + } + return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) +} \ No newline at end of file diff --git a/dist/_app/immutable/nodes/5.AXV32Mz_.js.br b/dist/_app/immutable/nodes/5.AXV32Mz_.js.br new file mode 100644 index 0000000..0fdb947 Binary files /dev/null and b/dist/_app/immutable/nodes/5.AXV32Mz_.js.br differ diff --git a/dist/_app/immutable/nodes/5.AXV32Mz_.js.gz b/dist/_app/immutable/nodes/5.AXV32Mz_.js.gz new file mode 100644 index 0000000..f9d2d14 Binary files /dev/null and b/dist/_app/immutable/nodes/5.AXV32Mz_.js.gz differ diff --git a/dist/_app/immutable/nodes/5.LhrW8NTK.js.br b/dist/_app/immutable/nodes/5.LhrW8NTK.js.br deleted file mode 100644 index 66f20d0..0000000 Binary files a/dist/_app/immutable/nodes/5.LhrW8NTK.js.br and /dev/null differ diff --git a/dist/_app/immutable/nodes/5.LhrW8NTK.js.gz b/dist/_app/immutable/nodes/5.LhrW8NTK.js.gz deleted file mode 100644 index b860403..0000000 Binary files a/dist/_app/immutable/nodes/5.LhrW8NTK.js.gz and /dev/null differ diff --git a/dist/_app/immutable/nodes/4.CPFN9ZRQ.js b/dist/_app/immutable/nodes/6.9JEuxLd_.js similarity index 96% rename from dist/_app/immutable/nodes/4.CPFN9ZRQ.js rename to dist/_app/immutable/nodes/6.9JEuxLd_.js index 6cf6cce..cfdaeea 100644 --- a/dist/_app/immutable/nodes/4.CPFN9ZRQ.js +++ b/dist/_app/immutable/nodes/6.9JEuxLd_.js @@ -1 +1 @@ -import{s as x,n as d}from"../chunks/scheduler.aZRR5A_O.js";import{S as L,i as b,s as f,g as u,A as P,f as s,c as p,h as m,x as h,k as T,a}from"../chunks/index.ciNBPAxl.js";import"../chunks/marked.esm.hS8hU7E4.js";function w(g){let n,i,v="Contact",r,l,C='Livecoding.fr n’est ni un collectif ni une organisation. L’objectif de ce site est uniquement de centraliser l’information et de donner plus de visibilité à la scène live coding francophone. Pour discuter et rencontre des live coders francophones, voici quelques liens :',c,t,_='

    • Cookie Collective (Discord) : Discord du collectif parisien Cookie Collective, rassemble beaucoup de live coders.
    • Creative Code Lyon (Discord) : Discord du groupe Creative Code Lyon pour l’est/sud-est de la France.
    • TOPLAP (Discord) : Collectif international TOPLAP, avec des sections francophones.
    • Mais aussi, contacter individuellement des artistes et performers.
    ';return{c(){n=f(),i=u("h1"),i.textContent=v,r=f(),l=u("p"),l.innerHTML=C,c=f(),t=u("div"),t.innerHTML=_,this.h()},l(e){P("svelte-1y6bndz",document.head).forEach(s),n=p(e),i=m(e,"H1",{"data-svelte-h":!0}),h(i)!=="svelte-tbczl2"&&(i.textContent=v),r=p(e),l=m(e,"P",{"data-svelte-h":!0}),h(l)!=="svelte-14pxfkf"&&(l.innerHTML=C),c=p(e),t=m(e,"DIV",{class:!0,"data-svelte-h":!0}),h(t)!=="svelte-kbttm2"&&(t.innerHTML=_),this.h()},h(){document.title="Contact",T(t,"class","pl-8")},m(e,o){a(e,n,o),a(e,i,o),a(e,r,o),a(e,l,o),a(e,c,o),a(e,t,o)},p:d,i:d,o:d,d(e){e&&(s(n),s(i),s(r),s(l),s(c),s(t))}}}class k extends L{constructor(n){super(),b(this,n,null,w,x,{})}}export{k as component}; +import{s as x,n as d}from"../chunks/scheduler.aZRR5A_O.js";import{S as L,i as b,s as f,g as u,A as P,f as s,c as p,h as m,x as h,k as T,a}from"../chunks/index.AIcdAWo0.js";import"../chunks/marked.esm.hS8hU7E4.js";function w(g){let n,i,v="Contact",r,l,C='Livecoding.fr n’est ni un collectif ni une organisation. L’objectif de ce site est uniquement de centraliser l’information et de donner plus de visibilité à la scène live coding francophone. Pour discuter et rencontre des live coders francophones, voici quelques liens :',c,t,_='
    • Cookie Collective (Discord) : Discord du collectif parisien Cookie Collective, rassemble beaucoup de live coders.
    • Creative Code Lyon (Discord) : Discord du groupe Creative Code Lyon pour l’est/sud-est de la France.
    • TOPLAP (Discord) : Collectif international TOPLAP, avec des sections francophones.
    • Mais aussi, contacter individuellement des artistes et performers.
    ';return{c(){n=f(),i=u("h1"),i.textContent=v,r=f(),l=u("p"),l.innerHTML=C,c=f(),t=u("div"),t.innerHTML=_,this.h()},l(e){P("svelte-1y6bndz",document.head).forEach(s),n=p(e),i=m(e,"H1",{"data-svelte-h":!0}),h(i)!=="svelte-tbczl2"&&(i.textContent=v),r=p(e),l=m(e,"P",{"data-svelte-h":!0}),h(l)!=="svelte-14pxfkf"&&(l.innerHTML=C),c=p(e),t=m(e,"DIV",{class:!0,"data-svelte-h":!0}),h(t)!=="svelte-kbttm2"&&(t.innerHTML=_),this.h()},h(){document.title="Contact",T(t,"class","pl-8")},m(e,o){a(e,n,o),a(e,i,o),a(e,r,o),a(e,l,o),a(e,c,o),a(e,t,o)},p:d,i:d,o:d,d(e){e&&(s(n),s(i),s(r),s(l),s(c),s(t))}}}class k extends L{constructor(n){super(),b(this,n,null,w,x,{})}}export{k as component}; diff --git a/dist/_app/immutable/nodes/6.9JEuxLd_.js.br b/dist/_app/immutable/nodes/6.9JEuxLd_.js.br new file mode 100644 index 0000000..0597861 Binary files /dev/null and b/dist/_app/immutable/nodes/6.9JEuxLd_.js.br differ diff --git a/dist/_app/immutable/nodes/6.9JEuxLd_.js.gz b/dist/_app/immutable/nodes/6.9JEuxLd_.js.gz new file mode 100644 index 0000000..6318a0c Binary files /dev/null and b/dist/_app/immutable/nodes/6.9JEuxLd_.js.gz differ diff --git a/dist/_app/immutable/nodes/6.uAKuUh7A.js.br b/dist/_app/immutable/nodes/6.uAKuUh7A.js.br deleted file mode 100644 index ff12d9c..0000000 Binary files a/dist/_app/immutable/nodes/6.uAKuUh7A.js.br and /dev/null differ diff --git a/dist/_app/immutable/nodes/6.uAKuUh7A.js.gz b/dist/_app/immutable/nodes/6.uAKuUh7A.js.gz deleted file mode 100644 index 2a088e3..0000000 Binary files a/dist/_app/immutable/nodes/6.uAKuUh7A.js.gz and /dev/null differ diff --git a/dist/_app/immutable/nodes/7.1t__7h1j.js b/dist/_app/immutable/nodes/7.1t__7h1j.js deleted file mode 100644 index b36c98e..0000000 --- a/dist/_app/immutable/nodes/7.1t__7h1j.js +++ /dev/null @@ -1,7 +0,0 @@ -import{_ as J}from"../chunks/preload-helper.0HuHagjb.js";import{s as K}from"../chunks/scheduler.aZRR5A_O.js";import{S as N,i as Q,q as x,g as v,m as P,s as R,r as z,h,j as g,n as w,f as d,c as V,u as W,k as q,a as X,y as r,v as U,o as C,t as B,b as Y,d as F,w as G,p as Z}from"../chunks/index.ciNBPAxl.js";const tt=(s,t)=>{const n=s[t];return n?typeof n=="function"?n():Promise.resolve(n):new Promise((i,l)=>{(typeof queueMicrotask=="function"?queueMicrotask:setTimeout)(l.bind(null,new Error("Unknown variable dynamic import: "+t)))})};async function et({params:s}){const t=await tt(Object.assign({"../proposer_guide.md":()=>J(()=>import("../chunks/proposer_guide.jq4D-DxX.js"),__vite__mapDeps([0,1,2]),import.meta.url)}),`../${s.slug}.md`),{title:n,date:i,author:l}=t.metadata,$=t.default;return{title:n,date:i,author:l,content:$}}const it=Object.freeze(Object.defineProperty({__proto__:null,load:et},Symbol.toStringTag,{value:"Module"}));function at(s){let t,n,i=s[0].title+"",l,$,c,u,A,b=s[0].date+"",j,D,f,O,y=s[0].author+"",k,S,_,e,m;var p=s[0].content;function H(a,o){return{}}return p&&(e=x(p,H())),{c(){t=v("article"),n=v("h1"),l=P(i),$=R(),c=v("div"),u=v("p"),A=P("Publié le : "),j=P(b),D=R(),f=v("p"),O=P("Auteur : "),k=P(y),S=R(),_=v("div"),e&&z(e.$$.fragment),this.h()},l(a){t=h(a,"ARTICLE",{});var o=g(t);n=h(o,"H1",{});var E=g(n);l=w(E,i),E.forEach(d),$=V(o),c=h(o,"DIV",{class:!0});var I=g(c);u=h(I,"P",{class:!0});var T=g(u);A=w(T,"Publié le : "),j=w(T,b),T.forEach(d),D=V(I),f=h(I,"P",{class:!0});var M=g(f);O=w(M,"Auteur : "),k=w(M,y),M.forEach(d),I.forEach(d),S=V(o),_=h(o,"DIV",{class:!0});var L=g(_);e&&W(e.$$.fragment,L),L.forEach(d),o.forEach(d),this.h()},h(){q(u,"class","inline font-bold"),q(f,"class","inline font-bold"),q(c,"class","pt-4 flex justify-between mb-12"),q(_,"class","px-12 content-center")},m(a,o){X(a,t,o),r(t,n),r(n,l),r(t,$),r(t,c),r(c,u),r(u,A),r(u,j),r(c,D),r(c,f),r(f,O),r(f,k),r(t,S),r(t,_),e&&U(e,_,null),m=!0},p(a,[o]){if((!m||o&1)&&i!==(i=a[0].title+"")&&C(l,i),(!m||o&1)&&b!==(b=a[0].date+"")&&C(j,b),(!m||o&1)&&y!==(y=a[0].author+"")&&C(k,y),o&1&&p!==(p=a[0].content)){if(e){Z();const E=e;B(E.$$.fragment,1,0,()=>{G(E,1)}),Y()}p?(e=x(p,H()),z(e.$$.fragment),F(e.$$.fragment,1),U(e,_,null)):e=null}},i(a){m||(e&&F(e.$$.fragment,a),m=!0)},o(a){e&&B(e.$$.fragment,a),m=!1},d(a){a&&d(t),e&&G(e)}}}function nt(s,t,n){let{data:i}=t;return s.$$set=l=>{"data"in l&&n(0,i=l.data)},[i]}class lt extends N{constructor(t){super(),Q(this,t,nt,at,K,{data:0})}}export{lt as component,it as universal}; -function __vite__mapDeps(indexes) { - if (!__vite__mapDeps.viteFileDeps) { - __vite__mapDeps.viteFileDeps = ["../chunks/proposer_guide.jq4D-DxX.js","../chunks/scheduler.aZRR5A_O.js","../chunks/index.ciNBPAxl.js"] - } - return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) -} \ No newline at end of file diff --git a/dist/_app/immutable/nodes/7.1t__7h1j.js.br b/dist/_app/immutable/nodes/7.1t__7h1j.js.br deleted file mode 100644 index 731d276..0000000 Binary files a/dist/_app/immutable/nodes/7.1t__7h1j.js.br and /dev/null differ diff --git a/dist/_app/immutable/nodes/7.1t__7h1j.js.gz b/dist/_app/immutable/nodes/7.1t__7h1j.js.gz deleted file mode 100644 index 4f5ab7d..0000000 Binary files a/dist/_app/immutable/nodes/7.1t__7h1j.js.gz and /dev/null differ diff --git a/dist/_app/immutable/nodes/5.LhrW8NTK.js b/dist/_app/immutable/nodes/7.jrp5SQtg.js similarity index 97% rename from dist/_app/immutable/nodes/5.LhrW8NTK.js rename to dist/_app/immutable/nodes/7.jrp5SQtg.js index b146f4c..b5c102c 100644 --- a/dist/_app/immutable/nodes/5.LhrW8NTK.js +++ b/dist/_app/immutable/nodes/7.jrp5SQtg.js @@ -1 +1 @@ -import{s as me,n as O,e as ge}from"../chunks/scheduler.aZRR5A_O.js";import{S as pe,i as _e,g as p,m as Z,s as w,h as _,j as D,n as M,f as c,c as C,k as m,a as v,y as f,o as se,r as Q,e as ae,A as be,x as J,u as U,v as W,d as S,b as re,t as L,w as X,B as ie,p as oe}from"../chunks/index.ciNBPAxl.js";import{e as K}from"../chunks/each.-oqiv04n.js";import{I as ke}from"../chunks/Info.NO-uVT9H.js";function xe(i){let l,n,s,g=i[3][1]+"",b,I,h,d,F=i[3][0]+"",x,G,V,k,T=i[3][2]+"",$,z,u,H,N,P,j,E,o,y,q;return{c(){l=p("div"),n=p("div"),s=p("div"),b=Z(g),I=w(),h=p("div"),d=p("span"),x=Z(F),G=w(),V=p("div"),k=p("span"),$=Z(T),z=w(),u=p("div"),H=p("h3"),N=Z(i[0]),P=w(),j=p("p"),E=Z(i[1]),o=w(),y=p("a"),q=Z("Lien"),this.h()},l(r){l=_(r,"DIV",{class:!0});var A=D(l);n=_(A,"DIV",{class:!0});var e=D(n);s=_(e,"DIV",{class:!0});var a=D(s);b=M(a,g),a.forEach(c),I=C(e),h=_(e,"DIV",{class:!0});var t=D(h);d=_(t,"SPAN",{class:!0});var B=D(d);x=M(B,F),B.forEach(c),t.forEach(c),G=C(e),V=_(e,"DIV",{class:!0});var Y=D(V);k=_(Y,"SPAN",{class:!0});var ee=D(k);$=M(ee,T),ee.forEach(c),Y.forEach(c),e.forEach(c),z=C(A),u=_(A,"DIV",{class:!0});var R=D(u);H=_(R,"H3",{class:!0});var te=D(H);N=M(te,i[0]),te.forEach(c),P=C(R),j=_(R,"P",{class:!0});var le=D(j);E=M(le,i[1]),le.forEach(c),o=C(R),y=_(R,"A",{class:!0,href:!0});var ne=D(y);q=M(ne,"Lien"),ne.forEach(c),R.forEach(c),A.forEach(c),this.h()},h(){m(s,"class","bg-red-800 text-white py-1"),m(d,"class","text-4xl font-bold"),m(h,"class","pt-1 border-l border-r"),m(k,"class","text-xs font-bold"),m(V,"class","pb-2 px-2 border-l border-r border-b rounded-b flex justify-between"),m(n,"class","w-42 block rounded-t overflow-hidden bg-white text-center min-w-max"),m(H,"class","pl-4 flex"),m(j,"class","pl-4"),m(y,"class","mt-4 ml-4 btn btn-primary btn btn-xs text-right"),m(y,"href",i[2]),m(u,"class","flex-col"),m(l,"class","flex flex-row")},m(r,A){v(r,l,A),f(l,n),f(n,s),f(s,b),f(n,I),f(n,h),f(h,d),f(d,x),f(n,G),f(n,V),f(V,k),f(k,$),f(l,z),f(l,u),f(u,H),f(H,N),f(u,P),f(u,j),f(j,E),f(u,o),f(u,y),f(y,q)},p(r,[A]){A&1&&se(N,r[0]),A&2&&se(E,r[1]),A&4&&m(y,"href",r[2])},i:O,o:O,d(r){r&&c(l)}}}function we(i,l,n){let{date:s}=l,{title:g}=l,{description:b}=l,{link:I=""}=l,h=s.split(" ");return i.$$set=d=>{"date"in d&&n(4,s=d.date),"title"in d&&n(0,g=d.title),"description"in d&&n(1,b=d.description),"link"in d&&n(2,I=d.link)},[g,b,I,h,s]}class ve extends pe{constructor(l){super(),_e(this,l,we,xe,me,{date:4,title:0,description:1,link:2})}}const Ce=[{date:"1 jan 2023",description:"Description de l'évènement",title:"Template pour un évènement",link:"https://google.fr"}],Ee=[{date:"4 oct 2023",description:"Grrrnd Zero - Vaulx en Velin",title:"Écoutes périphériques",link:"https://www.grrrndzero.org/index.php/2487-sam-dim-4-et-5-11-ecoutes-peripheriques-petit-multidifest-de-musiques"},{date:"28 oct 2023",description:"L'Aiguillage - Polisot",title:"Algorave (Cookie Collective)",link:"https://www.facebook.com/photo/?fbid=829027699024902&set=a.538927648034910"}],ce={avenir:Ce,passe:Ee};function fe(i,l,n){const s=i.slice();return s[2]=l[n].title,s[3]=l[n].description,s[4]=l[n].date,s[5]=l[n].link,s[7]=n,s}function de(i,l,n){const s=i.slice();return s[2]=l[n].title,s[3]=l[n].description,s[4]=l[n].date,s[5]=l[n].link,s[7]=n,s}function ue(i){let l,n;return l=new ve({props:{date:i[4],description:i[3],title:i[2],link:i[5]}}),{c(){Q(l.$$.fragment)},l(s){U(l.$$.fragment,s)},m(s,g){W(l,s,g),n=!0},p:O,i(s){n||(S(l.$$.fragment,s),n=!0)},o(s){L(l.$$.fragment,s),n=!1},d(s){X(l,s)}}}function he(i){let l,n;return l=new ve({props:{date:i[4],description:i[3],title:i[2],link:i[5]}}),{c(){Q(l.$$.fragment)},l(s){U(l.$$.fragment,s)},m(s,g){W(l,s,g),n=!0},p:O,i(s){n||(S(l.$$.fragment,s),n=!0)},o(s){L(l.$$.fragment,s),n=!1},d(s){X(l,s)}}}function Ae(i){let l,n,s="Évènements",g,b,I,h,d="Agenda (Cookie Collective)",F,x,G,V,k,T="À venir",$,z,u,H="Passés",N,P,j;b=new ke({props:{info:"Cette page recense tout les évènements dédiés au live coding organisés par la scène francophone. Ajoutez vos évènements. N'oubliez pas de fournir un lien si possible. Renseignez les évènements pour archivage !",markdown:"false"}});let E=K(i[1]),o=[];for(let e=0;eL(o[e],1,1,()=>{o[e]=null});let q=K(i[0]),r=[];for(let e=0;eL(r[e],1,1,()=>{r[e]=null});return{c(){l=w(),n=p("h1"),n.textContent=s,g=w(),Q(b.$$.fragment),I=w(),h=p("h2"),h.textContent=d,F=w(),x=p("iframe"),V=w(),k=p("h2"),k.textContent=T,$=w();for(let e=0;e{"date"in d&&n(4,s=d.date),"title"in d&&n(0,g=d.title),"description"in d&&n(1,b=d.description),"link"in d&&n(2,I=d.link)},[g,b,I,h,s]}class ve extends pe{constructor(l){super(),_e(this,l,we,xe,me,{date:4,title:0,description:1,link:2})}}const Ce=[{date:"1 jan 2023",description:"Description de l'évènement",title:"Template pour un évènement",link:"https://google.fr"}],Ee=[{date:"4 oct 2023",description:"Grrrnd Zero - Vaulx en Velin",title:"Écoutes périphériques",link:"https://www.grrrndzero.org/index.php/2487-sam-dim-4-et-5-11-ecoutes-peripheriques-petit-multidifest-de-musiques"},{date:"28 oct 2023",description:"L'Aiguillage - Polisot",title:"Algorave (Cookie Collective)",link:"https://www.facebook.com/photo/?fbid=829027699024902&set=a.538927648034910"}],ce={avenir:Ce,passe:Ee};function fe(i,l,n){const s=i.slice();return s[2]=l[n].title,s[3]=l[n].description,s[4]=l[n].date,s[5]=l[n].link,s[7]=n,s}function de(i,l,n){const s=i.slice();return s[2]=l[n].title,s[3]=l[n].description,s[4]=l[n].date,s[5]=l[n].link,s[7]=n,s}function ue(i){let l,n;return l=new ve({props:{date:i[4],description:i[3],title:i[2],link:i[5]}}),{c(){Q(l.$$.fragment)},l(s){U(l.$$.fragment,s)},m(s,g){W(l,s,g),n=!0},p:O,i(s){n||(S(l.$$.fragment,s),n=!0)},o(s){L(l.$$.fragment,s),n=!1},d(s){X(l,s)}}}function he(i){let l,n;return l=new ve({props:{date:i[4],description:i[3],title:i[2],link:i[5]}}),{c(){Q(l.$$.fragment)},l(s){U(l.$$.fragment,s)},m(s,g){W(l,s,g),n=!0},p:O,i(s){n||(S(l.$$.fragment,s),n=!0)},o(s){L(l.$$.fragment,s),n=!1},d(s){X(l,s)}}}function Ae(i){let l,n,s="Évènements",g,b,I,h,d="Agenda (Cookie Collective)",F,x,G,V,k,T="À venir",$,z,u,H="Passés",N,P,j;b=new ke({props:{info:"Cette page recense tout les évènements dédiés au live coding organisés par la scène francophone. Ajoutez vos évènements. N'oubliez pas de fournir un lien si possible. Renseignez les évènements pour archivage !",markdown:"false"}});let E=K(i[1]),o=[];for(let e=0;eL(o[e],1,1,()=>{o[e]=null});let q=K(i[0]),r=[];for(let e=0;eL(r[e],1,1,()=>{r[e]=null});return{c(){l=w(),n=p("h1"),n.textContent=s,g=w(),Q(b.$$.fragment),I=w(),h=p("h2"),h.textContent=d,F=w(),x=p("iframe"),V=w(),k=p("h2"),k.textContent=T,$=w();for(let e=0;e({guides:await(await n("/api/guides")).json()}),te=Object.freeze(Object.defineProperty({__proto__:null,load:R},Symbol.toStringTag,{value:"Module"}));function O(n,t,u){const l=n.slice();return l[1]=t[u],l}function q(n){let t,u,l,o=n[1].meta.title+"",v,p,k,i,m,_=n[1].meta.date+"",h,s,e=n[1].meta.author+"",r,a;return{c(){t=C("li"),u=C("h2"),l=C("a"),v=P(o),k=E(),i=C("p"),m=P("Publié le : "),h=P(_),s=P(" par "),r=P(e),a=E(),this.h()},l(c){t=$(c,"LI",{class:!0});var f=w(t);u=$(f,"H2",{});var H=w(u);l=$(H,"A",{href:!0});var I=w(l);v=y(I,o),I.forEach(d),H.forEach(d),k=j(f),i=$(f,"P",{class:!0});var x=w(i);m=y(x,"Publié le : "),h=y(x,_),s=y(x," par "),r=y(x,e),x.forEach(d),a=j(f),f.forEach(d),this.h()},h(){S(l,"href",p=n[1].path),S(i,"class","pt-2"),S(t,"class","px-4 pb-4 my-4 rounded-lg bg-base-300 dark:bg-base-300 hover:bg-base-200 hover:dark:bg-base-200 border-1 border-color-base-100")},m(c,f){b(c,t,f),g(t,u),g(u,l),g(l,v),g(t,k),g(t,i),g(i,m),g(i,h),g(i,s),g(i,r),g(t,a)},p(c,f){f&1&&o!==(o=c[1].meta.title+"")&&z(v,o),f&1&&p!==(p=c[1].path)&&S(l,"href",p),f&1&&_!==(_=c[1].meta.date+"")&&z(h,_),f&1&&e!==(e=c[1].meta.author+"")&&z(r,e)},d(c){c&&d(t)}}}function V(n){let t,u="Guides",l,o,v,p,k="Articles publiés",i,m,_;o=new Q({props:{info:"Cette page est un recensement de guides proposés par les membres de la communauté pour apprendre à live coder ou se perfectionner. L'idée est de proposer des articles plus ou moins courts consacrés à un outil ou à une approche particulière du live coding Pour proposer un guide, référez-vous à l'article Proposer un guide. Nous acceptons toutes les collaborations.",markdown:"false"}});let h=A(n[0].guides),s=[];for(let e=0;e{"data"in o&&u(0,l=o.data)},[l]}class ae extends G{constructor(t){super(),M(this,t,W,V,B,{data:0})}}export{ae as component,te as universal}; +import{s as B}from"../chunks/scheduler.aZRR5A_O.js";import{S as G,i as M,g as C,s as E,r as N,h as $,x as L,c as j,u as T,j as w,f as d,a as b,v as U,d as D,t as F,w as J,B as K,m as P,n as y,k as S,y as g,o as z}from"../chunks/index.AIcdAWo0.js";import{e as A}from"../chunks/each.-oqiv04n.js";import{I as Q}from"../chunks/Info.bs_Ss2Q-.js";const R=async({fetch:n})=>({guides:await(await n("/api/guides")).json()}),te=Object.freeze(Object.defineProperty({__proto__:null,load:R},Symbol.toStringTag,{value:"Module"}));function O(n,t,u){const l=n.slice();return l[1]=t[u],l}function q(n){let t,u,l,o=n[1].meta.title+"",v,p,k,i,m,_=n[1].meta.date+"",h,s,e=n[1].meta.author+"",r,a;return{c(){t=C("li"),u=C("h2"),l=C("a"),v=P(o),k=E(),i=C("p"),m=P("Publié le : "),h=P(_),s=P(" par "),r=P(e),a=E(),this.h()},l(c){t=$(c,"LI",{class:!0});var f=w(t);u=$(f,"H2",{});var H=w(u);l=$(H,"A",{href:!0});var I=w(l);v=y(I,o),I.forEach(d),H.forEach(d),k=j(f),i=$(f,"P",{class:!0});var x=w(i);m=y(x,"Publié le : "),h=y(x,_),s=y(x," par "),r=y(x,e),x.forEach(d),a=j(f),f.forEach(d),this.h()},h(){S(l,"href",p=n[1].path),S(i,"class","pt-2"),S(t,"class","px-4 pb-4 my-4 rounded-lg bg-base-300 dark:bg-base-300 hover:bg-base-200 hover:dark:bg-base-200 border-1 border-color-base-100")},m(c,f){b(c,t,f),g(t,u),g(u,l),g(l,v),g(t,k),g(t,i),g(i,m),g(i,h),g(i,s),g(i,r),g(t,a)},p(c,f){f&1&&o!==(o=c[1].meta.title+"")&&z(v,o),f&1&&p!==(p=c[1].path)&&S(l,"href",p),f&1&&_!==(_=c[1].meta.date+"")&&z(h,_),f&1&&e!==(e=c[1].meta.author+"")&&z(r,e)},d(c){c&&d(t)}}}function V(n){let t,u="Guides",l,o,v,p,k="Articles publiés",i,m,_;o=new Q({props:{info:"Cette page est un recensement de guides proposés par les membres de la communauté pour apprendre à live coder ou se perfectionner. L'idée est de proposer des articles plus ou moins courts consacrés à un outil ou à une approche particulière du live coding Pour proposer un guide, référez-vous à l'article Proposer un guide. Nous acceptons toutes les collaborations.",markdown:"false"}});let h=A(n[0].guides),s=[];for(let e=0;e{"data"in o&&u(0,l=o.data)},[l]}class ae extends G{constructor(t){super(),M(this,t,W,V,B,{data:0})}}export{ae as component,te as universal}; diff --git a/dist/_app/immutable/nodes/8.id8kTULq.js.br b/dist/_app/immutable/nodes/8.id8kTULq.js.br new file mode 100644 index 0000000..5b61bdd Binary files /dev/null and b/dist/_app/immutable/nodes/8.id8kTULq.js.br differ diff --git a/dist/_app/immutable/nodes/8.id8kTULq.js.gz b/dist/_app/immutable/nodes/8.id8kTULq.js.gz new file mode 100644 index 0000000..91e4eb9 Binary files /dev/null and b/dist/_app/immutable/nodes/8.id8kTULq.js.gz differ diff --git a/dist/_app/immutable/nodes/9.RIT4c5a5.js.br b/dist/_app/immutable/nodes/9.RIT4c5a5.js.br deleted file mode 100644 index 4c72ebc..0000000 Binary files a/dist/_app/immutable/nodes/9.RIT4c5a5.js.br and /dev/null differ diff --git a/dist/_app/immutable/nodes/9.RIT4c5a5.js.gz b/dist/_app/immutable/nodes/9.RIT4c5a5.js.gz deleted file mode 100644 index cbadfc1..0000000 Binary files a/dist/_app/immutable/nodes/9.RIT4c5a5.js.gz and /dev/null differ diff --git a/dist/_app/immutable/nodes/9.ceqUHxWv.js b/dist/_app/immutable/nodes/9.ceqUHxWv.js new file mode 100644 index 0000000..c95d4b2 --- /dev/null +++ b/dist/_app/immutable/nodes/9.ceqUHxWv.js @@ -0,0 +1,7 @@ +import{_ as j}from"../chunks/preload-helper.0HuHagjb.js";import{_ as N}from"../chunks/dynamic-import-helper.0gtGTknh.js";import{s as Q}from"../chunks/scheduler.aZRR5A_O.js";import{S as U,i as W,q as M,g as v,m as I,s as q,r as B,h,j as g,n as y,f,c as x,u as X,k as w,a as Y,y as o,v as F,o as C,t as G,b as Z,d as J,w as K,p as tt}from"../chunks/index.AIcdAWo0.js";async function et({params:i}){const e=await N(Object.assign({"../ajouter_information.md":()=>j(()=>import("../chunks/ajouter_information._ytOF6l3.js"),__vite__mapDeps([0,1,2,3]),import.meta.url),"../livecoding_supercollider.md":()=>j(()=>import("../chunks/livecoding_supercollider.sLrjm2WB.js"),__vite__mapDeps([4,1,2,3,5,6]),import.meta.url),"../livecoding_supercollider_2.md":()=>j(()=>import("../chunks/livecoding_supercollider_2.8rv2dy6_.js"),__vite__mapDeps([7,1,2,3,5,6]),import.meta.url),"../proposer_guide.md":()=>j(()=>import("../chunks/proposer_guide.X_s8Xpr2.js"),__vite__mapDeps([8,1,2,3]),import.meta.url)}),`../${i.slug}.md`),{title:s,date:n,author:l}=e.metadata,E=e.default;return{title:s,date:n,author:l,content:E}}const lt=Object.freeze(Object.defineProperty({__proto__:null,load:et},Symbol.toStringTag,{value:"Module"}));function at(i){let e,s,n=i[0].title+"",l,E,_,c,R,$=i[0].date+"",A,T,u,V,b=i[0].author+"",D,L,m,t,d;var p=i[0].content;function H(a,r){return{}}return p&&(t=M(p,H())),{c(){e=v("article"),s=v("h1"),l=I(n),E=q(),_=v("div"),c=v("p"),R=I("Publié le : "),A=I($),T=q(),u=v("p"),V=I("Auteur : "),D=I(b),L=q(),m=v("div"),t&&B(t.$$.fragment),this.h()},l(a){e=h(a,"ARTICLE",{});var r=g(e);s=h(r,"H1",{});var P=g(s);l=y(P,n),P.forEach(f),E=x(r),_=h(r,"DIV",{class:!0});var O=g(_);c=h(O,"P",{class:!0});var S=g(c);R=y(S,"Publié le : "),A=y(S,$),S.forEach(f),T=x(O),u=h(O,"P",{class:!0});var k=g(u);V=y(k,"Auteur : "),D=y(k,b),k.forEach(f),O.forEach(f),L=x(r),m=h(r,"DIV",{class:!0});var z=g(m);t&&X(t.$$.fragment,z),z.forEach(f),r.forEach(f),this.h()},h(){w(c,"class","inline font-bold"),w(u,"class","inline font-bold"),w(_,"class","pt-4 flex justify-between mb-12"),w(m,"class","lg:px-24 md:px-12 content-center")},m(a,r){Y(a,e,r),o(e,s),o(s,l),o(e,E),o(e,_),o(_,c),o(c,R),o(c,A),o(_,T),o(_,u),o(u,V),o(u,D),o(e,L),o(e,m),t&&F(t,m,null),d=!0},p(a,[r]){if((!d||r&1)&&n!==(n=a[0].title+"")&&C(l,n),(!d||r&1)&&$!==($=a[0].date+"")&&C(A,$),(!d||r&1)&&b!==(b=a[0].author+"")&&C(D,b),r&1&&p!==(p=a[0].content)){if(t){tt();const P=t;G(P.$$.fragment,1,0,()=>{K(P,1)}),Z()}p?(t=M(p,H()),B(t.$$.fragment),J(t.$$.fragment,1),F(t,m,null)):t=null}},i(a){d||(t&&J(t.$$.fragment,a),d=!0)},o(a){t&&G(t.$$.fragment,a),d=!1},d(a){a&&f(e),t&&K(t)}}}function rt(i,e,s){let{data:n}=e;return i.$$set=l=>{"data"in l&&s(0,n=l.data)},[n]}class _t extends U{constructor(e){super(),W(this,e,rt,at,Q,{data:0})}}export{_t as component,lt as universal}; +function __vite__mapDeps(indexes) { + if (!__vite__mapDeps.viteFileDeps) { + __vite__mapDeps.viteFileDeps = ["../chunks/ajouter_information._ytOF6l3.js","../chunks/scheduler.aZRR5A_O.js","../chunks/index.AIcdAWo0.js","../chunks/guides.RN6emr9S.js","../chunks/livecoding_supercollider.sLrjm2WB.js","../chunks/Info.bs_Ss2Q-.js","../chunks/marked.esm.hS8hU7E4.js","../chunks/livecoding_supercollider_2.8rv2dy6_.js","../chunks/proposer_guide.X_s8Xpr2.js"] + } + return indexes.map((i) => __vite__mapDeps.viteFileDeps[i]) +} \ No newline at end of file diff --git a/dist/_app/immutable/nodes/9.ceqUHxWv.js.br b/dist/_app/immutable/nodes/9.ceqUHxWv.js.br new file mode 100644 index 0000000..c84d5fb Binary files /dev/null and b/dist/_app/immutable/nodes/9.ceqUHxWv.js.br differ diff --git a/dist/_app/immutable/nodes/9.ceqUHxWv.js.gz b/dist/_app/immutable/nodes/9.ceqUHxWv.js.gz new file mode 100644 index 0000000..b61f065 Binary files /dev/null and b/dist/_app/immutable/nodes/9.ceqUHxWv.js.gz differ diff --git a/dist/_app/version.json b/dist/_app/version.json index 663b823..ee93483 100644 --- a/dist/_app/version.json +++ b/dist/_app/version.json @@ -1 +1 @@ -{"version":"1703349664352"} \ No newline at end of file +{"version":"1704284324812"} \ No newline at end of file diff --git a/dist/_app/version.json.br b/dist/_app/version.json.br index cbeed81..f212acb 100644 Binary files a/dist/_app/version.json.br and b/dist/_app/version.json.br differ diff --git a/dist/_app/version.json.gz b/dist/_app/version.json.gz index 3a577bb..fff6b29 100644 Binary files a/dist/_app/version.json.gz and b/dist/_app/version.json.gz differ diff --git a/dist/accueil.html b/dist/accueil.html index c2bb907..bd3fcd6 100644 --- a/dist/accueil.html +++ b/dist/accueil.html @@ -6,23 +6,23 @@ - - + + - + - - - - + + + + Accueil -

    Qu’est-ce que le live-coding ?

    Le live coding est une pratique artistique qui fait de l'acte de programmation un geste expressif et performatif. Les live coders considèrent l'interface de programmation comme un instrument de musique. Le live coding est un art au croisement entre synthèse sonore, improvisation musicale et musique algorithmique générative.

    Le live coding est au croisement de plusieurs arts et encourage des approches transdisciplinaires de la création : musique, arts visuels, informatique, jeux vidéos, danse, etc. Plus largement, le live coding est un domaine critique qui encourage les artistes à repenser leur rapport à l'informatique. Le live coding est traversé par la culture hacker, par la philosophie du logiciel libre et open source. Il souhaite également développer une nouvelle forme d'expressivité au sein des arts, en considérant l'ordinateur comme une interface pour la programmation exploratoire ou programmation conversationnelle.

    Historiquement, le live coding est un type de création porté par le collectif TOPLAP. Il existe de nombreux groupes en Europe et dans le monde qui sont issus de ce collectif : TOPLAP Barcelona, Livecode NYC, parmi d’autres. La pratique du live coding s’est popularisée au travers du Manifeste TOPLAP et des Algoraves (algorithmic rave parties). Il s’agit pourtant de l’arbre qui cache la forêt : le live coding est une pratique qui existe depuis la fin des années 1980, et que l’on retrouve un peu partout dans les arts numériques.

    À propos de ce site

    Ce site est une collection de ressources. Il est conçu pour combler un vide. La communauté francophone du live coding ne possédait pas de site permettant aux artistes et musiciens français de se trouver et d’échanger facilement. Disposer d’un site dédié permet de rompre avec la nécessité de se tenir informé sans cesse sur les réseaux sociaux sous peine de manquer une information. Ce site est conçu et maintenu par Raphaël Forment (BuboBubo).

    L’information sur chacune des pages est randomisée pour favoriser la découverte.

    Comment contribuer ?

    Le site est hébergé sur GitHub. Pour ajouter une information au site, veuillez créer une Pull Request. Vous pouvez aussi contacter l’un des membres qui se chargera de transmettre l’information.

    +

    Qu’est-ce que le live-coding ?

    Le live coding est une pratique artistique qui fait de l'acte de programmation un geste expressif et performatif. Les live coders considèrent l'interface de programmation comme un instrument de musique. Le live coding est un art au croisement entre synthèse sonore, improvisation musicale et musique algorithmique générative.

    Le live coding est au croisement de plusieurs arts et encourage des approches transdisciplinaires de la création : musique, arts visuels, informatique, jeux vidéos, danse, etc. Plus largement, le live coding est un domaine critique qui encourage les artistes à repenser leur rapport à l'informatique. Le live coding est traversé par la culture hacker, par la philosophie du logiciel libre et open source. Il souhaite également développer une nouvelle forme d'expressivité au sein des arts, en considérant l'ordinateur comme une interface pour la programmation exploratoire ou programmation conversationnelle.

    Historiquement, le live coding est un type de création porté par le collectif TOPLAP. Il existe de nombreux groupes en Europe et dans le monde qui sont issus de ce collectif : TOPLAP Barcelona, Livecode NYC, parmi d’autres. La pratique du live coding s’est popularisée au travers du Manifeste TOPLAP et des Algoraves (algorithmic rave parties). Il s’agit pourtant de l’arbre qui cache la forêt : le live coding est une pratique qui existe depuis la fin des années 1980, et que l’on retrouve un peu partout dans les arts numériques.

    À propos de ce site

    Ce site est une collection de ressources. Il est conçu pour combler un vide. La communauté francophone du live coding ne possédait pas de site permettant aux artistes et musiciens français de se trouver et d’échanger facilement. Disposer d’un site dédié permet de rompre avec la nécessité de se tenir informé sans cesse sur les réseaux sociaux sous peine de manquer une information. Ce site est conçu et maintenu par Raphaël Forment (BuboBubo).

    L’information sur chacune des pages est randomisée pour favoriser la découverte.

    Comment contribuer ?

    Le site est hébergé sur GitHub. Pour ajouter une information au site, veuillez créer une Pull Request. Vous pouvez aussi contacter l’un des membres qui se chargera de transmettre l’information.

    + +
    + + diff --git a/dist/articles.html.br b/dist/articles.html.br new file mode 100644 index 0000000..b49bd40 Binary files /dev/null and b/dist/articles.html.br differ diff --git a/dist/articles.html.gz b/dist/articles.html.gz new file mode 100644 index 0000000..86fb265 Binary files /dev/null and b/dist/articles.html.gz differ diff --git a/dist/articles/ordinateur_crier.html b/dist/articles/ordinateur_crier.html new file mode 100644 index 0000000..5ff3452 --- /dev/null +++ b/dist/articles/ordinateur_crier.html @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + +

    Les ordinateurs peuvent-t-ils crier ?

    Publié le : 2023-12-23

    Auteur : Raphaël Forment et Rémi Georges

    À propos


    Cet article était initialement publié dans la revue Bugne Bugne, une “Revue lyonnaise dédiée aux musiques électroniques et aux enjeux politiques et sociaux de la fête, indépendante et non-lucrative ✊”. L’objectif de cet article était de présenter le live coding à un large public et de parler des concerts que nous organisons à Lyon. Je reprends ici l’intégralité du texte et je rajoute des liens supplémentaires pour enrichir la chose :)


    J’ai pris la liberté de rajouter tout un tas de liens divers qui apportent +souvent un contrepoint décalé au texte.

    Introduction

    Quelques personnes en Europe et dans le monde pratiquent le live coding. Nous sommes quelques centaines ou quelques milliers. Live coder, cela consiste à improviser de la musique directement au travers de langages de programmation, sur scène, devant tout le monde, avec les bugs, les crashs, etc. que cela implique. Tout au long de la performance, les live coders éditent du code et le soumettent à l’ordinateur. Ils découvrent le résultat en même temps que le public et sont pareillement surpris ou inquiets de ce qu’ils entendent.


    Live coder, cela veut tout et rien dire et personne ne semble souhaiter définir le terme précisément. On peut programmer et modifier des synthétiseurs en temps réel, créer des séquences musicales, des visuels, etc. On peut allumer des ampoules en rythme ou broder un pull sur scène, la seule limite restant le crash et la capacité technique de faire ce que l’on veut. Le live coding peut mobiliser toutes les ressources de l’ordinateur, pour le meilleur comme pour le pire. Certains aiment programmer de la musique, d’autres aiment programmer des visuels. Faites cela de manière conjointe, et vous obtenez une Algorave, une algorithmic rave party. L’idée derrière ce terme était, à l’origine, de faire de la musique de club au travers du code, de faire danser les gens sur des algorithmes. Ca ne ressemble pas du tout à de la musique de club, mais cela reste dansant quand même. C’est une musique à part, avec ses propres sonorités et ses gestes musicaux particuliers.


    Live coder, cela ne signifie pas nécessairement programmer quelque chose pour arriver à une fin. Il n’y a pas de patron pour surveiller que vous terminiez votre programme dans les temps. Live coder, c’est surtout programmer sans but, errer dans un système musical et chercher ce qui sonne bien, ce qui sonne mal, et aussi pas mal chercher ce que l’on veut réellement faire. C’est un peu du jazz d’ordinateur. C’est une conversation à la fois avec votre ordinateur et avec votre propre capacité ou incapacité à vous exprimer musicalement au travers du code.

    Renouer avec l’ordinateur

    Il y a longtemps que les gens font ça, mais originellement, tout le monde s’en fichait. Il y a quelques décennies, il était normal d’utiliser des langages de programmation pour créer de la musique. C’était souvent la seule interface dont on disposait pour dialoguer avec la machine, pour composer, pour contrôler des synthétiseurs, des échantillonneurs, des machines, etc. L’apparition des interfaces graphiques a aussi introduit le fait de cliquer partout, puis les fenêtres, puis tout un tas d’idées et de concepts dont on n’avait pas vraiment besoin pour faire de la musique. En bref, les interfaces graphiques ont rompu quelque chose d’important dans la manière dont on approche l’interaction avec l’ordinateur.


    Les ordinateurs sont faits pour manger du texte, des nombres, des instructions. Ils sont ridiculement petits, puissants et versatiles. Ce sont des calculatrices qui calculent vite. Ils sont partout et sont d’ailleurs faits pour être emportés partout. On passe déjà notre vie avec. Le seul problème est que l’on ne les utilise pas comme des ordinateurs. On ne les utilise pas non plus, d’ailleurs, comme des instruments de musique et les musiciens passent généralement beaucoup de temps et consacrent beaucoup d’énergie à éviter de se confronter à la vrai nature de l’ordinateur.


    Parlons un petit peu des métaphores. Ouvrez n’importe quel logiciel de production musicale (Ableton, Fruity Loops, Pro Tools). Regardez un peu ce que l’on vous montre à l’écran. Les logiciels pour créer de la musique sont remplis de métaphores étranges que personne n’a jamais réellement souhaité. On édite des mélodies MIDI sur des piano rolls comme si l’on manipulait un piano mécanique avec des rouleaux. On montre un studio d’enregistrement avec des tranches de console et des potentiomètres alors qu’on a juste un clavier et une souris. Les synthétiseurs virtuels ont des boutons et des potentiomètres qu’on ne peut pas pousser. Vous ne pouvez cliquer que sur un bouton à la fois, et les contrôleurs sont pénibles à utiliser. Les synthétiseurs virtuels ont des lumières tristes qui ne brillent même pas et ils peuvent planter tout comme Word ou Excel. Il y a quelque chose qui coince. Il fallait initialement vendre ces logiciels aux musiciens et on leur a vendu ce qu’ils connaissent le mieux. C’est tout pareil que votre bureau avec ses dossiers, ses fichiers, etc. Votre bureau n’existe pas, et les dossiers ne sont pas des dossiers en carton jaune moche que vous rangez dans une armoire. +Les platines sont devenues des instruments lorsque les musiciens ont commencé à s’intéresser à leurs qualités musicales. De même, l’ordinateur peut devenir un instrument de musique si l’on s’intéresse à ses qualités intrinsèques : l’idée n’est pas d’éviter ce qu’il est vraiment, mais de chercher ses qualités dans le domaine musical.


    I'm the operator with my pocket calculator I am adding, and subtracting... I'm controlling, and composing! By pressing down a special key, It plays a little melody.

    Pourtant, il est toujours possible de programmer sa musique. On peut même faire la même chose qu’avant, mais en beaucoup mieux, on peut faire la même chose que nos ancêtres, mais en temps réel. On peut tout programmer si on essaie vraiment. C’est super amusant mais c’est aussi devenu bizarre. Plus personne ne fait ça, à tel point que programmer son ordinateur en direct est devenu un parti pris. Programmer est devenu un geste expressif, tout comme peut l’être le fait de danser, de crier ou de faire un solo de guitare. C’est aussi parfois devenu un geste politique ou un acte militant. Depuis le début des années 2000, les live coders ont plus ou moins tous décidé de montrer ce qu’ils font à leur public (collectif TOPLAP, etc.) car ils estiment que c’est important. Ils font leurs concerts dans le noir et projettent leurs écrans pour que le public puisse lire le code et voir le curseur d’édition bouger :


    Give us access to the performer's mind, to the whole human instrument. Obscurantism is dangerous. Show us your screens.

    Pourquoi live coder ?

    Rémi : “Je cherchais au départ des manières de composer des rythmes complexes. J’ai sombré. J’ai découvert une nouvelle façon de faire et de contrôler la musique et c’était sans doute la manière de faire que j’avais toujours cherchée sans la trouver. Je suis plus proche des sphères de la musique DIY, et le live coding c’est un peu le DIY du numérique. En plus de bidouller l’électronique de mes synthés et j’ai commencé à pouvoir tout fabriquer, tout programmer. J’ai pu d’une certaine manière “augmenter” ou contrôler différemment tout mon matériel et j’y garde toujours ce plaisir du crash et de l’erreur. J’aime le fait que mon programme soit bancal, et qu’il puisse s’arrêter ou se comporter différemment du but premier. Je vais tout faire pour que tout se passe bien mais je ne peux jamais en être certain. J’ai jamais réussi à faire de la musique avec des logiciels faits pour cela, ça a toujours été sans saveur, incompréhensible, super compliqué à démarrer.


    Maintenant je crois pas que se soit foncièrement plus simple à démarrer mais au moins je ne peux m’en prendre qu’à moi-même. Je viens du milieu de la technique du son, le live coding m’a aussi appris la programmation, il m’a ouvert la porte de la programmation appliquée à l’audio, et c’est maintenant ce dans quoi j’essaie de travailler.”


    Raphaël : “J’ai appris à programmer en m’intéressant au live coding. J’étais déjà assez pote avec les ordinateurs car mes amis et moi nous amusions à modder des jeux ou à créer des choses intéressantes à l’ordinateur. Je cherchais initialement une manière d’écrire de la musique qui ne soit ni partition graphique, ni partition classique. Je tape super vite sur un clavier et j’aime beaucoup manipuler du texte. Il semblait assez clair que cette pratique était faite pour moi. J’ai appris à faire de la musique avec du code avant de savoir réellement programmer. J’ai commencé ensuite à modifier les outils pour les adapter à ma pratique puis à concevoir les miens. C’est aussi fascinant que nul. On apprend beaucoup, on crée son propre instrument, mais on arrive souvent à un résultat que l’on n’avait pas anticipé ! Je m’intéressais déjà beaucoup à toutes les musiques basées sur des systèmes de règles ou sur des processus génératifs. J’aime beaucoup John Cage, non pas pour sa musique, mais pour les idées qu’il a pu transmettre à tous les musiciens qui l’ont écouté. Aujourd’hui, je live code car j’étudie ces musiques là dans un cadre universitaire mais j’y trouve également du plaisir. Cela ne se ressemble jamais, cela donne perpétuellement l’envie de recommencer. C’est le propre d’un instrument de musique, et je suis content d’avoir fait de mon ordinateur un instrument de musique.”

    Le live-coding en France

    Le 8 avril 2023, nous avons organisé une gigantesque algorave au Grrrnd Zero à Lyon. 19 projets différents venant de toute la France et parfois même de l’étranger (Italie, Pays-Bas, Etats-Unis) ont joué de la musique ou fait des visuels de 18h à 8h du matin. C’est sans doute la plus grosse algorave de la très longue histoire de France. Même si les gens se reconnaissent comme live coders, il n’est pas dit qu’ils se comprennent. On sait qu’on fait la même chose, mais pas nécessairement la même musique. On ne programme pas tous de la même manière, pas avec les mêmes outils ou le même langage, pas pour le même but, etc mais c’est déjà pas mal de savoir qu’on n’est pas tous seuls à avoir une lubie. Organiser des événements de live coding permet de faire vivre cette pratique et de se rendre compte sa diversité. C’est une sorte de grande foire. En France, cela est d’autant plus sensible que la plupart des live coders ont un lien avec la demoscene ou avec des cultures informatiques underground qui n’ont jamais vraiment disparues.


    Aujourd’hui on s’est un peu lancés comme mission de rassembler toute la communauté française ou du moins de se faire savoir qu’on existe entre nous. On essaie d’organiser des workshops, car le live coding est une pratique toujours plus simple à démarrer avec quelqu’un plutôt qu’en écumant des forums. +Nous sommes aussi allés représenter cette communauté francophone du live-coding à l’International Conférence on Live-Coding à Utrecht en avril 2023. Ça nous a permis de comparer cette scène à l’échelle mondiale et de pouvoir rencontrer en personne tous ces développeurs-artistes d’un petit milieu où tout le monde se connaît un peu.


    Si on cherche bien, il y a des live coders partout. Il suffit de les débusquer, souvent dans les écoles d’art, dans les écoles d’ingé ou vraiment un peu partout là où on ne pense jamais à regarder. Bizarrement, on trouve assez peu de live coding dans les conservatoires ou dans les écoles de musique. Tous les live coders ne savent pas nécessairement qu’ils live codent. Parfois, ce n’est juste pas important pour eux, ou cela leur paraît naturel. Les live coders naviguent entre milieux DIY, réseaux hackers / makers, milieu des arts numériques, etc. Considérer que le live coding est une forme d’art en soi est un réflexe assez anglais, lié à la manière dont la pratique a été popularisée dans les années 2000. En France, le live coding est souvent considéré comme un outil. Ailleurs c’est considéré comme une fin en soi, ce qui n’est pas plus mal !

    + + +
    + + diff --git a/dist/articles/ordinateur_crier.html.br b/dist/articles/ordinateur_crier.html.br new file mode 100644 index 0000000..928de74 Binary files /dev/null and b/dist/articles/ordinateur_crier.html.br differ diff --git a/dist/articles/ordinateur_crier.html.gz b/dist/articles/ordinateur_crier.html.gz new file mode 100644 index 0000000..5b01cc3 Binary files /dev/null and b/dist/articles/ordinateur_crier.html.gz differ diff --git a/dist/cold_dark.css b/dist/cold_dark.css new file mode 100644 index 0000000..39dd470 --- /dev/null +++ b/dist/cold_dark.css @@ -0,0 +1,317 @@ +/** + * Coldark Theme for Prism.js + * Theme variation: Dark + * Tested with HTML, CSS, JS, JSON, PHP, YAML, Bash script + * @author Armand Philippot + * @homepage https://github.com/ArmandPhilippot/coldark-prism + * @license MIT + */ +code[class*="language-"], +pre[class*="language-"] { + color: #e3eaf2; + background: none; + font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + background: #3c526d; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + background: #3c526d; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0.5em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #111b27; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0.1em 0.3em; + border-radius: 0.3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #8da1b9; +} + +.token.punctuation { + color: #e3eaf2; +} + +.token.delimiter.important, +.token.selector .parent, +.token.tag, +.token.tag .token.punctuation { + color: #66cccc; +} + +.token.attr-name, +.token.boolean, +.token.boolean.important, +.token.number, +.token.constant, +.token.selector .token.attribute { + color: #e6d37a; +} + +.token.class-name, +.token.key, +.token.parameter, +.token.property, +.token.property-access, +.token.variable { + color: #6cb8e6; +} + +.token.attr-value, +.token.inserted, +.token.color, +.token.selector .token.value, +.token.string, +.token.string .token.url-link { + color: #91d076; +} + +.token.builtin, +.token.keyword-array, +.token.package, +.token.regex { + color: #f4adf4; +} + +.token.function, +.token.selector .token.class, +.token.selector .token.id { + color: #c699e3; +} + +.token.atrule .token.rule, +.token.combinator, +.token.keyword, +.token.operator, +.token.pseudo-class, +.token.pseudo-element, +.token.selector, +.token.unit { + color: #e9ae7e; +} + +.token.deleted, +.token.important { + color: #cd6660; +} + +.token.keyword-this, +.token.this { + color: #6cb8e6; +} + +.token.important, +.token.keyword-this, +.token.this, +.token.bold { + font-weight: bold; +} + +.token.delimiter.important { + font-weight: inherit; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.language-markdown .token.title, +.language-markdown .token.title .token.punctuation { + color: #6cb8e6; + font-weight: bold; +} + +.language-markdown .token.blockquote.punctuation { + color: #f4adf4; +} + +.language-markdown .token.code { + color: #66cccc; +} + +.language-markdown .token.hr.punctuation { + color: #6cb8e6; +} + +.language-markdown .token.url .token.content { + color: #91d076; +} + +.language-markdown .token.url-link { + color: #e6d37a; +} + +.language-markdown .token.list.punctuation { + color: #f4adf4; +} + +.language-markdown .token.table-header { + color: #e3eaf2; +} + +.language-json .token.operator { + color: #e3eaf2; +} + +.language-scss .token.variable { + color: #66cccc; +} + +/* overrides color-values for the Show Invisibles plugin + * https://prismjs.com/plugins/show-invisibles/ + */ +.token.token.tab:not(:empty):before, +.token.token.cr:before, +.token.token.lf:before, +.token.token.space:before { + color: #8da1b9; +} + +/* overrides color-values for the Toolbar plugin + * https://prismjs.com/plugins/toolbar/ + */ +div.code-toolbar > .toolbar.toolbar > .toolbar-item > a, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > button { + color: #111b27; + background: #6cb8e6; +} + +div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus { + color: #111b27; + background: #6cb8e6da; + text-decoration: none; +} + +div.code-toolbar > .toolbar.toolbar > .toolbar-item > span, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus { + color: #111b27; + background: #8da1b9; +} + +/* overrides color-values for the Line Highlight plugin + * http://prismjs.com/plugins/line-highlight/ + */ +.line-highlight.line-highlight { + background: #3c526d5f; + background: linear-gradient(to right, #3c526d5f 70%, #3c526d55); +} + +.line-highlight.line-highlight:before, +.line-highlight.line-highlight[data-end]:after { + background-color: #8da1b9; + color: #111b27; + box-shadow: 0 1px #3c526d; +} + +pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before { + background-color: #8da1b918; +} + +/* overrides color-values for the Line Numbers plugin + * http://prismjs.com/plugins/line-numbers/ + */ +.line-numbers.line-numbers .line-numbers-rows { + border-right: 1px solid #0b121b; + background: #0b121b7a; +} + +.line-numbers .line-numbers-rows > span:before { + color: #8da1b9da; +} + +/* overrides color-values for the Match Braces plugin + * https://prismjs.com/plugins/match-braces/ + */ +.rainbow-braces .token.token.punctuation.brace-level-1, +.rainbow-braces .token.token.punctuation.brace-level-5, +.rainbow-braces .token.token.punctuation.brace-level-9 { + color: #e6d37a; +} + +.rainbow-braces .token.token.punctuation.brace-level-2, +.rainbow-braces .token.token.punctuation.brace-level-6, +.rainbow-braces .token.token.punctuation.brace-level-10 { + color: #f4adf4; +} + +.rainbow-braces .token.token.punctuation.brace-level-3, +.rainbow-braces .token.token.punctuation.brace-level-7, +.rainbow-braces .token.token.punctuation.brace-level-11 { + color: #6cb8e6; +} + +.rainbow-braces .token.token.punctuation.brace-level-4, +.rainbow-braces .token.token.punctuation.brace-level-8, +.rainbow-braces .token.token.punctuation.brace-level-12 { + color: #c699e3; +} + +/* overrides color-values for the Diff Highlight plugin + * https://prismjs.com/plugins/diff-highlight/ + */ +pre.diff-highlight > code .token.token.deleted:not(.prefix), +pre > code.diff-highlight .token.token.deleted:not(.prefix) { + background-color: #cd66601f; +} + +pre.diff-highlight > code .token.token.inserted:not(.prefix), +pre > code.diff-highlight .token.token.inserted:not(.prefix) { + background-color: #91d0761f; +} + +/* overrides color-values for the Command Line plugin + * https://prismjs.com/plugins/command-line/ + */ +.command-line .command-line-prompt { + border-right: 1px solid #0b121b; +} + +.command-line .command-line-prompt > span:before { + color: #8da1b9da; +} diff --git a/dist/cold_dark.css.br b/dist/cold_dark.css.br new file mode 100644 index 0000000..7dcac2c Binary files /dev/null and b/dist/cold_dark.css.br differ diff --git a/dist/cold_dark.css.gz b/dist/cold_dark.css.gz new file mode 100644 index 0000000..7b366ad Binary files /dev/null and b/dist/cold_dark.css.gz differ diff --git a/dist/contacts.html b/dist/contacts.html index e991fc1..b41a901 100644 --- a/dist/contacts.html +++ b/dist/contacts.html @@ -6,22 +6,22 @@ - - + + - + - - - + + + Contact -

    Contact

    Livecoding.fr n’est ni un collectif ni une organisation. L’objectif de ce site est uniquement de centraliser l’information et de donner plus de visibilité à la scène live coding francophone. Pour discuter et rencontre des live coders francophones, voici quelques liens :

    • Cookie Collective (Discord) : Discord du collectif parisien Cookie Collective, rassemble beaucoup de live coders.
    • Creative Code Lyon (Discord) : Discord du groupe Creative Code Lyon pour l’est/sud-est de la France.
    • TOPLAP (Discord) : Collectif international TOPLAP, avec des sections francophones.
    • Mais aussi, contacter individuellement des artistes et performers.
    +

    Contact

    Livecoding.fr n’est ni un collectif ni une organisation. L’objectif de ce site est uniquement de centraliser l’information et de donner plus de visibilité à la scène live coding francophone. Pour discuter et rencontre des live coders francophones, voici quelques liens :

    • Cookie Collective (Discord) : Discord du collectif parisien Cookie Collective, rassemble beaucoup de live coders.
    • Creative Code Lyon (Discord) : Discord du groupe Creative Code Lyon pour l’est/sud-est de la France.
    • TOPLAP (Discord) : Collectif international TOPLAP, avec des sections francophones.
    • Mais aussi, contacter individuellement des artistes et performers.
    +

    Guides

    Cette page est un recensement de guides proposés par les membres de la communauté pour apprendre à live coder ou se perfectionner. L'idée est de proposer des articles plus ou moins courts consacrés à un outil ou à une approche particulière du live coding Pour proposer un guide, référez-vous à l'article Proposer un guide. Nous acceptons toutes les collaborations.

    Articles publiés

    + +
    + + diff --git a/dist/guides/ajouter_information.html.br b/dist/guides/ajouter_information.html.br new file mode 100644 index 0000000..5f661c1 Binary files /dev/null and b/dist/guides/ajouter_information.html.br differ diff --git a/dist/guides/ajouter_information.html.gz b/dist/guides/ajouter_information.html.gz new file mode 100644 index 0000000..439457e Binary files /dev/null and b/dist/guides/ajouter_information.html.gz differ diff --git a/dist/guides/livecoding_supercollider.html b/dist/guides/livecoding_supercollider.html new file mode 100644 index 0000000..a442f79 --- /dev/null +++ b/dist/guides/livecoding_supercollider.html @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + +

    Introduction au live coding sur SuperCollider (I)

    Publié le : 2023-12-24

    Auteur : Raphaël Maurice Forment

    Introduction

    Après avoir travaillé longtemps sur Sardine et Topos, je me suis posé la question de savoir si j’étais encore capable de live coder sur SuperCollider. J’ai donc décidé de ramasser tout ce que je sais pour constituer un environnement de live coding minimal et efficace. Ce document est le résultat de cette expérience. Il existe aussi un petit Quark qui va un peu plus loin que ce guide, mais que je ne documente pas encore. J’avais une certaine jalousie latente vis à vis des artistes qui utilisent SuperCollider sans recourir à aucune extension ou surcouche logicielle qui facilite la tâche. Le langage et l’environnement de SuperCollider est monstrueux (de complexité, de détails, etc). Il offre toutefois un avantage intéressant : SuperCollider est très versatile. Au sein d’un seul langage / interface, il est possible de passer d’une section du code lié aux patterns musicaux à une autre partie du code directement liée à la synthèse et à l’écriture de traitements sonores. On peut aussi s’en servir pour écrire des utilitaires divers et des interfaces graphiques si besoin. SuperCollider est aussi un environnement relativement minimal et économe pour la production et le travail du son, développé depuis plus de vingt ans. Cela garantit de pouvoir le faire tourner sur toutes les machines sans aucun problème.


    SuperCollider a joué un rôle crucial dans le développement du live coding au cours de ces 20 dernières années (dès la parution de SuperCollider 2). Il est toujours utilisé par l’immense majorité des artistes et performers sous une forme directe ou indirecte (au travers de Tidal, FoxDot ou Sonic Pi). Bien que ces derniers soient aujourd’hui populaires, il est également intéressant de voir que l’on peut réaliser peu ou prou la même chose tout en éliminant toute une catégorie de problèmes liés à l’installation, au déploiement ou à la personnalisation de ces interfaces.


    Ce guide est une approche personnelle de SuperCollider. Je ne +suis pas particulièrement expert sur le sujet et j'accueille volontiers toutes +les suggestions pour améliorer cette série d'articles.

    SuperCollider Logo


    Mise en place

    La mise en place est relativement simple. Nous aurons uniquement besoin de l’environnement de base et de la librairie JITLib, livrée par défaut avec SuperCollider. Nous augmenterons progressivement SuperCollider avec des plugins (Quarks) mais cela ne requiert pas d’installation directe et peut même se révéler facultatif.


    1) Téléchargez et installez SuperCollider depuis le site officiel.

    2) Optionnel : téléchargez sc3-plugins, une collection officielle d’objets supplémentaires.


    Il est important de bien comprendre comment est structuré SuperCollider. Il s’agit d’un environnement composé de plusieurs briques logicielles interconnectées (ou non) :

    • SCLang : un langage de programmation inspiré de la famille C ou +SmallTalk
    • SCSynth / SCServer : un serveur chargé de l’exécution audio
    • SCIDE : l’éditeur par défaut, qui lie ces deux premiers composants

    SCIDE est utile, mais si vous préférez utiliser un autre éditeur, il est +possible de lier VSCode, Emacs ou Neovim. SCLang et SCSynth sont les deux composants les plus importants, l’un servant au contrôle de l’autre. L’architecture de SuperCollider est toujours axée sur la différence entre un client (le langage) et le serveur (qui exécute l’audio).


    Commandes de base

    Lorsque vous ouvrez SCIDE, vous vous trouvez face à un document texte vierge. C’est dans cette zone que vous devez programmer et écrire votre code. SuperCollider est un langage interprété. Cela signifie que vous allez graduellement soumettre du code à évaluation et recevoir le résultat des commandes éxecutées. Cela peut parfois poser problème aux débutants qui ne sont pas habitués à cette manière de concevoir la programmation :

    • l’évaluation d’un fichier ne s’effectue pas toujours de manière linéaire. On +peut évaluer du code bloc par bloc ou modifier un bloc à la volée. +SuperCollider identifie un bloc à l’aide des parenthèses ().
    • il est possible d’évaluer un fichier de manière linéaire si besoin. Il existe +des commandes spécifiques pour ce faire (par ex. "blabla/mon_fichier.scd".loadRelative).
    • la librairie standard (classes, extensions) est lue / interprétée de manière +linéaire au démarrage de l’interpréteur. Vous ne pourrez pas démarrer +l’interpréteur si une erreur est identifiée dans cette partie du code : Library has not been compiled successfully.

    Selon votre éditeur, les commandes pour évaluer du code ligne par ligne ou bloc par bloc peuvent varier (Shift + Enter, Control + Enter, etc). Vous pourrez trouvez les commandes dans le menu Language de SCIDE. Pour vérifier que tout fonctionne, évaluez la ligne suivante (note : les commentaires sont précédés des caractères // et ne sont pas évalués) :

    s.boot // Démarrage du serveur

    Attendez quelques secondes pour vérifier que tout se passe correctement puis +tuez le serveur :

    Server.killAll // Tuer le serveur

    SuperCollider permet de prendre l’habitude de ne pas considérer le code +comme un texte linéaire mais comme une interface, ce qui est une caractéristique +commune des outils de live coding. C’est aussi une constante des +environnements pour la programmation musicale (Max/MSP, Pure Data) qui +éliminent / gomment la distinction entre travail sur le programme et exécution +du programme.


    Ce guide ne vous apprendra pas les rudiments du langage. Il existe de très +nombreux guides qui font cela très bien. Notez la parution récente d’un nouvel +ouvrage : SuperCollider for the Creative Musician par Eli Fieldsteel, également auteur d’une série de vidéos que je recommande.


    Prérequis


    Dès maintenant, je pars du principe que vous êtes à l’aise avec l’environnement SuperCollider et que vous avez au moins quelques rudiments de son utilisation. Il n’est pas nécessaire d’en connaître beaucoup mais au moins de savoir évaluer du code, naviguer dans les fichiers d’aide et de maîtriser quelques raccourcis clavier. Le reste viendra naturellement en pratiquant. Voici quelques suggestions pour découvrir SuperCollider et son utilisation :

    • se familiariser avec chaque élément de l’interface (s.scope, +s.freqscope, s.gui)
    • se familiariser avec la documentation intégrée, lire les guides disponibles
    • apprendre comment contrôler le serveur (s, Server.default) et l’interpréteur
      • démarrer et arrêter le serveur
      • recompiler la librairie / redémarrer l’interpréteur
    • apprendre la syntaxe de base d’une SynthDef (définition de synthèse)
    • apprendre à jouer avec la librairie des patterns (Pbind, Pseq, etc)

    Paramétrage du serveur


    Nous allons maintenant commencer à travailler sur un fichier de lancement +réutilisable pour SuperCollider. Créez un fichier nommé startup.scd ou +tout autre nom qui vous permettra de l’identifier facilement.


    Choisir une interface audio


    Pour connaître le nom des périphériques audio disponibles :

    ServerOptions.devices;    // Tout ce qui est disponible
    +ServerOptions.inDevices;  // Les entrées uniquement
    +ServerOptions.outDevices; // Les sorties uniquement

    Il est possible de spécifier une entrée et une sortie différente :

    Server.default.options.inDevice_("Built-in Microph");
    +Server.default.options.outDevice_("Built-in Output");

    On peut aussi utiliser le même device pour l’entrée et la sortie :

    s.options.device = "BlackHole 16ch"; // Choix de l'interface
    +Server.default.options.device_("BlackHole 16ch"); // Alternative

    Pour appliquer les modifications, il sera nécessaire de redémarrer le serveur. +Veillez à ce que votre entrée et votre sortie audio soient à la même fréquence +d’échantillonnage (sampling rate). Si ce n’est pas le cas, le serveur refusera +de démarrer, ce qui est une erreur très courante. Paramétrez votre fréquence +sur 44100hz ou 48000hz.


    Note : si vous avez pour habitude d’utiliser des écouteurs ou haut-parleurs +Bluetooth, les OS modernes ont tendance à changer automatiquement la +fréquence d’échantillonnage à la connexion/déconnexion. Il en va de même des +micros et carte sons externes.


    Router le son de SuperCollider vers un autre logiciel


    Il est tout à fait possible d’utiliser SuperCollider comme source principale et de router ensuite le son vers un autre logiciel pour le traitement. Cela vous permettra d’enregistrer plus facilement en multipiste, de disposer d’effets ou de synthétiseurs supplémentaires, etc. Vous pourrez aussi contrôler une partie de votre dispositif en MIDI ou OSC directement depuis SuperCollider. Pour pouvoir router librement les signaux sortants de SuperCollider, il est préférable d’utiliser une interface virtuelle comme BlackHole (cross-platform), Loopback (MacOS, payant), Jack (cross-platform) ou VB-Audio VoiceMeeter (Windows, payant). Ces logiciels permettent de créer des bus audio virtuels qui peuvent être utilisés comme entrée ou sortie par SuperCollider aussi bien que par n’importe quel autre logiciel. L’utilisation de bus audios virtuels offre une grande flexibilité et je recommande de prendre l’habitude de les utiliser.


    1) Choisir comme entrée/sortie une interface virtuelle (BlackHole, Loopback, +etc).

    2) Choisir comme entrée dans le logiciel de traitement le bus virtuel que vous +venez de créer.

    3) Traiter / enregistrer le son canal par canal dans votre logiciel.


    Routage de SuperCollider dans Reaper


    Protéger ses oreilles


    SuperCollider vous permet de manipuler le son sans aucune restriction. C’est très utile mais c’est aussi assez dangereux non seulement +pour vous mais aussi pour votre public si vous vous produisez sur scène : +larsens, clipping, explosion du volume, etc. Heureusement, ce problème est +connu et il existe des moyens efficaces de se protéger. Nous allons utiliser le +système de plugins interne pour installer un Quark très utile. Avec la +commande suivante, installez BatLib:

    Quarks.install("https://github.com/supercollider-quarks/BatLib")

    Recompilez ensuite la librairie et vous pourrez utiliser le +StageLimiter. Il vous sauvera sans doute la vie de nombreuses fois. Vous +verrez comment on le démarre dans le récapitulatif plus bas. TLDR, la commande +est :

    StageLimiter.activate;

    Si vous routez le son de SuperCollider vers une autre application, n’hésitez +pas à installer des protections similaires dans cette application (limiter, +etc).


    Choisir un dossier de stockage


    Plutôt que de tout stocker dans le dossier par défaut, je préfère utiliser un +dossier qui contient tout ce dont j’ai besoin pour travailler : configuration, +définitions de synthèse, échantillons sonores. Cela permet de n’avoir qu’une +seule route à retenir si le système est relativement unifié. J’ai choisi de tout +stocker dans .config/livecoding/, ce qui est une route assez prévisible pour +tout ceux qui sont habitués à utiliser le terminal sur MacOS / Linux. +Voici à quoi ressemble mon dossier :

    .
    +├── Configuration.scd
    +├── README.md
    +├── Synthdefs.scd
    +└── samples
    Ce graphe est généré avec la commande tree -L 1

    Toute la configuration sera chargée à partir de la route +/Users/bubo/.config/livecoding. Il vous faudra changer ce chemin pour que cela +cole avec le dossier que vous aurez choisi. Pareillement, vous n’êtes pas +obligés de suivre cette étape qui repose uniquement sur une préférence +personnelle.


    Chargement automatique des échantillons


    Plutôt que de charger les échantillons sonores au cas par cas, en précisant chaque chemin individuellement, je préfère automatiquement charger une grande bibliothèque d’échantillons. Par défaut, il n’existe aucun mécanisme permettant de gérer cela. Beaucoup de musiciens ont toutefois trouvé des solutions élégantes et assez minimales. Je me suis fié à la technique utilisé par Scott Carver. Il utilise une série d’extensions conçues spécialement par ses soins.


    Pour installer les Quarks, on utilise une nouvelle fois la commande Quarks.install :

    Quarks.install("https://github.com/scztt/Require.quark");
    +Quarks.install("https://github.com/scztt/Singleton.quark");

    Une fois que cela est fait, il nous reste à installer la pièce finale, SAMP, qui est mentionnée dans un topic de discussion du forum SuperCollider. Il vous faudra créer ce fichier dans le dossier Extensions. Vous pouvez y accéder dans votre dossier de configuration SuperCollider (dépend de l’OS). Pour obtenir le chemin vers ce dossier, évaluez le code suivant dans SuperCollider :

    Platform.userExtensionDir

    Créez ensuite SAMP.sc dans le dossier Extensions et collez le code du +lien précédemment ouvert. C’est tout ce dont vous avez besoin. Fermez tout et +recompilez la librairie une nouvelle fois. Nous détaillerons ultérieurement l’utilisation de SAMP pour gérer vos échantillons. Sachez que vous y avez maintenant accès !


    Note : SAMP permet de réaliser un lazy loading des échantillons. Il s’agit d’une technique qui permet de ne pas surcharger d’entrée de jeu la RAM de votre ordinateur en mettant en cache trop d’échantillons. L’utilisation des ressources sera progressive, les échantillons étant chargés uniquement lorsque l’utilisateur les requiert.


    Récapitulatif


    Voici le code complet que j’utilise pour le démarrage et la configuration d’un serveur audio minimal pour le live coding :

    (
    +  s.options.numBuffers = 1024 * 128;   // Nombre de buffers disponibles pour stocker des samples
    +  s.options.memSize = 8192 * 64;       // Mémoire disponible pour le serveur
    +	s.options.numWireBufs = 2048;        // Augmenter ce nombre si "exceeded number of interconnect buffers"
    +	s.options.maxNodes = 1024 * 32;      // Changer cette valeur si le son saute avec le message "too many nodes"
    +	s.options.device = "BlackHole 16ch"; // Choix de l'interface audio à utiliser
    +	s.options.numOutputBusChannels = 2;  // Indiquer le nombre de sorties de son interface audio
    +	s.options.numInputBusChannels = 2;   // Indiquer le nombre d'entrées de son interface audio
    +  p=ProxySpace.push(s.boot);           // Démarrage du serveur dans un ProxySpace (JITLIB)
    +  p.makeTempoClock;                    // Gestion du tempo
    +  p.clock.tempo = 120/60;
    +  SAMP.root = "/Users/bubo/.config/livecoding/samples/"; // Chemin vers les samples
    +  SAMP.lazyLoading = true; // Chargement paresseux (permet de ne pas remplir la mémoire pour rien)
    +  s.waitForBoot({
    +    "/Users/bubo/.config/livecoding/Synthdefs.scd".load; // Chargement des synthétiseurs
    +    StageLimiter.activate;                               // StageLimiter pour les oreilles
    +    "== 💻 LIVE CODING PRÊT 💻 == ".postln;
    +  });
    +)

    Sauvegardez cet extrait de code dans un fichier .scd situé dans votre dossier de stockage. Vous pourrez ensuite l’évaluer à chaque fois que vous voudrez démarrer à l’aide de la commande suivante qu’il vous faudra évaluer dans l’interpréteur :

    "/Users/bubo/.config/livecoding/Configuration.scd".load;

    Si vous souhaitez démarrer SuperCollider avec cette configuration par défaut, vous pouvez également tirer parti du fichier de démarrage, qui s’exécute automatiquement à l’ouverture de SCIDe. Ce dernier se situe dans votre dossier de configuration SuperCollider. Vous pouvez le trouver en évaluant le code suivant :

    Platform.userAppSupportDir

    Il devrait exister un fichier startup.scd que vous pouvez remplir avec la +configuration ci-dessus, en adaptant les chemins.

    Conclusion

    Cette configuration sera amenée à évoluer et pourra même faire l’objet d’une +refonte complète lorsque vous serez amenés à pré-charger d’autres composants : +synthétiseurs, effets pré-déclarés, etc. Nous y reviendrons.

    + + +
    + + diff --git a/dist/guides/livecoding_supercollider.html.br b/dist/guides/livecoding_supercollider.html.br new file mode 100644 index 0000000..5b6372b Binary files /dev/null and b/dist/guides/livecoding_supercollider.html.br differ diff --git a/dist/guides/livecoding_supercollider.html.gz b/dist/guides/livecoding_supercollider.html.gz new file mode 100644 index 0000000..ced5118 Binary files /dev/null and b/dist/guides/livecoding_supercollider.html.gz differ diff --git a/dist/guides/livecoding_supercollider_2.html b/dist/guides/livecoding_supercollider_2.html new file mode 100644 index 0000000..485d5bd --- /dev/null +++ b/dist/guides/livecoding_supercollider_2.html @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + +

    Introduction au live coding sur SuperCollider (II)

    Publié le : 2023-24-12

    Auteur : Raphaël Maurice Forment

    Introduction

    Le labyrinthe SuperCollider


    Si vous avez lu et suivi le premier article, tout est en place et vous devriez +maintenant être prêt à jouer. L’une des qualités mais aussi l’un des défauts de SuperCollider est de ne +pas vous astreindre à suivre une route particulière concernant la manière dont il vous faut approcher la création sonore lorsque vous débutez. Le logiciel est extrêmement générique et chaque +utilisateur développe progressivement ses propres abstractions et une logique qui lui est propre. Il existe plusieurs dizaines de mécanismes +distincts et la documentation tentaculaire du logiciel recommande souvent des +approches contradictoires ou des solutions qui ne fonctionneront pas +nécessairement avec votre méthode de travail. Il est donc nécessaire d’être toujours +conscient des choix que vous avez opéré et ne pas hésiter à revenir en +arrière si ces derniers ne vous conviennent pas. SuperCollider est un logiciel +déjà ancien, et la librairie standard est si vaste qu’il est difficile de la comprendre entièrement et encore moins de la maîtriser. Il +est toutefois possible de développer une certaine expertise pour utiliser SuperCollider d’une certaine manière et de construire progressivement ses connaissances en fonction des projets.


    JITLib et le live coding


    L’approche que nous suivons dans ce guide repose sur la librairie JITLib. Cette librairie développée par Julian Rohrhuber est devenue si populaire qu’elle est désormais intégrée par défaut à SuperCollider lors de l’installation. Les avantages offerts par cette dernière ne sont pas évidents à saisir lorsqu’on débute sur SuperCollider. Un grand nombre d’utilisateurs l’ignorent complètement dans leur travail. La raison qui nous pousse à l’utiliser est que cette dernière est prévue, par défaut, pour permettre le live coding. Même dans ce domaine déjà très spécifique, JITLib reste encore relativement générique. Le mécanisme que la librairie implémente est très simple : JITLib permet de remplacer à chaud, en temps réel, n’importe quelle donnée (audio, information) par une information de nature similaire. Voici la traduction du premier paragraphe de la documentation :


    La programmation just in time (ou la programmation conversationnelle, le live coding, la programmation à la volée, la programmation interactive) est un paradigme qui inclut l’activité de programmation dans le déroulement du programme. Dans ce paradigme, le programme n’est pas considéré comme un outil qui est conçu avant d’être utilisé plus tard de manière productive. Plutôt, il s’agit de concevoir la conception dynamique des programmes comme une description et comme une conversation. Écrire du code devient une partie intégrante de l’expérience musicale ou de la pratique expérimentale.


    JITLib intègre ce principe à SuperCollider de manière assez approfondie. On se retrouve rarement bloqué du fait d’une incompatibilité entre la librairie standard et JITLib. Par ailleurs, JITLib est si finement intégré qu’il est parfois délicat de savoir si telle ou telle fonctionnalité relève de cette librairie ou vient de l’installation standard de SuperCollider.


    Conseils de lecture


    Cette partie du guide est de loin la plus pénible. Elle introduit tout les concepts importants que nous manipulerons pour faire de la musique avec SuperCollider. Il s’agit en quelque sorte du solfège élémentaire pour un live coder utilisant SuperCollider. Je suis conscient que les premiers paragraphes sont particulièrement difficiles pour un utilisateur débutant. N’hésitez pas à continuer votre lecture si un détail vous échappe, vous finirez sans doute par comprendre ultérieurement par la pratique. Ne vous laissez pas arrêter par du vocabulaire ou des concepts peu familiers.

    ProxySpace et Ndefs

    Le principe de base de la librairie


    Tout commence avec un peu de vocabulaire. JITLib introduit la notion de ProxySpace, un environnement de références vers des proxys : ”an environment of references on a server”. Une référence est un nom associé à un objet. C’est aussi simple que ~a = 2 ou ~a est un proxy et 2 un objet. Ce système fonctionne à l’aide de proxys, il nous faut donc comprendre ce qu’est un proxy. C’est une notion relativement simple, il s’agit d’un objet qui contient quelque chose.


    Proxy: un proxy est un contenant pour quelque chose qui tourne sur le serveur, généralement un contrôle ou un algorithme audio. C’est un objet vide ou non-vide. Un proxy peut contenir le node d’un oscillateur (cf. la suite) mais il pourrait aussi contenir un filtre audio, un synthétiseur que nous venons de créer ou même un pattern algorithmique. Le proxy englobe ce qu’il contient et réalise à notre place tout un tas d’opérations qu’il est d’ordinaire nécessaire de gérer manuellement. Par exemple, on peut remplacer le contenu d’un proxy par un autre node sans interruption du signal, supprimer le contenant d’un proxy sans pour autant supprimer la boîte elle-même.


    Un ProxySpace est un ensemble de clés et de valeurs, un grand sac dans lequel on manipule des proxy. Les clés sont des références vers des NodeProxy. Tout ceci est sans aucune importance tant que nous ne le manipulons pas pour générer du son.


    Remplacer l’environnement par défaut par un ProxySpace


    Dans le guide précédent se trouvait une ligne assez inhabituelle, celle qui nous servait pour démarrer le serveur :

    p = ProxySpace.push(s.boot);

    Sans entrer dans le détail, cette ligne réalise deux actions distinctes :


    1) elle démarre le serveur audio de SuperCollider (s.boot)

    2) elle pousse l’environnement par défaut dans un ProxySpace


    Avec la méthode push, toutes les variables globales de l’environnement actuel deviennent mécaniquement des NodeProxy dans le ProxySpace. Pour s’en convaincre, il suffit de taper le nom d’une variable et d’observer la valeur de retour :


    ~bob; // -> NodeProxy.nil(localhost, nil)

    Ce n’est pas très parlant si vous n’êtes oas habitués à SuperCollider ou à la programmation. Essayons maintenant de voir ce que cela signifie lorsque nous souhaitons manipuler du son, sans spécifiquement aborder tout les détails. Évaluez le code suivant ligne par ligne :

    ~osc = {SinOsc.ar(200) * 0.5}; // J'évalue, rien ne se passe. Associe une fonction audio à un NodeProxy
    +~osc.play;                     // On connecte l'audio à la sortie et on joue la fonction
    +~osc = {SinOsc.ar(400) * 0.5}; // On remplace la fonction précédente par une autre (sans interruption !)
    +~osc.stop(fadeTime: 4);        // On stoppe avec un joli fade-out
    +~osc.clear;                    // On libère la mémoire

    Nous avons associé une fonction audio ({SinOsc.ar(200) * 0.5}) à une référence (~osc). C’est tout le principe de JITLib. Cette association peut être remplacée à tout moment sans interruption grâce au proxy. Le NodeProxy nommé ~osc accepte un grand nombre de manipulations différentes et son rôle est totalement redéfini par rapport au comportement habituel d’une variable en dehors de l’utilisation de JITLib.


    Ce n’est plus une variable, c’est un Proxy dans notre ProxySpace. La ligne ~osc.stop(fadeTime: 4) démontre aussi que les NodeProxy intègrent de nombreuses méthodes destinées à gérer l’audio: fade in, fade out, contrôle du niveau des sources : etc.


    Nous allons utiliser ce principe fondamental introduit par JITLib tout au long de ce guide pour contrôler tout ce que nous souhaitons / pouvons contrôler : algorithmes audio, patterns algorithmiques, effets sonores, etc. Il est essentiel de retenir ce principe du proxy car il nous permet de savoir réellement ce que nous sommes en train de manipuler à tout moment au cours du jeu : essentiellement des NodeProxy.


    Sans en savoir beaucoup plus, il est déjà possible de faire un petit peu de musique en s’amusant à remplacer une source par un autre :

    ~osc = {SinOsc.ar([200, 100]) * 0.5}; // On associe une source à un NodeProxy, un double oscillateur
    +~osc.play(fadeTime: 4);               // On lance le NodeProxy avec un fade-in
    +~osc.fadeTime = 4;                    // On change le fadeTime général
    +
    +~osc = {LPF.ar(SinOsc.ar([400, 100]), SinOsc.ar(1/4).range(200,2000)) * 0.5}; // On remplace la source
    +~osc = {LPF.ar(SinOsc.ar([800, 350]), SinOsc.ar(1/4).range(200,2000)) * 0.5}; // On remplace la source
    +~osc = {LPF.ar(SinOsc.ar([200, 150]), SinOsc.ar(1/4).range(200,2000)) * 0.5}; // On remplace la source
    +
    +~osc.stop(fadeTime: 4);               // Fade-out
    +~osc.clear;                           // On libère la mémoire

    Même si tout reste assez primitif pour le moment, on peut déjà faire beaucoup de choses en suivant ce principe. Il est possible d’utiliser n’importe quel algorithme audio et de le mettre à jour graduellement tout au long d’une performance. Ce type de live coding centré autour de la musique à jour d’un générateur sonore se prête plutôt bien à de la musique électro-acoustique, ambient, noise, etc.


    Les Ndefs : une autre manière de faire la même chose


    La technique que nous utilisons avec ProxySpace.push(s.boot) dissimule l’utilisation que nous faisons des NodeProxy. Cette fonctionnalité a été intégrée car elle permet de gagner du temps de frappe mais elle a pour désavantage de rendre plus difficilement perceptible ce que nous sommes réellement en train de faire. À première vue, il semble que ~a = 2 soit juste une assignation de variable comme dans un langage de programmation classique. Pourtant, il s’agit d’une opération qui crée/modifie un NodeProxy.


    Nous occultons le fait que les variables globales de SuperCollider sont maintenant des NodeProxy. Il est possible de se passer entièrement de Proxyspace.push et de cet avantage/désagrément en utilisant les Ndefs. Il s’agit d’une préférence personnelle, presque d’ordre stylistique.


    Pour être plus précis, ProxySpace.push(...) transforme le scope global en un ProxySpace. Seule les variables de a à z sont épargnées.

    Le terme de NDef est un raccourci pour Node Proxy Definition. On retrouve du vocabulaire familier. C’est une autre manière de désigner exactement le même type d’objet que ce que nous manipulons depuis le début ! Seule la syntaxe diffère. Profitons-en quand même pour évoquer rapidement ce qu’est un node :


    Node: un node est un objet défini en interne par le serveur audio de SuperCollider. Un synthétiseur est un node, beaucoup d’objets présents sur le serveur sont des nodes. Il s’agit d’un objet générique utilisé pour une opération audio : contrôle ou synthétiseur. C’est un objet abstrait, qu’on ne manipule jamais directement. Les fonctions audio que nous venons d’utiliser dans l’exemple précédent sont des nodes que l’on associe à un proxy. Un node tire ce nom du fait que ce sont des noeuds dans un graphe audio, des objets qui ont une position dans un graphe de traitement du signal.


    Les Ndefs ont pour avantage de ne pas se propager dans l’environnement local. Elles rendent tout un petit peu plus clair. Réécrivons l’exemple précédent en utilisant uniquement des Ndefs :

    Ndef(osc, {SinOsc.ar([200, 100]) * 0.5});  // On associe une source à un NodeProxy, un double oscillateur
    +Ndef(osc).play(fadeTime: 4);               // On lance le NodeProxy avec un fade-in
    +Ndef(osc).fadeTime = 4;                    // On change le fadeTime général
    +
    +Ndef(osc, {LPF.ar(SinOsc.ar([400, 100]), SinOsc.ar(1/4).range(200,2000)) * 0.5}); // On remplace la source
    +Ndef(osc, {LPF.ar(SinOsc.ar([800, 350]), SinOsc.ar(1/4).range(200,2000)) * 0.5}); // On remplace la source
    +Ndef(osc, {LPF.ar(SinOsc.ar([200, 150]), SinOsc.ar(1/4).range(200,2000)) * 0.5}); // On remplace la source
    +
    +Ndef(osc).stop(fadeTime: 4);               // Fade-out
    +Ndef(osc).clear;                           // On libère la mémoire

    C’est à vous de choisir quelle est la syntaxe que vous préférez.

    Gestion des NodeProxy

    fadeTime

    Nous avons déjà utilisé la capacité des NodeProxy à opérer des fade-ins et des fade-outs. C’est une fonctionnalité très pratique, surtout lorsque vous manipulez des sources audio dynamiques et que vous souhaitez faire des transitions souples de l’une à l’autre. Il existe trois types de fade :

    • fade-in à l’entrée : c’est un argument de la méthode .play : ~osc.play(fadeTime: 4) ou Ndef(\osc).play(fadeTime: 4)
    • fade-in en sortie : c’est un argument de la méthode .stop ou .clear : ~osc.stop(fadeTime: 4) ou Ndef(\osc).stop(fadeTime: 4)
    • fade général : c’est un attribut du NodeProxy que l’on contrôle avec la syntaxe ~osc.fadeTime = 4;
    ~osc = {SinOsc.ar(200) * 0.5}; // On crée une source audio
    +
    +~osc.play(fadeTime: 1);        // On fait entrer doucement
    +
    +~osc.fadeTime = 12;            // Transition très longue
    +
    +~osc = {SinOsc.ar(2000) * 0.5}; // Transition lente vers la fréquence voulue
    +
    +~osc.clear(fadeTime: 4);       // On s'arrête

    .stop / .clear

    Les méthodes .stop et .clear ne réalisent pas la même opération :

    • .stop : déconnecte le NodeProxy du reste de la chaîne audio. Il continue à tourner (et à consommer des ressources) mais en silence ! Vous pourrez le reconnecter plus tard.
    • .clear : détruit le NodeProxy. Vous pouvez réaliser la même opération en tapant : ~osc = nil. Notez toutefois que .clear permet de spécifier un fade-out avant la destruction.

    Si vous souhaitez vous débarrasser de tout les NodeProxy actifs, il existe cette commande :

    currentEnvironment.free;

    Elle applique la fonction free à tout ce qui compose l’environnement global. +Puisque ce dernier est un ProxySpace, on libère tout les NodeProxy.

    Modifier un/des paramètres

    Vous n’êtes pas obligés de réévaluer l’algorithme dans son intégralité pour modifier une valeur sur un NodeProxy. Parfois, il est préférable de mettre à jour un paramètre sans que le fade-in et le fade-out ne s’appliquent. Ce problème sera particulièrement sensible lorsque vous utiliserez des effets tels qu’un délai ou une réverbération.


    Si vous changez uniquement de valeur en réévaluant l’algorithme en entier, cela causera des problèmes avec l’amplitude générale du signal. Cela peut aussi causer un effet de brouillon lié à la superposition de plusieurs algorithmes en cours de fade-in / fade-out. Deux méthodes existent pour mettre à jour un paramètre : .set (instantané) et .xset (progressif).

    .set

    La méthode .set met immédiatement à jour un paramètre immédiatement, dès que possible :

    ~osc = { arg freq=200; SinOsc.ar(freq) * 0.5};
    +~osc.play(fadeTime: 2);
    +~osc.set(req, 800);
    +~osc.set(req, 400);
    +~osc.clear(2);

    .xset

    La méthode .xset met immédiatement à jour un paramètre progressivement, suivant le fadeTime :

    ~osc = { arg freq=200; SinOsc.ar(freq) * 0.5};
    +~osc.play(fadeTime: 2);
    +~osc.fadeTime = 8; // On change le fadeTime pour .xset
    +~osc.xset(req, 800);
    +~osc.xset(req, 400);
    +~osc.clear(2);

    Contrôler plusieurs paramètres


    Il est possible de contrôler plusieurs paramètres en une seule commande si +besoin est :

    ~osc.xset(req, 800, amp, 0.2);

    Tout dépend de ce dont vous avez besoin. Réévaluer la fonction entière peut +aussi être une stratégie intéressante dans certains cas.

    Communication entre NodeProxies

    On peut associer plusieurs NodeProxies pour former des algorithmes audio plus complexes et modulaires. Chaque NodeProxy peut être imaginé comme un module remplissant une fonction particulière dans un synthétiseur modulaire plus imposant. Pensez au patching dans un environnement comme Max/MSP ou Pure Data ou au patching analogique d’un synthétiseur physique.


    Il est possible de définir un NodeProxy oscillateur puis un contrôle (de type LFO) pour moduler la fréquence de cet oscillateur. Voici la méthode la plus simple que vous puissiez employer :

    ~source = {arg freq=400; SinOsc.ar(freq) * 0.5}; // Une source que l'on souhaite moduler
    +~source.play;
    +~source.set(req, 300);              // On peut utiliser set pour une valeur statique
    +~freq = { SinOsc.ar(1/2) * 400 };   // Voici un LFO (Low Frequency Oscillator)
    +~source.map(\freq, ~freq);          // Utilisation de la fonction map

    .map possède une fonction alternative, nommée .xmap. Elle fonctionne tout +comme .set et .xset.

    Conclusion

    Dans cette section du guide, nous avons appris :

    • Ce qu’est un NodeProxy et un ProxySpace, l’outil de base offert par JITLib
    • La différence entre ProxySpace.push et l’utilisation explicite des NDefs
    • Comment démarrer, stopper et arrêter un NodeProxy
    • Comment contrôler le fade-in et le fade-out et la transition entre algorithmes

    Je ne fais ici qu’effleurer les différentes commandes que possèdent les NodeProxy. Si vous souhaitez en apprendre plus, allez voir la documentation. Nous utiliserons un nombre limité de méthodes au fur et à mesure, lorsque nous en aurons besoin.

    + + +
    + + diff --git a/dist/guides/livecoding_supercollider_2.html.br b/dist/guides/livecoding_supercollider_2.html.br new file mode 100644 index 0000000..773ef53 Binary files /dev/null and b/dist/guides/livecoding_supercollider_2.html.br differ diff --git a/dist/guides/livecoding_supercollider_2.html.gz b/dist/guides/livecoding_supercollider_2.html.gz new file mode 100644 index 0000000..b0de179 Binary files /dev/null and b/dist/guides/livecoding_supercollider_2.html.gz differ diff --git a/dist/guides/proposer_guide.html b/dist/guides/proposer_guide.html index ce0b818..769e61d 100644 --- a/dist/guides/proposer_guide.html +++ b/dist/guides/proposer_guide.html @@ -6,25 +6,26 @@ - - + + - + - - - + + + + -

    Comment proposer un guide ?

    Publié le : 2023-12-22

    Auteur : Raphaël Maurice Forment

    Les guides sont rédigés en MarkDown, un format de balisage léger qui facilite l’écriture et la publication. Une fois ajoutés au site, ces derniers sont automatiquement recensés et publiés. Chaque article reçoit un entête simple. Voici l’entête de l’article actuel :

    ---
    +		

    Comment proposer un guide ?

    Publié le : 2023-12-22

    Auteur : Raphaël Maurice Forment

    Les guides sont rédigés en MarkDown, un format de balisage léger qui facilite l’écriture et la publication. Une fois ajoutés au site, ces derniers sont automatiquement recensés et publiés. Chaque article reçoit un entête simple qui permet de l’identifier. Voici l’entête de l’article actuel :

    ---
     title: Comment proposer un guide ?
     date: '2023-12-22'
     author: "Raphaël Maurice Forment"
    ----

    Chaque balise se comprend assez facilement :

    • title : le titre complet de l’article
    • date : au format AAAA-MM-JJ
    • author : nom complet ou votre pseudonyme

    Le site utilise ensuite ces données pour générer un entête. Les données peuvent ensuite être utilisées sous plusieurs formes pour faire référence au guide sur d’autres pages.

    Contenu de l’article

    Écrivez ce que vous voulez ! Notez que vous pouvez librement mélanger MarkDown, HTML/CSS et composants Svelte pour les plus confirmés. Vous ne devriez pas avoir de problème particulier à publier quoi que ce soit sous la forme que vous imaginez ! Si vous écrivez du MarkDown pur et simple, votre article recevra le style par défaut utilisé par le site.

    Publication

    Une fois votre article prêt, il vous faudra faire une Pull Request pour que ce dernier soit ajouté au dépôt du site et validé par un contributeur. Bonne chance ! Nous avons besoin de guides pour couvrir l’essentiel des plateformes existantes !

    +---

    Il n’est pas nécessaire de répéter le titre au début de votre article. Chaque balise se comprend assez facilement :

    • title : le titre complet de l’article
    • date : au format AAAA-MM-JJ
    • author : nom complet ou votre pseudonyme

    Le site utilise ensuite ces données pour générer un entête. Les données peuvent ensuite être utilisées sous plusieurs formes pour faire référence au guide sur d’autres pages.

    Contenu de l’article

    Écrivez ce que vous voulez ! Notez que vous pouvez librement mélanger MarkDown, HTML/CSS et composants Svelte pour les plus confirmés. Vous ne devriez pas avoir de problème pour publier quoi que ce soit sous la forme que vous imaginez ! Si vous écrivez du MarkDown pur et simple, votre article recevra le style par défaut utilisé par le site.

    Publication

    Une fois votre article prêt, il vous faudra faire une Pull Request pour que ce dernier soit au dépôt du site et validé par un contributeur. Bonne chance ! Nous avons besoin de guides pour couvrir l’essentiel des plateformes existantes !

    + +

    Articles

    + + + +

    Articles publiés

    + +
      + {#each data.articles as post} +
    • +

      + + {post.meta.title} + +

      +

      Publié le : {post.meta.date} par {post.meta.author}

      +
    • + {/each} +
    \ No newline at end of file diff --git a/src/routes/articles/+page.ts b/src/routes/articles/+page.ts new file mode 100644 index 0000000..75ab28d --- /dev/null +++ b/src/routes/articles/+page.ts @@ -0,0 +1,5 @@ +export const load = async ({ fetch }) => { + const response = await fetch(`/api/articles`); + const articles = await response.json(); + return { articles }; +}; \ No newline at end of file diff --git a/src/routes/articles/[slug]/+page.svelte b/src/routes/articles/[slug]/+page.svelte new file mode 100644 index 0000000..aaeee12 --- /dev/null +++ b/src/routes/articles/[slug]/+page.svelte @@ -0,0 +1,14 @@ + + +
    +

    {data.title}

    +
    +

    Publié le : {data.date}

    +

    Auteur : {data.author}

    +
    +
    + +
    +
    \ No newline at end of file diff --git a/src/routes/articles/[slug]/+page.ts b/src/routes/articles/[slug]/+page.ts new file mode 100644 index 0000000..4647013 --- /dev/null +++ b/src/routes/articles/[slug]/+page.ts @@ -0,0 +1,11 @@ +export async function load({ params }) { + const articles = await import(`../${params.slug}.md`); + const { title, date, author } = articles.metadata; + const content = articles.default; + return { + title, + date, + author, + content + }; +} \ No newline at end of file diff --git a/src/routes/articles/articles.svelte b/src/routes/articles/articles.svelte new file mode 100644 index 0000000..747b2b1 --- /dev/null +++ b/src/routes/articles/articles.svelte @@ -0,0 +1,8 @@ + + +
    + +
    \ No newline at end of file diff --git a/src/routes/articles/ordinateur_crier.md b/src/routes/articles/ordinateur_crier.md new file mode 100644 index 0000000..464fc34 --- /dev/null +++ b/src/routes/articles/ordinateur_crier.md @@ -0,0 +1,87 @@ +--- +title: Les ordinateurs peuvent-t-ils crier ? +date: '2023-12-23' +author: Raphaël Forment et Rémi Georges +--- + +## À propos + +
    + +Cet article était initialement publié dans la revue [Bugne Bugne](https://www.instagram.com/bugne_bugne/), une _"Revue lyonnaise dédiée aux musiques électroniques et aux enjeux politiques et sociaux de la fête, indépendante et non-lucrative ✊"_. L'objectif de cet article était de présenter le _live coding_ à un large public et de parler des concerts que nous organisons à Lyon. Je reprends ici l'intégralité du texte et je rajoute des liens supplémentaires pour enrichir la chose :) + +
    + +J'ai pris la liberté de rajouter tout un tas de liens divers qui apportent +souvent un contrepoint décalé au texte. + +## Introduction + + +Quelques personnes en Europe et dans le monde pratiquent le _live coding_. Nous sommes [quelques centaines ou quelques milliers](https://solstice.toplap.org). _Live coder_, cela consiste à improviser de la musique directement au travers de langages de programmation, sur scène, devant tout le monde, avec [les _bugs_, les _crashs_, etc](https://academic.oup.com/edited-volume/28278/chapter-abstract/214421107?redirectedFrom=fulltext). que cela implique. Tout au long de la performance, les _live coders_ éditent du code et le soumettent à l'ordinateur. Ils découvrent le résultat en même temps que le public et sont pareillement surpris ou inquiets de ce qu'ils entendent. + +
    + +_Live coder_, cela veut tout et rien dire et personne ne semble souhaiter définir le terme précisément. On peut [programmer et modifier des synthétiseurs en temps réel](https://www.youtube.com/watch?v=KwvqoH4LPKM), créer des séquences musicales, [des visuels](https://www.youtube.com/watch?v=cw7tPDrFIQg), etc. On peut allumer des ampoules en rythme ou [broder un pull](https://slab.org/2021/03/28/research-products/) sur scène, la seule limite restant le _crash_ et la capacité technique de faire ce que l'on veut. Le _live coding_ peut mobiliser toutes les ressources de l'ordinateur, pour le meilleur comme pour le pire. Certains aiment programmer de la musique, d'autres aiment programmer des visuels. Faites cela de manière conjointe, et vous obtenez une **Algorave**, une [algorithmic rave party](https://algorave.org). L'idée derrière ce terme était, [à l'origine](https://www.nime.org/proceedings/2014/nime2014_426.pdf), de faire de la musique de club au travers du code, de faire danser les gens sur des algorithmes. Ca ne ressemble pas du tout à de la musique de club, mais cela reste dansant quand même. C'est une musique à part, avec ses propres sonorités et ses gestes musicaux particuliers. + + +
    + +_Live coder_, cela ne signifie pas nécessairement programmer quelque chose pour arriver à une fin. Il n'y a pas de patron pour surveiller que vous terminiez votre programme dans les temps. _Live coder_, c'est surtout programmer sans but, errer dans un système musical et chercher ce qui sonne bien, ce qui sonne mal, et aussi pas mal chercher ce que l'on veut réellement faire. C'est un peu du jazz d'ordinateur. C'est une conversation à la fois avec votre ordinateur et avec votre propre capacité ou incapacité à vous exprimer musicalement au travers du code. + + +## Renouer avec l’ordinateur + +Il y a [longtemps que les gens font ça](https://github.com/philburk/hmsl), mais originellement, tout le monde s'en fichait. Il y a quelques décennies, il était normal d'utiliser des langages de programmation pour créer de la musique. C'était souvent la seule interface dont on disposait pour dialoguer avec la machine, pour composer, pour contrôler des synthétiseurs, des échantillonneurs, des machines, etc. L'apparition des [interfaces graphiques](https://www.youtube.com/watch?v=yJDv-zdhzMY) a aussi introduit le fait de cliquer partout, puis les fenêtres, puis tout un tas d'idées et de concepts dont on n'avait pas vraiment besoin pour faire de la musique. En bref, les interfaces graphiques ont rompu quelque chose d'important dans la manière dont on approche l'interaction avec l'ordinateur. + +
    + +Les ordinateurs sont faits pour manger du texte, des nombres, des instructions. Ils sont ridiculement petits, puissants et versatiles. Ce sont des calculatrices qui [calculent vite](https://www.youtube.com/watch?v=MbIiAr5dt24). Ils sont partout et sont d'ailleurs [faits pour être emportés partout](https://web.archive.org/web/20120216040047/http://pbup.goto10.org/). On passe déjà notre vie avec. Le seul problème est que l'on ne les utilise pas comme des ordinateurs. On ne les utilise pas non plus, d'ailleurs, comme des instruments de musique et les musiciens passent généralement beaucoup de temps et [consacrent beaucoup d'énergie](https://www.nime.org/) à éviter de se confronter à [la vrai nature](https://www.youtube.com/watch?v=tDacjrSCeq4) de l'ordinateur. + +
    + +Parlons un petit peu des métaphores. Ouvrez n'importe quel logiciel de production musicale (Ableton, Fruity Loops, Pro Tools). Regardez un peu ce que l'on vous montre à l'écran. Les logiciels pour créer de la musique sont remplis de métaphores étranges que personne n'a jamais réellement souhaité. On édite des mélodies MIDI sur des [piano rolls](https://www.youtube.com/watch?v=EO2CO0X-bAQ) comme si l'on manipulait un [piano mécanique avec des rouleaux](https://www.youtube.com/watch?v=9CnkYvikIFg). On montre un studio d'enregistrement avec des [tranches de console et des potentiomètres](https://www.reaper.fm/) alors qu'on a juste un clavier et une souris. Les synthétiseurs virtuels ont [des boutons et des potentiomètres qu'on ne peut pas pousser](https://www.arturia.com/products/analog-classics/cmi-v/sounddesign). Vous ne pouvez cliquer que sur un bouton à la fois, et les contrôleurs sont pénibles à utiliser. Les synthétiseurs virtuels ont des lumières tristes qui ne brillent même pas et ils peuvent planter tout comme Word ou Excel. Il y a quelque chose qui coince. Il fallait initialement vendre ces logiciels aux musiciens et on leur a vendu ce qu'ils connaissent le mieux. C'est tout pareil que votre bureau avec ses dossiers, ses fichiers, etc. Votre bureau n'existe pas, et les dossiers ne sont pas des dossiers en carton jaune moche que vous rangez dans une armoire. +[Les platines sont devenues des instruments](https://www.youtube.com/watch?v=wl1ZrEza7uY) lorsque les musiciens ont commencé à s'intéresser à leurs qualités musicales. De même, l'ordinateur peut devenir un instrument de musique si l'on s'intéresse [à ses qualités intrinsèques](https://www.youtube.com/watch?v=kPRA0W1kECg) : l'idée n'est pas d'éviter ce qu'il est vraiment, mais de [chercher ses qualités](https://thirtydollar.website/) dans le domaine musical. + +
    + +
    +I'm the operator with my pocket calculator I am adding, and subtracting... I'm controlling, and composing! By pressing down a special key, It plays a little melody. +
    + +
    + +Pourtant, il est toujours possible de programmer sa musique. On peut même faire la même chose qu'avant, mais en [beaucoup mieux](https://www.youtube.com/watch?v=WtwneW2s2bo), on peut faire la même chose que nos ancêtres, mais en temps réel. On peut tout programmer si on essaie vraiment. C'est super amusant mais c'est aussi devenu bizarre. Plus personne ne fait ça, à tel point que programmer son ordinateur en direct est devenu un parti pris. Programmer est devenu un geste expressif, tout comme peut l'être le fait de danser, de crier ou de faire un solo de guitare. C'est aussi parfois devenu un geste politique ou un acte militant. Depuis le début des années 2000, les live coders ont plus ou moins tous décidé de montrer ce qu'ils font à leur public (collectif TOPLAP, etc.) car ils estiment que c'est important. Ils font leurs concerts dans le noir et projettent leurs écrans pour que le public puisse lire le code et voir le curseur d'édition bouger : + +
    + +
    +Give us access to the performer's mind, to the whole human instrument. Obscurantism is dangerous. Show us your screens. +
    + +
    + +## Pourquoi live coder ? + +**Rémi :** “Je cherchais au départ des manières de composer des rythmes complexes. J'ai sombré. J'ai découvert une nouvelle façon de faire et de contrôler la musique et c'était sans doute la manière de faire que j'avais toujours cherchée sans la trouver. Je suis plus proche des sphères de la musique DIY, et le _live coding_ c'est un peu le DIY du numérique. En plus de bidouller l'électronique de mes synthés et j'ai commencé à pouvoir tout fabriquer, tout programmer. J'ai pu d'une certaine manière "augmenter" ou contrôler différemment tout mon matériel et j'y garde toujours ce plaisir du crash et de l'erreur. J'aime le fait que mon programme soit bancal, et qu'il puisse s'arrêter ou se comporter différemment du but premier. Je vais tout faire pour que tout se passe bien mais je ne peux jamais en être certain. J'ai jamais réussi à faire de la musique avec des logiciels faits pour cela, ça a toujours été sans saveur, incompréhensible, super compliqué à démarrer. + +
    + +Maintenant je crois pas que se soit foncièrement plus simple à démarrer mais au moins je ne peux m'en prendre qu'à moi-même. Je viens du milieu de la technique du son, le _live coding_ m'a aussi appris la programmation, il m'a ouvert la porte de la programmation appliquée à l'audio, et c'est maintenant ce dans quoi j'essaie de travailler.” + +
    + +**Raphaël :** “J'ai appris à programmer en m'intéressant au _live coding_. J'étais déjà assez pote avec les ordinateurs car mes amis et moi nous amusions à _modder_ des jeux ou à créer des choses intéressantes à l'ordinateur. Je cherchais initialement une manière d'écrire de la musique qui ne soit ni partition graphique, ni partition classique. Je tape super vite sur un clavier et j'aime beaucoup manipuler du texte. Il semblait assez clair que cette pratique était faite pour moi. J'ai appris à faire de la musique avec du code avant de savoir réellement programmer. J'ai commencé ensuite à modifier les outils pour les adapter à ma pratique puis à concevoir les miens. C'est aussi fascinant que nul. On apprend beaucoup, on crée son propre instrument, mais on arrive souvent à un résultat que l'on n'avait pas anticipé ! Je m'intéressais déjà beaucoup à toutes les musiques basées sur des systèmes de règles ou sur des processus génératifs. J'aime beaucoup John Cage, non pas pour sa musique, mais pour [les idées qu'il a pu transmettre](https://editions-contrechamps.org/livres/silence/) à tous les musiciens qui l'ont écouté. Aujourd'hui, je _live code_ car j'étudie ces musiques là dans un [cadre universitaire](https://raphaelforment.fr) mais j'y trouve également du plaisir. Cela ne se ressemble jamais, cela donne perpétuellement l'envie de recommencer. C'est le propre d'un instrument de musique, et je suis content d'avoir fait de mon ordinateur un instrument de musique.” + +## Le live-coding en France + +Le 8 avril 2023, nous avons organisé [une gigantesque algorave au Grrrnd Zero](https://www.grrrndzero.org/index.php/2422-sam-08-04-algorave) à Lyon. 19 projets différents venant de toute la France et parfois même de l'étranger (Italie, Pays-Bas, Etats-Unis) ont joué de la musique ou fait des visuels de 18h à 8h du matin. C'est sans doute la plus grosse algorave de la très longue histoire de France. Même si les gens se reconnaissent comme _live coders_, il n'est pas dit qu'ils se comprennent. On sait qu'on fait la même chose, mais pas nécessairement la même musique. On ne programme pas tous de la même manière, pas avec les mêmes outils ou le même langage, pas pour le même but, etc mais c'est déjà pas mal de savoir qu'on n'est pas tous seuls à avoir une lubie. Organiser des événements de _live coding_ permet de faire vivre cette pratique et de se rendre compte sa diversité. C'est une sorte de grande foire. En France, cela est d'autant plus sensible que la plupart des live coders ont un lien avec la [demoscene](https://cookie.paris) ou avec des cultures informatiques _underground_ qui n'ont jamais vraiment disparues. + +
    + +Aujourd’hui on s'est un peu lancés comme mission de rassembler toute la communauté française ou du moins de se faire savoir qu'on existe entre nous. On essaie d'organiser des _workshops_, car le _live coding_ est une pratique toujours plus simple à démarrer avec quelqu'un plutôt qu'en écumant des forums. +Nous sommes aussi allés représenter cette communauté francophone du live-coding à l'[International Conférence on Live-Coding](https://iclc.toplap.org) à Utrecht en avril 2023. Ça nous a permis de comparer cette scène à l'échelle mondiale et de pouvoir rencontrer en personne tous ces développeurs-artistes d'un petit milieu où tout le monde se connaît un peu. + +
    + +Si on cherche bien, il y a des _live coders_ partout. Il suffit de les débusquer, souvent dans les écoles d'art, dans les écoles d'ingé ou vraiment un peu partout là où on ne pense jamais à regarder. Bizarrement, on trouve assez peu de _live coding_ dans les conservatoires ou dans les écoles de musique. Tous les _live coders_ ne savent pas nécessairement qu'ils live codent. Parfois, ce n'est juste pas important pour eux, ou cela leur paraît naturel. Les _live coders_ naviguent entre milieux DIY, [réseaux hackers / makers](https://web.archive.org/web/20201202043301id_/https://journals.openedition.org/volume/7211), milieu des arts numériques, etc. Considérer que le _live coding_ est une forme d'art en soi est un réflexe assez anglais, lié à la manière dont la pratique a été popularisée dans les années 2000. En France, le _live coding_ est souvent considéré comme un outil. Ailleurs c'est considéré comme une fin en soi, ce qui n'est pas plus mal ! diff --git a/src/routes/guides/[slug]/+page.svelte b/src/routes/guides/[slug]/+page.svelte index aaeee12..5095526 100644 --- a/src/routes/guides/[slug]/+page.svelte +++ b/src/routes/guides/[slug]/+page.svelte @@ -1,14 +1,15 @@
    -

    {data.title}

    -
    -

    Publié le : {data.date}

    -

    Auteur : {data.author}

    -
    -
    - -
    -
    \ No newline at end of file +

    {data.title}

    +
    +

    Publié le : {data.date}

    +

    Auteur : {data.author}

    +
    +
    + +
    + + diff --git a/src/routes/guides/cold_dark.css b/src/routes/guides/cold_dark.css new file mode 100644 index 0000000..39dd470 --- /dev/null +++ b/src/routes/guides/cold_dark.css @@ -0,0 +1,317 @@ +/** + * Coldark Theme for Prism.js + * Theme variation: Dark + * Tested with HTML, CSS, JS, JSON, PHP, YAML, Bash script + * @author Armand Philippot + * @homepage https://github.com/ArmandPhilippot/coldark-prism + * @license MIT + */ +code[class*="language-"], +pre[class*="language-"] { + color: #e3eaf2; + background: none; + font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + background: #3c526d; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + background: #3c526d; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0.5em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #111b27; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0.1em 0.3em; + border-radius: 0.3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #8da1b9; +} + +.token.punctuation { + color: #e3eaf2; +} + +.token.delimiter.important, +.token.selector .parent, +.token.tag, +.token.tag .token.punctuation { + color: #66cccc; +} + +.token.attr-name, +.token.boolean, +.token.boolean.important, +.token.number, +.token.constant, +.token.selector .token.attribute { + color: #e6d37a; +} + +.token.class-name, +.token.key, +.token.parameter, +.token.property, +.token.property-access, +.token.variable { + color: #6cb8e6; +} + +.token.attr-value, +.token.inserted, +.token.color, +.token.selector .token.value, +.token.string, +.token.string .token.url-link { + color: #91d076; +} + +.token.builtin, +.token.keyword-array, +.token.package, +.token.regex { + color: #f4adf4; +} + +.token.function, +.token.selector .token.class, +.token.selector .token.id { + color: #c699e3; +} + +.token.atrule .token.rule, +.token.combinator, +.token.keyword, +.token.operator, +.token.pseudo-class, +.token.pseudo-element, +.token.selector, +.token.unit { + color: #e9ae7e; +} + +.token.deleted, +.token.important { + color: #cd6660; +} + +.token.keyword-this, +.token.this { + color: #6cb8e6; +} + +.token.important, +.token.keyword-this, +.token.this, +.token.bold { + font-weight: bold; +} + +.token.delimiter.important { + font-weight: inherit; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.language-markdown .token.title, +.language-markdown .token.title .token.punctuation { + color: #6cb8e6; + font-weight: bold; +} + +.language-markdown .token.blockquote.punctuation { + color: #f4adf4; +} + +.language-markdown .token.code { + color: #66cccc; +} + +.language-markdown .token.hr.punctuation { + color: #6cb8e6; +} + +.language-markdown .token.url .token.content { + color: #91d076; +} + +.language-markdown .token.url-link { + color: #e6d37a; +} + +.language-markdown .token.list.punctuation { + color: #f4adf4; +} + +.language-markdown .token.table-header { + color: #e3eaf2; +} + +.language-json .token.operator { + color: #e3eaf2; +} + +.language-scss .token.variable { + color: #66cccc; +} + +/* overrides color-values for the Show Invisibles plugin + * https://prismjs.com/plugins/show-invisibles/ + */ +.token.token.tab:not(:empty):before, +.token.token.cr:before, +.token.token.lf:before, +.token.token.space:before { + color: #8da1b9; +} + +/* overrides color-values for the Toolbar plugin + * https://prismjs.com/plugins/toolbar/ + */ +div.code-toolbar > .toolbar.toolbar > .toolbar-item > a, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > button { + color: #111b27; + background: #6cb8e6; +} + +div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus { + color: #111b27; + background: #6cb8e6da; + text-decoration: none; +} + +div.code-toolbar > .toolbar.toolbar > .toolbar-item > span, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus { + color: #111b27; + background: #8da1b9; +} + +/* overrides color-values for the Line Highlight plugin + * http://prismjs.com/plugins/line-highlight/ + */ +.line-highlight.line-highlight { + background: #3c526d5f; + background: linear-gradient(to right, #3c526d5f 70%, #3c526d55); +} + +.line-highlight.line-highlight:before, +.line-highlight.line-highlight[data-end]:after { + background-color: #8da1b9; + color: #111b27; + box-shadow: 0 1px #3c526d; +} + +pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before { + background-color: #8da1b918; +} + +/* overrides color-values for the Line Numbers plugin + * http://prismjs.com/plugins/line-numbers/ + */ +.line-numbers.line-numbers .line-numbers-rows { + border-right: 1px solid #0b121b; + background: #0b121b7a; +} + +.line-numbers .line-numbers-rows > span:before { + color: #8da1b9da; +} + +/* overrides color-values for the Match Braces plugin + * https://prismjs.com/plugins/match-braces/ + */ +.rainbow-braces .token.token.punctuation.brace-level-1, +.rainbow-braces .token.token.punctuation.brace-level-5, +.rainbow-braces .token.token.punctuation.brace-level-9 { + color: #e6d37a; +} + +.rainbow-braces .token.token.punctuation.brace-level-2, +.rainbow-braces .token.token.punctuation.brace-level-6, +.rainbow-braces .token.token.punctuation.brace-level-10 { + color: #f4adf4; +} + +.rainbow-braces .token.token.punctuation.brace-level-3, +.rainbow-braces .token.token.punctuation.brace-level-7, +.rainbow-braces .token.token.punctuation.brace-level-11 { + color: #6cb8e6; +} + +.rainbow-braces .token.token.punctuation.brace-level-4, +.rainbow-braces .token.token.punctuation.brace-level-8, +.rainbow-braces .token.token.punctuation.brace-level-12 { + color: #c699e3; +} + +/* overrides color-values for the Diff Highlight plugin + * https://prismjs.com/plugins/diff-highlight/ + */ +pre.diff-highlight > code .token.token.deleted:not(.prefix), +pre > code.diff-highlight .token.token.deleted:not(.prefix) { + background-color: #cd66601f; +} + +pre.diff-highlight > code .token.token.inserted:not(.prefix), +pre > code.diff-highlight .token.token.inserted:not(.prefix) { + background-color: #91d0761f; +} + +/* overrides color-values for the Command Line plugin + * https://prismjs.com/plugins/command-line/ + */ +.command-line .command-line-prompt { + border-right: 1px solid #0b121b; +} + +.command-line .command-line-prompt > span:before { + color: #8da1b9da; +} diff --git a/src/routes/guides/livecoding_supercollider.md b/src/routes/guides/livecoding_supercollider.md new file mode 100644 index 0000000..0f960b5 --- /dev/null +++ b/src/routes/guides/livecoding_supercollider.md @@ -0,0 +1,334 @@ +--- +title: 'Introduction au live coding sur SuperCollider (I)' +author: 'Raphaël Maurice Forment' +date: '2023-12-24' +--- + + + + +## Introduction + +Après avoir travaillé longtemps sur [Sardine](https://sardine.raphaelforment.fr) et [Topos](https://topos.live), je me suis posé la question de savoir si j'étais encore capable de _live coder_ sur **SuperCollider**. J'ai donc décidé de ramasser tout ce que je sais pour constituer un environnement de _live coding_ minimal et efficace. Ce document est le résultat de cette expérience. Il existe aussi un petit [Quark](https://github.com/Bubobubobubobubo/BuboQuark) qui va un peu plus loin que ce guide, mais que je ne documente pas encore. J'avais une certaine jalousie latente vis à vis des artistes qui utilisent **SuperCollider** sans recourir à aucune extension ou surcouche logicielle qui facilite la tâche. Le langage et l'environnement de **SuperCollider** est _monstrueux_ (de complexité, de détails, etc). Il offre toutefois un avantage intéressant : **SuperCollider** est très versatile. Au sein d'un seul langage / interface, il est possible de passer d'une section du code lié aux patterns musicaux à une autre partie du code directement liée à la synthèse et à l'écriture de traitements sonores. On peut aussi s'en servir pour écrire des utilitaires divers et des interfaces graphiques si besoin. **SuperCollider** est aussi un environnement relativement minimal et économe pour la production et le travail du son, développé depuis plus de vingt ans. Cela garantit de pouvoir le faire tourner sur toutes les machines sans aucun problème. + +
    + +**SuperCollider** a joué un rôle crucial dans le développement du _live coding_ au cours de ces 20 dernières années (dès la parution de **SuperCollider 2**). Il est toujours utilisé par l'immense majorité des artistes et _performers_ sous une forme directe ou indirecte (au travers de [Tidal](https://tidalcycles.org), [FoxDot](https://foxdot681713046.wordpress.com/) ou [Sonic Pi](https://sonic-pi.net)). Bien que ces derniers soient aujourd'hui populaires, il est également intéressant de voir que l'on peut réaliser peu ou prou la même chose tout en éliminant toute une catégorie de problèmes liés à l'installation, au déploiement ou à la personnalisation de ces interfaces. + +
    + + + +
    + +![SuperCollider Logo](/images/supercollider_splash.png) + +
    + +## Mise en place + +La mise en place est relativement simple. Nous aurons uniquement besoin de l'environnement de base et de la librairie _JITLib_, livrée par défaut avec **SuperCollider**. Nous augmenterons progressivement **SuperCollider** avec des _plugins_ ([Quarks](https://doc.sccode.org/Guides/UsingQuarks.html)) mais cela ne requiert pas d'installation directe et peut même se révéler facultatif. + +
    + +1) **Téléchargez** et installez [SuperCollider](https://supercollider.github.io) depuis le site officiel. + +2) **Optionnel :** téléchargez [sc3-plugins](https://github.com/supercollider/sc3-plugins), une collection officielle d'objets supplémentaires. + +
    + +Il est important de bien comprendre comment est structuré **SuperCollider**. Il s'agit d'un environnement composé de plusieurs briques logicielles interconnectées (ou non) : + +- **SCLang** : un langage de programmation inspiré de la famille **C** ou +**SmallTalk** +- **SCSynth** / **SCServer** : un serveur chargé de l'exécution audio +- **SCIDE** : l'éditeur par défaut, qui lie ces deux premiers composants + +**SCIDE** est utile, mais si vous préférez utiliser un autre éditeur, il est +possible de lier [VSCode](https://code.visualstudio.com/), [Emacs](https://github.com/supercollider/scel) ou [Neovim](https://github.com/davidgranstrom/scnvim). **SCLang** et **SCSynth** sont les deux composants les plus importants, l'un servant au contrôle de l'autre. L'architecture de **SuperCollider** est toujours axée sur la différence entre un _client_ (le langage) et le _serveur_ (qui exécute l'audio). + +
    + +## Commandes de base + +Lorsque vous ouvrez **SCIDE**, vous vous trouvez face à un document texte vierge. C'est dans cette zone que vous devez programmer et écrire votre code. **SuperCollider** est un langage interprété. Cela signifie que vous allez graduellement soumettre du code à évaluation et recevoir le résultat des commandes éxecutées. Cela peut parfois poser problème aux débutants qui ne sont pas habitués à cette manière de concevoir la programmation : + +- l'évaluation d'un fichier ne s'effectue pas toujours de manière linéaire. On +peut évaluer du code bloc par bloc ou modifier un bloc à la volée. +**SuperCollider** identifie un bloc à l'aide des parenthèses `()`. +- il est possible d'évaluer un fichier de manière linéaire si besoin. Il existe + des commandes spécifiques pour ce faire (_par ex._ `"blabla/mon_fichier.scd".loadRelative`). +- la librairie standard (classes, extensions) est lue / interprétée de manière +linéaire au démarrage de l'interpréteur. Vous ne pourrez pas démarrer +l'interpréteur si une erreur est identifiée dans cette partie du code : `Library has not been compiled successfully`. + +
    + +Selon votre éditeur, les commandes pour évaluer du code ligne par ligne ou bloc par bloc peuvent varier (`Shift + Enter`, `Control + Enter`, etc). Vous pourrez trouvez les commandes dans le menu `Language` de **SCIDE**. Pour vérifier que tout fonctionne, évaluez la ligne suivante (_note :_ les commentaires sont précédés des caractères `//` et ne sont pas évalués) : + +```js +s.boot // Démarrage du serveur +``` + +Attendez quelques secondes pour vérifier que tout se passe correctement puis +tuez le serveur : + +```js +Server.killAll // Tuer le serveur +``` + +**SuperCollider** permet de prendre l'habitude de ne pas considérer le code +comme un texte linéaire mais comme une interface, ce qui est une caractéristique + commune des outils de _live coding_. C'est aussi une constante des +environnements pour la programmation musicale (_Max/MSP_, _Pure Data_) qui +éliminent / gomment la distinction entre travail sur le programme et exécution +du programme. + +
    + +Ce guide ne vous apprendra pas les rudiments du langage. Il existe de très +nombreux guides qui font cela très bien. Notez la parution récente d'un nouvel +ouvrage : [SuperCollider for the Creative Musician](https://global.oup.com/academic/product/supercollider-for-the-creative-musician-9780197616994) par Eli Fieldsteel, également auteur d'une [série de vidéos](https://www.youtube.com/@elifieldsteel) que je recommande. + +
    + +## Prérequis + +
    + +Dès maintenant, je pars du principe que vous êtes à l'aise avec l'environnement **SuperCollider** et que vous avez au moins quelques rudiments de son utilisation. Il n'est pas nécessaire d'en connaître beaucoup mais au moins de savoir évaluer du code, naviguer dans les fichiers d'aide et de maîtriser quelques raccourcis clavier. Le reste viendra naturellement en pratiquant. Voici quelques suggestions pour découvrir **SuperCollider** et son utilisation : + +- se familiariser avec chaque élément de l'interface (`s.scope`, +`s.freqscope`, `s.gui`) +- se familiariser avec la documentation intégrée, lire les guides disponibles +- apprendre comment contrôler le serveur (`s`, `Server.default`) et l'interpréteur + - démarrer et arrêter le serveur + - recompiler la librairie / redémarrer l'interpréteur +- apprendre la syntaxe de base d'une `SynthDef` (définition de synthèse) +- apprendre à jouer avec la librairie des patterns (`Pbind`, `Pseq`, etc) + +## Paramétrage du serveur + +
    + +Nous allons maintenant commencer à travailler sur un fichier de lancement +réutilisable pour **SuperCollider**. Créez un fichier nommé `startup.scd` ou +tout autre nom qui vous permettra de l'identifier facilement. + +
    + +### Choisir une interface audio + +
    + +Pour connaître le nom des périphériques audio disponibles : + +```supercollider +ServerOptions.devices; // Tout ce qui est disponible +ServerOptions.inDevices; // Les entrées uniquement +ServerOptions.outDevices; // Les sorties uniquement +``` + +Il est possible de spécifier une entrée et une sortie différente : + +```supercollider +Server.default.options.inDevice_("Built-in Microph"); +Server.default.options.outDevice_("Built-in Output"); +``` + +On peut aussi utiliser le même _device_ pour l'entrée et la sortie : + +```supercollider +s.options.device = "BlackHole 16ch"; // Choix de l'interface +Server.default.options.device_("BlackHole 16ch"); // Alternative +``` + +
    + +Pour appliquer les modifications, il sera nécessaire de redémarrer le serveur. +Veillez à ce que votre entrée et votre sortie audio soient à la même fréquence +d'échantillonnage (_sampling rate_). Si ce n'est pas le cas, le serveur refusera + de démarrer, ce qui est une erreur très courante. Paramétrez votre fréquence +sur `44100hz` ou `48000hz`. + +
    + +**Note :** si vous avez pour habitude d'utiliser des écouteurs ou haut-parleurs + _Bluetooth_, les OS modernes ont tendance à changer automatiquement la +fréquence d'échantillonnage à la connexion/déconnexion. Il en va de même des +micros et carte sons externes. + + +
    + +### Router le son de SuperCollider vers un autre logiciel + +
    + +Il est tout à fait possible d'utiliser **SuperCollider** comme source principale et de router ensuite le son vers un autre logiciel pour le traitement. Cela vous permettra d'enregistrer plus facilement en multipiste, de disposer d'effets ou de synthétiseurs supplémentaires, etc. Vous pourrez aussi contrôler une partie de votre dispositif en **MIDI** ou **OSC** directement depuis **SuperCollider**. Pour pouvoir router librement les signaux sortants de **SuperCollider**, il est préférable d'utiliser une interface virtuelle comme [BlackHole](https://existential.audio/blackhole/) (_cross-platform_), [Loopback](https://rogueamoeba.com/loopback/) (MacOS, payant), [Jack](https://jackaudio.org/) (_cross-platform_) ou [VB-Audio VoiceMeeter](https://vb-audio.com/Voicemeeter/) (Windows, payant). Ces logiciels permettent de créer des _bus_ audio virtuels qui peuvent être utilisés comme entrée ou sortie par **SuperCollider** aussi bien que par n'importe quel autre logiciel. L'utilisation de bus audios virtuels offre une grande flexibilité et je recommande de prendre l'habitude de les utiliser. + +
    + +1) Choisir comme entrée/sortie une interface virtuelle (BlackHole, Loopback, +etc). + +2) Choisir comme entrée dans le logiciel de traitement le bus virtuel que vous +venez de créer. + +3) Traiter / enregistrer le son canal par canal dans votre logiciel. + + +
    + +![Routage de SuperCollider dans Reaper](/images/reaper_supercollider_1.png) + +
    + +### Protéger ses oreilles + +
    + +**SuperCollider** vous permet de manipuler le son sans aucune restriction. C'est très utile mais c'est aussi assez dangereux non seulement +pour vous mais aussi pour votre public si vous vous produisez sur scène : +_larsens_, _clipping_, explosion du volume, etc. Heureusement, ce problème est +connu et il existe des moyens efficaces de se protéger. Nous allons utiliser le +système de _plugins_ interne pour installer un **Quark** très utile. Avec la +commande suivante, installez [BatLib](https://github.com/supercollider-quarks/BatLib): + +```supercollider +Quarks.install("https://github.com/supercollider-quarks/BatLib") +``` + +Recompilez ensuite la librairie et vous pourrez utiliser le +`StageLimiter`. Il vous sauvera sans doute la vie de nombreuses fois. Vous +verrez comment on le démarre dans le récapitulatif plus bas. TLDR, la commande +est : + +```supercollider +StageLimiter.activate; +``` + +Si vous routez le son de **SuperCollider** vers une autre application, n'hésitez + pas à installer des protections similaires dans cette application (_limiter_, +etc). + +
    + +### Choisir un dossier de stockage + +
    + +Plutôt que de tout stocker dans le dossier par défaut, je préfère utiliser un +dossier qui contient tout ce dont j'ai besoin pour travailler : configuration, +définitions de synthèse, échantillons sonores. Cela permet de n'avoir qu'une +seule route à retenir si le système est relativement unifié. J'ai choisi de tout +stocker dans `.config/livecoding/`, ce qui est une route assez prévisible pour +tout ceux qui sont habitués à utiliser le terminal sur **MacOS** / **Linux**. +Voici à quoi ressemble mon dossier : + +```bash +. +├── Configuration.scd +├── README.md +├── Synthdefs.scd +└── samples +``` + + +
    + +Toute la configuration sera chargée à partir de la route +`/Users/bubo/.config/livecoding`. Il vous faudra changer ce chemin pour que cela +cole avec le dossier que vous aurez choisi. Pareillement, vous n'êtes pas +obligés de suivre cette étape qui repose uniquement sur une préférence +personnelle. + +
    + +### Chargement automatique des échantillons + +
    + +Plutôt que de charger les échantillons sonores au cas par cas, en précisant chaque chemin individuellement, je préfère automatiquement charger une grande bibliothèque d'échantillons. Par défaut, il n'existe aucun mécanisme permettant de gérer cela. Beaucoup de musiciens ont toutefois trouvé des solutions élégantes et assez minimales. Je me suis fié à la technique utilisé par [Scott Carver](https://github.com/scztt). Il utilise une série d'extensions conçues spécialement par ses soins. + +
    + +Pour installer les **Quarks**, on utilise une nouvelle fois la commande `Quarks.install` : + +```supercollider +Quarks.install("https://github.com/scztt/Require.quark"); +Quarks.install("https://github.com/scztt/Singleton.quark"); +``` + +
    + +Une fois que cela est fait, il nous reste à installer la pièce finale, [SAMP]( https://gist.github.com/scztt/73a2ae402d9765294ae8f72979d1720e), qui est mentionnée dans un [topic](https://scsynth.org/t/making-own-sounds-libraries/4593/7) de discussion du forum **SuperCollider**. Il vous faudra créer ce fichier dans le dossier **Extensions**. Vous pouvez y accéder dans votre dossier de configuration **SuperCollider** (dépend de l'**OS**). Pour obtenir le chemin vers ce dossier, évaluez le code suivant dans **SuperCollider** : + +```supercollider +Platform.userExtensionDir +``` + +Créez ensuite **SAMP.sc** dans le dossier **Extensions** et collez le code du +lien précédemment ouvert. C'est tout ce dont vous avez besoin. Fermez tout et +recompilez la librairie une nouvelle fois. Nous détaillerons ultérieurement l'utilisation de **SAMP** pour gérer vos échantillons. Sachez que vous y avez maintenant accès ! + +
    + +**Note :** **SAMP** permet de réaliser un _lazy loading_ des échantillons. Il s'agit d'une technique qui permet de ne pas surcharger d'entrée de jeu la RAM de votre ordinateur en mettant en cache trop d'échantillons. L'utilisation des ressources sera progressive, les échantillons étant chargés uniquement lorsque l'utilisateur les requiert. + +
    + +### Récapitulatif + +
    + +Voici le code complet que j'utilise pour le démarrage et la configuration d'un serveur audio minimal pour le _live coding_ : + +```supercollider +( + s.options.numBuffers = 1024 * 128; // Nombre de buffers disponibles pour stocker des samples + s.options.memSize = 8192 * 64; // Mémoire disponible pour le serveur + s.options.numWireBufs = 2048; // Augmenter ce nombre si "exceeded number of interconnect buffers" + s.options.maxNodes = 1024 * 32; // Changer cette valeur si le son saute avec le message "too many nodes" + s.options.device = "BlackHole 16ch"; // Choix de l'interface audio à utiliser + s.options.numOutputBusChannels = 2; // Indiquer le nombre de sorties de son interface audio + s.options.numInputBusChannels = 2; // Indiquer le nombre d'entrées de son interface audio + p=ProxySpace.push(s.boot); // Démarrage du serveur dans un ProxySpace (JITLIB) + p.makeTempoClock; // Gestion du tempo + p.clock.tempo = 120/60; + SAMP.root = "/Users/bubo/.config/livecoding/samples/"; // Chemin vers les samples + SAMP.lazyLoading = true; // Chargement paresseux (permet de ne pas remplir la mémoire pour rien) + s.waitForBoot({ + "/Users/bubo/.config/livecoding/Synthdefs.scd".load; // Chargement des synthétiseurs + StageLimiter.activate; // StageLimiter pour les oreilles + "== 💻 LIVE CODING PRÊT 💻 == ".postln; + }); +) +``` + +Sauvegardez cet extrait de code dans un fichier **.scd** situé dans votre dossier de stockage. Vous pourrez ensuite l'évaluer à chaque fois que vous voudrez démarrer à l'aide de la commande suivante qu'il vous faudra évaluer dans l'interpréteur : + +```supercollider +"/Users/bubo/.config/livecoding/Configuration.scd".load; +``` + +Si vous souhaitez démarrer **SuperCollider** avec cette configuration par défaut, vous pouvez également tirer parti du fichier de démarrage, qui s'exécute automatiquement à l'ouverture de **SCIDe**. Ce dernier se situe dans votre dossier de configuration **SuperCollider**. Vous pouvez le trouver en évaluant le code suivant : + +```supercollider +Platform.userAppSupportDir +``` + +Il devrait exister un fichier `startup.scd` que vous pouvez remplir avec la +configuration ci-dessus, en adaptant les chemins. + +## Conclusion + +Cette configuration sera amenée à évoluer et pourra même faire l'objet d'une +refonte complète lorsque vous serez amenés à pré-charger d'autres composants : +synthétiseurs, effets pré-déclarés, etc. Nous y reviendrons. diff --git a/src/routes/guides/livecoding_supercollider_2.md b/src/routes/guides/livecoding_supercollider_2.md new file mode 100644 index 0000000..8bdc0e3 --- /dev/null +++ b/src/routes/guides/livecoding_supercollider_2.md @@ -0,0 +1,329 @@ +--- +title: "Introduction au live coding sur SuperCollider (II)" +author: "Raphaël Maurice Forment" +date: "2023-24-12" +--- + + + +## Introduction + +### Le labyrinthe **SuperCollider** + +
    +
    + +
    + +
    + +Si vous avez lu et suivi le premier article, tout est en place et vous devriez +maintenant être prêt à jouer. L'une des qualités mais aussi l'un des défauts de **SuperCollider** est de ne +pas vous astreindre à suivre une route particulière concernant la manière dont il vous faut approcher la création sonore lorsque vous débutez. Le logiciel est extrêmement générique et chaque +utilisateur développe progressivement ses propres abstractions et une logique qui lui est propre. Il existe plusieurs dizaines de mécanismes +distincts et la documentation tentaculaire du logiciel recommande souvent des +approches contradictoires ou des solutions qui ne fonctionneront pas +nécessairement avec votre méthode de travail. Il est donc nécessaire d'être toujours +conscient des choix que vous avez opéré et ne pas hésiter à revenir en +arrière si ces derniers ne vous conviennent pas. **SuperCollider** est un logiciel +déjà ancien, et la librairie standard est si vaste qu'il est difficile de la comprendre entièrement et encore moins de la maîtriser. Il +est toutefois possible de développer une certaine expertise pour utiliser **SuperCollider** d'une certaine manière et de construire progressivement ses connaissances en fonction des projets. + +
    + +
    + +### **JITLib** et le _live coding_ + +
    + +L'approche que nous suivons dans ce guide repose sur la librairie [JITLib](https://doc.sccode.org/Overviews/JITLib.html). Cette librairie développée par [Julian Rohrhuber](https://www.rsh-duesseldorf.de/institute/institut-fuer-musik-und-medien/lehrende-mitarbeitende/rohrhuber-julian) est devenue si populaire qu'elle est désormais intégrée par défaut à **SuperCollider** lors de l'installation. Les avantages offerts par cette dernière ne sont pas évidents à saisir lorsqu'on débute sur **SuperCollider**. Un grand nombre d'utilisateurs l'ignorent complètement dans leur travail. La raison qui nous pousse à l'utiliser est que cette dernière est prévue, _par défaut_, pour permettre le *live coding*. Même dans ce domaine déjà très spécifique, **JITLib** reste encore relativement générique. Le mécanisme que la librairie implémente est très simple : **JITLib** permet de remplacer _à chaud_, _en temps réel_, n'importe quelle donnée (audio, information) par une information de nature similaire. Voici la traduction du premier paragraphe de la documentation : + + + +
    + +
    + +La programmation _just in time_ (ou la programmation conversationnelle, le _live coding_, la _programmation à la volée_, la programmation interactive) est un paradigme qui inclut l'activité de programmation dans le déroulement du programme. Dans ce paradigme, le programme n'est pas considéré comme un outil qui est conçu avant d'être utilisé plus tard de manière productive. Plutôt, il s'agit de concevoir la conception dynamique des programmes comme une description et comme une conversation. Écrire du code devient une partie intégrante de l'expérience musicale ou de la pratique expérimentale. + +
    + +
    + +**JITLib** intègre ce principe à **SuperCollider** de manière assez approfondie. On se retrouve rarement bloqué du fait d'une incompatibilité entre la librairie standard et **JITLib**. Par ailleurs, **JITLib** est si finement intégré qu'il est parfois délicat de savoir si telle ou telle fonctionnalité relève de cette librairie ou vient de l'installation standard de **SuperCollider**. + +
    + +### Conseils de lecture + +
    + +Cette partie du guide est _de loin la plus pénible_. Elle introduit tout les concepts importants que nous manipulerons pour faire de la musique avec **SuperCollider**. Il s'agit en quelque sorte du solfège élémentaire pour un _live coder_ utilisant **SuperCollider**. Je suis conscient que les premiers paragraphes sont particulièrement difficiles pour un utilisateur débutant. N'hésitez pas à continuer votre lecture si un détail vous échappe, vous finirez sans doute par comprendre ultérieurement par la pratique. Ne vous laissez pas arrêter par du vocabulaire ou des concepts peu familiers. + +## `ProxySpace` et `Ndefs` + +### Le principe de base de la librairie + +
    + +Tout commence avec un peu de vocabulaire. **JITLib** introduit la notion de **ProxySpace**, un environnement de références vers des _proxys_ : "_an environment of references on a server_". Une référence est un nom associé à un objet. C'est aussi simple que `~a = 2` ou `~a` est un _proxy_ et `2` un objet. Ce système fonctionne à l'aide de _proxys_, il nous faut donc comprendre ce qu'est un _proxy_. C'est une notion relativement simple, il s'agit d'un objet qui contient _quelque chose_. + +
    +
    + +**Proxy:** un _proxy_ est un contenant pour _quelque chose_ qui tourne sur le serveur, généralement un contrôle ou un algorithme audio. C'est un objet vide ou non-vide. Un _proxy_ peut contenir le _node_ d'un oscillateur (_cf._ la suite) mais il pourrait aussi contenir un filtre audio, un synthétiseur que nous venons de créer ou même un pattern algorithmique. Le _proxy_ englobe ce qu'il contient et réalise à notre place tout un tas d'opérations qu'il est d'ordinaire nécessaire de gérer manuellement. Par exemple, on peut remplacer le contenu d'un _proxy_ par un autre _node_ sans interruption du signal, supprimer le contenant d'un _proxy_ sans pour autant supprimer la boîte elle-même. + +
    + +
    + +Un **ProxySpace** est un ensemble de clés et de valeurs, un grand sac dans lequel on manipule des _proxy_. Les clés sont des références vers des `NodeProxy`. Tout ceci est sans aucune importance tant que nous ne le manipulons pas pour générer du son. + +
    + + +### Remplacer l'environnement par défaut par un `ProxySpace` + +
    + +Dans le guide précédent se trouvait une ligne assez inhabituelle, celle qui nous servait pour démarrer le serveur : +```supercollider +p = ProxySpace.push(s.boot); +``` + +Sans entrer dans le détail, cette ligne réalise deux actions distinctes : + +
    + +
    + +1) elle démarre le serveur audio de **SuperCollider** (`s.boot`) + +2) elle _pousse_ l'environnement par défaut dans un **ProxySpace** + +
    + +
    + +Avec la méthode `push`, toutes les variables globales de l'environnement actuel deviennent mécaniquement des `NodeProxy` dans le **ProxySpace**. Pour s'en convaincre, il suffit de taper le nom d'une variable et d'observer la valeur de retour : + +
    + +```supercollider +~bob; // -> NodeProxy.nil(localhost, nil) +``` + +Ce n'est pas très parlant si vous n'êtes oas habitués à **SuperCollider** ou à la programmation. Essayons maintenant de voir ce que cela signifie lorsque nous souhaitons manipuler du son, sans spécifiquement aborder tout les détails. Évaluez le code suivant ligne par ligne : + +```cpp +~osc = {SinOsc.ar(200) * 0.5}; // J'évalue, rien ne se passe. Associe une fonction audio à un NodeProxy +~osc.play; // On connecte l'audio à la sortie et on joue la fonction +~osc = {SinOsc.ar(400) * 0.5}; // On remplace la fonction précédente par une autre (sans interruption !) +~osc.stop(fadeTime: 4); // On stoppe avec un joli fade-out +~osc.clear; // On libère la mémoire +``` + +
    + +Nous avons associé une fonction audio (`{SinOsc.ar(200) * 0.5}`) à une référence (`~osc`). C'est tout le principe de **JITLib**. Cette association peut être remplacée à tout moment sans interruption grâce au _proxy_. Le `NodeProxy` nommé `~osc` accepte un grand nombre de manipulations différentes et son rôle est totalement redéfini par rapport au comportement habituel d'une variable en dehors de l'utilisation de **JITLib**. + +
    + +Ce n'est plus une variable, c'est un `Proxy` dans notre `ProxySpace`. La ligne `~osc.stop(fadeTime: 4)` démontre aussi que les `NodeProxy` intègrent de nombreuses méthodes destinées à gérer l'audio: _fade in_, _fade out_, contrôle du niveau des sources : etc. + +
    + +Nous allons utiliser ce principe fondamental introduit par **JITLib** tout au long de ce guide pour contrôler tout ce que nous souhaitons / pouvons contrôler : **algorithmes audio**, **patterns algorithmiques**, **effets sonores**, etc. Il est **essentiel** de retenir ce principe du _proxy_ car il nous permet de savoir réellement ce que nous sommes en train de manipuler à tout moment au cours du jeu : essentiellement des `NodeProxy`. + + +
    + +Sans en savoir beaucoup plus, il est déjà possible de faire un petit peu de musique en s'amusant à remplacer une source par un autre : + +```cpp +~osc = {SinOsc.ar([200, 100]) * 0.5}; // On associe une source à un NodeProxy, un double oscillateur +~osc.play(fadeTime: 4); // On lance le NodeProxy avec un fade-in +~osc.fadeTime = 4; // On change le fadeTime général + +~osc = {LPF.ar(SinOsc.ar([400, 100]), SinOsc.ar(1/4).range(200,2000)) * 0.5}; // On remplace la source +~osc = {LPF.ar(SinOsc.ar([800, 350]), SinOsc.ar(1/4).range(200,2000)) * 0.5}; // On remplace la source +~osc = {LPF.ar(SinOsc.ar([200, 150]), SinOsc.ar(1/4).range(200,2000)) * 0.5}; // On remplace la source + +~osc.stop(fadeTime: 4); // Fade-out +~osc.clear; // On libère la mémoire +``` + +
    + +Même si tout reste assez primitif pour le moment, on peut déjà faire beaucoup de choses en suivant ce principe. Il est possible d'utiliser n'importe quel algorithme audio et de le mettre à jour graduellement tout au long d'une performance. Ce type de _live coding_ centré autour de la musique à jour d'un générateur sonore se prête plutôt bien à de la musique électro-acoustique, _ambient_, _noise_, etc. + +
    + +### Les `Ndefs` : une autre manière de faire la même chose + +
    + +La technique que nous utilisons avec `ProxySpace.push(s.boot)` _dissimule_ l'utilisation que nous faisons des `NodeProxy`. Cette fonctionnalité a été intégrée car elle permet de gagner du temps de frappe mais elle a pour désavantage de rendre plus difficilement perceptible ce que nous sommes réellement en train de faire. À première vue, il semble que `~a = 2` soit juste une assignation de variable comme dans un langage de programmation classique. Pourtant, il s'agit d'une opération qui crée/modifie un `NodeProxy`. + +
    + +Nous occultons le fait que les variables globales de **SuperCollider** sont maintenant des `NodeProxy`. Il est possible de se passer entièrement de `Proxyspace.push` et de cet avantage/désagrément en utilisant les `Ndefs`. Il s'agit d'une préférence personnelle, presque d'ordre stylistique. + +
    + + + +
    + +Le terme de **NDef** est un raccourci pour _Node Proxy Definition_. On retrouve du vocabulaire familier. C'est une autre manière de désigner exactement le même type d'objet que ce que nous manipulons depuis le début ! Seule la syntaxe diffère. Profitons-en quand même pour évoquer rapidement ce qu'est un _node_ : + +
    + +
    + + +**Node:** un _node_ est un objet défini en interne par le serveur audio de **SuperCollider**. Un synthétiseur est un _node_, beaucoup d'objets présents sur le serveur sont des _nodes_. Il s'agit d'un objet générique utilisé pour une opération audio : contrôle ou synthétiseur. C'est un objet abstrait, qu'on ne manipule jamais directement. Les fonctions audio que nous venons d'utiliser dans l'exemple précédent sont des _nodes_ que l'on associe à un _proxy_. Un _node_ tire ce nom du fait que ce sont des _noeuds_ dans un graphe audio, des objets qui ont une position dans un graphe de traitement du signal. + +
    + +
    + +Les `Ndefs` ont pour avantage de ne pas se propager dans l'environnement local. Elles rendent tout un petit peu plus clair. Réécrivons l'exemple précédent en utilisant uniquement des `Ndefs` : + +```cpp +Ndef(\osc, {SinOsc.ar([200, 100]) * 0.5}); // On associe une source à un NodeProxy, un double oscillateur +Ndef(\osc).play(fadeTime: 4); // On lance le NodeProxy avec un fade-in +Ndef(\osc).fadeTime = 4; // On change le fadeTime général + +Ndef(\osc, {LPF.ar(SinOsc.ar([400, 100]), SinOsc.ar(1/4).range(200,2000)) * 0.5}); // On remplace la source +Ndef(\osc, {LPF.ar(SinOsc.ar([800, 350]), SinOsc.ar(1/4).range(200,2000)) * 0.5}); // On remplace la source +Ndef(\osc, {LPF.ar(SinOsc.ar([200, 150]), SinOsc.ar(1/4).range(200,2000)) * 0.5}); // On remplace la source + +Ndef(\osc).stop(fadeTime: 4); // Fade-out +Ndef(\osc).clear; // On libère la mémoire +``` + +C'est à vous de choisir quelle est la syntaxe que vous préférez. + +## Gestion des `NodeProxy` + +### `fadeTime` + +Nous avons déjà utilisé la capacité des `NodeProxy` à opérer des _fade-ins_ et des _fade-outs_. C'est une fonctionnalité très pratique, surtout lorsque vous manipulez des sources audio dynamiques et que vous souhaitez faire des transitions souples de l'une à l'autre. Il existe trois types de _fade_ : + +- _fade-in_ à l'entrée : c'est un argument de la méthode `.play` : `~osc.play(fadeTime: 4)` ou `Ndef(\osc).play(fadeTime: 4)` +- _fade-in_ en sortie : c'est un argument de la méthode `.stop` ou `.clear` : `~osc.stop(fadeTime: 4)` ou `Ndef(\osc).stop(fadeTime: 4)` +- _fade_ général : c'est un attribut du `NodeProxy` que l'on contrôle avec la syntaxe `~osc.fadeTime = 4`; + +```cpp +~osc = {SinOsc.ar(200) * 0.5}; // On crée une source audio + +~osc.play(fadeTime: 1); // On fait entrer doucement + +~osc.fadeTime = 12; // Transition très longue + +~osc = {SinOsc.ar(2000) * 0.5}; // Transition lente vers la fréquence voulue + +~osc.clear(fadeTime: 4); // On s'arrête +``` + + +
    + +### `.stop` / `.clear` + +Les méthodes `.stop` et `.clear` ne réalisent pas la même opération : + +- `.stop` : déconnecte le `NodeProxy` du reste de la chaîne audio. Il continue à tourner (et à consommer des ressources) mais en silence ! Vous pourrez le reconnecter plus tard. +- `.clear` : détruit le `NodeProxy`. Vous pouvez réaliser la même opération en tapant : `~osc = nil`. Notez toutefois que `.clear` permet de spécifier un _fade-out_ avant la destruction. + +Si vous souhaitez vous débarrasser de tout les `NodeProxy` actifs, il existe cette commande : + +```supercollider +currentEnvironment.free; +``` + +Elle applique la fonction `free` à tout ce qui compose l'environnement global. +Puisque ce dernier est un `ProxySpace`, on libère tout les `NodeProxy`. + +## Modifier un/des paramètres + +Vous n'êtes pas obligés de réévaluer l'algorithme dans son intégralité pour modifier une valeur sur un `NodeProxy`. Parfois, il est préférable de mettre à jour un paramètre sans que le _fade-in_ et le _fade-out_ ne s'appliquent. Ce problème sera particulièrement sensible lorsque vous utiliserez des effets tels qu'un délai ou une réverbération. + +
    + +Si vous changez uniquement de valeur en réévaluant l'algorithme en entier, cela causera des problèmes avec l'amplitude générale du signal. Cela peut aussi causer un effet de brouillon lié à la superposition de plusieurs algorithmes en cours de _fade-in_ / _fade-out_. Deux méthodes existent pour mettre à jour un paramètre : `.set` (instantané) et `.xset` (progressif). + +### `.set` + +La méthode `.set` met immédiatement à jour un paramètre **immédiatement**, dès que possible : + +```cpp +~osc = { arg freq=200; SinOsc.ar(freq) * 0.5}; +~osc.play(fadeTime: 2); +~osc.set(\freq, 800); +~osc.set(\freq, 400); +~osc.clear(2); +``` + +### `.xset` + +La méthode `.xset` met immédiatement à jour un paramètre **progressivement**, suivant le `fadeTime` : + +```cpp +~osc = { arg freq=200; SinOsc.ar(freq) * 0.5}; +~osc.play(fadeTime: 2); +~osc.fadeTime = 8; // On change le fadeTime pour .xset +~osc.xset(\freq, 800); +~osc.xset(\freq, 400); +~osc.clear(2); +``` + +### Contrôler plusieurs paramètres + +
    + +Il est possible de contrôler plusieurs paramètres en une seule commande si +besoin est : + + +```supercollider +~osc.xset(\freq, 800, \amp, 0.2); +``` + +Tout dépend de ce dont vous avez besoin. Réévaluer la fonction entière peut +aussi être une stratégie intéressante dans certains cas. + +## Communication entre `NodeProxies` + + +On peut associer plusieurs `NodeProxies` pour former des algorithmes audio plus complexes et modulaires. Chaque `NodeProxy` peut être imaginé comme un module remplissant une fonction particulière dans un synthétiseur modulaire plus imposant. Pensez au _patching_ dans un environnement comme _Max/MSP_ ou _Pure Data_ ou au _patching_ analogique d'un synthétiseur physique. + +
    + +Il est possible de définir un `NodeProxy` oscillateur puis un contrôle (de type _LFO_) pour moduler la fréquence de cet oscillateur. Voici la méthode la plus simple que vous puissiez employer : + +```cpp +~source = {arg freq=400; SinOsc.ar(freq) * 0.5}; // Une source que l'on souhaite moduler +~source.play; +~source.set(\freq, 300); // On peut utiliser set pour une valeur statique +~freq = { SinOsc.ar(1/2) * 400 }; // Voici un LFO (Low Frequency Oscillator) +~source.map(\\freq, ~freq); // Utilisation de la fonction map +``` + +`.map` possède une fonction alternative, nommée `.xmap`. Elle fonctionne tout +comme `.set` et `.xset`. + +## Conclusion + +Dans cette section du guide, nous avons appris : + +- Ce qu'est un `NodeProxy` et un `ProxySpace`, l'outil de base offert par **JITLib** +- La différence entre `ProxySpace.push` et l'utilisation explicite des `NDefs` +- Comment démarrer, stopper et arrêter un `NodeProxy` +- Comment contrôler le _fade-in_ et le _fade-out_ et la transition entre algorithmes + +Je ne fais ici qu'effleurer les différentes commandes que possèdent les `NodeProxy`. Si vous souhaitez en apprendre plus, allez voir la documentation. Nous utiliserons un nombre limité de méthodes au fur et à mesure, lorsque nous en aurons besoin. diff --git a/static/cold_dark.css b/static/cold_dark.css new file mode 100644 index 0000000..39dd470 --- /dev/null +++ b/static/cold_dark.css @@ -0,0 +1,317 @@ +/** + * Coldark Theme for Prism.js + * Theme variation: Dark + * Tested with HTML, CSS, JS, JSON, PHP, YAML, Bash script + * @author Armand Philippot + * @homepage https://github.com/ArmandPhilippot/coldark-prism + * @license MIT + */ +code[class*="language-"], +pre[class*="language-"] { + color: #e3eaf2; + background: none; + font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + background: #3c526d; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + background: #3c526d; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0.5em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #111b27; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0.1em 0.3em; + border-radius: 0.3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #8da1b9; +} + +.token.punctuation { + color: #e3eaf2; +} + +.token.delimiter.important, +.token.selector .parent, +.token.tag, +.token.tag .token.punctuation { + color: #66cccc; +} + +.token.attr-name, +.token.boolean, +.token.boolean.important, +.token.number, +.token.constant, +.token.selector .token.attribute { + color: #e6d37a; +} + +.token.class-name, +.token.key, +.token.parameter, +.token.property, +.token.property-access, +.token.variable { + color: #6cb8e6; +} + +.token.attr-value, +.token.inserted, +.token.color, +.token.selector .token.value, +.token.string, +.token.string .token.url-link { + color: #91d076; +} + +.token.builtin, +.token.keyword-array, +.token.package, +.token.regex { + color: #f4adf4; +} + +.token.function, +.token.selector .token.class, +.token.selector .token.id { + color: #c699e3; +} + +.token.atrule .token.rule, +.token.combinator, +.token.keyword, +.token.operator, +.token.pseudo-class, +.token.pseudo-element, +.token.selector, +.token.unit { + color: #e9ae7e; +} + +.token.deleted, +.token.important { + color: #cd6660; +} + +.token.keyword-this, +.token.this { + color: #6cb8e6; +} + +.token.important, +.token.keyword-this, +.token.this, +.token.bold { + font-weight: bold; +} + +.token.delimiter.important { + font-weight: inherit; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.language-markdown .token.title, +.language-markdown .token.title .token.punctuation { + color: #6cb8e6; + font-weight: bold; +} + +.language-markdown .token.blockquote.punctuation { + color: #f4adf4; +} + +.language-markdown .token.code { + color: #66cccc; +} + +.language-markdown .token.hr.punctuation { + color: #6cb8e6; +} + +.language-markdown .token.url .token.content { + color: #91d076; +} + +.language-markdown .token.url-link { + color: #e6d37a; +} + +.language-markdown .token.list.punctuation { + color: #f4adf4; +} + +.language-markdown .token.table-header { + color: #e3eaf2; +} + +.language-json .token.operator { + color: #e3eaf2; +} + +.language-scss .token.variable { + color: #66cccc; +} + +/* overrides color-values for the Show Invisibles plugin + * https://prismjs.com/plugins/show-invisibles/ + */ +.token.token.tab:not(:empty):before, +.token.token.cr:before, +.token.token.lf:before, +.token.token.space:before { + color: #8da1b9; +} + +/* overrides color-values for the Toolbar plugin + * https://prismjs.com/plugins/toolbar/ + */ +div.code-toolbar > .toolbar.toolbar > .toolbar-item > a, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > button { + color: #111b27; + background: #6cb8e6; +} + +div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus { + color: #111b27; + background: #6cb8e6da; + text-decoration: none; +} + +div.code-toolbar > .toolbar.toolbar > .toolbar-item > span, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover, +div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus { + color: #111b27; + background: #8da1b9; +} + +/* overrides color-values for the Line Highlight plugin + * http://prismjs.com/plugins/line-highlight/ + */ +.line-highlight.line-highlight { + background: #3c526d5f; + background: linear-gradient(to right, #3c526d5f 70%, #3c526d55); +} + +.line-highlight.line-highlight:before, +.line-highlight.line-highlight[data-end]:after { + background-color: #8da1b9; + color: #111b27; + box-shadow: 0 1px #3c526d; +} + +pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before { + background-color: #8da1b918; +} + +/* overrides color-values for the Line Numbers plugin + * http://prismjs.com/plugins/line-numbers/ + */ +.line-numbers.line-numbers .line-numbers-rows { + border-right: 1px solid #0b121b; + background: #0b121b7a; +} + +.line-numbers .line-numbers-rows > span:before { + color: #8da1b9da; +} + +/* overrides color-values for the Match Braces plugin + * https://prismjs.com/plugins/match-braces/ + */ +.rainbow-braces .token.token.punctuation.brace-level-1, +.rainbow-braces .token.token.punctuation.brace-level-5, +.rainbow-braces .token.token.punctuation.brace-level-9 { + color: #e6d37a; +} + +.rainbow-braces .token.token.punctuation.brace-level-2, +.rainbow-braces .token.token.punctuation.brace-level-6, +.rainbow-braces .token.token.punctuation.brace-level-10 { + color: #f4adf4; +} + +.rainbow-braces .token.token.punctuation.brace-level-3, +.rainbow-braces .token.token.punctuation.brace-level-7, +.rainbow-braces .token.token.punctuation.brace-level-11 { + color: #6cb8e6; +} + +.rainbow-braces .token.token.punctuation.brace-level-4, +.rainbow-braces .token.token.punctuation.brace-level-8, +.rainbow-braces .token.token.punctuation.brace-level-12 { + color: #c699e3; +} + +/* overrides color-values for the Diff Highlight plugin + * https://prismjs.com/plugins/diff-highlight/ + */ +pre.diff-highlight > code .token.token.deleted:not(.prefix), +pre > code.diff-highlight .token.token.deleted:not(.prefix) { + background-color: #cd66601f; +} + +pre.diff-highlight > code .token.token.inserted:not(.prefix), +pre > code.diff-highlight .token.token.inserted:not(.prefix) { + background-color: #91d0761f; +} + +/* overrides color-values for the Command Line plugin + * https://prismjs.com/plugins/command-line/ + */ +.command-line .command-line-prompt { + border-right: 1px solid #0b121b; +} + +.command-line .command-line-prompt > span:before { + color: #8da1b9da; +} diff --git a/static/images/proxyspace.png b/static/images/proxyspace.png new file mode 100644 index 0000000..015ec4b Binary files /dev/null and b/static/images/proxyspace.png differ diff --git a/static/images/reaper_supercollider_1.png b/static/images/reaper_supercollider_1.png new file mode 100644 index 0000000..9c9508d Binary files /dev/null and b/static/images/reaper_supercollider_1.png differ diff --git a/static/images/supercollider_meme.png b/static/images/supercollider_meme.png new file mode 100644 index 0000000..13927a0 Binary files /dev/null and b/static/images/supercollider_meme.png differ diff --git a/static/images/supercollider_splash.png b/static/images/supercollider_splash.png new file mode 100644 index 0000000..5848ae6 Binary files /dev/null and b/static/images/supercollider_splash.png differ diff --git a/svelte.config.js b/svelte.config.js index 75f7d84..12ecb78 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -16,7 +16,7 @@ const config = { // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. // If your environment is not supported or you settled on a specific environment, switch out the adapter. // See https://kit.svelte.dev/docs/adapters for more information about adapters. - adapter: adapter({ + adapter: adapter({ precompress: true, pages: "dist", }), diff --git a/yarn.lock b/yarn.lock index 413617b..f7fef14 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1320,7 +1320,7 @@ prism-svelte@^0.4.7: resolved "https://registry.yarnpkg.com/prism-svelte/-/prism-svelte-0.4.7.tgz#fbc6709450b4e2ed660ddb82c3718817fc584cbe" integrity sha512-yABh19CYbM24V7aS7TuPYRNMqthxwbvx6FF/Rw920YbyBWO3tnyPIqRMgHuSVsLmuHkkBS1Akyof463FVdkeDQ== -prismjs@^1.17.1: +prismjs@^1.17.1, prismjs@^1.29.0: version "1.29.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==