diff --git a/.gitignore b/.gitignore index c75eecc..e69de29 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +0,0 @@ -/public diff --git a/hugo.toml b/hugo.toml index 05b1f39..6b11d28 100644 --- a/hugo.toml +++ b/hugo.toml @@ -1,6 +1,6 @@ -baseURL = 'https://example.org/' +baseURL = 'https://fedesrv.ddns.net/' languageCode = 'en-us' -title = 'My New Hugo Site' +title = 'Blog Fede' [params] author = "Federico Polidoro" diff --git a/public/a/index.xml b/public/a/index.xml new file mode 100644 index 0000000..f36f41d --- /dev/null +++ b/public/a/index.xml @@ -0,0 +1,12 @@ + + + + As on My New Hugo Site + http://localhost:1313/a/ + Recent content in As on My New Hugo Site + Hugo + en-us + + + + diff --git a/public/categories/index.xml b/public/categories/index.xml index 216aed4..cbbf6e2 100644 --- a/public/categories/index.xml +++ b/public/categories/index.xml @@ -1,11 +1,11 @@ - Categories on My New Hugo Site - http://localhost:1313/categories/ - Recent content in Categories on My New Hugo Site + Categories on Blog Fede + https://fedesrv.ddns.net/categories/ + Recent content in Categories on Blog Fede Hugo en-us - + diff --git a/public/cover copy.png b/public/cover copy.png new file mode 100644 index 0000000..a9813cf Binary files /dev/null and b/public/cover copy.png differ diff --git a/public/cover.jpg b/public/cover.jpg new file mode 100644 index 0000000..05e11a9 Binary files /dev/null and b/public/cover.jpg differ diff --git a/public/cover.png b/public/cover.png new file mode 100644 index 0000000..e1f66d7 Binary files /dev/null and b/public/cover.png differ diff --git a/public/cover2.png b/public/cover2.png new file mode 100644 index 0000000..a9813cf Binary files /dev/null and b/public/cover2.png differ diff --git a/public/css/main.css b/public/css/main.css index fc5ce96..c434748 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -1,2 +1,2 @@ /*! tailwindcss v4.1.3 | MIT License | https://tailwindcss.com */ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:rotateX(0);--tw-rotate-y:rotateY(0);--tw-rotate-z:rotateZ(0);--tw-skew-x:skewX(0);--tw-skew-y:skewY(0);--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-emerald-500:oklch(69.6% .17 162.48);--color-cyan-200:oklch(91.7% .08 205.041);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-700:oklch(48.8% .243 264.376);--color-slate-800:oklch(27.9% .041 260.031);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-thin:100;--font-weight-light:300;--font-weight-semibold:600;--font-weight-bold:700;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-bounce:bounce 1s infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.top-0{top:calc(var(--spacing)*0)}.top-16{top:calc(var(--spacing)*16)}.right-0{right:calc(var(--spacing)*0)}.bottom-8{bottom:calc(var(--spacing)*8)}.-z-0{z-index:calc(0*-1)}.-z-1{z-index:calc(1*-1)}.-z-10{z-index:calc(10*-1)}.z-0{z-index:0}.z-1{z-index:1}.z-40{z-index:40}.z-50{z-index:50}.float-left{float:left}.float-right{float:right}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-4{margin:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-6{height:calc(var(--spacing)*6)}.h-16{height:calc(var(--spacing)*16)}.h-48{height:calc(var(--spacing)*48)}.h-80{height:calc(var(--spacing)*80)}.h-full{height:100%}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-6{width:calc(var(--spacing)*6)}.w-22{width:calc(var(--spacing)*22)}.w-64{width:calc(var(--spacing)*64)}.w-\[2px\]{width:2px}.w-\[80\%\]{width:80%}.w-full{width:100%}.w-screen{width:100vw}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}.animate-bounce{animation:var(--animate-bounce)}.cursor-context-menu{cursor:context-menu}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-center-safe{justify-content:safe center}.gap-2{gap:calc(var(--spacing)*2)}.gap-6{gap:calc(var(--spacing)*6)}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-s-2{border-inline-start-style:var(--tw-border-style);border-inline-start-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-solid{--tw-border-style:solid;border-style:solid}.border-gray-400{border-color:var(--color-gray-400)}.border-r-transparent{border-right-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-black{background-color:var(--color-black)}.bg-cyan-200{background-color:var(--color-cyan-200)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-white{background-color:var(--color-white)}.bg-\[radial-gradient\(circle\,rgba\(0\,0\,0\,0\)_0\%\,rgba\(0\,0\,0\,0\.5\)_70\%\,\#ffffff_100\%\)\,repeating-linear-gradient\(45deg\,\#000000\,\#000000_10px\,\#ffffff_10px\,\#ffffff_20px\)\]{background-image:radial-gradient(circle,#0000 0%,#00000080 70%,#fff 100%),repeating-linear-gradient(45deg,#000,#000 10px,#fff 10px 20px)}.bg-\[repeating-linear-gradient\(transparent\,transparent_27px\,\#333_28px\)\]{background-image:repeating-linear-gradient(#0000,#0000 27px,#333 28px)}.bg-\[size\:100\%_28px\]{background-size:100% 28px}.object-cover{object-fit:cover}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.p-8{padding:calc(var(--spacing)*8)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-16{padding-top:calc(var(--spacing)*16)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.whitespace-nowrap{white-space:nowrap}.text-black{color:var(--color-black)}.text-blue-500{color:var(--color-blue-500)}.text-gray-300{color:var(--color-gray-300)}.text-gray-500{color:var(--color-gray-500)}.text-gray-700{color:var(--color-gray-700)}.text-white{color:var(--color-white)}.italic{font-style:italic}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_6px_-1px_rgb\(107\,114\,128\)\]{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#6b7280);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}@media (hover:hover){.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:grayscale-0:hover{--tw-grayscale:grayscale(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}@media (min-width:40rem){.sm\:mb-0{margin-bottom:calc(var(--spacing)*0)}.sm\:flex{display:flex}.sm\:flex-row{flex-direction:row}.sm\:px-2{padding-inline:calc(var(--spacing)*2)}}@media (min-width:48rem){.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:px-16{padding-inline:calc(var(--spacing)*16)}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media (min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:px-32{padding-inline:calc(var(--spacing)*32)}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}}@media (prefers-color-scheme:dark){.dark\:border-white{border-color:var(--color-white)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-emerald-500{background-color:var(--color-emerald-500)}.dark\:bg-\[repeating-linear-gradient\(transparent\,transparent_27px\,\#aaa_28px\)\]{background-image:repeating-linear-gradient(#0000,#0000 27px,#aaa 28px)}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}} \ No newline at end of file +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:rotateX(0);--tw-rotate-y:rotateY(0);--tw-rotate-z:rotateZ(0);--tw-skew-x:skewX(0);--tw-skew-y:skewY(0);--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-emerald-500:oklch(69.6% .17 162.48);--color-cyan-200:oklch(91.7% .08 205.041);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-700:oklch(48.8% .243 264.376);--color-slate-800:oklch(27.9% .041 260.031);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-thin:100;--font-weight-light:300;--font-weight-semibold:600;--font-weight-bold:700;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-bounce:bounce 1s infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.top-0{top:calc(var(--spacing)*0)}.top-16{top:calc(var(--spacing)*16)}.right-0{right:calc(var(--spacing)*0)}.bottom-8{bottom:calc(var(--spacing)*8)}.-z-0{z-index:calc(0*-1)}.-z-1{z-index:calc(1*-1)}.-z-10{z-index:calc(10*-1)}.z-0{z-index:0}.z-1{z-index:1}.z-40{z-index:40}.z-50{z-index:50}.float-left{float:left}.float-right{float:right}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-4{margin:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-6{height:calc(var(--spacing)*6)}.h-16{height:calc(var(--spacing)*16)}.h-48{height:calc(var(--spacing)*48)}.h-80{height:calc(var(--spacing)*80)}.h-full{height:100%}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-6{width:calc(var(--spacing)*6)}.w-22{width:calc(var(--spacing)*22)}.w-64{width:calc(var(--spacing)*64)}.w-\[2px\]{width:2px}.w-\[80\%\]{width:80%}.w-full{width:100%}.w-screen{width:100vw}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}.animate-bounce{animation:var(--animate-bounce)}.cursor-context-menu{cursor:context-menu}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-center-safe{justify-content:safe center}.gap-2{gap:calc(var(--spacing)*2)}.gap-6{gap:calc(var(--spacing)*6)}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-s-2{border-inline-start-style:var(--tw-border-style);border-inline-start-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-solid{--tw-border-style:solid;border-style:solid}.border-gray-400{border-color:var(--color-gray-400)}.border-r-transparent{border-right-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-black{background-color:var(--color-black)}.bg-cyan-200{background-color:var(--color-cyan-200)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-white{background-color:var(--color-white)}.bg-\[radial-gradient\(circle\,rgba\(0\,0\,0\,0\)_0\%\,rgba\(0\,0\,0\,0\.5\)_70\%\,\#ffffff_100\%\)\,repeating-linear-gradient\(45deg\,\#000000\,\#000000_10px\,\#ffffff_10px\,\#ffffff_20px\)\]{background-image:radial-gradient(circle,#0000 0%,#00000080 70%,#fff 100%),repeating-linear-gradient(45deg,#000,#000 10px,#fff 10px 20px)}.bg-\[repeating-linear-gradient\(transparent\,transparent_27px\,\#333_28px\)\]{background-image:repeating-linear-gradient(#0000,#0000 27px,#333 28px)}.bg-\[size\:100\%_28px\]{background-size:100% 28px}.object-cover{object-fit:cover}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.p-8{padding:calc(var(--spacing)*8)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-16{padding-top:calc(var(--spacing)*16)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.whitespace-nowrap{white-space:nowrap}.text-black{color:var(--color-black)}.text-blue-500{color:var(--color-blue-500)}.text-gray-300{color:var(--color-gray-300)}.text-gray-500{color:var(--color-gray-500)}.text-gray-700{color:var(--color-gray-700)}.text-white{color:var(--color-white)}.italic{font-style:italic}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_6px_-1px_rgb\(107\,114\,128\)\]{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#6b7280);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}@media (hover:hover){.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:grayscale-0:hover{--tw-grayscale:grayscale(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}@media (min-width:40rem){.sm\:mb-0{margin-bottom:calc(var(--spacing)*0)}.sm\:flex{display:flex}.sm\:flex-row{flex-direction:row}.sm\:px-2{padding-inline:calc(var(--spacing)*2)}}@media (min-width:48rem){.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:px-16{padding-inline:calc(var(--spacing)*16)}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media (min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:px-32{padding-inline:calc(var(--spacing)*32)}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}}@media (prefers-color-scheme:dark){.dark\:border-white{border-color:var(--color-white)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-emerald-500{background-color:var(--color-emerald-500)}.dark\:bg-\[repeating-linear-gradient\(transparent\,transparent_27px\,\#aaa_28px\)\]{background-image:repeating-linear-gradient(#0000,#0000 27px,#aaa 28px)}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}} \ No newline at end of file diff --git a/public/css/styles.css b/public/css/styles.css new file mode 100644 index 0000000..82cc789 --- /dev/null +++ b/public/css/styles.css @@ -0,0 +1,51 @@ +article { + display: flex; + flex-flow: column; + line-height: 1lh; + + background-color: whitesmoke; + + img{ + margin-top: 1lh; + } + + h1{ + font-size: 2rem; + margin-top:1lh; + text-align: center; + } + + h1::before{ + content:"# "; + opacity: 0.5; + } + + h2{ + font-size: 1.7rem; + margin-top:1lh; + text-align: left; + } + + h2::before{ + content:"## "; + opacity: 0.4; + } + + ol, pre { + margin-top:0.8rem; + } + + p{ + line-height:1lh; + margin-top:0.5lh; + } + + img{ + display: block; + margin-left: auto; + margin-right: auto; + padding: 0%; + box-shadow: 12px 12px 10px rgba(0, 0, 0, 0.5); + } +} + diff --git a/public/index.html b/public/index.html index b25c9c7..47588c7 100644 --- a/public/index.html +++ b/public/index.html @@ -1,10 +1,10 @@ - + - My New Hugo Site + Blog Fede @@ -203,7 +203,7 @@
Ver más @@ -232,7 +232,7 @@
Ver más @@ -261,7 +261,7 @@
Ver más @@ -297,7 +297,7 @@
Leer más @@ -329,7 +329,7 @@
Leer más @@ -361,7 +361,7 @@
Leer más @@ -393,7 +393,7 @@
Leer más @@ -427,7 +427,7 @@
Leer más @@ -460,7 +460,7 @@ Si utilizan arch sabrán que se pueden configurar ‘hooks&
Leer más diff --git a/public/index.xml b/public/index.xml index 08bdf46..2e538a7 100644 --- a/public/index.xml +++ b/public/index.xml @@ -1,102 +1,102 @@ - My New Hugo Site - http://localhost:1313/ - Recent content on My New Hugo Site + Blog Fede + https://fedesrv.ddns.net/ + Recent content on Blog Fede Hugo en-us Fri, 02 May 2025 02:13:53 -0300 - + Panel Web - http://localhost:1313/proyectos/paneldb/ + https://fedesrv.ddns.net/proyectos/paneldb/ Fri, 02 May 2025 02:13:53 -0300 - http://localhost:1313/proyectos/paneldb/ + https://fedesrv.ddns.net/proyectos/paneldb/ <p>Este panel web es una herramienta de visualización y análisis de datos para una cadena hotelera, desarrollado como trabajo final para el curso de Base de Datos Aplicada. El sistema permite explorar métricas clave de rendimiento a través de una estructura jerárquica de tres niveles.</p> <h2 id="arquitectura-técnica">Arquitectura Técnica</h2> <h3 id="backend">Backend</h3> <ul> <li>ASP.NET Core 7</li> <li>Entity Framework Core para acceso a datos</li> <li>API RESTful para comunicación con el frontend</li> <li>Autenticación JWT para seguridad</li> </ul> <h3 id="frontend">Frontend</h3> <ul> <li>React (18.x)</li> <li>Material UI para componentes de interfaz</li> <li>ChartJS para visualización de datos</li> <li>React Router para navegación entre secciones</li> </ul> <h2 id="estructura-de-navegación-drilling">Estructura de Navegación (Drilling)</h2> <p>El panel implementa un sistema de navegación jerárquica de tres niveles:</p> Gestor de Stock - http://localhost:1313/proyectos/controlstock/ + https://fedesrv.ddns.net/proyectos/controlstock/ Fri, 02 May 2025 02:10:53 -0300 - http://localhost:1313/proyectos/controlstock/ + https://fedesrv.ddns.net/proyectos/controlstock/ <p>Este sistema de gestión de inventario está desarrollado en C# utilizando Windows Forms. La aplicación permite administrar eficientemente el stock de productos, registrar ventas, gestionar pedidos a proveedores y verificar remitos de entrega.</p> <h2 id="características-principales">Características Principales</h2> <h3 id="gestión-de-productos">Gestión de Productos</h3> <ul> <li>Alta, baja y modificación de productos</li> <li>Categorización de inventario</li> <li>Control de stock mínimo y máximo</li> <li>Alertas de stock bajo</li> </ul> <h3 id="registro-de-ventas">Registro de Ventas</h3> <ul> <li>Generación de facturas</li> <li>Historial de ventas</li> <li>Seguimiento de productos vendidos</li> <li>Estadísticas de ventas</li> </ul> <h3 id="pedidos-a-proveedores">Pedidos a Proveedores</h3> <ul> <li>Creación automática de órdenes de compra</li> <li>Seguimiento de pedidos pendientes</li> <li>Historial de pedidos</li> </ul> <h3 id="verificación-de-remitos">Verificación de Remitos</h3> <ul> <li>Control de recepción de mercadería</li> <li>Validación de cantidades y productos</li> <li>Registro de discrepancias</li> <li>Alertas de productos faltantes</li> <li>Conformidad de recepción</li> </ul> <h2 id="tecnologías-utilizadas">Tecnologías Utilizadas</h2> <ul> <li>C# (.NET Framework)</li> <li>Windows Forms</li> <li>SQL Server (Base de datos)</li> <li>Entity Framework</li> </ul> <h2 id="capturas-de-pantalla-wip">Capturas de Pantalla (WIP)</h2> <p><em>(Aquí se insertarían capturas de las principales pantallas del sistema)</em></p> CoordKeeper - http://localhost:1313/proyectos/coordkeeper/ + https://fedesrv.ddns.net/proyectos/coordkeeper/ Fri, 02 May 2025 01:47:53 -0300 - http://localhost:1313/proyectos/coordkeeper/ + https://fedesrv.ddns.net/proyectos/coordkeeper/ <p>es una aplicación web desarrollada con React diseñada específicamente para jugadores de Minecraft. Esta herramienta permite a los usuarios almacenar, organizar y gestionar fácilmente las coordenadas de ubicaciones importantes dentro del juego.</p> <h2 id="características">Características</h2> <ul> <li>Almacenamiento de coordenadas X, Y, Z de lugares importantes</li> <li>Organización por Dimensiones</li> <li>Interfaz intuitiva y fácil de usar</li> <li>Acceso rápido a tus coordenadas guardadas</li> </ul> <p>Ya no tendrás que depender de notas dispersas o capturas de pantalla para recordar dónde encontraste ese templo submarino o aquella cueva de diamantes. CoordKeeper mantiene toda esta información organizada en un solo lugar.</p> Coord Keeper - http://localhost:1313/posts/coord-keeper/ + https://fedesrv.ddns.net/posts/coord-keeper/ Wed, 19 Mar 2025 02:53:57 -0300 - http://localhost:1313/posts/coord-keeper/ + https://fedesrv.ddns.net/posts/coord-keeper/ <h1 id="motivacion">Motivacion</h1> <p>He notado que en versiones actuales de minecraft han puesto mucha informacion en el menu de debug (el <!-- raw HTML omitted -->f3<!-- raw HTML omitted -->) lo que lo hace cada vez más hostil al jugador promedio intentar encontrar la linea con las coordenadas de donde esta y poderse comunicar con la gente en el mismo servidor, es obvio que esto es totalmente intencionado. Entiendo que el objetivo es que uses las herramientas dadas por los diseñadores del videojuego para poder localizarte. Pero yo necesito una forma de poder guardar las coordenadas localmente en mi computadora. aunque podria haber usado un block de notas para almacenarlas me decidí por hacer algo más inproductivo&hellip;. hacer una app de react.</p> Sistema Alquileres DevLog n1 - http://localhost:1313/posts/sist_alquileres_devlog_1/ + https://fedesrv.ddns.net/posts/sist_alquileres_devlog_1/ Sun, 10 Nov 2024 00:08:17 +0800 - http://localhost:1313/posts/sist_alquileres_devlog_1/ + https://fedesrv.ddns.net/posts/sist_alquileres_devlog_1/ <h1 id="que-es-esto">¿Que es esto?</h1> <p>Estas son pequeñas updates que voy a estar haciendo sobre el proyecto final mio de &ldquo;Ingenieria de Software&rdquo; (asi se llama la materia). El cual consiste de un sistema de gestion de alquileres. Pensado para tener varios tipos de usuario como un propietario que carge las propiedades que desea publicar siempre y cuando este verificado que le pertenecen a él y un inquilino el cual podra efectuar busquedas de propiedades para alquilas, ver el estado de los alquileres, y pagar los alquileres que sean correpondientes.</p> Fix Screen Tear x11 - http://localhost:1313/posts/fix_screen_tear_xfce/ + https://fedesrv.ddns.net/posts/fix_screen_tear_xfce/ Sat, 09 Nov 2024 13:28:17 +0800 - http://localhost:1313/posts/fix_screen_tear_xfce/ + https://fedesrv.ddns.net/posts/fix_screen_tear_xfce/ <h1 id="que-es-el-screen-tear">¿Que es el screen tear?</h1> <p>buenas, Si alguna vez instalaron un wm liviano en linux que no use wayland seguramente habrán notado que al momento de mover una ventana en el escritorio o ver un video sucede algo de este estilo.</p> <p><img src="https://qph.cf2.quoracdn.net/main-qimg-4994dca8fc9979e8a10d3422cb5f7bcb" alt="Imagen sacada de google donde se demuestra el screen tear"></p> <p>Donde la imagen se ve recortada por algunos milisegundos. A mi se me hace muy molesto a la vista cuando estoy mucho tiempo (relativamente) delante de la pantalla.</p> String Interpolation - http://localhost:1313/posts/string-interpolation/ + https://fedesrv.ddns.net/posts/string-interpolation/ Tue, 24 Oct 2023 22:24:17 +0800 - http://localhost:1313/posts/string-interpolation/ + https://fedesrv.ddns.net/posts/string-interpolation/ <h1 id="que-es">¿Que es?</h1> <p>Es un proceso de evaluado, en el cual se reemplazan placeholders en <code>string</code> por valores, en nuestro caso, de variables en momento de ejecución.</p> <h1 id="sintaxis">Sintaxis</h1> <pre><code>var manzanas = 4; var bananas = 3; Console.WriteLine($&quot;Tengo {manzanas} manzanas&quot;); Console.WriteLine($&quot;Vendí {manzanas + bananas} frutas&quot;); </code></pre> <blockquote> <p>Basicamente son plantillas.</p></blockquote> Anuncio Aoc 2023 - http://localhost:1313/posts/anuncio-aoc-2023/ + https://fedesrv.ddns.net/posts/anuncio-aoc-2023/ Tue, 03 Oct 2023 12:54:22 -0300 - http://localhost:1313/posts/anuncio-aoc-2023/ + https://fedesrv.ddns.net/posts/anuncio-aoc-2023/ <h1 id="que-es-advent-of-code">¿Que es Advent of Code?</h1> <p>Son un grupo de puzzles de programacion presentados en forma de calendario que suelen ser utizados como:</p> <ul> <li>Preparacion de entrevistas.</li> <li>Training en empresas.</li> <li>Practica para familiarizarse con nuevos lenguajes de programacion.</li> <li><em>etc&hellip;</em></li> </ul> <h1 id="que-tengo-pensado">Que tengo pensado</h1> <p>Cerca de fin de año voy a hacer todos los dias de esa edicion de advent of code usando <code>zig</code> como un ejercicio para aprender ese lenguaje de programacion <code>(aunque de forma básica)</code>.</p> Bootloader Incident - http://localhost:1313/posts/bootloaderincident/ + https://fedesrv.ddns.net/posts/bootloaderincident/ Tue, 26 Sep 2023 22:27:20 -0300 - http://localhost:1313/posts/bootloaderincident/ + https://fedesrv.ddns.net/posts/bootloaderincident/ <h1 id="el-inicio-de-la-catastrofe">El inicio de la catastrofe</h1> <p>En pocas palabras, <strong>Nunca Corten Un <code>pacman -Syu</code></strong>.<br> Si utilizan <strong>arch</strong> sabrán que se pueden configurar &lsquo;hooks&rsquo; antes y despues de las operaciones con el comando <code>pacman</code>, uno de estos era responsable de actualizar la entrada en el bootloader (uso systemd-boot btw). Al haber cortado sin querer este proceso me quedé sin entrada en el bootloader para linux y solo podia volver al menu de la <strong>UEFI</strong>.</p> Imagenes: Color a b&w - http://localhost:1313/posts/pasar-imagenes-a-blanco-y-negro/ + https://fedesrv.ddns.net/posts/pasar-imagenes-a-blanco-y-negro/ Sat, 23 Sep 2023 10:35:18 -0300 - http://localhost:1313/posts/pasar-imagenes-a-blanco-y-negro/ - <h1 id="gimp">Gimp</h1> <p>Hay varias formas de pasar una imagen a blanco y negro. yo prefiero la de usar <strong>Gimp</strong> con la opcion de <code>Color &gt; Desaturacion &gt; Color a gama de grises</code>. Pero voy a listar un par de métodos alternativos para obtener el ~mismo resultado.<br> <img src="http://localhost:1313/fedecomp.png" alt="Comparación"></p> <h1 id="imagemagick">ImageMagick</h1> <blockquote> <p>Es un conjunto de utilidades de código abierto​ para mostrar, manipular y convertir imágenes, capaz de leer y escribir más de 200 formatos.​</p></blockquote> <p>Una de esas utilidades es llamada <code>convert</code>, la cual acepta un archivo y convierte este a el formato que se le especifique. Existe una flag llamada <code>-colorspace</code> la cual si le damos el parametro <strong>Gray</strong> la imagen resultante estará representada en una gama de grises. <img src="http://localhost:1313/fedeg.jpg" alt="Imagen en gama de grises"></p> + https://fedesrv.ddns.net/posts/pasar-imagenes-a-blanco-y-negro/ + <h1 id="gimp">Gimp</h1> <p>Hay varias formas de pasar una imagen a blanco y negro. yo prefiero la de usar <strong>Gimp</strong> con la opcion de <code>Color &gt; Desaturacion &gt; Color a gama de grises</code>. Pero voy a listar un par de métodos alternativos para obtener el ~mismo resultado.<br> <img src="https://fedesrv.ddns.net/fedecomp.png" alt="Comparación"></p> <h1 id="imagemagick">ImageMagick</h1> <blockquote> <p>Es un conjunto de utilidades de código abierto​ para mostrar, manipular y convertir imágenes, capaz de leer y escribir más de 200 formatos.​</p></blockquote> <p>Una de esas utilidades es llamada <code>convert</code>, la cual acepta un archivo y convierte este a el formato que se le especifique. Existe una flag llamada <code>-colorspace</code> la cual si le damos el parametro <strong>Gray</strong> la imagen resultante estará representada en una gama de grises. <img src="https://fedesrv.ddns.net/fedeg.jpg" alt="Imagen en gama de grises"></p> Diseño de Software Incident - http://localhost:1313/posts/dise%C3%B1o-de-software-incident/ + https://fedesrv.ddns.net/posts/dise%C3%B1o-de-software-incident/ Fri, 22 Sep 2023 15:08:17 +0800 - http://localhost:1313/posts/dise%C3%B1o-de-software-incident/ + https://fedesrv.ddns.net/posts/dise%C3%B1o-de-software-incident/ <h1 id="instanciacion-del-sqlconnection">Instanciacion del SqlConnection</h1> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> (<span style="color:#66d9ef">var</span> connection = <span style="color:#66d9ef">new</span> SqlConnection(configuration.GetConnectionString(<span style="color:#e6db74">&#34;DefaultConnection&#34;</span>))) </span></span></code></pre></div><p>Eso genera un sql connection que va a existir hasta que salga del scope del programa.</p> <h1 id="creacion-del-sqlcommand">Creacion del SqlCommand</h1> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> var command = <span style="color:#66d9ef">new</span> SqlCommand(); </span></span><span style="display:flex;"><span>command.CommandText = <span style="color:#e6db74">&#34;sp_RecuperaProductos&#34;</span>; </span></span><span style="display:flex;"><span>command.CommandType = System.Data.CommandType.StoredProcedure; </span></span></code></pre></div><h1 id="apertura-de-la-coneccion">Apertura de la coneccion</h1> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span>command.Connection = connection; </span></span><span style="display:flex;"><span>command.Connection.Open(); </span></span></code></pre></div><h2 id="utilizacion-del-executereader">Utilizacion del ExecuteReader</h2> <p>Es un choclo pero basicamente el codigo de abajo se encarga de iterar por cada uno de las entradas de la tabla. <strong>MUY</strong> importante, se tiene que añadir los productos dentro del loop principal del reader ya que lo que no se guarde en cada iteracion se pierde. (los maps no son case sensitive).</p> RetroArchivements - http://localhost:1313/posts/retroarchivements/ + https://fedesrv.ddns.net/posts/retroarchivements/ Fri, 22 Sep 2023 13:30:17 +0800 - http://localhost:1313/posts/retroarchivements/ + https://fedesrv.ddns.net/posts/retroarchivements/ <p>Hace ya un par de dias que estoy usando un <a href="https://retroachievements.org/user/fedpo2">servicio</a> que implementa una api para trackear tu progreso en distintos juegos retro y no tan retro.</p> <p>Uno de los que estoy jugando es <code>Kirby's dream land 2</code><br> <img src="https://media.retroachievements.org/Images/046585.png" alt="kirby"></p> Primer Post - http://localhost:1313/posts/sample-post/ + https://fedesrv.ddns.net/posts/sample-post/ Fri, 22 Sep 2023 12:28:17 +0800 - http://localhost:1313/posts/sample-post/ + https://fedesrv.ddns.net/posts/sample-post/ <h1 id="buenas">buenas</h1> <p>buenas Luego de sufrir bastante con el nginx y su <em>Reverse Proxy</em>, finalmente me decidí por poner la pagina del blog en el <strong>WebRoot</strong> y el <em>gitea</em> en un subfolder.</p> <h2 id="como-funciona-esto">Como funciona esto</h2> <p>El programa que estoy usando para hacer este blog se llama <a href="https://gohugo.io">Hugo</a>, consiste de una especie de parceador de <a href="https://www.markdownguide.org/">Markdown</a> a Html estático el cual hosteo con este <a href="https://nginx.org/en/">webServer</a>.</p> <h3 id="como-hago-nuevos-posts">Como hago nuevos posts</h3> <p>Dentro de la carpeta del proyecto del server hay una que se llama content, todos los <code>.md</code> que haya ahí cuando utilizo el comando:</p> diff --git a/public/posts/anuncio-aoc-2023/index.html b/public/posts/anuncio-aoc-2023/index.html new file mode 100644 index 0000000..a53c2ed --- /dev/null +++ b/public/posts/anuncio-aoc-2023/index.html @@ -0,0 +1,152 @@ + + + + + + Anuncio Aoc 2023 + + + + + + +
+ + + + +
+ +
+

Anuncio Aoc 2023

+

Fecha: 03 Oct 2023

+
+
+
+

¿Que es Advent of Code?

+

Son un grupo de puzzles de programacion presentados en forma de calendario que suelen ser utizados como:

+
    +
  • Preparacion de entrevistas.
  • +
  • Training en empresas.
  • +
  • Practica para familiarizarse con nuevos lenguajes de programacion.
  • +
  • etc…
  • +
+

Que tengo pensado

+

Cerca de fin de año voy a hacer todos los dias de esa edicion de advent of code usando zig como un ejercicio para aprender ese lenguaje de programacion (aunque de forma básica).

+
+
+ +
+
+
+ © 2025 Federico Polidoro +
+ + diff --git a/public/posts/bootloaderincident/index.html b/public/posts/bootloaderincident/index.html new file mode 100644 index 0000000..f5f041d --- /dev/null +++ b/public/posts/bootloaderincident/index.html @@ -0,0 +1,150 @@ + + + + + + Bootloader Incident + + + + + + +
+ + + + +
+ +
+

Bootloader Incident

+

Fecha: 26 Sep 2023

+
+
+
+

El inicio de la catastrofe

+

En pocas palabras, Nunca Corten Un pacman -Syu.
+Si utilizan arch sabrán que se pueden configurar ‘hooks’ antes y despues de las operaciones con el comando pacman, uno de estos era responsable de actualizar la entrada en el bootloader (uso systemd-boot btw). Al haber cortado sin querer este proceso me quedé sin entrada en el bootloader para linux y solo podia volver al menu de la UEFI.

+

Posibles Soluciones

+

Opcion Atomica

+

Consiste en reinstalar linux desde 0. ( pero no desde scratch 😳 ). Obviamente es una terrible idea pero es una a la que en otro momento antes de haber aprendido a usar arch hubiera solucionado de esa forma.

+

Lo que termine haciendo

+

Gracias a que tenia una lectora de dvds con un dvd de Linux, pude utilizar mount y chroot para acceder a la particion con todos mis datos, una vez en este punto reinstalé el kernel (pacman -S linux) para que se activen los hooks que corresponden a actualizar la información sobre las opciones de arranque del bootloader.

+
+
+ +
+
+
+ © 2025 Federico Polidoro +
+ + diff --git a/public/posts/coord-keeper/index.html b/public/posts/coord-keeper/index.html new file mode 100644 index 0000000..a5130c5 --- /dev/null +++ b/public/posts/coord-keeper/index.html @@ -0,0 +1,152 @@ + + + + + + Coord Keeper + + + + + + +
+ + + + +
+ + + +
+

Coord Keeper

+

Fecha: 19 Mar 2025

+
+
+
+

Motivacion

+

He notado que en versiones actuales de minecraft han puesto mucha informacion en el menu de debug (el f3) lo que lo hace cada vez más hostil al jugador promedio intentar encontrar la linea con las coordenadas de donde esta y poderse comunicar con la gente en el mismo servidor, es obvio que esto es totalmente intencionado. Entiendo que el objetivo es que uses las herramientas dadas por los diseñadores del videojuego para poder localizarte. Pero yo necesito una forma de poder guardar las coordenadas localmente en mi computadora. aunque podria haber usado un block de notas para almacenarlas me decidí por hacer algo más inproductivo…. hacer una app de react.

+

Así que presento Coord-Keeper una app nefasta de React para guardar, compartir y importar Coordenas de minecraft. !!!11!!!

+

Esta disponible en Coord-keeper

+

su codigo fuente esta en mi instancia de gitea.

+
+
+ +
+
+
+ © 2025 Federico Polidoro +
+ + diff --git a/public/posts/diseño-de-software-incident/index.html b/public/posts/diseño-de-software-incident/index.html new file mode 100644 index 0000000..f05f9fd --- /dev/null +++ b/public/posts/diseño-de-software-incident/index.html @@ -0,0 +1,208 @@ + + + + + + Diseño de Software Incident + + + + + + +
+ + + + +
+ +
+

Diseño de Software Incident

+

Fecha: 22 Sep 2023

+
+
+
+

Instanciacion del SqlConnection

+
using (var connection = new SqlConnection(configuration.GetConnectionString("DefaultConnection")))
+

Eso genera un sql connection que va a existir hasta que salga del scope del programa.

+

Creacion del SqlCommand

+
using var command = new SqlCommand();
+command.CommandText = "sp_RecuperaProductos";
+command.CommandType = System.Data.CommandType.StoredProcedure;
+

Apertura de la coneccion

+
command.Connection = connection;
+command.Connection.Open();
+

Utilizacion del ExecuteReader

+

Es un choclo pero basicamente el codigo de abajo se encarga de iterar por cada uno de las entradas de la tabla. MUY importante, se tiene que añadir los productos dentro del loop principal del reader ya que lo que no se guarde en cada iteracion se pierde. (los maps no son case sensitive).

+
var reader = command.ExecuteReader();
+while (reader.Read())//lee a traves de todas las filas que existen en la tabla
+{
+    //por cada fila que creo tengo que asignar manualmente cada columna con cada propiedad
+    var producto = new Producto();
+    producto.Codigo = reader["Codigo"].ToString();
+    producto.Nombre = reader["Nombre"].ToString();
+    producto.Cantidad = Convert.ToInt32(reader["Cantidad"].ToString());
+    producto.CantidadMinima = Convert.ToInt32(reader["CantidadMinima"].ToString());
+    producto.Precio = Convert.ToDecimal(reader["Precio"].ToString());
+    var codigoCategoria = reader["CodigoCategoria"].ToString();
+    producto.Categoria = RepositorioCategorias.Instancia.RecuperarCategorias().FirstOrDefault(c => c.Codigo == codigoCategoria);
+    //////////////////////////////////////////////////////////////////////////////////////
+    //////////////////////////////////////////////////////////////////////////////////////
+    using var commandProveedores = new SqlCommand();
+    //otra forma de hacerlo es usando Store Procedures
+    commandProveedores.CommandText = "sp_RecuperarProveedoresProducto";
+    commandProveedores.CommandType = System.Data.CommandType.StoredProcedure;
+    commandProveedores.Parameters.Add("@CodigoProducto", System.Data.SqlDbType.NVarChar,25).Value = producto.Codigo;
+    /////////////////////////
+    commandProveedores.Connection = connection;
+    var readerProveedoresProducto = command.ExecuteReader();
+    while (readerProveedoresProducto.Read())//lee a traves de todas las filas que existen en la tabla
+    {
+        var codigoProveedor = readerProveedoresProducto["CodigoProveedor"].ToString();
+        var proveedor = RepositorioProveedores.Instancia.RecuperarProveedores().FirstOrDefault(x => x.Codigo == codigoProveedor);
+        producto.AgregarProveedor(proveedor);
+        //una vez cargado el objeto completo lo agrego a la coleccion
+
+    }
+productos.Add(producto);
+}
+

Cerrado de la coneccion

+

NOTA: no ser mamerto y cerrar la coneccion fuera del while-loop.

+
command.Connection.Close();
+

Sub-Query

+
using var commandProveedores = new SqlCommand();
+
+commandProveedores.CommandType = System.Data.CommandType.StoredProcedure;
+commandProveedores.CommandText = "SP_AGREGARPROVEEDORPRODUCTO";
+commandProveedores.Connection = connection;
+commandProveedores.Transaction = sqlTransaction;
+commandProveedores.Parameters.Add("@CodigoProducto", System.Data.SqlDbType.NVarChar,25).Value = producto.Codigo;
+commandProveedores.Parameters.Add("@CodigoProveedor", System.Data.SqlDbType.NVarChar, 25);
+foreach (var proveedor in producto.Proveedores)
+{
+    commandProveedores.Parameters["CodigoProveedor"].Value = proveedor.Codigo;
+    commandProveedores.ExecuteNonQuery();
+}
+

Non-Query

+

Un query es una consulta de tipo UPDATE, INSERT, DELETE, para el ExecuteNonQuery se devuelve la cantidad de ramas afectadas, menos en el uso de un StoredProcedure donde devuelve -1.

+

Notas

+
+

" Si compila y anda, aprueba " ~Laureano

+
+
+ +
+
+
+ © 2025 Federico Polidoro +
+ + diff --git a/public/posts/fix_screen_tear_xfce/index.html b/public/posts/fix_screen_tear_xfce/index.html new file mode 100644 index 0000000..e25950b --- /dev/null +++ b/public/posts/fix_screen_tear_xfce/index.html @@ -0,0 +1,190 @@ + + + + + + Fix Screen Tear x11 + + + + + + +
+ + + + +
+ + + +
+

Fix Screen Tear x11

+

Fecha: 09 Nov 2024

+
+
+
+

¿Que es el screen tear?

+

buenas, Si alguna vez instalaron un wm liviano en linux que no use wayland seguramente habrán notado que al momento de mover una ventana en el escritorio o ver un video sucede algo de este estilo.

+

Imagen sacada de google donde se demuestra el screen tear

+

Donde la imagen se ve recortada por algunos milisegundos. A mi se me hace muy molesto a la vista cuando estoy mucho tiempo (relativamente) delante de la pantalla.

+

Solucion

+

Esto Parece suceder porque muchos WindowManagers de linux muestran un frame nuevo independientemente de si la gpu logró terminar de dibujar el proximo frame(buffer).

+

Encontré un parametro que se le puede pasar al X11 para evitar que se muestre un frame que la gpu aun no termino de actualizar.

+

Cosas que necesitamos

+
    +
  1. Tener inxi instalado
  2. +
+

En Arch se puede instalar con un

+
sudo pacman -S inxi
+

y supongo que lo mismo pero reemplazando pacman -S por apt install en distros debian-base.

+
    +
  1. Necesitamos editar uno(o dos) archivos en el /usr/share/
  2. +
+

Asi que verifica que tengas permisos para poder escribir en ese path.

+

Paso a Paso

+
    +
  1. Executamos inxi -G.
  2. +
+

Con esto nos daremos cuenta de que tipo de grafica tenemos. En mi caso es una integrada amd

+
i ➜  ~ inxi -G
+Graphics:
+  Device-1: Advanced Micro Devices [AMD/ATI] Lucienne driver: amdgpu v: kernel
+

Por lo que el archivo que tengo que editar es “/usr/share/X11/xorg.conf.d/10-amdgpu.conf”

+
Section "OutputClass"
+	Identifier "AMDgpu"
+	MatchDriver "amdgpu"
+	Driver "amdgpu"
+	Option "HotplugDriver" "amdgpu"
+EndSection
+

Donde añado la opcion “TearFree” “on”

+
Section "OutputClass"
+	Identifier "AMDgpu"
+	MatchDriver "amdgpu"
+	Driver "amdgpu"
+	Option "HotplugDriver" "amdgpu"
+	Option "TearFree" "on"
+EndSection
+

Demostracion de como queda

+

demo tear resuelto

+
+
+ +
+
+
+ © 2025 Federico Polidoro +
+ + diff --git a/public/posts/index.xml b/public/posts/index.xml new file mode 100644 index 0000000..a4ca872 --- /dev/null +++ b/public/posts/index.xml @@ -0,0 +1,82 @@ + + + + Posts on Blog Fede + https://fedesrv.ddns.net/posts/ + Recent content in Posts on Blog Fede + Hugo + en-us + Wed, 19 Mar 2025 02:53:57 -0300 + + + Coord Keeper + https://fedesrv.ddns.net/posts/coord-keeper/ + Wed, 19 Mar 2025 02:53:57 -0300 + https://fedesrv.ddns.net/posts/coord-keeper/ + <h1 id="motivacion">Motivacion</h1> <p>He notado que en versiones actuales de minecraft han puesto mucha informacion en el menu de debug (el <!-- raw HTML omitted -->f3<!-- raw HTML omitted -->) lo que lo hace cada vez más hostil al jugador promedio intentar encontrar la linea con las coordenadas de donde esta y poderse comunicar con la gente en el mismo servidor, es obvio que esto es totalmente intencionado. Entiendo que el objetivo es que uses las herramientas dadas por los diseñadores del videojuego para poder localizarte. Pero yo necesito una forma de poder guardar las coordenadas localmente en mi computadora. aunque podria haber usado un block de notas para almacenarlas me decidí por hacer algo más inproductivo&hellip;. hacer una app de react.</p> + + + Sistema Alquileres DevLog n1 + https://fedesrv.ddns.net/posts/sist_alquileres_devlog_1/ + Sun, 10 Nov 2024 00:08:17 +0800 + https://fedesrv.ddns.net/posts/sist_alquileres_devlog_1/ + <h1 id="que-es-esto">¿Que es esto?</h1> <p>Estas son pequeñas updates que voy a estar haciendo sobre el proyecto final mio de &ldquo;Ingenieria de Software&rdquo; (asi se llama la materia). El cual consiste de un sistema de gestion de alquileres. Pensado para tener varios tipos de usuario como un propietario que carge las propiedades que desea publicar siempre y cuando este verificado que le pertenecen a él y un inquilino el cual podra efectuar busquedas de propiedades para alquilas, ver el estado de los alquileres, y pagar los alquileres que sean correpondientes.</p> + + + Fix Screen Tear x11 + https://fedesrv.ddns.net/posts/fix_screen_tear_xfce/ + Sat, 09 Nov 2024 13:28:17 +0800 + https://fedesrv.ddns.net/posts/fix_screen_tear_xfce/ + <h1 id="que-es-el-screen-tear">¿Que es el screen tear?</h1> <p>buenas, Si alguna vez instalaron un wm liviano en linux que no use wayland seguramente habrán notado que al momento de mover una ventana en el escritorio o ver un video sucede algo de este estilo.</p> <p><img src="https://qph.cf2.quoracdn.net/main-qimg-4994dca8fc9979e8a10d3422cb5f7bcb" alt="Imagen sacada de google donde se demuestra el screen tear"></p> <p>Donde la imagen se ve recortada por algunos milisegundos. A mi se me hace muy molesto a la vista cuando estoy mucho tiempo (relativamente) delante de la pantalla.</p> + + + String Interpolation + https://fedesrv.ddns.net/posts/string-interpolation/ + Tue, 24 Oct 2023 22:24:17 +0800 + https://fedesrv.ddns.net/posts/string-interpolation/ + <h1 id="que-es">¿Que es?</h1> <p>Es un proceso de evaluado, en el cual se reemplazan placeholders en <code>string</code> por valores, en nuestro caso, de variables en momento de ejecución.</p> <h1 id="sintaxis">Sintaxis</h1> <pre><code>var manzanas = 4; var bananas = 3; Console.WriteLine($&quot;Tengo {manzanas} manzanas&quot;); Console.WriteLine($&quot;Vendí {manzanas + bananas} frutas&quot;); </code></pre> <blockquote> <p>Basicamente son plantillas.</p></blockquote> + + + Anuncio Aoc 2023 + https://fedesrv.ddns.net/posts/anuncio-aoc-2023/ + Tue, 03 Oct 2023 12:54:22 -0300 + https://fedesrv.ddns.net/posts/anuncio-aoc-2023/ + <h1 id="que-es-advent-of-code">¿Que es Advent of Code?</h1> <p>Son un grupo de puzzles de programacion presentados en forma de calendario que suelen ser utizados como:</p> <ul> <li>Preparacion de entrevistas.</li> <li>Training en empresas.</li> <li>Practica para familiarizarse con nuevos lenguajes de programacion.</li> <li><em>etc&hellip;</em></li> </ul> <h1 id="que-tengo-pensado">Que tengo pensado</h1> <p>Cerca de fin de año voy a hacer todos los dias de esa edicion de advent of code usando <code>zig</code> como un ejercicio para aprender ese lenguaje de programacion <code>(aunque de forma básica)</code>.</p> + + + Bootloader Incident + https://fedesrv.ddns.net/posts/bootloaderincident/ + Tue, 26 Sep 2023 22:27:20 -0300 + https://fedesrv.ddns.net/posts/bootloaderincident/ + <h1 id="el-inicio-de-la-catastrofe">El inicio de la catastrofe</h1> <p>En pocas palabras, <strong>Nunca Corten Un <code>pacman -Syu</code></strong>.<br> Si utilizan <strong>arch</strong> sabrán que se pueden configurar &lsquo;hooks&rsquo; antes y despues de las operaciones con el comando <code>pacman</code>, uno de estos era responsable de actualizar la entrada en el bootloader (uso systemd-boot btw). Al haber cortado sin querer este proceso me quedé sin entrada en el bootloader para linux y solo podia volver al menu de la <strong>UEFI</strong>.</p> + + + Imagenes: Color a b&w + https://fedesrv.ddns.net/posts/pasar-imagenes-a-blanco-y-negro/ + Sat, 23 Sep 2023 10:35:18 -0300 + https://fedesrv.ddns.net/posts/pasar-imagenes-a-blanco-y-negro/ + <h1 id="gimp">Gimp</h1> <p>Hay varias formas de pasar una imagen a blanco y negro. yo prefiero la de usar <strong>Gimp</strong> con la opcion de <code>Color &gt; Desaturacion &gt; Color a gama de grises</code>. Pero voy a listar un par de métodos alternativos para obtener el ~mismo resultado.<br> <img src="https://fedesrv.ddns.net/fedecomp.png" alt="Comparación"></p> <h1 id="imagemagick">ImageMagick</h1> <blockquote> <p>Es un conjunto de utilidades de código abierto​ para mostrar, manipular y convertir imágenes, capaz de leer y escribir más de 200 formatos.​</p></blockquote> <p>Una de esas utilidades es llamada <code>convert</code>, la cual acepta un archivo y convierte este a el formato que se le especifique. Existe una flag llamada <code>-colorspace</code> la cual si le damos el parametro <strong>Gray</strong> la imagen resultante estará representada en una gama de grises. <img src="https://fedesrv.ddns.net/fedeg.jpg" alt="Imagen en gama de grises"></p> + + + Diseño de Software Incident + https://fedesrv.ddns.net/posts/dise%C3%B1o-de-software-incident/ + Fri, 22 Sep 2023 15:08:17 +0800 + https://fedesrv.ddns.net/posts/dise%C3%B1o-de-software-incident/ + <h1 id="instanciacion-del-sqlconnection">Instanciacion del SqlConnection</h1> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> (<span style="color:#66d9ef">var</span> connection = <span style="color:#66d9ef">new</span> SqlConnection(configuration.GetConnectionString(<span style="color:#e6db74">&#34;DefaultConnection&#34;</span>))) </span></span></code></pre></div><p>Eso genera un sql connection que va a existir hasta que salga del scope del programa.</p> <h1 id="creacion-del-sqlcommand">Creacion del SqlCommand</h1> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> var command = <span style="color:#66d9ef">new</span> SqlCommand(); </span></span><span style="display:flex;"><span>command.CommandText = <span style="color:#e6db74">&#34;sp_RecuperaProductos&#34;</span>; </span></span><span style="display:flex;"><span>command.CommandType = System.Data.CommandType.StoredProcedure; </span></span></code></pre></div><h1 id="apertura-de-la-coneccion">Apertura de la coneccion</h1> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span>command.Connection = connection; </span></span><span style="display:flex;"><span>command.Connection.Open(); </span></span></code></pre></div><h2 id="utilizacion-del-executereader">Utilizacion del ExecuteReader</h2> <p>Es un choclo pero basicamente el codigo de abajo se encarga de iterar por cada uno de las entradas de la tabla. <strong>MUY</strong> importante, se tiene que añadir los productos dentro del loop principal del reader ya que lo que no se guarde en cada iteracion se pierde. (los maps no son case sensitive).</p> + + + RetroArchivements + https://fedesrv.ddns.net/posts/retroarchivements/ + Fri, 22 Sep 2023 13:30:17 +0800 + https://fedesrv.ddns.net/posts/retroarchivements/ + <p>Hace ya un par de dias que estoy usando un <a href="https://retroachievements.org/user/fedpo2">servicio</a> que implementa una api para trackear tu progreso en distintos juegos retro y no tan retro.</p> <p>Uno de los que estoy jugando es <code>Kirby's dream land 2</code><br> <img src="https://media.retroachievements.org/Images/046585.png" alt="kirby"></p> + + + Primer Post + https://fedesrv.ddns.net/posts/sample-post/ + Fri, 22 Sep 2023 12:28:17 +0800 + https://fedesrv.ddns.net/posts/sample-post/ + <h1 id="buenas">buenas</h1> <p>buenas Luego de sufrir bastante con el nginx y su <em>Reverse Proxy</em>, finalmente me decidí por poner la pagina del blog en el <strong>WebRoot</strong> y el <em>gitea</em> en un subfolder.</p> <h2 id="como-funciona-esto">Como funciona esto</h2> <p>El programa que estoy usando para hacer este blog se llama <a href="https://gohugo.io">Hugo</a>, consiste de una especie de parceador de <a href="https://www.markdownguide.org/">Markdown</a> a Html estático el cual hosteo con este <a href="https://nginx.org/en/">webServer</a>.</p> <h3 id="como-hago-nuevos-posts">Como hago nuevos posts</h3> <p>Dentro de la carpeta del proyecto del server hay una que se llama content, todos los <code>.md</code> que haya ahí cuando utilizo el comando:</p> + + + diff --git a/public/posts/pasar-imagenes-a-blanco-y-negro/index.html b/public/posts/pasar-imagenes-a-blanco-y-negro/index.html new file mode 100644 index 0000000..8fe6cc3 --- /dev/null +++ b/public/posts/pasar-imagenes-a-blanco-y-negro/index.html @@ -0,0 +1,156 @@ + + + + + + Imagenes: Color a b&w + + + + + + +
+ + + + +
+ +
+

Imagenes: Color a b&w

+

Fecha: 23 Sep 2023

+
+
+
+

Gimp

+

Hay varias formas de pasar una imagen a blanco y negro. yo prefiero la de usar Gimp con la opcion de Color > Desaturacion > Color a gama de grises. Pero voy a listar un par de métodos alternativos para obtener el ~mismo resultado.
+Comparación

+

ImageMagick

+
+

Es un conjunto de utilidades de código abierto​ para mostrar, manipular y convertir imágenes, capaz de leer y escribir más de 200 formatos.​

+

Una de esas utilidades es llamada convert, la cual acepta un archivo y convierte este a el formato que se le especifique. Existe una flag llamada -colorspace la cual si le damos el parametro Gray la imagen resultante estará representada en una gama de grises. +Imagen en gama de grises

+

Nota

+

Tambien se puede usar la flag -monocrome pero esta da un resultado el cual no me termina de gustar, a continuacion doy un par de muestras de como queda, +Imagen monocroma

+

Opcion web

+

Existe esta pagina en la cual para generar la imagen en gama de grises solo hay que poner la imagen y darle a Aplicar.
+Gama de grises demo

+
+
+ +
+
+
+ © 2025 Federico Polidoro +
+ + diff --git a/public/posts/retroarchivements/index.html b/public/posts/retroarchivements/index.html new file mode 100644 index 0000000..62cedd9 --- /dev/null +++ b/public/posts/retroarchivements/index.html @@ -0,0 +1,145 @@ + + + + + + RetroArchivements + + + + + + +
+ + + + +
+ +
+

RetroArchivements

+

Fecha: 22 Sep 2023

+
+
+
+

Hace ya un par de dias que estoy usando un servicio que implementa una api para trackear tu progreso en distintos juegos retro y no tan retro.

+

Uno de los que estoy jugando es Kirby's dream land 2
+kirby

+
+
+ +
+
+
+ © 2025 Federico Polidoro +
+ + diff --git a/public/posts/sample-post/index.html b/public/posts/sample-post/index.html new file mode 100644 index 0000000..85cfe4d --- /dev/null +++ b/public/posts/sample-post/index.html @@ -0,0 +1,153 @@ + + + + + + Primer Post + + + + + + +
+ + + + +
+ +
+

Primer Post

+

Fecha: 22 Sep 2023

+
+
+
+

buenas

+

buenas +Luego de sufrir bastante con el nginx y su Reverse Proxy, finalmente me decidí por poner la pagina del blog en el WebRoot y el gitea en un subfolder.

+

Como funciona esto

+

El programa que estoy usando para hacer este blog se llama Hugo, consiste de una especie de parceador de Markdown a Html estático el cual hosteo con este webServer.

+

Como hago nuevos posts

+

Dentro de la carpeta del proyecto del server hay una que se llama content, todos los .md que haya ahí cuando utilizo el comando:

+
hugo
+

se genera el html de la paginas del blog las cuales copio usando rsync dentro de la intranet de mi casa

+
+

Luraschi no me robes las llaves del ssh🙏.

+
+
+ +
+
+
+ © 2025 Federico Polidoro +
+ + diff --git a/public/posts/sist_alquileres_devlog_1/index.html b/public/posts/sist_alquileres_devlog_1/index.html new file mode 100644 index 0000000..d72dc04 --- /dev/null +++ b/public/posts/sist_alquileres_devlog_1/index.html @@ -0,0 +1,168 @@ + + + + + + Sistema Alquileres DevLog n1 + + + + + + +
+ + + + +
+ + + +
+

Sistema Alquileres DevLog n1

+

Fecha: 10 Nov 2024

+
+
+
+

¿Que es esto?

+

Estas son pequeñas updates que voy a estar haciendo sobre el proyecto final mio de “Ingenieria de Software” (asi se llama la materia). El cual consiste de un sistema de gestion de alquileres. Pensado para tener varios tipos de usuario como un propietario que carge las propiedades que desea publicar siempre y cuando este verificado que le pertenecen a él y un inquilino el cual podra efectuar busquedas de propiedades para alquilas, ver el estado de los alquileres, y pagar los alquileres que sean correpondientes.

+

Ahí arriba describi solo 2 o 3 de los casi 26 casos de uso que tengo descriptos. Además voy a reutilizar los conocimiento que adquirí haciendo el panel de control para la materia de base de datos.

+
+

Se vienen cositas

+

Bueno ahora voy a hacer un mini-informe sobre el modulo de seguridad

+

Permisos para los clientes

+

Cito de la entrega del segundo parcial.

+
+

En cuanto a como va el desarrollo, te diria que bien encaminado, actualmente estoy usando svelte/bootstrap para el front y aspnet core 8 ( ? ) para el backend. ya tengo definido que acciones puede hacer un cliente en el sistema mediante un sistema usuario-grupo-permiso Similar a como los permisos son definidos en linux (donde por ejemplo un usuario para poder acceder al uso del audio del servidor necesita estar en un grupo “audio” o para escribir a un almacenamiento en cinta necesita pertenecer al grupo “tape”) En mi proyecto por ahora tengo 3 grupos que consisten en los 3 actores que tengo definidos (inquilino, propietario, administracion). Entonces cuando checkeo por si un cliente tiene acceso a un permiso lo puedo averiguar de forma sencilla:

+
var permisos = con.Clientes
+.Where(c => c.Dni == cli.Dni)
+.SelectMany(c => c.Idgrupos)
+.SelectMany(g => g.Idpermisos)
+.Distinct();
+

Esto dandome una lista de todos los permisos que posee el cliente.

+

Tambien tengo hechos los abm de inquilino/propietario pero hay menos que comentar sobre eso.

+

Almacenamiento de Contratos de Alquiler

+

Un requisito que considero muy importante es almacenamiento de los contratos de alquiler. En una primera instancia pense que almacenarlos en un campo blob de mysql podia ser factible pero entre lo que escuché sobre que hace los backups de la base de datos gigantes y el hecho de que estaria haciendo una query a la base de datos para obtener, ponele, 3MB me parece un montón

+

Almacenarlos con un fileserver simple como Miniserve que es una excelente herramienta si bien para casos donde tenes un solo servidor pareceria masomenos pasable al final termina no siendo tan buena idea si llegas a necesitar algo minimanente distribuido o que maneje permisos.

+

Así fue como luego de preguntarle a un amigo y a chatgpt. me decidí por darle una oportunidad a Minio que es una alternativa “S3 pero hosteado en casa”. tengo mucho que aprender aún sobre s3 porque tengo solo una idea general de como funciona. Así que voy a dejar una update de esto en unos dias o semanas (no hay chances que sea consistente publicando acá) sobre como va esto. bye.

+
+
+ +
+
+
+ © 2025 Federico Polidoro +
+ + diff --git a/public/posts/string-interpolation/index.html b/public/posts/string-interpolation/index.html new file mode 100644 index 0000000..99f3118 --- /dev/null +++ b/public/posts/string-interpolation/index.html @@ -0,0 +1,153 @@ + + + + + + String Interpolation + + + + + + +
+ + + + +
+ +
+

String Interpolation

+

Fecha: 24 Oct 2023

+
+
+
+

¿Que es?

+

Es un proceso de evaluado, en el cual se reemplazan placeholders en string por valores, en nuestro caso, de variables en momento de ejecución.

+

Sintaxis

+
var manzanas = 4;
+var bananas = 3;
+
+Console.WriteLine($"Tengo {manzanas} manzanas");
+Console.WriteLine($"Vendí {manzanas + bananas} frutas");
+
+
+

Basicamente son plantillas.

+
+
+ +
+
+
+ © 2025 Federico Polidoro +
+ + diff --git a/public/proyectos/index.xml b/public/proyectos/index.xml new file mode 100644 index 0000000..6937ebb --- /dev/null +++ b/public/proyectos/index.xml @@ -0,0 +1,33 @@ + + + + Proyectos on Blog Fede + https://fedesrv.ddns.net/proyectos/ + Recent content in Proyectos on Blog Fede + Hugo + en-us + Fri, 02 May 2025 02:13:53 -0300 + + + Panel Web + https://fedesrv.ddns.net/proyectos/paneldb/ + Fri, 02 May 2025 02:13:53 -0300 + https://fedesrv.ddns.net/proyectos/paneldb/ + <p>Este panel web es una herramienta de visualización y análisis de datos para una cadena hotelera, desarrollado como trabajo final para el curso de Base de Datos Aplicada. El sistema permite explorar métricas clave de rendimiento a través de una estructura jerárquica de tres niveles.</p> <h2 id="arquitectura-técnica">Arquitectura Técnica</h2> <h3 id="backend">Backend</h3> <ul> <li>ASP.NET Core 7</li> <li>Entity Framework Core para acceso a datos</li> <li>API RESTful para comunicación con el frontend</li> <li>Autenticación JWT para seguridad</li> </ul> <h3 id="frontend">Frontend</h3> <ul> <li>React (18.x)</li> <li>Material UI para componentes de interfaz</li> <li>ChartJS para visualización de datos</li> <li>React Router para navegación entre secciones</li> </ul> <h2 id="estructura-de-navegación-drilling">Estructura de Navegación (Drilling)</h2> <p>El panel implementa un sistema de navegación jerárquica de tres niveles:</p> + + + Gestor de Stock + https://fedesrv.ddns.net/proyectos/controlstock/ + Fri, 02 May 2025 02:10:53 -0300 + https://fedesrv.ddns.net/proyectos/controlstock/ + <p>Este sistema de gestión de inventario está desarrollado en C# utilizando Windows Forms. La aplicación permite administrar eficientemente el stock de productos, registrar ventas, gestionar pedidos a proveedores y verificar remitos de entrega.</p> <h2 id="características-principales">Características Principales</h2> <h3 id="gestión-de-productos">Gestión de Productos</h3> <ul> <li>Alta, baja y modificación de productos</li> <li>Categorización de inventario</li> <li>Control de stock mínimo y máximo</li> <li>Alertas de stock bajo</li> </ul> <h3 id="registro-de-ventas">Registro de Ventas</h3> <ul> <li>Generación de facturas</li> <li>Historial de ventas</li> <li>Seguimiento de productos vendidos</li> <li>Estadísticas de ventas</li> </ul> <h3 id="pedidos-a-proveedores">Pedidos a Proveedores</h3> <ul> <li>Creación automática de órdenes de compra</li> <li>Seguimiento de pedidos pendientes</li> <li>Historial de pedidos</li> </ul> <h3 id="verificación-de-remitos">Verificación de Remitos</h3> <ul> <li>Control de recepción de mercadería</li> <li>Validación de cantidades y productos</li> <li>Registro de discrepancias</li> <li>Alertas de productos faltantes</li> <li>Conformidad de recepción</li> </ul> <h2 id="tecnologías-utilizadas">Tecnologías Utilizadas</h2> <ul> <li>C# (.NET Framework)</li> <li>Windows Forms</li> <li>SQL Server (Base de datos)</li> <li>Entity Framework</li> </ul> <h2 id="capturas-de-pantalla-wip">Capturas de Pantalla (WIP)</h2> <p><em>(Aquí se insertarían capturas de las principales pantallas del sistema)</em></p> + + + CoordKeeper + https://fedesrv.ddns.net/proyectos/coordkeeper/ + Fri, 02 May 2025 01:47:53 -0300 + https://fedesrv.ddns.net/proyectos/coordkeeper/ + <p>es una aplicación web desarrollada con React diseñada específicamente para jugadores de Minecraft. Esta herramienta permite a los usuarios almacenar, organizar y gestionar fácilmente las coordenadas de ubicaciones importantes dentro del juego.</p> <h2 id="características">Características</h2> <ul> <li>Almacenamiento de coordenadas X, Y, Z de lugares importantes</li> <li>Organización por Dimensiones</li> <li>Interfaz intuitiva y fácil de usar</li> <li>Acceso rápido a tus coordenadas guardadas</li> </ul> <p>Ya no tendrás que depender de notas dispersas o capturas de pantalla para recordar dónde encontraste ese templo submarino o aquella cueva de diamantes. CoordKeeper mantiene toda esta información organizada en un solo lugar.</p> + + + diff --git a/public/sitemap.xml b/public/sitemap.xml index 4180089..5ee5860 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -2,66 +2,66 @@ - http://localhost:1313/ + https://fedesrv.ddns.net/ 2025-05-02T02:13:53-03:00 - http://localhost:1313/proyectos/paneldb/ + https://fedesrv.ddns.net/proyectos/paneldb/ 2025-05-02T02:13:53-03:00 - http://localhost:1313/proyectos/ + https://fedesrv.ddns.net/proyectos/ 2025-05-02T02:13:53-03:00 - http://localhost:1313/proyectos/controlstock/ + https://fedesrv.ddns.net/proyectos/controlstock/ 2025-05-02T02:10:53-03:00 - http://localhost:1313/proyectos/coordkeeper/ + https://fedesrv.ddns.net/proyectos/coordkeeper/ 2025-05-02T01:47:53-03:00 - http://localhost:1313/posts/coord-keeper/ + https://fedesrv.ddns.net/posts/coord-keeper/ 2025-03-19T02:53:57-03:00 - http://localhost:1313/tags/devlog/ + https://fedesrv.ddns.net/tags/devlog/ 2025-03-19T02:53:57-03:00 - http://localhost:1313/posts/ + https://fedesrv.ddns.net/posts/ 2025-03-19T02:53:57-03:00 - http://localhost:1313/tags/ + https://fedesrv.ddns.net/tags/ 2025-03-19T02:53:57-03:00 - http://localhost:1313/posts/sist_alquileres_devlog_1/ + https://fedesrv.ddns.net/posts/sist_alquileres_devlog_1/ 2024-11-10T00:08:17+08:00 - http://localhost:1313/tags/fix/ + https://fedesrv.ddns.net/tags/fix/ 2024-11-09T13:28:17+08:00 - http://localhost:1313/posts/fix_screen_tear_xfce/ + https://fedesrv.ddns.net/posts/fix_screen_tear_xfce/ 2024-11-09T13:28:17+08:00 - http://localhost:1313/tags/old_blog/ + https://fedesrv.ddns.net/tags/old_blog/ 2023-10-24T22:24:17+08:00 - http://localhost:1313/posts/string-interpolation/ + https://fedesrv.ddns.net/posts/string-interpolation/ 2023-10-24T22:24:17+08:00 - http://localhost:1313/posts/anuncio-aoc-2023/ + https://fedesrv.ddns.net/posts/anuncio-aoc-2023/ 2023-10-03T12:54:22-03:00 - http://localhost:1313/posts/bootloaderincident/ + https://fedesrv.ddns.net/posts/bootloaderincident/ 2023-09-26T22:27:20-03:00 - http://localhost:1313/posts/pasar-imagenes-a-blanco-y-negro/ + https://fedesrv.ddns.net/posts/pasar-imagenes-a-blanco-y-negro/ 2023-09-23T10:35:18-03:00 - http://localhost:1313/posts/dise%C3%B1o-de-software-incident/ + https://fedesrv.ddns.net/posts/dise%C3%B1o-de-software-incident/ 2023-09-22T15:08:17+08:00 - http://localhost:1313/posts/retroarchivements/ + https://fedesrv.ddns.net/posts/retroarchivements/ 2023-09-22T13:30:17+08:00 - http://localhost:1313/posts/sample-post/ + https://fedesrv.ddns.net/posts/sample-post/ 2023-09-22T12:28:17+08:00 - http://localhost:1313/categories/ + https://fedesrv.ddns.net/categories/ diff --git a/public/tags/devlog/index.xml b/public/tags/devlog/index.xml new file mode 100644 index 0000000..f67da54 --- /dev/null +++ b/public/tags/devlog/index.xml @@ -0,0 +1,26 @@ + + + + DevLog on Blog Fede + https://fedesrv.ddns.net/tags/devlog/ + Recent content in DevLog on Blog Fede + Hugo + en-us + Wed, 19 Mar 2025 02:53:57 -0300 + + + Coord Keeper + https://fedesrv.ddns.net/posts/coord-keeper/ + Wed, 19 Mar 2025 02:53:57 -0300 + https://fedesrv.ddns.net/posts/coord-keeper/ + <h1 id="motivacion">Motivacion</h1> <p>He notado que en versiones actuales de minecraft han puesto mucha informacion en el menu de debug (el <!-- raw HTML omitted -->f3<!-- raw HTML omitted -->) lo que lo hace cada vez más hostil al jugador promedio intentar encontrar la linea con las coordenadas de donde esta y poderse comunicar con la gente en el mismo servidor, es obvio que esto es totalmente intencionado. Entiendo que el objetivo es que uses las herramientas dadas por los diseñadores del videojuego para poder localizarte. Pero yo necesito una forma de poder guardar las coordenadas localmente en mi computadora. aunque podria haber usado un block de notas para almacenarlas me decidí por hacer algo más inproductivo&hellip;. hacer una app de react.</p> + + + Sistema Alquileres DevLog n1 + https://fedesrv.ddns.net/posts/sist_alquileres_devlog_1/ + Sun, 10 Nov 2024 00:08:17 +0800 + https://fedesrv.ddns.net/posts/sist_alquileres_devlog_1/ + <h1 id="que-es-esto">¿Que es esto?</h1> <p>Estas son pequeñas updates que voy a estar haciendo sobre el proyecto final mio de &ldquo;Ingenieria de Software&rdquo; (asi se llama la materia). El cual consiste de un sistema de gestion de alquileres. Pensado para tener varios tipos de usuario como un propietario que carge las propiedades que desea publicar siempre y cuando este verificado que le pertenecen a él y un inquilino el cual podra efectuar busquedas de propiedades para alquilas, ver el estado de los alquileres, y pagar los alquileres que sean correpondientes.</p> + + + diff --git a/public/tags/fix/index.xml b/public/tags/fix/index.xml new file mode 100644 index 0000000..9d5a911 --- /dev/null +++ b/public/tags/fix/index.xml @@ -0,0 +1,19 @@ + + + + Fix on Blog Fede + https://fedesrv.ddns.net/tags/fix/ + Recent content in Fix on Blog Fede + Hugo + en-us + Sat, 09 Nov 2024 13:28:17 +0800 + + + Fix Screen Tear x11 + https://fedesrv.ddns.net/posts/fix_screen_tear_xfce/ + Sat, 09 Nov 2024 13:28:17 +0800 + https://fedesrv.ddns.net/posts/fix_screen_tear_xfce/ + <h1 id="que-es-el-screen-tear">¿Que es el screen tear?</h1> <p>buenas, Si alguna vez instalaron un wm liviano en linux que no use wayland seguramente habrán notado que al momento de mover una ventana en el escritorio o ver un video sucede algo de este estilo.</p> <p><img src="https://qph.cf2.quoracdn.net/main-qimg-4994dca8fc9979e8a10d3422cb5f7bcb" alt="Imagen sacada de google donde se demuestra el screen tear"></p> <p>Donde la imagen se ve recortada por algunos milisegundos. A mi se me hace muy molesto a la vista cuando estoy mucho tiempo (relativamente) delante de la pantalla.</p> + + + diff --git a/public/tags/index.xml b/public/tags/index.xml index 5554282..889d581 100644 --- a/public/tags/index.xml +++ b/public/tags/index.xml @@ -1,32 +1,32 @@ - Tags on My New Hugo Site - http://localhost:1313/tags/ - Recent content in Tags on My New Hugo Site + Tags on Blog Fede + https://fedesrv.ddns.net/tags/ + Recent content in Tags on Blog Fede Hugo en-us Wed, 19 Mar 2025 02:53:57 -0300 - + DevLog - http://localhost:1313/tags/devlog/ + https://fedesrv.ddns.net/tags/devlog/ Wed, 19 Mar 2025 02:53:57 -0300 - http://localhost:1313/tags/devlog/ + https://fedesrv.ddns.net/tags/devlog/ Fix - http://localhost:1313/tags/fix/ + https://fedesrv.ddns.net/tags/fix/ Sat, 09 Nov 2024 13:28:17 +0800 - http://localhost:1313/tags/fix/ + https://fedesrv.ddns.net/tags/fix/ Old_blog - http://localhost:1313/tags/old_blog/ + https://fedesrv.ddns.net/tags/old_blog/ Tue, 24 Oct 2023 22:24:17 +0800 - http://localhost:1313/tags/old_blog/ + https://fedesrv.ddns.net/tags/old_blog/ diff --git a/public/tags/old_blog/index.xml b/public/tags/old_blog/index.xml new file mode 100644 index 0000000..1b383cb --- /dev/null +++ b/public/tags/old_blog/index.xml @@ -0,0 +1,61 @@ + + + + Old_blog on Blog Fede + https://fedesrv.ddns.net/tags/old_blog/ + Recent content in Old_blog on Blog Fede + Hugo + en-us + Tue, 24 Oct 2023 22:24:17 +0800 + + + String Interpolation + https://fedesrv.ddns.net/posts/string-interpolation/ + Tue, 24 Oct 2023 22:24:17 +0800 + https://fedesrv.ddns.net/posts/string-interpolation/ + <h1 id="que-es">¿Que es?</h1> <p>Es un proceso de evaluado, en el cual se reemplazan placeholders en <code>string</code> por valores, en nuestro caso, de variables en momento de ejecución.</p> <h1 id="sintaxis">Sintaxis</h1> <pre><code>var manzanas = 4; var bananas = 3; Console.WriteLine($&quot;Tengo {manzanas} manzanas&quot;); Console.WriteLine($&quot;Vendí {manzanas + bananas} frutas&quot;); </code></pre> <blockquote> <p>Basicamente son plantillas.</p></blockquote> + + + Anuncio Aoc 2023 + https://fedesrv.ddns.net/posts/anuncio-aoc-2023/ + Tue, 03 Oct 2023 12:54:22 -0300 + https://fedesrv.ddns.net/posts/anuncio-aoc-2023/ + <h1 id="que-es-advent-of-code">¿Que es Advent of Code?</h1> <p>Son un grupo de puzzles de programacion presentados en forma de calendario que suelen ser utizados como:</p> <ul> <li>Preparacion de entrevistas.</li> <li>Training en empresas.</li> <li>Practica para familiarizarse con nuevos lenguajes de programacion.</li> <li><em>etc&hellip;</em></li> </ul> <h1 id="que-tengo-pensado">Que tengo pensado</h1> <p>Cerca de fin de año voy a hacer todos los dias de esa edicion de advent of code usando <code>zig</code> como un ejercicio para aprender ese lenguaje de programacion <code>(aunque de forma básica)</code>.</p> + + + Bootloader Incident + https://fedesrv.ddns.net/posts/bootloaderincident/ + Tue, 26 Sep 2023 22:27:20 -0300 + https://fedesrv.ddns.net/posts/bootloaderincident/ + <h1 id="el-inicio-de-la-catastrofe">El inicio de la catastrofe</h1> <p>En pocas palabras, <strong>Nunca Corten Un <code>pacman -Syu</code></strong>.<br> Si utilizan <strong>arch</strong> sabrán que se pueden configurar &lsquo;hooks&rsquo; antes y despues de las operaciones con el comando <code>pacman</code>, uno de estos era responsable de actualizar la entrada en el bootloader (uso systemd-boot btw). Al haber cortado sin querer este proceso me quedé sin entrada en el bootloader para linux y solo podia volver al menu de la <strong>UEFI</strong>.</p> + + + Imagenes: Color a b&w + https://fedesrv.ddns.net/posts/pasar-imagenes-a-blanco-y-negro/ + Sat, 23 Sep 2023 10:35:18 -0300 + https://fedesrv.ddns.net/posts/pasar-imagenes-a-blanco-y-negro/ + <h1 id="gimp">Gimp</h1> <p>Hay varias formas de pasar una imagen a blanco y negro. yo prefiero la de usar <strong>Gimp</strong> con la opcion de <code>Color &gt; Desaturacion &gt; Color a gama de grises</code>. Pero voy a listar un par de métodos alternativos para obtener el ~mismo resultado.<br> <img src="https://fedesrv.ddns.net/fedecomp.png" alt="Comparación"></p> <h1 id="imagemagick">ImageMagick</h1> <blockquote> <p>Es un conjunto de utilidades de código abierto​ para mostrar, manipular y convertir imágenes, capaz de leer y escribir más de 200 formatos.​</p></blockquote> <p>Una de esas utilidades es llamada <code>convert</code>, la cual acepta un archivo y convierte este a el formato que se le especifique. Existe una flag llamada <code>-colorspace</code> la cual si le damos el parametro <strong>Gray</strong> la imagen resultante estará representada en una gama de grises. <img src="https://fedesrv.ddns.net/fedeg.jpg" alt="Imagen en gama de grises"></p> + + + Diseño de Software Incident + https://fedesrv.ddns.net/posts/dise%C3%B1o-de-software-incident/ + Fri, 22 Sep 2023 15:08:17 +0800 + https://fedesrv.ddns.net/posts/dise%C3%B1o-de-software-incident/ + <h1 id="instanciacion-del-sqlconnection">Instanciacion del SqlConnection</h1> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> (<span style="color:#66d9ef">var</span> connection = <span style="color:#66d9ef">new</span> SqlConnection(configuration.GetConnectionString(<span style="color:#e6db74">&#34;DefaultConnection&#34;</span>))) </span></span></code></pre></div><p>Eso genera un sql connection que va a existir hasta que salga del scope del programa.</p> <h1 id="creacion-del-sqlcommand">Creacion del SqlCommand</h1> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> var command = <span style="color:#66d9ef">new</span> SqlCommand(); </span></span><span style="display:flex;"><span>command.CommandText = <span style="color:#e6db74">&#34;sp_RecuperaProductos&#34;</span>; </span></span><span style="display:flex;"><span>command.CommandType = System.Data.CommandType.StoredProcedure; </span></span></code></pre></div><h1 id="apertura-de-la-coneccion">Apertura de la coneccion</h1> <div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span>command.Connection = connection; </span></span><span style="display:flex;"><span>command.Connection.Open(); </span></span></code></pre></div><h2 id="utilizacion-del-executereader">Utilizacion del ExecuteReader</h2> <p>Es un choclo pero basicamente el codigo de abajo se encarga de iterar por cada uno de las entradas de la tabla. <strong>MUY</strong> importante, se tiene que añadir los productos dentro del loop principal del reader ya que lo que no se guarde en cada iteracion se pierde. (los maps no son case sensitive).</p> + + + RetroArchivements + https://fedesrv.ddns.net/posts/retroarchivements/ + Fri, 22 Sep 2023 13:30:17 +0800 + https://fedesrv.ddns.net/posts/retroarchivements/ + <p>Hace ya un par de dias que estoy usando un <a href="https://retroachievements.org/user/fedpo2">servicio</a> que implementa una api para trackear tu progreso en distintos juegos retro y no tan retro.</p> <p>Uno de los que estoy jugando es <code>Kirby's dream land 2</code><br> <img src="https://media.retroachievements.org/Images/046585.png" alt="kirby"></p> + + + Primer Post + https://fedesrv.ddns.net/posts/sample-post/ + Fri, 22 Sep 2023 12:28:17 +0800 + https://fedesrv.ddns.net/posts/sample-post/ + <h1 id="buenas">buenas</h1> <p>buenas Luego de sufrir bastante con el nginx y su <em>Reverse Proxy</em>, finalmente me decidí por poner la pagina del blog en el <strong>WebRoot</strong> y el <em>gitea</em> en un subfolder.</p> <h2 id="como-funciona-esto">Como funciona esto</h2> <p>El programa que estoy usando para hacer este blog se llama <a href="https://gohugo.io">Hugo</a>, consiste de una especie de parceador de <a href="https://www.markdownguide.org/">Markdown</a> a Html estático el cual hosteo con este <a href="https://nginx.org/en/">webServer</a>.</p> <h3 id="como-hago-nuevos-posts">Como hago nuevos posts</h3> <p>Dentro de la carpeta del proyecto del server hay una que se llama content, todos los <code>.md</code> que haya ahí cuando utilizo el comando:</p> + + + diff --git a/static/css/main.css b/static/css/main.css index fc5ce96..c434748 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -1,2 +1,2 @@ /*! tailwindcss v4.1.3 | MIT License | https://tailwindcss.com */ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:rotateX(0);--tw-rotate-y:rotateY(0);--tw-rotate-z:rotateZ(0);--tw-skew-x:skewX(0);--tw-skew-y:skewY(0);--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-emerald-500:oklch(69.6% .17 162.48);--color-cyan-200:oklch(91.7% .08 205.041);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-700:oklch(48.8% .243 264.376);--color-slate-800:oklch(27.9% .041 260.031);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-thin:100;--font-weight-light:300;--font-weight-semibold:600;--font-weight-bold:700;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-bounce:bounce 1s infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.top-0{top:calc(var(--spacing)*0)}.top-16{top:calc(var(--spacing)*16)}.right-0{right:calc(var(--spacing)*0)}.bottom-8{bottom:calc(var(--spacing)*8)}.-z-0{z-index:calc(0*-1)}.-z-1{z-index:calc(1*-1)}.-z-10{z-index:calc(10*-1)}.z-0{z-index:0}.z-1{z-index:1}.z-40{z-index:40}.z-50{z-index:50}.float-left{float:left}.float-right{float:right}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-4{margin:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-6{height:calc(var(--spacing)*6)}.h-16{height:calc(var(--spacing)*16)}.h-48{height:calc(var(--spacing)*48)}.h-80{height:calc(var(--spacing)*80)}.h-full{height:100%}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-6{width:calc(var(--spacing)*6)}.w-22{width:calc(var(--spacing)*22)}.w-64{width:calc(var(--spacing)*64)}.w-\[2px\]{width:2px}.w-\[80\%\]{width:80%}.w-full{width:100%}.w-screen{width:100vw}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}.animate-bounce{animation:var(--animate-bounce)}.cursor-context-menu{cursor:context-menu}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-center-safe{justify-content:safe center}.gap-2{gap:calc(var(--spacing)*2)}.gap-6{gap:calc(var(--spacing)*6)}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-s-2{border-inline-start-style:var(--tw-border-style);border-inline-start-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-solid{--tw-border-style:solid;border-style:solid}.border-gray-400{border-color:var(--color-gray-400)}.border-r-transparent{border-right-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-black{background-color:var(--color-black)}.bg-cyan-200{background-color:var(--color-cyan-200)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-white{background-color:var(--color-white)}.bg-\[radial-gradient\(circle\,rgba\(0\,0\,0\,0\)_0\%\,rgba\(0\,0\,0\,0\.5\)_70\%\,\#ffffff_100\%\)\,repeating-linear-gradient\(45deg\,\#000000\,\#000000_10px\,\#ffffff_10px\,\#ffffff_20px\)\]{background-image:radial-gradient(circle,#0000 0%,#00000080 70%,#fff 100%),repeating-linear-gradient(45deg,#000,#000 10px,#fff 10px 20px)}.bg-\[repeating-linear-gradient\(transparent\,transparent_27px\,\#333_28px\)\]{background-image:repeating-linear-gradient(#0000,#0000 27px,#333 28px)}.bg-\[size\:100\%_28px\]{background-size:100% 28px}.object-cover{object-fit:cover}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.p-8{padding:calc(var(--spacing)*8)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-16{padding-top:calc(var(--spacing)*16)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.whitespace-nowrap{white-space:nowrap}.text-black{color:var(--color-black)}.text-blue-500{color:var(--color-blue-500)}.text-gray-300{color:var(--color-gray-300)}.text-gray-500{color:var(--color-gray-500)}.text-gray-700{color:var(--color-gray-700)}.text-white{color:var(--color-white)}.italic{font-style:italic}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_6px_-1px_rgb\(107\,114\,128\)\]{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#6b7280);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}@media (hover:hover){.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:grayscale-0:hover{--tw-grayscale:grayscale(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}@media (min-width:40rem){.sm\:mb-0{margin-bottom:calc(var(--spacing)*0)}.sm\:flex{display:flex}.sm\:flex-row{flex-direction:row}.sm\:px-2{padding-inline:calc(var(--spacing)*2)}}@media (min-width:48rem){.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:px-16{padding-inline:calc(var(--spacing)*16)}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media (min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:px-32{padding-inline:calc(var(--spacing)*32)}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}}@media (prefers-color-scheme:dark){.dark\:border-white{border-color:var(--color-white)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-emerald-500{background-color:var(--color-emerald-500)}.dark\:bg-\[repeating-linear-gradient\(transparent\,transparent_27px\,\#aaa_28px\)\]{background-image:repeating-linear-gradient(#0000,#0000 27px,#aaa 28px)}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}} \ No newline at end of file +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:rotateX(0);--tw-rotate-y:rotateY(0);--tw-rotate-z:rotateZ(0);--tw-skew-x:skewX(0);--tw-skew-y:skewY(0);--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-emerald-500:oklch(69.6% .17 162.48);--color-cyan-200:oklch(91.7% .08 205.041);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-700:oklch(48.8% .243 264.376);--color-slate-800:oklch(27.9% .041 260.031);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-thin:100;--font-weight-light:300;--font-weight-semibold:600;--font-weight-bold:700;--radius-lg:.5rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-bounce:bounce 1s infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.top-0{top:calc(var(--spacing)*0)}.top-16{top:calc(var(--spacing)*16)}.right-0{right:calc(var(--spacing)*0)}.bottom-8{bottom:calc(var(--spacing)*8)}.-z-0{z-index:calc(0*-1)}.-z-1{z-index:calc(1*-1)}.-z-10{z-index:calc(10*-1)}.z-0{z-index:0}.z-1{z-index:1}.z-40{z-index:40}.z-50{z-index:50}.float-left{float:left}.float-right{float:right}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-4{margin:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-6{height:calc(var(--spacing)*6)}.h-16{height:calc(var(--spacing)*16)}.h-48{height:calc(var(--spacing)*48)}.h-80{height:calc(var(--spacing)*80)}.h-full{height:100%}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-6{width:calc(var(--spacing)*6)}.w-22{width:calc(var(--spacing)*22)}.w-64{width:calc(var(--spacing)*64)}.w-\[2px\]{width:2px}.w-\[80\%\]{width:80%}.w-full{width:100%}.w-screen{width:100vw}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}.animate-bounce{animation:var(--animate-bounce)}.cursor-context-menu{cursor:context-menu}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-center-safe{justify-content:safe center}.gap-2{gap:calc(var(--spacing)*2)}.gap-6{gap:calc(var(--spacing)*6)}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-s-2{border-inline-start-style:var(--tw-border-style);border-inline-start-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-solid{--tw-border-style:solid;border-style:solid}.border-gray-400{border-color:var(--color-gray-400)}.border-r-transparent{border-right-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-black{background-color:var(--color-black)}.bg-cyan-200{background-color:var(--color-cyan-200)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-white{background-color:var(--color-white)}.bg-\[radial-gradient\(circle\,rgba\(0\,0\,0\,0\)_0\%\,rgba\(0\,0\,0\,0\.5\)_70\%\,\#ffffff_100\%\)\,repeating-linear-gradient\(45deg\,\#000000\,\#000000_10px\,\#ffffff_10px\,\#ffffff_20px\)\]{background-image:radial-gradient(circle,#0000 0%,#00000080 70%,#fff 100%),repeating-linear-gradient(45deg,#000,#000 10px,#fff 10px 20px)}.bg-\[repeating-linear-gradient\(transparent\,transparent_27px\,\#333_28px\)\]{background-image:repeating-linear-gradient(#0000,#0000 27px,#333 28px)}.bg-\[size\:100\%_28px\]{background-size:100% 28px}.object-cover{object-fit:cover}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.p-8{padding:calc(var(--spacing)*8)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-16{padding-top:calc(var(--spacing)*16)}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.font-thin{--tw-font-weight:var(--font-weight-thin);font-weight:var(--font-weight-thin)}.whitespace-nowrap{white-space:nowrap}.text-black{color:var(--color-black)}.text-blue-500{color:var(--color-blue-500)}.text-gray-300{color:var(--color-gray-300)}.text-gray-500{color:var(--color-gray-500)}.text-gray-700{color:var(--color-gray-700)}.text-white{color:var(--color-white)}.italic{font-style:italic}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_4px_6px_-1px_rgb\(107\,114\,128\)\]{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#6b7280);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}@media (hover:hover){.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-white:hover{color:var(--color-white)}.hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:grayscale-0:hover{--tw-grayscale:grayscale(0%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}}@media (min-width:40rem){.sm\:mb-0{margin-bottom:calc(var(--spacing)*0)}.sm\:flex{display:flex}.sm\:flex-row{flex-direction:row}.sm\:px-2{padding-inline:calc(var(--spacing)*2)}}@media (min-width:48rem){.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:px-16{padding-inline:calc(var(--spacing)*16)}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media (min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:px-32{padding-inline:calc(var(--spacing)*32)}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}}@media (prefers-color-scheme:dark){.dark\:border-white{border-color:var(--color-white)}.dark\:bg-black{background-color:var(--color-black)}.dark\:bg-emerald-500{background-color:var(--color-emerald-500)}.dark\:bg-\[repeating-linear-gradient\(transparent\,transparent_27px\,\#aaa_28px\)\]{background-image:repeating-linear-gradient(#0000,#0000 27px,#aaa 28px)}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}} \ No newline at end of file