2026-04-08

This commit is contained in:
gcch 2026-04-08 10:46:43 +02:00
commit 00f87fedcd
52 changed files with 8262 additions and 1491 deletions

162
bun.lock
View file

@ -26,21 +26,21 @@
"@vitejs/plugin-legacy": "^8.0.1",
"better-typescript-lib": "^2.12.0",
"browserslist": "^4.28.2",
"caniuse-lite": "^1.0.30001786",
"caniuse-lite": "^1.0.30001787",
"eslint": "^10.2.0",
"eslint-plugin-functional": "^9.0.4",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-oxlint": "^1.58.0",
"eslint-plugin-oxlint": "^1.59.0",
"eslint-plugin-perfectionist": "^5.8.0",
"eslint-plugin-sonarjs": "^4.0.2",
"fdir": "^6.5.0",
"globals": "^17.4.0",
"jiti": "^2.6.1",
"knip": "^6.3.0",
"knip": "^6.3.1",
"lightningcss": "^1.32.0",
"lightningcss-cli": "^1.32.0",
"oxlint": "^1.59.0",
"oxlint-tsgolint": "^0.19.0",
"oxlint-tsgolint": "^0.20.0",
"playwright": "^1.59.1",
"prettier": "^3.8.1",
"prettier-plugin-pkg": "^0.22.1",
@ -53,8 +53,8 @@
"stylelint-declaration-block-no-ignored-properties": "^3.0.0",
"stylelint-plugin-logical-css": "^2.1.0",
"typescript": "6.0.2",
"typescript-eslint": "^8.58.0",
"vite": "^8.0.5",
"typescript-eslint": "^8.58.1",
"vite": "^8.0.7",
"vite-tsconfig-paths": "^6.1.1",
},
},
@ -268,11 +268,11 @@
"@effect/language-service": ["@effect/language-service@0.84.3", "", { "bin": { "effect-language-service": "cli.js" } }, "sha512-zpxi6rLCwst/cBQd7ElwDvt36Y6Jvz8v6bCLnNiOL6OXvdLmqjOFWyzWZdMh92vvBQA/aVKhfIAAOP3o4wKt0A=="],
"@emnapi/core": ["@emnapi/core@1.9.2", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA=="],
"@emnapi/core": ["@emnapi/core@1.9.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.0", "tslib": "^2.4.0" } }, "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA=="],
"@emnapi/runtime": ["@emnapi/runtime@1.9.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw=="],
"@emnapi/runtime": ["@emnapi/runtime@1.9.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA=="],
"@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="],
"@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg=="],
"@es-joy/jsdoccomment": ["@es-joy/jsdoccomment@0.86.0", "", { "dependencies": { "@types/estree": "^1.0.8", "@typescript-eslint/types": "^8.58.0", "comment-parser": "1.4.6", "esquery": "^1.7.0", "jsdoc-type-pratt-parser": "~7.2.0" } }, "sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw=="],
@ -428,17 +428,17 @@
"@oxc-resolver/binding-win32-x64-msvc": ["@oxc-resolver/binding-win32-x64-msvc@11.19.1", "", { "os": "win32", "cpu": "x64" }, "sha512-6hIU3RQu45B+VNTY4Ru8ppFwjVS/S5qwYyGhBotmjxfEKk41I2DlGtRfGJndZ5+6lneE2pwloqunlOyZuX/XAw=="],
"@oxlint-tsgolint/darwin-arm64": ["@oxlint-tsgolint/darwin-arm64@0.19.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-FVOIp5Njte8Z6PpINz7sL5blqSro0pAL8VAHYQ+K5Xm4cOrPQ6DGIhH14oXnbRjzn8Kl69qjz8TPteyn8EqwsQ=="],
"@oxlint-tsgolint/darwin-arm64": ["@oxlint-tsgolint/darwin-arm64@0.20.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-KKQcIHZHMxqpHUA1VXIbOG6chNCFkUWbQy6M+AFVtPKkA/3xAeJkJ3njoV66bfzwPHRcWQO+kcj5XqtbkjakoA=="],
"@oxlint-tsgolint/darwin-x64": ["@oxlint-tsgolint/darwin-x64@0.19.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-GakDTDACePvqOFq3N4oQCl8SyMMa7VBnqV0gDcXPuK50jdWCUqlxM9tgRJarjyIVvmDEJRGYOen+4uBtVwg4Aw=="],
"@oxlint-tsgolint/darwin-x64": ["@oxlint-tsgolint/darwin-x64@0.20.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-7HeVMuclGfG+NLZi2ybY0T4fMI7/XxO/208rJk+zEIloKkVnlh11Wd241JMGwgNFXn+MLJbOqOfojDb2Dt4L1g=="],
"@oxlint-tsgolint/linux-arm64": ["@oxlint-tsgolint/linux-arm64@0.19.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Ya0R7somo+KDhhkPtENJ9Q28Fost+aqA3MPe86pEqgmukHFc/KO65PgShOSbIFjZNptELEQvsWL8gDxYZWhH3w=="],
"@oxlint-tsgolint/linux-arm64": ["@oxlint-tsgolint/linux-arm64@0.20.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-zxhUwz+WSxE6oWlZLK2z2ps9yC6ebmgoYmjAl0Oa48+GqkZ56NVgo+wb8DURNv6xrggzHStQxqQxe3mK51HZag=="],
"@oxlint-tsgolint/linux-x64": ["@oxlint-tsgolint/linux-x64@0.19.0", "", { "os": "linux", "cpu": "x64" }, "sha512-yFH378jWc1k/oJmpk+TKpWbKvFieJJvsOHxVMSNFc+ukqs44ZSHVt4HFfAhXAt/bzVK2f7EIDTGp8Hm1OjoJ6Q=="],
"@oxlint-tsgolint/linux-x64": ["@oxlint-tsgolint/linux-x64@0.20.0", "", { "os": "linux", "cpu": "x64" }, "sha512-/1l6FnahC9im8PK+Ekkx/V3yetO/PzZnJegE2FXcv/iXEhbeVxP/ouiTYcUQu9shT1FWJCSNti1VJHH+21Y1dg=="],
"@oxlint-tsgolint/win32-arm64": ["@oxlint-tsgolint/win32-arm64@0.19.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-R6NyAtha7OWxh7NGBeFxqDTGAVl1Xj4xLa8Qj39PKbIDqBeVW8BIb+1nEnRp+Mo/VpRoeoFAcqlBsuMcUMd26Q=="],
"@oxlint-tsgolint/win32-arm64": ["@oxlint-tsgolint/win32-arm64@0.20.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-oPZ5Yz8sVdo7P/5q+i3IKeix31eFZ55JAPa1+RGPoe9PoaYVsdMvR6Jvib6YtrqoJnFPlg3fjEjlEPL8VBKYJA=="],
"@oxlint-tsgolint/win32-x64": ["@oxlint-tsgolint/win32-x64@0.19.0", "", { "os": "win32", "cpu": "x64" }, "sha512-2ePvxcbS5tPOmrQvxR8Kc+IqzdTtlrGeMDv+jjTYfkTFPmh2rF9yxVchi/4WM6js3gt2UauQeMV/tfnZNemENQ=="],
"@oxlint-tsgolint/win32-x64": ["@oxlint-tsgolint/win32-x64@0.20.0", "", { "os": "win32", "cpu": "x64" }, "sha512-4stx8RHj3SP9vQyRF/yZbz5igtPvYMEUR8CUoha4BVNZihi39DpCR8qkU7lpjB5Ga1DRMo2pHaA4bdTOMaY4mw=="],
"@oxlint/binding-android-arm-eabi": ["@oxlint/binding-android-arm-eabi@1.59.0", "", { "os": "android", "cpu": "arm" }, "sha512-etYDw/UaEv936AQUd/CRMBVd+e+XuuU6wC+VzOv1STvsTyZenLChepLWqLtnyTTp4YMlM22ypzogDDwqYxv5cg=="],
@ -512,37 +512,37 @@
"@reteps/dockerfmt": ["@reteps/dockerfmt@0.5.2", "", {}, "sha512-Hbr7yen4fP5TxGM54ucXa4o5NwWXatJ6Bd9I8gp0PValYbI4Rug2Gu+rVv7K7o/efQc3F5ctqWJz47rYaa8zBw=="],
"@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-rc.12", "", { "os": "android", "cpu": "arm64" }, "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA=="],
"@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-rc.13", "", { "os": "android", "cpu": "arm64" }, "sha512-5ZiiecKH2DXAVJTNN13gNMUcCDg4Jy8ZjbXEsPnqa248wgOVeYRX0iqXXD5Jz4bI9BFHgKsI2qmyJynstbmr+g=="],
"@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-rc.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg=="],
"@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-rc.13", "", { "os": "darwin", "cpu": "arm64" }, "sha512-tz/v/8G77seu8zAB3A5sK3UFoOl06zcshEzhUO62sAEtrEuW/H1CcyoupOrD+NbQJytYgA4CppXPzlrmp4JZKA=="],
"@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-rc.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw=="],
"@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-rc.13", "", { "os": "darwin", "cpu": "x64" }, "sha512-8DakphqOz8JrMYWTJmWA+vDJxut6LijZ8Xcdc4flOlAhU7PNVwo2MaWBF9iXjJAPo5rC/IxEFZDhJ3GC7NHvug=="],
"@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-rc.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q=="],
"@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-rc.13", "", { "os": "freebsd", "cpu": "x64" }, "sha512-4wBQFfjDuXYN/SVI8inBF3Aa+isq40rc6VMFbk5jcpolUBTe5cYnMsHZ51nFWsx3PVyyNN3vgoESki0Hmr/4BA=="],
"@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12", "", { "os": "linux", "cpu": "arm" }, "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q=="],
"@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.13", "", { "os": "linux", "cpu": "arm" }, "sha512-JW/e4yPIXLms+jmnbwwy5LA/LxVwZUWLN8xug+V200wzaVi5TEGIWQlh8o91gWYFxW609euI98OCCemmWGuPrw=="],
"@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg=="],
"@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-rc.13", "", { "os": "linux", "cpu": "arm64" }, "sha512-ZfKWpXiUymDnavepCaM6KG/uGydJ4l2nBmMxg60Ci4CbeefpqjPWpfaZM7PThOhk2dssqBAcwLc6rAyr0uTdXg=="],
"@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-rc.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw=="],
"@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-rc.13", "", { "os": "linux", "cpu": "arm64" }, "sha512-bmRg3O6Z0gq9yodKKWCIpnlH051sEfdVwt+6m5UDffAQMUUqU0xjnQqqAUm+Gu7ofAAly9DqiQDtKu2nPDEABA=="],
"@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g=="],
"@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.13", "", { "os": "linux", "cpu": "ppc64" }, "sha512-8Wtnbw4k7pMYN9B/mOEAsQ8HOiq7AZ31Ig4M9BKn2So4xRaFEhtCSa4ZJaOutOWq50zpgR4N5+L/opnlaCx8wQ=="],
"@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og=="],
"@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.0-rc.13", "", { "os": "linux", "cpu": "s390x" }, "sha512-D/0Nlo8mQuxSMohNJUF2lDXWRsFDsHldfRRgD9bRgktj+EndGPj4DOV37LqDKPYS+osdyhZEH7fTakTAEcW7qg=="],
"@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-rc.12", "", { "os": "linux", "cpu": "x64" }, "sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg=="],
"@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-rc.13", "", { "os": "linux", "cpu": "x64" }, "sha512-eRrPvat2YaVQcwwKi/JzOP6MKf1WRnOCr+VaI3cTWz3ZoLcP/654z90lVCJ4dAuMEpPdke0n+qyAqXDZdIC4rA=="],
"@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-rc.12", "", { "os": "linux", "cpu": "x64" }, "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig=="],
"@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-rc.13", "", { "os": "linux", "cpu": "x64" }, "sha512-PsdONiFRp8hR8KgVjTWjZ9s7uA3uueWL0t74/cKHfM4dR5zXYv4AjB8BvA+QDToqxAFg4ZkcVEqeu5F7inoz5w=="],
"@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-rc.12", "", { "os": "none", "cpu": "arm64" }, "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA=="],
"@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-rc.13", "", { "os": "none", "cpu": "arm64" }, "sha512-hCNXgC5dI3TVOLrPT++PKFNZ+1EtS0mLQwfXXXSUD/+rGlB65gZDwN/IDuxLpQP4x8RYYHqGomlUXzpO8aVI2w=="],
"@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-rc.12", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg=="],
"@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-rc.13", "", { "dependencies": { "@emnapi/core": "1.9.1", "@emnapi/runtime": "1.9.1", "@napi-rs/wasm-runtime": "^1.1.2" }, "cpu": "none" }, "sha512-viLS5C5et8NFtLWw9Sw3M/w4vvnVkbWkO7wSNh3C+7G1+uCkGpr6PcjNDSFcNtmXY/4trjPBqUfcOL+P3sWy/g=="],
"@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q=="],
"@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-rc.13", "", { "os": "win32", "cpu": "arm64" }, "sha512-Fqa3Tlt1xL4wzmAYxGNFV36Hb+VfPc9PYU+E25DAnswXv3ODDu/yyWjQDbXMo5AGWkQVjLgQExuVu8I/UaZhPQ=="],
"@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-rc.12", "", { "os": "win32", "cpu": "x64" }, "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw=="],
"@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-rc.13", "", { "os": "win32", "cpu": "x64" }, "sha512-/pLI5kPkGEi44TDlnbio3St/5gUFeN51YWNAk/Gnv6mEQBOahRBh52qVFVBpmrnU01n2yysvBML9Ynu7K4kGAQ=="],
"@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.12", "", {}, "sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw=="],
"@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.13", "", {}, "sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA=="],
"@sentry-internal/browser-utils": ["@sentry-internal/browser-utils@10.47.0", "", { "dependencies": { "@sentry/core": "10.47.0" } }, "sha512-bVFRAeJWMBcBCvJKIFCMJ1/yQToL4vPGqfmlnDZeypcxkqUDKQ/Y3ziLHXoDL2sx0lagcgU2vH1QhCQ67Aujjw=="],
@ -586,25 +586,25 @@
"@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="],
"@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.58.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.58.0", "@typescript-eslint/type-utils": "8.58.0", "@typescript-eslint/utils": "8.58.0", "@typescript-eslint/visitor-keys": "8.58.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.58.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg=="],
"@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.58.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.58.1", "@typescript-eslint/type-utils": "8.58.1", "@typescript-eslint/utils": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.58.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-eSkwoemjo76bdXl2MYqtxg51HNwUSkWfODUOQ3PaTLZGh9uIWWFZIjyjaJnex7wXDu+TRx+ATsnSxdN9YWfRTQ=="],
"@typescript-eslint/parser": ["@typescript-eslint/parser@8.58.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.58.0", "@typescript-eslint/types": "8.58.0", "@typescript-eslint/typescript-estree": "8.58.0", "@typescript-eslint/visitor-keys": "8.58.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA=="],
"@typescript-eslint/parser": ["@typescript-eslint/parser@8.58.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.58.1", "@typescript-eslint/types": "8.58.1", "@typescript-eslint/typescript-estree": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gGkiNMPqerb2cJSVcruigx9eHBlLG14fSdPdqMoOcBfh+vvn4iCq2C8MzUB89PrxOXk0y3GZ1yIWb9aOzL93bw=="],
"@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.58.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.58.0", "@typescript-eslint/types": "^8.58.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg=="],
"@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.58.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.58.1", "@typescript-eslint/types": "^8.58.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gfQ8fk6cxhtptek+/8ZIqw8YrRW5048Gug8Ts5IYcMLCw18iUgrZAEY/D7s4hkI0FxEfGakKuPK/XUMPzPxi5g=="],
"@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.58.0", "", { "dependencies": { "@typescript-eslint/types": "8.58.0", "@typescript-eslint/visitor-keys": "8.58.0" } }, "sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ=="],
"@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.58.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A=="],
"@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.58.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-JAr2hOIct2Q+qk3G+8YFfqkqi7sC86uNryT+2i5HzMa2MPjw4qNFvtjnw1IiA1rP7QhNKVe21mSSLaSjwA1Olw=="],
"@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.58.0", "", { "dependencies": { "@typescript-eslint/types": "8.58.0", "@typescript-eslint/typescript-estree": "8.58.0", "@typescript-eslint/utils": "8.58.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg=="],
"@typescript-eslint/types": ["@typescript-eslint/types@8.58.0", "", {}, "sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww=="],
"@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.58.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.58.0", "@typescript-eslint/tsconfig-utils": "8.58.0", "@typescript-eslint/types": "8.58.0", "@typescript-eslint/visitor-keys": "8.58.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA=="],
"@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.58.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.58.1", "@typescript-eslint/tsconfig-utils": "8.58.1", "@typescript-eslint/types": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-w4w7WR7GHOjqqPnvAYbazq+Y5oS68b9CzasGtnd6jIeOIeKUzYzupGTB2T4LTPSv4d+WPeccbxuneTFHYgAAWg=="],
"@typescript-eslint/utils": ["@typescript-eslint/utils@8.58.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.58.0", "@typescript-eslint/types": "8.58.0", "@typescript-eslint/typescript-estree": "8.58.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA=="],
"@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.0", "", { "dependencies": { "@typescript-eslint/types": "8.58.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ=="],
"@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ=="],
"@typescript/lib-decorators": ["@better-typescript-lib/decorators@2.12.0", "", { "peerDependencies": { "typescript": ">=4.5.2" } }, "sha512-/m9Q5Xk66ThUJidTsxmXJH0+49iCLl5PFmue0HkNSGrcPU96oaoKNY5sH1AslwA/OWVvBg3hE58ZwSGm6TQFuQ=="],
@ -726,7 +726,7 @@
"callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="],
"caniuse-lite": ["caniuse-lite@1.0.30001786", "", {}, "sha512-4oxTZEvqmLLrERwxO76yfKM7acZo310U+v4kqexI2TL1DkkUEMT8UijrxxcnVdxR3qkVf5awGRX+4Z6aPHVKrA=="],
"caniuse-lite": ["caniuse-lite@1.0.30001787", "", {}, "sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg=="],
"change-case": ["change-case@5.4.4", "", {}, "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w=="],
@ -838,7 +838,7 @@
"eslint-plugin-jsx-a11y": ["eslint-plugin-jsx-a11y@6.10.2", "", { "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", "axe-core": "^4.10.0", "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "safe-regex-test": "^1.0.3", "string.prototype.includes": "^2.0.1" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q=="],
"eslint-plugin-oxlint": ["eslint-plugin-oxlint@1.58.0", "", { "dependencies": { "jsonc-parser": "^3.3.1" }, "peerDependencies": { "oxlint": "~1.58.0" } }, "sha512-L3aZSg0x2fL0dXyOgoK8A1QUbnfGzXt6bX4AFD7Scauw6zVUBOZrES5eRTzLLGgeVg0el5lvqHGl1WFAGo14DA=="],
"eslint-plugin-oxlint": ["eslint-plugin-oxlint@1.59.0", "", { "dependencies": { "jsonc-parser": "^3.3.1" }, "peerDependencies": { "oxlint": "~1.59.0" } }, "sha512-g0DR+xSsnUdyaMc2KAXvBVGWz5V4GwlAE1PM+ocKxl2Eg7YgOjkRLLbxgJ3bhYOhRLhD8F0X4DjJu2FSDvrvAg=="],
"eslint-plugin-perfectionist": ["eslint-plugin-perfectionist@5.8.0", "", { "dependencies": { "@typescript-eslint/utils": "^8.58.0", "natural-orderby": "^5.0.0" }, "peerDependencies": { "eslint": "^8.45.0 || ^9.0.0 || ^10.0.0" } }, "sha512-k8uIptWIxkUclonCFGyDzgYs9NI+Qh0a7cUXS3L7IYZDEsjXuimFBVbxXPQQngWqMiaxJRwbtYB4smMGMqF+cw=="],
@ -1076,7 +1076,7 @@
"kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="],
"knip": ["knip@6.3.0", "", { "dependencies": { "@nodelib/fs.walk": "^1.2.3", "fast-glob": "^3.3.3", "formatly": "^0.3.0", "get-tsconfig": "4.13.7", "jiti": "^2.6.0", "minimist": "^1.2.8", "oxc-parser": "^0.121.0", "oxc-resolver": "^11.19.1", "picocolors": "^1.1.1", "picomatch": "^4.0.1", "smol-toml": "^1.6.1", "strip-json-comments": "5.0.3", "unbash": "^2.2.0", "yaml": "^2.8.2", "zod": "^4.1.11" }, "bin": { "knip": "bin/knip.js", "knip-bun": "bin/knip-bun.js" } }, "sha512-g6dVPoTw6iNm3cubC5IWxVkVsd0r5hXhTBTbAGIEQN53GdA2ZM/slMTPJ7n5l8pBebNQPHpxjmKxuR4xVQ2/hQ=="],
"knip": ["knip@6.3.1", "", { "dependencies": { "@nodelib/fs.walk": "^1.2.3", "fast-glob": "^3.3.3", "formatly": "^0.3.0", "get-tsconfig": "4.13.7", "jiti": "^2.6.0", "minimist": "^1.2.8", "oxc-parser": "^0.121.0", "oxc-resolver": "^11.19.1", "picocolors": "^1.1.1", "picomatch": "^4.0.1", "smol-toml": "^1.6.1", "strip-json-comments": "5.0.3", "unbash": "^2.2.0", "yaml": "^2.8.2", "zod": "^4.1.11" }, "bin": { "knip": "bin/knip.js", "knip-bun": "bin/knip-bun.js" } }, "sha512-22kLJloVcOVOAudCxlFOC0ICAMme7dKsS7pVTEnrmyKGpswb8ieznvAiSKUeFVDJhb01ect6dkDc1Ha1g1sPpg=="],
"known-css-properties": ["known-css-properties@0.37.0", "", {}, "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ=="],
@ -1258,7 +1258,7 @@
"oxlint": ["oxlint@1.59.0", "", { "optionalDependencies": { "@oxlint/binding-android-arm-eabi": "1.59.0", "@oxlint/binding-android-arm64": "1.59.0", "@oxlint/binding-darwin-arm64": "1.59.0", "@oxlint/binding-darwin-x64": "1.59.0", "@oxlint/binding-freebsd-x64": "1.59.0", "@oxlint/binding-linux-arm-gnueabihf": "1.59.0", "@oxlint/binding-linux-arm-musleabihf": "1.59.0", "@oxlint/binding-linux-arm64-gnu": "1.59.0", "@oxlint/binding-linux-arm64-musl": "1.59.0", "@oxlint/binding-linux-ppc64-gnu": "1.59.0", "@oxlint/binding-linux-riscv64-gnu": "1.59.0", "@oxlint/binding-linux-riscv64-musl": "1.59.0", "@oxlint/binding-linux-s390x-gnu": "1.59.0", "@oxlint/binding-linux-x64-gnu": "1.59.0", "@oxlint/binding-linux-x64-musl": "1.59.0", "@oxlint/binding-openharmony-arm64": "1.59.0", "@oxlint/binding-win32-arm64-msvc": "1.59.0", "@oxlint/binding-win32-ia32-msvc": "1.59.0", "@oxlint/binding-win32-x64-msvc": "1.59.0" }, "peerDependencies": { "oxlint-tsgolint": ">=0.18.0" }, "optionalPeers": ["oxlint-tsgolint"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-0xBLeGGjP4vD9pygRo8iuOkOzEU1MqOnfiOl7KYezL/QvWL8NUg6n03zXc7ZVqltiOpUxBk2zgHI3PnRIEdAvw=="],
"oxlint-tsgolint": ["oxlint-tsgolint@0.19.0", "", { "optionalDependencies": { "@oxlint-tsgolint/darwin-arm64": "0.19.0", "@oxlint-tsgolint/darwin-x64": "0.19.0", "@oxlint-tsgolint/linux-arm64": "0.19.0", "@oxlint-tsgolint/linux-x64": "0.19.0", "@oxlint-tsgolint/win32-arm64": "0.19.0", "@oxlint-tsgolint/win32-x64": "0.19.0" }, "bin": { "tsgolint": "bin/tsgolint.js" } }, "sha512-pSzUmDjMyjC8iUUZ7fCLo0D1iUaYIfodd/WIQ6Zra11YkjkUQk3BOFoW4I5ec6uZ/0s2FEmxtiZ7hiTXFRp1cg=="],
"oxlint-tsgolint": ["oxlint-tsgolint@0.20.0", "", { "optionalDependencies": { "@oxlint-tsgolint/darwin-arm64": "0.20.0", "@oxlint-tsgolint/darwin-x64": "0.20.0", "@oxlint-tsgolint/linux-arm64": "0.20.0", "@oxlint-tsgolint/linux-x64": "0.20.0", "@oxlint-tsgolint/win32-arm64": "0.20.0", "@oxlint-tsgolint/win32-x64": "0.20.0" }, "bin": { "tsgolint": "bin/tsgolint.js" } }, "sha512-/Uc9TQyN1l8w9QNvXtVHYtz+SzDJHKpb5X0UnHodl0BVzijUPk0LPlDOHAvogd1UI+iy9ZSF6gQxEqfzUxCULQ=="],
"p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="],
@ -1368,7 +1368,7 @@
"reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
"rolldown": ["rolldown@1.0.0-rc.12", "", { "dependencies": { "@oxc-project/types": "=0.122.0", "@rolldown/pluginutils": "1.0.0-rc.12" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.12", "@rolldown/binding-darwin-arm64": "1.0.0-rc.12", "@rolldown/binding-darwin-x64": "1.0.0-rc.12", "@rolldown/binding-freebsd-x64": "1.0.0-rc.12", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A=="],
"rolldown": ["rolldown@1.0.0-rc.13", "", { "dependencies": { "@oxc-project/types": "=0.123.0", "@rolldown/pluginutils": "1.0.0-rc.13" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.13", "@rolldown/binding-darwin-arm64": "1.0.0-rc.13", "@rolldown/binding-darwin-x64": "1.0.0-rc.13", "@rolldown/binding-freebsd-x64": "1.0.0-rc.13", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.13", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.13", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.13", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.13", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.13", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.13", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.13", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.13", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.13", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.13", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.13" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-bvVj8YJmf0rq4pSFmH7laLa6pYrhghv3PRzrCdRAr23g66zOKVJ4wkvFtgohtPLWmthgg8/rkaqRHrpUEh0Zbw=="],
"run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
@ -1556,7 +1556,7 @@
"typescript": ["typescript@6.0.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ=="],
"typescript-eslint": ["typescript-eslint@8.58.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.58.0", "@typescript-eslint/parser": "8.58.0", "@typescript-eslint/typescript-estree": "8.58.0", "@typescript-eslint/utils": "8.58.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA=="],
"typescript-eslint": ["typescript-eslint@8.58.1", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.58.1", "@typescript-eslint/parser": "8.58.1", "@typescript-eslint/typescript-estree": "8.58.1", "@typescript-eslint/utils": "8.58.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-gf6/oHChByg9HJvhMO1iBexJh12AqqTfnuxscMDOVqfJW3htsdRJI/GfPpHTTcyeB8cSTUY2JcZmVgoyPqcrDg=="],
"unbash": ["unbash@2.2.0", "", {}, "sha512-X2wH19RAPZE3+ldGicOkoj/SIA83OIxcJ6Cuaw23hf8Xc6fQpvZXY0SftE2JgS0QhYLUG4uwodSI3R53keyh7w=="],
@ -1588,7 +1588,7 @@
"varint": ["varint@6.0.0", "", {}, "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg=="],
"vite": ["vite@8.0.5", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.8", "rolldown": "1.0.0-rc.12", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-nmu43Qvq9UopTRfMx2jOYW5l16pb3iDC1JH6yMuPkpVbzK0k+L7dfsEDH4jRgYFmsg0sTAqkojoZgzLMlwHsCQ=="],
"vite": ["vite@8.0.7", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.8", "rolldown": "1.0.0-rc.13", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-P1PbweD+2/udplnThz3btF4cf6AgPky7kk23RtHUkJIU5BIxwPprhRGmOAHs6FTI7UiGbTNrgNP6jSYD6JaRnw=="],
"vite-tsconfig-paths": ["vite-tsconfig-paths@6.1.1", "", { "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", "tsconfck": "^3.0.3" }, "peerDependencies": { "vite": "*" } }, "sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg=="],
@ -1634,14 +1634,36 @@
"@gcch/configuration-eslint/eslint": ["eslint@10.1.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.3", "@eslint/config-helpers": "^0.5.3", "@eslint/core": "^1.1.1", "@eslint/plugin-kit": "^0.6.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.2.4", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA=="],
"@gcch/configuration-oxlint/oxlint-tsgolint": ["oxlint-tsgolint@0.20.0", "", { "optionalDependencies": { "@oxlint-tsgolint/darwin-arm64": "0.20.0", "@oxlint-tsgolint/darwin-x64": "0.20.0", "@oxlint-tsgolint/linux-arm64": "0.20.0", "@oxlint-tsgolint/linux-x64": "0.20.0", "@oxlint-tsgolint/win32-arm64": "0.20.0", "@oxlint-tsgolint/win32-x64": "0.20.0" }, "bin": { "tsgolint": "bin/tsgolint.js" } }, "sha512-/Uc9TQyN1l8w9QNvXtVHYtz+SzDJHKpb5X0UnHodl0BVzijUPk0LPlDOHAvogd1UI+iy9ZSF6gQxEqfzUxCULQ=="],
"@gcch/configuration-eslint/typescript-eslint": ["typescript-eslint@8.58.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.58.0", "@typescript-eslint/parser": "8.58.0", "@typescript-eslint/typescript-estree": "8.58.0", "@typescript-eslint/utils": "8.58.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-e2TQzKfaI85fO+F3QywtX+tCTsu/D3WW5LVU6nz8hTFKFZ8yBJ6mSYRpXqdR3mFjPWmO0eWsTa5f+UpAOe/FMA=="],
"@gcch/configuration-prettier/prettier-plugin-sh": ["prettier-plugin-sh@0.18.0", "", { "dependencies": { "@reteps/dockerfmt": "^0.3.6", "sh-syntax": "^0.5.8" }, "peerDependencies": { "prettier": "^3.6.0" } }, "sha512-cW1XL27FOJQ/qGHOW6IHwdCiNWQsAgK+feA8V6+xUTaH0cD3Mh+tFAtBvEEWvuY6hTDzRV943Fzeii+qMOh7nQ=="],
"@keyv/bigmap/keyv": ["keyv@5.6.0", "", { "dependencies": { "@keyv/serialize": "^1.1.1" } }, "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw=="],
"@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1" } }, "sha512-TPYUEqJK6avLcEjumWsIuTpuYODTTDAtoMdt8ZZa93uWMTX13Nb8L5leSje1NluammvU+oI3QRr5lLXPgihX3w=="],
"@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "@typescript-eslint/typescript-estree": "8.58.1", "@typescript-eslint/utils": "8.58.1", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-HUFxvTJVroT+0rXVJC7eD5zol6ID+Sn5npVPWoFuHGg9Ncq5Q4EYstqR+UOqaNRFXi5TYkpXXkLhoCHe3G0+7w=="],
"@typescript-eslint/eslint-plugin/@typescript-eslint/utils": ["@typescript-eslint/utils@8.58.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.58.1", "@typescript-eslint/types": "8.58.1", "@typescript-eslint/typescript-estree": "8.58.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-Ln8R0tmWC7pTtLOzgJzYTXSCjJ9rDNHAqTaVONF4FEi2qwce8mD9iSOxOpLFFvWp/wBFlew0mjM1L1ihYWfBdQ=="],
"@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
"@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1" } }, "sha512-TPYUEqJK6avLcEjumWsIuTpuYODTTDAtoMdt8ZZa93uWMTX13Nb8L5leSje1NluammvU+oI3QRr5lLXPgihX3w=="],
"@typescript-eslint/parser/@typescript-eslint/types": ["@typescript-eslint/types@8.58.1", "", {}, "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw=="],
"@typescript-eslint/project-service/@typescript-eslint/types": ["@typescript-eslint/types@8.58.1", "", {}, "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw=="],
"@typescript-eslint/scope-manager/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.0", "", { "dependencies": { "@typescript-eslint/types": "8.58.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ=="],
"@typescript-eslint/type-utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.58.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.58.0", "@typescript-eslint/tsconfig-utils": "8.58.0", "@typescript-eslint/types": "8.58.0", "@typescript-eslint/visitor-keys": "8.58.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA=="],
"@typescript-eslint/typescript-estree/@typescript-eslint/types": ["@typescript-eslint/types@8.58.1", "", {}, "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw=="],
"@typescript-eslint/utils/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.58.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.58.0", "@typescript-eslint/tsconfig-utils": "8.58.0", "@typescript-eslint/types": "8.58.0", "@typescript-eslint/visitor-keys": "8.58.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA=="],
"@typescript-eslint/visitor-keys/@typescript-eslint/types": ["@typescript-eslint/types@8.58.1", "", {}, "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw=="],
"astro-eslint-parser/eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="],
"astro-eslint-parser/eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="],
@ -1680,7 +1702,7 @@
"qified/hookified": ["hookified@2.1.1", "", {}, "sha512-AHb76R16GB5EsPBE2J7Ko5kiEyXwviB9P5SMrAKcuAu4vJPZttViAbj9+tZeaQE5zjDme+1vcHP78Yj/WoAveA=="],
"rolldown/@oxc-project/types": ["@oxc-project/types@0.122.0", "", {}, "sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA=="],
"rolldown/@oxc-project/types": ["@oxc-project/types@0.123.0", "", {}, "sha512-YtECP/y8Mj1lSHiUWGSRzy/C6teUKlS87dEfuVKT09LgQbUsBW1rNg+MiJ4buGu3yuADV60gbIvo9/HplA56Ew=="],
"stylelint/file-entry-cache": ["file-entry-cache@11.1.2", "", { "dependencies": { "flat-cache": "^6.1.20" } }, "sha512-N2WFfK12gmrK1c1GXOqiAJ1tc5YE+R53zvQ+t5P8S5XhnmKYVB5eZEiLNZKDSmoG8wqqbF9EXYBBW/nef19log=="],
@ -1696,6 +1718,8 @@
"table/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
"typescript-eslint/@typescript-eslint/utils": ["@typescript-eslint/utils@8.58.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.58.1", "@typescript-eslint/types": "8.58.1", "@typescript-eslint/typescript-estree": "8.58.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-Ln8R0tmWC7pTtLOzgJzYTXSCjJ9rDNHAqTaVONF4FEi2qwce8mD9iSOxOpLFFvWp/wBFlew0mjM1L1ihYWfBdQ=="],
"vite/fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
"@gcch/configuration-eslint/eslint/@eslint/config-array": ["@eslint/config-array@0.23.3", "", { "dependencies": { "@eslint/object-schema": "^3.0.3", "debug": "^4.3.1", "minimatch": "^10.2.4" } }, "sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw=="],
@ -1706,20 +1730,32 @@
"@gcch/configuration-eslint/eslint/@eslint/plugin-kit": ["@eslint/plugin-kit@0.6.1", "", { "dependencies": { "@eslint/core": "^1.1.1", "levn": "^0.4.1" } }, "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ=="],
"@gcch/configuration-oxlint/oxlint-tsgolint/@oxlint-tsgolint/darwin-arm64": ["@oxlint-tsgolint/darwin-arm64@0.20.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-KKQcIHZHMxqpHUA1VXIbOG6chNCFkUWbQy6M+AFVtPKkA/3xAeJkJ3njoV66bfzwPHRcWQO+kcj5XqtbkjakoA=="],
"@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.58.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.58.0", "@typescript-eslint/type-utils": "8.58.0", "@typescript-eslint/utils": "8.58.0", "@typescript-eslint/visitor-keys": "8.58.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.58.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg=="],
"@gcch/configuration-oxlint/oxlint-tsgolint/@oxlint-tsgolint/darwin-x64": ["@oxlint-tsgolint/darwin-x64@0.20.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-7HeVMuclGfG+NLZi2ybY0T4fMI7/XxO/208rJk+zEIloKkVnlh11Wd241JMGwgNFXn+MLJbOqOfojDb2Dt4L1g=="],
"@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/parser": ["@typescript-eslint/parser@8.58.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.58.0", "@typescript-eslint/types": "8.58.0", "@typescript-eslint/typescript-estree": "8.58.0", "@typescript-eslint/visitor-keys": "8.58.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA=="],
"@gcch/configuration-oxlint/oxlint-tsgolint/@oxlint-tsgolint/linux-arm64": ["@oxlint-tsgolint/linux-arm64@0.20.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-zxhUwz+WSxE6oWlZLK2z2ps9yC6ebmgoYmjAl0Oa48+GqkZ56NVgo+wb8DURNv6xrggzHStQxqQxe3mK51HZag=="],
"@gcch/configuration-oxlint/oxlint-tsgolint/@oxlint-tsgolint/linux-x64": ["@oxlint-tsgolint/linux-x64@0.20.0", "", { "os": "linux", "cpu": "x64" }, "sha512-/1l6FnahC9im8PK+Ekkx/V3yetO/PzZnJegE2FXcv/iXEhbeVxP/ouiTYcUQu9shT1FWJCSNti1VJHH+21Y1dg=="],
"@gcch/configuration-oxlint/oxlint-tsgolint/@oxlint-tsgolint/win32-arm64": ["@oxlint-tsgolint/win32-arm64@0.20.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-oPZ5Yz8sVdo7P/5q+i3IKeix31eFZ55JAPa1+RGPoe9PoaYVsdMvR6Jvib6YtrqoJnFPlg3fjEjlEPL8VBKYJA=="],
"@gcch/configuration-oxlint/oxlint-tsgolint/@oxlint-tsgolint/win32-x64": ["@oxlint-tsgolint/win32-x64@0.20.0", "", { "os": "win32", "cpu": "x64" }, "sha512-4stx8RHj3SP9vQyRF/yZbz5igtPvYMEUR8CUoha4BVNZihi39DpCR8qkU7lpjB5Ga1DRMo2pHaA4bdTOMaY4mw=="],
"@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.58.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.58.0", "@typescript-eslint/tsconfig-utils": "8.58.0", "@typescript-eslint/types": "8.58.0", "@typescript-eslint/visitor-keys": "8.58.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA=="],
"@gcch/configuration-prettier/prettier-plugin-sh/@reteps/dockerfmt": ["@reteps/dockerfmt@0.3.6", "", {}, "sha512-Tb5wIMvBf/nLejTQ61krK644/CEMB/cpiaIFXqGApfGqO3GwcR3qnI0DbmkFVCl2OyEp8LnLX3EkucoL0+tbFg=="],
"@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@8.58.1", "", {}, "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw=="],
"@typescript-eslint/eslint-plugin/@typescript-eslint/type-utils/@typescript-eslint/types": ["@typescript-eslint/types@8.58.1", "", {}, "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw=="],
"@typescript-eslint/eslint-plugin/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.58.1", "", {}, "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw=="],
"@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.58.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.58.0", "@typescript-eslint/types": "^8.58.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg=="],
"@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.58.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A=="],
"@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.0", "", { "dependencies": { "@typescript-eslint/types": "8.58.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ=="],
"@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.58.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.58.0", "@typescript-eslint/types": "^8.58.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg=="],
"@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.58.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A=="],
"@typescript-eslint/utils/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.0", "", { "dependencies": { "@typescript-eslint/types": "8.58.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ=="],
"eslint-plugin-jsx-a11y/minimatch/brace-expansion": ["brace-expansion@1.1.13", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w=="],
"stylelint/file-entry-cache/flat-cache": ["flat-cache@6.1.22", "", { "dependencies": { "cacheable": "^2.3.4", "flatted": "^3.4.2", "hookified": "^1.15.0" } }, "sha512-N2dnzVJIphnNsjHcrxGW7DePckJ6haPrSFqpsBUhHYgwtKGVq4JrBGielEGD2fCVnsGm1zlBVZ8wGhkyuetgug=="],
@ -1730,8 +1766,24 @@
"table/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
"typescript-eslint/@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.58.1", "", { "dependencies": { "@typescript-eslint/types": "8.58.1", "@typescript-eslint/visitor-keys": "8.58.1" } }, "sha512-TPYUEqJK6avLcEjumWsIuTpuYODTTDAtoMdt8ZZa93uWMTX13Nb8L5leSje1NluammvU+oI3QRr5lLXPgihX3w=="],
"typescript-eslint/@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.58.1", "", {}, "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw=="],
"@gcch/configuration-eslint/eslint/@eslint/config-array/@eslint/object-schema": ["@eslint/object-schema@3.0.3", "", {}, "sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ=="],
"@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/eslint-plugin/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.0", "", { "dependencies": { "@typescript-eslint/types": "8.58.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ=="],
"@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
"@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/parser/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.0", "", { "dependencies": { "@typescript-eslint/types": "8.58.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ=="],
"@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.58.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.58.0", "@typescript-eslint/types": "^8.58.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg=="],
"@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.58.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A=="],
"@gcch/configuration-eslint/typescript-eslint/@typescript-eslint/typescript-estree/@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.58.0", "", { "dependencies": { "@typescript-eslint/types": "8.58.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ=="],
"eslint-plugin-jsx-a11y/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
}
}

30
composer.lock generated
View file

@ -585,7 +585,7 @@
},
{
"name": "illuminate/collections",
"version": "v13.3.0",
"version": "v13.4.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/collections.git",
@ -644,7 +644,7 @@
},
{
"name": "illuminate/conditionable",
"version": "v13.3.0",
"version": "v13.4.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/conditionable.git",
@ -690,7 +690,7 @@
},
{
"name": "illuminate/contracts",
"version": "v13.3.0",
"version": "v13.4.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/contracts.git",
@ -738,7 +738,7 @@
},
{
"name": "illuminate/macroable",
"version": "v13.3.0",
"version": "v13.4.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/macroable.git",
@ -784,7 +784,7 @@
},
{
"name": "illuminate/reflection",
"version": "v13.3.0",
"version": "v13.4.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/reflection.git",
@ -835,16 +835,16 @@
},
{
"name": "illuminate/support",
"version": "v13.3.0",
"version": "v13.4.0",
"source": {
"type": "git",
"url": "https://github.com/illuminate/support.git",
"reference": "f31e168e236a90d96d7894cd1f107b1ba095de69"
"reference": "e7ce0496cae80c3e1aa72e37f09335a6454846dc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/illuminate/support/zipball/f31e168e236a90d96d7894cd1f107b1ba095de69",
"reference": "f31e168e236a90d96d7894cd1f107b1ba095de69",
"url": "https://api.github.com/repos/illuminate/support/zipball/e7ce0496cae80c3e1aa72e37f09335a6454846dc",
"reference": "e7ce0496cae80c3e1aa72e37f09335a6454846dc",
"shasum": ""
},
"require": {
@ -910,7 +910,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2026-03-30T13:32:27+00:00"
"time": "2026-04-07T13:34:38+00:00"
},
{
"name": "laravel/helpers",
@ -1220,16 +1220,16 @@
},
{
"name": "nesbot/carbon",
"version": "3.11.3",
"version": "3.11.4",
"source": {
"type": "git",
"url": "https://github.com/CarbonPHP/carbon.git",
"reference": "6a7e652845bb018c668220c2a545aded8594fbbf"
"reference": "e890471a3494740f7d9326d72ce6a8c559ffee60"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/6a7e652845bb018c668220c2a545aded8594fbbf",
"reference": "6a7e652845bb018c668220c2a545aded8594fbbf",
"url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/e890471a3494740f7d9326d72ce6a8c559ffee60",
"reference": "e890471a3494740f7d9326d72ce6a8c559ffee60",
"shasum": ""
},
"require": {
@ -1321,7 +1321,7 @@
"type": "tidelift"
}
],
"time": "2026-03-11T17:23:39+00:00"
"time": "2026-04-07T09:57:54+00:00"
},
{
"name": "oscarotero/env",

7467
mago-schema.json Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,25 +1,37 @@
#:schema mago-schema.json
php-version = "8.5"
stack-size = 8388608
threads = 8
stack-size = 0
threads = 0
[source]
excludes = ["web/wp/wp-admin/includes/noop.php"]
extensions = ["php"]
includes = ["config", "vendor", "web/app/plugins", "web/vendor", "web/wp"]
paths = ["web/app/themes/haiku-atelier-2024"]
workspace = "."
[linter]
integrations = ["wordpress"]
[linter.rules]
ambiguous-function-call = { enabled = true }
halstead = { effort-threshold = 7000 }
literal-named-argument = { enabled = false }
no-inline = { enabled = true }
no-redundant-readonly = { enabled = true }
no-redundant-use = { enabled = true }
no-variable-variable = { enabled = true }
require-namespace = { enabled = true }
ambiguous-function-call = { enabled = true }
array-style = { enabled = true, style = "short" }
halstead = { effort-threshold = 7000 }
literal-named-argument = { enabled = false }
missing-docs = { enabled = true }
no-array-accumulation-in-loop = { enabled = true }
no-inline = { enabled = true }
no-is-null = { enabled = true }
no-iterator-to-array-in-foreach = { enabled = true }
no-parameter-shadowing = { enabled = true }
no-redundant-readonly = { enabled = true }
no-redundant-use = { enabled = true }
no-variable-variable = { enabled = true }
require-namespace = { enabled = true }
sorted-integer-keys = { enabled = true }
# Les else permettent de conserver les branches d'une condition à la même indentation.
no-else-clause = { enabled = false }
[analyzer]
allow-possibly-undefined-array-keys = false
@ -41,13 +53,16 @@ threads = 8
require-api-or-internal = true
strict-list-index-checks = true
trust-existence-checks = false
check-experimental = true
check-name-casing = true
memoize-properties = true
[analyzer.performance]
saturation-complexity-threshold = 16384
disjunction-complexity-threshold = 8192
negation-complexity-threshold = 8192
consensus-limit-threshold = 512
formula-size-threshold = 1024
string-combination-threshold = 256
integer-combination-threshold = 256
array-combination-threshold = 256
consensus-limit-threshold = 512
disjunction-complexity-threshold = 8192
formula-size-threshold = 1024
integer-combination-threshold = 256
negation-complexity-threshold = 8192
saturation-complexity-threshold = 16384
string-combination-threshold = 256

View file

@ -32,21 +32,21 @@
"@vitejs/plugin-legacy": "^8.0.1",
"better-typescript-lib": "^2.12.0",
"browserslist": "^4.28.2",
"caniuse-lite": "^1.0.30001786",
"caniuse-lite": "^1.0.30001787",
"eslint": "^10.2.0",
"eslint-plugin-functional": "^9.0.4",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-oxlint": "^1.58.0",
"eslint-plugin-oxlint": "^1.59.0",
"eslint-plugin-perfectionist": "^5.8.0",
"eslint-plugin-sonarjs": "^4.0.2",
"fdir": "^6.5.0",
"globals": "^17.4.0",
"jiti": "^2.6.1",
"knip": "^6.3.0",
"knip": "^6.3.1",
"lightningcss": "^1.32.0",
"lightningcss-cli": "^1.32.0",
"oxlint": "^1.59.0",
"oxlint-tsgolint": "^0.19.0",
"oxlint-tsgolint": "^0.20.0",
"playwright": "^1.59.1",
"prettier": "^3.8.1",
"prettier-plugin-pkg": "^0.22.1",
@ -59,8 +59,8 @@
"stylelint-declaration-block-no-ignored-properties": "^3.0.0",
"stylelint-plugin-logical-css": "^2.1.0",
"typescript": "6.0.2",
"typescript-eslint": "^8.58.0",
"vite": "^8.0.5",
"typescript-eslint": "^8.58.1",
"vite": "^8.0.7",
"vite-tsconfig-paths": "^6.1.1"
},
"browserslist": [

View file

@ -1,9 +1,3 @@
<svg
viewBox="0 0 90 90"
xmlns="http://www.w3.org/2000/svg"
>
<path
fill="#E7FFB4"
d="M85.241 48.817c-1.365-3.553-4.989-5.856-9.771-6.737 7.718-5.116 11.871-12.229 9.706-17.868-2.79-7.268-15.031-9.329-27.335-4.602-3.173 1.218-6.032 2.768-8.491 4.521l-.024-.068c-2.791-7.269-15.035-9.329-27.338-4.601C9.681 24.19 1.969 33.914 4.76 41.184c1.262 3.283 4.458 5.501 8.712 6.514C6.419 52.746 2.721 59.473 4.79 64.857c2.791 7.27 15.033 9.329 27.337 4.602 3.077-1.183 5.866-2.676 8.278-4.366.076.284.162.565.269.843 2.791 7.271 15.032 9.33 27.336 4.604 12.31-4.73 20.022-14.456 17.231-21.723"
/>
<svg viewBox="0 0 90 90" xmlns="http://www.w3.org/2000/svg">
<path fill="#E7FFB4" d="M85.241 48.817c-1.365-3.553-4.989-5.856-9.771-6.737 7.718-5.116 11.871-12.229 9.706-17.868-2.79-7.268-15.031-9.329-27.335-4.602-3.173 1.218-6.032 2.768-8.491 4.521l-.024-.068c-2.791-7.269-15.035-9.329-27.338-4.601C9.681 24.19 1.969 33.914 4.76 41.184c1.262 3.283 4.458 5.501 8.712 6.514C6.419 52.746 2.721 59.473 4.79 64.857c2.791 7.27 15.033 9.329 27.337 4.602 3.077-1.183 5.866-2.676 8.278-4.366.076.284.162.565.269.843 2.791 7.271 15.032 9.33 27.336 4.604 12.31-4.73 20.022-14.456 17.231-21.723" />
</svg>

Before

Width:  |  Height:  |  Size: 611 B

After

Width:  |  Height:  |  Size: 596 B

Before After
Before After

View file

@ -1,17 +1,11 @@
<svg
viewBox="43.801 35.326 186.516 130.185"
xmlns="http://www.w3.org/2000/svg"
>
<svg viewBox="43.801 35.326 186.516 130.185" xmlns="http://www.w3.org/2000/svg">
<path
opacity=".5"
fill="#DFDEDE"
opacity=".5" fill="#DFDEDE"
d="M226.058 108.87c-3.021-7.855-11.031-12.949-21.609-14.896 17.068-11.315 26.261-27.05 21.471-39.518-6.177-16.074-33.244-20.635-60.461-10.179-7.015 2.694-13.343 6.124-18.778 10.001-.018-.05-.032-.102-.052-.152-6.174-16.076-33.251-20.633-60.46-10.178-27.223 10.456-44.276 31.967-38.105 48.043 2.792 7.266 9.862 12.164 19.273 14.402-15.603 11.168-23.785 26.049-19.206 37.953 6.176 16.079 33.251 20.633 60.46 10.176 6.809-2.611 12.975-5.918 18.311-9.656.169.627.358 1.251.595 1.867 6.174 16.075 33.241 20.631 60.462 10.176 27.22-10.455 44.272-31.965 38.099-48.039"
/>
<path
fill="none"
stroke="#2B2B2B"
stroke-width="5"
stroke-miterlimit="10"
fill="none" stroke="#2B2B2B"
stroke-width="5" stroke-miterlimit="10"
d="M226.058 108.87c-3.021-7.855-11.031-12.949-21.609-14.896 17.068-11.315 26.261-27.05 21.471-39.518-6.177-16.074-33.244-20.635-60.461-10.179-7.015 2.694-13.343 6.124-18.778 10.001-.018-.05-.032-.102-.052-.152-6.174-16.076-33.251-20.633-60.46-10.178-27.223 10.456-44.276 31.967-38.105 48.043 2.792 7.266 9.862 12.164 19.273 14.402-15.603 11.168-23.785 26.049-19.206 37.953 6.176 16.079 33.251 20.633 60.46 10.176 6.809-2.611 12.975-5.918 18.311-9.656.169.627.358 1.251.595 1.867 6.174 16.075 33.241 20.631 60.462 10.176 27.22-10.455 44.272-31.965 38.099-48.039z"
/>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before After
Before After

View file

@ -1,17 +1,11 @@
<svg
viewBox="43.727 35.716 186.52 130.194"
xmlns="http://www.w3.org/2000/svg"
>
<svg viewBox="43.727 35.716 186.52 130.194" xmlns="http://www.w3.org/2000/svg">
<path
opacity=".5"
fill="#DFDEDE"
opacity=".5" fill="#DFDEDE"
d="M225.982 109.258c-3.021-7.855-11.031-12.949-21.609-14.896 17.068-11.315 26.261-27.05 21.471-39.518-6.177-16.074-33.244-20.635-60.461-10.179-7.015 2.694-13.343 6.124-18.778 10.001-.018-.05-.032-.102-.052-.152-6.174-16.076-33.251-20.633-60.46-10.178-27.222 10.456-44.276 31.967-38.104 48.043 2.792 7.266 9.862 12.164 19.273 14.402-15.603 11.168-23.785 26.049-19.206 37.953 6.176 16.079 33.251 20.633 60.46 10.176 6.809-2.611 12.975-5.918 18.311-9.656.169.627.358 1.251.595 1.867 6.174 16.075 33.241 20.631 60.462 10.176 27.22-10.455 44.272-31.965 38.098-48.039"
/>
<path
fill="none"
stroke="#D8FFA5"
stroke-width="5"
stroke-miterlimit="10"
fill="none" stroke="#D8FFA5"
stroke-width="5" stroke-miterlimit="10"
d="M225.982 109.258c-3.021-7.855-11.031-12.949-21.609-14.896 17.068-11.315 26.261-27.05 21.471-39.518-6.177-16.074-33.244-20.635-60.461-10.179-7.015 2.694-13.343 6.124-18.778 10.001-.018-.05-.032-.102-.052-.152-6.174-16.076-33.251-20.633-60.46-10.178-27.222 10.456-44.276 31.967-38.104 48.043 2.792 7.266 9.862 12.164 19.273 14.402-15.603 11.168-23.785 26.049-19.206 37.953 6.176 16.079 33.251 20.633 60.46 10.176 6.809-2.611 12.975-5.918 18.311-9.656.169.627.358 1.251.595 1.867 6.174 16.075 33.241 20.631 60.462 10.176 27.22-10.455 44.272-31.965 38.098-48.039z"
/>
</svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before After
Before After

View file

@ -1,6 +1,3 @@
<svg
viewBox="94.634 56.652 88.879 79.521"
xmlns="http://www.w3.org/2000/svg"
>
<svg viewBox="94.634 56.652 88.879 79.521" xmlns="http://www.w3.org/2000/svg">
<path d="m94.623 136.156 88.869-36.863-88.869-42.648s21.33 20.87 21.33 39.756c0 18.891-21.33 39.755-21.33 39.755" />
</svg>

Before

Width:  |  Height:  |  Size: 210 B

After

Width:  |  Height:  |  Size: 205 B

Before After
Before After

View file

@ -1,6 +1,3 @@
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="32.026 31.499 14.793 16.534"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="32.026 31.499 14.793 16.534">
<path d="m32.026 31.499 6.858 16.534 7.935-16.534s-3.883 3.968-7.396 3.968c-3.515 0-7.397-3.968-7.397-3.968" />
</svg>

Before

Width:  |  Height:  |  Size: 205 B

After

Width:  |  Height:  |  Size: 200 B

Before After
Before After

View file

@ -1,10 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg
viewBox="4.189 16.921 81.623 56.159"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M85.241 48.817c-1.365-3.553-4.989-5.856-9.771-6.737 7.718-5.116 11.871-12.229 9.706-17.868-2.79-7.268-15.031-9.329-27.335-4.602-3.173 1.218-6.032 2.768-8.491 4.521l-.024-.068c-2.791-7.269-15.035-9.329-27.338-4.601C9.681 24.19 1.969 33.914 4.76 41.184c1.262 3.283 4.458 5.501 8.712 6.514C6.419 52.746 2.721 59.473 4.79 64.857c2.791 7.27 15.033 9.329 27.337 4.602 3.077-1.183 5.866-2.676 8.278-4.366.076.284.162.565.269.843 2.791 7.271 15.032 9.33 27.336 4.604 12.31-4.73 20.022-14.456 17.231-21.723"
fill="#808080"
/>
<svg viewBox="4.189 16.921 81.623 56.159" xmlns="http://www.w3.org/2000/svg">
<path d="M85.241 48.817c-1.365-3.553-4.989-5.856-9.771-6.737 7.718-5.116 11.871-12.229 9.706-17.868-2.79-7.268-15.031-9.329-27.335-4.602-3.173 1.218-6.032 2.768-8.491 4.521l-.024-.068c-2.791-7.269-15.035-9.329-27.338-4.601C9.681 24.19 1.969 33.914 4.76 41.184c1.262 3.283 4.458 5.501 8.712 6.514C6.419 52.746 2.721 59.473 4.79 64.857c2.791 7.27 15.033 9.329 27.337 4.602 3.077-1.183 5.866-2.676 8.278-4.366.076.284.162.565.269.843 2.791 7.271 15.032 9.33 27.336 4.604 12.31-4.73 20.022-14.456 17.231-21.723" fill="#808080" />
</svg>

Before

Width:  |  Height:  |  Size: 667 B

After

Width:  |  Height:  |  Size: 652 B

Before After
Before After

View file

@ -1,9 +1,3 @@
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="2.433 9.473 85.134 70.17"
>
<path
fill="#E7FFB4"
d="M84.857 38.272c-2.238-3.079-6.335-4.365-11.182-3.978 6.131-6.94 8.302-14.885 4.751-19.772-4.576-6.298-16.933-5.12-27.595 2.63-2.749 1.998-5.11 4.235-7.031 6.565l-.041-.06c-4.577-6.299-16.937-5.12-27.597 2.632C5.498 34.041.565 45.429 5.143 51.729c2.068 2.845 5.73 4.16 10.101 4.038-5.506 6.701-7.337 14.156-3.945 18.821 4.577 6.3 16.935 5.12 27.596-2.63 2.666-1.939 4.974-4.103 6.866-6.36.147.255.303.504.478.745 4.578 6.301 16.935 5.121 27.596-2.628 10.667-7.755 15.599-19.146 11.022-25.443"
/>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="2.433 9.473 85.134 70.17">
<path fill="#E7FFB4" d="M84.857 38.272c-2.238-3.079-6.335-4.365-11.182-3.978 6.131-6.94 8.302-14.885 4.751-19.772-4.576-6.298-16.933-5.12-27.595 2.63-2.749 1.998-5.11 4.235-7.031 6.565l-.041-.06c-4.577-6.299-16.937-5.12-27.597 2.632C5.498 34.041.565 45.429 5.143 51.729c2.068 2.845 5.73 4.16 10.101 4.038-5.506 6.701-7.337 14.156-3.945 18.821 4.577 6.3 16.935 5.12 27.596-2.63 2.666-1.939 4.974-4.103 6.866-6.36.147.255.303.504.478.745 4.578 6.301 16.935 5.121 27.596-2.628 10.667-7.755 15.599-19.146 11.022-25.443" />
</svg>

Before

Width:  |  Height:  |  Size: 619 B

After

Width:  |  Height:  |  Size: 604 B

Before After
Before After

View file

@ -1,10 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg
viewBox="4.189 16.921 81.623 56.159"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M85.241 48.817c-1.365-3.553-4.989-5.856-9.771-6.737 7.718-5.116 11.871-12.229 9.706-17.868-2.79-7.268-15.031-9.329-27.335-4.602-3.173 1.218-6.032 2.768-8.491 4.521l-.024-.068c-2.791-7.269-15.035-9.329-27.338-4.601C9.681 24.19 1.969 33.914 4.76 41.184c1.262 3.283 4.458 5.501 8.712 6.514C6.419 52.746 2.721 59.473 4.79 64.857c2.791 7.27 15.033 9.329 27.337 4.602 3.077-1.183 5.866-2.676 8.278-4.366.076.284.162.565.269.843 2.791 7.271 15.032 9.33 27.336 4.604 12.31-4.73 20.022-14.456 17.231-21.723"
style="fill: rgb(73, 9, 24)"
/>
<svg viewBox="4.189 16.921 81.623 56.159" xmlns="http://www.w3.org/2000/svg">
<path d="M85.241 48.817c-1.365-3.553-4.989-5.856-9.771-6.737 7.718-5.116 11.871-12.229 9.706-17.868-2.79-7.268-15.031-9.329-27.335-4.602-3.173 1.218-6.032 2.768-8.491 4.521l-.024-.068c-2.791-7.269-15.035-9.329-27.338-4.601C9.681 24.19 1.969 33.914 4.76 41.184c1.262 3.283 4.458 5.501 8.712 6.514C6.419 52.746 2.721 59.473 4.79 64.857c2.791 7.27 15.033 9.329 27.337 4.602 3.077-1.183 5.866-2.676 8.278-4.366.076.284.162.565.269.843 2.791 7.271 15.032 9.33 27.336 4.604 12.31-4.73 20.022-14.456 17.231-21.723" style="fill: rgb(73, 9, 24)" />
</svg>

Before

Width:  |  Height:  |  Size: 681 B

After

Width:  |  Height:  |  Size: 666 B

Before After
Before After

View file

@ -1,10 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<svg
viewBox="4.189 16.921 81.623 56.159"
xmlns="http://www.w3.org/2000/svg"
>
<path
fill="#E7FFB4"
d="M85.241 48.817c-1.365-3.553-4.989-5.856-9.771-6.737 7.718-5.116 11.871-12.229 9.706-17.868-2.79-7.268-15.031-9.329-27.335-4.602-3.173 1.218-6.032 2.768-8.491 4.521l-.024-.068c-2.791-7.269-15.035-9.329-27.338-4.601C9.681 24.19 1.969 33.914 4.76 41.184c1.262 3.283 4.458 5.501 8.712 6.514C6.419 52.746 2.721 59.473 4.79 64.857c2.791 7.27 15.033 9.329 27.337 4.602 3.077-1.183 5.866-2.676 8.278-4.366.076.284.162.565.269.843 2.791 7.271 15.032 9.33 27.336 4.604 12.31-4.73 20.022-14.456 17.231-21.723"
/>
<svg viewBox="4.189 16.921 81.623 56.159" xmlns="http://www.w3.org/2000/svg">
<path fill="#E7FFB4" d="M85.241 48.817c-1.365-3.553-4.989-5.856-9.771-6.737 7.718-5.116 11.871-12.229 9.706-17.868-2.79-7.268-15.031-9.329-27.335-4.602-3.173 1.218-6.032 2.768-8.491 4.521l-.024-.068c-2.791-7.269-15.035-9.329-27.338-4.601C9.681 24.19 1.969 33.914 4.76 41.184c1.262 3.283 4.458 5.501 8.712 6.514C6.419 52.746 2.721 59.473 4.79 64.857c2.791 7.27 15.033 9.329 27.337 4.602 3.077-1.183 5.866-2.676 8.278-4.366.076.284.162.565.269.843 2.791 7.271 15.032 9.33 27.336 4.604 12.31-4.73 20.022-14.456 17.231-21.723" />
</svg>

Before

Width:  |  Height:  |  Size: 667 B

After

Width:  |  Height:  |  Size: 652 B

Before After
Before After

View file

@ -1,24 +1,16 @@
<svg
xmlns="http://www.w3.org/2000/svg"
class="icon line-color"
data-name="Line Color"
viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg" class="icon line-color"
data-name="Line Color" viewBox="0 0 24 24"
>
<path
fill="none"
stroke="#000"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M19 19 5 5"
fill="none" stroke="#000"
stroke-linecap="round" stroke-linejoin="round"
stroke-width="2" d="M19 19 5 5"
/>
<path
fill="none"
stroke="#000"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M19 5 5 19"
fill="none" stroke="#000"
stroke-linecap="round" stroke-linejoin="round"
stroke-width="2" d="M19 5 5 19"
data-name="primary"
/>
</svg>

Before

Width:  |  Height:  |  Size: 432 B

After

Width:  |  Height:  |  Size: 404 B

Before After
Before After

View file

@ -1,6 +1,3 @@
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="34.739 35.077 8.402 7.319"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="34.739 35.077 8.402 7.319">
<path d="M39.895 41.075q-1.494.606-2.617.369-1.123-.239-1.597-1.406-.445-1.097.188-2.068.634-.97 2.128-1.576 1.553-.63 2.641-.379 1.088.253 1.556 1.409.44 1.086-.134 2.046-.576.961-2.165 1.605M38.4 37.387q-1.168.474-1.66 1.053-.492.58-.208 1.281.28.69 1.028.773.748.085 1.939-.398 1.18-.479 1.658-1.06.477-.581.198-1.27-.289-.712-1.032-.785-.743-.072-1.923.406" />
</svg>

Before

Width:  |  Height:  |  Size: 456 B

After

Width:  |  Height:  |  Size: 451 B

Before After
Before After

View file

@ -1,11 +1,6 @@
<svg
xmlns="http://www.w4.org/2000/svg"
width="15"
height="15"
viewBox="0 0 15 15"
xmlns="http://www.w4.org/2000/svg" width="15"
height="15" viewBox="0 0 15 15"
>
<path
d="M8.293 2.293a1 1 0 0 1 1.414 0l4.5 4.5a1 1 0 0 1 0 1.414l-4.5 4.5a1 1 0 0 1-1.414-1.414L11 8.5H1.5a1 1 0 0 1 0-2H11L8.293 3.707a1 1 0 0 1 0-1.414"
fill="red"
/>
<path d="M8.293 2.293a1 1 0 0 1 1.414 0l4.5 4.5a1 1 0 0 1 0 1.414l-4.5 4.5a1 1 0 0 1-1.414-1.414L11 8.5H1.5a1 1 0 0 1 0-2H11L8.293 3.707a1 1 0 0 1 0-1.414" fill="red" />
</svg>

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 268 B

Before After
Before After

View file

@ -1,8 +1,6 @@
<svg
xmlns="http://www.w3.org/2000/svg"
width="15"
height="15"
transform="scale(-1 1)"
xmlns="http://www.w3.org/2000/svg" width="15"
height="15" transform="scale(-1 1)"
viewBox="0 0 15 15"
>
<path d="M8.293 2.293a1 1 0 0 1 1.414 0l4.5 4.5a1 1 0 0 1 0 1.414l-4.5 4.5a1 1 0 0 1-1.414-1.414L11 8.5H1.5a1 1 0 0 1 0-2H11L8.293 3.707a1 1 0 0 1 0-1.414" />

Before

Width:  |  Height:  |  Size: 287 B

After

Width:  |  Height:  |  Size: 283 B

Before After
Before After

View file

@ -2,31 +2,22 @@
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!doctype svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px"
y="0px"
width="330.107px"
height="330.773px"
viewBox="0 0 330.107 330.773"
enable-background="new 0 0 330.107 330.773"
xml:space="preserve"
version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" width="330.107px"
height="330.773px" viewBox="0 0 330.107 330.773"
enable-background="new 0 0 330.107 330.773" xml:space="preserve"
>
<g id="logo_x2F_colors">
<ellipse
fill="#EBFFB8"
cx="165.872"
cy="162.37"
rx="164.236"
fill="#EBFFB8" cx="165.872"
cy="162.37" rx="164.236"
ry="161.992"
/>
<g>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M256.14,174.292c0.624,1.266,0.236,5.389,0.142,5.907
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M256.14,174.292c0.624,1.266,0.236,5.389,0.142,5.907
c-0.165,0.873-0.366,5.486-0.339,6.494c0.03,0.981-0.037,5.803-0.067,6.871c-0.061,2.059-0.419,3.634-0.353,5.689
c0.065,2.075-0.045,4.115-0.176,6.188c-0.064,0.991-0.149,5.077-0.266,6.136c-0.214,1.976-0.326,4.438-0.703,6.396
c-0.18,0.946-0.581,5.088-0.84,6.161c-0.479,1.982-1.034,5.444-1.652,7.539c-0.396,1.344-2.98,6.876-6.584,9.736
@ -45,10 +36,8 @@
c0.867-0.366,1.639-0.822,2.529-1.164C252.635,175.333,255.338,174.318,256.14,174.292z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M95.368,240.441c-0.003-0.45-0.282-2.143-0.28-2.598
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M95.368,240.441c-0.003-0.45-0.282-2.143-0.28-2.598
c0.002-0.916-0.063-1.613,0-2.526c0.067-1.018-0.075-2.626,0-3.789c0.028-0.469,0.139-0.42,0.139-1.402
c0-1.013,0.026-3.481,0-4.491c-0.052-2.035,0.133-3.676,0.106-5.721c-0.054-4.137,0.167-8.312-0.134-12.442
c-0.151-2.07-0.123-4.101,0.006-6.17c0.062-0.968,0.126-0.463,0.149-1.431c0.025-1.058-0.081-0.694-1.558-0.598
@ -78,10 +67,8 @@
c-0.147-0.15-0.511-0.832-0.549-1.019C95.301,241.81,95.375,241.513,95.368,240.441z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M133.788,243.492c-0.473-0.146-0.111-10.932-0.105-11.157
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M133.788,243.492c-0.473-0.146-0.111-10.932-0.105-11.157
c-0.003,0.12,0.004-3.417-0.024-4.714c-0.031-1.412-0.125-2.748-0.186-4.158c-0.062-1.408-0.096-2.819-0.134-4.229
c-0.037-1.438-0.025-2.886,0.001-4.322c0.059-2.86,0.245-5.72,0.39-8.579c0.145-2.88,0.111-4.506,0.111-7.389
c-0.998,0.313-1.975,0.225-2.996,0.501c-0.503,0.138-3.559,0.098-4.185,0.159c-1.162,0.111-2.771-0.142-3.083,0.349
@ -105,10 +92,8 @@
c0.932-0.091,1.7,0.077,2.607-0.018C130.454,193.426,132.048,193.397,133.932,192.823z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M208.743,178.101c-0.564,0.717-5.647,6.054-6.142,6.852
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M208.743,178.101c-0.564,0.717-5.647,6.054-6.142,6.852
c-0.49,0.79-2.506,2.904-2.761,3.294c-0.19,0.286-2.529,3.547-3.214,4.512c-0.35,0.494-1.129,1.836-1.186,2.396
c-0.094,0.941-0.302,1.752,0.275,2.639c0.242,0.374,0.496,0.946,0.694,1.34c0.205,0.406,4.422,9.228,4.639,9.625
c0.259,0.471,5.928,12.979,6.146,13.883c0.233,0.98,2.601,6.334,3.644,8.222c1.016,1.844,2.092,3.97,3.22,5.776
@ -121,10 +106,8 @@
C208.606,176.621,209.252,177.455,208.743,178.101z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M183.833,175.865c0.031,0.313,0.395,7.007,0.33,7.995
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M183.833,175.865c0.031,0.313,0.395,7.007,0.33,7.995
c-0.027,0.414-0.22,3.441-0.132,4.419c0.086,0.953,0.01,5.818-0.057,6.771c-0.023,0.31,0.121,3.432,0.126,3.902
c0.007,1-0.165,3.777-0.207,4.753c-0.046,1.034-0.039,3.636,0,4.104c0.035,0.44,0.098,3.667,0.104,4.209
c0.023,2.042-0.047,4.101,0.031,6.138c0.079,2.019-0.144,4.786-0.241,6.81c-0.105,2.21-0.021,10.085-0.105,11.158
@ -136,10 +119,8 @@
c1.242-0.794,4.192-2.041,5.014-2.146C183.825,174.873,183.764,175.179,183.833,175.865z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M163.603,202.786c-0.327,1.961-0.003,4.088-0.327,6.051
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M163.603,202.786c-0.327,1.961-0.003,4.088-0.327,6.051
c-0.153,0.913-0.331,3.709-0.331,4.727c0,1.826-0.416,5.138-0.282,7.158c0.142,2.104-0.01,4.69-0.141,6.735
c-0.132,2.099-0.14,3.929-0.14,6.035c0,1.009,0.076,5.682-0.28,6.666c-0.511,1.408-3.76,2.572-5.318,3.204
c-0.928,0.376-1.852,0.286-2.623-0.283c-0.746-0.547-0.653-1.295-0.536-2.018c0.146-0.922,0.243-2.868,0.477-3.778
@ -150,49 +131,34 @@
C163.361,195.148,163.769,201.799,163.603,202.786z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M158.061,188.91c-1.36,0.13-3.944,0.762-4.253-0.85
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M158.061,188.91c-1.36,0.13-3.944,0.762-4.253-0.85
c-0.118-0.616,0.837-1.216,1.345-1.625c0.746-0.603,1.592-1.134,2.547-1.53c0.395-0.161,0.902-0.395,1.357-0.424
c0.467-0.029,0.935,0.163,1.361,0.281c0.545,0.149,1.135,0.223,1.706,0.298c0.448,0.058,1.194-0.014,1.571,0.211
c0.593,0.354-0.886,1.479-1.165,1.734c-0.8,0.729-1.517,1.293-2.582,1.774c-0.035-0.048-0.413,0.074-0.448,0.025
C158.361,188.914,158.097,188.958,158.061,188.91z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M155.311,183.014c-1.12-0.002-0.427-0.802,0.003-1.173
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M155.311,183.014c-1.12-0.002-0.427-0.802,0.003-1.173
c0.68-0.582,4.113-2.3,5.148-2.56c1.005-0.254,2.154-0.189,3.191-0.109c1.102,0.086,2.107,0.288,1.062,1.136
c-0.776,0.629-1.587,1.238-2.521,1.727c-1.057,0.552-1.993,0.719-3.231,0.859C158.961,182.873,156.52,183.014,155.311,183.014z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M154.77,177.503c0.293-0.291,0.844-0.653,1.253-0.86
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M154.77,177.503c0.293-0.291,0.844-0.653,1.253-0.86
c0.483-0.245,0.571-0.458,1.08-0.672c1.113-0.468,1.478-1.019,2.51-1.581c0.393-0.214,0.591-0.433,1.063-0.536
c0.601-0.134,3.981-0.078,4.499-0.098c0.503-0.022,1.013,0.03,1.516,0.051C164.062,176.816,163.687,177.607,154.77,177.503z"
/>
</g>
<g>
<path
fill="#202020"
d="M75,149.773c15.5,2.5,165.69,0,175.47,0s9.028-6.834,9.028-6.834s1.959-4.05-31.998-5.666
c-33.958-1.617-60.152,2.646-76.576,5.573s-65.882-0.384-71.424-0.601S59.5,147.273,75,149.773z"
/>
<path
fill="#202020"
d="M250.495,123.773c-87.74-1.097-128.746,6.052-159.245,4.25c-20.582-1.216-20.922-7.918-21.211-11.084
<path fill="#202020" d="M75,149.773c15.5,2.5,165.69,0,175.47,0s9.028-6.834,9.028-6.834s1.959-4.05-31.998-5.666
c-33.958-1.617-60.152,2.646-76.576,5.573s-65.882-0.384-71.424-0.601S59.5,147.273,75,149.773z" />
<path fill="#202020" d="M250.495,123.773c-87.74-1.097-128.746,6.052-159.245,4.25c-20.582-1.216-20.922-7.918-21.211-11.084
s0-6.406,33.957-8.022c33.958-1.617,54.865,5.762,77.504,6.606c22.638,0.846,63.45,0.664,68.995,0.784
C260.5,116.523,270.5,124.023,250.495,123.773z"
/>
<path
fill="#202020"
d="M80.75,89.329c0,0,121.5-1.806,166.72,1.444c9.754,0.701,8.53,8,8.53,8s-4.541,6.668-33,6.5
c-33.996-0.201-52.361-8.656-75-9.5c-22.638-0.846-67.416,2.225-72.958,2.442S63.612,89.329,80.75,89.329z"
/>
C260.5,116.523,270.5,124.023,250.495,123.773z" />
<path fill="#202020" d="M80.75,89.329c0,0,121.5-1.806,166.72,1.444c9.754,0.701,8.53,8,8.53,8s-4.541,6.668-33,6.5
c-33.996-0.201-52.361-8.656-75-9.5c-22.638-0.846-67.416,2.225-72.958,2.442S63.612,89.329,80.75,89.329z" />
</g>
</g>
<g id="home_loading" />

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Before After
Before After

View file

@ -1,9 +1,3 @@
<svg
viewBox="29.047 55.883 209.764 80.943"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M38.421 133.462c16.438 3.1 175.723 0 186.094 0 10.372 0 9.575-8.475 9.575-8.475s2.077-5.022-33.935-7.026c-36.015-2.005-63.796 3.282-81.213 6.912-17.419 3.628-69.872-.477-75.749-.747-5.878-.269-21.211 6.234-4.772 9.336m6.099-74.953S173.376 56.27 221.333 60.3c10.344.87 9.046 9.92 9.046 9.92s-4.816 8.269-34.997 8.06c-36.054-.25-55.531-10.734-79.542-11.78-24.007-1.049-71.499 2.759-77.374 3.029-5.878.268-12.123-11.02 6.054-11.02m180.022 42.712c-93.052-1.36-136.54 7.504-168.887 5.27-21.829-1.507-22.188-9.818-22.495-13.744s0-7.943 36.014-9.948c36.013-2.005 58.187 7.146 82.195 8.191 24.01 1.049 67.293.823 73.173.972 10.61.268 21.215 9.568 0 9.259"
fill="#2B2B2B"
/>
<svg viewBox="29.047 55.883 209.764 80.943" xmlns="http://www.w3.org/2000/svg">
<path d="M38.421 133.462c16.438 3.1 175.723 0 186.094 0 10.372 0 9.575-8.475 9.575-8.475s2.077-5.022-33.935-7.026c-36.015-2.005-63.796 3.282-81.213 6.912-17.419 3.628-69.872-.477-75.749-.747-5.878-.269-21.211 6.234-4.772 9.336m6.099-74.953S173.376 56.27 221.333 60.3c10.344.87 9.046 9.92 9.046 9.92s-4.816 8.269-34.997 8.06c-36.054-.25-55.531-10.734-79.542-11.78-24.007-1.049-71.499 2.759-77.374 3.029-5.878.268-12.123-11.02 6.054-11.02m180.022 42.712c-93.052-1.36-136.54 7.504-168.887 5.27-21.829-1.507-22.188-9.818-22.495-13.744s0-7.943 36.014-9.948c36.013-2.005 58.187 7.146 82.195 8.191 24.01 1.049 67.293.823 73.173.972 10.61.268 21.215 9.568 0 9.259" fill="#2B2B2B" />
</svg>

Before

Width:  |  Height:  |  Size: 779 B

After

Width:  |  Height:  |  Size: 764 B

Before After
Before After

View file

@ -2,32 +2,22 @@
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!doctype svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px"
y="0px"
width="330.107px"
height="330.773px"
viewBox="0 0 330.107 330.773"
enable-background="new 0 0 330.107 330.773"
xml:space="preserve"
version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" width="330.107px"
height="330.773px" viewBox="0 0 330.107 330.773"
enable-background="new 0 0 330.107 330.773" xml:space="preserve"
>
<g id="logo_x2F_colors">
<ellipse
display="none"
fill="#DEFDB5"
cx="165.872"
cy="162.37"
rx="164.236"
ry="161.992"
display="none" fill="#DEFDB5"
cx="165.872" cy="162.37"
rx="164.236" ry="161.992"
/>
<g>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M256.14,137.243c0.624,1.266,0.236,5.389,0.142,5.907
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M256.14,137.243c0.624,1.266,0.236,5.389,0.142,5.907
c-0.165,0.873-0.366,5.486-0.339,6.494c0.03,0.981-0.037,5.803-0.067,6.871c-0.061,2.059-0.419,3.634-0.353,5.689
c0.065,2.075-0.045,4.115-0.176,6.188c-0.064,0.991-0.149,5.077-0.266,6.136c-0.214,1.976-0.326,4.438-0.703,6.396
c-0.18,0.946-0.581,5.088-0.84,6.161c-0.479,1.982-1.034,5.444-1.652,7.539c-0.396,1.344-2.98,6.876-6.584,9.736
@ -46,10 +36,8 @@
c0.867-0.366,1.639-0.822,2.529-1.164C252.635,138.285,255.338,137.27,256.14,137.243z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M95.368,203.393c-0.003-0.45-0.282-2.143-0.28-2.598
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M95.368,203.393c-0.003-0.45-0.282-2.143-0.28-2.598
c0.002-0.916-0.063-1.613,0-2.526c0.067-1.018-0.075-2.626,0-3.789c0.028-0.469,0.139-0.42,0.139-1.402
c0-1.013,0.026-3.481,0-4.491c-0.052-2.035,0.133-3.676,0.106-5.721c-0.054-4.137,0.167-8.312-0.134-12.442
c-0.151-2.07-0.123-4.101,0.006-6.17c0.062-0.968,0.126-0.463,0.149-1.431c0.025-1.058-0.081-0.694-1.558-0.598
@ -79,10 +67,8 @@
c-0.147-0.15-0.511-0.832-0.549-1.019C95.301,204.762,95.375,204.465,95.368,203.393z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M133.788,206.443c-0.473-0.146-0.111-10.932-0.105-11.157
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M133.788,206.443c-0.473-0.146-0.111-10.932-0.105-11.157
c-0.003,0.12,0.004-3.417-0.024-4.714c-0.031-1.412-0.125-2.748-0.186-4.158c-0.062-1.408-0.096-2.819-0.134-4.229
c-0.037-1.438-0.025-2.886,0.001-4.322c0.059-2.86,0.245-5.72,0.39-8.579c0.145-2.88,0.111-4.506,0.111-7.389
c-0.998,0.313-1.975,0.225-2.996,0.501c-0.503,0.138-3.559,0.098-4.185,0.159c-1.162,0.111-2.771-0.142-3.083,0.349
@ -106,10 +92,8 @@
c0.932-0.091,1.7,0.077,2.607-0.018C130.454,156.377,132.048,156.349,133.932,155.774z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M208.743,141.052c-0.564,0.717-5.647,6.054-6.142,6.852
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M208.743,141.052c-0.564,0.717-5.647,6.054-6.142,6.852
c-0.49,0.79-2.506,2.904-2.761,3.294c-0.19,0.286-2.529,3.547-3.214,4.512c-0.35,0.494-1.129,1.836-1.186,2.396
c-0.094,0.941-0.302,1.752,0.275,2.639c0.242,0.374,0.496,0.946,0.694,1.34c0.205,0.406,4.422,9.228,4.639,9.625
c0.259,0.471,5.928,12.979,6.146,13.883c0.233,0.98,2.601,6.334,3.644,8.222c1.016,1.844,2.092,3.97,3.22,5.776
@ -122,10 +106,8 @@
C208.606,139.572,209.252,140.406,208.743,141.052z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M183.833,138.816c0.031,0.313,0.395,7.007,0.33,7.995
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M183.833,138.816c0.031,0.313,0.395,7.007,0.33,7.995
c-0.027,0.414-0.22,3.441-0.132,4.419c0.086,0.953,0.01,5.818-0.057,6.771c-0.023,0.31,0.121,3.432,0.126,3.902
c0.007,1-0.165,3.777-0.207,4.753c-0.046,1.034-0.039,3.636,0,4.104c0.035,0.44,0.098,3.667,0.104,4.209
c0.023,2.042-0.047,4.101,0.031,6.138c0.079,2.019-0.144,4.786-0.241,6.81c-0.105,2.21-0.021,10.085-0.105,11.158
@ -137,10 +119,8 @@
c1.242-0.794,4.192-2.041,5.014-2.146C183.825,137.825,183.764,138.13,183.833,138.816z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M163.603,165.738c-0.327,1.961-0.003,4.088-0.327,6.051
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M163.603,165.738c-0.327,1.961-0.003,4.088-0.327,6.051
c-0.153,0.913-0.331,3.709-0.331,4.727c0,1.826-0.416,5.138-0.282,7.158c0.142,2.104-0.01,4.69-0.141,6.735
c-0.132,2.099-0.14,3.929-0.14,6.035c0,1.009,0.076,5.682-0.28,6.666c-0.511,1.408-3.76,2.572-5.318,3.204
c-0.928,0.376-1.852,0.286-2.623-0.283c-0.746-0.547-0.653-1.295-0.536-2.018c0.146-0.922,0.243-2.868,0.477-3.778
@ -151,49 +131,40 @@
C163.361,158.1,163.769,164.75,163.603,165.738z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M158.061,151.862c-1.36,0.13-3.944,0.762-4.253-0.85
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M158.061,151.862c-1.36,0.13-3.944,0.762-4.253-0.85
c-0.118-0.616,0.837-1.216,1.345-1.625c0.746-0.603,1.592-1.134,2.547-1.53c0.395-0.161,0.902-0.395,1.357-0.424
c0.467-0.029,0.935,0.163,1.361,0.281c0.545,0.149,1.135,0.223,1.706,0.298c0.448,0.058,1.194-0.014,1.571,0.211
c0.593,0.354-0.886,1.479-1.165,1.734c-0.8,0.729-1.517,1.293-2.582,1.774c-0.035-0.048-0.413,0.074-0.448,0.025
C158.361,151.865,158.097,151.91,158.061,151.862z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M155.311,145.966c-1.12-0.002-0.427-0.802,0.003-1.173
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M155.311,145.966c-1.12-0.002-0.427-0.802,0.003-1.173
c0.68-0.582,4.113-2.3,5.148-2.56c1.005-0.254,2.154-0.189,3.191-0.109c1.102,0.086,2.107,0.288,1.062,1.136
c-0.776,0.629-1.587,1.238-2.521,1.727c-1.057,0.552-1.993,0.719-3.231,0.859C158.961,145.825,156.52,145.966,155.311,145.966z"
/>
<path
fill-rule="evenodd"
clip-rule="evenodd"
fill="#202020"
d="M154.77,140.455c0.293-0.291,0.844-0.653,1.253-0.86
fill-rule="evenodd" clip-rule="evenodd"
fill="#202020" d="M154.77,140.455c0.293-0.291,0.844-0.653,1.253-0.86
c0.483-0.245,0.571-0.458,1.08-0.672c1.113-0.468,1.478-1.019,2.51-1.581c0.393-0.214,0.591-0.433,1.063-0.536
c0.601-0.134,3.981-0.078,4.499-0.098c0.503-0.022,1.013,0.03,1.516,0.051C164.062,139.768,163.687,140.559,154.77,140.455z"
/>
</g>
<g display="none">
<path
display="inline"
fill="#202020"
display="inline" fill="#202020"
d="M75,149.773c15.5,2.5,165.69,0,175.47,0s9.028-6.834,9.028-6.834
s1.959-4.05-31.998-5.666c-33.958-1.617-60.152,2.646-76.576,5.573s-65.882-0.384-71.424-0.601S59.5,147.273,75,149.773z"
/>
<path
display="inline"
fill="#202020"
display="inline" fill="#202020"
d="M250.495,123.773c-87.74-1.097-128.746,6.052-159.245,4.25
c-20.582-1.216-20.922-7.918-21.211-11.084s0-6.406,33.957-8.022c33.958-1.617,54.865,5.762,77.504,6.606
c22.638,0.846,63.45,0.664,68.995,0.784C260.5,116.523,270.5,124.023,250.495,123.773z"
/>
<path
display="inline"
fill="#202020"
display="inline" fill="#202020"
d="M80.75,89.329c0,0,121.5-1.806,166.72,1.444c9.754,0.701,8.53,8,8.53,8
s-4.541,6.668-33,6.5c-33.996-0.201-52.361-8.656-75-9.5c-22.638-0.846-67.416,2.225-72.958,2.442S63.612,89.329,80.75,89.329z"
/>

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Before After
Before After

View file

@ -1,8 +1,6 @@
<svg
width="307.49"
height="77.116"
viewBox="0 0 307.49 77.116"
xml:space="preserve"
width="307.49" height="77.116"
viewBox="0 0 307.49 77.116" xml:space="preserve"
xmlns="http://www.w3.org/2000/svg"
>
<path d="M32.444 37.183c-20.81 0-21.059 17.971-21.059 36.43 0 1.02-.949 2.25-2.183 2.25h-7.02C.949 75.863 0 74.884 0 73.613V2.52C0 1.249.948.271 2.182.271h7.59c1.526 0 2.181.767 2.181 1.858 0 8.244 2.358 26.106 20.49 26.106 18.816 0 20.491-16.657 20.491-26.106 0-1.092 1.043-1.858 2.182-1.858h7.59c1.232 0 2.181.978 2.181 2.249v71.093c0 1.271-.948 2.25-2.181 2.25h-7.021c-1.233 0-2.182-1.261-2.182-2.25.002-16.652.434-36.43-21.059-36.43M71.91 74.247c-.854-34.243 16.317-55.889 32.159-66.01 7.114-4.524 15.652-7.646 31.115-7.861 1.518 0 2.276 1.184 2.276 3.015v55.565c0 9.692-8.063 15.387-15.842 13.771-12.522-2.585-18.594-17.647-26.183-25.832-2.656-2.799-6.355-2.691-8.917.754-3.51 4.738-3.226 9.8-3.226 25.844 0 2.047-.189 2.263-1.992 2.37h-7.874c-.947 0-1.516-.431-1.516-1.616m55.116-22.506-.285-29.721c0-4.2-2.276-6.999-5.977-6.892-4.269.107-10.909 3.337-14.419 6.568-5.027 4.522-5.881 7.107-4.079 12.599 1.423 4.2 9.961 18.199 16.222 22.291 4.269 2.908 8.538.647 8.538-4.845m23.441 21.312V2.703c0-2.162.569-2.703 2.088-2.703h9.651c1.803 0 1.96.541 1.96 2.703l.095 70.35c0 2.053-.949 2.81-2.467 2.81h-8.955c-1.518 0-2.372-.649-2.372-2.81m26.796.878V2.459c0-1.395 1.183-1.717 2.131-1.717h8.539c1.138 0 2.226.322 2.226 1.717v24.716c0 1.54 1.606 1.54 1.606 1.54 3.875 0 11.305.032 11.305.032 18.014 0 19.026-16.768 19.026-25.858 0-1.621.569-2.146 1.993-2.146L233.09.64c1.233 0 2.092.841 2.092 2.249 0 15.577-1.188 29.832-16.069 29.832 17.291 0 16.543 20.726 16.543 41.102 0 1.186-.38 2.04-1.708 2.04h-9.29c-1.707 0-1.896-.858-1.896-2.254 0-21.024-1.217-35.922-20.182-35.922h-10.903c-1.138 0-1.518.429-1.518 1.824v34.42c0 1.181-1.088 1.932-2.226 1.932h-8.539c-.948 0-2.131-.751-2.131-1.932m114.835-31.974V3.248c0-1.847.398-2.607 2.093-2.607h11.205c1.895 0 2.094.761 2.094 2.607v41.275c0 16.075-13.059 33.021-30.801 32.585-17.741-.434-30.799-16.51-30.799-32.585V3.248c0-1.847.199-2.607 2.093-2.607h11.205c1.694 0 2.093.761 2.093 2.607v38.709c0 11.403 2.433 23.85 15.408 23.85 13.431-.001 15.409-12.447 15.409-23.85" />

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before After
Before After

View file

@ -1,24 +1,15 @@
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="329.449 122.475 21.745 29"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="329.449 122.475 21.745 29">
<path
fill="#fff"
d="M349.05 131.283c.28-2.099 0-3.499-1.124-4.898-1.217-1.4-3.37-2-6.085-2h-7.957c-.562 0-1.03.4-1.124 1l-3.276 22.192c-.094.499.187.899.655.899h4.962l-.375 2.299c-.093.3.281.7.562.7h4.213c.468 0 .842-.4.936-.899l.093-.2.749-5.198.094-.3c.094-.6.468-.9.936-.9h.655c4.026 0 7.115-1.799 8.052-6.698.374-2.099.187-3.898-.843-5.098-.374-.299-.749-.699-1.123-.899"
fill="#fff" d="M349.05 131.283c.28-2.099 0-3.499-1.124-4.898-1.217-1.4-3.37-2-6.085-2h-7.957c-.562 0-1.03.4-1.124 1l-3.276 22.192c-.094.499.187.899.655.899h4.962l-.375 2.299c-.093.3.281.7.562.7h4.213c.468 0 .842-.4.936-.899l.093-.2.749-5.198.094-.3c.094-.6.468-.9.936-.9h.655c4.026 0 7.115-1.799 8.052-6.698.374-2.099.187-3.898-.843-5.098-.374-.299-.749-.699-1.123-.899"
opacity=".7"
/>
<path
fill="#fff"
d="M349.05 131.283c.28-2.099 0-3.499-1.124-4.898-1.217-1.4-3.37-2-6.085-2h-7.957c-.562 0-1.03.4-1.124 1l-3.276 22.192c-.094.499.187.899.655.899h4.962l1.217-8.297-.094.3c.187-.599.562-.999 1.217-.999h2.34c4.588 0 8.145-2 9.175-7.697 0-.2 0-.4.094-.5"
fill="#fff" d="M349.05 131.283c.28-2.099 0-3.499-1.124-4.898-1.217-1.4-3.37-2-6.085-2h-7.957c-.562 0-1.03.4-1.124 1l-3.276 22.192c-.094.499.187.899.655.899h4.962l1.217-8.297-.094.3c.187-.599.562-.999 1.217-.999h2.34c4.588 0 8.145-2 9.175-7.697 0-.2 0-.4.094-.5"
opacity=".7"
/>
<path fill="#fff" d="M337.628 131.283c0-.3.188-.6.562-.8.094 0 .281-.1.374-.1h6.273c.749 0 1.404.1 2.059.2.188 0 .281 0 .562.1.094.1.281.1.468.2.094 0 .094 0 .281.1l.843.3c.28-2.099 0-3.499-1.124-4.798-1.217-1.4-3.37-2.1-6.085-2.1h-7.957c-.562 0-1.03.5-1.124 1l-3.276 22.192c-.094.499.187.899.655.899h4.962l1.217-8.297z" />
<path
fill="#fff"
d="M337.628 131.283c0-.3.188-.6.562-.8.094 0 .281-.1.374-.1h6.273c.749 0 1.404.1 2.059.2.188 0 .281 0 .562.1.094.1.281.1.468.2.094 0 .094 0 .281.1l.843.3c.28-2.099 0-3.499-1.124-4.798-1.217-1.4-3.37-2.1-6.085-2.1h-7.957c-.562 0-1.03.5-1.124 1l-3.276 22.192c-.094.499.187.899.655.899h4.962l1.217-8.297z"
/>
<path
fill="#231f20"
d="M349.01 131.261c.448.263.846.579 1.145.947.498.579.796 1.316.946 2.157.149-1.683-.1-3.051-.946-4.103-.299-.369-.647-.632-1.045-.895 0 .579 0 1.21-.1 1.894m-19.362 14.995 3.136-20.835c.05-.578.548-.999 1.095-.999h7.964c2.737 0 4.878.631 6.072 2.052.598.736.946 1.578 1.095 2.525.199-1.894-.099-3.209-1.095-4.419-1.194-1.474-3.335-2.105-6.072-2.105h-7.964c-.547 0-1.045.421-1.145 1l-3.285 22.202c0 .21.05.421.199.579m5.127 2.209-.05.316c-.05.211.05.421.199.579l.15-.895z"
fill="#231f20" d="M349.01 131.261c.448.263.846.579 1.145.947.498.579.796 1.316.946 2.157.149-1.683-.1-3.051-.946-4.103-.299-.369-.647-.632-1.045-.895 0 .579 0 1.21-.1 1.894m-19.362 14.995 3.136-20.835c.05-.578.548-.999 1.095-.999h7.964c2.737 0 4.878.631 6.072 2.052.598.736.946 1.578 1.095 2.525.199-1.894-.099-3.209-1.095-4.419-1.194-1.474-3.335-2.105-6.072-2.105h-7.964c-.547 0-1.045.421-1.145 1l-3.285 22.202c0 .21.05.421.199.579m5.127 2.209-.05.316c-.05.211.05.421.199.579l.15-.895z"
opacity=".2"
/>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Before After
Before After

View file

@ -1,9 +1,3 @@
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="201.754 136.33 100.039 26.6"
>
<path
fill="#fff"
d="M213.773 136.33h-7.8c-.5 0-1 .4-1.1.9l-3.1 20c-.1.4.2.7.6.7h3.7c.5 0 1-.4 1.1-.9l.8-5.4c.1-.5.5-.9 1.1-.9h2.5c5.1 0 8.1-2.5 8.9-7.4.3-2.1 0-3.8-1-5-1.1-1.3-3.1-2-5.7-2m.9 7.3c-.4 2.8-2.6 2.8-4.6 2.8h-1.2l.8-5.2c0-.3.3-.5.6-.5h.5c1.4 0 2.7 0 3.4.8.5.4.7 1.1.5 2.1m22.3-.1h-3.7c-.3 0-.6.2-.6.5l-.2 1-.3-.4c-.8-1.2-2.6-1.6-4.4-1.6-4.1 0-7.6 3.1-8.3 7.5-.4 2.2.1 4.3 1.4 5.7 1.1 1.3 2.8 1.9 4.7 1.9 3.3 0 5.2-2.1 5.2-2.1l-.2 1c-.1.4.2.8.6.8h3.4c.5 0 1-.4 1.1-.9l2-12.8c.1-.2-.3-.6-.7-.6m-5.1 7.2c-.4 2.1-2 3.6-4.2 3.6-1.1 0-1.9-.3-2.5-1s-.8-1.6-.6-2.6c.3-2.1 2.1-3.6 4.2-3.6 1.1 0 1.9.4 2.5 1 .5.7.7 1.6.6 2.6m25-7.2h-3.7c-.4 0-.7.2-.9.5l-5.2 7.6-2.2-7.3c-.1-.5-.6-.8-1-.8h-3.7c-.4 0-.8.4-.6.9l4.1 12.1-3.9 5.4c-.3.4 0 1 .5 1h3.7c.4 0 .7-.2.9-.5l12.5-18c.3-.3 0-.9-.5-.9m12.4-7.2h-7.8c-.5 0-1 .4-1.1.9l-3.1 19.9c-.1.4.2.7.6.7h4c.4 0 .7-.3.7-.6l.9-5.7c.1-.5.5-.9 1.1-.9h2.5c5.1 0 8.1-2.5 8.9-7.4.3-2.1 0-3.8-1-5-1.2-1.2-3.1-1.9-5.7-1.9m.9 7.3c-.4 2.8-2.6 2.8-4.6 2.8h-1.2l.8-5.2c0-.3.3-.5.6-.5h.5c1.4 0 2.7 0 3.4.8.5.4.6 1.1.5 2.1m22.3-.1h-3.7c-.3 0-.6.2-.6.5l-.2 1-.3-.4c-.8-1.2-2.6-1.6-4.4-1.6-4.1 0-7.6 3.1-8.3 7.5-.4 2.2.1 4.3 1.4 5.7 1.1 1.3 2.8 1.9 4.7 1.9 3.3 0 5.2-2.1 5.2-2.1l-.2 1c-.1.4.2.8.6.8h3.4c.5 0 1-.4 1.1-.9l2-12.8c0-.2-.3-.6-.7-.6m-5.2 7.2c-.4 2.1-2 3.6-4.2 3.6-1.1 0-1.9-.3-2.5-1s-.8-1.6-.6-2.6c.3-2.1 2.1-3.6 4.2-3.6 1.1 0 1.9.4 2.5 1 .6.7.8 1.6.6 2.6m9.6-13.9-3.2 20.3c-.1.4.2.7.6.7h3.2c.5 0 1-.4 1.1-.9l3.2-19.9c.1-.4-.2-.7-.6-.7h-3.6c-.4 0-.6.2-.7.5"
/>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="201.754 136.33 100.039 26.6">
<path fill="#fff" d="M213.773 136.33h-7.8c-.5 0-1 .4-1.1.9l-3.1 20c-.1.4.2.7.6.7h3.7c.5 0 1-.4 1.1-.9l.8-5.4c.1-.5.5-.9 1.1-.9h2.5c5.1 0 8.1-2.5 8.9-7.4.3-2.1 0-3.8-1-5-1.1-1.3-3.1-2-5.7-2m.9 7.3c-.4 2.8-2.6 2.8-4.6 2.8h-1.2l.8-5.2c0-.3.3-.5.6-.5h.5c1.4 0 2.7 0 3.4.8.5.4.7 1.1.5 2.1m22.3-.1h-3.7c-.3 0-.6.2-.6.5l-.2 1-.3-.4c-.8-1.2-2.6-1.6-4.4-1.6-4.1 0-7.6 3.1-8.3 7.5-.4 2.2.1 4.3 1.4 5.7 1.1 1.3 2.8 1.9 4.7 1.9 3.3 0 5.2-2.1 5.2-2.1l-.2 1c-.1.4.2.8.6.8h3.4c.5 0 1-.4 1.1-.9l2-12.8c.1-.2-.3-.6-.7-.6m-5.1 7.2c-.4 2.1-2 3.6-4.2 3.6-1.1 0-1.9-.3-2.5-1s-.8-1.6-.6-2.6c.3-2.1 2.1-3.6 4.2-3.6 1.1 0 1.9.4 2.5 1 .5.7.7 1.6.6 2.6m25-7.2h-3.7c-.4 0-.7.2-.9.5l-5.2 7.6-2.2-7.3c-.1-.5-.6-.8-1-.8h-3.7c-.4 0-.8.4-.6.9l4.1 12.1-3.9 5.4c-.3.4 0 1 .5 1h3.7c.4 0 .7-.2.9-.5l12.5-18c.3-.3 0-.9-.5-.9m12.4-7.2h-7.8c-.5 0-1 .4-1.1.9l-3.1 19.9c-.1.4.2.7.6.7h4c.4 0 .7-.3.7-.6l.9-5.7c.1-.5.5-.9 1.1-.9h2.5c5.1 0 8.1-2.5 8.9-7.4.3-2.1 0-3.8-1-5-1.2-1.2-3.1-1.9-5.7-1.9m.9 7.3c-.4 2.8-2.6 2.8-4.6 2.8h-1.2l.8-5.2c0-.3.3-.5.6-.5h.5c1.4 0 2.7 0 3.4.8.5.4.6 1.1.5 2.1m22.3-.1h-3.7c-.3 0-.6.2-.6.5l-.2 1-.3-.4c-.8-1.2-2.6-1.6-4.4-1.6-4.1 0-7.6 3.1-8.3 7.5-.4 2.2.1 4.3 1.4 5.7 1.1 1.3 2.8 1.9 4.7 1.9 3.3 0 5.2-2.1 5.2-2.1l-.2 1c-.1.4.2.8.6.8h3.4c.5 0 1-.4 1.1-.9l2-12.8c0-.2-.3-.6-.7-.6m-5.2 7.2c-.4 2.1-2 3.6-4.2 3.6-1.1 0-1.9-.3-2.5-1s-.8-1.6-.6-2.6c.3-2.1 2.1-3.6 4.2-3.6 1.1 0 1.9.4 2.5 1 .6.7.8 1.6.6 2.6m9.6-13.9-3.2 20.3c-.1.4.2.7.6.7h3.2c.5 0 1-.4 1.1-.9l3.2-19.9c.1-.4-.2-.7-.6-.7h-3.6c-.4 0-.6.2-.7.5" />
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before After
Before After

View file

@ -20,9 +20,9 @@ final readonly class Term {
if ($term_data instanceof WP_Term) {
return some($term_data);
} else {
return none();
}
return none();
}
/**

View file

@ -1,11 +1,21 @@
// Scripts pour la Page Produit
import { pipe } from "@mobily/ts-belt";
import { forEach as arrayForEach } from "@mobily/ts-belt/Array";
import { get as dictGet } from "@mobily/ts-belt/Dict";
import { tap as optionTap } from "@mobily/ts-belt/Option";
import { Array as FxArray, Effect, pipe as epipe, Option, Stream } from "effect";
import { EitherAsync, Maybe } from "purify-ts";
import {
Array as FxArray,
Effect,
pipe as epipe,
Option,
Stream,
ServiceMap,
Layer,
ManagedRuntime,
Console,
HashMap,
} from "effect";
import { EitherAsync } from "purify-ts";
import { match, P } from "ts-pattern";
import { ValiError } from "valibot";
import type { AnySchema } from "valibot";
@ -21,7 +31,6 @@ import {
ATTRIBUT_CHARGEMENT,
ATTRIBUT_DESACTIVE,
ATTRIBUT_HIDDEN,
ATTRIBUT_PRIX,
DOM_BOUTON_AJOUT_PANIER,
DOM_BOUTONS_ACCORDEON,
DOM_CONTENUS_ACCORDEON,
@ -31,15 +40,19 @@ import {
import { lanceAnimationCycleLoading } from "./lib/animations.ts";
import { mustGetEleInDocument, mustGetElesInDocument, recupereElementDocumentEither } from "./lib/dom.ts";
import { BadRequestError, reporteErreur, ServerError } from "./lib/erreurs.ts";
import { estHTMLSelectElement } from "./lib/gardes.ts";
import { emetMessageMajBoutonPanier } from "./lib/messages.ts";
import { newPartialResponse, postBackend, safeFetch } from "./lib/reseau.ts";
import { WCStoreCartAddItemArgsSchema } from "./lib/schemas/api/cart-add-item.ts";
import { WCStoreCartSchema } from "./lib/schemas/api/cart.ts";
import { safeSchemaParse } from "./lib/validation";
import { getAllSelectorFromDocument } from "../scripts-effect/lib/dom.ts";
import { getAllSelectorFromDocument, getFirstSelectorFromDocument } from "../scripts-effect/lib/dom.ts";
import { NonEmptyReadonlyArray } from "effect/Array";
import { NoSuchElementError } from "effect/Cause";
type EnsembleLienContenu = [HTMLAnchorElement, HTMLElement];
type DetailEnsemble = {
button: HTMLButtonElement;
content: HTMLDivElement;
};
/** États utiles pour les scripts de la page. */
type EtatsPage = {
@ -52,15 +65,68 @@ type EtatsPage = {
// @ts-expect-error -- États injectés par le modèle PHP
const ETATS_PAGE: EtatsPage = _etats;
/**
* Fonction utilitaire pour déplier toutes les sections de la Boîte des Informations Produit en ajustant les attributs
* correspondants.
*/
const deplieToutesSections = (ensembleLiensContenus: Array<EnsembleLienContenu>): void =>
arrayForEach(ensembleLiensContenus, (ensemble: EnsembleLienContenu): void => {
Maybe.fromNullable(ensemble.at(0)).ifJust((e): void => e.setAttribute(ATTRIBUT_ARIA_EXPANDED, "false"));
Maybe.fromNullable(ensemble.at(1)).ifJust((e): void => e.setAttribute(ATTRIBUT_HIDDEN, "true"));
});
class ProductPageElements extends ServiceMap.Service<
ProductPageElements,
{
AddProductButton: HTMLButtonElement;
DetailsButtons: NonEmptyReadonlyArray<HTMLButtonElement>;
DetailsContents: NonEmptyReadonlyArray<HTMLDivElement>;
Details: HashMap.HashMap<string, DetailEnsemble>;
ProductPrice: HTMLParagraphElement;
ProductRawJson: HTMLScriptElement;
VariationChoiceForm: HTMLFormElement;
VariationSelectors: ReadonlyArray<HTMLSelectElement>;
}
>()("haikuatelier.fr/Produit/ProductPageElements") {
static readonly layer = Layer.effect(
ProductPageElements,
Effect.gen(function* () {
const AddProductButton = yield* getFirstSelectorFromDocument<HTMLButtonElement>(DOM_BOUTON_AJOUT_PANIER);
const DetailsButtons = yield* getAllSelectorFromDocument<HTMLButtonElement>(DOM_BOUTONS_ACCORDEON);
const DetailsContents = yield* getAllSelectorFromDocument<HTMLDivElement>(DOM_CONTENUS_ACCORDEON);
const ProductPrice = yield* getFirstSelectorFromDocument<HTMLParagraphElement>(DOM_PRIX_PRODUIT);
const ProductRawJson = yield* getFirstSelectorFromDocument<HTMLScriptElement>("#product-json");
const VariationChoiceForm = yield* getFirstSelectorFromDocument<HTMLFormElement>("#variation-choice");
const VariationSelectors = yield* pipe(
getAllSelectorFromDocument<HTMLSelectElement>(".selecteur-produit select"),
Option.orElseSome(() => FxArray.empty<HTMLSelectElement>()),
);
const Details = yield* pipe(
DetailsButtons,
FxArray.map(
(button: HTMLButtonElement, index: number): Effect.Effect<[string, DetailEnsemble], NoSuchElementError> =>
Effect.gen(function* () {
const contentId = yield* Option.fromNullishOr(button.getAttribute(ATTRIBUT_ARIA_CONTROLS));
const content = yield* FxArray.get(DetailsContents, index);
return [contentId, { button, content } satisfies DetailEnsemble];
}),
),
Effect.all,
Effect.map(HashMap.fromIterable<string, DetailEnsemble>),
);
return {
AddProductButton,
DetailsButtons,
DetailsContents,
Details,
ProductPrice,
ProductRawJson,
VariationChoiceForm,
VariationSelectors,
};
}),
);
}
const ProductPageRuntime = ManagedRuntime.make(
pipe(
ProductPageElements.layer,
Layer.tapError((error) => Console.error("ManagedRuntime", "Impossible de créer le Layer :", error.name)),
),
);
// Éléments d'intérêt
const E = {
@ -73,66 +139,16 @@ const E = {
VARIATION_CHOICE_FORM: mustGetEleInDocument<HTMLFormElement>("#variation-choice"),
};
// TODO: Moderniser.
const gereAccordeonDetailsProduit = (): void => {
const contenus = new Map<string, EnsembleLienContenu>();
const toggleAllDetails = Effect.fn("toggleAllDetails")(function* () {
const PageElements = yield* ProductPageElements;
// Récupère les Ensembles sous forme de tableau.
const details = [...HashMap.values(PageElements.Details)];
// Créé la Map avec les ensembles Lien-Contenu
E.BOUTONS_ACCORDEON.forEach((bouton, index): void => {
const idContenu: null | string = bouton.getAttribute(ATTRIBUT_ARIA_CONTROLS);
const sectionCorrespondante: HTMLDivElement | undefined = E.CONTENUS_ACCORDEON[index];
if (!idContenu) {
throw new Error("Le lien ne dispose pas d'ID !");
}
if (!sectionCorrespondante) {
throw new Error("Le lien ne dispose pas de section correspondante !");
}
contenus.set(idContenu, [bouton, sectionCorrespondante]);
bouton.addEventListener("click", (evenement: Event): void => {
// Empêche la pollution de l'historique de navigation
evenement.preventDefault();
// Sauvegarde l'état d'ouverture de la section avant de toutes les fermer
const estAncienContenuDeplie: boolean = bouton.getAttribute(ATTRIBUT_ARIA_EXPANDED) === "true";
pipe(contenus.values(), Array.from<EnsembleLienContenu>, deplieToutesSections);
// Ne fais rien de plus si l'onglet sélectionné était le courant
if (estAncienContenuDeplie) {
return;
}
// Ouvre le nouvel onglet sélectionné
bouton.setAttribute(ATTRIBUT_ARIA_EXPANDED, "true");
sectionCorrespondante.removeAttribute(ATTRIBUT_HIDDEN);
});
FxArray.forEach(details, (detail: DetailEnsemble) => {
detail.button.toggleAttribute(ATTRIBUT_ARIA_EXPANDED, false);
detail.content.toggleAttribute(ATTRIBUT_HIDDEN, true);
});
// Ajoute des Écouteurs d'Événements
E.DOM_VARIATION.ifRight((selecteur): void =>
selecteur.addEventListener("change", (evenement: Event): void => {
const cibleSelecteur: Maybe<HTMLSelectElement> = Maybe.fromNullable(evenement.target).filter(
estHTMLSelectElement,
);
// Active le Bouton si le Sélecteur est valide
cibleSelecteur
.map((v) => v.validity.valid)
.ifJust((v: boolean) => E.BOUTON_AJOUT_PANIER.toggleAttribute(ATTRIBUT_DESACTIVE, !v));
// Met à jour le prix affiché pour la Variation
cibleSelecteur
.chainNullable((s) => s.selectedOptions[0])
.chainNullable((e) => e.getAttribute(ATTRIBUT_PRIX))
.ifJust((p) => {
E.PRIX_PRODUIT.textContent = `${p}`;
});
}),
);
E.BOUTON_AJOUT_PANIER.addEventListener("click", (event: MouseEvent): void => ajouteProduitAuPanier(event));
};
});
// TODO: Utiliser Effect.
const getAttributesFromDom = (): ReadonlyArray<WCStoreCartAddItemArgsItems> => {
@ -265,9 +281,13 @@ const ajouteProduitAuPanier = (event: MouseEvent): void => {
.run();
};
/**
* Initialise l'état initial d'interactivité du Bouton d'ajout de Produit au Panier.
*/
const initAddToCartButton = Effect.fn("initAddToCartButton")(function* () {
const { AddProductButton, VariationSelectors } = yield* ProductPageElements;
/** Est-ce que le Produit affiché est en stock ? */
const isProductInStock = E.BOUTON_AJOUT_PANIER.hasAttribute("data-in-stock");
const isProductInStock = AddProductButton.hasAttribute("data-in-stock") === true;
// S'il n'y a pas de stock, ne rien faire.
if (isProductInStock === false) {
@ -275,37 +295,83 @@ const initAddToCartButton = Effect.fn("initAddToCartButton")(function* () {
return yield* Effect.void;
}
const variationSelectors = getAllSelectorFromDocument<HTMLSelectElement>(".selecteur-produit select");
// S'il n'y a pas de Sélecteurs de variations, activer le Bouton d'ajout au Panier.
if (Option.isNone(variationSelectors)) {
if (FxArray.isReadonlyArrayEmpty(VariationSelectors)) {
console.debug("initAddToCartButton", "Produt simple.");
E.BOUTON_AJOUT_PANIER.removeAttribute(ATTRIBUT_DESACTIVE);
}
return yield* Effect.void;
});
const onFormChange = Effect.fnUntraced(function* (event: Event) {
const { AddProductButton } = yield* ProductPageElements;
// La cible ne peut qu'être un Formulaire.
const target = event.target as HTMLFormElement;
const isClickAllowed = target.checkValidity() === false;
// Active/désactive le Bouton en fonction de la validité du Formulaire du Produit.
AddProductButton.toggleAttribute(ATTRIBUT_DESACTIVE, isClickAllowed);
return yield* Effect.void;
});
/**
* Initialise la mise à jour de l'état d'interactivité du Bouton d'ajout de Produit au Panier en fonction des actions de l'Utilisateur.
*/
const initAddToCartInteractionUpdates = Effect.fn("initAddToCartInteractionUpdates")(function* () {
return yield* pipe(
Stream.fromEventListener(E.VARIATION_CHOICE_FORM, "change"),
Stream.tap((event: Event) => {
console.debug("initAddToCartInteractionUpdates", "hello");
// La cible ne peut qu'être un Formulaire.
const target = event.target as HTMLFormElement;
const isClickAllowed = target.checkValidity() === false;
Stream.tap(onFormChange),
Stream.runDrain,
);
});
// Active/désactive le Bouton en fonction de la validité du Formulaire du Produit.
E.BOUTON_AJOUT_PANIER.toggleAttribute(ATTRIBUT_DESACTIVE, isClickAllowed);
const onDetailButtonClick = Effect.fnUntraced(function* (event: Event) {
const { Details } = yield* ProductPageElements;
// Empêche la pollution de l'historique de navigation
event.preventDefault();
return Effect.void;
}),
// La cible est connue.
const target = event.target as HTMLButtonElement;
// Récupère le contenu correspondant.
const linkedSection = yield* pipe(
Option.fromNullishOr(target.getAttribute(ATTRIBUT_ARIA_CONTROLS)),
Option.flatMap((contentId: string) => HashMap.get(Details, contentId)),
);
// Sauvegarde l'état d'ouverture de la Section avant de toutes les fermer.
const wasCurrentSection: boolean = target.getAttribute(ATTRIBUT_ARIA_EXPANDED) === "true";
// Replie toutes les Sections.
yield* toggleAllDetails();
// Ne fais rien de plus si l'onglet sélectionné était le courant
if (wasCurrentSection === true) {
return yield* Effect.void;
}
// Ouvre le nouvel onglet sélectionné
target.toggleAttribute(ATTRIBUT_ARIA_EXPANDED, true);
linkedSection.content.toggleAttribute(ATTRIBUT_HIDDEN, false);
return yield* Effect.void;
});
const initDetailInteractions = Effect.fn("initDetailInteractions")(function* () {
const PageElements = yield* ProductPageElements;
return yield* pipe(
FxArray.map(PageElements.DetailsButtons, (button: HTMLButtonElement) =>
pipe(Stream.fromEventListener(button, "click"), Stream.tap(onDetailButtonClick)),
),
Stream.mergeAll({ concurrency: "unbounded" }),
Stream.runDrain,
);
});
document.addEventListener("DOMContentLoaded", (): void => {
gereAccordeonDetailsProduit();
Effect.runFork(initAddToCartButton());
Effect.runFork(initAddToCartInteractionUpdates());
ProductPageRuntime.runFork(pipe(initAddToCartButton(), Effect.tapCause(Console.error)));
ProductPageRuntime.runFork(pipe(initAddToCartInteractionUpdates(), Effect.tapCause(Console.error)));
ProductPageRuntime.runFork(pipe(initDetailInteractions(), Effect.tapCause(Console.error)));
updatePriceOnAttributeChange();
});

View file

@ -1,10 +1,7 @@
{% extends 'base.twig' %}
{% block contenu %}
<main
class="page-modele-simple"
id="page-404"
>
<main class="page-modele-simple" id="page-404">
<div class="contenu">
<header class="contenu__en-tete">
<h2>Sorry!</h2>
@ -16,10 +13,7 @@
</p>
<p>
<a
class="lien-lien"
href="/shop"
>
<a class="lien-lien" href="/shop">
Go back to the Shop
</a>
</p>

View file

@ -6,147 +6,103 @@
<main id="page-a-propos">
<div class="storytelling">
<div class="storytelling__conteneur">
{{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/about/haikuabout", 'A montage of many different pictures/drawings of jewelry and of someone working.', image_dimensions[0], image_dimensions[1], 'storytelling-montage')
}}
{{ images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/about/haikuabout", 'A montage of many different pictures/drawings of jewelry and of someone working.', image_dimensions[0], image_dimensions[1], 'storytelling-montage') }}
{# Épingles #}
<button
aria-label="First pin"
class="epingle"
data-id-ensemble-epingle-boite="1"
type="button"
aria-label="First pin" class="epingle"
data-id-ensemble-epingle-boite="1" type="button"
>
<img
alt=""
height="56"
role="presentation"
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
alt="" height="56"
role="presentation" src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
width="82"
/>
</button>
<button
aria-label="Second pin"
class="epingle"
data-id-ensemble-epingle-boite="2"
type="button"
aria-label="Second pin" class="epingle"
data-id-ensemble-epingle-boite="2" type="button"
>
<img
alt=""
height="56"
role="presentation"
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
alt="" height="56"
role="presentation" src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
width="82"
/>
</button>
<button
aria-label="Third pin"
class="epingle"
data-id-ensemble-epingle-boite="3"
type="button"
aria-label="Third pin" class="epingle"
data-id-ensemble-epingle-boite="3" type="button"
>
<img
alt=""
height="56"
role="presentation"
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
alt="" height="56"
role="presentation" src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
width="82"
/>
</button>
<button
aria-label="Fourth pin"
class="epingle"
data-id-ensemble-epingle-boite="4"
type="button"
aria-label="Fourth pin" class="epingle"
data-id-ensemble-epingle-boite="4" type="button"
>
<img
alt=""
height="56"
role="presentation"
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
alt="" height="56"
role="presentation" src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
width="82"
/>
</button>
<button
aria-label="Fifth pin"
class="epingle"
data-id-ensemble-epingle-boite="5"
type="button"
aria-label="Fifth pin" class="epingle"
data-id-ensemble-epingle-boite="5" type="button"
>
<img
alt=""
height="56"
role="presentation"
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
alt="" height="56"
role="presentation" src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
width="82"
/>
</button>
<button
aria-label="Sixth pin"
class="epingle"
data-id-ensemble-epingle-boite="6"
type="button"
aria-label="Sixth pin" class="epingle"
data-id-ensemble-epingle-boite="6" type="button"
>
<img
alt=""
height="56"
role="presentation"
src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
alt="" height="56"
role="presentation" src="{{ site.theme.link }}/assets/img/icons/aboutlclick-black.svg"
width="82"
/>
</button>
{# Boîtes de texte #}
<div
class="boite-texte"
data-id-ensemble-epingle-boite="1"
>
<button
class="boite-texte__bouton-fermeture"
type="button"
>
<div class="boite-texte" data-id-ensemble-epingle-boite="1">
<button class="boite-texte__bouton-fermeture" type="button">
<img
alt="An icon in form of a cross"
height="20"
role="presentation"
src="{{ site.theme.link }}/assets/img/icons/cross.svg"
alt="An icon in form of a cross" height="20"
role="presentation" src="{{ site.theme.link }}/assets/img/icons/cross.svg"
width="20"
/>
</button>
<p>
Haïkus are short japanese poems written in three lines to capture the beauty of small details in the
everyday life.
Haïkus are short japanese poems written in three lines to capture the beauty of small details in the everyday life.
</p>
<p>More than poetry, its a philosophy.</p>
</div>
<div
class="boite-texte"
data-id-ensemble-epingle-boite="2"
>
<button
class="boite-texte__bouton-fermeture"
type="button"
>
<div class="boite-texte" data-id-ensemble-epingle-boite="2">
<button class="boite-texte__bouton-fermeture" type="button">
<img
alt="An icon in form of a cross"
height="20"
role="presentation"
src="{{ site.theme.link }}/assets/img/icons/cross.svg"
alt="An icon in form of a cross" height="20"
role="presentation" src="{{ site.theme.link }}/assets/img/icons/cross.svg"
width="20"
/>
</button>
<p>
Haiku Atelier creates minimalist and subtil jewelry with an edgy twist, trying to distillate some poetry
through those small objects.
Haiku Atelier creates minimalist and subtil jewelry with an edgy twist, trying to distillate some poetry through those small objects.
</p>
<p>
@ -154,112 +110,73 @@
</p>
</div>
<div
class="boite-texte"
data-id-ensemble-epingle-boite="3"
>
<button
class="boite-texte__bouton-fermeture"
type="button"
>
<div class="boite-texte" data-id-ensemble-epingle-boite="3">
<button class="boite-texte__bouton-fermeture" type="button">
<img
alt="An icon in form of a cross"
height="20"
role="presentation"
src="{{ site.theme.link }}/assets/img/icons/cross.svg"
alt="An icon in form of a cross" height="20"
role="presentation" src="{{ site.theme.link }}/assets/img/icons/cross.svg"
width="20"
/>
</button>
<p>
After learning the art of jewelry making for two years in Paris, Manon Designere launched the brand Haiku,
gleaning into the Japanese minimalist aesthetic.
After learning the art of jewelry making for two years in Paris, Manon Designere launched the brand Haiku, gleaning into the Japanese minimalist aesthetic.
</p>
<p>
Now based in Brussels, she still makes everything by hand, pouring her soul into her work to share her
vision of the world.
Now based in Brussels, she still makes everything by hand, pouring her soul into her work to share her vision of the world.
</p>
</div>
<div
class="boite-texte"
data-id-ensemble-epingle-boite="4"
>
<button
class="boite-texte__bouton-fermeture"
type="button"
>
<div class="boite-texte" data-id-ensemble-epingle-boite="4">
<button class="boite-texte__bouton-fermeture" type="button">
<img
alt="An icon in form of a cross"
height="20"
role="presentation"
src="{{ site.theme.link }}/assets/img/icons/cross.svg"
alt="An icon in form of a cross" height="20"
role="presentation" src="{{ site.theme.link }}/assets/img/icons/cross.svg"
width="20"
/>
</button>
<p>Here you can see some of the tools used at the studio.</p>
<p>
From sketches to models, from soldering to polishing, the numerous steps behind each piece are what makes it
so unique.
From sketches to models, from soldering to polishing, the numerous steps behind each piece are what makes it so unique.
</p>
<p>
A touch of animism to value handcrafted objects, restrain mass production and lead toward slow life.
</p>
</div>
<div
class="boite-texte"
data-id-ensemble-epingle-boite="5"
>
<button
class="boite-texte__bouton-fermeture"
type="button"
>
<div class="boite-texte" data-id-ensemble-epingle-boite="5">
<button class="boite-texte__bouton-fermeture" type="button">
<img
alt="An icon in form of a cross"
height="20"
role="presentation"
src="{{ site.theme.link }}/assets/img/icons/cross.svg"
alt="An icon in form of a cross" height="20"
role="presentation" src="{{ site.theme.link }}/assets/img/icons/cross.svg"
width="20"
/>
</button>
<p>
We pay a lot of attention choosing the materials we work on: all of the pieces are made in 80% recycled
sterling silver.
We pay a lot of attention choosing the materials we work on: all of the pieces are made in 80% recycled sterling silver.
</p>
<p>
We also choose to propose many designs in a mix of sterling silver and silver gilded parts to avoid relying
too much on the gold plating process, which can be pollutant.
We also choose to propose many designs in a mix of sterling silver and silver gilded parts to avoid relying too much on the gold plating process, which can be pollutant.
</p>
<p>
The packagings are also carefully selected, produced nearby, made in eco-friendly coton or paper. Our gift
bags are even handmade in dead-stock fabrics.
The packagings are also carefully selected, produced nearby, made in eco-friendly coton or paper. Our gift bags are even handmade in dead-stock fabrics.
</p>
</div>
<div
class="boite-texte"
data-id-ensemble-epingle-boite="6"
>
<button
class="boite-texte__bouton-fermeture"
type="button"
>
<div class="boite-texte" data-id-ensemble-epingle-boite="6">
<button class="boite-texte__bouton-fermeture" type="button">
<img
alt="An icon in form of a cross"
height="20"
role="presentation"
src="{{ site.theme.link }}/assets/img/icons/cross.svg"
alt="An icon in form of a cross" height="20"
role="presentation" src="{{ site.theme.link }}/assets/img/icons/cross.svg"
width="20"
/>
</button>
<p>
We hope that those small objects will move you, as we are moved by the beauty hidden behind a ray of
sunshine, a leaf falling from a branch, the smell of an old book, the song of birds before dawn...
We hope that those small objects will move you, as we are moved by the beauty hidden behind a ray of sunshine, a leaf falling from a branch, the smell of an old book, the song of birds before dawn...
</p>
<p>Haiku jewelry are like a bit of poetry to wear everywhere.</p>
</div>

View file

@ -2,122 +2,75 @@
{% import 'macros/images.twig' as images %}
{% block contenu %}
<main
id="page-accueil"
aria-label="Scroll down to navigate through the pictures"
>
<main id="page-accueil" aria-label="Scroll down to navigate through the pictures">
<div class="storytelling">
<div
aria-hidden="true"
class="storytelling__conteneur"
aria-hidden="true" class="storytelling__conteneur"
inert
>
{# Animation #}
<div class="storytelling__animation no-js">
<svg
alt=""
class="animation-conteneur"
height="90px"
preserveAspectRatio="xMidYMin"
viewBox="0 0 1200 90"
width="100%"
alt="" class="animation-conteneur"
height="90px" preserveAspectRatio="xMidYMin"
viewBox="0 0 1200 90" width="100%"
xmlns="http://www.w3.org/2000/svg"
>
<svg
alt="Scroll down"
class="animation-texte"
height="100%"
width="100%"
alt="Scroll down" class="animation-texte"
height="100%" width="100%"
y="50%"
>
<path
d="m0 0c600-90 600 90 1200 0"
fill="transparent"
id="curve-1"
transform="translate3d(0,0,0)"
d="m0 0c600-90 600 90 1200 0" fill="transparent"
id="curve-1" transform="translate3d(0,0,0)"
/>
{# TODO: Créer une fonction pour générer les images #}
<text
dominant-baseline="middle"
transform="translate3d(0,0,0)"
>
<textPath
id="text-path-1"
xlink:href="#curve-1"
>
<text dominant-baseline="middle" transform="translate3d(0,0,0)">
<textPath id="text-path-1" xlink:href="#curve-1">
Scroll down
</textPath>
<animate
attributeName="startOffset"
dur="5s"
fill="remove"
from="-50%"
to="0%"
repeatCount="indefinite"
attributeName="startOffset" dur="5s"
fill="remove" from="-50%"
to="0%" repeatCount="indefinite"
xlink:href="#text-path-1"
/>
</text>
<text
dominant-baseline="middle"
transform="translate3d(0,0,0)"
>
<textPath
id="text-path-2"
xlink:href="#curve-1"
>
<text dominant-baseline="middle" transform="translate3d(0,0,0)">
<textPath id="text-path-2" xlink:href="#curve-1">
Scroll down
</textPath>
<animate
attributeName="startOffset"
dur="5s"
fill="remove"
from="0%"
to="50%"
repeatCount="indefinite"
attributeName="startOffset" dur="5s"
fill="remove" from="0%"
to="50%" repeatCount="indefinite"
xlink:href="#text-path-2"
/>
</text>
<text
dominant-baseline="middle"
transform="translate3d(0,0,0)"
>
<textPath
id="text-path-3"
xlink:href="#curve-1"
>
<text dominant-baseline="middle" transform="translate3d(0,0,0)">
<textPath id="text-path-3" xlink:href="#curve-1">
Scroll down
</textPath>
<animate
attributeName="startOffset"
dur="5s"
fill="remove"
from="50%"
to="100%"
repeatCount="indefinite"
attributeName="startOffset" dur="5s"
fill="remove" from="50%"
to="100%" repeatCount="indefinite"
xlink:href="#text-path-3"
/>
</text>
<text
dominant-baseline="middle"
transform="translate3d(0,0,0)"
>
<textPath
id="text-path-4"
xlink:href="#curve-1"
>
<text dominant-baseline="middle" transform="translate3d(0,0,0)">
<textPath id="text-path-4" xlink:href="#curve-1">
Scroll down
</textPath>
<animate
attributeName="startOffset"
dur="5s"
fill="remove"
from="100%"
to="150%"
repeatCount="indefinite"
attributeName="startOffset" dur="5s"
fill="remove" from="100%"
to="150%" repeatCount="indefinite"
xlink:href="#text-path-4"
/>
</text>
@ -127,145 +80,94 @@
{# Images #}
<div
class="storytelling__image"
data-index="1"
class="storytelling__image" data-index="1"
tabindex="-1"
>
{{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll1", '', 903, 1080, 'image-scroll1')
}}
{{ images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll1", '', 903, 1080, 'image-scroll1') }}
</div>
<div
class="storytelling__image"
data-caché
data-index="2"
tabindex="-1"
class="storytelling__image" data-caché
data-index="2" tabindex="-1"
>
{{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll2", '', 903, 1080, 'image-scroll2')
}}
{{ images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll2", '', 903, 1080, 'image-scroll2') }}
</div>
<div
class="storytelling__image"
data-caché
data-index="3"
tabindex="-1"
class="storytelling__image" data-caché
data-index="3" tabindex="-1"
>
{{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll3", '', 903, 1080, 'image-scroll3')
}}
{{ images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll3", '', 903, 1080, 'image-scroll3') }}
</div>
<div
class="storytelling__image"
data-caché
data-index="4"
tabindex="-1"
class="storytelling__image" data-caché
data-index="4" tabindex="-1"
>
{{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll4", '', 903, 1080, 'image-scroll4')
}}
{{ images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll4", '', 903, 1080, 'image-scroll4') }}
</div>
<div
class="storytelling__image"
data-caché
data-index="5"
tabindex="-1"
class="storytelling__image" data-caché
data-index="5" tabindex="-1"
>
{{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll5", '', 903, 1080, 'image-scroll5')
}}
{{ images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll5", '', 903, 1080, 'image-scroll5') }}
</div>
<div
class="storytelling__image"
data-caché
data-index="6"
tabindex="-1"
class="storytelling__image" data-caché
data-index="6" tabindex="-1"
>
{{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll6", '', 903, 1080, 'image-scroll6')
}}
{{ images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll6", '', 903, 1080, 'image-scroll6') }}
</div>
<div
class="storytelling__image"
data-caché
data-index="7"
tabindex="-1"
class="storytelling__image" data-caché
data-index="7" tabindex="-1"
>
{{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll7", '', 903, 1080, 'image-scroll7')
}}
{{ images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll7", '', 903, 1080, 'image-scroll7') }}
</div>
<div
class="storytelling__image"
data-caché
data-index="8"
tabindex="-1"
class="storytelling__image" data-caché
data-index="8" tabindex="-1"
>
{{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll8", '', 903, 1080, 'image-scroll8')
}}
{{ images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll8", '', 903, 1080, 'image-scroll8') }}
</div>
<div
class="storytelling__image"
data-caché
data-index="9"
tabindex="-1"
class="storytelling__image" data-caché
data-index="9" tabindex="-1"
>
{{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll9", '', 903, 1080, 'image-scroll9')
}}
{{ images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll9", '', 903, 1080, 'image-scroll9') }}
</div>
<div
class="storytelling__image"
data-caché
data-index="10"
tabindex="-1"
class="storytelling__image" data-caché
data-index="10" tabindex="-1"
>
{{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll10", '', 903, 1080, 'image-scroll10')
}}
{{ images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll10", '', 903, 1080, 'image-scroll10') }}
</div>
<div
class="storytelling__image"
data-caché
data-index="11"
tabindex="-1"
class="storytelling__image" data-caché
data-index="11" tabindex="-1"
>
{{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll11", '', 903, 1080, 'image-scroll11')
}}
{{ images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll11", '', 903, 1080, 'image-scroll11') }}
</div>
<div
class="storytelling__image"
data-caché
data-index="12"
tabindex="-1"
class="storytelling__image" data-caché
data-index="12" tabindex="-1"
>
{{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll12", '', 903, 1080, 'image-scroll12')
}}
{{ images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll12", '', 903, 1080, 'image-scroll12') }}
</div>
<div
class="storytelling__image"
data-caché
data-index="13"
tabindex="-1"
class="storytelling__image" data-caché
data-index="13" tabindex="-1"
>
{{
images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll13", '', 903, 1080, 'image-scroll13')
}}
{{ images.genere_source_img_multi_formats("#{ site.theme.link }/assets/img/storytelling/scroll13", '', 903, 1080, 'image-scroll13') }}
</div>
</div>
</div>

View file

@ -8,10 +8,7 @@
{% endblock head %}
{% endblock conteneur_html_head %}
<body
class="{{ body_class }}"
data-langue="{{ langue_courante }}"
>
<body class="{{ body_class }}" data-langue="{{ langue_courante }}">
{# En-tête #}
{{ include('parts/en-tete.twig') }}
@ -21,21 +18,15 @@
{# Bouton Revenir en haut #}
<button
aria-hidden="true"
aria-labelled-by="bouton-retour-haut-label"
class="bouton-retour-haut"
id="bouton-retour-haut"
aria-hidden="true" aria-labelled-by="bouton-retour-haut-label"
class="bouton-retour-haut" id="bouton-retour-haut"
type="button"
>
<img
alt="An arrow pointing to the top"
aria-hidden="true"
alt="An arrow pointing to the top" aria-hidden="true"
src="{{ site.theme.link }}/assets/img/icons/arrow.svg"
/>
<span
class="visuellement-cache"
id="bouton-retour-haut-label"
>Back to top</span>
<span class="visuellement-cache" id="bouton-retour-haut-label">Back to top</span>
</button>
{# Pied de page #}

View file

@ -24,10 +24,8 @@ const _etats = {
<div class="actions">
<button
{{ products|length == 12 ? '' : 'hidden' }}
class="bouton-case-pleine bouton-blanc-sur-noir"
id="bouton-plus-de-produits"
type="button"
{{ products|length == 12 ? '' : 'hidden' }} class="bouton-case-pleine bouton-blanc-sur-noir"
id="bouton-plus-de-produits" type="button"
>
Show more
</button>

View file

@ -1,10 +1,7 @@
{% extends 'base.twig' %}
{% block contenu %}
<main
class="page-modele-simple"
id="page-cgv"
>
<main class="page-modele-simple" id="page-cgv">
<div class="contenu">
<header class="contenu__en-tete">
<h2>Terms & Conditions</h2>
@ -17,22 +14,15 @@
</header>
<p>
Each piece, made in sterling silver and 18k gold plated silver, is made to order. As soon as we receive your
order, depending on its complexity, production in our workshop will take between 2 to 7 working days. It
will then be send to you, at the latest, within 14 days of your order.
Each piece, made in sterling silver and 18k gold plated silver, is made to order. As soon as we receive your order, depending on its complexity, production in our workshop will take between 2 to 7 working days. It will then be send to you, at the latest, within 14 days of your order.
</p>
<p>
The products are delivered by Mondial Relay or UPS. Products are delivered in France, Europe, and any
country included by those two delivery companies.</p>
The products are delivered by Mondial Relay or UPS. Products are delivered in France, Europe, and any country included by those two delivery companies.</p>
<p>
The details of delivery costs and times are specified in during the payment process. The delivery times are
mentioned for information only. When the order is sent, the customers will receive an e-mail from the
carrier allowing them to track their package.
The details of delivery costs and times are specified in during the payment process. The delivery times are mentioned for information only. When the order is sent, the customers will receive an e-mail from the carrier allowing them to track their package.
</p>
<p>
Haiku Atelier cannot be held responsible for delays in delivery due to errors or disruptions attributable to
carriers (including in the event of a total or partial strike in particular of the postal services and means
of transport and/or communications).
Haiku Atelier cannot be held responsible for delays in delivery due to errors or disruptions attributable to carriers (including in the event of a total or partial strike in particular of the postal services and means of transport and/or communications).
</p>
</section>
@ -42,21 +32,14 @@
</header>
<p>
If for any reason you are not satisfied with your purchase, we will refund or exchange it within 14 days of
receipt. If more than 30 days have past since your purchase, unfortunately, we cannot offer a refund or an
exchange.
If for any reason you are not satisfied with your purchase, we will refund or exchange it within 14 days of receipt. If more than 30 days have past since your purchase, unfortunately, we cannot offer a refund or an exchange.
</p>
<p>
To be eligible for a return or an exchange, your item must be in the same condition as received, unworn and
unused, in its original packaging. You will also need the receipt or proof of purchase.
To be eligible for a return or an exchange, your item must be in the same condition as received, unworn and unused, in its original packaging. You will also need the receipt or proof of purchase.
</p>
<p>
To start a return you can contact us at <a
class="lien-lien"
href="mailto:haiku.atelier@gmail.com"
>haiku.atelier@gmail.com</a>. Please note that returns and exchange will need to be send back our workshop
in Brussels.
To start a return you can contact us at <a class="lien-lien" href="mailto:haiku.atelier@gmail.com">haiku.atelier@gmail.com</a>. Please note that returns and exchange will need to be send back our workshop in Brussels.
</p>
<p>
@ -64,15 +47,11 @@
</p>
<p>
The site does not provide any return labels. Return costs are the responsibility of the customer. Taxes or
duties on international deliveries are non-refundable. Haiku Atelier undertakes to reimburse the price of
the product and the initial shipping costs, upon receipt of the product.
The site does not provide any return labels. Return costs are the responsibility of the customer. Taxes or duties on international deliveries are non-refundable. Haiku Atelier undertakes to reimburse the price of the product and the initial shipping costs, upon receipt of the product.
</p>
<p>
Once the returned product has been quality checked and approved, the refund will be made via the original
method of payment used for the returned order and a confirmation email will be sent to the customer. Haiku
Atelier is not responsible for items purchased from other retailers.
Once the returned product has been quality checked and approved, the refund will be made via the original method of payment used for the returned order and a confirmation email will be sent to the customer. Haiku Atelier is not responsible for items purchased from other retailers.
</p>
</section>
@ -82,17 +61,11 @@
</header>
<p>
Please inspect your order upon receipt and contact us immediately if the item is defective, damaged, or if
you received the wrong item. Make written observations at the latest within three (3) days following the
delivery, to Haiku Atelier, by sending a photograph of the product. Unfortunately we cannot accept returns
on sale items and gift cards.
Please inspect your order upon receipt and contact us immediately if the item is defective, damaged, or if you received the wrong item. Make written observations at the latest within three (3) days following the delivery, to Haiku Atelier, by sending a photograph of the product. Unfortunately we cannot accept returns on sale items and gift cards.
</p>
<p>
Haiku Atelier jewelry are guarantee for a year. If your piece unexpectedly broke or loses its gold color
within a year, you can send it back to us and we will repair it for free, you will just have to organize
your own shipping label (our workshop is located in Brussels).<br /> We still provide after sale services
past the guarantee year, the price of those services will be determined depending on each case.
Haiku Atelier jewelry are guarantee for a year. If your piece unexpectedly broke or loses its gold color within a year, you can send it back to us and we will repair it for free, you will just have to organize your own shipping label (our workshop is located in Brussels).<br /> We still provide after sale services past the guarantee year, the price of those services will be determined depending on each case.
</p>
</section>
@ -102,37 +75,23 @@
</header>
<p>
This website is operated by Manon Designere - créatrice de bijoux, whose registered office is located at 45
rue de Franceville, 93220 Gagny, France. These general terms and conditions of use and sale (the "GTCU")
govern the use of the site by any user wishing to access the site and make a purchase on the site (the
"User" or the "Customer").
This website is operated by Manon Designere - créatrice de bijoux, whose registered office is located at 45 rue de Franceville, 93220 Gagny, France. These general terms and conditions of use and sale (the "GTCU") govern the use of the site by any user wishing to access the site and make a purchase on the site (the "User" or the "Customer").
</p>
<p>
By accessing the site, the user acknowledges having read and fully and unreservedly accepts the GTCU. Haiku
Atelier reserves the right to modify the GTCU at any time. The change will take effect immediately upon
posting the GTCU.
By accessing the site, the user acknowledges having read and fully and unreservedly accepts the GTCU. Haiku Atelier reserves the right to modify the GTCU at any time. The change will take effect immediately upon posting the GTCU.
</p>
<p>
The products governed by these GTCUs are those which appear on the site (the “Products”). The products are
offered for sale within the limits of available stocks. The site does not guarantee that the products will
be in stock. The site reserves the right to remove a product at any time for any reason.
The products governed by these GTCUs are those which appear on the site (the “Products”). The products are offered for sale within the limits of available stocks. The site does not guarantee that the products will be in stock. The site reserves the right to remove a product at any time for any reason.
</p>
<p>
The colors, features, specifications, and details of the products are described and presented with the
greatest possible accuracy. However, the site does not warrant that the colors, features, specifications,
and details of the products will be accurate, complete, reliable, current, or free from other errors, and
users' digital display may not accurately reflect the actual colors and details of the products.
The colors, features, specifications, and details of the products are described and presented with the greatest possible accuracy. However, the site does not warrant that the colors, features, specifications, and details of the products will be accurate, complete, reliable, current, or free from other errors, and users' digital display may not accurately reflect the actual colors and details of the products.
</p>
<p>
The prices of the products are indicated in Euros all taxes included, including the applicable French VAT
(20%). The prices of the products are exclusive of delivery costs (shipping, packaging, and making up the
package according to the applicable amounts). The amount of the delivery costs will be specified before the
validation of the order. The prices of the products may be modified at any time. However, a price cannot be
modified once the purchase order has been validated.
The prices of the products are indicated in Euros all taxes included, including the applicable French VAT (20%). The prices of the products are exclusive of delivery costs (shipping, packaging, and making up the package according to the applicable amounts). The amount of the delivery costs will be specified before the validation of the order. The prices of the products may be modified at any time. However, a price cannot be modified once the purchase order has been validated.
</p>
<p>
@ -146,24 +105,15 @@
</ul>
<p>
Haiku Atelier will not be held responsible for the failure to deliver a package due to an incorrect or
incomplete delivery address. Once the undelivered products have been collected by Haiku Atelier, a new
delivery will be possible and incur a reshipping fee invoiced to the customer.
Haiku Atelier will not be held responsible for the failure to deliver a package due to an incorrect or incomplete delivery address. Once the undelivered products have been collected by Haiku Atelier, a new delivery will be possible and incur a reshipping fee invoiced to the customer.
</p>
<p>
International deliveries are subject to import charges, duties, taxes, or fees of the destination country.
These funds are set by the government of that country, in accordance with import/export regulations, and
billed by the courier. Haiku Atelier is not responsible for these duties, taxes, or other charges.<br /> If
a package is returned because a customer has refused to pay any import taxes or customs duties owed, the
package refund will not include shipping and return costs.
International deliveries are subject to import charges, duties, taxes, or fees of the destination country. These funds are set by the government of that country, in accordance with import/export regulations, and billed by the courier. Haiku Atelier is not responsible for these duties, taxes, or other charges.<br /> If a package is returned because a customer has refused to pay any import taxes or customs duties owed, the package refund will not include shipping and return costs.
</p>
<p>
Haiku Atelier is the exclusive owner of all intellectual property rights or holds the rights of use relating
to both the structure and the content of the site. The GTCU are subject to French law, regardless of the
country of residence of the user and the place of placing the purchase order.<br />In the absence of an
amicable agreement, any dispute will be submitted to the competent French courts.
Haiku Atelier is the exclusive owner of all intellectual property rights or holds the rights of use relating to both the structure and the content of the site. The GTCU are subject to French law, regardless of the country of residence of the user and the place of placing the purchase order.<br />In the absence of an amicable agreement, any dispute will be submitted to the competent French courts.
</p>
</section>
@ -174,10 +124,7 @@
<p>
<strong>Contact:</strong><br />
For inquiries and customer service, please refer to <a
class="lien-lien"
href="/contact"
>our Contact page</a>.
For inquiries and customer service, please refer to <a class="lien-lien" href="/contact">our Contact page</a>.
</p>
<p>

View file

@ -1,10 +1,7 @@
{% extends 'base.twig' %}
{% block contenu %}
<main
class="page-modele-simple"
id="page-contact"
>
<main class="page-modele-simple" id="page-contact">
<div class="contenu">
<header class="contenu__en-tete">
<h2>Say hi!</h2>
@ -12,16 +9,9 @@
<div class="contenu__textuel">
<p>
For any inquiries, from simple information questions to problems with your products, or just to say hi, don't
hesitate to contact us at <a
class="lien-lien"
href="mailto:haikuatelier@gmail.com"
>
For any inquiries, from simple information questions to problems with your products, or just to say hi, don't hesitate to contact us at <a class="lien-lien" href="mailto:haikuatelier@gmail.com">
haikuatelier@gmail.com
</a> or on Instagram at <a
class="lien-lien"
href="https://www.instagram.com/haiku.atelier"
>
</a> or on Instagram at <a class="lien-lien" href="https://www.instagram.com/haiku.atelier">
haiku.atelier
</a>.
</p>

View file

@ -1,22 +1,15 @@
{% extends 'base.twig' %}
{% block contenu %}
<main
class="page-modele-simple"
id="page-succes-commande"
>
<main class="page-modele-simple" id="page-succes-commande">
<div class="contenu">
<header class="contenu__en-tete">
<h2>Failed order!</h2>
</header>
<div class="contenu__textuel">
<p>Sadly, something went wrong during your order, or you chose to cancel it. You can try again if you want: your
cart is still there.</p>
<p>If an error persists and you don't know what's going on, please don't hesitate to <a
class="lien-lien"
href="/contact"
>contact us</a>!</p>
<p>Sadly, something went wrong during your order, or you chose to cancel it. You can try again if you want: your cart is still there.</p>
<p>If an error persists and you don't know what's going on, please don't hesitate to <a class="lien-lien" href="/contact">contact us</a>!</p>
</div>
</div>
</main>

View file

@ -1,25 +1,13 @@
{% macro genere_source_img_multi_formats(rel_url, alt = '', width, height, id = '') %}
<picture id="{{ id }}">
<source
srcset="{{ rel_url }}.jxl"
type="image/jxl"
/>
<source
srcset="{{ rel_url }}.avif"
type="image/avif"
/>
<source
srcset="{{ rel_url }}.png"
type="image/png"
/>
<source srcset="{{ rel_url }}.jxl" type="image/jxl" />
<source srcset="{{ rel_url }}.avif" type="image/avif" />
<source srcset="{{ rel_url }}.png" type="image/png" />
<img
alt="{{ alt }}"
decoding="sync"
height="{{ height }}"
loading="eager"
src="{{ rel_url }}.jpg"
width="{{ width }}"
alt="{{ alt }}" decoding="sync"
height="{{ height }}" loading="eager"
src="{{ rel_url }}.jpg" width="{{ width }}"
onload="this.style.opacity = 1"
/>
</picture>

View file

@ -12,10 +12,7 @@ const _etats = {
{% endblock head %}
{% block contenu %}
<main
id="page-panier"
data-contient-articles="{{ articles_presents }}"
>
<main id="page-panier" data-contient-articles="{{ articles_presents }}">
{# « Your Cart » #}
{{ include('parts/pages/panier/panneau-panier.twig') }}
{# Your Info #}
@ -23,10 +20,7 @@ const _etats = {
<div class="panier-vide">
<p>Sorry! Your cart is empty.</p>
<a
class="lien-bouton"
href="{{ pages.shop.lien }}"
>
<a class="lien-bouton" href="{{ pages.shop.lien }}">
Go back to the Shop
</a>
</div>

View file

@ -1,54 +1,39 @@
<header id="en-tete">
<div class="logo">
<img
alt="Haiku Atelier's Logo"
decoding="async"
height="77"
loading="eager"
src="{{ site.theme.link }}/assets/img/logos/logo-v2-text.svg"
width="307"
alt="Haiku Atelier's Logo" decoding="async"
height="77" loading="eager"
src="{{ site.theme.link }}/assets/img/logos/logo-v2-text.svg" width="307"
/>
</div>
{# TODO: Utiliser un Menu WordPress ? #}
<nav
class="menu-navigation"
id="menu-navigation-en-tete"
>
<nav class="menu-navigation" id="menu-navigation-en-tete">
<ul>
<li
class="{{ page_courante == pages.home.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}"
>
<li class="{{ page_courante == pages.home.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}">
<span>
<a
{{ page_courante == pages.home.lien ? 'aria-current=page' : '' }}
class="lien-menu"
{{ page_courante == pages.home.lien ? 'aria-current=page' : '' }} class="lien-menu"
href="{{ pages.home.lien }}"
>
{{ pages.home.nom }}
</a>
</span>
</li>
<li
class="{{ est_page_boutique ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}"
>
<li class="{{ est_page_boutique ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}">
<span>
<a
{{ est_page_boutique ? 'aria-current=page' : '' }}
class="lien-menu"
{{ est_page_boutique ? 'aria-current=page' : '' }} class="lien-menu"
href="{{ pages.shop.lien }}"
>
{{ pages.shop.nom }}
</a>
</span>
</li>
<li
class="{{ page_courante == pages.about.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}"
>
<li class="{{ page_courante == pages.about.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}">
<span>
<a
{{ page_courante == pages.about.lien ? 'aria-current=page' : '' }}
class="lien-menu"
{{ page_courante == pages.about.lien ? 'aria-current=page' : '' }} class="lien-menu"
href="{{ pages.about.lien }}"
>
{{ pages.about.nom }}
@ -56,13 +41,10 @@
</span>
</li>
<li
class="{{ page_courante == pages.contact.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}"
>
<li class="{{ page_courante == pages.contact.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}">
<span>
<a
{{ page_courante == pages.contact.lien ? 'aria-current=page' : '' }}
class="lien-menu"
{{ page_courante == pages.contact.lien ? 'aria-current=page' : '' }} class="lien-menu"
href="{{ pages.contact.lien }}"
>
{{ pages.contact.nom }}
@ -76,10 +58,8 @@
{# Bouton « Panier » avec l'indicateur de quantité de Produits #}
<div class="compte-panier">
<a
class="lien-bouton"
data-contient-articles="{{ articles_presents }}"
href="{{ pages.cart.lien }}"
rel="cart"
class="lien-bouton" data-contient-articles="{{ articles_presents }}"
href="{{ pages.cart.lien }}" rel="cart"
>
cart ({{ quantite_articles }})
</a>
@ -87,45 +67,30 @@
{# Bouton (dés)activant le menu mobile #}
<button
aria-label="Button to toggle the mobile navigation menu for small screen sizes"
class="bouton-menu-mobile"
id="bouton-menu-mobile"
type="button"
aria-label="Button to toggle the mobile navigation menu for small screen sizes" class="bouton-menu-mobile"
id="bouton-menu-mobile" type="button"
>
<img
alt="An icon representing an « Hamburger » menu"
decoding="async"
loading="eager"
src="{{ site.theme.link }}/assets/img/logos/logo-lines.svg"
alt="An icon representing an « Hamburger » menu" decoding="async"
loading="eager" src="{{ site.theme.link }}/assets/img/logos/logo-lines.svg"
/>
</button>
</div>
{# Menu mobile #}
<div
aria-hidden="true"
aria-labelledby="menu-mobile"
class="menu-modale"
id="menu-mobile"
aria-hidden="true" aria-labelledby="menu-mobile"
class="menu-modale" id="menu-mobile"
>
<div
class="menu-modale__fond"
data-a11y-dialog-hide
></div>
<div class="menu-modale__fond" data-a11y-dialog-hide></div>
<div class="menu-modale__conteneur">
<nav
class="menu-navigation"
id="menu-navigation-mobile"
>
<nav class="menu-navigation" id="menu-navigation-mobile">
<ul>
<li
class="{{ page_courante == pages.home.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}"
>
<li class="{{ page_courante == pages.home.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}">
<span>
<a
{{ page_courante == pages.home.lien ? 'aria-current=page' : '' }}
class="lien-menu"
{{ page_courante == pages.home.lien ? 'aria-current=page' : '' }} class="lien-menu"
href="{{ pages.home.lien }}"
>
{{ pages.home.nom }}
@ -133,13 +98,10 @@
</span>
</li>
<li
class="{{ est_page_boutique ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}"
>
<li class="{{ est_page_boutique ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}">
<span>
<a
{{ est_page_boutique ? 'aria-current=page' : '' }}
class="lien-menu"
{{ est_page_boutique ? 'aria-current=page' : '' }} class="lien-menu"
href="{{ pages.shop.lien }}"
>
{{ pages.shop.nom }}
@ -147,13 +109,10 @@
</span>
</li>
<li
class="{{ page_courante == pages.about.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}"
>
<li class="{{ page_courante == pages.about.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}">
<span>
<a
{{ page_courante == pages.about.lien ? 'aria-current=page' : '' }}
class="lien-menu"
{{ page_courante == pages.about.lien ? 'aria-current=page' : '' }} class="lien-menu"
href="{{ pages.about.lien }}"
>
{{ pages.about.nom }}
@ -161,13 +120,10 @@
</span>
</li>
<li
class="{{ page_courante == pages.contact.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}"
>
<li class="{{ page_courante == pages.contact.lien ? 'menu-navigation__entree menu-navigation__entree--courante' : 'menu-navigation__entree' }}">
<span>
<a
{{ page_courante == pages.contact.lien ? 'aria-current=page' : '' }}
class="lien-menu"
{{ page_courante == pages.contact.lien ? 'aria-current=page' : '' }} class="lien-menu"
href="{{ pages.contact.lien }}"
>
{{ pages.contact.nom }}

View file

@ -1,6 +1,3 @@
<script
id="injection-v2"
type="application/json"
>
<script id="injection-v2" type="application/json">
{ "authString": "{{ auth_string }}", "nonce": "{{ nonce_wc }}" }
</script>

View file

@ -1,67 +1,43 @@
<head>
<meta charset="{{ site.charset }}" />
<meta
name="description"
content="{{ site.description }}"
/>
<meta
name="viewport"
content="width=device-width, initial-scale=1"
/>
<meta name="description" content="{{ site.description }}" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
{# Pinterest #}
<meta
name="p:domain_verify"
content="98fed4c924501d2f2a90c5b37e165085"
/>
<meta name="p:domain_verify" content="98fed4c924501d2f2a90c5b37e165085" />
{# Favicon #}
<link rel="apple-touch-icon" href="{{ site.theme.link }}/assets/img/apple-touch-icon.png" />
<link
rel="apple-touch-icon"
href="{{ site.theme.link }}/assets/img/apple-touch-icon.png"
/>
<link
rel="icon"
href="{{ site.theme.link }}/assets/img/favicon.ico"
rel="icon" href="{{ site.theme.link }}/assets/img/favicon.ico"
sizes="48x48"
/>
<link
rel="icon"
href="{{ site.theme.link }}/assets/img/favicon.svg"
rel="icon" href="{{ site.theme.link }}/assets/img/favicon.svg"
type="image/svg+xml"
/>
<link
rel="manifest"
href="{{ site.theme.link }}/assets/site.webmanifest"
/>
<link rel="manifest" href="{{ site.theme.link }}/assets/site.webmanifest" />
{# Préchargements #}
<link
as="image"
href="{{ site.theme.link }}/assets/img/icons/cloud-gris.svg"
rel="preload"
type="image/svg+xml"
as="image" href="{{ site.theme.link }}/assets/img/icons/cloud-gris.svg"
rel="preload" type="image/svg+xml"
/>
<link
as="font"
crossorigin
href="{{ site.theme.link }}/assets/fonts/lato/lato-variable-webfont.woff2"
rel="preload"
as="font" crossorigin
href="{{ site.theme.link }}/assets/fonts/lato/lato-variable-webfont.woff2" rel="preload"
type="font/woff2"
/>
<link
as="font"
crossorigin
href="{{ site.theme.link }}/assets/fonts/lato/lato-variable-italic-webfont.woff2"
rel="preload"
as="font" crossorigin
href="{{ site.theme.link }}/assets/fonts/lato/lato-variable-italic-webfont.woff2" rel="preload"
type="font/woff2"
/>
{# Plausible #}
{% if environnement == 'production' %}
<script
data-domain="haikuatelier.com"
defer
data-domain="haikuatelier.com" defer
src="https://greyhound.haikuatelier.com/js/script.js"
></script>
{% endif %}

View file

@ -1,48 +1,30 @@
<nav
aria-label="Navigation for the dedicated pages of the main Categories of Products"
class="menu-categories-produits"
data-entrees-presentes-fin
id="menu-categories-produits"
aria-label="Navigation for the dedicated pages of the main Categories of Products" class="menu-categories-produits"
data-entrees-presentes-fin id="menu-categories-produits"
>
<svg
alt=""
height="15"
id="fleche-defilement-categories-produits-gauche"
role="presentation"
transform="scale(-1 1)"
viewBox="0 0 15 15"
width="15"
xmlns="http://www.w3.org/2000/svg"
alt="" height="15"
id="fleche-defilement-categories-produits-gauche" role="presentation"
transform="scale(-1 1)" viewBox="0 0 15 15"
width="15" xmlns="http://www.w3.org/2000/svg"
>
<path
d="M8.293 2.293a1 1 0 0 1 1.414 0l4.5 4.5a1 1 0 0 1 0 1.414l-4.5 4.5a1 1 0 0 1-1.414-1.414L11 8.5H1.5a1 1 0 0 1 0-2H11L8.293 3.707a1 1 0 0 1 0-1.414"
fill="#fff"
/>
<path d="M8.293 2.293a1 1 0 0 1 1.414 0l4.5 4.5a1 1 0 0 1 0 1.414l-4.5 4.5a1 1 0 0 1-1.414-1.414L11 8.5H1.5a1 1 0 0 1 0-2H11L8.293 3.707a1 1 0 0 1 0-1.414" fill="#fff" />
</svg>
<ul>
<li {{ est_page_tous_produits ? "class='categorie-courante'" : '' }}><a href="{{ pages.shop.lien }}">All</a></li>
{% for categorie in categories_produits %}
{# TODO: Factoriser l'injection de classe d'une manière plus propre #}
<li
{{ categorie.courante ? "class='categorie-courante'" : '' }}
id="categorie-{{ categorie.slug|e }}"
>
<li {{ categorie.courante ? "class='categorie-courante'" : '' }} id="categorie-{{ categorie.slug|e }}">
<a href="/{{ base_categorie_produit }}/{{ categorie.slug|e }}">{{ categorie.nom|e }}</a>
</li>
{% endfor %}
</ul>
<svg
alt=""
height="15"
id="fleche-defilement-categories-produits-droite"
role="presentation"
viewBox="0 0 15 15"
width="15"
alt="" height="15"
id="fleche-defilement-categories-produits-droite" role="presentation"
viewBox="0 0 15 15" width="15"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M8.293 2.293a1 1 0 0 1 1.414 0l4.5 4.5a1 1 0 0 1 0 1.414l-4.5 4.5a1 1 0 0 1-1.414-1.414L11 8.5H1.5a1 1 0 0 1 0-2H11L8.293 3.707a1 1 0 0 1 0-1.414"
fill="#fff"
/>
<path d="M8.293 2.293a1 1 0 0 1 1.414 0l4.5 4.5a1 1 0 0 1 0 1.414l-4.5 4.5a1 1 0 0 1-1.414-1.414L11 8.5H1.5a1 1 0 0 1 0-2H11L8.293 3.707a1 1 0 0 1 0-1.414" fill="#fff" />
</svg>
</nav>

View file

@ -1,45 +1,33 @@
<section
class="panneau"
id="panneau-informations-client"
>
<section class="panneau" id="panneau-informations-client">
<header class="panneau__en-tete">
<h2>Your info</h2>
</header>
{# « PayPal Express Checkout » #}
<div
class="panneau__paypal-express"
hidden
>
<div class="panneau__paypal-express" hidden>
<p>Express Check-out</p>
{# Bouton PayPal #}
<button type="button">
<img
alt="PayPal's Logo"
height="18"
src="{{ site.theme.link }}/assets/img/paypal/logo-paypal.svg"
width="13.48"
alt="PayPal's Logo" height="18"
src="{{ site.theme.link }}/assets/img/paypal/logo-paypal.svg" width="13.48"
/>
<img
alt="PayPal"
height="18"
src="{{ site.theme.link }}/assets/img/paypal/titre-paypal.svg"
width="67.69"
alt="PayPal" height="18"
src="{{ site.theme.link }}/assets/img/paypal/titre-paypal.svg" width="67.69"
/>
</button>
</div>
<form
class="panneau__formulaires"
id="formulaire-commande"
class="panneau__formulaires" id="formulaire-commande"
method="post"
>
{# Formulaires pour la livraison et facturation #}
<div class="panneau__formulaires__separation-adresses">
<input
id="separation-adresses"
name="separation-adresses"
id="separation-adresses" name="separation-adresses"
type="checkbox"
/>
<label for="separation-adresses">Use a separate billing address</label>
@ -52,12 +40,9 @@
<div class="formulaire__champs__champ">
<label for="livraison-prenom">First name</label>
<input
autocomplete="given-name"
id="livraison-prenom"
minlength="2"
name="livraison-prenom"
required
type="text"
autocomplete="given-name" id="livraison-prenom"
minlength="2" name="livraison-prenom"
required type="text"
value="{{ adresse_livraison.first_name }}"
/>
</div>
@ -65,12 +50,9 @@
<div class="formulaire__champs__champ">
<label for="livraison-nom">Last name</label>
<input
autocomplete="family-name"
id="livraison-nom"
name="livraison-nom"
minlength="2"
required
type="text"
autocomplete="family-name" id="livraison-nom"
name="livraison-nom" minlength="2"
required type="text"
value="{{ adresse_livraison.last_name }}"
/>
</div>
@ -78,36 +60,27 @@
<div class="formulaire__champs__champ">
<label for="livraison-adresse">Address</label>
<input
autocomplete="street-address"
id="livraison-adresse"
name="livraison-adresse"
required
type="text"
value="{{ adresse_livraison.address_1 }}"
autocomplete="street-address" id="livraison-adresse"
name="livraison-adresse" required
type="text" value="{{ adresse_livraison.address_1 }}"
/>
</div>
<div class="formulaire__champs__champ">
<label for="livraison-code-postal">Postcode</label>
<input
id="livraison-code-postal"
minlength="3"
name="livraison-code-postal"
required
type="text"
value="{{ adresse_livraison.postcode }}"
id="livraison-code-postal" minlength="3"
name="livraison-code-postal" required
type="text" value="{{ adresse_livraison.postcode }}"
/>
</div>
<div class="formulaire__champs__champ">
<label for="livraison-ville">City</label>
<input
autocomplete="address-level2"
id="livraison-ville"
minlength="2"
name="livraison-ville"
required
type="text"
autocomplete="address-level2" id="livraison-ville"
minlength="2" name="livraison-ville"
required type="text"
value="{{ adresse_livraison.city }}"
/>
</div>
@ -115,27 +88,20 @@
<div class="formulaire__champs__champ">
<label for="livraison-region-etat">Region/State</label>
<input
autocomplete="address-level1"
id="livraison-region-etat"
name="livraison-region-etat"
placeholder="If applicable"
type="text"
value="{{ adresse_livraison.state }}"
autocomplete="address-level1" id="livraison-region-etat"
name="livraison-region-etat" placeholder="If applicable"
type="text" value="{{ adresse_livraison.state }}"
/>
</div>
<div class="formulaire__champs__champ">
<label for="livraison-pays">Country</label>
<select
id="livraison-pays"
name="livraison-pays"
id="livraison-pays" name="livraison-pays"
required
>
{% for cle, pays in pays_livraison %}
<option
{{ cle == adresse_livraison.country ? 'selected' : '' }}
value="{{ cle }}"
>
<option {{ cle == adresse_livraison.country ? 'selected' : '' }} value="{{ cle }}">
{{ pays }}
</option>
{% endfor %}
@ -145,12 +111,9 @@
<div class="formulaire__champs__champ">
<label for="livraison-telephone">Phone</label>
<input
autocomplete="tel"
id="livraison-telephone"
minlength="6"
name="livraison-telephone"
required
type="tel"
autocomplete="tel" id="livraison-telephone"
minlength="6" name="livraison-telephone"
required type="tel"
value="{{ adresse_livraison.phone }}"
/>
</div>
@ -158,62 +121,45 @@
<div class="formulaire__champs__champ">
<label for="livraison-email">Email Address</label>
<input
autocomplete="email"
id="livraison-email"
minlength="4"
name="livraison-email"
required
type="email"
autocomplete="email" id="livraison-email"
minlength="4" name="livraison-email"
required type="email"
value="{{ email }}"
/>
</div>
</div>
</div>
<div
class="panneau__formulaires__facturation formulaire"
hidden
>
<div class="panneau__formulaires__facturation formulaire" hidden>
<h3 class="formulaire__titre">Billing:</h3>
<div class="formulaire__champs">
<div class="formulaire__champs__champ">
<label for="facturation-prenom">First name</label>
<input
autocomplete="given-name"
disabled
id="facturation-prenom"
name="facturation-prenom"
minlength="2"
required
type="text"
value="{{ adresse_facturation.first_name }}"
autocomplete="given-name" disabled
id="facturation-prenom" name="facturation-prenom"
minlength="2" required
type="text" value="{{ adresse_facturation.first_name }}"
/>
</div>
<div class="formulaire__champs__champ">
<label for="facturation-nom">Last name</label>
<input
autocomplete="family-name"
disabled
id="facturation-nom"
name="facturation-nom"
minlength="2"
required
type="text"
value="{{ adresse_facturation.last_name }}"
autocomplete="family-name" disabled
id="facturation-nom" name="facturation-nom"
minlength="2" required
type="text" value="{{ adresse_facturation.last_name }}"
/>
</div>
<div class="formulaire__champs__champ">
<label for="facturation-adresse">Address</label>
<input
autocomplete="street-address"
disabled
id="facturation-adresse"
name="facturation-adresse"
required
type="text"
autocomplete="street-address" disabled
id="facturation-adresse" name="facturation-adresse"
required type="text"
value="{{ adresse_facturation.address_1 }}"
/>
</div>
@ -221,12 +167,9 @@
<div class="formulaire__champs__champ">
<label for="facturation-code-postal">Postcode</label>
<input
disabled
id="facturation-code-postal"
minlength="3"
name="facturation-code-postal"
required
type="text"
disabled id="facturation-code-postal"
minlength="3" name="facturation-code-postal"
required type="text"
value="{{ adresse_facturation.postcode }}"
/>
</div>
@ -234,26 +177,19 @@
<div class="formulaire__champs__champ">
<label for="facturation-ville">City</label>
<input
autocomplete="address-level2"
disabled
id="facturation-ville"
minlength="2"
name="facturation-ville"
required
type="text"
value="{{ adresse_facturation.city }}"
autocomplete="address-level2" disabled
id="facturation-ville" minlength="2"
name="facturation-ville" required
type="text" value="{{ adresse_facturation.city }}"
/>
</div>
<div class="formulaire__champs__champ">
<label for="facturation-region-etat">Region/State</label>
<input
autocomplete="address-level1"
disabled
id="facturation-region-etat"
name="facturation-region-etat"
placeholder="If applicable"
type="text"
autocomplete="address-level1" disabled
id="facturation-region-etat" name="facturation-region-etat"
placeholder="If applicable" type="text"
value="{{ adresse_facturation.state }}"
/>
</div>
@ -261,15 +197,11 @@
<div class="formulaire__champs__champ">
<label for="facturation-pays">Country</label>
<select
id="facturation-pays"
name="facturation-pays"
id="facturation-pays" name="facturation-pays"
required
>
{% for cle, pays in pays_livraison %}
<option
{{ cle == adresse_livraison.country ? 'selected' : '' }}
value="{{ cle }}"
>
<option {{ cle == adresse_livraison.country ? 'selected' : '' }} value="{{ cle }}">
{{ pays }}
</option>
{% endfor %}
@ -279,39 +211,27 @@
<div class="formulaire__champs__champ">
<label for="facturation-telephone">Phone</label>
<input
autocomplete="tel"
disabled
id="facturation-telephone"
minlength="6"
name="facturation-telephone"
required
type="tel"
value="{{ adresse_facturation.phone }}"
autocomplete="tel" disabled
id="facturation-telephone" minlength="6"
name="facturation-telephone" required
type="tel" value="{{ adresse_facturation.phone }}"
/>
</div>
<div class="formulaire__champs__champ">
<label for="facturation-email">Email Address</label>
<input
autocomplete="email"
disabled
id="facturation-email"
minlength="4"
name="facturation-email"
required
type="email"
value="{{ email }} "
autocomplete="email" disabled
id="facturation-email" minlength="4"
name="facturation-email" required
type="email" value="{{ email }} "
/>
</div>
</div>
</div>
<div class="panneau__formulaires__message">
<p
class="message"
id="message-formulaire-adresses"
>
</p>
<p class="message" id="message-formulaire-adresses"> </p>
</div>
{# Formulaire de paiement #}
@ -327,14 +247,10 @@
</p>
</div>
<div
class="formulaire__paiement__choix"
hidden
>
<div class="formulaire__paiement__choix" hidden>
<label for="paiement-stripe">Credit card</label>
<input
id="paiement-stripe"
name="type-paiement"
id="paiement-stripe" name="type-paiement"
type="radio"
/>
</div>
@ -343,10 +259,7 @@
</form>
<footer class="panneau__pied-de-page">
<button
form="formulaire-commande"
type="submit"
>
<button form="formulaire-commande" type="submit">
Calculate shipping
</button>
</footer>

View file

@ -1,7 +1,4 @@
<section
class="panneau"
id="panneau-panier"
>
<section class="panneau" id="panneau-panier">
<header class="panneau__en-tete">
<h2>Your cart</h2>
</header>
@ -9,10 +6,8 @@
<div class="panneau__grille-produits">
{% for produit in produits_panier %}
<article
class="panneau__grille-produits__produit"
data-cle-panier="{{ produit.cle }}"
data-id-produit="{{ produit.id_produit }}"
data-id-variation="{{ produit.id_variation }}"
class="panneau__grille-produits__produit" data-cle-panier="{{ produit.cle }}"
data-id-produit="{{ produit.id_produit }}" data-id-variation="{{ produit.id_variation }}"
data-quantite="{{ produit.quantite }}"
>
<div class="panneau__grille-produits__produit__illustratif">
@ -39,29 +34,20 @@
<div class="detail-produit__actions">
<button
class="detail-produit__actions__soustraction"
{{ produit.quantite <= 1 ? 'disabled' }}
class="detail-produit__actions__soustraction" {{ produit.quantite <= 1 ? 'disabled' }}
type="button"
>
-
</button>
<input
aria-label="Quantity selector"
min="1"
type="number"
value="{{ produit.quantite }}"
aria-label="Quantity selector" min="1"
type="number" value="{{ produit.quantite }}"
/>
<button
class="detail-produit__actions__addition"
type="button"
>
<button class="detail-produit__actions__addition" type="button">
+
</button>
<button
class="detail-produit__actions__suppression"
type="button"
>
<button class="detail-produit__actions__suppression" type="button">
Remove
</button>
</div>
@ -72,40 +58,27 @@
<div class="panneau__instructions-code-promo">
<textarea
aria-label="Special instructions for your order"
class="panneau__instructions-code-promo__instructions"
id="instructions-client"
maxlength="2000"
minlength="10"
name="instructions"
placeholder="Add special instructions for your order: specify the products you want wrapped and how (i.e. all in one bag or separated), a gift message, etc."
resizable="false"
rows="3"
spellcheck="true"
aria-label="Special instructions for your order" class="panneau__instructions-code-promo__instructions"
id="instructions-client" maxlength="2000"
minlength="10" name="instructions"
placeholder="Add special instructions for your order: specify the products you want wrapped and how (i.e. all in one bag or separated), a gift message, etc." resizable="false"
rows="3" spellcheck="true"
></textarea>
<form
action=""
class="panneau__instructions-code-promo__code-promo"
{{ code_promo ? 'data-code-promo-present' }}
id="ensemble-code-promo"
action="" class="panneau__instructions-code-promo__code-promo"
{{ code_promo ? 'data-code-promo-present' }} id="ensemble-code-promo"
>
<input
{{ code_promo ? 'disabled' }}
aria-label="DIscount code or gift card"
id="champ-code-promo"
maxlength="20"
minlength="3"
name="code-promo"
placeholder="Discount code or gift card"
type="text"
{{ code_promo ? 'disabled' }} aria-label="DIscount code or gift card"
id="champ-code-promo" maxlength="20"
minlength="3" name="code-promo"
placeholder="Discount code or gift card" type="text"
value="{{ code_promo ? code_promo }}"
/>
<button
class="bouton-blanc-sur-noir"
for="code-promo"
id="bouton-code-promo"
type="button"
class="bouton-blanc-sur-noir" for="code-promo"
id="bouton-code-promo" type="button"
>
{{ code_promo ? 'Remove' : 'Apply' }}
</button>
@ -115,27 +88,20 @@
</div>
<div class="panneau__sous-totaux">
<div
class="panneau__sous-totaux__ligne"
id="sous-total-produits"
>
<div class="panneau__sous-totaux__ligne" id="sous-total-produits">
<p>Subtotal:</p>
<p><strong>{{ sous_total_panier }}€</strong></p>
</div>
<div
class="panneau__sous-totaux__ligne"
id="sous-total-reduction"
class="panneau__sous-totaux__ligne" id="sous-total-reduction"
{{ not code_promo ? 'hidden' }}
>
<p>Discount:</p>
<p><strong>-{{ sous_total_reduction }}€</strong></p>
</div>
<div
class="panneau__sous-totaux__ligne"
id="sous-total-livraison"
>
<div class="panneau__sous-totaux__ligne" id="sous-total-livraison">
<p>Shipping:</p>
{% if not adresse_renseignee %}
<p>
@ -149,8 +115,7 @@
</div>
<fieldset
class="panneau__sous-totaux__choix-methode-livraison"
{{ not adresse_renseignee ? 'hidden' }}
class="panneau__sous-totaux__choix-methode-livraison" {{ not adresse_renseignee ? 'hidden' }}
id="choix-methode-livraison"
>
<label>Select your shipping method</label>
@ -158,16 +123,11 @@
{% for methode_livraison in methodes_livraison %}
<div data-methode-initiale>
<input
{{ methode_livraison.selectionnee ? 'checked' }}
data-prix="{{ methode_livraison.prix }}"
id="methode-livraison-{{ methode_livraison.id }}"
name="choix-methode-livraison"
type="radio"
value="{{ methode_livraison.id }}"
{{ methode_livraison.selectionnee ? 'checked' }} data-prix="{{ methode_livraison.prix }}"
id="methode-livraison-{{ methode_livraison.id }}" name="choix-methode-livraison"
type="radio" value="{{ methode_livraison.id }}"
/>
<label for="methode-livraison-{{ methode_livraison.id }}">{{ methode_livraison.titre }} ({{
methode_livraison.prix
}}€)</label>
<label for="methode-livraison-{{ methode_livraison.id }}">{{ methode_livraison.titre }} ({{ methode_livraison.prix }}€)</label>
</div>
{% endfor %}
</fieldset>

View file

@ -1,12 +1,8 @@
{# Barre flottante avec le nom du Produit, le sélecteur de variation et de quantité pour le Panier. #}
<aside
aria-label="Product's name, price and variation selection"
class="resume-produit"
>
<aside aria-label="Product's name, price and variation selection" class="resume-produit">
<form
class="selecteur-produit"
id="variation-choice"
class="selecteur-produit" id="variation-choice"
name="variation-choice"
>
<h3 class="selecteur-produit__nom">{{ product.name }}</h3>
@ -25,25 +21,18 @@
</form>
</aside>
<aside
aria-label="Product's details, shipping conditions and care tips"
class="details-produit"
>
<aside aria-label="Product's details, shipping conditions and care tips" class="details-produit">
<div class="details-produit__textes">
<section class="section-textuelle">
<h3 class="section-textuelle__titre">
<button
aria-expanded="true"
aria-controls="section-details-produit"
aria-expanded="true" aria-controls="section-details-produit"
type="button"
>
Details
</button>
</h3>
<div
class="section-textuelle__contenu"
id="section-details-produit"
>
<div class="section-textuelle__contenu" id="section-details-produit">
{{ product.details }}
</div>
</section>
@ -51,17 +40,13 @@
<section class="section-textuelle">
<h3 class="section-textuelle__titre">
<button
aria-expanded="false"
aria-controls="section-conditions-livraison"
aria-expanded="false" aria-controls="section-conditions-livraison"
type="button"
>
Shipping
</button>
</h3>
<div
class="section-textuelle__contenu"
id="section-conditions-livraison"
>
<div class="section-textuelle__contenu" id="section-conditions-livraison">
{{ descriptions_produits.texte_conditions_livraison }}
</div>
</section>
@ -69,17 +54,13 @@
<section class="section-textuelle">
<h3 class="section-textuelle__titre">
<button
aria-expanded="false"
aria-controls="section-entretien-produit"
aria-expanded="false" aria-controls="section-entretien-produit"
type="button"
>
Care
</button>
</h3>
<div
class="section-textuelle__contenu"
id="section-entretien-produit"
>
<div class="section-textuelle__contenu" id="section-entretien-produit">
{{ descriptions_produits.texte_entretien_produit }}
</div>
</section>
@ -89,21 +70,16 @@
{# Désactive le bouton d'ajout au panier en cas d'absence de stock. #}
{% if product.stock > 0 %}
<button
class="bouton-case-pleine"
disabled
data-in-stock
for="variation-choice"
id="bouton-ajout-panier"
type="submit"
class="bouton-case-pleine" disabled
data-in-stock for="variation-choice"
id="bouton-ajout-panier" type="submit"
>
Add to cart
</button>
{% else %}
<button
class="bouton-case-pleine"
disabled
for="variation-choice"
id="bouton-ajout-panier"
class="bouton-case-pleine" disabled
for="variation-choice" id="bouton-ajout-panier"
type="button"
>
Out of stock

View file

@ -1,13 +1,7 @@
<main class="photos-produit">
<div
aria-label="Photo of the Product alone"
class="colonne colonne-gauche"
>
<div aria-label="Photo of the Product alone" class="colonne colonne-gauche">
{% for photo in product.left_column_photos %}
<figure
data-index="0"
role="figure"
>
<figure data-index="0" role="figure">
<picture>
{{ photo }}
</picture>
@ -15,15 +9,9 @@
{% endfor %}
</div>
<div
aria-label="Photos of the Product worn"
class="colonne colonne-droite"
>
<div aria-label="Photos of the Product worn" class="colonne colonne-droite">
{% for photo in product.right_column_photos %}
<figure
data-index="{{ loop.index }}"
role="figure"
>
<figure data-index="{{ loop.index }}" role="figure">
<picture>
{{ photo }}
</picture>

View file

@ -1,7 +1,4 @@
<section
aria-label="Products in the same Collection"
class="produits-similaires"
>
<section aria-label="Products in the same Collection" class="produits-similaires">
<header><h2>From the same Collection</h2></header>
{{ include('parts/pages/produit/grille-produits-similaires.twig') }}

View file

@ -1,20 +1,14 @@
<div class="selecteur-produit__attribut-variation__selecteurs">
<label
for="{{ attribut.slug }}"
id="label-{{ attribut.slug }}"
>
<label for="{{ attribut.slug }}" id="label-{{ attribut.slug }}">
{{ attribut.name }}:
</label>
<select
aria-labelledby="label-{{ atribut.slug }}"
id="{{ attribut.slug }}"
name="{{ attribut.slug }}"
required
aria-labelledby="label-{{ atribut.slug }}" id="{{ attribut.slug }}"
name="{{ attribut.slug }}" required
>
<option
disabled
selected
disabled selected
value=""
>
--

View file

@ -1,6 +1,5 @@
<div
class="grille-produits"
data-page="1"
class="grille-produits" data-page="1"
{% if category_id %}data-id-categorie-produits="{{ category_id }}"{% endif %}
>
{% if products|length > 0 %}

View file

@ -1,11 +1,7 @@
<footer
aria-label="Footer offering navigations links"
id="pied-de-page"
>
<footer aria-label="Footer offering navigations links" id="pied-de-page">
<div class="zone-menu-navigation-secondaire">
<nav
aria-label="Navigation for special pages"
class="menu-navigation"
aria-label="Navigation for special pages" class="menu-navigation"
id="menu-navigation-secondaire"
>
<ul>
@ -18,18 +14,14 @@
<div class="zone-liens-reseaux-sociaux">
<nav
aria-label="Navigation for Haiku Atelier's social links"
class="menu-navigation"
aria-label="Navigation for Haiku Atelier's social links" class="menu-navigation"
id="liens-reseaux-sociaux"
>
<ul>
{% for lien in liens_reseaux_sociaux %}
{% if lien.url %}
<li>
<a
href="{{ lien.url }}"
target="_blank"
>
<a href="{{ lien.url }}" target="_blank">
{{ lien.nom }}
</a>
</li>

View file

@ -17,10 +17,7 @@
</p>
<p>
Don't hesitate to <a
class="lien-lien"
href="/contact"
>contact us</a> if you have any questions!
Don't hesitate to <a class="lien-lien" href="/contact">contact us</a> if you have any questions!
</p>
</div>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -2,7 +2,6 @@
{% block texte_supplementaire %}
<p>
Your order has been received and will be dispatched as soon as possible. You will be receive a tracking number once
it has been sent.
Your order has been received and will be dispatched as soon as possible. You will be receive a tracking number once it has been sent.
</p>
{% endblock %}