diff --git a/apxtri.objects.setup.zip b/apxtri.objects.setup.zip
new file mode 100644
index 0000000..c52cfdf
Binary files /dev/null and b/apxtri.objects.setup.zip differ
diff --git a/wco/apx/apx.js b/wco/apx/apx.js
index 10acf94..6699170 100644
--- a/wco/apx/apx.js
+++ b/wco/apx/apx.js
@@ -196,7 +196,7 @@ apx.listendatawco = (newpropertie) => {
if (!apx.wco) apx.wco = {};
console.log(
"wco dynamic into the webpage",
- apx.wco,
+ apx.data.wco,
"no propertie to add:",
!newpropertie
);
@@ -217,13 +217,19 @@ apx.listendatawco = (newpropertie) => {
const elements = document.querySelectorAll(`[data-wco='${p}']`);
elements.forEach((e) => actionprop(apx.data.wco[p], e));
//console.log(p, Object.hasOwnProperty(apx.wco));
- if (Object.hasOwnProperty(apx.wco)) {
- Object.defineProperty(apx.wco, p, {
+ if (!apx.data.wco.hasOwnProperty(p)) {
+ let _val = apx.data.wco[p]; // Stocke la valeur initiale
+ Object.defineProperty(apx.data.wco, p, {
+ get: () => _val,
set: (newv) => {
- this[p] = newv;
+ _val = newv; // Met à jour la valeur interne
+ const elements = document.querySelectorAll(`[data-wco='${p}']`); // Re-sélectionne les éléments au cas où le DOM aurait changé
elements.forEach((e) => actionprop(newv, e));
},
});
+ if (_val !== undefined) {
+ apx.data.wco[p] = _val;
+ }
}
});
};
@@ -491,7 +497,7 @@ apx.update = async () => {
console.log("WARNING!!, local apxtri.wco was erase by updatelocaldb.wco");
}*/
Object.keys(initset.data.data).forEach((k) => {
- if (k != "headers") {
+ if (k !== "headers") {
apx.data[k] = initset.data.data[k];
}
});
diff --git a/wco/apxauth/apxauth.js b/wco/apxauth/apxauth.js
index 7870a39..d7db95c 100644
--- a/wco/apxauth/apxauth.js
+++ b/wco/apxauth/apxauth.js
@@ -2,7 +2,7 @@ var apx = apx || {};
apx.apxauth = {};
apx.apxauth.loadwco = async (id, ctx) => {
// check if not authenticate, do nothing cause by default screensignin and wait authentification
- // if authenticate, if url xhash then redirect if no url then change wco-link=screenmytribes
+ // if authenticate, if url xhash then redirect if no url then change wco-link=screenmyworld
// if (dayjs(apx.data.headers.xdays).diff(dayjs(), "hours") >= 24) apx.apxauth.checkisauth();
//load main.mustache of the component
//when wco-xxx change it run this function
@@ -35,7 +35,7 @@ apx.apxauth.getdata = (id, ctx) => {
? apx.data.appdata.emailsupport
: "";
switch (ctx.link) {
- case "logout":
+ case "myworld":
if (!data.profils) data.profils = [];
apx.data.headers.xprofils.forEach((p) => {
if (!["anonymous", "pagans", "persons"].includes(p)) {
@@ -45,15 +45,47 @@ apx.apxauth.getdata = (id, ctx) => {
data.noprofils = data.profils.length == 0;
data.member = apx.data.headers.xprofils.includes("persons");
data.websites = apx.data.appdata.websites;
- // get tribes activities
- /*["", "https://wall-ants.ndda.fr"];
+ data.optionlinks=apx.data.tpldata[tpldataname].optionlinks
+ data.town=apx.data.town
+ data.nation=apx.data.nation
+ if (1==1 || apx.data.headers.xprofils.includes('major')){
+ apx.data.tpldata[tpldataname].optionlinksmajor.forEach(o=>data.optionlinks.push(o))
+ apx.save()
+ }
+ // get towns list
axios
- .get(`/api/apxtri/tribes/activities`, {
+ .get(`/api/apxtri/odmdb/idx/apxtri/towns/towns`, {
headers: apx.data.headers,
})
- .then((rep) => {})
- .catch((err) => {});
- */
+ .then((rep) => {
+ console.log(rep)
+ if (rep.status==200){
+ apx.data.itms.towns=rep.data.data.idx
+ data.townsnumber= Object.keys(apx.data.itms.towns).length;
+ apx.data.wco.townsnumber={textContent:Object.keys(apx.data.itms.towns).length};
+ apx.listendatawco('townsnumber');
+ apx.save()
+ }
+ })
+ .catch((err) => {
+ console.log("ERROR, geting towns itms not available",err)
+ });
+ axios
+ .get(`/api/apxtri/odmdb/idx/apxtri/pagans/lst_alias`, {
+ headers: apx.data.headers,
+ })
+ .then((rep) => {
+ if (rep.status==200){
+ console.log(rep)
+ data.pagansnumber=rep.data.data.idx.length
+ apx.data.wco.pagansnumber={textContent:rep.data.data.idx.length};
+ apx.listendatawco('pagansnumber');
+ apx.save();
+ }
+ })
+ .catch((err) => {
+ console.log("ERROR, geting pagans itms not available",err)
+ });
break;
default:
break;
@@ -253,7 +285,7 @@ apx.apxauth.authentifyme = async (
//location.reload();
document
.getElementById(idparent)
- .setAttribute("wco-link", "mytribes");
+ .setAttribute("wco-link", "myworld");
}
})
.catch((err) => {
@@ -484,7 +516,7 @@ apx.apxauth.authenticatedetachedSignature = async (
message
) => {
/**
- * Check that alias (pubkey) signe a message
+ * Check that alias (pubkey) sign a message
* @alias {string} alias link to the publickey
* @pubK {string} publiKey text format
* @detachedSignature {string} a detachedsignatured get from apx.apxauth.detachedSignature
diff --git a/wco/apxauth/screenlogout_fr.mustache b/wco/apxauth/screenlogout_fr.mustache
deleted file mode 100644
index ce2648f..0000000
--- a/wco/apxauth/screenlogout_fr.mustache
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
- Bonjour {{xalias}},
-
-
- Si cet appareil ne vous appartiens pas et que vous n'utilisez pas l'application, vous devriez vous deconnecter.
-
-
- Nettoyer mes traces de cet appareil?
- Se deconnecter
-
-
-
-
- Voir mes échanges?
- Mon activité
-
- {{#member}}
-
- Vous êtes membre de {{xtribe}} {{#noprofils}} sand profil particulier {{/noprofils}} {{^noprofils}}avec le(s) profil(s): {{#profils}} {{.}} {{/profils}} {{/noprofils}}
-
- {{/member}}
- {{^member}}
-
Vous n'êtes pas encore membre de {{xtribe}}
-
- Envie d'jouter cette tribut {{xtribe}}?
- Rejoindre {{xtribe}}
-
- {{/member}}
-
Les applications ou pages web de {{xtribe}} à visiter:
- {{#websites}}{{{name}}} {{/websites}}
-
-
testbtn
-
-
\ No newline at end of file
diff --git a/wco/apxauth/screenmytribes_fr.mustache b/wco/apxauth/screenmytribes_fr.mustache
deleted file mode 100644
index 9128c94..0000000
--- a/wco/apxauth/screenmytribes_fr.mustache
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
- Bonjour {{xalias}},
-
-
-
-
- Redirige vers
- Redirige vers recruiter.smatchit.io/offer_fr.html&xhash....
-
- {{#member}}
-
- Vous êtes membre de {{xtribe}} {{#noprofils}} sand profil particulier {{/noprofils}} {{^noprofils}}avec le(s) profil(s): {{#profils}} {{.}} {{/profils}} {{/noprofils}}
-
- {{/member}}
-
Les applications ou pages web de {{xtribe}} à visiter:
- {{#websites}}{{{name}}} {{/websites}}
-
-
testbtn
-
-
\ No newline at end of file
diff --git a/wco/apxauth/screenmyworld_fr.mustache b/wco/apxauth/screenmyworld_fr.mustache
new file mode 100644
index 0000000..9b39a4c
--- /dev/null
+++ b/wco/apxauth/screenmyworld_fr.mustache
@@ -0,0 +1,41 @@
+
+ Authentifié avec l'alias: {{xalias}} dans {{town}}-{{nation}}
+
+
+ {{#optionlinks}}
+
+ {{#notification_count}}
+
{{notification_count}}
+ {{/notification_count}}
+
+ {{{svg}}}
+
+
+ {{/optionlinks}}
+
+
+
+
+
Nombre d'uniques
+
{{pagansnumber}}
+
identités actives
+
+
+
Nombre de towns
+
{{townsnumber}}
+
Actives en ce moment
+
+
+
+
+ {{#mytribes}}
+
+ {{#notification_count}}
+
{{notification_count}}
+ {{/notification_count}}
+
+ {{{tribename}}}
+
+
+ {{/mytribes}}
+
\ No newline at end of file
diff --git a/wco/crypto/crypto.js b/wco/crypto/crypto.js
index 7f52ffb..acf4e1d 100644
--- a/wco/crypto/crypto.js
+++ b/wco/crypto/crypto.js
@@ -3,59 +3,70 @@ var apx = apx || {};
apx.crypto = apx.crypto || {};
apx.crypto.genKey = async (uuid) => {
- return await openpgp.generateKey(
- {
- type: "ecc",
- curve: "curve25519",
- userIDs: [
- {
- alias: uuid
- }
- ],
- passphrase: "",
- format: "armored",
- }
- );
+ return await openpgp.generateKey({
+ type: "ecc",
+ curve: "curve25519",
+ userIDs: [
+ {
+ alias: uuid,
+ },
+ ],
+ passphrase: "",
+ format: "armored",
+ });
};
apx.crypto.encryptMessage = async (message, publicKey) => {
- publicKey = await openpgp.readKey(
- {
- armoredKey: publicKey
- }
- );
+ publicKey = await openpgp.readKey({
+ armoredKey: publicKey,
+ });
- return await openpgp.encrypt(
- {
- message: await openpgp.createMessage(
- {
- text: message
- }
- ),
- encryptionKeys: publicKey
- }
- );
+ return await openpgp.encrypt({
+ message: await openpgp.createMessage({
+ text: message,
+ }),
+ encryptionKeys: publicKey,
+ });
};
apx.crypto.decryptMessage = async (encryptedMessage, privateKey) => {
- privateKey = await openpgp.readPrivateKey(
- {
- armoredKey: privateKey
- }
- );
+ privateKey = await openpgp.readPrivateKey({
+ armoredKey: privateKey,
+ });
- const message = await openpgp.readMessage(
- {
- armoredMessage: encryptedMessage
- }
- );
+ const message = await openpgp.readMessage({
+ armoredMessage: encryptedMessage,
+ });
- return await openpgp.decrypt(
- {
- message,
- decryptionKeys: privateKey
- }
- );
+ return await openpgp.decrypt({
+ message,
+ decryptionKeys: privateKey,
+ });
};
-
-export default apx;
\ No newline at end of file
+apx.crypto.isSignedby = async (
+ alias,
+ publicKey,
+ detachedSignature,
+ message
+) => {
+ const publickey = await openpgp.readKey({ armoredKey: publicKey });
+ const msg = await openpgp.createMessage({ text: message });
+ const signature = await openpgp.readSignature({
+ armoredSignature: atob(detachedSignature), // parse detached signature
+ });
+ const verificationResult = await openpgp.verify({
+ msg, // Message object
+ signature,
+ verificationKeys: publickey,
+ });
+ const { verified, keyID } = verificationResult.signatures[0];
+ try {
+ await verified; // throws on invalid signature
+ //console.log("Signed by key id " + keyID.toHex());
+ return KeyId.toHex().alias == alias;
+ } catch (e) {
+ console.log("Signature could not be verified: " + e.message);
+ return false;
+ }
+};
+export default apx;
diff --git a/wco/itm/apxauth.json b/wco/itm/apxauth.json
index 1b4e78f..8e5a860 100644
--- a/wco/itm/apxauth.json
+++ b/wco/itm/apxauth.json
@@ -14,7 +14,7 @@
"apxauthscreensignup": "apxtri/objects/wco/apxauth/screensignup",
"apxauthscreensignin": "apxtri/objects/wco/apxauth/screensignin",
"apxauthscreenlogout": "apxtri/objects/wco/apxauth/screenlogout",
- "apxauthscreenmytribes": "apxtri/objects/wco/apxauth/screenmytribes",
+ "apxauthscreenmyworld": "apxtri/objects/wco/apxauth/screenmyworld",
"apxauthscreeninformation": "apxtri/objects/wco/apxauth/screeninformation",
"apxauthscreenforgetkey": "apxtri/objects/wco/apxauth/screenforgetkey"
},
diff --git a/wwws/admin/src/myprofil_fr.html b/wwws/admin/src/myprofil_fr.html
new file mode 100644
index 0000000..31e063c
--- /dev/null
+++ b/wwws/admin/src/myprofil_fr.html
@@ -0,0 +1,66 @@
+
+
+
+
+ Mon profil
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wwws/admin/src/static/css/input.css b/wwws/admin/src/static/css/input.css
index 05da729..2af92c3 100644
--- a/wwws/admin/src/static/css/input.css
+++ b/wwws/admin/src/static/css/input.css
@@ -17,7 +17,9 @@
src: url(../fonts/Quicksand-Light.ttf) format('ttf');
}
-@import "tailwindcss" source("../../../src/**/*.{html,js,mustache}");
+/*@import "tailwindcss" source("../../.{html,js,mustache}");
+*/
+@import "tailwindcss" source("/media/phil/usbfarm/apxtowns/data/apxtri/objects/wwws/admin/src/**/*.{html,js,mustache}");
@import "./sourcetw.css";
@plugin "daisyui";
diff --git a/wwws/admin/src/static/css/output.css b/wwws/admin/src/static/css/output.css
index ea840af..98627a9 100644
--- a/wwws/admin/src/static/css/output.css
+++ b/wwws/admin/src/static/css/output.css
@@ -1,4 +1,4 @@
-/*! tailwindcss v4.1.6 | MIT License | https://tailwindcss.com */
+/*! tailwindcss v4.1.10 | MIT License | https://tailwindcss.com */
@layer properties;
@font-face {
font-family: 'Questrial';
@@ -17,18 +17,25 @@
"Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
"Courier New", monospace;
- --color-blue-600: oklch(54.6% 0.245 262.881);
+ --color-red-500: oklch(63.7% 0.237 25.331);
+ --color-red-600: oklch(57.7% 0.245 27.325);
+ --color-green-50: oklch(98.2% 0.018 155.826);
+ --color-green-500: oklch(72.3% 0.219 149.579);
+ --color-green-600: oklch(62.7% 0.194 149.214);
+ --color-gray-50: oklch(98.5% 0.002 247.839);
--color-gray-100: oklch(96.7% 0.003 264.542);
--color-gray-200: oklch(92.8% 0.006 264.531);
--color-gray-400: oklch(70.7% 0.022 261.325);
--color-gray-500: oklch(55.1% 0.027 264.364);
--color-gray-600: oklch(44.6% 0.03 256.802);
--color-gray-700: oklch(37.3% 0.034 259.733);
+ --color-gray-800: oklch(27.8% 0.033 256.848);
--color-gray-900: oklch(21% 0.034 264.665);
--color-neutral-800: oklch(26.9% 0 0);
--color-black: #000;
--color-white: #fff;
--spacing: 0.25rem;
+ --breakpoint-lg: 64rem;
--container-sm: 24rem;
--text-xs: 0.75rem;
--text-xs--line-height: calc(1 / 0.75);
@@ -38,18 +45,25 @@
--text-base--line-height: calc(1.5 / 1);
--text-lg: 1.125rem;
--text-lg--line-height: calc(1.75 / 1.125);
+ --text-xl: 1.25rem;
+ --text-xl--line-height: calc(1.75 / 1.25);
--text-2xl: 1.5rem;
--text-2xl--line-height: calc(2 / 1.5);
+ --font-weight-medium: 500;
--font-weight-semibold: 600;
--font-weight-bold: 700;
--tracking-tight: -0.025em;
- --radius-md: 0.375rem;
--radius-lg: 0.5rem;
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
--ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
--default-transition-duration: 150ms;
--default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
--default-font-family: var(--font-sans);
--default-mono-font-family: var(--font-mono);
+ --font-display: "Questrial", "sans-serif";
+ --font-display--font-feature-settings: "cv02", "cv03", "cv04", "cv11";
+ --font-display--font-variation-settings: "opsz" 32;
--font-heading: "Quicksand","system-ui";
--font-body: "Questrial";
}
@@ -200,6 +214,294 @@
}
}
@layer utilities {
+ .diff {
+ position: relative;
+ display: grid;
+ width: 100%;
+ overflow: hidden;
+ webkit-user-select: none;
+ user-select: none;
+ direction: ltr;
+ container-type: inline-size;
+ grid-template-columns: auto 1fr;
+ &:focus-visible, &:has(.diff-item-1:focus-visible) {
+ outline-style: var(--tw-outline-style);
+ outline-width: 2px;
+ outline-offset: 1px;
+ outline-color: var(--color-base-content);
+ }
+ &:focus-visible {
+ outline-style: var(--tw-outline-style);
+ outline-width: 2px;
+ outline-offset: 1px;
+ outline-color: var(--color-base-content);
+ .diff-resizer {
+ min-width: 90cqi;
+ max-width: 90cqi;
+ }
+ }
+ &:has(.diff-item-2:focus-visible) {
+ outline-style: var(--tw-outline-style);
+ outline-width: 2px;
+ outline-offset: 1px;
+ .diff-resizer {
+ min-width: 10cqi;
+ max-width: 10cqi;
+ }
+ }
+ @supports (-webkit-overflow-scrolling: touch) and (overflow: -webkit-paged-x) {
+ &:focus {
+ .diff-resizer {
+ min-width: 10cqi;
+ max-width: 10cqi;
+ }
+ }
+ &:has(.diff-item-1:focus) {
+ .diff-resizer {
+ min-width: 90cqi;
+ max-width: 90cqi;
+ }
+ }
+ }
+ }
+ .modal {
+ pointer-events: none;
+ visibility: hidden;
+ position: fixed;
+ inset: calc(0.25rem * 0);
+ margin: calc(0.25rem * 0);
+ display: grid;
+ height: 100%;
+ max-height: none;
+ width: 100%;
+ max-width: none;
+ align-items: center;
+ justify-items: center;
+ background-color: transparent;
+ padding: calc(0.25rem * 0);
+ color: inherit;
+ overflow-x: hidden;
+ transition: translate 0.3s ease-out, visibility 0.3s allow-discrete, background-color 0.3s ease-out, opacity 0.1s ease-out;
+ overflow-y: hidden;
+ overscroll-behavior: contain;
+ z-index: 999;
+ &::backdrop {
+ display: none;
+ }
+ &.modal-open, &[open], &:target {
+ pointer-events: auto;
+ visibility: visible;
+ opacity: 100%;
+ background-color: oklch(0% 0 0/ 0.4);
+ .modal-box {
+ translate: 0 0;
+ scale: 1;
+ opacity: 1;
+ }
+ }
+ @starting-style {
+ &.modal-open, &[open], &:target {
+ visibility: hidden;
+ opacity: 0%;
+ }
+ }
+ }
+ .tooltip {
+ position: relative;
+ display: inline-block;
+ --tt-bg: var(--color-neutral);
+ --tt-off: calc(100% + 0.5rem);
+ --tt-tail: calc(100% + 1px + 0.25rem);
+ > :where(.tooltip-content), &:where([data-tip]):before {
+ position: absolute;
+ max-width: 20rem;
+ border-radius: var(--radius-field);
+ padding-inline: calc(0.25rem * 2);
+ padding-block: calc(0.25rem * 1);
+ text-align: center;
+ white-space: normal;
+ color: var(--color-neutral-content);
+ opacity: 0%;
+ font-size: 0.875rem;
+ line-height: 1.25;
+ transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1) 75ms, transform 0.2s cubic-bezier(0.4, 0, 0.2, 1) 75ms;
+ background-color: var(--tt-bg);
+ width: max-content;
+ pointer-events: none;
+ z-index: 2;
+ --tw-content: attr(data-tip);
+ content: var(--tw-content);
+ }
+ &:after {
+ position: absolute;
+ position: absolute;
+ opacity: 0%;
+ background-color: var(--tt-bg);
+ transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1) 75ms, transform 0.2s cubic-bezier(0.4, 0, 0.2, 1) 75ms;
+ content: "";
+ pointer-events: none;
+ width: 0.625rem;
+ height: 0.25rem;
+ display: block;
+ mask-repeat: no-repeat;
+ mask-position: -1px 0;
+ --mask-tooltip: url("data:image/svg+xml,%3Csvg width='10' height='4' viewBox='0 0 8 4' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.500009 1C3.5 1 3.00001 4 5.00001 4C7 4 6.5 1 9.5 1C10 1 10 0.499897 10 0H0C-1.99338e-08 0.5 0 1 0.500009 1Z' fill='black'/%3E%3C/svg%3E%0A");
+ mask-image: var(--mask-tooltip);
+ }
+ &.tooltip-open, &[data-tip]:not([data-tip=""]):hover, &:not(:has(.tooltip-content:empty)):has(.tooltip-content):hover, &:has(:focus-visible) {
+ > .tooltip-content, &[data-tip]:before, &:after {
+ opacity: 100%;
+ --tt-pos: 0rem;
+ transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1) 0s, transform 0.2s cubic-bezier(0.4, 0, 0.2, 1) 0ms;
+ }
+ }
+ > .tooltip-content, &[data-tip]:before {
+ transform: translateX(-50%) translateY(var(--tt-pos, 0.25rem));
+ inset: auto auto var(--tt-off) 50%;
+ }
+ &:after {
+ transform: translateX(-50%) translateY(var(--tt-pos, 0.25rem));
+ inset: auto auto var(--tt-tail) 50%;
+ }
+ }
+ .tooltip\! {
+ position: relative !important;
+ display: inline-block !important;
+ --tt-bg: var(--color-neutral) !important;
+ --tt-off: calc(100% + 0.5rem) !important;
+ --tt-tail: calc(100% + 1px + 0.25rem) !important;
+ > :where(.tooltip-content), &:where([data-tip]):before {
+ position: absolute !important;
+ max-width: 20rem !important;
+ border-radius: var(--radius-field) !important;
+ padding-inline: calc(0.25rem * 2) !important;
+ padding-block: calc(0.25rem * 1) !important;
+ text-align: center !important;
+ white-space: normal !important;
+ color: var(--color-neutral-content) !important;
+ opacity: 0% !important;
+ font-size: 0.875rem !important;
+ line-height: 1.25 !important;
+ transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1) 75ms, transform 0.2s cubic-bezier(0.4, 0, 0.2, 1) 75ms !important;
+ background-color: var(--tt-bg) !important;
+ width: max-content !important;
+ pointer-events: none !important;
+ z-index: 2 !important;
+ --tw-content: attr(data-tip) !important;
+ content: var(--tw-content) !important;
+ }
+ &:after {
+ position: absolute !important;
+ position: absolute !important;
+ opacity: 0% !important;
+ background-color: var(--tt-bg) !important;
+ transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1) 75ms, transform 0.2s cubic-bezier(0.4, 0, 0.2, 1) 75ms !important;
+ content: "" !important;
+ pointer-events: none !important;
+ width: 0.625rem !important;
+ height: 0.25rem !important;
+ display: block !important;
+ mask-repeat: no-repeat !important;
+ mask-position: -1px 0 !important;
+ --mask-tooltip: url("data:image/svg+xml,%3Csvg width='10' height='4' viewBox='0 0 8 4' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.500009 1C3.5 1 3.00001 4 5.00001 4C7 4 6.5 1 9.5 1C10 1 10 0.499897 10 0H0C-1.99338e-08 0.5 0 1 0.500009 1Z' fill='black'/%3E%3C/svg%3E%0A") !important;
+ mask-image: var(--mask-tooltip) !important;
+ }
+ &.tooltip-open, &[data-tip]:not([data-tip=""]):hover, &:not(:has(.tooltip-content:empty)):has(.tooltip-content):hover, &:has(:focus-visible) {
+ > .tooltip-content, &[data-tip]:before, &:after {
+ opacity: 100% !important;
+ --tt-pos: 0rem !important;
+ transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1) 0s, transform 0.2s cubic-bezier(0.4, 0, 0.2, 1) 0ms !important;
+ }
+ }
+ > .tooltip-content, &[data-tip]:before {
+ transform: translateX(-50%) translateY(var(--tt-pos, 0.25rem)) !important;
+ inset: auto auto var(--tt-off) 50% !important;
+ }
+ &:after {
+ transform: translateX(-50%) translateY(var(--tt-pos, 0.25rem)) !important;
+ inset: auto auto var(--tt-tail) 50% !important;
+ }
+ }
+ .tab {
+ position: relative;
+ display: inline-flex;
+ cursor: pointer;
+ appearance: none;
+ flex-wrap: wrap;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ webkit-user-select: none;
+ user-select: none;
+ &:hover {
+ @media (hover: hover) {
+ color: var(--color-base-content);
+ }
+ }
+ --tab-p: 1rem;
+ --tab-bg: var(--color-base-100);
+ --tab-border-color: var(--color-base-300);
+ --tab-radius-ss: 0;
+ --tab-radius-se: 0;
+ --tab-radius-es: 0;
+ --tab-radius-ee: 0;
+ --tab-order: 0;
+ --tab-radius-min: calc(0.75rem - var(--border));
+ border-color: #0000;
+ order: var(--tab-order);
+ height: var(--tab-height);
+ font-size: 0.875rem;
+ padding-inline-start: var(--tab-p);
+ padding-inline-end: var(--tab-p);
+ &:is(input[type="radio"]) {
+ min-width: fit-content;
+ &:after {
+ content: attr(aria-label);
+ }
+ }
+ &:is(label) {
+ position: relative;
+ input {
+ position: absolute;
+ inset: calc(0.25rem * 0);
+ cursor: pointer;
+ appearance: none;
+ opacity: 0%;
+ }
+ }
+ &:checked, &:is(label:has(:checked)), &:is(.tab-active, [aria-selected="true"]) {
+ & + .tab-content {
+ display: block;
+ height: calc(100% - var(--tab-height) + var(--border));
+ }
+ }
+ &:not(:checked, label:has(:checked), :hover, .tab-active, [aria-selected="true"]) {
+ color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-base-content) 50%, transparent);
+ }
+ }
+ &:not(input):empty {
+ flex-grow: 1;
+ cursor: default;
+ }
+ &:focus {
+ --tw-outline-style: none;
+ outline-style: none;
+ @media (forced-colors: active) {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+ }
+ &:focus-visible, &:is(label:has(:checked:focus-visible)) {
+ outline: 2px solid currentColor;
+ outline-offset: -5px;
+ }
+ &[disabled] {
+ pointer-events: none;
+ opacity: 40%;
+ }
+ }
.menu {
display: flex;
width: fit-content;
@@ -584,6 +886,118 @@
mask-position: center;
mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");
}
+ .pointer-events-none {
+ pointer-events: none;
+ }
+ .collapse {
+ &:not(td, tr, colgroup) {
+ visibility: visible;
+ }
+ position: relative;
+ display: grid;
+ overflow: hidden;
+ border-radius: var(--radius-box, 1rem);
+ width: 100%;
+ grid-template-rows: max-content 0fr;
+ transition: grid-template-rows 0.2s;
+ isolation: isolate;
+ > input:is([type="checkbox"], [type="radio"]) {
+ grid-column-start: 1;
+ grid-row-start: 1;
+ appearance: none;
+ opacity: 0;
+ z-index: 1;
+ width: 100%;
+ padding: 1rem;
+ padding-inline-end: 3rem;
+ min-height: 1lh;
+ transition: background-color 0.2s ease-out;
+ }
+ &:is([open], :focus:not(.collapse-close)), &:not(.collapse-close):has(> input:is([type="checkbox"], [type="radio"]):checked) {
+ grid-template-rows: max-content 1fr;
+ }
+ &:is([open], :focus:not(.collapse-close)) > .collapse-content, &:not(.collapse-close) > :where(input:is([type="checkbox"], [type="radio"]):checked ~ .collapse-content) {
+ visibility: visible;
+ min-height: fit-content;
+ }
+ &:focus-visible, &:has(> input:is([type="checkbox"], [type="radio"]):focus-visible) {
+ outline-color: var(--color-base-content);
+ outline-style: solid;
+ outline-width: 2px;
+ outline-offset: 2px;
+ }
+ &:not(.collapse-close) {
+ > input[type="checkbox"], > input[type="radio"]:not(:checked), > .collapse-title {
+ cursor: pointer;
+ }
+ }
+ &:focus:not(.collapse-close, .collapse[open]) > .collapse-title {
+ cursor: unset;
+ }
+ &:is([open], :focus:not(.collapse-close)) > :where(.collapse-content), &:not(.collapse-close) > :where(input:is([type="checkbox"], [type="radio"]):checked ~ .collapse-content) {
+ padding-bottom: 1rem;
+ transition: padding 0.2s ease-out, background-color 0.2s ease-out;
+ }
+ &:is([open]) {
+ &.collapse-arrow {
+ > .collapse-title:after {
+ transform: translateY(-50%) rotate(225deg);
+ }
+ }
+ }
+ &.collapse-open {
+ &.collapse-arrow {
+ > .collapse-title:after {
+ transform: translateY(-50%) rotate(225deg);
+ }
+ }
+ &.collapse-plus {
+ > .collapse-title:after {
+ content: "−";
+ }
+ }
+ }
+ &.collapse-arrow:focus:not(.collapse-close) {
+ > .collapse-title:after {
+ transform: translateY(-50%) rotate(225deg);
+ }
+ }
+ &.collapse-arrow:not(.collapse-close) {
+ > input:is([type="checkbox"], [type="radio"]):checked ~ .collapse-title:after {
+ transform: translateY(-50%) rotate(225deg);
+ }
+ }
+ &[open] {
+ &.collapse-plus {
+ > .collapse-title:after {
+ content: "−";
+ }
+ }
+ }
+ &.collapse-plus:focus:not(.collapse-close) {
+ > .collapse-title:after {
+ content: "−";
+ }
+ }
+ &.collapse-plus:not(.collapse-close) {
+ > input:is([type="checkbox"], [type="radio"]):checked ~ .collapse-title:after {
+ content: "−";
+ }
+ }
+ &:is(details) {
+ width: 100%;
+ & summary {
+ position: relative;
+ display: block;
+ &::-webkit-details-marker {
+ display: none;
+ }
+ }
+ }
+ &:is(details) summary {
+ outline: none;
+ }
+ }
.validator-hint {
visibility: hidden;
margin-top: calc(0.25rem * 2);
@@ -595,7 +1009,7 @@
--input-color: var(--color-success);
}
}
- &:user-invalid, &:has(:user-invalid), &[aria-invalid] {
+ &:user-invalid, &:has(:user-invalid), &[aria-invalid]:not([aria-invalid="false"]) {
&, &:focus, &:checked, &[aria-checked="true"], &:focus-within {
--input-color: var(--color-error);
}
@@ -606,6 +1020,248 @@
}
}
}
+ .collapse {
+ visibility: collapse;
+ }
+ .invisible {
+ visibility: hidden;
+ }
+ .visible {
+ visibility: visible;
+ }
+ .list {
+ display: flex;
+ flex-direction: column;
+ font-size: 0.875rem;
+ :where(.list-row) {
+ --list-grid-cols: minmax(0, auto) 1fr;
+ position: relative;
+ display: grid;
+ grid-auto-flow: column;
+ gap: calc(0.25rem * 4);
+ border-radius: var(--radius-box);
+ padding: calc(0.25rem * 4);
+ word-break: break-word;
+ grid-template-columns: var(--list-grid-cols);
+ &:has(.list-col-grow:nth-child(1)) {
+ --list-grid-cols: 1fr;
+ }
+ &:has(.list-col-grow:nth-child(2)) {
+ --list-grid-cols: minmax(0, auto) 1fr;
+ }
+ &:has(.list-col-grow:nth-child(3)) {
+ --list-grid-cols: minmax(0, auto) minmax(0, auto) 1fr;
+ }
+ &:has(.list-col-grow:nth-child(4)) {
+ --list-grid-cols: minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr;
+ }
+ &:has(.list-col-grow:nth-child(5)) {
+ --list-grid-cols: minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto) 1fr;
+ }
+ &:has(.list-col-grow:nth-child(6)) {
+ --list-grid-cols: minmax(0, auto) minmax(0, auto) minmax(0, auto) minmax(0, auto)
+ minmax(0, auto) 1fr;
+ }
+ :not(.list-col-wrap) {
+ grid-row-start: 1;
+ }
+ }
+ & > :not(:last-child) {
+ &.list-row, .list-row {
+ &:after {
+ content: "";
+ border-bottom: var(--border) solid;
+ inset-inline: var(--radius-box);
+ position: absolute;
+ bottom: calc(0.25rem * 0);
+ border-color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-base-content) 5%, transparent);
+ }
+ }
+ }
+ }
+ }
+ .toast {
+ position: fixed;
+ inset-inline-start: auto;
+ inset-inline-end: calc(0.25rem * 4);
+ top: auto;
+ bottom: calc(0.25rem * 4);
+ display: flex;
+ flex-direction: column;
+ gap: calc(0.25rem * 2);
+ background-color: transparent;
+ translate: var(--toast-x, 0) var(--toast-y, 0);
+ width: max-content;
+ max-width: calc(100vw - 2rem);
+ & > * {
+ animation: toast 0.25s ease-out;
+ }
+ &:where(.toast-start) {
+ inset-inline-start: calc(0.25rem * 4);
+ inset-inline-end: auto;
+ --toast-x: 0;
+ }
+ &:where(.toast-center) {
+ inset-inline-start: calc(1/2 * 100%);
+ inset-inline-end: calc(1/2 * 100%);
+ --toast-x: -50%;
+ }
+ &:where(.toast-end) {
+ inset-inline-start: auto;
+ inset-inline-end: calc(0.25rem * 4);
+ --toast-x: 0;
+ }
+ &:where(.toast-bottom) {
+ top: auto;
+ bottom: calc(0.25rem * 4);
+ --toast-y: 0;
+ }
+ &:where(.toast-middle) {
+ top: calc(1/2 * 100%);
+ bottom: auto;
+ --toast-y: -50%;
+ }
+ &:where(.toast-top) {
+ top: calc(0.25rem * 4);
+ bottom: auto;
+ --toast-y: 0;
+ }
+ }
+ .toggle {
+ border: var(--border) solid currentColor;
+ color: var(--input-color);
+ position: relative;
+ display: inline-grid;
+ flex-shrink: 0;
+ cursor: pointer;
+ appearance: none;
+ place-content: center;
+ vertical-align: middle;
+ webkit-user-select: none;
+ user-select: none;
+ grid-template-columns: 0fr 1fr 1fr;
+ --radius-selector-max: calc(
+ var(--radius-selector) + var(--radius-selector) + var(--radius-selector)
+ );
+ border-radius: calc( var(--radius-selector) + min(var(--toggle-p), var(--radius-selector-max)) + min(var(--border), var(--radius-selector-max)) );
+ padding: var(--toggle-p);
+ box-shadow: 0 1px currentColor inset;
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000) inset;
+ }
+ transition: color 0.3s, grid-template-columns 0.2s;
+ --input-color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ --input-color: color-mix(in oklab, var(--color-base-content) 50%, #0000);
+ }
+ --toggle-p: calc(var(--size) * 0.125);
+ --size: calc(var(--size-selector, 0.25rem) * 6);
+ width: calc((var(--size) * 2) - (var(--border) + var(--toggle-p)) * 2);
+ height: var(--size);
+ > * {
+ z-index: 1;
+ grid-column: span 1 / span 1;
+ grid-column-start: 2;
+ grid-row-start: 1;
+ height: 100%;
+ cursor: pointer;
+ appearance: none;
+ background-color: transparent;
+ padding: calc(0.25rem * 0.5);
+ transition: opacity 0.2s, rotate 0.4s;
+ border: none;
+ &:focus {
+ --tw-outline-style: none;
+ outline-style: none;
+ @media (forced-colors: active) {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+ }
+ &:nth-child(2) {
+ color: var(--color-base-100);
+ rotate: 0deg;
+ }
+ &:nth-child(3) {
+ color: var(--color-base-100);
+ opacity: 0%;
+ rotate: -15deg;
+ }
+ }
+ &:has(:checked) {
+ > :nth-child(2) {
+ opacity: 0%;
+ rotate: 15deg;
+ }
+ > :nth-child(3) {
+ opacity: 100%;
+ rotate: 0deg;
+ }
+ }
+ &:before {
+ position: relative;
+ inset-inline-start: calc(0.25rem * 0);
+ grid-column-start: 2;
+ grid-row-start: 1;
+ aspect-ratio: 1 / 1;
+ height: 100%;
+ border-radius: var(--radius-selector);
+ background-color: currentColor;
+ translate: 0;
+ --tw-content: "";
+ content: var(--tw-content);
+ transition: background-color 0.1s, translate 0.2s, inset-inline-start 0.2s;
+ box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px currentColor;
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000);
+ }
+ background-size: auto, calc(var(--noise) * 100%);
+ background-image: none, var(--fx-noise);
+ }
+ @media (forced-colors: active) {
+ &:before {
+ outline-style: var(--tw-outline-style);
+ outline-width: 1px;
+ outline-offset: calc(1px * -1);
+ }
+ }
+ @media print {
+ &:before {
+ outline: 0.25rem solid;
+ outline-offset: -1rem;
+ }
+ }
+ &:focus-visible, &:has(:focus-visible) {
+ outline: 2px solid currentColor;
+ outline-offset: 2px;
+ }
+ &:checked, &[aria-checked="true"], &:has(> input:checked) {
+ grid-template-columns: 1fr 1fr 0fr;
+ background-color: var(--color-base-100);
+ --input-color: var(--color-base-content);
+ &:before {
+ background-color: currentColor;
+ }
+ @starting-style {
+ &:before {
+ opacity: 0;
+ }
+ }
+ }
+ &:indeterminate {
+ grid-template-columns: 0.5fr 1fr 0.5fr;
+ }
+ &:disabled {
+ cursor: not-allowed;
+ opacity: 30%;
+ &:before {
+ background-color: transparent;
+ border: var(--border) solid currentColor;
+ }
+ }
+ }
.input {
cursor: text;
border: var(--border) solid #0000;
@@ -622,6 +1278,7 @@
width: clamp(3rem, 20rem, 100%);
height: var(--size);
font-size: 0.875rem;
+ touch-action: manipulation;
border-start-start-radius: var(--join-ss, var(--radius-field));
border-start-end-radius: var(--join-se, var(--radius-field));
border-end-start-radius: var(--join-es, var(--radius-field));
@@ -655,6 +1312,9 @@
}
}
}
+ :where(input[type="url"]), :where(input[type="email"]) {
+ direction: ltr;
+ }
:where(input[type="date"]) {
display: inline-block;
}
@@ -702,77 +1362,483 @@
inset-inline-end: 0.75em;
}
}
- .card {
+ .indicator {
position: relative;
- display: flex;
- flex-direction: column;
+ display: inline-flex;
+ width: max-content;
+ :where(.indicator-item) {
+ z-index: 1;
+ position: absolute;
+ white-space: nowrap;
+ top: var(--indicator-t, 0);
+ bottom: var(--indicator-b, auto);
+ left: var(--indicator-s, auto);
+ right: var(--indicator-e, 0);
+ translate: var(--indicator-x, 50%) var(--indicator-y, -50%);
+ }
+ }
+ .table {
+ font-size: 0.875rem;
+ position: relative;
+ width: 100%;
border-radius: var(--radius-box);
- outline-width: 2px;
- transition: outline 0.2s ease-in-out;
- outline: 0 solid #0000;
- outline-offset: 2px;
- &:focus {
- --tw-outline-style: none;
- outline-style: none;
- @media (forced-colors: active) {
- outline: 2px solid transparent;
- outline-offset: 2px;
+ text-align: left;
+ &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) {
+ text-align: right;
+ }
+ tr.row-hover {
+ &, &:nth-child(even) {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-base-200);
+ }
+ }
}
}
- &:focus-visible {
- outline-color: currentColor;
+ :where(th, td) {
+ padding-inline: calc(0.25rem * 4);
+ padding-block: calc(0.25rem * 3);
+ vertical-align: middle;
}
- :where(figure:first-child) {
- overflow: hidden;
- border-start-start-radius: inherit;
- border-start-end-radius: inherit;
- border-end-start-radius: unset;
- border-end-end-radius: unset;
+ :where(thead, tfoot) {
+ white-space: nowrap;
+ color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-base-content) 60%, transparent);
+ }
+ font-size: 0.875rem;
+ font-weight: 600;
}
- :where(figure:last-child) {
- overflow: hidden;
- border-start-start-radius: unset;
- border-start-end-radius: unset;
- border-end-start-radius: inherit;
- border-end-end-radius: inherit;
+ :where(tfoot) {
+ border-top: var(--border) solid var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-top: var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000);
+ }
}
- &:where(.card-border) {
- border: var(--border) solid var(--color-base-200);
+ :where(.table-pin-rows thead tr) {
+ position: sticky;
+ top: calc(0.25rem * 0);
+ z-index: 1;
+ background-color: var(--color-base-100);
}
- &:where(.card-dash) {
- border: var(--border) dashed var(--color-base-200);
+ :where(.table-pin-rows tfoot tr) {
+ position: sticky;
+ bottom: calc(0.25rem * 0);
+ z-index: 1;
+ background-color: var(--color-base-100);
}
- &.image-full {
+ :where(.table-pin-cols tr th) {
+ position: sticky;
+ right: calc(0.25rem * 0);
+ left: calc(0.25rem * 0);
+ background-color: var(--color-base-100);
+ }
+ :where(thead tr, tbody tr:not(:last-child)) {
+ border-bottom: var(--border) solid var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-bottom: var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000);
+ }
+ }
+ }
+ .steps {
+ display: inline-grid;
+ grid-auto-flow: column;
+ overflow: hidden;
+ overflow-x: auto;
+ counter-reset: step;
+ grid-auto-columns: 1fr;
+ .step {
display: grid;
- > * {
+ grid-template-columns: repeat(1, minmax(0, 1fr));
+ grid-template-columns: auto;
+ grid-template-rows: repeat(2, minmax(0, 1fr));
+ grid-template-rows: 40px 1fr;
+ place-items: center;
+ text-align: center;
+ min-width: 4rem;
+ --step-bg: var(--color-base-300);
+ --step-fg: var(--color-base-content);
+ &:before {
+ top: calc(0.25rem * 0);
grid-column-start: 1;
grid-row-start: 1;
+ height: calc(0.25rem * 2);
+ width: 100%;
+ border: 1px solid;
+ color: var(--step-bg);
+ background-color: var(--step-bg);
+ --tw-content: "";
+ content: var(--tw-content);
+ margin-inline-start: -100%;
}
- > .card-body {
+ > .step-icon, &:not(:has(.step-icon)):after {
+ content: counter(step);
+ counter-increment: step;
+ z-index: 1;
+ color: var(--step-fg);
+ background-color: var(--step-bg);
+ border: 1px solid var(--step-bg);
position: relative;
- color: var(--color-neutral-content);
+ grid-column-start: 1;
+ grid-row-start: 1;
+ display: grid;
+ height: calc(0.25rem * 8);
+ width: calc(0.25rem * 8);
+ place-items: center;
+ place-self: center;
+ border-radius: calc(infinity * 1px);
}
- :where(figure) {
- overflow: hidden;
- border-radius: inherit;
+ &:first-child:before {
+ content: none;
}
- > figure img {
- height: 100%;
- object-fit: cover;
- filter: brightness(28%);
+ &[data-content]:after {
+ content: attr(data-content);
}
}
- figure {
- display: flex;
- align-items: center;
- justify-content: center;
+ .step-neutral {
+ + .step-neutral:before, &:after, > .step-icon {
+ --step-bg: var(--color-neutral);
+ --step-fg: var(--color-neutral-content);
+ }
}
- &:has(> input:is(input[type="checkbox"], input[type="radio"])) {
- cursor: pointer;
- user-select: none;
+ .step-primary {
+ + .step-primary:before, &:after, > .step-icon {
+ --step-bg: var(--color-primary);
+ --step-fg: var(--color-primary-content);
+ }
}
- &:has(> :checked) {
- outline: 2px solid currentColor;
+ .step-secondary {
+ + .step-secondary:before, &:after, > .step-icon {
+ --step-bg: var(--color-secondary);
+ --step-fg: var(--color-secondary-content);
+ }
+ }
+ .step-accent {
+ + .step-accent:before, &:after, > .step-icon {
+ --step-bg: var(--color-accent);
+ --step-fg: var(--color-accent-content);
+ }
+ }
+ .step-info {
+ + .step-info:before, &:after, > .step-icon {
+ --step-bg: var(--color-info);
+ --step-fg: var(--color-info-content);
+ }
+ }
+ .step-success {
+ + .step-success:before, &:after, > .step-icon {
+ --step-bg: var(--color-success);
+ --step-fg: var(--color-success-content);
+ }
+ }
+ .step-warning {
+ + .step-warning:before, &:after, > .step-icon {
+ --step-bg: var(--color-warning);
+ --step-fg: var(--color-warning-content);
+ }
+ }
+ .step-error {
+ + .step-error:before, &:after, > .step-icon {
+ --step-bg: var(--color-error);
+ --step-fg: var(--color-error-content);
+ }
+ }
+ }
+ .range {
+ appearance: none;
+ webkit-appearance: none;
+ --range-thumb: var(--color-base-100);
+ --range-thumb-size: calc(var(--size-selector, 0.25rem) * 6);
+ --range-progress: currentColor;
+ --range-fill: 1;
+ --range-p: 0.25rem;
+ --range-bg: currentColor;
+ @supports (color: color-mix(in lab, red, red)) {
+ --range-bg: color-mix(in oklab, currentColor 10%, #0000);
+ }
+ cursor: pointer;
+ overflow: hidden;
+ background-color: transparent;
+ vertical-align: middle;
+ width: clamp(3rem, 20rem, 100%);
+ --radius-selector-max: calc(
+ var(--radius-selector) + var(--radius-selector) + var(--radius-selector)
+ );
+ border-radius: calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));
+ border: none;
+ height: var(--range-thumb-size);
+ [dir="rtl"] & {
+ --range-dir: -1;
+ }
+ &:focus {
+ outline: none;
+ }
+ &:focus-visible {
+ outline: 2px solid;
+ outline-offset: 2px;
+ }
+ &::-webkit-slider-runnable-track {
+ width: 100%;
+ background-color: var(--range-bg);
+ border-radius: var(--radius-selector);
+ height: calc(var(--range-thumb-size) * 0.5);
+ }
+ @media (forced-colors: active) {
+ &::-webkit-slider-runnable-track {
+ border: 1px solid;
+ }
+ }
+ @media (forced-colors: active) {
+ &::-moz-range-track {
+ border: 1px solid;
+ }
+ }
+ &::-webkit-slider-thumb {
+ position: relative;
+ box-sizing: border-box;
+ border-radius: calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));
+ background-color: currentColor;
+ height: var(--range-thumb-size);
+ width: var(--range-thumb-size);
+ border: var(--range-p) solid;
+ appearance: none;
+ webkit-appearance: none;
+ top: 50%;
+ color: var(--range-progress);
+ transform: translateY(-50%);
+ box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir, 1) * -100rem) - (var(--range-dir, 1) * var(--range-thumb-size) / 2)) 0 0 calc(100rem * var(--range-fill));
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir, 1) * -100rem) - (var(--range-dir, 1) * var(--range-thumb-size) / 2)) 0 0 calc(100rem * var(--range-fill));
+ }
+ }
+ &::-moz-range-track {
+ width: 100%;
+ background-color: var(--range-bg);
+ border-radius: var(--radius-selector);
+ height: calc(var(--range-thumb-size) * 0.5);
+ }
+ &::-moz-range-thumb {
+ position: relative;
+ box-sizing: border-box;
+ border-radius: calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));
+ background-color: currentColor;
+ height: var(--range-thumb-size);
+ width: var(--range-thumb-size);
+ border: var(--range-p) solid;
+ top: 50%;
+ color: var(--range-progress);
+ box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir, 1) * -100rem) - (var(--range-dir, 1) * var(--range-thumb-size) / 2)) 0 0 calc(100rem * var(--range-fill));
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir, 1) * -100rem) - (var(--range-dir, 1) * var(--range-thumb-size) / 2)) 0 0 calc(100rem * var(--range-fill));
+ }
+ }
+ &:disabled {
+ cursor: not-allowed;
+ opacity: 30%;
+ }
+ }
+ .range\! {
+ appearance: none !important;
+ webkit-appearance: none !important;
+ --range-thumb: var(--color-base-100) !important;
+ --range-thumb-size: calc(var(--size-selector, 0.25rem) * 6) !important;
+ --range-progress: currentColor !important;
+ --range-fill: 1 !important;
+ --range-p: 0.25rem !important;
+ --range-bg: currentColor !important;
+ @supports (color: color-mix(in lab, red, red)) {
+ --range-bg: color-mix(in oklab, currentColor 10%, #0000) !important;
+ }
+ cursor: pointer !important;
+ overflow: hidden !important;
+ background-color: transparent !important;
+ vertical-align: middle !important;
+ width: clamp(3rem, 20rem, 100%) !important;
+ --radius-selector-max: calc(
+ var(--radius-selector) + var(--radius-selector) + var(--radius-selector)
+ ) !important;
+ border-radius: calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max))) !important;
+ border: none !important;
+ height: var(--range-thumb-size) !important;
+ [dir="rtl"] & {
+ --range-dir: -1 !important;
+ }
+ &:focus {
+ outline: none !important;
+ }
+ &:focus-visible {
+ outline: 2px solid !important;
+ outline-offset: 2px !important;
+ }
+ &::-webkit-slider-runnable-track {
+ width: 100% !important;
+ background-color: var(--range-bg) !important;
+ border-radius: var(--radius-selector) !important;
+ height: calc(var(--range-thumb-size) * 0.5) !important;
+ }
+ @media (forced-colors: active) {
+ &::-webkit-slider-runnable-track {
+ border: 1px solid !important;
+ }
+ }
+ @media (forced-colors: active) {
+ &::-moz-range-track {
+ border: 1px solid !important;
+ }
+ }
+ &::-webkit-slider-thumb {
+ position: relative !important;
+ box-sizing: border-box !important;
+ border-radius: calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max))) !important;
+ background-color: currentColor !important;
+ height: var(--range-thumb-size) !important;
+ width: var(--range-thumb-size) !important;
+ border: var(--range-p) solid !important;
+ appearance: none !important;
+ webkit-appearance: none !important;
+ top: 50% !important;
+ color: var(--range-progress) !important;
+ transform: translateY(-50%) !important;
+ box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir, 1) * -100rem) - (var(--range-dir, 1) * var(--range-thumb-size) / 2)) 0 0 calc(100rem * var(--range-fill)) !important;
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir, 1) * -100rem) - (var(--range-dir, 1) * var(--range-thumb-size) / 2)) 0 0 calc(100rem * var(--range-fill)) !important;
+ }
+ }
+ &::-moz-range-track {
+ width: 100% !important;
+ background-color: var(--range-bg) !important;
+ border-radius: var(--radius-selector) !important;
+ height: calc(var(--range-thumb-size) * 0.5) !important;
+ }
+ &::-moz-range-thumb {
+ position: relative !important;
+ box-sizing: border-box !important;
+ border-radius: calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max))) !important;
+ background-color: currentColor !important;
+ height: var(--range-thumb-size) !important;
+ width: var(--range-thumb-size) !important;
+ border: var(--range-p) solid !important;
+ top: 50% !important;
+ color: var(--range-progress) !important;
+ box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px currentColor, 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir, 1) * -100rem) - (var(--range-dir, 1) * var(--range-thumb-size) / 2)) 0 0 calc(100rem * var(--range-fill)) !important;
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000), 0 0 0 2rem var(--range-thumb) inset, calc((var(--range-dir, 1) * -100rem) - (var(--range-dir, 1) * var(--range-thumb-size) / 2)) 0 0 calc(100rem * var(--range-fill)) !important;
+ }
+ }
+ &:disabled {
+ cursor: not-allowed !important;
+ opacity: 30% !important;
+ }
+ }
+ .countdown {
+ display: inline-flex;
+ &.countdown {
+ line-height: 1em;
+ }
+ & > * {
+ display: inline-block;
+ overflow-y: hidden;
+ height: 1em;
+ &:before {
+ position: relative;
+ content: "00\A 01\A 02\A 03\A 04\A 05\A 06\A 07\A 08\A 09\A 10\A 11\A 12\A 13\A 14\A 15\A 16\A 17\A 18\A 19\A 20\A 21\A 22\A 23\A 24\A 25\A 26\A 27\A 28\A 29\A 30\A 31\A 32\A 33\A 34\A 35\A 36\A 37\A 38\A 39\A 40\A 41\A 42\A 43\A 44\A 45\A 46\A 47\A 48\A 49\A 50\A 51\A 52\A 53\A 54\A 55\A 56\A 57\A 58\A 59\A 60\A 61\A 62\A 63\A 64\A 65\A 66\A 67\A 68\A 69\A 70\A 71\A 72\A 73\A 74\A 75\A 76\A 77\A 78\A 79\A 80\A 81\A 82\A 83\A 84\A 85\A 86\A 87\A 88\A 89\A 90\A 91\A 92\A 93\A 94\A 95\A 96\A 97\A 98\A 99\A";
+ white-space: pre;
+ top: calc(var(--value) * -1em);
+ text-align: center;
+ transition: all 1s cubic-bezier(1, 0, 0, 1);
+ }
+ }
+ }
+ .select {
+ border: var(--border) solid #0000;
+ position: relative;
+ display: inline-flex;
+ flex-shrink: 1;
+ appearance: none;
+ align-items: center;
+ gap: calc(0.25rem * 1.5);
+ background-color: var(--color-base-100);
+ padding-inline-start: calc(0.25rem * 4);
+ padding-inline-end: calc(0.25rem * 7);
+ vertical-align: middle;
+ width: clamp(3rem, 20rem, 100%);
+ height: var(--size);
+ font-size: 0.875rem;
+ touch-action: manipulation;
+ border-start-start-radius: var(--join-ss, var(--radius-field));
+ border-start-end-radius: var(--join-se, var(--radius-field));
+ border-end-start-radius: var(--join-es, var(--radius-field));
+ border-end-end-radius: var(--join-ee, var(--radius-field));
+ background-image: linear-gradient(45deg, #0000 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, #0000 50%);
+ background-position: calc(100% - 20px) calc(1px + 50%), calc(100% - 16.1px) calc(1px + 50%);
+ background-size: 4px 4px, 4px 4px;
+ background-repeat: no-repeat;
+ text-overflow: ellipsis;
+ box-shadow: 0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset;
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset;
+ }
+ border-color: var(--input-color);
+ --input-color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ --input-color: color-mix(in oklab, var(--color-base-content) 20%, #0000);
+ }
+ --size: calc(var(--size-field, 0.25rem) * 10);
+ [dir="rtl"] & {
+ background-position: calc(0% + 12px) calc(1px + 50%), calc(0% + 16px) calc(1px + 50%);
+ }
+ select {
+ margin-inline-start: calc(0.25rem * -4);
+ margin-inline-end: calc(0.25rem * -7);
+ width: calc(100% + 2.75rem);
+ appearance: none;
+ padding-inline-start: calc(0.25rem * 4);
+ padding-inline-end: calc(0.25rem * 7);
+ height: calc(100% - 2px);
+ background: inherit;
+ border-radius: inherit;
+ border-style: none;
+ &:focus, &:focus-within {
+ --tw-outline-style: none;
+ outline-style: none;
+ @media (forced-colors: active) {
+ outline: 2px solid transparent;
+ outline-offset: 2px;
+ }
+ }
+ &:not(:last-child) {
+ margin-inline-end: calc(0.25rem * -5.5);
+ background-image: none;
+ }
+ }
+ &:focus, &:focus-within {
+ --input-color: var(--color-base-content);
+ box-shadow: 0 1px var(--input-color);
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000);
+ }
+ outline: 2px solid var(--input-color);
+ outline-offset: 2px;
+ isolation: isolate;
+ z-index: 1;
+ }
+ &:has(> select[disabled]), &:is(:disabled, [disabled]) {
+ cursor: not-allowed;
+ border-color: var(--color-base-200);
+ background-color: var(--color-base-200);
+ color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-base-content) 40%, transparent);
+ }
+ &::placeholder {
+ color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-base-content) 20%, transparent);
+ }
+ }
+ }
+ &:has(> select[disabled]) > select[disabled] {
+ cursor: not-allowed;
}
}
.checkbox {
@@ -781,6 +1847,7 @@
border: var(--border) solid var(--input-color, color-mix(in oklab, var(--color-base-content) 20%, #0000));
}
position: relative;
+ display: inline-block;
flex-shrink: 0;
cursor: pointer;
appearance: none;
@@ -852,6 +1919,115 @@
opacity: 20%;
}
}
+ .radio {
+ position: relative;
+ display: inline-block;
+ flex-shrink: 0;
+ cursor: pointer;
+ appearance: none;
+ border-radius: calc(infinity * 1px);
+ padding: calc(0.25rem * 1);
+ vertical-align: middle;
+ border: var(--border) solid var(--input-color, currentColor);
+ @supports (color: color-mix(in lab, red, red)) {
+ border: var(--border) solid var(--input-color, color-mix(in srgb, currentColor 20%, #0000));
+ }
+ box-shadow: 0 1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset;
+ --size: calc(var(--size-selector, 0.25rem) * 6);
+ width: var(--size);
+ height: var(--size);
+ color: var(--input-color, currentColor);
+ &:before {
+ display: block;
+ width: 100%;
+ height: 100%;
+ border-radius: calc(infinity * 1px);
+ --tw-content: "";
+ content: var(--tw-content);
+ background-size: auto, calc(var(--noise) * 100%);
+ background-image: none, var(--fx-noise);
+ }
+ &:focus-visible {
+ outline: 2px solid currentColor;
+ }
+ &:checked, &[aria-checked="true"] {
+ animation: radio 0.2s ease-out;
+ border-color: currentColor;
+ background-color: var(--color-base-100);
+ &:before {
+ background-color: currentColor;
+ box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px oklch(0% 0 0 / calc(var(--depth) * 0.1));
+ }
+ @media (forced-colors: active) {
+ &:before {
+ outline-style: var(--tw-outline-style);
+ outline-width: 1px;
+ outline-offset: calc(1px * -1);
+ }
+ }
+ @media print {
+ &:before {
+ outline: 0.25rem solid;
+ outline-offset: -1rem;
+ }
+ }
+ }
+ &:disabled {
+ cursor: not-allowed;
+ opacity: 20%;
+ }
+ }
+ .stats {
+ position: relative;
+ display: inline-grid;
+ grid-auto-flow: column;
+ overflow-x: auto;
+ border-radius: var(--radius-box);
+ }
+ .progress {
+ position: relative;
+ height: calc(0.25rem * 2);
+ width: 100%;
+ appearance: none;
+ overflow: hidden;
+ border-radius: var(--radius-box);
+ background-color: currentColor;
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, currentColor 20%, transparent);
+ }
+ color: var(--color-base-content);
+ &:indeterminate {
+ background-image: repeating-linear-gradient( 90deg, currentColor -1%, currentColor 10%, #0000 10%, #0000 90% );
+ background-size: 200%;
+ background-position-x: 15%;
+ animation: progress 5s ease-in-out infinite;
+ @supports (-moz-appearance: none) {
+ &::-moz-progress-bar {
+ background-color: transparent;
+ background-image: repeating-linear-gradient( 90deg, currentColor -1%, currentColor 10%, #0000 10%, #0000 90% );
+ background-size: 200%;
+ background-position-x: 15%;
+ animation: progress 5s ease-in-out infinite;
+ }
+ }
+ }
+ @supports (-moz-appearance: none) {
+ &::-moz-progress-bar {
+ border-radius: var(--radius-box);
+ background-color: currentColor;
+ }
+ }
+ @supports (-webkit-appearance: none) {
+ &::-webkit-progress-bar {
+ border-radius: var(--radius-box);
+ background-color: transparent;
+ }
+ &::-webkit-progress-value {
+ border-radius: var(--radius-box);
+ background-color: currentColor;
+ }
+ }
+ }
.absolute {
position: absolute;
}
@@ -861,11 +2037,42 @@
.relative {
position: relative;
}
- .inset-y-0 {
- inset-block: calc(var(--spacing) * 0);
+ .static {
+ position: static;
}
- .top-0 {
- top: calc(var(--spacing) * 0);
+ .sticky {
+ position: sticky;
+ }
+ .inset-0 {
+ inset: calc(var(--spacing) * 0);
+ }
+ .dropdown-center {
+ --anchor-h: center;
+ :where(.dropdown-content) {
+ inset-inline-end: calc(1/2 * 100%);
+ translate: 50% 0;
+ [dir="rtl"] & {
+ translate: -50% 0;
+ }
+ }
+ &.dropdown-left {
+ --anchor-h: left;
+ --anchor-v: center;
+ .dropdown-content {
+ top: auto;
+ bottom: calc(1/2 * 100%);
+ translate: 0 50%;
+ }
+ }
+ &.dropdown-right {
+ --anchor-h: right;
+ --anchor-v: center;
+ .dropdown-content {
+ top: auto;
+ bottom: calc(1/2 * 100%);
+ translate: 0 50%;
+ }
+ }
}
.top-4 {
top: calc(var(--spacing) * 4);
@@ -876,9 +2083,6 @@
.right-4 {
right: calc(var(--spacing) * 4);
}
- .left-0 {
- left: calc(var(--spacing) * 0);
- }
.left-4 {
left: calc(var(--spacing) * 4);
}
@@ -895,6 +2099,7 @@
padding-inline-start: 0.75rem;
padding-inline-end: 0.75rem;
font-size: 0.875rem;
+ touch-action: manipulation;
border-color: var(--input-color);
box-shadow: 0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset;
@supports (color: color-mix(in lab, red, red)) {
@@ -947,24 +2152,254 @@
cursor: not-allowed;
}
}
+ .stack {
+ display: inline-grid;
+ grid-template-columns: 3px 4px 1fr 4px 3px;
+ grid-template-rows: 3px 4px 1fr 4px 3px;
+ & > * {
+ height: 100%;
+ width: 100%;
+ &:nth-child(n + 2) {
+ width: 100%;
+ opacity: 70%;
+ }
+ &:nth-child(2) {
+ z-index: 2;
+ opacity: 90%;
+ }
+ &:nth-child(1) {
+ z-index: 3;
+ width: 100%;
+ }
+ }
+ &, &.stack-bottom {
+ > * {
+ grid-column: 3 / 4;
+ grid-row: 3 / 6;
+ &:nth-child(2) {
+ grid-column: 2 / 5;
+ grid-row: 2 / 5;
+ }
+ &:nth-child(1) {
+ grid-column: 1 / 6;
+ grid-row: 1 / 4;
+ }
+ }
+ }
+ &.stack-top {
+ > * {
+ grid-column: 3 / 4;
+ grid-row: 1 / 4;
+ &:nth-child(2) {
+ grid-column: 2 / 5;
+ grid-row: 2 / 5;
+ }
+ &:nth-child(1) {
+ grid-column: 1 / 6;
+ grid-row: 3 / 6;
+ }
+ }
+ }
+ &.stack-start {
+ > * {
+ grid-column: 1 / 4;
+ grid-row: 3 / 4;
+ &:nth-child(2) {
+ grid-column: 2 / 5;
+ grid-row: 2 / 5;
+ }
+ &:nth-child(1) {
+ grid-column: 3 / 6;
+ grid-row: 1 / 6;
+ }
+ }
+ }
+ &.stack-end {
+ > * {
+ grid-column: 3 / 6;
+ grid-row: 3 / 4;
+ &:nth-child(2) {
+ grid-column: 2 / 5;
+ grid-row: 2 / 5;
+ }
+ &:nth-child(1) {
+ grid-column: 1 / 4;
+ grid-row: 1 / 6;
+ }
+ }
+ }
+ }
+ .modal-backdrop {
+ grid-column-start: 1;
+ grid-row-start: 1;
+ display: grid;
+ align-self: stretch;
+ justify-self: stretch;
+ color: transparent;
+ z-index: -1;
+ button {
+ cursor: pointer;
+ }
+ }
+ .z-10 {
+ z-index: 10;
+ }
+ .z-20 {
+ z-index: 20;
+ }
.z-40 {
z-index: 40;
}
.z-50 {
z-index: 50;
}
+ .hero {
+ display: grid;
+ width: 100%;
+ place-items: center;
+ background-size: cover;
+ background-position: center;
+ & > * {
+ grid-column-start: 1;
+ grid-row-start: 1;
+ }
+ }
+ .stat-value {
+ grid-column-start: 1;
+ white-space: nowrap;
+ font-size: 2rem;
+ font-weight: 800;
+ }
+ .stat-desc {
+ grid-column-start: 1;
+ white-space: nowrap;
+ color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-base-content) 60%, transparent);
+ }
+ font-size: 0.75rem;
+ }
+ .stat-title {
+ grid-column-start: 1;
+ white-space: nowrap;
+ color: var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-base-content) 60%, transparent);
+ }
+ font-size: 0.75rem;
+ }
+ .container {
+ width: 100%;
+ @media (width >= 40rem) {
+ max-width: 40rem;
+ }
+ @media (width >= 48rem) {
+ max-width: 48rem;
+ }
+ @media (width >= 64rem) {
+ max-width: 64rem;
+ }
+ @media (width >= 80rem) {
+ max-width: 80rem;
+ }
+ @media (width >= 96rem) {
+ max-width: 96rem;
+ }
+ }
.m-4 {
margin: calc(var(--spacing) * 4);
}
.m-6 {
margin: calc(var(--spacing) * 6);
}
+ .filter {
+ display: flex;
+ flex-wrap: wrap;
+ input[type="radio"] {
+ width: auto;
+ }
+ input {
+ overflow: hidden;
+ opacity: 100%;
+ scale: 1;
+ transition: margin 0.1s, opacity 0.3s, padding 0.3s, border-width 0.1s;
+ &:not(:last-child) {
+ margin-inline-end: calc(0.25rem * 1);
+ }
+ &.filter-reset {
+ aspect-ratio: 1 / 1;
+ &::after {
+ content: "×";
+ }
+ }
+ }
+ &:not(:has(input:checked:not(.filter-reset))) {
+ .filter-reset, input[type="reset"] {
+ scale: 0;
+ border-width: 0;
+ margin-inline: calc(0.25rem * 0);
+ width: calc(0.25rem * 0);
+ padding-inline: calc(0.25rem * 0);
+ opacity: 0%;
+ }
+ }
+ &:has(input:checked:not(.filter-reset)) {
+ input:not(:checked, .filter-reset, input[type="reset"]) {
+ scale: 0;
+ border-width: 0;
+ margin-inline: calc(0.25rem * 0);
+ width: calc(0.25rem * 0);
+ padding-inline: calc(0.25rem * 0);
+ opacity: 0%;
+ }
+ }
+ }
.mx-auto {
margin-inline: auto;
}
+ .my-4 {
+ margin-block: calc(var(--spacing) * 4);
+ }
.my-5 {
margin-block: calc(var(--spacing) * 5);
}
+ .label {
+ display: inline-flex;
+ align-items: center;
+ gap: calc(0.25rem * 1.5);
+ white-space: nowrap;
+ color: currentColor;
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, currentColor 60%, transparent);
+ }
+ &:has(input) {
+ cursor: pointer;
+ }
+ &:is(.input > *, .select > *) {
+ display: flex;
+ height: calc(100% - 0.5rem);
+ align-items: center;
+ padding-inline: calc(0.25rem * 3);
+ white-space: nowrap;
+ font-size: inherit;
+ &:first-child {
+ margin-inline-start: calc(0.25rem * -3);
+ margin-inline-end: calc(0.25rem * 3);
+ border-inline-end: var(--border) solid currentColor;
+ @supports (color: color-mix(in lab, red, red)) {
+ border-inline-end: var(--border) solid color-mix(in oklab, currentColor 10%, #0000);
+ }
+ }
+ &:last-child {
+ margin-inline-start: calc(0.25rem * 3);
+ margin-inline-end: calc(0.25rem * -3);
+ border-inline-start: var(--border) solid currentColor;
+ @supports (color: color-mix(in lab, red, red)) {
+ border-inline-start: var(--border) solid color-mix(in oklab, currentColor 10%, #0000);
+ }
+ }
+ }
+ }
.mt-1 {
margin-top: calc(var(--spacing) * 1);
}
@@ -983,12 +2418,27 @@
.mr-3 {
margin-right: calc(var(--spacing) * 3);
}
+ .mb-2 {
+ margin-bottom: calc(var(--spacing) * 2);
+ }
.mb-4 {
margin-bottom: calc(var(--spacing) * 4);
}
.mb-6 {
margin-bottom: calc(var(--spacing) * 6);
}
+ .mb-8 {
+ margin-bottom: calc(var(--spacing) * 8);
+ }
+ .ml-2 {
+ margin-left: calc(var(--spacing) * 2);
+ }
+ .carousel-item {
+ box-sizing: content-box;
+ display: flex;
+ flex: none;
+ scroll-snap-align: start;
+ }
.box-content {
box-sizing: content-box;
}
@@ -1018,27 +2468,274 @@
box-shadow: 0 2px 3px -1px color-mix(in oklab, currentColor calc(var(--depth) * 100%), #0000);
}
}
- .card-body {
- display: flex;
- flex: auto;
- flex-direction: column;
- gap: calc(0.25rem * 2);
- padding: var(--card-p, 1.5rem);
- font-size: var(--card-fs, 0.875rem);
- :where(p) {
- flex-grow: 1;
+ .status\! {
+ display: inline-block !important;
+ aspect-ratio: 1 / 1 !important;
+ width: calc(0.25rem * 2) !important;
+ height: calc(0.25rem * 2) !important;
+ border-radius: var(--radius-selector) !important;
+ background-color: var(--color-base-content) !important;
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-base-content) 20%, transparent) !important;
+ }
+ background-position: center !important;
+ background-repeat: no-repeat !important;
+ vertical-align: middle !important;
+ color: color-mix(in srgb, #000 30%, transparent) !important;
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in srgb, #000 30%, transparent) !important;
+ @supports (color: color-mix(in lab, red, red)) {
+ color: color-mix(in oklab, var(--color-black) 30%, transparent) !important;
+ }
+ }
+ background-image: radial-gradient( circle at 35% 30%, oklch(1 0 0 / calc(var(--depth) * 0.5)), #0000 ) !important;
+ box-shadow: 0 2px 3px -1px currentColor !important;
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 2px 3px -1px color-mix(in oklab, currentColor calc(var(--depth) * 100%), #0000) !important;
}
}
- .card-title {
- display: flex;
+ .badge {
+ display: inline-flex;
align-items: center;
+ justify-content: center;
gap: calc(0.25rem * 2);
- font-size: var(--cardtitle-fs, 1.125rem);
- font-weight: 600;
+ border-radius: var(--radius-selector);
+ vertical-align: middle;
+ color: var(--badge-fg);
+ border: var(--border) solid var(--badge-color, var(--color-base-200));
+ font-size: 0.875rem;
+ width: fit-content;
+ padding-inline: calc(0.25rem * 3 - var(--border));
+ background-size: auto, calc(var(--noise) * 100%);
+ background-image: none, var(--fx-noise);
+ background-color: var(--badge-bg);
+ --badge-bg: var(--badge-color, var(--color-base-100));
+ --badge-fg: var(--color-base-content);
+ --size: calc(var(--size-selector, 0.25rem) * 6);
+ height: var(--size);
+ }
+ .kbd {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: var(--radius-field);
+ background-color: var(--color-base-200);
+ vertical-align: middle;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ border: var(--border) solid var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ border: var(--border) solid color-mix(in srgb, var(--color-base-content) 20%, #0000);
+ }
+ border-bottom: calc(var(--border) + 1px) solid var(--color-base-content);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-bottom: calc(var(--border) + 1px) solid color-mix(in srgb, var(--color-base-content) 20%, #0000);
+ }
+ --size: calc(var(--size-selector, 0.25rem) * 6);
+ font-size: 0.875rem;
+ height: var(--size);
+ min-width: var(--size);
+ }
+ .tabs {
+ display: flex;
+ flex-wrap: wrap;
+ --tabs-height: auto;
+ --tabs-direction: row;
+ --tab-height: calc(var(--size-field, 0.25rem) * 10);
+ height: var(--tabs-height);
+ flex-direction: var(--tabs-direction);
+ }
+ .navbar {
+ display: flex;
+ width: 100%;
+ align-items: center;
+ padding: 0.5rem;
+ min-height: 4rem;
+ }
+ .footer {
+ display: grid;
+ width: 100%;
+ grid-auto-flow: row;
+ place-items: start;
+ column-gap: calc(0.25rem * 4);
+ row-gap: calc(0.25rem * 10);
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ & > * {
+ display: grid;
+ place-items: start;
+ gap: calc(0.25rem * 2);
+ }
+ &.footer-center {
+ grid-auto-flow: column dense;
+ place-items: center;
+ text-align: center;
+ & > * {
+ place-items: center;
+ }
+ }
+ }
+ .stat {
+ display: inline-grid;
+ width: 100%;
+ column-gap: calc(0.25rem * 4);
+ padding-inline: calc(0.25rem * 6);
+ padding-block: calc(0.25rem * 4);
+ grid-template-columns: repeat(1, 1fr);
+ &:not(:last-child) {
+ border-inline-end: var(--border) dashed currentColor;
+ @supports (color: color-mix(in lab, red, red)) {
+ border-inline-end: var(--border) dashed color-mix(in oklab, currentColor 10%, #0000);
+ }
+ border-block-end: none;
+ }
+ }
+ .carousel {
+ display: inline-flex;
+ overflow-x: scroll;
+ scroll-snap-type: x mandatory;
+ scroll-behavior: smooth;
+ scrollbar-width: none;
+ &::-webkit-scrollbar {
+ display: none;
+ }
+ }
+ .alert {
+ display: grid;
+ align-items: center;
+ gap: calc(0.25rem * 4);
+ border-radius: var(--radius-box);
+ padding-inline: calc(0.25rem * 4);
+ padding-block: calc(0.25rem * 3);
+ color: var(--color-base-content);
+ background-color: var(--alert-color, var(--color-base-200));
+ justify-content: start;
+ justify-items: start;
+ grid-auto-flow: column;
+ grid-template-columns: auto;
+ text-align: start;
+ border: var(--border) solid var(--color-base-200);
+ font-size: 0.875rem;
+ line-height: 1.25rem;
+ background-size: auto, calc(var(--noise) * 100%);
+ background-image: none, var(--fx-noise);
+ box-shadow: 0 3px 0 -2px oklch(100% 0 0 / calc(var(--depth) * 0.08)) inset, 0 1px #000, 0 4px 3px -2px oklch(0% 0 0 / calc(var(--depth) * 0.08));
+ @supports (color: color-mix(in lab, red, red)) {
+ box-shadow: 0 3px 0 -2px oklch(100% 0 0 / calc(var(--depth) * 0.08)) inset, 0 1px color-mix( in oklab, color-mix(in oklab, #000 20%, var(--alert-color, var(--color-base-200))) calc(var(--depth) * 20%), #0000 ), 0 4px 3px -2px oklch(0% 0 0 / calc(var(--depth) * 0.08));
+ }
+ &:has(:nth-child(2)) {
+ grid-template-columns: auto minmax(auto, 1fr);
+ }
+ &.alert-outline {
+ background-color: transparent;
+ color: var(--alert-color);
+ box-shadow: none;
+ background-image: none;
+ }
+ &.alert-dash {
+ background-color: transparent;
+ color: var(--alert-color);
+ border-style: dashed;
+ box-shadow: none;
+ background-image: none;
+ }
+ &.alert-soft {
+ color: var(--alert-color, var(--color-base-content));
+ background: var(--alert-color, var(--color-base-content));
+ @supports (color: color-mix(in lab, red, red)) {
+ background: color-mix( in oklab, var(--alert-color, var(--color-base-content)) 8%, var(--color-base-100) );
+ }
+ border-color: var(--alert-color, var(--color-base-content));
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix( in oklab, var(--alert-color, var(--color-base-content)) 10%, var(--color-base-100) );
+ }
+ box-shadow: none;
+ background-image: none;
+ }
+ }
+ .fieldset {
+ display: grid;
+ gap: calc(0.25rem * 1.5);
+ padding-block: calc(0.25rem * 1);
+ font-size: 0.75rem;
+ grid-template-columns: 1fr;
+ grid-auto-rows: max-content;
+ }
+ .join {
+ display: inline-flex;
+ align-items: stretch;
+ --join-ss: 0;
+ --join-se: 0;
+ --join-es: 0;
+ --join-ee: 0;
+ :where(.join-item) {
+ border-start-start-radius: var(--join-ss, 0);
+ border-start-end-radius: var(--join-se, 0);
+ border-end-start-radius: var(--join-es, 0);
+ border-end-end-radius: var(--join-ee, 0);
+ * {
+ --join-ss: var(--radius-field);
+ --join-se: var(--radius-field);
+ --join-es: var(--radius-field);
+ --join-ee: var(--radius-field);
+ }
+ }
+ > .join-item:where(:first-child) {
+ --join-ss: var(--radius-field);
+ --join-se: 0;
+ --join-es: var(--radius-field);
+ --join-ee: 0;
+ }
+ :first-child:not(:last-child) {
+ :where(.join-item) {
+ --join-ss: var(--radius-field);
+ --join-se: 0;
+ --join-es: var(--radius-field);
+ --join-ee: 0;
+ }
+ }
+ > .join-item:where(:last-child) {
+ --join-ss: 0;
+ --join-se: var(--radius-field);
+ --join-es: 0;
+ --join-ee: var(--radius-field);
+ }
+ :last-child:not(:first-child) {
+ :where(.join-item) {
+ --join-ss: 0;
+ --join-se: var(--radius-field);
+ --join-es: 0;
+ --join-ee: var(--radius-field);
+ }
+ }
+ > .join-item:where(:only-child) {
+ --join-ss: var(--radius-field);
+ --join-se: var(--radius-field);
+ --join-es: var(--radius-field);
+ --join-ee: var(--radius-field);
+ }
+ :only-child {
+ :where(.join-item) {
+ --join-ss: var(--radius-field);
+ --join-se: var(--radius-field);
+ --join-es: var(--radius-field);
+ --join-ee: var(--radius-field);
+ }
+ }
+ }
+ .mask {
+ display: inline-block;
+ vertical-align: middle;
+ mask-size: contain;
+ mask-repeat: no-repeat;
+ mask-position: center;
}
.block {
display: block;
}
+ .contents {
+ display: contents;
+ }
.flex {
display: flex;
}
@@ -1048,18 +2745,57 @@
.hidden {
display: none;
}
+ .inline {
+ display: inline;
+ }
.inline-block {
display: inline-block;
}
+ .inline-flex {
+ display: inline-flex;
+ }
+ .inline-grid {
+ display: inline-grid;
+ }
+ .inline-table {
+ display: inline-table;
+ }
+ .list-item {
+ display: list-item;
+ }
+ .table {
+ display: table;
+ }
+ .table-caption {
+ display: table-caption;
+ }
+ .table-cell {
+ display: table-cell;
+ }
+ .table-column {
+ display: table-column;
+ }
+ .table-column-group {
+ display: table-column-group;
+ }
+ .table-footer-group {
+ display: table-footer-group;
+ }
+ .table-header-group {
+ display: table-header-group;
+ }
+ .table-row {
+ display: table-row;
+ }
+ .table-row-group {
+ display: table-row-group;
+ }
.btn-circle {
border-radius: calc(infinity * 1px);
padding-inline: calc(0.25rem * 0);
width: var(--size);
height: var(--size);
}
- .h-3 {
- height: calc(var(--spacing) * 3);
- }
.h-5 {
height: calc(var(--spacing) * 5);
}
@@ -1072,12 +2808,18 @@
.h-16 {
height: calc(var(--spacing) * 16);
}
+ .h-20 {
+ height: calc(var(--spacing) * 20);
+ }
.h-48 {
height: calc(var(--spacing) * 48);
}
.h-\[1em\] {
height: 1em;
}
+ .h-auto {
+ height: auto;
+ }
.h-full {
height: 100%;
}
@@ -1096,9 +2838,6 @@
.w-0 {
width: calc(var(--spacing) * 0);
}
- .w-3 {
- width: calc(var(--spacing) * 3);
- }
.w-5 {
width: calc(var(--spacing) * 5);
}
@@ -1108,17 +2847,14 @@
.w-9 {
width: calc(var(--spacing) * 9);
}
- .w-13 {
- width: calc(var(--spacing) * 13);
- }
.w-14 {
width: calc(var(--spacing) * 14);
}
.w-16 {
width: calc(var(--spacing) * 16);
}
- .w-48 {
- width: calc(var(--spacing) * 48);
+ .w-20 {
+ width: calc(var(--spacing) * 20);
}
.w-64 {
width: calc(var(--spacing) * 64);
@@ -1129,12 +2865,24 @@
.w-full {
width: 100%;
}
+ .max-w-screen-lg {
+ max-width: var(--breakpoint-lg);
+ }
.flex-1 {
flex: 1;
}
.flex-none {
flex: none;
}
+ .flex-shrink {
+ flex-shrink: 1;
+ }
+ .flex-grow {
+ flex-grow: 1;
+ }
+ .border-collapse {
+ border-collapse: collapse;
+ }
.-translate-x-full {
--tw-translate-x: -100%;
translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -1142,6 +2890,19 @@
.transform {
transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
}
+ .skeleton {
+ border-radius: var(--radius-box);
+ background-color: var(--color-base-300);
+ @media (prefers-reduced-motion: reduce) {
+ transition-duration: 15s;
+ }
+ will-change: background-position;
+ animation: skeleton 1.8s ease-in-out infinite;
+ background-image: linear-gradient( 105deg, #0000 0% 40%, var(--color-base-100) 50%, #0000 60% 100% );
+ background-size: 200% auto;
+ background-repeat: no-repeat;
+ background-position-x: -50%;
+ }
.link {
cursor: pointer;
text-decoration-line: underline;
@@ -1161,36 +2922,75 @@
.cursor-pointer {
cursor: pointer;
}
+ .resize {
+ resize: both;
+ }
+ .stats-horizontal {
+ grid-auto-flow: column;
+ overflow-x: auto;
+ .stat:not(:last-child) {
+ border-inline-end: var(--border) dashed currentColor;
+ @supports (color: color-mix(in lab, red, red)) {
+ border-inline-end: var(--border) dashed color-mix(in oklab, currentColor 10%, #0000);
+ }
+ border-block-end: none;
+ }
+ }
+ .stats-vertical {
+ grid-auto-flow: row;
+ overflow-y: auto;
+ .stat:not(:last-child) {
+ border-inline-end: none;
+ border-block-end: var(--border) dashed currentColor;
+ @supports (color: color-mix(in lab, red, red)) {
+ border-block-end: var(--border) dashed color-mix(in oklab, currentColor 10%, #0000);
+ }
+ }
+ }
.grid-cols-1 {
grid-template-columns: repeat(1, minmax(0, 1fr));
}
+ .grid-cols-2 {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
.flex-col {
flex-direction: column;
}
+ .flex-wrap {
+ flex-wrap: wrap;
+ }
+ .place-items-center {
+ place-items: center;
+ }
.items-center {
align-items: center;
}
+ .items-start {
+ align-items: flex-start;
+ }
.justify-between {
justify-content: space-between;
}
.justify-center {
justify-content: center;
}
+ .justify-start {
+ justify-content: flex-start;
+ }
+ .justify-items-center {
+ justify-items: center;
+ }
.gap-1 {
gap: calc(var(--spacing) * 1);
}
.gap-2 {
gap: calc(var(--spacing) * 2);
}
- .gap-6 {
- gap: calc(var(--spacing) * 6);
+ .gap-4 {
+ gap: calc(var(--spacing) * 4);
}
- .space-y-1 {
- :where(& > :not(:last-child)) {
- --tw-space-y-reverse: 0;
- margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));
- margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)));
- }
+ .gap-8 {
+ gap: calc(var(--spacing) * 8);
}
.space-y-2 {
:where(& > :not(:last-child)) {
@@ -1199,6 +2999,13 @@
margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));
}
}
+ .space-y-4 {
+ :where(& > :not(:last-child)) {
+ --tw-space-y-reverse: 0;
+ margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));
+ margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));
+ }
+ }
.space-y-6 {
:where(& > :not(:last-child)) {
--tw-space-y-reverse: 0;
@@ -1206,25 +3013,31 @@
margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));
}
}
- .space-x-4 {
+ .space-x-2 {
:where(& > :not(:last-child)) {
--tw-space-x-reverse: 0;
- margin-inline-start: calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));
- margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));
+ margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)));
}
}
- .space-x-6 {
+ .space-x-8 {
:where(& > :not(:last-child)) {
--tw-space-x-reverse: 0;
- margin-inline-start: calc(calc(var(--spacing) * 6) * var(--tw-space-x-reverse));
- margin-inline-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-x-reverse)));
+ margin-inline-start: calc(calc(var(--spacing) * 8) * var(--tw-space-x-reverse));
+ margin-inline-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-x-reverse)));
}
}
+ .self-end {
+ align-self: flex-end;
+ }
+ .self-start {
+ align-self: flex-start;
+ }
.overflow-hidden {
overflow: hidden;
}
- .overflow-y-auto {
- overflow-y: auto;
+ .rounded {
+ border-radius: 0.25rem;
}
.rounded-full {
border-radius: calc(infinity * 1px);
@@ -1232,9 +3045,6 @@
.rounded-lg {
border-radius: var(--radius-lg);
}
- .rounded-md {
- border-radius: var(--radius-md);
- }
.border {
border-style: var(--tw-border-style);
border-width: 1px;
@@ -1242,15 +3052,35 @@
.border-gray-200 {
border-color: var(--color-gray-200);
}
+ .glass {
+ border: none;
+ backdrop-filter: blur(var(--glass-blur, 40px));
+ background-color: #0000;
+ background-image: linear-gradient( 135deg, oklch(100% 0 0 / var(--glass-opacity, 30%)) 0%, oklch(0% 0 0 / 0%) 100% ), linear-gradient( var(--glass-reflect-degree, 100deg), oklch(100% 0 0 / var(--glass-reflect-opacity, 5%)) 25%, oklch(0% 0 0 / 0%) 25% );
+ box-shadow: 0 0 0 1px oklch(100% 0 0 / var(--glass-border-opacity, 20%)) inset, 0 0 0 2px oklch(0% 0 0 / 5%);
+ text-shadow: 0 1px oklch(0% 0 0 / var(--glass-text-shadow-opacity, 5%));
+ }
.bg-base-100 {
background-color: var(--color-base-100);
}
.bg-base-200 {
background-color: var(--color-base-200);
}
+ .bg-black {
+ background-color: var(--color-black);
+ }
+ .bg-gray-50 {
+ background-color: var(--color-gray-50);
+ }
.bg-gray-100 {
background-color: var(--color-gray-100);
}
+ .bg-gray-200 {
+ background-color: var(--color-gray-200);
+ }
+ .bg-green-50 {
+ background-color: var(--color-green-50);
+ }
.bg-neutral {
background-color: var(--color-neutral);
}
@@ -1263,6 +3093,15 @@
.loading-spinner {
mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");
}
+ .bg-cover {
+ background-size: cover;
+ }
+ .bg-center {
+ background-position: center;
+ }
+ .mask-repeat {
+ mask-repeat: repeat;
+ }
.object-cover {
object-fit: cover;
}
@@ -1275,8 +3114,8 @@
.p-6 {
padding: calc(var(--spacing) * 6);
}
- .px-2 {
- padding-inline: calc(var(--spacing) * 2);
+ .p-10 {
+ padding: calc(var(--spacing) * 10);
}
.px-4 {
padding-inline: calc(var(--spacing) * 4);
@@ -1284,6 +3123,9 @@
.px-6 {
padding-inline: calc(var(--spacing) * 6);
}
+ .px-8 {
+ padding-inline: calc(var(--spacing) * 8);
+ }
.py-1 {
padding-block: calc(var(--spacing) * 1);
}
@@ -1299,21 +3141,20 @@
.pr-3 {
padding-right: calc(var(--spacing) * 3);
}
- .pr-10 {
- padding-right: calc(var(--spacing) * 10);
- }
- .pl-4 {
- padding-left: calc(var(--spacing) * 4);
- }
- .pl-10 {
- padding-left: calc(var(--spacing) * 10);
- }
.text-center {
text-align: center;
}
.text-justify {
text-align: justify;
}
+ .text-left {
+ text-align: left;
+ }
+ .font-display {
+ font-family: var(--font-display);
+ font-feature-settings: var(--font-display--font-feature-settings);
+ font-variation-settings: var(--font-display--font-variation-settings);
+ }
.text-2xl {
font-size: var(--text-2xl);
line-height: var(--tw-leading, var(--text-2xl--line-height));
@@ -1330,6 +3171,10 @@
font-size: var(--text-sm);
line-height: var(--tw-leading, var(--text-sm--line-height));
}
+ .text-xl {
+ font-size: var(--text-xl);
+ line-height: var(--tw-leading, var(--text-xl--line-height));
+ }
.text-xs {
font-size: var(--text-xs);
line-height: var(--tw-leading, var(--text-xs--line-height));
@@ -1346,6 +3191,10 @@
--tw-font-weight: var(--font-weight-bold);
font-weight: var(--font-weight-bold);
}
+ .font-medium {
+ --tw-font-weight: var(--font-weight-medium);
+ font-weight: var(--font-weight-medium);
+ }
.font-semibold {
--tw-font-weight: var(--font-weight-semibold);
font-weight: var(--font-weight-semibold);
@@ -1354,6 +3203,16 @@
--tw-tracking: var(--tracking-tight);
letter-spacing: var(--tracking-tight);
}
+ .text-wrap {
+ text-wrap: wrap;
+ }
+ .break-all {
+ word-break: break-all;
+ }
+ .checkbox-primary {
+ color: var(--color-primary-content);
+ --input-color: var(--color-primary);
+ }
.checkbox-secondary {
color: var(--color-secondary-content);
--input-color: var(--color-secondary);
@@ -1361,33 +3220,83 @@
.text-base-content {
color: var(--color-base-content);
}
- .text-black {
- color: var(--color-black);
- }
.text-gray-400 {
color: var(--color-gray-400);
}
.text-gray-500 {
color: var(--color-gray-500);
}
+ .text-gray-600 {
+ color: var(--color-gray-600);
+ }
.text-gray-700 {
color: var(--color-gray-700);
}
+ .text-gray-800 {
+ color: var(--color-gray-800);
+ }
+ .text-gray-900 {
+ color: var(--color-gray-900);
+ }
+ .text-green-500 {
+ color: var(--color-green-500);
+ }
+ .text-green-600 {
+ color: var(--color-green-600);
+ }
.text-info {
color: var(--color-info);
}
.text-neutral-content {
color: var(--color-neutral-content);
}
+ .text-red-500 {
+ color: var(--color-red-500);
+ }
+ .text-red-600 {
+ color: var(--color-red-600);
+ }
.text-secondary {
color: var(--color-secondary);
}
+ .text-success {
+ color: var(--color-success);
+ }
.text-white {
color: var(--color-white);
}
+ .capitalize {
+ text-transform: capitalize;
+ }
+ .lowercase {
+ text-transform: lowercase;
+ }
.uppercase {
text-transform: uppercase;
}
+ .italic {
+ font-style: italic;
+ }
+ .line-through {
+ text-decoration-line: line-through;
+ }
+ .overline {
+ text-decoration-line: overline;
+ }
+ .underline {
+ text-decoration-line: underline;
+ }
+ .antialiased {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ }
+ .subpixel-antialiased {
+ -webkit-font-smoothing: auto;
+ -moz-osx-font-smoothing: auto;
+ }
+ .opacity-20 {
+ opacity: 20%;
+ }
.opacity-50 {
opacity: 50%;
}
@@ -1410,10 +3319,14 @@
--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
- .shadow-xl {
- --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
+ .ring {
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
+ .outline {
+ outline-style: var(--tw-outline-style);
+ outline-width: 1px;
+ }
.btn-ghost {
&:not(.btn-active, :hover, :active:focus, :focus-visible) {
--btn-shadow: "";
@@ -1425,20 +3338,75 @@
--btn-fg: currentColor;
}
}
+ @media (hover: none) {
+ &:hover:not(.btn-active, :active, :focus-visible, :disabled, [disabled], .btn-disabled) {
+ --btn-shadow: "";
+ --btn-bg: #0000;
+ --btn-border: #0000;
+ --btn-noise: none;
+ --btn-fg: currentColor;
+ }
+ }
+ }
+ .blur {
+ --tw-blur: blur(8px);
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
+ }
+ .drop-shadow {
+ --tw-drop-shadow-size: drop-shadow(0 1px 2px var(--tw-drop-shadow-color, rgb(0 0 0 / 0.1))) drop-shadow(0 1px 1px var(--tw-drop-shadow-color, rgb(0 0 0 / 0.06)));
+ --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow( 0 1px 1px rgb(0 0 0 / 0.06));
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
+ }
+ .grayscale {
+ --tw-grayscale: grayscale(100%);
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
+ }
+ .invert {
+ --tw-invert: invert(100%);
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
+ }
+ .sepia {
+ --tw-sepia: sepia(100%);
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
+ }
+ .filter {
+ filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
+ }
+ .backdrop-filter {
+ -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
+ backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
+ }
+ .transition {
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events;
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
}
.transition-all {
transition-property: all;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
+ .transition-colors {
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
+ }
.duration-300 {
--tw-duration: 300ms;
transition-duration: 300ms;
}
+ .ease-in {
+ --tw-ease: var(--ease-in);
+ transition-timing-function: var(--ease-in);
+ }
.ease-in-out {
--tw-ease: var(--ease-in-out);
transition-timing-function: var(--ease-in-out);
}
+ .ease-out {
+ --tw-ease: var(--ease-out);
+ transition-timing-function: var(--ease-out);
+ }
.btn-outline {
&:not( .btn-active, :hover, :active:focus, :focus-visible, :disabled, [disabled], .btn-disabled, :checked ) {
--btn-shadow: "";
@@ -1470,31 +3438,31 @@
--btn-color: var(--color-primary);
--btn-fg: var(--color-primary-content);
}
- .hover\:bg-blue-600 {
+ .select-all {
+ -webkit-user-select: all;
+ user-select: all;
+ }
+ .input-error {
+ &, &:focus, &:focus-within {
+ --input-color: var(--color-error);
+ }
+ }
+ .input-success {
+ &, &:focus, &:focus-within {
+ --input-color: var(--color-success);
+ }
+ }
+ .hover\:bg-base-300 {
&:hover {
@media (hover: hover) {
- background-color: var(--color-blue-600);
+ background-color: var(--color-base-300);
}
}
}
- .hover\:bg-gray-100 {
+ .hover\:bg-gray-200 {
&:hover {
@media (hover: hover) {
- background-color: var(--color-gray-100);
- }
- }
- }
- .hover\:bg-gray-600 {
- &:hover {
- @media (hover: hover) {
- background-color: var(--color-gray-600);
- }
- }
- }
- .hover\:bg-gray-700 {
- &:hover {
- @media (hover: hover) {
- background-color: var(--color-gray-700);
+ background-color: var(--color-gray-200);
}
}
}
@@ -1505,13 +3473,6 @@
}
}
}
- .hover\:text-gray-600 {
- &:hover {
- @media (hover: hover) {
- color: var(--color-gray-600);
- }
- }
- }
.hover\:text-gray-700 {
&:hover {
@media (hover: hover) {
@@ -1519,13 +3480,6 @@
}
}
}
- .hover\:text-gray-900 {
- &:hover {
- @media (hover: hover) {
- color: var(--color-gray-900);
- }
- }
- }
.hover\:text-primary {
&:hover {
@media (hover: hover) {
@@ -1598,8 +3552,21 @@
translate: var(--tw-translate-x) var(--tw-translate-y);
}
}
- .sm\:grid-cols-2 {
+ .sm\:stats-vertical {
@media (width >= 40rem) {
+ grid-auto-flow: row;
+ overflow-y: auto;
+ .stat:not(:last-child) {
+ border-inline-end: none;
+ border-block-end: var(--border) dashed currentColor;
+ @supports (color: color-mix(in lab, red, red)) {
+ border-block-end: var(--border) dashed color-mix(in oklab, currentColor 10%, #0000);
+ }
+ }
+ }
+ }
+ .md\:grid-cols-2 {
+ @media (width >= 48rem) {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
@@ -1608,6 +3575,24 @@
grid-template-columns: repeat(3, minmax(0, 1fr));
}
}
+ .lg\:stats-horizontal {
+ @media (width >= 64rem) {
+ grid-auto-flow: column;
+ overflow-x: auto;
+ .stat:not(:last-child) {
+ border-inline-end: var(--border) dashed currentColor;
+ @supports (color: color-mix(in lab, red, red)) {
+ border-inline-end: var(--border) dashed color-mix(in oklab, currentColor 10%, #0000);
+ }
+ border-block-end: none;
+ }
+ }
+ }
+ .lg\:grid-cols-3 {
+ @media (width >= 64rem) {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ }
+ }
.lg\:grid-cols-4 {
@media (width >= 64rem) {
grid-template-columns: repeat(4, minmax(0, 1fr));
@@ -1787,14 +3772,10 @@
}
}
@layer base {
- :root:has( .modal-open, .modal[open], .modal:target, .modal-toggle:checked, .drawer:not([class*="drawer-open"]) > .drawer-toggle:checked ) {
- overflow: hidden;
- }
-}
-@layer base {
- :root, [data-theme] {
- background-color: var(--root-bg, var(--color-base-100));
- color: var(--color-base-content);
+ @property --radialprogress {
+ syntax: "";
+ inherits: true;
+ initial-value: 0%;
}
}
@layer base {
@@ -1806,10 +3787,13 @@
}
}
@layer base {
- @property --radialprogress {
- syntax: "";
- inherits: true;
- initial-value: 0%;
+ :root {
+ --fx-noise: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E");
+ }
+}
+@layer base {
+ :root:has( .modal-open, .modal[open], .modal:target, .modal-toggle:checked, .drawer:not([class*="drawer-open"]) > .drawer-toggle:checked ) {
+ overflow: hidden;
}
}
@layer base {
@@ -1826,16 +3810,25 @@
}
}
@layer base {
- :root {
- --fx-noise: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E");
- }
- .chat {
- --mask-chat: url("data:image/svg+xml,%3csvg width='13' height='13' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='M0 11.5004C0 13.0004 2 13.0004 2 13.0004H12H13V0.00036329L12.5 0C12.5 0 11.977 2.09572 11.8581 2.50033C11.6075 3.35237 10.9149 4.22374 9 5.50036C6 7.50036 0 10.0004 0 11.5004Z'/%3e%3c/svg%3e");
+ :root, [data-theme] {
+ background-color: var(--root-bg, var(--color-base-100));
+ color: var(--color-base-content);
}
}
-@keyframes dropdown {
+@keyframes radio {
0% {
- opacity: 0;
+ padding: 5px;
+ }
+ 50% {
+ padding: 3px;
+ }
+}
+@keyframes skeleton {
+ 0% {
+ background-position: 150%;
+ }
+ 100% {
+ background-position: -50%;
}
}
@keyframes progress {
@@ -1853,28 +3846,17 @@
opacity: 1;
}
}
+@keyframes dropdown {
+ 0% {
+ opacity: 0;
+ }
+}
@keyframes rating {
0%, 40% {
scale: 1.1;
filter: brightness(1.05) contrast(1.05);
}
}
-@keyframes radio {
- 0% {
- padding: 5px;
- }
- 50% {
- padding: 3px;
- }
-}
-@keyframes skeleton {
- 0% {
- background-position: 150%;
- }
- 100% {
- background-position: -50%;
- }
-}
@layer base {
@media (prefers-color-scheme: dark) {
:root {
@@ -2103,6 +4085,100 @@
inherits: false;
initial-value: 0 0 #0000;
}
+@property --tw-outline-style {
+ syntax: "*";
+ inherits: false;
+ initial-value: solid;
+}
+@property --tw-blur {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-brightness {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-contrast {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-grayscale {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-hue-rotate {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-invert {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-opacity {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-saturate {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-sepia {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-drop-shadow {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-drop-shadow-color {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-drop-shadow-alpha {
+ syntax: "";
+ inherits: false;
+ initial-value: 100%;
+}
+@property --tw-drop-shadow-size {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-blur {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-brightness {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-contrast {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-grayscale {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-hue-rotate {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-invert {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-opacity {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-saturate {
+ syntax: "*";
+ inherits: false;
+}
+@property --tw-backdrop-sepia {
+ syntax: "*";
+ inherits: false;
+}
@property --tw-duration {
syntax: "*";
inherits: false;
@@ -2111,11 +4187,6 @@
syntax: "*";
inherits: false;
}
-@property --tw-outline-style {
- syntax: "*";
- inherits: false;
- initial-value: solid;
-}
@layer properties {
@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
*, ::before, ::after, ::backdrop {
@@ -2147,9 +4218,31 @@
--tw-ring-offset-width: 0px;
--tw-ring-offset-color: #fff;
--tw-ring-offset-shadow: 0 0 #0000;
+ --tw-outline-style: solid;
+ --tw-blur: initial;
+ --tw-brightness: initial;
+ --tw-contrast: initial;
+ --tw-grayscale: initial;
+ --tw-hue-rotate: initial;
+ --tw-invert: initial;
+ --tw-opacity: initial;
+ --tw-saturate: initial;
+ --tw-sepia: initial;
+ --tw-drop-shadow: initial;
+ --tw-drop-shadow-color: initial;
+ --tw-drop-shadow-alpha: 100%;
+ --tw-drop-shadow-size: initial;
+ --tw-backdrop-blur: initial;
+ --tw-backdrop-brightness: initial;
+ --tw-backdrop-contrast: initial;
+ --tw-backdrop-grayscale: initial;
+ --tw-backdrop-hue-rotate: initial;
+ --tw-backdrop-invert: initial;
+ --tw-backdrop-opacity: initial;
+ --tw-backdrop-saturate: initial;
+ --tw-backdrop-sepia: initial;
--tw-duration: initial;
--tw-ease: initial;
- --tw-outline-style: solid;
}
}
}
diff --git a/wwws/admin/src/tpldata/apxid_authentification_simplemobnav_fr.json b/wwws/admin/src/tpldata/apxid_authentification_simplemobnav_fr.json
index 99be438..4830666 100644
--- a/wwws/admin/src/tpldata/apxid_authentification_simplemobnav_fr.json
+++ b/wwws/admin/src/tpldata/apxid_authentification_simplemobnav_fr.json
@@ -18,7 +18,7 @@
"profilmenu": [
{
"mainprofil": "persons",
- "link": "mytribes"
+ "link": "myworld"
},
{
"mainprofil": "pagans",
@@ -108,10 +108,10 @@
"next": []
},
{
- "link": "mytribes",
- "shortlabel": "Tribus",
- "label": "Mes tribus",
- "allowedprofil":["persons"],
+ "link": "myworld",
+ "shortlabel": "Ma chose",
+ "label": "Ma propriété",
+ "allowedprofil":["pagans"],
"textlink": "Voir ",
"action":"navigation",
"next": ["logout"]
diff --git a/wwws/admin/src/tpldata/apxid_mydata_simplemobnav_fr.json b/wwws/admin/src/tpldata/apxid_mydata_simplemobnav_fr.json
new file mode 100644
index 0000000..eeaa768
--- /dev/null
+++ b/wwws/admin/src/tpldata/apxid_mydata_simplemobnav_fr.json
@@ -0,0 +1,113 @@
+{
+ "contentwconame": "apxauth",
+ "contentid": "signature",
+ "logo": {
+ "src": "/src/static/img/logo/logobgdark.png",
+ "alt": "smatchit"
+ },
+ "claim": {
+ "textContent": "Never miss an opportunity"
+ },
+ "textlist": true,
+ "commentmenutype": "textlist: vertical list of menu with texte, buttonlist: horizontal btn",
+ "profilmenu": [
+ {
+ "mainprofil": "persons",
+ "link": "mytribes"
+ },
+ {
+ "mainprofil": "pagans",
+ "link": "logout"
+ },
+ {
+ "mainprofil": "anonymous",
+ "link": "signin"
+ }
+ ],
+ "links": [
+ {
+ "link": "signup",
+ "label": "Pas encore d'identité apxtri ?",
+ "textlink": "Créer mon identité",
+ "tpl": "apxauthscreensignup",
+ "allowedprofil": [
+ "anonymous"
+ ],
+ "next": [
+ "signin",
+ "forgetkey",
+ "information"
+ ]
+ },
+ {
+ "link": "signin",
+ "label": "S'identifier ?",
+ "textlink": "Accédez à vos données",
+ "tpl": "apxauthscreensignin",
+ "allowedprofil": [
+ "anonymous"
+ ],
+ "next": [
+ "signup",
+ "forgetkey",
+ "information"
+ ]
+ },
+ {
+ "link": "forgetkey",
+ "label": "Clé oubliée ?",
+ "textlink": "Récupérez par email",
+ "tpl": "apxauthscreenforgetkey",
+ "allowedprofil": [
+ "anonymous"
+ ],
+ "next": [
+ "signin",
+ "signup",
+ "information"
+ ]
+ },
+ {
+ "link": "information",
+ "label": " C'est quoi une identité apxtri ?",
+ "textlink": "En savoir plus",
+ "allowedprofil": [
+ "anonymous"
+ ],
+ "tpl": "apxauthscreeninformation",
+ "next": [
+ "back"
+ ]
+ },
+ {
+ "link": "back",
+ "label": "Retour au menu ",
+ "allowedprofil": [
+ "anonymous"
+ ],
+ "tpl": "sc",
+ "textlink": "Retour",
+ "next": []
+ },
+ {
+ "link": "logout",
+ "label": " ",
+ "allowedprofil": [
+ "pagans"
+ ],
+ "tpl": "apxauthscreenlogout",
+ "textlink": "",
+ "next": []
+ },
+ {
+ "link": "mytribes",
+ "label": " ",
+ "tpl": "apxauthscreenmytribes",
+ "allowedprofil": [
+ "persons"
+ ],
+ "textlink": "",
+ "next": []
+ }
+ ]
+}
diff --git a/wwws/admin/src/tpldata/apxid_signature_apxauth_fr.json b/wwws/admin/src/tpldata/apxid_signature_apxauth_fr.json
index af354f4..1f26882 100644
--- a/wwws/admin/src/tpldata/apxid_signature_apxauth_fr.json
+++ b/wwws/admin/src/tpldata/apxid_signature_apxauth_fr.json
@@ -1,17 +1,46 @@
-{ "idparent":"authentification",
- "signintitle":"Qui êtes-vous?",
- "signuptitle":"Creer un compte anonyme",
- "aliastitle":"Votre alias",
- "aliasinvalid": "Combinaison de 3 à 150 caractères composée de minuscules (a à z) et/ou de chiffres (0 à 9)",
- "aliastitle": "Uniquement minuscules ou chiffres",
- "emailinvalid":"Vérifier votre email",
- "privatekeyplaceholder": "Votre clé privée",
- "remembermetext":"Stocker mon identité sur ce navigateur plus de 24 heures.Pour supprimer la clé de ce navigateur, il suffit de se déconnecter.",
- "authentifyme":"S'identifier",
- "createkey":"Créer mes clés en local",
- "trusttext":"Si vous faites plus confiance à ce domaine qu'à vous même pour garder vos clés, cochez cette case. Les administrateurs de ce domaine auront accès à vos clés et pourront donc agir en votre nom. L'email ci-dessus sera utilisé pour vous renvoyer vos clés par le domaine de confiance. Dans tous les cas, il est conseillé de telecharger vos clés et de les stocker sur un support fiable non connecté (papier, clé usb)",
- "downloadPuK":" Download Publickey",
- "downloadPrK":" Download Privatekey",
- "saveidentity":"Sauvegarde cette identité",
- "nextpage":"Page suivante"
-}
+{
+ "idparent": "authentification",
+ "signintitle": "Qui êtes-vous?",
+ "signuptitle": "Creer un compte anonyme",
+ "aliastitle": "Votre alias",
+ "aliasinvalid": "Combinaison de 3 à 150 caractères composée de minuscules (a à z) et/ou de chiffres (0 à 9)",
+ "aliastitle": "Uniquement minuscules ou chiffres",
+ "emailinvalid": "Vérifier votre email",
+ "privatekeyplaceholder": "Votre clé privée",
+ "remembermetext": "Stocker mon identité sur ce navigateur plus de 24 heures.Pour supprimer la clé de ce navigateur, il suffit de se déconnecter.",
+ "authentifyme": "S'identifier",
+ "createkey": "Créer mes clés en local",
+ "trusttext": "Si vous faites plus confiance à ce domaine qu'à vous même pour garder vos clés, cochez cette case. Les administrateurs de ce domaine auront accès à vos clés et pourront donc agir en votre nom. L'email ci-dessus sera utilisé pour vous renvoyer vos clés par le domaine de confiance. Dans tous les cas, il est conseillé de telecharger vos clés et de les stocker sur un support fiable non connecté (papier, clé usb)",
+ "downloadPuK": " Download Publickey",
+ "downloadPrK": " Download Privatekey",
+ "saveidentity": "Sauvegarde cette identité",
+ "nextpage": "Page suivante",
+ "optionlinksmajor":[ {
+ "notification_count": 5,
+ "typebadge": "success",
+ "svg": " ",
+ "title": "Accéder à l'administration de la ville",
+ "onclick": " href='admindata_fr.html' "
+ }],
+ "optionlinks": [
+ {
+ "notification_count": 1,
+ "typebadge": "success",
+ "svg":" ",
+ "title": "Accéder à vos messages chiffrés",
+ "onclick": " href='privatri_fr.html' "
+ },
+ {
+ "notification_count": 1,
+ "typebadge": "success",
+ "svg": " ",
+ "title": "Accéder à mon wallet",
+ "onclick": " href='wallet_fr.html' "
+ },
+ {
+ "svg": " ",
+ "title": "Accéder à mon profil",
+ "onclick": " href='myprofil_fr.html' "
+ }
+ ]
+}
\ No newline at end of file
diff --git a/wwws/apx/caddy.apx.apxtri.farm.ants.json b/wwws/apx/caddy.apx.apxtri.farm.ants.json
index 33e4a47..b167b18 100644
--- a/wwws/apx/caddy.apx.apxtri.farm.ants.json
+++ b/wwws/apx/caddy.apx.apxtri.farm.ants.json
@@ -4,6 +4,16 @@
"servers": {
"apx.apxtri.farm.ants": {
"listen": [":80",":443"],
+ "tls_connection_policies": [
+ {
+ "match": {
+ "sni": ["apx.apxtri.farm.ants"]
+ },
+ "certificates": {
+ "load_storage": "local_certs"
+ }
+ }
+ ],
"routes": [
{
"match": [{
diff --git a/wwws/itm/admin.json b/wwws/itm/admin.json
index ffad8d9..e39c4f0 100644
--- a/wwws/itm/admin.json
+++ b/wwws/itm/admin.json
@@ -1,123 +1,41 @@
{
- "appname": "admin",
- "dns": [],
- "commonfiles": [
- "static/fonts/questrial-regular-webfont.woff2",
- "static/fonts/Quicksand-Light.woff2",
- "static/img/icons/iconbgdark.png",
- "static/img/icons/iconbglight.png",
- "static/img/logo/logobgdark.png"
- ],
- "apxtri": {
- "headers": {
- "xtrkversion": 1,
- "xalias": "anonymous",
- "xapp": "admin",
- "xdays": 0,
- "xhash": "anonymous",
- "xlang": "fr",
- "xprofils": "anonymous",
- "xtribe": "apxtri",
- "xuuid": "0"
- }
- },
- "tailwindcsscontent": [
- "../../../../../../../apxtri/objects/wco/apx/*.{html,js,mustache}",
- "../../../../../../../apxtri/objects/wwws/admin/src/**/*.{html,js,mustache}",
- "../../../../../../../apxtri/objects/wco/simplemobnav/*.{html,js,mustache}",
- "../../../../../../../apxtri/objects/wco/apxauth/*.{html,js,mustache}",
- "../../../../../../../apxtri/objects/wco/adminskull/*.{html,js,mustache}",
- "/media/phil/usbfarm/apxtowns/data/apxtri/objects/wco/apx/*.{html,js,mustache}",
- "/media/phil/usbfarm/apxtowns/data/apxtri/objects/wwws/admin/src/**/*.{html,js,mustache}",
- "/media/phil/usbfarm/apxtowns/data/apxtri/objects/wco/simplemobnav/*.{html,js,mustache}",
- "/media/phil/usbfarm/apxtowns/data/apxtri/objects/wco/apxauth/*.{html,js,mustache}"
- ],
"pages": {
- "testapi": {
- "version": 1,
- "languages": [
- "fr"
- ],
- "profils": [
- "anonymous"
- ],
- "tpl": {},
- "tpldata": {},
- "itms": {},
- "ref": {
- "Checkjson": "apxtri/models/tplstrings/Checkjson",
- "Notification": "apxtri/models/tplstrings/Notifications",
- "Odmdb": "apxtri/models/tplstrings/Odmdb",
- "Pagans": "apxtri/models/tplstrings/Pagans",
- "Middlewares": "apxtri/models/tplstrings/middlewares"
- },
- "schema": [
- "apxtri/objects/pagans",
- "apxtri/objects/persons"
- ],
- "options": {
- "profil": "apxtri/objects/options/profil"
- },
- "wcodata": {
- "favicon": {
- "href": "static/img/icons/iconbglight.png"
- },
- "logo": {
- "src": "static/img/logo/logobgdark.png",
- "alt": "apXtri"
- },
- "claim": {
- "textContent": "L'Unique et sa propriété"
- }
- },
- "appdata": {
- "emailsupport": "support@need-data.com"
- }
- },
"apxid": {
"version": 1,
- "languages": [
- "fr"
- ],
"profils": [
"anonymous"
],
"tpl": {
- "simplemobnavnav": "apxtri/objects/wco/simplemobnav/nav.mustache",
- "simplemobnavmain": "apxtri/objects/wco/simplemobnav/main.mustache",
+ "apxauthmain": "apxtri/objects/wco/apxauth/main",
"apxauthscreensignup": "apxtri/objects/wco/apxauth/screensignup",
"apxauthscreensignin": "apxtri/objects/wco/apxauth/screensignin",
"apxauthscreenlogout": "apxtri/objects/wco/apxauth/screenlogout",
- "apxauthscreenmytribes": "apxtri/objects/wco/apxauth/screenmytribes",
+ "apxauthscreenmyworld": "apxtri/objects/wco/apxauth/screenmyworld",
"apxauthscreeninformation": "apxtri/objects/wco/apxauth/screeninformation",
"apxauthscreenforgetkey": "apxtri/objects/wco/apxauth/screenforgetkey",
- "apxauthmain": "apxtri/objects/wco/apxauth/main",
- "simplemobnavbuttongroup": "apxtri/objects/wco/simplemobnav/buttongroup.mustache",
"simplemobnavnavbuttonh": "apxtri/objects/wco/simplemobnav/navbuttonh.mustache",
"simplemobnavnavlist": "apxtri/objects/wco/simplemobnav/navlist.mustache",
- "simplemobnavnavbutton": "apxtri/objects/wco/simplemobnav/navbuttonh.mustache"
+ "simplemobnavnavbutton": "apxtri/objects/wco/simplemobnav/navbuttonh.mustache",
+ "simplemobnavmain": "apxtri/objects/wco/simplemobnav/main.mustache"
},
"tpldata": {
+ "apxid_signature_apxauth": "apxtri/objects/wwws/admin/src/tpldata/apxid_signature_apxauth",
"apxid_authentification_simplemobnav": "apxtri/objects/wwws/admin/src/tpldata/apxid_authentification_simplemobnav",
- "apxid_signature_apxauth": "apxtri/objects/wwws/admin/src/tpldata/apxid_signature_apxauth"
- },
- "itms": {},
- "ref": {
- "Checkjson": "apxtri/models/tplstrings/Checkjson",
- "Middlewares": "apxtri/models/tplstrings/Middlewares",
- "Notification": "apxtri/models/tplstrings/Notifications",
- "Odmdb": "apxtri/models/tplstrings/Odmdb",
- "Pagans": "apxtri/models/tplstrings/Pagans",
- "Persons": "apxtri/models/tplstrings/Persons"
+ "apxid_mydata_simplemobnav": "apxtri/objects/wwws/admin/src/tpldata/apxid_mydata_simplemobnav"
},
"schema": [
"apxtri/objects/pagans",
"apxtri/objects/persons"
],
- "options": {
- "profil": "apxtri/objects/options/itm/profil"
+ "ref": {
+ "Odmdb": "apxtri/models/tplstrings/Odmdb",
+ "Pagans": "apxtri/models/tplstrings/Pagans",
+ "Persons": "apxtri/models/tplstrings/Persons",
+ "Checkjson": "apxtri/models/tplstrings/Checkjson",
+ "Notification": "apxtri/models/tplstrings/Notifications",
+ "Middlewares": "apxtri/models/tplstrings/Middlewares"
},
- "wcodata": {
+ "wco": {
"favicon": {
"href": "static/img/icons/iconbglight.png"
},
@@ -129,31 +47,10 @@
"textContent": "L'Unique et sa propriété"
}
},
- "appdata": {
- "emailsupport": "support@smatchit.io",
- "websites": [
- {
- "href": "https://app.smatchit.io",
- "name": "app.smatchit.io"
- },
- {
- "href": "https://apptest.smatchit.io",
- "name": "apptest.smatchit.io"
- },
- {
- "href": "http://pwa.smatchit/src/testapi_fr.html",
- "name": "pwa.smatchit/src/testapi"
- }
- ],
- "nopassphrase": true,
- "forcetrustcurrenttribe": true
- }
+ "appdata": {}
},
"admindata": {
"version": 1,
- "languages": [
- "fr"
- ],
"profils": [
"anonymous"
],
@@ -163,57 +60,18 @@
"adminskullmain": "apxtri/objects/wco/adminskull/main",
"adminskullheadnav": "apxtri/objects/wco/adminskull/headnav"
},
- "tpldata": {
- "verticalnav": "apxtri/objects/wwws/admin/src/tpldata/admindata/verticalnav",
- "headnav": "apxtri/objects/wwws/admin/src/tpldata/admindata/headnav",
- "simplemobnav": "../apxtri/objects/wwws/admin/src/tpldata/simplemobnav/simplemobnav"
- },
- "itms": {},
- "ref": {
- "Checkjson": "apxtri/models/tplstrings/Checkjson",
- "Notification": "apxtri/models/tplstrings/Notifications",
- "Odmdb": "apxtri/models/tplstrings/Odmdb",
- "Pagans": "apxtri/models/tplstrings/Pagans",
- "Middlewares": "apxtri/models/tplstrings/middlewares",
- "Persons": "apxtri/models/tplstrings/Persons"
- },
+ "tpldata": {},
"schema": [
"apxtri/objects/pagans",
"apxtri/objects/persons"
],
- "options": {
- "profil": "apxtri/objects/options/profil"
- },
- "wcodata": {
- "favicon": {
- "href": "static/img/icons/iconbglight.png"
- },
- "logo": {
- "src": "static/img/logo/logobgdark.png",
- "alt": "apXtri"
- },
- "claim": {
- "textContent": "L'Unique et sa propriété"
- }
- },
- "appdata": {
- "emailsupport": "support@smatchit.io",
- "websites": [
- {
- "href": "https://app.smatchit.io",
- "name": "app.smatchit.io"
- },
- {
- "href": "https://apptest.smatchit.io",
- "name": "apptest.smatchit.io"
- },
- {
- "href": "http://pwa.smatchit/src/testapi_fr.html",
- "name": "pwa.smatchit/src/testapi"
- }
- ],
- "nopassphrase": true,
- "forcetrustcurrenttribe": true
+ "ref": {
+ "Checkjson": "apxtri/models/tplstrings/Checkjson",
+ "Notification": "apxtri/models/tplstrings/Notifications",
+ "Middlewares": "apxtri/models/tplstrings/Middlewares",
+ "Odmdb": "apxtri/models/tplstrings/Odmdb",
+ "Pagans": "apxtri/models//tplstrings/Pagans",
+ "Persons": "apxtri/models/tplstrings/Persons"
}
}
}