From 519dbc73c6c74647e0cc8fcf6e9a666ad27b18fc Mon Sep 17 00:00:00 2001 From: apeters Date: Tue, 3 Jun 2025 11:40:56 +0000 Subject: [PATCH] Cat. Signed-off-by: apeters --- components/cache.py | 13 +- components/cluster/__init__.py | 119 +- components/database/__init__.py | 26 + components/models/cluster.py | 1 - components/models/users.py | 86 +- components/objects.py | 6 +- components/users.py | 120 +- components/web/__init__.py | 12 - components/web/blueprints/auth.py | 28 +- components/web/blueprints/groups.py | 24 +- components/web/blueprints/profile.py | 16 +- components/web/blueprints/root.py | 2 +- components/web/blueprints/users.py | 37 +- .../web/static_files/css/pico-custom.css | 2463 ++++++++++++++++- .../web/static_files/css/pico-custom.scss | 73 +- .../web/static_files/hyperscript/common._hs | 74 +- components/web/static_files/js/site.js | 4 + components/web/static_files/js/uservault.js | 42 +- components/web/static_files/logo.png | Bin 0 -> 50854 bytes components/web/static_files/logo2.png | Bin 0 -> 7190 bytes .../web/templates/auth/authenticate.html | 8 +- .../templates/auth/includes/login/login.html | 2 +- .../auth/includes/register/register.html | 41 +- .../web/templates/auth/register/token.html | 12 +- components/web/templates/base.html | 2 +- .../web/templates/includes/form_builder.html | 127 +- components/web/templates/includes/menu.html | 103 +- components/web/templates/logo.svg | 483 ++++ components/web/templates/objects/object.html | 2 +- components/web/templates/objects/objects.html | 8 +- .../profile/includes/credentials.html | 104 +- components/web/templates/profile/profile.html | 8 +- .../web/templates/{ehlo.svg => robot.svg} | 19 +- components/web/templates/system/groups.html | 6 +- components/web/templates/system/logs.html | 4 +- components/web/templates/system/settings.html | 4 +- components/web/templates/system/status.html | 14 +- components/web/templates/system/user.html | 42 +- components/web/templates/system/users.html | 4 +- 39 files changed, 3544 insertions(+), 595 deletions(-) create mode 100644 components/web/static_files/logo.png create mode 100644 components/web/static_files/logo2.png create mode 100644 components/web/templates/logo.svg rename components/web/templates/{ehlo.svg => robot.svg} (98%) diff --git a/components/cache.py b/components/cache.py index 323b7b4..7d876ec 100644 --- a/components/cache.py +++ b/components/cache.py @@ -1,18 +1,25 @@ from components.database import IN_MEMORY_DB -from components.models import UUID, validate_call +from components.models import UUID, validate_call, constr from components.utils import ensure_list +from components.logs import logger @validate_call -def buster(bust_uuid: UUID | list[UUID]): +def buster( + bust_uuid: UUID + | list[UUID] + | list[constr(pattern=r"^[0-9a-fA-F]+$", min_length=16)] + | constr(pattern=r"^[0-9a-fA-F]+$", min_length=16) +): bust_uuids = ensure_list(bust_uuid) + for bust_uuid in bust_uuids: bust_uuid = str(bust_uuid) - for user_id in IN_MEMORY_DB["CACHE"]["MODELS"]: cached_keys = list(IN_MEMORY_DB["CACHE"]["MODELS"][user_id].keys()) if bust_uuid in cached_keys: if bust_uuid in IN_MEMORY_DB["CACHE"]["MODELS"][user_id]: + logger.debug(f"Cache buster ๐Ÿงน USER:{user_id};ITEM:{bust_uuid}") del IN_MEMORY_DB["CACHE"]["MODELS"][user_id][bust_uuid] for user_id in IN_MEMORY_DB["CACHE"]["FORMS"]: diff --git a/components/cluster/__init__.py b/components/cluster/__init__.py index f840834..2d7eda3 100644 --- a/components/cluster/__init__.py +++ b/components/cluster/__init__.py @@ -137,83 +137,72 @@ class Cluster: db_params = evaluate_db_params(ticket) async with TinyDB(**db_params) as db: - if not table in db.tables(): - await self.send_command( - CritErrors.NO_SUCH_TABLE.response, - peer_meta["name"], - ticket=ticket, - ) - else: - if not ticket in self._session_patched_tables: - self._session_patched_tables[ticket] = set() + if not ticket in self._session_patched_tables: + self._session_patched_tables[ticket] = set() - self._session_patched_tables[ticket].add(table) + self._session_patched_tables[ticket].add(table) - try: - if cmd.startswith("PATCHTABLE"): - table_data = { - doc.doc_id: doc for doc in db.table(table).all() - } - errors = [] - local_table_digest = dict_digest_sha1(table_data) - if local_table_digest != table_digest: + try: + if cmd.startswith("PATCHTABLE"): + table_data = { + doc.doc_id: doc for doc in db.table(table).all() + } + errors = [] + local_table_digest = dict_digest_sha1(table_data) + if local_table_digest != table_digest: + await self.send_command( + CritErrors.TABLE_HASH_MISMATCH.response, + peer_meta["name"], + ticket=ticket, + ) + continue + + diff = json.loads(base64.b64decode(table_payload)) + + for doc_id, docs in diff["changed"].items(): + a, b = docs + c = db.table(table).get(doc_id=doc_id) + if c != a: await self.send_command( - CritErrors.TABLE_HASH_MISMATCH.response, + CritErrors.DOC_MISMATCH.response, peer_meta["name"], ticket=ticket, ) - continue - - diff = json.loads(base64.b64decode(table_payload)) - - for doc_id, docs in diff["changed"].items(): - a, b = docs - c = db.table(table).get(doc_id=doc_id) - if c != a: - await self.send_command( - CritErrors.DOC_MISMATCH.response, - peer_meta["name"], - ticket=ticket, - ) - break - db.table(table).upsert( - Document(b, doc_id=doc_id) - ) - else: # if no break occured, continue - for doc_id, doc in diff["added"].items(): - db.table(table).insert( - Document(doc, doc_id=doc_id) - ) - db.table(table).remove( - Query().id.one_of( - [ - doc["id"] - for doc in diff["removed"].values() - ] - ) - ) - - elif cmd.startswith("FULLTABLE"): - insert_data = json.loads( - base64.b64decode(table_payload) - ) - db.table(table).truncate() - for doc_id, doc in insert_data.items(): + break + db.table(table).upsert(Document(b, doc_id=doc_id)) + else: # if no break occured, continue + for doc_id, doc in diff["added"].items(): db.table(table).insert( Document(doc, doc_id=doc_id) ) + db.table(table).remove( + Query().id.one_of( + [ + doc["id"] + for doc in diff["removed"].values() + ] + ) + ) - await self.send_command( - "ACK", peer_meta["name"], ticket=ticket + elif cmd.startswith("FULLTABLE"): + insert_data = json.loads( + base64.b64decode(table_payload) ) + db.table(table).truncate() + for doc_id, doc in insert_data.items(): + db.table(table).insert(Document(doc, doc_id=doc_id)) - except Exception as e: - await self.send_command( - CritErrors.CANNOT_APPLY.response, - peer_meta["name"], - ticket=ticket, - ) - continue + await self.send_command( + "ACK", peer_meta["name"], ticket=ticket + ) + + except Exception as e: + await self.send_command( + CritErrors.CANNOT_APPLY.response, + peer_meta["name"], + ticket=ticket, + ) + continue elif cmd == "COMMIT": if not ticket in self._session_patched_tables: diff --git a/components/database/__init__.py b/components/database/__init__.py index 2463c6f..92d5f42 100644 --- a/components/database/__init__.py +++ b/components/database/__init__.py @@ -27,10 +27,36 @@ TINYDB_PARAMS = { "indent": 2, "sort_keys": True, } +SYSTEM_CACHE_ID = "00000000-0000-0000-0000-000000000000" +ANONYMOUS_CACHE_ID = "99999999-9999-9999-9999-999999999999" IN_MEMORY_DB = dict() +IN_MEMORY_DB["SESSION_VALIDATED"] = dict() +IN_MEMORY_DB["WS_CONNECTIONS"] = dict() +IN_MEMORY_DB["CACHE"] = { + "MODELS": { + SYSTEM_CACHE_ID: dict(), + ANONYMOUS_CACHE_ID: dict(), + }, + "FORMS": dict(), +} +IN_MEMORY_DB["APP_LOGS_FULL_PULL"] = dict() +IN_MEMORY_DB["PROMOTE_USERS"] = set() +IN_MEMORY_DB["TOKENS"] = { + "REGISTER": dict(), + "LOGIN": dict(), +} + CTX_TICKET = contextvars.ContextVar("CTX_TICKET", default=None) +if not os.path.exists("database/main") or os.path.getsize("database/main") == 0: + os.makedirs(os.path.dirname("database/main"), exist_ok=True) + with open("database/main", "w") as f: + f.write("{}") + +os.chmod("database/main", 0o600) + + def evaluate_db_params(ticket: str | None = None): db_params = copy(TINYDB_PARAMS) transaction_file = ( diff --git a/components/models/cluster.py b/components/models/cluster.py index ab8a33c..4243ccd 100644 --- a/components/models/cluster.py +++ b/components/models/cluster.py @@ -24,7 +24,6 @@ class ConnectionStatus(Enum): class CritErrors(Enum): NOT_READY = "CRIT:NOT_READY" - NO_SUCH_TABLE = "CRIT:NO_SUCH_TABLE" TABLE_HASH_MISMATCH = "CRIT:TABLE_HASH_MISMATCH" CANNOT_APPLY = "CRIT:CANNOT_APPLY" NOTHING_TO_COMMIT = "CRIT:NOTHING_TO_COMMIT" diff --git a/components/models/users.py b/components/models/users.py index 6adfc61..1e40629 100644 --- a/components/models/users.py +++ b/components/models/users.py @@ -25,42 +25,6 @@ class AuthToken(BaseModel): ) -class Credential(BaseModel): - id: Annotated[str, AfterValidator(lambda x: bytes.fromhex(x))] | bytes - public_key: Annotated[str, AfterValidator(lambda x: bytes.fromhex(x))] | bytes - friendly_name: constr(strip_whitespace=True, min_length=1) - last_login: str - sign_count: int - transports: list[AuthenticatorTransport] | None = [] - active: bool - updated: str - created: str - - @field_serializer("id", "public_key") - def serialize_bytes_to_hex(self, v: bytes, _info): - return v.hex() if isinstance(v, bytes) else v - - -class AddCredential(BaseModel): - id: Annotated[bytes, AfterValidator(lambda x: x.hex())] | str - public_key: Annotated[bytes, AfterValidator(lambda x: x.hex())] | str - sign_count: int - friendly_name: str = "New passkey" - transports: list[AuthenticatorTransport] | None = [] - active: bool = True - last_login: str = "" - - @computed_field - @property - def created(self) -> str: - return utc_now_as_str() - - @computed_field - @property - def updated(self) -> str: - return utc_now_as_str() - - class UserProfile(BaseModel): model_config = ConfigDict(validate_assignment=True) @@ -102,6 +66,8 @@ class UserProfile(BaseModel): k in tresor.keys() for k in ["public_key_pem", "wrapped_private_key", "iv", "salt"] ) + else: + v = None return v except: raise PydanticCustomError( @@ -113,7 +79,7 @@ class UserProfile(BaseModel): tresor: str | None = Field( default=None, json_schema_extra={ - "title": "Personal tresor", + "title": "๐Ÿ” Personal tresor", "type": "tresor", "input_extra": 'autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"', "form_id": f"tresor-{str(uuid4())}", @@ -163,15 +129,52 @@ class UserProfile(BaseModel): updated: str | None = None +class Credential(BaseModel): + id: Annotated[str, AfterValidator(lambda x: bytes.fromhex(x))] | bytes + public_key: Annotated[str, AfterValidator(lambda x: bytes.fromhex(x))] | bytes + friendly_name: constr(strip_whitespace=True, min_length=1) + last_login: str + sign_count: int + transports: list[AuthenticatorTransport] | None = [] + active: bool + updated: str + created: str + + @field_serializer("id", "public_key") + def serialize_bytes_to_hex(self, v: bytes, _info): + return v.hex() if isinstance(v, bytes) else v + + +class CredentialAdd(BaseModel): + id: Annotated[str, AfterValidator(lambda x: bytes.fromhex(x))] | bytes + public_key: Annotated[str, AfterValidator(lambda x: bytes.fromhex(x))] | bytes + sign_count: int + friendly_name: constr(strip_whitespace=True, min_length=1) = "New passkey" + transports: list[AuthenticatorTransport] | None = [] + active: bool = True + last_login: str = "" + + @computed_field + @property + def created(self) -> str: + return utc_now_as_str() + + @computed_field + @property + def updated(self) -> str: + return utc_now_as_str() + + @field_serializer("id", "public_key") + def serialize_bytes_to_hex(self, v: bytes, _info): + return v.hex() if isinstance(v, bytes) else v + + class User(BaseModel): model_config = ConfigDict(validate_assignment=True) id: Annotated[str, AfterValidator(lambda v: str(UUID(v)))] login: constr(strip_whitespace=True, min_length=1) - credentials: dict[str, Credential] | Annotated[ - str | list[str], - AfterValidator(lambda v: ensure_list(v)), - ] = {} + credentials: list[Credential | CredentialAdd] = [] acl: Annotated[ Literal[*USER_ACLS] | list[Literal[*USER_ACLS]], AfterValidator(lambda v: ensure_list(v)), @@ -221,7 +224,6 @@ class UserAdd(BaseModel): class UserPatch(BaseModel): login: str | None = None acl: str | list = [] - credentials: str | list = [] groups: str | list | None = None @computed_field diff --git a/components/objects.py b/components/objects.py index 51836c6..56aae24 100644 --- a/components/objects.py +++ b/components/objects.py @@ -9,6 +9,7 @@ from components.web.utils.quart import current_app, session from components.utils import ensure_list, merge_models from components.cache import buster from components.database import * +from components.database import ANONYMOUS_CACHE_ID @validate_call @@ -20,10 +21,7 @@ async def get( get_objects = ObjectIdList(object_id=object_id).object_id db_params = evaluate_db_params() - if current_app and session.get("id"): - user_id = session["id"] - else: - user_id = "99999999-9999-9999-9999-999999999999" + user_id = session["id"] if current_app and session.get("id") else ANONYMOUS_CACHE_ID if not user_id in IN_MEMORY_DB["CACHE"]["MODELS"]: IN_MEMORY_DB["CACHE"]["MODELS"][user_id] = dict() diff --git a/components/users.py b/components/users.py index 4a728af..f9fa37c 100644 --- a/components/users.py +++ b/components/users.py @@ -1,5 +1,5 @@ from components.models.users import ( - AddCredential, + CredentialAdd, CredentialPatch, Credential, User, @@ -14,16 +14,10 @@ from components.models.users import ( ) from components.utils import merge_models from components.database import * +from components.database import SYSTEM_CACHE_ID from components.cache import buster -def _create_credentials_mapping(credentials: dict): - user_credentials = dict() - for c in credentials: - user_credentials.update({c["id"]: Credential.model_validate(c)}) - return user_credentials - - @validate_call async def what_id(login: str): db_params = evaluate_db_params() @@ -48,46 +42,28 @@ async def create(data: dict): insert_data = create_user.model_dump(mode="json") db.table("users").insert(insert_data) - for user_id in IN_MEMORY_DB["CACHE"]["FORMS"].copy(): - if "users" in IN_MEMORY_DB["CACHE"]["FORMS"][user_id]: - del IN_MEMORY_DB["CACHE"]["FORMS"][user_id]["users"] - return insert_data["id"] @validate_call -async def get(user_id: UUID, join_credentials: bool = True): +async def get(user_id: UUID): db_params = evaluate_db_params() - system_id = "00000000-0000-0000-0000-000000000000" - - if not IN_MEMORY_DB["CACHE"]["MODELS"].get(system_id): - IN_MEMORY_DB["CACHE"]["MODELS"][system_id] = dict() async with TinyDB(**db_params) as db: - if not str(user_id) in IN_MEMORY_DB["CACHE"]["MODELS"][system_id]: - print( - User.model_validate(db.table("users").get(Query().id == str(user_id))) - ) - IN_MEMORY_DB["CACHE"]["MODELS"][system_id][ + if not str(user_id) in IN_MEMORY_DB["CACHE"]["MODELS"][SYSTEM_CACHE_ID]: + IN_MEMORY_DB["CACHE"]["MODELS"][SYSTEM_CACHE_ID][ str(user_id) ] = User.model_validate(db.table("users").get(Query().id == str(user_id))) - user = IN_MEMORY_DB["CACHE"]["MODELS"][system_id][str(user_id)].copy() + user = IN_MEMORY_DB["CACHE"]["MODELS"][SYSTEM_CACHE_ID][str(user_id)].copy() - credentials = db.table("credentials").search( - (Query().id.one_of(user.credentials)) - ) - - if join_credentials: - user.credentials = _create_credentials_mapping(credentials) - - return user + return user @validate_call async def delete(user_id: UUID): db_params = evaluate_db_params() - user = await get(user_id=user_id, join_credentials=False) + user = await get(user_id=user_id) if not user: raise ValueError("name", "The provided user does not exist") @@ -96,8 +72,7 @@ async def delete(user_id: UUID): if len(db.table("users").all()) == 1: raise ValueError("name", "Cannot delete last user") - db.table("credentials").remove(Query().id.one_of(user.credentials)) - deleted = db.table("users").remove(Query().id == str(user_id)) + db.table("users").remove(Query().id == str(user_id)) buster(user.id) return user.id @@ -105,18 +80,18 @@ async def delete(user_id: UUID): @validate_call async def create_credential(user_id: UUID, data: dict): db_params = evaluate_db_params() - credential = AddCredential.model_validate(data) - user = await get(user_id=user_id, join_credentials=False) + credential = CredentialAdd.model_validate(data) + user = await get(user_id=user_id) if not user: raise ValueError("name", "The provided user does not exist") async with TinyDB(**db_params) as db: - db.table("credentials").insert(credential.model_dump(mode="json")) - user.credentials.append(credential.id) + user.credentials.append(credential) db.table("users").update( - {"credentials": user.credentials}, + {"credentials": user.model_dump(mode="json")["credentials"]}, Query().id == str(user_id), ) + buster(user.id) return credential.id @@ -125,25 +100,35 @@ async def delete_credential( user_id: UUID, hex_id: constr(pattern=r"^[0-9a-fA-F]+$", min_length=2) ): db_params = evaluate_db_params() - user = await get(user_id=user_id, join_credentials=False) + user = await get(user_id=user_id) if not user: raise ValueError("name", "The provided user does not exist") + matched_user_credential = next( + (c for c in user.credentials if c.id == bytes.fromhex(hex_id)), None + ) + + if not matched_user_credential: + raise ValueError( + "hex_id", + "The provided credential ID was not found in user context", + ) + async with TinyDB(**db_params) as db: - if hex_id in user.credentials: - user.credentials.remove(hex_id) - db.table("credentials").remove(Query().id == hex_id) - db.table("users").update( - {"credentials": user.credentials}, Query().id == str(user_id) - ) - return hex_id + user.credentials.remove(matched_user_credential) + db.table("users").update( + {"credentials": user.model_dump(mode="json")["credentials"]}, + Query().id == str(user_id), + ) + buster(user_id) + return hex_id @validate_call async def patch(user_id: UUID, data: dict): db_params = evaluate_db_params() - user = await get(user_id=user_id, join_credentials=False) + user = await get(user_id=user_id) if not user: raise ValueError("name", "The provided user does not exist") @@ -161,15 +146,10 @@ async def patch(user_id: UUID, data: dict): ): raise ValueError("login", "The provided login name exists") - orphaned_credentials = [ - c for c in user.credentials if c not in patched_user.credentials - ] db.table("users").update( patched_user.model_dump(mode="json"), Query().id == str(user_id), ) - db.table("credentials").remove(Query().id.one_of(orphaned_credentials)) - buster(user.id) return user.id @@ -177,7 +157,7 @@ async def patch(user_id: UUID, data: dict): @validate_call async def patch_profile(user_id: UUID, data: dict): db_params = evaluate_db_params() - user = await get(user_id=user_id, join_credentials=False) + user = await get(user_id=user_id) if not user: raise ValueError("name", "The provided user does not exist") @@ -192,6 +172,7 @@ async def patch_profile(user_id: UUID, data: dict): {"profile": patched_user_profile.model_dump(mode="json")}, Query().id == str(user_id), ) + buster(user.id) return user_id @@ -200,35 +181,42 @@ async def patch_credential( user_id: UUID, hex_id: constr(pattern=r"^[0-9a-fA-F]+$", min_length=2), data: dict ): db_params = evaluate_db_params() - user = await get(user_id=user_id, join_credentials=True) + user = await get(user_id=user_id) if not user: raise ValueError("name", "The provided user does not exist") - if hex_id not in user.credentials: + matched_user_credential = next( + (c for c in user.credentials if c.id == bytes.fromhex(hex_id)), None + ) + + if not matched_user_credential: raise ValueError( "hex_id", "The provided credential ID was not found in user context", ) - patch_data = CredentialPatch.model_validate(data) + user.credentials.remove(matched_user_credential) + patched_credential = merge_models( - user.credentials[hex_id], - patch_data, + matched_user_credential, + CredentialPatch.model_validate(data), exclude_strategies=["exclude_override_none"], ) + user.credentials.append(patched_credential) + async with TinyDB(**db_params) as db: - db.table("credentials").update( - patched_credential.model_dump(mode="json"), Query().id == hex_id + db.table("users").update( + {"credentials": user.model_dump(mode="json")["credentials"]}, + Query().id == str(user_id), ) + buster(user_id) return hex_id @validate_call -async def search( - name: constr(strip_whitespace=True, min_length=0), join_credentials: bool = True -): +async def search(name: constr(strip_whitespace=True, min_length=0)): db_params = evaluate_db_params() def search_name(s): @@ -237,6 +225,4 @@ async def search( async with TinyDB(**db_params) as db: matches = db.table("users").search(Query().login.test(search_name)) - return [ - await get(user["id"], join_credentials=join_credentials) for user in matches - ] + return [await get(user["id"]) for user in matches] diff --git a/components/web/__init__.py b/components/web/__init__.py index 65ea44f..144aacf 100644 --- a/components/web/__init__.py +++ b/components/web/__init__.py @@ -30,18 +30,6 @@ app.config["SECRET_KEY"] = defaults.SECRET_KEY app.config["TEMPLATES_AUTO_RELOAD"] = defaults.TEMPLATES_AUTO_RELOAD app.config["SERVER_NAME"] = defaults.HOSTNAME app.config["MOD_REQ_LIMIT"] = 10 -IN_MEMORY_DB["SESSION_VALIDATED"] = dict() -IN_MEMORY_DB["WS_CONNECTIONS"] = dict() -IN_MEMORY_DB["CACHE"] = { - "MODELS": dict(), - "FORMS": dict(), -} -IN_MEMORY_DB["APP_LOGS_FULL_PULL"] = dict() -IN_MEMORY_DB["PROMOTE_USERS"] = set() -IN_MEMORY_DB["TOKENS"] = { - "REGISTER": dict(), - "LOGIN": dict(), -} modifying_request_limiter = asyncio.Semaphore(app.config["MOD_REQ_LIMIT"]) diff --git a/components/web/blueprints/auth.py b/components/web/blueprints/auth.py index effa01f..0271d74 100644 --- a/components/web/blueprints/auth.py +++ b/components/web/blueprints/auth.py @@ -299,8 +299,7 @@ async def login_webauthn_options(): return validation_error([{"loc": ["login"], "msg": f"User is not available"}]) allow_credentials = [ - PublicKeyCredentialDescriptor(id=bytes.fromhex(c)) - for c in user.credentials.keys() + PublicKeyCredentialDescriptor(id=c.id) for c in user.credentials ] options = generate_authentication_options( @@ -402,8 +401,7 @@ async def register_webauthn_options(): user = await get_user(user_id=session["id"]) exclude_credentials = [ - PublicKeyCredentialDescriptor(id=bytes.fromhex(c)) - for c in user.credentials.keys() + PublicKeyCredentialDescriptor(id=c.id) for c in user.credentials ] user_id = session["id"] @@ -491,10 +489,9 @@ async def register_webauthn(): } try: - async with ClusterLock(["users", "credentials"], current_app): + async with ClusterLock("users", current_app): if not appending_passkey: user_id = await create_user(data={"login": login}) - await create_credential( user_id=user_id, data={ @@ -506,7 +503,7 @@ async def register_webauthn(): ) except Exception as e: - logger.error(e) + logger.critical(e) return trigger_notification( level="error", response_code=409, @@ -516,16 +513,12 @@ async def register_webauthn(): ) if appending_passkey: - await ws_htmx( - session["login"], - "beforeend", - f'
', - ) return trigger_notification( level="success", response_code=204, title="New token registered", message="A new token was appended to your account and can now be used to login", + additional_triggers={"appendCompleted": ""}, ) return trigger_notification( @@ -566,10 +559,9 @@ async def auth_login_verify(): credential = parse_authentication_credential_json(json_body) - matched_user_credential = None - for k, v in user.credentials.items(): - if bytes.fromhex(k) == credential.raw_id: - matched_user_credential = v + matched_user_credential = next( + (c for c in user.credentials if c.id == credential.raw_id), None + ) if not matched_user_credential: return trigger_notification( @@ -594,7 +586,7 @@ async def auth_login_verify(): if matched_user_credential.sign_count != 0: matched_user_credential.sign_count = verification.new_sign_count - async with ClusterLock("credentials", current_app): + async with ClusterLock("users", current_app): user_id = await what_id(login=login) await patch_credential( user_id=user_id, @@ -603,7 +595,7 @@ async def auth_login_verify(): ) except Exception as e: - logger.error(e) + logger.critical(e) return trigger_notification( level="error", response_code=409, diff --git a/components/web/blueprints/groups.py b/components/web/blueprints/groups.py index a70e3ff..6320266 100644 --- a/components/web/blueprints/groups.py +++ b/components/web/blueprints/groups.py @@ -23,31 +23,27 @@ async def user_group(): assigned_to = [ u - for u in await components.users.search(name="", join_credentials=False) + for u in await components.users.search(name="") if request_data.name in u.groups ] assign_to = [] for user_id in request_data.members: - assign_to.append( - await components.users.get(user_id=user_id, join_credentials=False) - ) + assign_to.append(await components.users.get(user_id=user_id)) _all = assigned_to + assign_to - async with ClusterLock(["users", "credentials"], current_app): + async with ClusterLock("users", current_app): for user in _all: - user_dict = user.model_dump(mode="json") - if request_data.name in user_dict["groups"]: - user_dict["groups"].remove(request_data.name) + if request_data.name in user.groups: + user.groups.remove(request_data.name) - if ( - request_data.new_name not in user_dict["groups"] - and user in assign_to - ): - user_dict["groups"].append(request_data.new_name) + if request_data.new_name not in user.groups and user in assign_to: + user.groups.append(request_data.new_name) - await components.users.patch(user_id=user.id, data=user_dict) + await components.users.patch( + user_id=user.id, data=user.model_dump(mode="json") + ) return "", 204 diff --git a/components/web/blueprints/profile.py b/components/web/blueprints/profile.py index 0447caa..ea92ad4 100644 --- a/components/web/blueprints/profile.py +++ b/components/web/blueprints/profile.py @@ -8,8 +8,7 @@ blueprint = Blueprint("profile", __name__, url_prefix="/profile") @blueprint.context_processor def load_context(): - context = dict() - context["schemas"] = {"user_profile": UserProfile.model_json_schema()} + context = {"schemas": {"user_profile": UserProfile.model_json_schema()}} return context @@ -25,14 +24,7 @@ async def user_profile_get(): name, message = e.args return validation_error([{"loc": [name], "msg": message}]) - return await render_template( - "profile/profile.html", - data={ - "user": user.dict(), - "keypair": None, - "credentials": user.credentials, - }, - ) + return await render_template("profile/profile.html", user=user) @blueprint.route("/edit", methods=["PATCH"]) @@ -68,7 +60,7 @@ async def user_profile_patch(): @acl("any") async def patch_credential(credential_hex_id: str): try: - async with ClusterLock("credentials", current_app): + async with ClusterLock("users", current_app): await components.users.patch_credential( user_id=session["id"], hex_id=credential_hex_id, @@ -89,7 +81,7 @@ async def patch_credential(credential_hex_id: str): @acl("any") async def delete_credential(credential_hex_id: str): try: - async with ClusterLock(["credentials", "users"], current_app): + async with ClusterLock("users", current_app): await components.users.delete_credential( user_id=session["id"], hex_id=credential_hex_id ) diff --git a/components/web/blueprints/root.py b/components/web/blueprints/root.py index 07930b7..7913951 100644 --- a/components/web/blueprints/root.py +++ b/components/web/blueprints/root.py @@ -33,7 +33,7 @@ async def logout(): async def ws(): while True: await websocket.send( - f'
๐ŸŸข
' + f'๐ŸŸข' ) data = await websocket.receive() try: diff --git a/components/web/blueprints/users.py b/components/web/blueprints/users.py index b0c2438..a37faa3 100644 --- a/components/web/blueprints/users.py +++ b/components/web/blueprints/users.py @@ -11,8 +11,7 @@ blueprint = Blueprint("users", __name__, url_prefix="/system/users") def load_context(): from components.models.users import UserProfile - context = dict() - context["schemas"] = {"user_profile": UserProfile.model_json_schema()} + context = {"schemas": {"user_profile": UserProfile.model_json_schema()}} return context @@ -28,7 +27,7 @@ async def get_user(user_id: str): return validation_error([{"loc": [name], "msg": message}]) return await render_or_json( - "system/includes/users/row.html", request.headers, user=user.dict() + "system/includes/users/row.html", request.headers, user=user ) @@ -50,16 +49,14 @@ async def get_users(): return validation_error(e.errors()) if request.method == "POST": - matched_users = [ - m.dict() for m in await components.users.search(name=search_model.q) - ] + matched_users = [m for m in await components.users.search(name=search_model.q)] user_pages = [ m for m in batch( sorted( matched_users, - key=lambda x: x.get(sort_attr, "id"), + key=lambda x: getattr(x, sort_attr, "id"), reverse=sort_reverse, ), page_size, @@ -97,7 +94,7 @@ async def delete_user(user_id: str | None = None): user_ids = request.form_parsed.get("id") try: - async with ClusterLock(["users", "credentials"], current_app): + async with ClusterLock("users", current_app): for user_id in ensure_list(user_ids): await components.users.delete(user_id=user_id) @@ -119,7 +116,7 @@ async def delete_user(user_id: str | None = None): @acl("system") async def patch_user_credential(user_id: str, hex_id: str): try: - async with ClusterLock("credentials", current_app): + async with ClusterLock("users", current_app): await components.users.patch_credential( user_id=user_id, hex_id=hex_id, @@ -139,6 +136,26 @@ async def patch_user_credential(user_id: str, hex_id: str): ) +@blueprint.route("//credential/", methods=["DELETE"]) +@acl("system") +async def delete_user_credential(user_id: str, hex_id: str): + try: + async with ClusterLock("users", current_app): + await components.users.delete_credential( + user_id=user_id, + hex_id=hex_id, + ) + except ValidationError as e: + return validation_error(e.errors()) + + return trigger_notification( + level="success", + response_code=204, + title="Credential deleted", + message="Credential was removed", + ) + + @blueprint.route("/patch", methods=["POST"]) @blueprint.route("/", methods=["PATCH"]) @acl("system") @@ -147,7 +164,7 @@ async def patch_user(user_id: str | None = None): if not user_id: user_id = request.form_parsed.get("id") - async with ClusterLock(["users", "credentials"], current_app): + async with ClusterLock("users", current_app): await components.users.patch(user_id=user_id, data=request.form_parsed) await components.users.patch_profile( user_id=user_id, data=request.form_parsed.get("profile", {}) diff --git a/components/web/static_files/css/pico-custom.css b/components/web/static_files/css/pico-custom.css index 6c9fe89..6e6c8d6 100644 --- a/components/web/static_files/css/pico-custom.css +++ b/components/web/static_files/css/pico-custom.css @@ -2984,19 +2984,20 @@ pre { padding: calc(var(--pico-spacing) / 2); } -#nav-theme-toggle { +nav[aria-label=breadcrumb] span { + padding: var(--pico-nav-link-spacing-vertical) var(--pico-nav-link-spacing-horizontal); + margin-inline-start: calc(var(--pico-nav-link-spacing-horizontal) * -1); +} + +#nav-theme-bulb { cursor: pointer !important; + text-decoration: none; } .dark { filter: grayscale(100%); } -.hi, .hi a { - font-size: 1.1rem; - --pico-text-decoration: none; -} - table td article { margin-bottom: var(--pico-spacing); } @@ -3016,6 +3017,11 @@ table td.created-modified, table th.created-modified { text-align: right; } +table td > a[role=button], +table td > button { + padding: calc(var(--pico-form-element-spacing-vertical) / 2) calc(var(--pico-form-element-spacing-horizontal) / 2); +} + .no-text-decoration { text-decoration: none !important; border-bottom: none !important; @@ -3025,10 +3031,6 @@ table td.created-modified, table th.created-modified { display: none; } -.help { - cursor: help; -} - .pointer { cursor: pointer; } @@ -3151,14 +3153,9 @@ table td.created-modified, table th.created-modified { --pico-color: #f9daea; } -.login-grid { - display: grid; - grid-template-columns: 20% 60% 20%; - grid-template-rows: 1fr; -} - -.login-register { - grid-column-start: 2; +article.login-mask { + padding: calc(var(--pico-spacing) * 2); + border-radius: 1.5rem; } thead th, thead td, tfoot th, tfoot td { @@ -3244,10 +3241,6 @@ nav details.dropdown { width: max-content; } -fieldset.vault-unlock { - padding: var(--pico-spacing) 0; -} - article.user-group { background-color: var(--pico-form-element-background-color); } @@ -3322,6 +3315,12 @@ fieldset.keypair, fieldset.tresor { padding: var(--pico-spacing); } +button#menu-vault-dialog-toggle { + padding: calc(var(--pico-form-element-spacing-vertical) / 1.5) calc(var(--pico-form-element-spacing-horizontal) / 1.5); + border-color: var(--pico-form-element-border-color); + --pico-border-radius: .5rem; +} + .color-red-950 { color: #1c0d06 !important; } @@ -3333,6 +3332,12 @@ fieldset.keypair, fieldset.tresor { background-color: #1c0d06; } +:is(button, [type=submit], [type=button], [role=button]).button-red-950.outline, +[type=reset].button-red-950.outline { + background-color: transparent; + color: #1c0d06; +} + :is(a).color-red-950 { text-decoration-color: #1c0d06 !important; } @@ -3348,6 +3353,12 @@ fieldset.keypair, fieldset.tresor { background-color: #30130a; } +:is(button, [type=submit], [type=button], [role=button]).button-red-900.outline, +[type=reset].button-red-900.outline { + background-color: transparent; + color: #30130a; +} + :is(a).color-red-900 { text-decoration-color: #30130a !important; } @@ -3363,6 +3374,12 @@ fieldset.keypair, fieldset.tresor { background-color: #45150c; } +:is(button, [type=submit], [type=button], [role=button]).button-red-850.outline, +[type=reset].button-red-850.outline { + background-color: transparent; + color: #45150c; +} + :is(a).color-red-850 { text-decoration-color: #45150c !important; } @@ -3378,6 +3395,12 @@ fieldset.keypair, fieldset.tresor { background-color: #5c160d; } +:is(button, [type=submit], [type=button], [role=button]).button-red-800.outline, +[type=reset].button-red-800.outline { + background-color: transparent; + color: #5c160d; +} + :is(a).color-red-800 { text-decoration-color: #5c160d !important; } @@ -3393,6 +3416,12 @@ fieldset.keypair, fieldset.tresor { background-color: #72170f; } +:is(button, [type=submit], [type=button], [role=button]).button-red-750.outline, +[type=reset].button-red-750.outline { + background-color: transparent; + color: #72170f; +} + :is(a).color-red-750 { text-decoration-color: #72170f !important; } @@ -3408,6 +3437,12 @@ fieldset.keypair, fieldset.tresor { background-color: #861d13; } +:is(button, [type=submit], [type=button], [role=button]).button-red-700.outline, +[type=reset].button-red-700.outline { + background-color: transparent; + color: #861d13; +} + :is(a).color-red-700 { text-decoration-color: #861d13 !important; } @@ -3423,6 +3458,12 @@ fieldset.keypair, fieldset.tresor { background-color: #9b2318; } +:is(button, [type=submit], [type=button], [role=button]).button-red-650.outline, +[type=reset].button-red-650.outline { + background-color: transparent; + color: #9b2318; +} + :is(a).color-red-650 { text-decoration-color: #9b2318 !important; } @@ -3438,6 +3479,12 @@ fieldset.keypair, fieldset.tresor { background-color: #af291d; } +:is(button, [type=submit], [type=button], [role=button]).button-red-600.outline, +[type=reset].button-red-600.outline { + background-color: transparent; + color: #af291d; +} + :is(a).color-red-600 { text-decoration-color: #af291d !important; } @@ -3453,6 +3500,12 @@ fieldset.keypair, fieldset.tresor { background-color: #c52f21; } +:is(button, [type=submit], [type=button], [role=button]).button-red-550.outline, +[type=reset].button-red-550.outline { + background-color: transparent; + color: #c52f21; +} + :is(a).color-red-550 { text-decoration-color: #c52f21 !important; } @@ -3469,6 +3522,13 @@ fieldset.keypair, fieldset.tresor { background-color: #d93526; } +:is(button, [type=submit], [type=button], [role=button]).button-red-500.outline, .button-red:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-red-500.outline, +[type=reset].outline.button-red { + background-color: transparent; + color: #d93526; +} + :is(a).color-red-500, .color-red:is(a) { text-decoration-color: #d93526 !important; } @@ -3484,6 +3544,12 @@ fieldset.keypair, fieldset.tresor { background-color: #ee402e; } +:is(button, [type=submit], [type=button], [role=button]).button-red-450.outline, +[type=reset].button-red-450.outline { + background-color: transparent; + color: #ee402e; +} + :is(a).color-red-450 { text-decoration-color: #ee402e !important; } @@ -3499,6 +3565,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f06048; } +:is(button, [type=submit], [type=button], [role=button]).button-red-400.outline, +[type=reset].button-red-400.outline { + background-color: transparent; + color: #f06048; +} + :is(a).color-red-400 { text-decoration-color: #f06048 !important; } @@ -3514,6 +3586,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f17961; } +:is(button, [type=submit], [type=button], [role=button]).button-red-350.outline, +[type=reset].button-red-350.outline { + background-color: transparent; + color: #f17961; +} + :is(a).color-red-350 { text-decoration-color: #f17961 !important; } @@ -3529,6 +3607,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f38f79; } +:is(button, [type=submit], [type=button], [role=button]).button-red-300.outline, +[type=reset].button-red-300.outline { + background-color: transparent; + color: #f38f79; +} + :is(a).color-red-300 { text-decoration-color: #f38f79 !important; } @@ -3544,6 +3628,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f5a390; } +:is(button, [type=submit], [type=button], [role=button]).button-red-250.outline, +[type=reset].button-red-250.outline { + background-color: transparent; + color: #f5a390; +} + :is(a).color-red-250 { text-decoration-color: #f5a390 !important; } @@ -3559,6 +3649,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f5b7a8; } +:is(button, [type=submit], [type=button], [role=button]).button-red-200.outline, +[type=reset].button-red-200.outline { + background-color: transparent; + color: #f5b7a8; +} + :is(a).color-red-200 { text-decoration-color: #f5b7a8 !important; } @@ -3574,6 +3670,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f6cabf; } +:is(button, [type=submit], [type=button], [role=button]).button-red-150.outline, +[type=reset].button-red-150.outline { + background-color: transparent; + color: #f6cabf; +} + :is(a).color-red-150 { text-decoration-color: #f6cabf !important; } @@ -3589,6 +3691,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f8dcd6; } +:is(button, [type=submit], [type=button], [role=button]).button-red-100.outline, +[type=reset].button-red-100.outline { + background-color: transparent; + color: #f8dcd6; +} + :is(a).color-red-100 { text-decoration-color: #f8dcd6 !important; } @@ -3604,6 +3712,12 @@ fieldset.keypair, fieldset.tresor { background-color: #faeeeb; } +:is(button, [type=submit], [type=button], [role=button]).button-red-50.outline, +[type=reset].button-red-50.outline { + background-color: transparent; + color: #faeeeb; +} + :is(a).color-red-50 { text-decoration-color: #faeeeb !important; } @@ -3619,6 +3733,12 @@ fieldset.keypair, fieldset.tresor { background-color: #c52f21; } +:is(button, [type=submit], [type=button], [role=button]).button-red-main.outline, +[type=reset].button-red-main.outline { + background-color: transparent; + color: #c52f21; +} + :is(a).color-red-main { text-decoration-color: #c52f21 !important; } @@ -3634,6 +3754,12 @@ fieldset.keypair, fieldset.tresor { background-color: #25060c; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-950.outline, +[type=reset].button-pink-950.outline { + background-color: transparent; + color: #25060c; +} + :is(a).color-pink-950 { text-decoration-color: #25060c !important; } @@ -3649,6 +3775,12 @@ fieldset.keypair, fieldset.tresor { background-color: #380916; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-900.outline, +[type=reset].button-pink-900.outline { + background-color: transparent; + color: #380916; +} + :is(a).color-pink-900 { text-decoration-color: #380916 !important; } @@ -3664,6 +3796,12 @@ fieldset.keypair, fieldset.tresor { background-color: #4b0c1f; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-850.outline, +[type=reset].button-pink-850.outline { + background-color: transparent; + color: #4b0c1f; +} + :is(a).color-pink-850 { text-decoration-color: #4b0c1f !important; } @@ -3679,6 +3817,12 @@ fieldset.keypair, fieldset.tresor { background-color: #5f0e28; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-800.outline, +[type=reset].button-pink-800.outline { + background-color: transparent; + color: #5f0e28; +} + :is(a).color-pink-800 { text-decoration-color: #5f0e28 !important; } @@ -3694,6 +3838,12 @@ fieldset.keypair, fieldset.tresor { background-color: #740f31; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-750.outline, +[type=reset].button-pink-750.outline { + background-color: transparent; + color: #740f31; +} + :is(a).color-pink-750 { text-decoration-color: #740f31 !important; } @@ -3709,6 +3859,12 @@ fieldset.keypair, fieldset.tresor { background-color: #88143b; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-700.outline, +[type=reset].button-pink-700.outline { + background-color: transparent; + color: #88143b; +} + :is(a).color-pink-700 { text-decoration-color: #88143b !important; } @@ -3724,6 +3880,12 @@ fieldset.keypair, fieldset.tresor { background-color: #9d1945; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-650.outline, +[type=reset].button-pink-650.outline { + background-color: transparent; + color: #9d1945; +} + :is(a).color-pink-650 { text-decoration-color: #9d1945 !important; } @@ -3739,6 +3901,12 @@ fieldset.keypair, fieldset.tresor { background-color: #b21e4f; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-600.outline, +[type=reset].button-pink-600.outline { + background-color: transparent; + color: #b21e4f; +} + :is(a).color-pink-600 { text-decoration-color: #b21e4f !important; } @@ -3754,6 +3922,12 @@ fieldset.keypair, fieldset.tresor { background-color: #c72259; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-550.outline, +[type=reset].button-pink-550.outline { + background-color: transparent; + color: #c72259; +} + :is(a).color-pink-550 { text-decoration-color: #c72259 !important; } @@ -3770,6 +3944,13 @@ fieldset.keypair, fieldset.tresor { background-color: #d92662; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-500.outline, .button-pink:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-pink-500.outline, +[type=reset].outline.button-pink { + background-color: transparent; + color: #d92662; +} + :is(a).color-pink-500, .color-pink:is(a) { text-decoration-color: #d92662 !important; } @@ -3785,6 +3966,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f42c6f; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-450.outline, +[type=reset].button-pink-450.outline { + background-color: transparent; + color: #f42c6f; +} + :is(a).color-pink-450 { text-decoration-color: #f42c6f !important; } @@ -3800,6 +3987,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f6547e; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-400.outline, +[type=reset].button-pink-400.outline { + background-color: transparent; + color: #f6547e; +} + :is(a).color-pink-400 { text-decoration-color: #f6547e !important; } @@ -3815,6 +4008,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f7708e; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-350.outline, +[type=reset].button-pink-350.outline { + background-color: transparent; + color: #f7708e; +} + :is(a).color-pink-350 { text-decoration-color: #f7708e !important; } @@ -3830,6 +4029,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f8889e; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-300.outline, +[type=reset].button-pink-300.outline { + background-color: transparent; + color: #f8889e; +} + :is(a).color-pink-300 { text-decoration-color: #f8889e !important; } @@ -3845,6 +4050,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f99eae; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-250.outline, +[type=reset].button-pink-250.outline { + background-color: transparent; + color: #f99eae; +} + :is(a).color-pink-250 { text-decoration-color: #f99eae !important; } @@ -3860,6 +4071,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f9b4be; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-200.outline, +[type=reset].button-pink-200.outline { + background-color: transparent; + color: #f9b4be; +} + :is(a).color-pink-200 { text-decoration-color: #f9b4be !important; } @@ -3875,6 +4092,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f9c8ce; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-150.outline, +[type=reset].button-pink-150.outline { + background-color: transparent; + color: #f9c8ce; +} + :is(a).color-pink-150 { text-decoration-color: #f9c8ce !important; } @@ -3890,6 +4113,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f9dbdf; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-100.outline, +[type=reset].button-pink-100.outline { + background-color: transparent; + color: #f9dbdf; +} + :is(a).color-pink-100 { text-decoration-color: #f9dbdf !important; } @@ -3905,6 +4134,12 @@ fieldset.keypair, fieldset.tresor { background-color: #fbedef; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-50.outline, +[type=reset].button-pink-50.outline { + background-color: transparent; + color: #fbedef; +} + :is(a).color-pink-50 { text-decoration-color: #fbedef !important; } @@ -3920,6 +4155,12 @@ fieldset.keypair, fieldset.tresor { background-color: #d92662; } +:is(button, [type=submit], [type=button], [role=button]).button-pink-main.outline, +[type=reset].button-pink-main.outline { + background-color: transparent; + color: #d92662; +} + :is(a).color-pink-main { text-decoration-color: #d92662 !important; } @@ -3935,6 +4176,12 @@ fieldset.keypair, fieldset.tresor { background-color: #230518; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-950.outline, +[type=reset].button-fuchsia-950.outline { + background-color: transparent; + color: #230518; +} + :is(a).color-fuchsia-950 { text-decoration-color: #230518 !important; } @@ -3950,6 +4197,12 @@ fieldset.keypair, fieldset.tresor { background-color: #360925; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-900.outline, +[type=reset].button-fuchsia-900.outline { + background-color: transparent; + color: #360925; +} + :is(a).color-fuchsia-900 { text-decoration-color: #360925 !important; } @@ -3965,6 +4218,12 @@ fieldset.keypair, fieldset.tresor { background-color: #480b33; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-850.outline, +[type=reset].button-fuchsia-850.outline { + background-color: transparent; + color: #480b33; +} + :is(a).color-fuchsia-850 { text-decoration-color: #480b33 !important; } @@ -3980,6 +4239,12 @@ fieldset.keypair, fieldset.tresor { background-color: #5c0d41; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-800.outline, +[type=reset].button-fuchsia-800.outline { + background-color: transparent; + color: #5c0d41; +} + :is(a).color-fuchsia-800 { text-decoration-color: #5c0d41 !important; } @@ -3995,6 +4260,12 @@ fieldset.keypair, fieldset.tresor { background-color: #700e4f; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-750.outline, +[type=reset].button-fuchsia-750.outline { + background-color: transparent; + color: #700e4f; +} + :is(a).color-fuchsia-750 { text-decoration-color: #700e4f !important; } @@ -4010,6 +4281,12 @@ fieldset.keypair, fieldset.tresor { background-color: #84135e; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-700.outline, +[type=reset].button-fuchsia-700.outline { + background-color: transparent; + color: #84135e; +} + :is(a).color-fuchsia-700 { text-decoration-color: #84135e !important; } @@ -4025,6 +4302,12 @@ fieldset.keypair, fieldset.tresor { background-color: #98176d; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-650.outline, +[type=reset].button-fuchsia-650.outline { + background-color: transparent; + color: #98176d; +} + :is(a).color-fuchsia-650 { text-decoration-color: #98176d !important; } @@ -4040,6 +4323,12 @@ fieldset.keypair, fieldset.tresor { background-color: #ac1c7c; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-600.outline, +[type=reset].button-fuchsia-600.outline { + background-color: transparent; + color: #ac1c7c; +} + :is(a).color-fuchsia-600 { text-decoration-color: #ac1c7c !important; } @@ -4055,6 +4344,12 @@ fieldset.keypair, fieldset.tresor { background-color: #c1208b; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-550.outline, +[type=reset].button-fuchsia-550.outline { + background-color: transparent; + color: #c1208b; +} + :is(a).color-fuchsia-550 { text-decoration-color: #c1208b !important; } @@ -4071,6 +4366,13 @@ fieldset.keypair, fieldset.tresor { background-color: #d9269d; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-500.outline, .button-fuchsia:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-fuchsia-500.outline, +[type=reset].outline.button-fuchsia { + background-color: transparent; + color: #d9269d; +} + :is(a).color-fuchsia-500, .color-fuchsia:is(a) { text-decoration-color: #d9269d !important; } @@ -4086,6 +4388,12 @@ fieldset.keypair, fieldset.tresor { background-color: #ed2aac; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-450.outline, +[type=reset].button-fuchsia-450.outline { + background-color: transparent; + color: #ed2aac; +} + :is(a).color-fuchsia-450 { text-decoration-color: #ed2aac !important; } @@ -4101,6 +4409,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f748b7; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-400.outline, +[type=reset].button-fuchsia-400.outline { + background-color: transparent; + color: #f748b7; +} + :is(a).color-fuchsia-400 { text-decoration-color: #f748b7 !important; } @@ -4116,6 +4430,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f869bf; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-350.outline, +[type=reset].button-fuchsia-350.outline { + background-color: transparent; + color: #f869bf; +} + :is(a).color-fuchsia-350 { text-decoration-color: #f869bf !important; } @@ -4131,6 +4451,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f983c7; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-300.outline, +[type=reset].button-fuchsia-300.outline { + background-color: transparent; + color: #f983c7; +} + :is(a).color-fuchsia-300 { text-decoration-color: #f983c7 !important; } @@ -4146,6 +4472,12 @@ fieldset.keypair, fieldset.tresor { background-color: #fa9acf; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-250.outline, +[type=reset].button-fuchsia-250.outline { + background-color: transparent; + color: #fa9acf; +} + :is(a).color-fuchsia-250 { text-decoration-color: #fa9acf !important; } @@ -4161,6 +4493,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f9b1d8; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-200.outline, +[type=reset].button-fuchsia-200.outline { + background-color: transparent; + color: #f9b1d8; +} + :is(a).color-fuchsia-200 { text-decoration-color: #f9b1d8 !important; } @@ -4176,6 +4514,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f9c6e1; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-150.outline, +[type=reset].button-fuchsia-150.outline { + background-color: transparent; + color: #f9c6e1; +} + :is(a).color-fuchsia-150 { text-decoration-color: #f9c6e1 !important; } @@ -4191,6 +4535,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f9daea; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-100.outline, +[type=reset].button-fuchsia-100.outline { + background-color: transparent; + color: #f9daea; +} + :is(a).color-fuchsia-100 { text-decoration-color: #f9daea !important; } @@ -4206,6 +4556,12 @@ fieldset.keypair, fieldset.tresor { background-color: #fbedf4; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-50.outline, +[type=reset].button-fuchsia-50.outline { + background-color: transparent; + color: #fbedf4; +} + :is(a).color-fuchsia-50 { text-decoration-color: #fbedf4 !important; } @@ -4221,6 +4577,12 @@ fieldset.keypair, fieldset.tresor { background-color: #c1208b; } +:is(button, [type=submit], [type=button], [role=button]).button-fuchsia-main.outline, +[type=reset].button-fuchsia-main.outline { + background-color: transparent; + color: #c1208b; +} + :is(a).color-fuchsia-main { text-decoration-color: #c1208b !important; } @@ -4236,6 +4598,12 @@ fieldset.keypair, fieldset.tresor { background-color: #1e0820; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-950.outline, +[type=reset].button-purple-950.outline { + background-color: transparent; + color: #1e0820; +} + :is(a).color-purple-950 { text-decoration-color: #1e0820 !important; } @@ -4251,6 +4619,12 @@ fieldset.keypair, fieldset.tresor { background-color: #2d0f33; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-900.outline, +[type=reset].button-purple-900.outline { + background-color: transparent; + color: #2d0f33; +} + :is(a).color-purple-900 { text-decoration-color: #2d0f33 !important; } @@ -4266,6 +4640,12 @@ fieldset.keypair, fieldset.tresor { background-color: #3d1545; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-850.outline, +[type=reset].button-purple-850.outline { + background-color: transparent; + color: #3d1545; +} + :is(a).color-purple-850 { text-decoration-color: #3d1545 !important; } @@ -4281,6 +4661,12 @@ fieldset.keypair, fieldset.tresor { background-color: #4d1a57; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-800.outline, +[type=reset].button-purple-800.outline { + background-color: transparent; + color: #4d1a57; +} + :is(a).color-purple-800 { text-decoration-color: #4d1a57 !important; } @@ -4296,6 +4682,12 @@ fieldset.keypair, fieldset.tresor { background-color: #5e206b; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-750.outline, +[type=reset].button-purple-750.outline { + background-color: transparent; + color: #5e206b; +} + :is(a).color-purple-750 { text-decoration-color: #5e206b !important; } @@ -4311,6 +4703,12 @@ fieldset.keypair, fieldset.tresor { background-color: #6f277d; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-700.outline, +[type=reset].button-purple-700.outline { + background-color: transparent; + color: #6f277d; +} + :is(a).color-purple-700 { text-decoration-color: #6f277d !important; } @@ -4326,6 +4724,12 @@ fieldset.keypair, fieldset.tresor { background-color: #802e90; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-650.outline, +[type=reset].button-purple-650.outline { + background-color: transparent; + color: #802e90; +} + :is(a).color-purple-650 { text-decoration-color: #802e90 !important; } @@ -4341,6 +4745,12 @@ fieldset.keypair, fieldset.tresor { background-color: #9236a4; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-600.outline, +[type=reset].button-purple-600.outline { + background-color: transparent; + color: #9236a4; +} + :is(a).color-purple-600 { text-decoration-color: #9236a4 !important; } @@ -4356,6 +4766,12 @@ fieldset.keypair, fieldset.tresor { background-color: #aa40bf; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-550.outline, +[type=reset].button-purple-550.outline { + background-color: transparent; + color: #aa40bf; +} + :is(a).color-purple-550 { text-decoration-color: #aa40bf !important; } @@ -4372,6 +4788,13 @@ fieldset.keypair, fieldset.tresor { background-color: #b645cd; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-500.outline, .button-purple:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-purple-500.outline, +[type=reset].outline.button-purple { + background-color: transparent; + color: #b645cd; +} + :is(a).color-purple-500, .color-purple:is(a) { text-decoration-color: #b645cd !important; } @@ -4387,6 +4810,12 @@ fieldset.keypair, fieldset.tresor { background-color: #c652dc; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-450.outline, +[type=reset].button-purple-450.outline { + background-color: transparent; + color: #c652dc; +} + :is(a).color-purple-450 { text-decoration-color: #c652dc !important; } @@ -4402,6 +4831,12 @@ fieldset.keypair, fieldset.tresor { background-color: #cd68e0; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-400.outline, +[type=reset].button-purple-400.outline { + background-color: transparent; + color: #cd68e0; +} + :is(a).color-purple-400 { text-decoration-color: #cd68e0 !important; } @@ -4417,6 +4852,12 @@ fieldset.keypair, fieldset.tresor { background-color: #d47de4; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-350.outline, +[type=reset].button-purple-350.outline { + background-color: transparent; + color: #d47de4; +} + :is(a).color-purple-350 { text-decoration-color: #d47de4 !important; } @@ -4432,6 +4873,12 @@ fieldset.keypair, fieldset.tresor { background-color: #db90e8; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-300.outline, +[type=reset].button-purple-300.outline { + background-color: transparent; + color: #db90e8; +} + :is(a).color-purple-300 { text-decoration-color: #db90e8 !important; } @@ -4447,6 +4894,12 @@ fieldset.keypair, fieldset.tresor { background-color: #e2a3eb; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-250.outline, +[type=reset].button-purple-250.outline { + background-color: transparent; + color: #e2a3eb; +} + :is(a).color-purple-250 { text-decoration-color: #e2a3eb !important; } @@ -4462,6 +4915,12 @@ fieldset.keypair, fieldset.tresor { background-color: #e7b6ee; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-200.outline, +[type=reset].button-purple-200.outline { + background-color: transparent; + color: #e7b6ee; +} + :is(a).color-purple-200 { text-decoration-color: #e7b6ee !important; } @@ -4477,6 +4936,12 @@ fieldset.keypair, fieldset.tresor { background-color: #edc9f1; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-150.outline, +[type=reset].button-purple-150.outline { + background-color: transparent; + color: #edc9f1; +} + :is(a).color-purple-150 { text-decoration-color: #edc9f1 !important; } @@ -4492,6 +4957,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f2dcf4; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-100.outline, +[type=reset].button-purple-100.outline { + background-color: transparent; + color: #f2dcf4; +} + :is(a).color-purple-100 { text-decoration-color: #f2dcf4 !important; } @@ -4507,6 +4978,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f8eef9; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-50.outline, +[type=reset].button-purple-50.outline { + background-color: transparent; + color: #f8eef9; +} + :is(a).color-purple-50 { text-decoration-color: #f8eef9 !important; } @@ -4522,6 +4999,12 @@ fieldset.keypair, fieldset.tresor { background-color: #9236a4; } +:is(button, [type=submit], [type=button], [role=button]).button-purple-main.outline, +[type=reset].button-purple-main.outline { + background-color: transparent; + color: #9236a4; +} + :is(a).color-purple-main { text-decoration-color: #9236a4 !important; } @@ -4537,6 +5020,12 @@ fieldset.keypair, fieldset.tresor { background-color: #190928; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-950.outline, +[type=reset].button-violet-950.outline { + background-color: transparent; + color: #190928; +} + :is(a).color-violet-950 { text-decoration-color: #190928 !important; } @@ -4552,6 +5041,12 @@ fieldset.keypair, fieldset.tresor { background-color: #251140; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-900.outline, +[type=reset].button-violet-900.outline { + background-color: transparent; + color: #251140; +} + :is(a).color-violet-900 { text-decoration-color: #251140 !important; } @@ -4567,6 +5062,12 @@ fieldset.keypair, fieldset.tresor { background-color: #321856; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-850.outline, +[type=reset].button-violet-850.outline { + background-color: transparent; + color: #321856; +} + :is(a).color-violet-850 { text-decoration-color: #321856 !important; } @@ -4582,6 +5083,12 @@ fieldset.keypair, fieldset.tresor { background-color: #3f1e6d; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-800.outline, +[type=reset].button-violet-800.outline { + background-color: transparent; + color: #3f1e6d; +} + :is(a).color-violet-800 { text-decoration-color: #3f1e6d !important; } @@ -4597,6 +5104,12 @@ fieldset.keypair, fieldset.tresor { background-color: #4d2585; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-750.outline, +[type=reset].button-violet-750.outline { + background-color: transparent; + color: #4d2585; +} + :is(a).color-violet-750 { text-decoration-color: #4d2585 !important; } @@ -4612,6 +5125,12 @@ fieldset.keypair, fieldset.tresor { background-color: #5b2d9c; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-700.outline, +[type=reset].button-violet-700.outline { + background-color: transparent; + color: #5b2d9c; +} + :is(a).color-violet-700 { text-decoration-color: #5b2d9c !important; } @@ -4627,6 +5146,12 @@ fieldset.keypair, fieldset.tresor { background-color: #6935b3; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-650.outline, +[type=reset].button-violet-650.outline { + background-color: transparent; + color: #6935b3; +} + :is(a).color-violet-650 { text-decoration-color: #6935b3 !important; } @@ -4642,6 +5167,12 @@ fieldset.keypair, fieldset.tresor { background-color: #7540bf; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-600.outline, +[type=reset].button-violet-600.outline { + background-color: transparent; + color: #7540bf; +} + :is(a).color-violet-600 { text-decoration-color: #7540bf !important; } @@ -4657,6 +5188,12 @@ fieldset.keypair, fieldset.tresor { background-color: #8352c5; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-550.outline, +[type=reset].button-violet-550.outline { + background-color: transparent; + color: #8352c5; +} + :is(a).color-violet-550 { text-decoration-color: #8352c5 !important; } @@ -4673,6 +5210,13 @@ fieldset.keypair, fieldset.tresor { background-color: #9062ca; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-500.outline, .button-violet:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-violet-500.outline, +[type=reset].outline.button-violet { + background-color: transparent; + color: #9062ca; +} + :is(a).color-violet-500, .color-violet:is(a) { text-decoration-color: #9062ca !important; } @@ -4688,6 +5232,12 @@ fieldset.keypair, fieldset.tresor { background-color: #9b71cf; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-450.outline, +[type=reset].button-violet-450.outline { + background-color: transparent; + color: #9b71cf; +} + :is(a).color-violet-450 { text-decoration-color: #9b71cf !important; } @@ -4703,6 +5253,12 @@ fieldset.keypair, fieldset.tresor { background-color: #a780d4; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-400.outline, +[type=reset].button-violet-400.outline { + background-color: transparent; + color: #a780d4; +} + :is(a).color-violet-400 { text-decoration-color: #a780d4 !important; } @@ -4718,6 +5274,12 @@ fieldset.keypair, fieldset.tresor { background-color: #b290d9; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-350.outline, +[type=reset].button-violet-350.outline { + background-color: transparent; + color: #b290d9; +} + :is(a).color-violet-350 { text-decoration-color: #b290d9 !important; } @@ -4733,6 +5295,12 @@ fieldset.keypair, fieldset.tresor { background-color: #bd9fdf; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-300.outline, +[type=reset].button-violet-300.outline { + background-color: transparent; + color: #bd9fdf; +} + :is(a).color-violet-300 { text-decoration-color: #bd9fdf !important; } @@ -4748,6 +5316,12 @@ fieldset.keypair, fieldset.tresor { background-color: #c9afe4; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-250.outline, +[type=reset].button-violet-250.outline { + background-color: transparent; + color: #c9afe4; +} + :is(a).color-violet-250 { text-decoration-color: #c9afe4 !important; } @@ -4763,6 +5337,12 @@ fieldset.keypair, fieldset.tresor { background-color: #d3bfe8; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-200.outline, +[type=reset].button-violet-200.outline { + background-color: transparent; + color: #d3bfe8; +} + :is(a).color-violet-200 { text-decoration-color: #d3bfe8 !important; } @@ -4778,6 +5358,12 @@ fieldset.keypair, fieldset.tresor { background-color: #decfed; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-150.outline, +[type=reset].button-violet-150.outline { + background-color: transparent; + color: #decfed; +} + :is(a).color-violet-150 { text-decoration-color: #decfed !important; } @@ -4793,6 +5379,12 @@ fieldset.keypair, fieldset.tresor { background-color: #e8dff2; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-100.outline, +[type=reset].button-violet-100.outline { + background-color: transparent; + color: #e8dff2; +} + :is(a).color-violet-100 { text-decoration-color: #e8dff2 !important; } @@ -4808,6 +5400,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f3eff7; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-50.outline, +[type=reset].button-violet-50.outline { + background-color: transparent; + color: #f3eff7; +} + :is(a).color-violet-50 { text-decoration-color: #f3eff7 !important; } @@ -4823,6 +5421,12 @@ fieldset.keypair, fieldset.tresor { background-color: #7540bf; } +:is(button, [type=submit], [type=button], [role=button]).button-violet-main.outline, +[type=reset].button-violet-main.outline { + background-color: transparent; + color: #7540bf; +} + :is(a).color-violet-main { text-decoration-color: #7540bf !important; } @@ -4838,6 +5442,12 @@ fieldset.keypair, fieldset.tresor { background-color: #110b31; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-950.outline, +[type=reset].button-indigo-950.outline { + background-color: transparent; + color: #110b31; +} + :is(a).color-indigo-950 { text-decoration-color: #110b31 !important; } @@ -4853,6 +5463,12 @@ fieldset.keypair, fieldset.tresor { background-color: #181546; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-900.outline, +[type=reset].button-indigo-900.outline { + background-color: transparent; + color: #181546; +} + :is(a).color-indigo-900 { text-decoration-color: #181546 !important; } @@ -4868,6 +5484,12 @@ fieldset.keypair, fieldset.tresor { background-color: #1f1e5e; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-850.outline, +[type=reset].button-indigo-850.outline { + background-color: transparent; + color: #1f1e5e; +} + :is(a).color-indigo-850 { text-decoration-color: #1f1e5e !important; } @@ -4883,6 +5505,12 @@ fieldset.keypair, fieldset.tresor { background-color: #272678; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-800.outline, +[type=reset].button-indigo-800.outline { + background-color: transparent; + color: #272678; +} + :is(a).color-indigo-800 { text-decoration-color: #272678 !important; } @@ -4898,6 +5526,12 @@ fieldset.keypair, fieldset.tresor { background-color: #2f2f92; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-750.outline, +[type=reset].button-indigo-750.outline { + background-color: transparent; + color: #2f2f92; +} + :is(a).color-indigo-750 { text-decoration-color: #2f2f92 !important; } @@ -4913,6 +5547,12 @@ fieldset.keypair, fieldset.tresor { background-color: #3838ab; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-700.outline, +[type=reset].button-indigo-700.outline { + background-color: transparent; + color: #3838ab; +} + :is(a).color-indigo-700 { text-decoration-color: #3838ab !important; } @@ -4928,6 +5568,12 @@ fieldset.keypair, fieldset.tresor { background-color: #4040bf; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-650.outline, +[type=reset].button-indigo-650.outline { + background-color: transparent; + color: #4040bf; +} + :is(a).color-indigo-650 { text-decoration-color: #4040bf !important; } @@ -4943,6 +5589,12 @@ fieldset.keypair, fieldset.tresor { background-color: #524ed2; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-600.outline, +[type=reset].button-indigo-600.outline { + background-color: transparent; + color: #524ed2; +} + :is(a).color-indigo-600 { text-decoration-color: #524ed2 !important; } @@ -4958,6 +5610,12 @@ fieldset.keypair, fieldset.tresor { background-color: #655cd6; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-550.outline, +[type=reset].button-indigo-550.outline { + background-color: transparent; + color: #655cd6; +} + :is(a).color-indigo-550 { text-decoration-color: #655cd6 !important; } @@ -4974,6 +5632,13 @@ fieldset.keypair, fieldset.tresor { background-color: #7569da; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-500.outline, .button-indigo:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-indigo-500.outline, +[type=reset].outline.button-indigo { + background-color: transparent; + color: #7569da; +} + :is(a).color-indigo-500, .color-indigo:is(a) { text-decoration-color: #7569da !important; } @@ -4989,6 +5654,12 @@ fieldset.keypair, fieldset.tresor { background-color: #8577dd; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-450.outline, +[type=reset].button-indigo-450.outline { + background-color: transparent; + color: #8577dd; +} + :is(a).color-indigo-450 { text-decoration-color: #8577dd !important; } @@ -5004,6 +5675,12 @@ fieldset.keypair, fieldset.tresor { background-color: #9486e1; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-400.outline, +[type=reset].button-indigo-400.outline { + background-color: transparent; + color: #9486e1; +} + :is(a).color-indigo-400 { text-decoration-color: #9486e1 !important; } @@ -5019,6 +5696,12 @@ fieldset.keypair, fieldset.tresor { background-color: #a294e5; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-350.outline, +[type=reset].button-indigo-350.outline { + background-color: transparent; + color: #a294e5; +} + :is(a).color-indigo-350 { text-decoration-color: #a294e5 !important; } @@ -5034,6 +5717,12 @@ fieldset.keypair, fieldset.tresor { background-color: #b0a3e8; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-300.outline, +[type=reset].button-indigo-300.outline { + background-color: transparent; + color: #b0a3e8; +} + :is(a).color-indigo-300 { text-decoration-color: #b0a3e8 !important; } @@ -5049,6 +5738,12 @@ fieldset.keypair, fieldset.tresor { background-color: #bdb2ec; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-250.outline, +[type=reset].button-indigo-250.outline { + background-color: transparent; + color: #bdb2ec; +} + :is(a).color-indigo-250 { text-decoration-color: #bdb2ec !important; } @@ -5064,6 +5759,12 @@ fieldset.keypair, fieldset.tresor { background-color: #cac1ee; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-200.outline, +[type=reset].button-indigo-200.outline { + background-color: transparent; + color: #cac1ee; +} + :is(a).color-indigo-200 { text-decoration-color: #cac1ee !important; } @@ -5079,6 +5780,12 @@ fieldset.keypair, fieldset.tresor { background-color: #d8d0f1; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-150.outline, +[type=reset].button-indigo-150.outline { + background-color: transparent; + color: #d8d0f1; +} + :is(a).color-indigo-150 { text-decoration-color: #d8d0f1 !important; } @@ -5094,6 +5801,12 @@ fieldset.keypair, fieldset.tresor { background-color: #e5e0f4; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-100.outline, +[type=reset].button-indigo-100.outline { + background-color: transparent; + color: #e5e0f4; +} + :is(a).color-indigo-100 { text-decoration-color: #e5e0f4 !important; } @@ -5109,6 +5822,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f2f0f9; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-50.outline, +[type=reset].button-indigo-50.outline { + background-color: transparent; + color: #f2f0f9; +} + :is(a).color-indigo-50 { text-decoration-color: #f2f0f9 !important; } @@ -5124,6 +5843,12 @@ fieldset.keypair, fieldset.tresor { background-color: #524ed2; } +:is(button, [type=submit], [type=button], [role=button]).button-indigo-main.outline, +[type=reset].button-indigo-main.outline { + background-color: transparent; + color: #524ed2; +} + :is(a).color-indigo-main { text-decoration-color: #524ed2 !important; } @@ -5139,6 +5864,12 @@ fieldset.keypair, fieldset.tresor { background-color: #080f2d; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-950.outline, +[type=reset].button-blue-950.outline { + background-color: transparent; + color: #080f2d; +} + :is(a).color-blue-950 { text-decoration-color: #080f2d !important; } @@ -5154,6 +5885,12 @@ fieldset.keypair, fieldset.tresor { background-color: #0c1a41; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-900.outline, +[type=reset].button-blue-900.outline { + background-color: transparent; + color: #0c1a41; +} + :is(a).color-blue-900 { text-decoration-color: #0c1a41 !important; } @@ -5169,6 +5906,12 @@ fieldset.keypair, fieldset.tresor { background-color: #0e2358; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-850.outline, +[type=reset].button-blue-850.outline { + background-color: transparent; + color: #0e2358; +} + :is(a).color-blue-850 { text-decoration-color: #0e2358 !important; } @@ -5184,6 +5927,12 @@ fieldset.keypair, fieldset.tresor { background-color: #0f2d70; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-800.outline, +[type=reset].button-blue-800.outline { + background-color: transparent; + color: #0f2d70; +} + :is(a).color-blue-800 { text-decoration-color: #0f2d70 !important; } @@ -5199,6 +5948,12 @@ fieldset.keypair, fieldset.tresor { background-color: #0f3888; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-750.outline, +[type=reset].button-blue-750.outline { + background-color: transparent; + color: #0f3888; +} + :is(a).color-blue-750 { text-decoration-color: #0f3888 !important; } @@ -5214,6 +5969,12 @@ fieldset.keypair, fieldset.tresor { background-color: #1343a0; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-700.outline, +[type=reset].button-blue-700.outline { + background-color: transparent; + color: #1343a0; +} + :is(a).color-blue-700 { text-decoration-color: #1343a0 !important; } @@ -5229,6 +5990,12 @@ fieldset.keypair, fieldset.tresor { background-color: #184eb8; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-650.outline, +[type=reset].button-blue-650.outline { + background-color: transparent; + color: #184eb8; +} + :is(a).color-blue-650 { text-decoration-color: #184eb8 !important; } @@ -5244,6 +6011,12 @@ fieldset.keypair, fieldset.tresor { background-color: #1d59d0; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-600.outline, +[type=reset].button-blue-600.outline { + background-color: transparent; + color: #1d59d0; +} + :is(a).color-blue-600 { text-decoration-color: #1d59d0 !important; } @@ -5259,6 +6032,12 @@ fieldset.keypair, fieldset.tresor { background-color: #2060df; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-550.outline, +[type=reset].button-blue-550.outline { + background-color: transparent; + color: #2060df; +} + :is(a).color-blue-550 { text-decoration-color: #2060df !important; } @@ -5275,6 +6054,13 @@ fieldset.keypair, fieldset.tresor { background-color: #3c71f7; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-500.outline, .button-blue:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-blue-500.outline, +[type=reset].outline.button-blue { + background-color: transparent; + color: #3c71f7; +} + :is(a).color-blue-500, .color-blue:is(a) { text-decoration-color: #3c71f7 !important; } @@ -5290,6 +6076,12 @@ fieldset.keypair, fieldset.tresor { background-color: #5c7ef8; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-450.outline, +[type=reset].button-blue-450.outline { + background-color: transparent; + color: #5c7ef8; +} + :is(a).color-blue-450 { text-decoration-color: #5c7ef8 !important; } @@ -5305,6 +6097,12 @@ fieldset.keypair, fieldset.tresor { background-color: #748bf8; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-400.outline, +[type=reset].button-blue-400.outline { + background-color: transparent; + color: #748bf8; +} + :is(a).color-blue-400 { text-decoration-color: #748bf8 !important; } @@ -5320,6 +6118,12 @@ fieldset.keypair, fieldset.tresor { background-color: #8999f9; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-350.outline, +[type=reset].button-blue-350.outline { + background-color: transparent; + color: #8999f9; +} + :is(a).color-blue-350 { text-decoration-color: #8999f9 !important; } @@ -5335,6 +6139,12 @@ fieldset.keypair, fieldset.tresor { background-color: #9ca7fa; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-300.outline, +[type=reset].button-blue-300.outline { + background-color: transparent; + color: #9ca7fa; +} + :is(a).color-blue-300 { text-decoration-color: #9ca7fa !important; } @@ -5350,6 +6160,12 @@ fieldset.keypair, fieldset.tresor { background-color: #aeb5fb; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-250.outline, +[type=reset].button-blue-250.outline { + background-color: transparent; + color: #aeb5fb; +} + :is(a).color-blue-250 { text-decoration-color: #aeb5fb !important; } @@ -5365,6 +6181,12 @@ fieldset.keypair, fieldset.tresor { background-color: #bfc3fa; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-200.outline, +[type=reset].button-blue-200.outline { + background-color: transparent; + color: #bfc3fa; +} + :is(a).color-blue-200 { text-decoration-color: #bfc3fa !important; } @@ -5380,6 +6202,12 @@ fieldset.keypair, fieldset.tresor { background-color: #d0d2fa; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-150.outline, +[type=reset].button-blue-150.outline { + background-color: transparent; + color: #d0d2fa; +} + :is(a).color-blue-150 { text-decoration-color: #d0d2fa !important; } @@ -5395,6 +6223,12 @@ fieldset.keypair, fieldset.tresor { background-color: #e0e1fa; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-100.outline, +[type=reset].button-blue-100.outline { + background-color: transparent; + color: #e0e1fa; +} + :is(a).color-blue-100 { text-decoration-color: #e0e1fa !important; } @@ -5410,6 +6244,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f0f0fb; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-50.outline, +[type=reset].button-blue-50.outline { + background-color: transparent; + color: #f0f0fb; +} + :is(a).color-blue-50 { text-decoration-color: #f0f0fb !important; } @@ -5425,6 +6265,12 @@ fieldset.keypair, fieldset.tresor { background-color: #2060df; } +:is(button, [type=submit], [type=button], [role=button]).button-blue-main.outline, +[type=reset].button-blue-main.outline { + background-color: transparent; + color: #2060df; +} + :is(a).color-blue-main { text-decoration-color: #2060df !important; } @@ -5440,6 +6286,12 @@ fieldset.keypair, fieldset.tresor { background-color: #04121d; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-950.outline, +[type=reset].button-azure-950.outline { + background-color: transparent; + color: #04121d; +} + :is(a).color-azure-950 { text-decoration-color: #04121d !important; } @@ -5455,6 +6307,12 @@ fieldset.keypair, fieldset.tresor { background-color: #061e2f; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-900.outline, +[type=reset].button-azure-900.outline { + background-color: transparent; + color: #061e2f; +} + :is(a).color-azure-900 { text-decoration-color: #061e2f !important; } @@ -5470,6 +6328,12 @@ fieldset.keypair, fieldset.tresor { background-color: #052940; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-850.outline, +[type=reset].button-azure-850.outline { + background-color: transparent; + color: #052940; +} + :is(a).color-azure-850 { text-decoration-color: #052940 !important; } @@ -5485,6 +6349,12 @@ fieldset.keypair, fieldset.tresor { background-color: #033452; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-800.outline, +[type=reset].button-azure-800.outline { + background-color: transparent; + color: #033452; +} + :is(a).color-azure-800 { text-decoration-color: #033452 !important; } @@ -5500,6 +6370,12 @@ fieldset.keypair, fieldset.tresor { background-color: #014063; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-750.outline, +[type=reset].button-azure-750.outline { + background-color: transparent; + color: #014063; +} + :is(a).color-azure-750 { text-decoration-color: #014063 !important; } @@ -5515,6 +6391,12 @@ fieldset.keypair, fieldset.tresor { background-color: #014c75; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-700.outline, +[type=reset].button-azure-700.outline { + background-color: transparent; + color: #014c75; +} + :is(a).color-azure-700 { text-decoration-color: #014c75 !important; } @@ -5530,6 +6412,12 @@ fieldset.keypair, fieldset.tresor { background-color: #015887; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-650.outline, +[type=reset].button-azure-650.outline { + background-color: transparent; + color: #015887; +} + :is(a).color-azure-650 { text-decoration-color: #015887 !important; } @@ -5545,6 +6433,12 @@ fieldset.keypair, fieldset.tresor { background-color: #02659a; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-600.outline, +[type=reset].button-azure-600.outline { + background-color: transparent; + color: #02659a; +} + :is(a).color-azure-600 { text-decoration-color: #02659a !important; } @@ -5560,6 +6454,12 @@ fieldset.keypair, fieldset.tresor { background-color: #0172ad; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-550.outline, +[type=reset].button-azure-550.outline { + background-color: transparent; + color: #0172ad; +} + :is(a).color-azure-550 { text-decoration-color: #0172ad !important; } @@ -5576,6 +6476,13 @@ fieldset.keypair, fieldset.tresor { background-color: #017fc0; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-500.outline, .button-azure:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-azure-500.outline, +[type=reset].outline.button-azure { + background-color: transparent; + color: #017fc0; +} + :is(a).color-azure-500, .color-azure:is(a) { text-decoration-color: #017fc0 !important; } @@ -5591,6 +6498,12 @@ fieldset.keypair, fieldset.tresor { background-color: #018cd4; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-450.outline, +[type=reset].button-azure-450.outline { + background-color: transparent; + color: #018cd4; +} + :is(a).color-azure-450 { text-decoration-color: #018cd4 !important; } @@ -5606,6 +6519,12 @@ fieldset.keypair, fieldset.tresor { background-color: #029ae8; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-400.outline, +[type=reset].button-azure-400.outline { + background-color: transparent; + color: #029ae8; +} + :is(a).color-azure-400 { text-decoration-color: #029ae8 !important; } @@ -5621,6 +6540,12 @@ fieldset.keypair, fieldset.tresor { background-color: #01aaff; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-350.outline, +[type=reset].button-azure-350.outline { + background-color: transparent; + color: #01aaff; +} + :is(a).color-azure-350 { text-decoration-color: #01aaff !important; } @@ -5636,6 +6561,12 @@ fieldset.keypair, fieldset.tresor { background-color: #51b4ff; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-300.outline, +[type=reset].button-azure-300.outline { + background-color: transparent; + color: #51b4ff; +} + :is(a).color-azure-300 { text-decoration-color: #51b4ff !important; } @@ -5651,6 +6582,12 @@ fieldset.keypair, fieldset.tresor { background-color: #79c0ff; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-250.outline, +[type=reset].button-azure-250.outline { + background-color: transparent; + color: #79c0ff; +} + :is(a).color-azure-250 { text-decoration-color: #79c0ff !important; } @@ -5666,6 +6603,12 @@ fieldset.keypair, fieldset.tresor { background-color: #9bccfd; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-200.outline, +[type=reset].button-azure-200.outline { + background-color: transparent; + color: #9bccfd; +} + :is(a).color-azure-200 { text-decoration-color: #9bccfd !important; } @@ -5681,6 +6624,12 @@ fieldset.keypair, fieldset.tresor { background-color: #b7d9fc; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-150.outline, +[type=reset].button-azure-150.outline { + background-color: transparent; + color: #b7d9fc; +} + :is(a).color-azure-150 { text-decoration-color: #b7d9fc !important; } @@ -5696,6 +6645,12 @@ fieldset.keypair, fieldset.tresor { background-color: #d1e5fb; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-100.outline, +[type=reset].button-azure-100.outline { + background-color: transparent; + color: #d1e5fb; +} + :is(a).color-azure-100 { text-decoration-color: #d1e5fb !important; } @@ -5711,6 +6666,12 @@ fieldset.keypair, fieldset.tresor { background-color: #e9f2fc; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-50.outline, +[type=reset].button-azure-50.outline { + background-color: transparent; + color: #e9f2fc; +} + :is(a).color-azure-50 { text-decoration-color: #e9f2fc !important; } @@ -5726,6 +6687,12 @@ fieldset.keypair, fieldset.tresor { background-color: #0172ad; } +:is(button, [type=submit], [type=button], [role=button]).button-azure-main.outline, +[type=reset].button-azure-main.outline { + background-color: transparent; + color: #0172ad; +} + :is(a).color-azure-main { text-decoration-color: #0172ad !important; } @@ -5741,6 +6708,12 @@ fieldset.keypair, fieldset.tresor { background-color: #041413; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-950.outline, +[type=reset].button-cyan-950.outline { + background-color: transparent; + color: #041413; +} + :is(a).color-cyan-950 { text-decoration-color: #041413 !important; } @@ -5756,6 +6729,12 @@ fieldset.keypair, fieldset.tresor { background-color: #051f1f; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-900.outline, +[type=reset].button-cyan-900.outline { + background-color: transparent; + color: #051f1f; +} + :is(a).color-cyan-900 { text-decoration-color: #051f1f !important; } @@ -5771,6 +6750,12 @@ fieldset.keypair, fieldset.tresor { background-color: #052b2b; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-850.outline, +[type=reset].button-cyan-850.outline { + background-color: transparent; + color: #052b2b; +} + :is(a).color-cyan-850 { text-decoration-color: #052b2b !important; } @@ -5786,6 +6771,12 @@ fieldset.keypair, fieldset.tresor { background-color: #043737; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-800.outline, +[type=reset].button-cyan-800.outline { + background-color: transparent; + color: #043737; +} + :is(a).color-cyan-800 { text-decoration-color: #043737 !important; } @@ -5801,6 +6792,12 @@ fieldset.keypair, fieldset.tresor { background-color: #014343; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-750.outline, +[type=reset].button-cyan-750.outline { + background-color: transparent; + color: #014343; +} + :is(a).color-cyan-750 { text-decoration-color: #014343 !important; } @@ -5816,6 +6813,12 @@ fieldset.keypair, fieldset.tresor { background-color: #015050; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-700.outline, +[type=reset].button-cyan-700.outline { + background-color: transparent; + color: #015050; +} + :is(a).color-cyan-700 { text-decoration-color: #015050 !important; } @@ -5831,6 +6834,12 @@ fieldset.keypair, fieldset.tresor { background-color: #025d5d; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-650.outline, +[type=reset].button-cyan-650.outline { + background-color: transparent; + color: #025d5d; +} + :is(a).color-cyan-650 { text-decoration-color: #025d5d !important; } @@ -5846,6 +6855,12 @@ fieldset.keypair, fieldset.tresor { background-color: #046a6a; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-600.outline, +[type=reset].button-cyan-600.outline { + background-color: transparent; + color: #046a6a; +} + :is(a).color-cyan-600 { text-decoration-color: #046a6a !important; } @@ -5861,6 +6876,12 @@ fieldset.keypair, fieldset.tresor { background-color: #047878; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-550.outline, +[type=reset].button-cyan-550.outline { + background-color: transparent; + color: #047878; +} + :is(a).color-cyan-550 { text-decoration-color: #047878 !important; } @@ -5877,6 +6898,13 @@ fieldset.keypair, fieldset.tresor { background-color: #058686; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-500.outline, .button-cyan:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-cyan-500.outline, +[type=reset].outline.button-cyan { + background-color: transparent; + color: #058686; +} + :is(a).color-cyan-500, .color-cyan:is(a) { text-decoration-color: #058686 !important; } @@ -5892,6 +6920,12 @@ fieldset.keypair, fieldset.tresor { background-color: #059494; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-450.outline, +[type=reset].button-cyan-450.outline { + background-color: transparent; + color: #059494; +} + :is(a).color-cyan-450 { text-decoration-color: #059494 !important; } @@ -5907,6 +6941,12 @@ fieldset.keypair, fieldset.tresor { background-color: #05a2a2; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-400.outline, +[type=reset].button-cyan-400.outline { + background-color: transparent; + color: #05a2a2; +} + :is(a).color-cyan-400 { text-decoration-color: #05a2a2 !important; } @@ -5922,6 +6962,12 @@ fieldset.keypair, fieldset.tresor { background-color: #0ab1b1; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-350.outline, +[type=reset].button-cyan-350.outline { + background-color: transparent; + color: #0ab1b1; +} + :is(a).color-cyan-350 { text-decoration-color: #0ab1b1 !important; } @@ -5937,6 +6983,12 @@ fieldset.keypair, fieldset.tresor { background-color: #0ac2c2; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-300.outline, +[type=reset].button-cyan-300.outline { + background-color: transparent; + color: #0ac2c2; +} + :is(a).color-cyan-300 { text-decoration-color: #0ac2c2 !important; } @@ -5952,6 +7004,12 @@ fieldset.keypair, fieldset.tresor { background-color: #0ccece; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-250.outline, +[type=reset].button-cyan-250.outline { + background-color: transparent; + color: #0ccece; +} + :is(a).color-cyan-250 { text-decoration-color: #0ccece !important; } @@ -5967,6 +7025,12 @@ fieldset.keypair, fieldset.tresor { background-color: #25dddd; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-200.outline, +[type=reset].button-cyan-200.outline { + background-color: transparent; + color: #25dddd; +} + :is(a).color-cyan-200 { text-decoration-color: #25dddd !important; } @@ -5982,6 +7046,12 @@ fieldset.keypair, fieldset.tresor { background-color: #3deceb; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-150.outline, +[type=reset].button-cyan-150.outline { + background-color: transparent; + color: #3deceb; +} + :is(a).color-cyan-150 { text-decoration-color: #3deceb !important; } @@ -5997,6 +7067,12 @@ fieldset.keypair, fieldset.tresor { background-color: #58faf9; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-100.outline, +[type=reset].button-cyan-100.outline { + background-color: transparent; + color: #58faf9; +} + :is(a).color-cyan-100 { text-decoration-color: #58faf9 !important; } @@ -6012,6 +7088,12 @@ fieldset.keypair, fieldset.tresor { background-color: #c3fcfa; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-50.outline, +[type=reset].button-cyan-50.outline { + background-color: transparent; + color: #c3fcfa; +} + :is(a).color-cyan-50 { text-decoration-color: #c3fcfa !important; } @@ -6027,6 +7109,12 @@ fieldset.keypair, fieldset.tresor { background-color: #047878; } +:is(button, [type=submit], [type=button], [role=button]).button-cyan-main.outline, +[type=reset].button-cyan-main.outline { + background-color: transparent; + color: #047878; +} + :is(a).color-cyan-main { text-decoration-color: #047878 !important; } @@ -6042,6 +7130,12 @@ fieldset.keypair, fieldset.tresor { background-color: #04140c; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-950.outline, +[type=reset].button-jade-950.outline { + background-color: transparent; + color: #04140c; +} + :is(a).color-jade-950 { text-decoration-color: #04140c !important; } @@ -6057,6 +7151,12 @@ fieldset.keypair, fieldset.tresor { background-color: #052014; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-900.outline, +[type=reset].button-jade-900.outline { + background-color: transparent; + color: #052014; +} + :is(a).color-jade-900 { text-decoration-color: #052014 !important; } @@ -6072,6 +7172,12 @@ fieldset.keypair, fieldset.tresor { background-color: #042c1b; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-850.outline, +[type=reset].button-jade-850.outline { + background-color: transparent; + color: #042c1b; +} + :is(a).color-jade-850 { text-decoration-color: #042c1b !important; } @@ -6087,6 +7193,12 @@ fieldset.keypair, fieldset.tresor { background-color: #033823; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-800.outline, +[type=reset].button-jade-800.outline { + background-color: transparent; + color: #033823; +} + :is(a).color-jade-800 { text-decoration-color: #033823 !important; } @@ -6102,6 +7214,12 @@ fieldset.keypair, fieldset.tresor { background-color: #00452b; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-750.outline, +[type=reset].button-jade-750.outline { + background-color: transparent; + color: #00452b; +} + :is(a).color-jade-750 { text-decoration-color: #00452b !important; } @@ -6117,6 +7235,12 @@ fieldset.keypair, fieldset.tresor { background-color: #015234; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-700.outline, +[type=reset].button-jade-700.outline { + background-color: transparent; + color: #015234; +} + :is(a).color-jade-700 { text-decoration-color: #015234 !important; } @@ -6132,6 +7256,12 @@ fieldset.keypair, fieldset.tresor { background-color: #005f3d; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-650.outline, +[type=reset].button-jade-650.outline { + background-color: transparent; + color: #005f3d; +} + :is(a).color-jade-650 { text-decoration-color: #005f3d !important; } @@ -6147,6 +7277,12 @@ fieldset.keypair, fieldset.tresor { background-color: #006d46; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-600.outline, +[type=reset].button-jade-600.outline { + background-color: transparent; + color: #006d46; +} + :is(a).color-jade-600 { text-decoration-color: #006d46 !important; } @@ -6162,6 +7298,12 @@ fieldset.keypair, fieldset.tresor { background-color: #007a50; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-550.outline, +[type=reset].button-jade-550.outline { + background-color: transparent; + color: #007a50; +} + :is(a).color-jade-550 { text-decoration-color: #007a50 !important; } @@ -6178,6 +7320,13 @@ fieldset.keypair, fieldset.tresor { background-color: #00895a; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-500.outline, .button-jade:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-jade-500.outline, +[type=reset].outline.button-jade { + background-color: transparent; + color: #00895a; +} + :is(a).color-jade-500, .color-jade:is(a) { text-decoration-color: #00895a !important; } @@ -6193,6 +7342,12 @@ fieldset.keypair, fieldset.tresor { background-color: #029764; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-450.outline, +[type=reset].button-jade-450.outline { + background-color: transparent; + color: #029764; +} + :is(a).color-jade-450 { text-decoration-color: #029764 !important; } @@ -6208,6 +7363,12 @@ fieldset.keypair, fieldset.tresor { background-color: #00a66e; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-400.outline, +[type=reset].button-jade-400.outline { + background-color: transparent; + color: #00a66e; +} + :is(a).color-jade-400 { text-decoration-color: #00a66e !important; } @@ -6223,6 +7384,12 @@ fieldset.keypair, fieldset.tresor { background-color: #00b478; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-350.outline, +[type=reset].button-jade-350.outline { + background-color: transparent; + color: #00b478; +} + :is(a).color-jade-350 { text-decoration-color: #00b478 !important; } @@ -6238,6 +7405,12 @@ fieldset.keypair, fieldset.tresor { background-color: #00c482; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-300.outline, +[type=reset].button-jade-300.outline { + background-color: transparent; + color: #00c482; +} + :is(a).color-jade-300 { text-decoration-color: #00c482 !important; } @@ -6253,6 +7426,12 @@ fieldset.keypair, fieldset.tresor { background-color: #00cc88; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-250.outline, +[type=reset].button-jade-250.outline { + background-color: transparent; + color: #00cc88; +} + :is(a).color-jade-250 { text-decoration-color: #00cc88 !important; } @@ -6268,6 +7447,12 @@ fieldset.keypair, fieldset.tresor { background-color: #21e299; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-200.outline, +[type=reset].button-jade-200.outline { + background-color: transparent; + color: #21e299; +} + :is(a).color-jade-200 { text-decoration-color: #21e299 !important; } @@ -6283,6 +7468,12 @@ fieldset.keypair, fieldset.tresor { background-color: #39f1a6; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-150.outline, +[type=reset].button-jade-150.outline { + background-color: transparent; + color: #39f1a6; +} + :is(a).color-jade-150 { text-decoration-color: #39f1a6 !important; } @@ -6298,6 +7489,12 @@ fieldset.keypair, fieldset.tresor { background-color: #70fcba; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-100.outline, +[type=reset].button-jade-100.outline { + background-color: transparent; + color: #70fcba; +} + :is(a).color-jade-100 { text-decoration-color: #70fcba !important; } @@ -6313,6 +7510,12 @@ fieldset.keypair, fieldset.tresor { background-color: #cbfce1; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-50.outline, +[type=reset].button-jade-50.outline { + background-color: transparent; + color: #cbfce1; +} + :is(a).color-jade-50 { text-decoration-color: #cbfce1 !important; } @@ -6328,6 +7531,12 @@ fieldset.keypair, fieldset.tresor { background-color: #007a50; } +:is(button, [type=submit], [type=button], [role=button]).button-jade-main.outline, +[type=reset].button-jade-main.outline { + background-color: transparent; + color: #007a50; +} + :is(a).color-jade-main { text-decoration-color: #007a50 !important; } @@ -6343,6 +7552,12 @@ fieldset.keypair, fieldset.tresor { background-color: #0b1305; } +:is(button, [type=submit], [type=button], [role=button]).button-green-950.outline, +[type=reset].button-green-950.outline { + background-color: transparent; + color: #0b1305; +} + :is(a).color-green-950 { text-decoration-color: #0b1305 !important; } @@ -6358,6 +7573,12 @@ fieldset.keypair, fieldset.tresor { background-color: #131f07; } +:is(button, [type=submit], [type=button], [role=button]).button-green-900.outline, +[type=reset].button-green-900.outline { + background-color: transparent; + color: #131f07; +} + :is(a).color-green-900 { text-decoration-color: #131f07 !important; } @@ -6373,6 +7594,12 @@ fieldset.keypair, fieldset.tresor { background-color: #152b07; } +:is(button, [type=submit], [type=button], [role=button]).button-green-850.outline, +[type=reset].button-green-850.outline { + background-color: transparent; + color: #152b07; +} + :is(a).color-green-850 { text-decoration-color: #152b07 !important; } @@ -6388,6 +7615,12 @@ fieldset.keypair, fieldset.tresor { background-color: #173806; } +:is(button, [type=submit], [type=button], [role=button]).button-green-800.outline, +[type=reset].button-green-800.outline { + background-color: transparent; + color: #173806; +} + :is(a).color-green-800 { text-decoration-color: #173806 !important; } @@ -6403,6 +7636,12 @@ fieldset.keypair, fieldset.tresor { background-color: #1a4405; } +:is(button, [type=submit], [type=button], [role=button]).button-green-750.outline, +[type=reset].button-green-750.outline { + background-color: transparent; + color: #1a4405; +} + :is(a).color-green-750 { text-decoration-color: #1a4405 !important; } @@ -6418,6 +7657,12 @@ fieldset.keypair, fieldset.tresor { background-color: #205107; } +:is(button, [type=submit], [type=button], [role=button]).button-green-700.outline, +[type=reset].button-green-700.outline { + background-color: transparent; + color: #205107; +} + :is(a).color-green-700 { text-decoration-color: #205107 !important; } @@ -6433,6 +7678,12 @@ fieldset.keypair, fieldset.tresor { background-color: #265e09; } +:is(button, [type=submit], [type=button], [role=button]).button-green-650.outline, +[type=reset].button-green-650.outline { + background-color: transparent; + color: #265e09; +} + :is(a).color-green-650 { text-decoration-color: #265e09 !important; } @@ -6448,6 +7699,12 @@ fieldset.keypair, fieldset.tresor { background-color: #2c6c0c; } +:is(button, [type=submit], [type=button], [role=button]).button-green-600.outline, +[type=reset].button-green-600.outline { + background-color: transparent; + color: #2c6c0c; +} + :is(a).color-green-600 { text-decoration-color: #2c6c0c !important; } @@ -6463,6 +7720,12 @@ fieldset.keypair, fieldset.tresor { background-color: #33790f; } +:is(button, [type=submit], [type=button], [role=button]).button-green-550.outline, +[type=reset].button-green-550.outline { + background-color: transparent; + color: #33790f; +} + :is(a).color-green-550 { text-decoration-color: #33790f !important; } @@ -6479,6 +7742,13 @@ fieldset.keypair, fieldset.tresor { background-color: #398712; } +:is(button, [type=submit], [type=button], [role=button]).button-green-500.outline, .button-green:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-green-500.outline, +[type=reset].outline.button-green { + background-color: transparent; + color: #398712; +} + :is(a).color-green-500, .color-green:is(a) { text-decoration-color: #398712 !important; } @@ -6494,6 +7764,12 @@ fieldset.keypair, fieldset.tresor { background-color: #409614; } +:is(button, [type=submit], [type=button], [role=button]).button-green-450.outline, +[type=reset].button-green-450.outline { + background-color: transparent; + color: #409614; +} + :is(a).color-green-450 { text-decoration-color: #409614 !important; } @@ -6509,6 +7785,12 @@ fieldset.keypair, fieldset.tresor { background-color: #47a417; } +:is(button, [type=submit], [type=button], [role=button]).button-green-400.outline, +[type=reset].button-green-400.outline { + background-color: transparent; + color: #47a417; +} + :is(a).color-green-400 { text-decoration-color: #47a417 !important; } @@ -6524,6 +7806,12 @@ fieldset.keypair, fieldset.tresor { background-color: #4eb31b; } +:is(button, [type=submit], [type=button], [role=button]).button-green-350.outline, +[type=reset].button-green-350.outline { + background-color: transparent; + color: #4eb31b; +} + :is(a).color-green-350 { text-decoration-color: #4eb31b !important; } @@ -6539,6 +7827,12 @@ fieldset.keypair, fieldset.tresor { background-color: #55c21e; } +:is(button, [type=submit], [type=button], [role=button]).button-green-300.outline, +[type=reset].button-green-300.outline { + background-color: transparent; + color: #55c21e; +} + :is(a).color-green-300 { text-decoration-color: #55c21e !important; } @@ -6554,6 +7848,12 @@ fieldset.keypair, fieldset.tresor { background-color: #5dd121; } +:is(button, [type=submit], [type=button], [role=button]).button-green-250.outline, +[type=reset].button-green-250.outline { + background-color: transparent; + color: #5dd121; +} + :is(a).color-green-250 { text-decoration-color: #5dd121 !important; } @@ -6569,6 +7869,12 @@ fieldset.keypair, fieldset.tresor { background-color: #62d926; } +:is(button, [type=submit], [type=button], [role=button]).button-green-200.outline, +[type=reset].button-green-200.outline { + background-color: transparent; + color: #62d926; +} + :is(a).color-green-200 { text-decoration-color: #62d926 !important; } @@ -6584,6 +7890,12 @@ fieldset.keypair, fieldset.tresor { background-color: #77ef3d; } +:is(button, [type=submit], [type=button], [role=button]).button-green-150.outline, +[type=reset].button-green-150.outline { + background-color: transparent; + color: #77ef3d; +} + :is(a).color-green-150 { text-decoration-color: #77ef3d !important; } @@ -6599,6 +7911,12 @@ fieldset.keypair, fieldset.tresor { background-color: #95fb62; } +:is(button, [type=submit], [type=button], [role=button]).button-green-100.outline, +[type=reset].button-green-100.outline { + background-color: transparent; + color: #95fb62; +} + :is(a).color-green-100 { text-decoration-color: #95fb62 !important; } @@ -6614,6 +7932,12 @@ fieldset.keypair, fieldset.tresor { background-color: #d7fbc1; } +:is(button, [type=submit], [type=button], [role=button]).button-green-50.outline, +[type=reset].button-green-50.outline { + background-color: transparent; + color: #d7fbc1; +} + :is(a).color-green-50 { text-decoration-color: #d7fbc1 !important; } @@ -6629,6 +7953,12 @@ fieldset.keypair, fieldset.tresor { background-color: #398712; } +:is(button, [type=submit], [type=button], [role=button]).button-green-main.outline, +[type=reset].button-green-main.outline { + background-color: transparent; + color: #398712; +} + :is(a).color-green-main { text-decoration-color: #398712 !important; } @@ -6644,6 +7974,12 @@ fieldset.keypair, fieldset.tresor { background-color: #101203; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-950.outline, +[type=reset].button-lime-950.outline { + background-color: transparent; + color: #101203; +} + :is(a).color-lime-950 { text-decoration-color: #101203 !important; } @@ -6659,6 +7995,12 @@ fieldset.keypair, fieldset.tresor { background-color: #191d03; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-900.outline, +[type=reset].button-lime-900.outline { + background-color: transparent; + color: #191d03; +} + :is(a).color-lime-900 { text-decoration-color: #191d03 !important; } @@ -6674,6 +8016,12 @@ fieldset.keypair, fieldset.tresor { background-color: #202902; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-850.outline, +[type=reset].button-lime-850.outline { + background-color: transparent; + color: #202902; +} + :is(a).color-lime-850 { text-decoration-color: #202902 !important; } @@ -6689,6 +8037,12 @@ fieldset.keypair, fieldset.tresor { background-color: #273500; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-800.outline, +[type=reset].button-lime-800.outline { + background-color: transparent; + color: #273500; +} + :is(a).color-lime-800 { text-decoration-color: #273500 !important; } @@ -6704,6 +8058,12 @@ fieldset.keypair, fieldset.tresor { background-color: #304100; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-750.outline, +[type=reset].button-lime-750.outline { + background-color: transparent; + color: #304100; +} + :is(a).color-lime-750 { text-decoration-color: #304100 !important; } @@ -6719,6 +8079,12 @@ fieldset.keypair, fieldset.tresor { background-color: #394d00; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-700.outline, +[type=reset].button-lime-700.outline { + background-color: transparent; + color: #394d00; +} + :is(a).color-lime-700 { text-decoration-color: #394d00 !important; } @@ -6734,6 +8100,12 @@ fieldset.keypair, fieldset.tresor { background-color: #435a00; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-650.outline, +[type=reset].button-lime-650.outline { + background-color: transparent; + color: #435a00; +} + :is(a).color-lime-650 { text-decoration-color: #435a00 !important; } @@ -6749,6 +8121,12 @@ fieldset.keypair, fieldset.tresor { background-color: #4d6600; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-600.outline, +[type=reset].button-lime-600.outline { + background-color: transparent; + color: #4d6600; +} + :is(a).color-lime-600 { text-decoration-color: #4d6600 !important; } @@ -6764,6 +8142,12 @@ fieldset.keypair, fieldset.tresor { background-color: #577400; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-550.outline, +[type=reset].button-lime-550.outline { + background-color: transparent; + color: #577400; +} + :is(a).color-lime-550 { text-decoration-color: #577400 !important; } @@ -6780,6 +8164,13 @@ fieldset.keypair, fieldset.tresor { background-color: #628100; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-500.outline, .button-lime:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-lime-500.outline, +[type=reset].outline.button-lime { + background-color: transparent; + color: #628100; +} + :is(a).color-lime-500, .color-lime:is(a) { text-decoration-color: #628100 !important; } @@ -6795,6 +8186,12 @@ fieldset.keypair, fieldset.tresor { background-color: #6c8f00; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-450.outline, +[type=reset].button-lime-450.outline { + background-color: transparent; + color: #6c8f00; +} + :is(a).color-lime-450 { text-decoration-color: #6c8f00 !important; } @@ -6810,6 +8207,12 @@ fieldset.keypair, fieldset.tresor { background-color: #779c00; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-400.outline, +[type=reset].button-lime-400.outline { + background-color: transparent; + color: #779c00; +} + :is(a).color-lime-400 { text-decoration-color: #779c00 !important; } @@ -6825,6 +8228,12 @@ fieldset.keypair, fieldset.tresor { background-color: #82ab00; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-350.outline, +[type=reset].button-lime-350.outline { + background-color: transparent; + color: #82ab00; +} + :is(a).color-lime-350 { text-decoration-color: #82ab00 !important; } @@ -6840,6 +8249,12 @@ fieldset.keypair, fieldset.tresor { background-color: #8eb901; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-300.outline, +[type=reset].button-lime-300.outline { + background-color: transparent; + color: #8eb901; +} + :is(a).color-lime-300 { text-decoration-color: #8eb901 !important; } @@ -6855,6 +8270,12 @@ fieldset.keypair, fieldset.tresor { background-color: #99c801; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-250.outline, +[type=reset].button-lime-250.outline { + background-color: transparent; + color: #99c801; +} + :is(a).color-lime-250 { text-decoration-color: #99c801 !important; } @@ -6870,6 +8291,12 @@ fieldset.keypair, fieldset.tresor { background-color: #a5d601; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-200.outline, +[type=reset].button-lime-200.outline { + background-color: transparent; + color: #a5d601; +} + :is(a).color-lime-200 { text-decoration-color: #a5d601 !important; } @@ -6885,6 +8312,12 @@ fieldset.keypair, fieldset.tresor { background-color: #b2e51a; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-150.outline, +[type=reset].button-lime-150.outline { + background-color: transparent; + color: #b2e51a; +} + :is(a).color-lime-150 { text-decoration-color: #b2e51a !important; } @@ -6900,6 +8333,12 @@ fieldset.keypair, fieldset.tresor { background-color: #c1f335; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-100.outline, +[type=reset].button-lime-100.outline { + background-color: transparent; + color: #c1f335; +} + :is(a).color-lime-100 { text-decoration-color: #c1f335 !important; } @@ -6915,6 +8354,12 @@ fieldset.keypair, fieldset.tresor { background-color: #defc85; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-50.outline, +[type=reset].button-lime-50.outline { + background-color: transparent; + color: #defc85; +} + :is(a).color-lime-50 { text-decoration-color: #defc85 !important; } @@ -6930,6 +8375,12 @@ fieldset.keypair, fieldset.tresor { background-color: #a5d601; } +:is(button, [type=submit], [type=button], [role=button]).button-lime-main.outline, +[type=reset].button-lime-main.outline { + background-color: transparent; + color: #a5d601; +} + :is(a).color-lime-main { text-decoration-color: #a5d601 !important; } @@ -6945,6 +8396,12 @@ fieldset.keypair, fieldset.tresor { background-color: #141103; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-950.outline, +[type=reset].button-yellow-950.outline { + background-color: transparent; + color: #141103; +} + :is(a).color-yellow-950 { text-decoration-color: #141103 !important; } @@ -6960,6 +8417,12 @@ fieldset.keypair, fieldset.tresor { background-color: #1f1c02; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-900.outline, +[type=reset].button-yellow-900.outline { + background-color: transparent; + color: #1f1c02; +} + :is(a).color-yellow-900 { text-decoration-color: #1f1c02 !important; } @@ -6975,6 +8438,12 @@ fieldset.keypair, fieldset.tresor { background-color: #2b2600; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-850.outline, +[type=reset].button-yellow-850.outline { + background-color: transparent; + color: #2b2600; +} + :is(a).color-yellow-850 { text-decoration-color: #2b2600 !important; } @@ -6990,6 +8459,12 @@ fieldset.keypair, fieldset.tresor { background-color: #363100; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-800.outline, +[type=reset].button-yellow-800.outline { + background-color: transparent; + color: #363100; +} + :is(a).color-yellow-800 { text-decoration-color: #363100 !important; } @@ -7005,6 +8480,12 @@ fieldset.keypair, fieldset.tresor { background-color: #423c00; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-750.outline, +[type=reset].button-yellow-750.outline { + background-color: transparent; + color: #423c00; +} + :is(a).color-yellow-750 { text-decoration-color: #423c00 !important; } @@ -7020,6 +8501,12 @@ fieldset.keypair, fieldset.tresor { background-color: #4e4700; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-700.outline, +[type=reset].button-yellow-700.outline { + background-color: transparent; + color: #4e4700; +} + :is(a).color-yellow-700 { text-decoration-color: #4e4700 !important; } @@ -7035,6 +8522,12 @@ fieldset.keypair, fieldset.tresor { background-color: #5b5300; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-650.outline, +[type=reset].button-yellow-650.outline { + background-color: transparent; + color: #5b5300; +} + :is(a).color-yellow-650 { text-decoration-color: #5b5300 !important; } @@ -7050,6 +8543,12 @@ fieldset.keypair, fieldset.tresor { background-color: #685f00; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-600.outline, +[type=reset].button-yellow-600.outline { + background-color: transparent; + color: #685f00; +} + :is(a).color-yellow-600 { text-decoration-color: #685f00 !important; } @@ -7065,6 +8564,12 @@ fieldset.keypair, fieldset.tresor { background-color: #756b00; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-550.outline, +[type=reset].button-yellow-550.outline { + background-color: transparent; + color: #756b00; +} + :is(a).color-yellow-550 { text-decoration-color: #756b00 !important; } @@ -7081,6 +8586,13 @@ fieldset.keypair, fieldset.tresor { background-color: #827800; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-500.outline, .button-yellow:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-yellow-500.outline, +[type=reset].outline.button-yellow { + background-color: transparent; + color: #827800; +} + :is(a).color-yellow-500, .color-yellow:is(a) { text-decoration-color: #827800 !important; } @@ -7096,6 +8608,12 @@ fieldset.keypair, fieldset.tresor { background-color: #908501; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-450.outline, +[type=reset].button-yellow-450.outline { + background-color: transparent; + color: #908501; +} + :is(a).color-yellow-450 { text-decoration-color: #908501 !important; } @@ -7111,6 +8629,12 @@ fieldset.keypair, fieldset.tresor { background-color: #9e9200; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-400.outline, +[type=reset].button-yellow-400.outline { + background-color: transparent; + color: #9e9200; +} + :is(a).color-yellow-400 { text-decoration-color: #9e9200 !important; } @@ -7126,6 +8650,12 @@ fieldset.keypair, fieldset.tresor { background-color: #ad9f00; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-350.outline, +[type=reset].button-yellow-350.outline { + background-color: transparent; + color: #ad9f00; +} + :is(a).color-yellow-350 { text-decoration-color: #ad9f00 !important; } @@ -7141,6 +8671,12 @@ fieldset.keypair, fieldset.tresor { background-color: #bbac00; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-300.outline, +[type=reset].button-yellow-300.outline { + background-color: transparent; + color: #bbac00; +} + :is(a).color-yellow-300 { text-decoration-color: #bbac00 !important; } @@ -7156,6 +8692,12 @@ fieldset.keypair, fieldset.tresor { background-color: #caba01; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-250.outline, +[type=reset].button-yellow-250.outline { + background-color: transparent; + color: #caba01; +} + :is(a).color-yellow-250 { text-decoration-color: #caba01 !important; } @@ -7171,6 +8713,12 @@ fieldset.keypair, fieldset.tresor { background-color: #d9c800; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-200.outline, +[type=reset].button-yellow-200.outline { + background-color: transparent; + color: #d9c800; +} + :is(a).color-yellow-200 { text-decoration-color: #d9c800 !important; } @@ -7186,6 +8734,12 @@ fieldset.keypair, fieldset.tresor { background-color: #e8d600; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-150.outline, +[type=reset].button-yellow-150.outline { + background-color: transparent; + color: #e8d600; +} + :is(a).color-yellow-150 { text-decoration-color: #e8d600 !important; } @@ -7201,6 +8755,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f2df0d; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-100.outline, +[type=reset].button-yellow-100.outline { + background-color: transparent; + color: #f2df0d; +} + :is(a).color-yellow-100 { text-decoration-color: #f2df0d !important; } @@ -7216,6 +8776,12 @@ fieldset.keypair, fieldset.tresor { background-color: #fdf1b4; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-50.outline, +[type=reset].button-yellow-50.outline { + background-color: transparent; + color: #fdf1b4; +} + :is(a).color-yellow-50 { text-decoration-color: #fdf1b4 !important; } @@ -7231,6 +8797,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f2df0d; } +:is(button, [type=submit], [type=button], [role=button]).button-yellow-main.outline, +[type=reset].button-yellow-main.outline { + background-color: transparent; + color: #f2df0d; +} + :is(a).color-yellow-main { text-decoration-color: #f2df0d !important; } @@ -7246,6 +8818,12 @@ fieldset.keypair, fieldset.tresor { background-color: #161003; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-950.outline, +[type=reset].button-amber-950.outline { + background-color: transparent; + color: #161003; +} + :is(a).color-amber-950 { text-decoration-color: #161003 !important; } @@ -7261,6 +8839,12 @@ fieldset.keypair, fieldset.tresor { background-color: #231a03; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-900.outline, +[type=reset].button-amber-900.outline { + background-color: transparent; + color: #231a03; +} + :is(a).color-amber-900 { text-decoration-color: #231a03 !important; } @@ -7276,6 +8860,12 @@ fieldset.keypair, fieldset.tresor { background-color: #312302; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-850.outline, +[type=reset].button-amber-850.outline { + background-color: transparent; + color: #312302; +} + :is(a).color-amber-850 { text-decoration-color: #312302 !important; } @@ -7291,6 +8881,12 @@ fieldset.keypair, fieldset.tresor { background-color: #3f2d00; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-800.outline, +[type=reset].button-amber-800.outline { + background-color: transparent; + color: #3f2d00; +} + :is(a).color-amber-800 { text-decoration-color: #3f2d00 !important; } @@ -7306,6 +8902,12 @@ fieldset.keypair, fieldset.tresor { background-color: #4d3700; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-750.outline, +[type=reset].button-amber-750.outline { + background-color: transparent; + color: #4d3700; +} + :is(a).color-amber-750 { text-decoration-color: #4d3700 !important; } @@ -7321,6 +8923,12 @@ fieldset.keypair, fieldset.tresor { background-color: #5b4200; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-700.outline, +[type=reset].button-amber-700.outline { + background-color: transparent; + color: #5b4200; +} + :is(a).color-amber-700 { text-decoration-color: #5b4200 !important; } @@ -7336,6 +8944,12 @@ fieldset.keypair, fieldset.tresor { background-color: #694d00; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-650.outline, +[type=reset].button-amber-650.outline { + background-color: transparent; + color: #694d00; +} + :is(a).color-amber-650 { text-decoration-color: #694d00 !important; } @@ -7351,6 +8965,12 @@ fieldset.keypair, fieldset.tresor { background-color: #785800; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-600.outline, +[type=reset].button-amber-600.outline { + background-color: transparent; + color: #785800; +} + :is(a).color-amber-600 { text-decoration-color: #785800 !important; } @@ -7366,6 +8986,12 @@ fieldset.keypair, fieldset.tresor { background-color: #876400; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-550.outline, +[type=reset].button-amber-550.outline { + background-color: transparent; + color: #876400; +} + :is(a).color-amber-550 { text-decoration-color: #876400 !important; } @@ -7382,6 +9008,13 @@ fieldset.keypair, fieldset.tresor { background-color: #977000; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-500.outline, .button-amber:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-amber-500.outline, +[type=reset].outline.button-amber { + background-color: transparent; + color: #977000; +} + :is(a).color-amber-500, .color-amber:is(a) { text-decoration-color: #977000 !important; } @@ -7397,6 +9030,12 @@ fieldset.keypair, fieldset.tresor { background-color: #a77c00; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-450.outline, +[type=reset].button-amber-450.outline { + background-color: transparent; + color: #a77c00; +} + :is(a).color-amber-450 { text-decoration-color: #a77c00 !important; } @@ -7412,6 +9051,12 @@ fieldset.keypair, fieldset.tresor { background-color: #b78800; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-400.outline, +[type=reset].button-amber-400.outline { + background-color: transparent; + color: #b78800; +} + :is(a).color-amber-400 { text-decoration-color: #b78800 !important; } @@ -7427,6 +9072,12 @@ fieldset.keypair, fieldset.tresor { background-color: #c79400; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-350.outline, +[type=reset].button-amber-350.outline { + background-color: transparent; + color: #c79400; +} + :is(a).color-amber-350 { text-decoration-color: #c79400 !important; } @@ -7442,6 +9093,12 @@ fieldset.keypair, fieldset.tresor { background-color: #d8a100; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-300.outline, +[type=reset].button-amber-300.outline { + background-color: transparent; + color: #d8a100; +} + :is(a).color-amber-300 { text-decoration-color: #d8a100 !important; } @@ -7457,6 +9114,12 @@ fieldset.keypair, fieldset.tresor { background-color: #e8ae01; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-250.outline, +[type=reset].button-amber-250.outline { + background-color: transparent; + color: #e8ae01; +} + :is(a).color-amber-250 { text-decoration-color: #e8ae01 !important; } @@ -7472,6 +9135,12 @@ fieldset.keypair, fieldset.tresor { background-color: #ffbf00; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-200.outline, +[type=reset].button-amber-200.outline { + background-color: transparent; + color: #ffbf00; +} + :is(a).color-amber-200 { text-decoration-color: #ffbf00 !important; } @@ -7487,6 +9156,12 @@ fieldset.keypair, fieldset.tresor { background-color: #fecc63; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-150.outline, +[type=reset].button-amber-150.outline { + background-color: transparent; + color: #fecc63; +} + :is(a).color-amber-150 { text-decoration-color: #fecc63 !important; } @@ -7502,6 +9177,12 @@ fieldset.keypair, fieldset.tresor { background-color: #fddea6; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-100.outline, +[type=reset].button-amber-100.outline { + background-color: transparent; + color: #fddea6; +} + :is(a).color-amber-100 { text-decoration-color: #fddea6 !important; } @@ -7517,6 +9198,12 @@ fieldset.keypair, fieldset.tresor { background-color: #fcefd9; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-50.outline, +[type=reset].button-amber-50.outline { + background-color: transparent; + color: #fcefd9; +} + :is(a).color-amber-50 { text-decoration-color: #fcefd9 !important; } @@ -7532,6 +9219,12 @@ fieldset.keypair, fieldset.tresor { background-color: #ffbf00; } +:is(button, [type=submit], [type=button], [role=button]).button-amber-main.outline, +[type=reset].button-amber-main.outline { + background-color: transparent; + color: #ffbf00; +} + :is(a).color-amber-main { text-decoration-color: #ffbf00 !important; } @@ -7547,6 +9240,12 @@ fieldset.keypair, fieldset.tresor { background-color: #180f04; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-950.outline, +[type=reset].button-pumpkin-950.outline { + background-color: transparent; + color: #180f04; +} + :is(a).color-pumpkin-950 { text-decoration-color: #180f04 !important; } @@ -7562,6 +9261,12 @@ fieldset.keypair, fieldset.tresor { background-color: #271805; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-900.outline, +[type=reset].button-pumpkin-900.outline { + background-color: transparent; + color: #271805; +} + :is(a).color-pumpkin-900 { text-decoration-color: #271805 !important; } @@ -7577,6 +9282,12 @@ fieldset.keypair, fieldset.tresor { background-color: #372004; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-850.outline, +[type=reset].button-pumpkin-850.outline { + background-color: transparent; + color: #372004; +} + :is(a).color-pumpkin-850 { text-decoration-color: #372004 !important; } @@ -7592,6 +9303,12 @@ fieldset.keypair, fieldset.tresor { background-color: #482802; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-800.outline, +[type=reset].button-pumpkin-800.outline { + background-color: transparent; + color: #482802; +} + :is(a).color-pumpkin-800 { text-decoration-color: #482802 !important; } @@ -7607,6 +9324,12 @@ fieldset.keypair, fieldset.tresor { background-color: #593100; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-750.outline, +[type=reset].button-pumpkin-750.outline { + background-color: transparent; + color: #593100; +} + :is(a).color-pumpkin-750 { text-decoration-color: #593100 !important; } @@ -7622,6 +9345,12 @@ fieldset.keypair, fieldset.tresor { background-color: #693a00; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-700.outline, +[type=reset].button-pumpkin-700.outline { + background-color: transparent; + color: #693a00; +} + :is(a).color-pumpkin-700 { text-decoration-color: #693a00 !important; } @@ -7637,6 +9366,12 @@ fieldset.keypair, fieldset.tresor { background-color: #7a4400; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-650.outline, +[type=reset].button-pumpkin-650.outline { + background-color: transparent; + color: #7a4400; +} + :is(a).color-pumpkin-650 { text-decoration-color: #7a4400 !important; } @@ -7652,6 +9387,12 @@ fieldset.keypair, fieldset.tresor { background-color: #8b4f00; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-600.outline, +[type=reset].button-pumpkin-600.outline { + background-color: transparent; + color: #8b4f00; +} + :is(a).color-pumpkin-600 { text-decoration-color: #8b4f00 !important; } @@ -7667,6 +9408,12 @@ fieldset.keypair, fieldset.tresor { background-color: #9c5900; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-550.outline, +[type=reset].button-pumpkin-550.outline { + background-color: transparent; + color: #9c5900; +} + :is(a).color-pumpkin-550 { text-decoration-color: #9c5900 !important; } @@ -7683,6 +9430,13 @@ fieldset.keypair, fieldset.tresor { background-color: #ad6400; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-500.outline, .button-pumpkin:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-pumpkin-500.outline, +[type=reset].outline.button-pumpkin { + background-color: transparent; + color: #ad6400; +} + :is(a).color-pumpkin-500, .color-pumpkin:is(a) { text-decoration-color: #ad6400 !important; } @@ -7698,6 +9452,12 @@ fieldset.keypair, fieldset.tresor { background-color: #bf6e00; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-450.outline, +[type=reset].button-pumpkin-450.outline { + background-color: transparent; + color: #bf6e00; +} + :is(a).color-pumpkin-450 { text-decoration-color: #bf6e00 !important; } @@ -7713,6 +9473,12 @@ fieldset.keypair, fieldset.tresor { background-color: #d27a01; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-400.outline, +[type=reset].button-pumpkin-400.outline { + background-color: transparent; + color: #d27a01; +} + :is(a).color-pumpkin-400 { text-decoration-color: #d27a01 !important; } @@ -7728,6 +9494,12 @@ fieldset.keypair, fieldset.tresor { background-color: #e48500; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-350.outline, +[type=reset].button-pumpkin-350.outline { + background-color: transparent; + color: #e48500; +} + :is(a).color-pumpkin-350 { text-decoration-color: #e48500 !important; } @@ -7743,6 +9515,12 @@ fieldset.keypair, fieldset.tresor { background-color: #ff9500; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-300.outline, +[type=reset].button-pumpkin-300.outline { + background-color: transparent; + color: #ff9500; +} + :is(a).color-pumpkin-300 { text-decoration-color: #ff9500 !important; } @@ -7758,6 +9536,12 @@ fieldset.keypair, fieldset.tresor { background-color: #ffa23a; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-250.outline, +[type=reset].button-pumpkin-250.outline { + background-color: transparent; + color: #ffa23a; +} + :is(a).color-pumpkin-250 { text-decoration-color: #ffa23a !important; } @@ -7773,6 +9557,12 @@ fieldset.keypair, fieldset.tresor { background-color: #feb670; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-200.outline, +[type=reset].button-pumpkin-200.outline { + background-color: transparent; + color: #feb670; +} + :is(a).color-pumpkin-200 { text-decoration-color: #feb670 !important; } @@ -7788,6 +9578,12 @@ fieldset.keypair, fieldset.tresor { background-color: #fcca9b; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-150.outline, +[type=reset].button-pumpkin-150.outline { + background-color: transparent; + color: #fcca9b; +} + :is(a).color-pumpkin-150 { text-decoration-color: #fcca9b !important; } @@ -7803,6 +9599,12 @@ fieldset.keypair, fieldset.tresor { background-color: #fcdcc1; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-100.outline, +[type=reset].button-pumpkin-100.outline { + background-color: transparent; + color: #fcdcc1; +} + :is(a).color-pumpkin-100 { text-decoration-color: #fcdcc1 !important; } @@ -7818,6 +9620,12 @@ fieldset.keypair, fieldset.tresor { background-color: #fceee3; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-50.outline, +[type=reset].button-pumpkin-50.outline { + background-color: transparent; + color: #fceee3; +} + :is(a).color-pumpkin-50 { text-decoration-color: #fceee3 !important; } @@ -7833,6 +9641,12 @@ fieldset.keypair, fieldset.tresor { background-color: #ff9500; } +:is(button, [type=submit], [type=button], [role=button]).button-pumpkin-main.outline, +[type=reset].button-pumpkin-main.outline { + background-color: transparent; + color: #ff9500; +} + :is(a).color-pumpkin-main { text-decoration-color: #ff9500 !important; } @@ -7848,6 +9662,12 @@ fieldset.keypair, fieldset.tresor { background-color: #1b0d06; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-950.outline, +[type=reset].button-orange-950.outline { + background-color: transparent; + color: #1b0d06; +} + :is(a).color-orange-950 { text-decoration-color: #1b0d06 !important; } @@ -7863,6 +9683,12 @@ fieldset.keypair, fieldset.tresor { background-color: #2d1509; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-900.outline, +[type=reset].button-orange-900.outline { + background-color: transparent; + color: #2d1509; +} + :is(a).color-orange-900 { text-decoration-color: #2d1509 !important; } @@ -7878,6 +9704,12 @@ fieldset.keypair, fieldset.tresor { background-color: #411a0a; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-850.outline, +[type=reset].button-orange-850.outline { + background-color: transparent; + color: #411a0a; +} + :is(a).color-orange-850 { text-decoration-color: #411a0a !important; } @@ -7893,6 +9725,12 @@ fieldset.keypair, fieldset.tresor { background-color: #561e0a; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-800.outline, +[type=reset].button-orange-800.outline { + background-color: transparent; + color: #561e0a; +} + :is(a).color-orange-800 { text-decoration-color: #561e0a !important; } @@ -7908,6 +9746,12 @@ fieldset.keypair, fieldset.tresor { background-color: #6b220a; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-750.outline, +[type=reset].button-orange-750.outline { + background-color: transparent; + color: #6b220a; +} + :is(a).color-orange-750 { text-decoration-color: #6b220a !important; } @@ -7923,6 +9767,12 @@ fieldset.keypair, fieldset.tresor { background-color: #7f270b; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-700.outline, +[type=reset].button-orange-700.outline { + background-color: transparent; + color: #7f270b; +} + :is(a).color-orange-700 { text-decoration-color: #7f270b !important; } @@ -7938,6 +9788,12 @@ fieldset.keypair, fieldset.tresor { background-color: #942d0d; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-650.outline, +[type=reset].button-orange-650.outline { + background-color: transparent; + color: #942d0d; +} + :is(a).color-orange-650 { text-decoration-color: #942d0d !important; } @@ -7953,6 +9809,12 @@ fieldset.keypair, fieldset.tresor { background-color: #a83410; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-600.outline, +[type=reset].button-orange-600.outline { + background-color: transparent; + color: #a83410; +} + :is(a).color-orange-600 { text-decoration-color: #a83410 !important; } @@ -7968,6 +9830,12 @@ fieldset.keypair, fieldset.tresor { background-color: #bd3c13; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-550.outline, +[type=reset].button-orange-550.outline { + background-color: transparent; + color: #bd3c13; +} + :is(a).color-orange-550 { text-decoration-color: #bd3c13 !important; } @@ -7984,6 +9852,13 @@ fieldset.keypair, fieldset.tresor { background-color: #d24317; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-500.outline, .button-orange:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-orange-500.outline, +[type=reset].outline.button-orange { + background-color: transparent; + color: #d24317; +} + :is(a).color-orange-500, .color-orange:is(a) { text-decoration-color: #d24317 !important; } @@ -7999,6 +9874,12 @@ fieldset.keypair, fieldset.tresor { background-color: #e74b1a; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-450.outline, +[type=reset].button-orange-450.outline { + background-color: transparent; + color: #e74b1a; +} + :is(a).color-orange-450 { text-decoration-color: #e74b1a !important; } @@ -8014,6 +9895,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f45d2c; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-400.outline, +[type=reset].button-orange-400.outline { + background-color: transparent; + color: #f45d2c; +} + :is(a).color-orange-400 { text-decoration-color: #f45d2c !important; } @@ -8029,6 +9916,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f56b3d; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-350.outline, +[type=reset].button-orange-350.outline { + background-color: transparent; + color: #f56b3d; +} + :is(a).color-orange-350 { text-decoration-color: #f56b3d !important; } @@ -8044,6 +9937,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f68e68; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-300.outline, +[type=reset].button-orange-300.outline { + background-color: transparent; + color: #f68e68; +} + :is(a).color-orange-300 { text-decoration-color: #f68e68 !important; } @@ -8059,6 +9958,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f8a283; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-250.outline, +[type=reset].button-orange-250.outline { + background-color: transparent; + color: #f8a283; +} + :is(a).color-orange-250 { text-decoration-color: #f8a283 !important; } @@ -8074,6 +9979,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f8b79f; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-200.outline, +[type=reset].button-orange-200.outline { + background-color: transparent; + color: #f8b79f; +} + :is(a).color-orange-200 { text-decoration-color: #f8b79f !important; } @@ -8089,6 +10000,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f8cab9; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-150.outline, +[type=reset].button-orange-150.outline { + background-color: transparent; + color: #f8cab9; +} + :is(a).color-orange-150 { text-decoration-color: #f8cab9 !important; } @@ -8104,6 +10021,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f9dcd2; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-100.outline, +[type=reset].button-orange-100.outline { + background-color: transparent; + color: #f9dcd2; +} + :is(a).color-orange-100 { text-decoration-color: #f9dcd2 !important; } @@ -8119,6 +10042,12 @@ fieldset.keypair, fieldset.tresor { background-color: #faeeea; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-50.outline, +[type=reset].button-orange-50.outline { + background-color: transparent; + color: #faeeea; +} + :is(a).color-orange-50 { text-decoration-color: #faeeea !important; } @@ -8134,6 +10063,12 @@ fieldset.keypair, fieldset.tresor { background-color: #d24317; } +:is(button, [type=submit], [type=button], [role=button]).button-orange-main.outline, +[type=reset].button-orange-main.outline { + background-color: transparent; + color: #d24317; +} + :is(a).color-orange-main { text-decoration-color: #d24317 !important; } @@ -8149,6 +10084,12 @@ fieldset.keypair, fieldset.tresor { background-color: #111110; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-950.outline, +[type=reset].button-sand-950.outline { + background-color: transparent; + color: #111110; +} + :is(a).color-sand-950 { text-decoration-color: #111110 !important; } @@ -8164,6 +10105,12 @@ fieldset.keypair, fieldset.tresor { background-color: #1c1b19; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-900.outline, +[type=reset].button-sand-900.outline { + background-color: transparent; + color: #1c1b19; +} + :is(a).color-sand-900 { text-decoration-color: #1c1b19 !important; } @@ -8179,6 +10126,12 @@ fieldset.keypair, fieldset.tresor { background-color: #272622; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-850.outline, +[type=reset].button-sand-850.outline { + background-color: transparent; + color: #272622; +} + :is(a).color-sand-850 { text-decoration-color: #272622 !important; } @@ -8194,6 +10147,12 @@ fieldset.keypair, fieldset.tresor { background-color: #32302b; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-800.outline, +[type=reset].button-sand-800.outline { + background-color: transparent; + color: #32302b; +} + :is(a).color-sand-800 { text-decoration-color: #32302b !important; } @@ -8209,6 +10168,12 @@ fieldset.keypair, fieldset.tresor { background-color: #3d3b35; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-750.outline, +[type=reset].button-sand-750.outline { + background-color: transparent; + color: #3d3b35; +} + :is(a).color-sand-750 { text-decoration-color: #3d3b35 !important; } @@ -8224,6 +10189,12 @@ fieldset.keypair, fieldset.tresor { background-color: #49463f; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-700.outline, +[type=reset].button-sand-700.outline { + background-color: transparent; + color: #49463f; +} + :is(a).color-sand-700 { text-decoration-color: #49463f !important; } @@ -8239,6 +10210,12 @@ fieldset.keypair, fieldset.tresor { background-color: #55524a; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-650.outline, +[type=reset].button-sand-650.outline { + background-color: transparent; + color: #55524a; +} + :is(a).color-sand-650 { text-decoration-color: #55524a !important; } @@ -8254,6 +10231,12 @@ fieldset.keypair, fieldset.tresor { background-color: #615e55; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-600.outline, +[type=reset].button-sand-600.outline { + background-color: transparent; + color: #615e55; +} + :is(a).color-sand-600 { text-decoration-color: #615e55 !important; } @@ -8269,6 +10252,12 @@ fieldset.keypair, fieldset.tresor { background-color: #6e6a60; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-550.outline, +[type=reset].button-sand-550.outline { + background-color: transparent; + color: #6e6a60; +} + :is(a).color-sand-550 { text-decoration-color: #6e6a60 !important; } @@ -8285,6 +10274,13 @@ fieldset.keypair, fieldset.tresor { background-color: #7b776b; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-500.outline, .button-sand:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-sand-500.outline, +[type=reset].outline.button-sand { + background-color: transparent; + color: #7b776b; +} + :is(a).color-sand-500, .color-sand:is(a) { text-decoration-color: #7b776b !important; } @@ -8300,6 +10296,12 @@ fieldset.keypair, fieldset.tresor { background-color: #888377; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-450.outline, +[type=reset].button-sand-450.outline { + background-color: transparent; + color: #888377; +} + :is(a).color-sand-450 { text-decoration-color: #888377 !important; } @@ -8315,6 +10317,12 @@ fieldset.keypair, fieldset.tresor { background-color: #959082; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-400.outline, +[type=reset].button-sand-400.outline { + background-color: transparent; + color: #959082; +} + :is(a).color-sand-400 { text-decoration-color: #959082 !important; } @@ -8330,6 +10338,12 @@ fieldset.keypair, fieldset.tresor { background-color: #a39e8f; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-350.outline, +[type=reset].button-sand-350.outline { + background-color: transparent; + color: #a39e8f; +} + :is(a).color-sand-350 { text-decoration-color: #a39e8f !important; } @@ -8345,6 +10359,12 @@ fieldset.keypair, fieldset.tresor { background-color: #b0ab9b; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-300.outline, +[type=reset].button-sand-300.outline { + background-color: transparent; + color: #b0ab9b; +} + :is(a).color-sand-300 { text-decoration-color: #b0ab9b !important; } @@ -8360,6 +10380,12 @@ fieldset.keypair, fieldset.tresor { background-color: #beb8a7; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-250.outline, +[type=reset].button-sand-250.outline { + background-color: transparent; + color: #beb8a7; +} + :is(a).color-sand-250 { text-decoration-color: #beb8a7 !important; } @@ -8375,6 +10401,12 @@ fieldset.keypair, fieldset.tresor { background-color: #ccc6b4; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-200.outline, +[type=reset].button-sand-200.outline { + background-color: transparent; + color: #ccc6b4; +} + :is(a).color-sand-200 { text-decoration-color: #ccc6b4 !important; } @@ -8390,6 +10422,12 @@ fieldset.keypair, fieldset.tresor { background-color: #dad4c2; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-150.outline, +[type=reset].button-sand-150.outline { + background-color: transparent; + color: #dad4c2; +} + :is(a).color-sand-150 { text-decoration-color: #dad4c2 !important; } @@ -8405,6 +10443,12 @@ fieldset.keypair, fieldset.tresor { background-color: #e8e2d2; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-100.outline, +[type=reset].button-sand-100.outline { + background-color: transparent; + color: #e8e2d2; +} + :is(a).color-sand-100 { text-decoration-color: #e8e2d2 !important; } @@ -8420,6 +10464,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f2f0ec; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-50.outline, +[type=reset].button-sand-50.outline { + background-color: transparent; + color: #f2f0ec; +} + :is(a).color-sand-50 { text-decoration-color: #f2f0ec !important; } @@ -8435,6 +10485,12 @@ fieldset.keypair, fieldset.tresor { background-color: #ccc6b4; } +:is(button, [type=submit], [type=button], [role=button]).button-sand-main.outline, +[type=reset].button-sand-main.outline { + background-color: transparent; + color: #ccc6b4; +} + :is(a).color-sand-main { text-decoration-color: #ccc6b4 !important; } @@ -8450,6 +10506,12 @@ fieldset.keypair, fieldset.tresor { background-color: #111111; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-950.outline, +[type=reset].button-grey-950.outline { + background-color: transparent; + color: #111111; +} + :is(a).color-grey-950 { text-decoration-color: #111111 !important; } @@ -8465,6 +10527,12 @@ fieldset.keypair, fieldset.tresor { background-color: #1b1b1b; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-900.outline, +[type=reset].button-grey-900.outline { + background-color: transparent; + color: #1b1b1b; +} + :is(a).color-grey-900 { text-decoration-color: #1b1b1b !important; } @@ -8480,6 +10548,12 @@ fieldset.keypair, fieldset.tresor { background-color: #262626; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-850.outline, +[type=reset].button-grey-850.outline { + background-color: transparent; + color: #262626; +} + :is(a).color-grey-850 { text-decoration-color: #262626 !important; } @@ -8495,6 +10569,12 @@ fieldset.keypair, fieldset.tresor { background-color: #303030; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-800.outline, +[type=reset].button-grey-800.outline { + background-color: transparent; + color: #303030; +} + :is(a).color-grey-800 { text-decoration-color: #303030 !important; } @@ -8510,6 +10590,12 @@ fieldset.keypair, fieldset.tresor { background-color: #3b3b3b; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-750.outline, +[type=reset].button-grey-750.outline { + background-color: transparent; + color: #3b3b3b; +} + :is(a).color-grey-750 { text-decoration-color: #3b3b3b !important; } @@ -8525,6 +10611,12 @@ fieldset.keypair, fieldset.tresor { background-color: #474747; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-700.outline, +[type=reset].button-grey-700.outline { + background-color: transparent; + color: #474747; +} + :is(a).color-grey-700 { text-decoration-color: #474747 !important; } @@ -8540,6 +10632,12 @@ fieldset.keypair, fieldset.tresor { background-color: #525252; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-650.outline, +[type=reset].button-grey-650.outline { + background-color: transparent; + color: #525252; +} + :is(a).color-grey-650 { text-decoration-color: #525252 !important; } @@ -8555,6 +10653,12 @@ fieldset.keypair, fieldset.tresor { background-color: #5e5e5e; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-600.outline, +[type=reset].button-grey-600.outline { + background-color: transparent; + color: #5e5e5e; +} + :is(a).color-grey-600 { text-decoration-color: #5e5e5e !important; } @@ -8570,6 +10674,12 @@ fieldset.keypair, fieldset.tresor { background-color: #6a6a6a; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-550.outline, +[type=reset].button-grey-550.outline { + background-color: transparent; + color: #6a6a6a; +} + :is(a).color-grey-550 { text-decoration-color: #6a6a6a !important; } @@ -8586,6 +10696,13 @@ fieldset.keypair, fieldset.tresor { background-color: #777777; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-500.outline, .button-grey:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-grey-500.outline, +[type=reset].outline.button-grey { + background-color: transparent; + color: #777777; +} + :is(a).color-grey-500, .color-grey:is(a) { text-decoration-color: #777777 !important; } @@ -8601,6 +10718,12 @@ fieldset.keypair, fieldset.tresor { background-color: #808080; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-450.outline, +[type=reset].button-grey-450.outline { + background-color: transparent; + color: #808080; +} + :is(a).color-grey-450 { text-decoration-color: #808080 !important; } @@ -8616,6 +10739,12 @@ fieldset.keypair, fieldset.tresor { background-color: #919191; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-400.outline, +[type=reset].button-grey-400.outline { + background-color: transparent; + color: #919191; +} + :is(a).color-grey-400 { text-decoration-color: #919191 !important; } @@ -8631,6 +10760,12 @@ fieldset.keypair, fieldset.tresor { background-color: #9e9e9e; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-350.outline, +[type=reset].button-grey-350.outline { + background-color: transparent; + color: #9e9e9e; +} + :is(a).color-grey-350 { text-decoration-color: #9e9e9e !important; } @@ -8646,6 +10781,12 @@ fieldset.keypair, fieldset.tresor { background-color: #ababab; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-300.outline, +[type=reset].button-grey-300.outline { + background-color: transparent; + color: #ababab; +} + :is(a).color-grey-300 { text-decoration-color: #ababab !important; } @@ -8661,6 +10802,12 @@ fieldset.keypair, fieldset.tresor { background-color: #b9b9b9; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-250.outline, +[type=reset].button-grey-250.outline { + background-color: transparent; + color: #b9b9b9; +} + :is(a).color-grey-250 { text-decoration-color: #b9b9b9 !important; } @@ -8676,6 +10823,12 @@ fieldset.keypair, fieldset.tresor { background-color: #c6c6c6; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-200.outline, +[type=reset].button-grey-200.outline { + background-color: transparent; + color: #c6c6c6; +} + :is(a).color-grey-200 { text-decoration-color: #c6c6c6 !important; } @@ -8691,6 +10844,12 @@ fieldset.keypair, fieldset.tresor { background-color: #d4d4d4; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-150.outline, +[type=reset].button-grey-150.outline { + background-color: transparent; + color: #d4d4d4; +} + :is(a).color-grey-150 { text-decoration-color: #d4d4d4 !important; } @@ -8706,6 +10865,12 @@ fieldset.keypair, fieldset.tresor { background-color: #e2e2e2; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-100.outline, +[type=reset].button-grey-100.outline { + background-color: transparent; + color: #e2e2e2; +} + :is(a).color-grey-100 { text-decoration-color: #e2e2e2 !important; } @@ -8721,6 +10886,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f1f1f1; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-50.outline, +[type=reset].button-grey-50.outline { + background-color: transparent; + color: #f1f1f1; +} + :is(a).color-grey-50 { text-decoration-color: #f1f1f1 !important; } @@ -8736,6 +10907,12 @@ fieldset.keypair, fieldset.tresor { background-color: #ababab; } +:is(button, [type=submit], [type=button], [role=button]).button-grey-main.outline, +[type=reset].button-grey-main.outline { + background-color: transparent; + color: #ababab; +} + :is(a).color-grey-main { text-decoration-color: #ababab !important; } @@ -8751,6 +10928,12 @@ fieldset.keypair, fieldset.tresor { background-color: #0f1114; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-950.outline, +[type=reset].button-zinc-950.outline { + background-color: transparent; + color: #0f1114; +} + :is(a).color-zinc-950 { text-decoration-color: #0f1114 !important; } @@ -8766,6 +10949,12 @@ fieldset.keypair, fieldset.tresor { background-color: #191c20; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-900.outline, +[type=reset].button-zinc-900.outline { + background-color: transparent; + color: #191c20; +} + :is(a).color-zinc-900 { text-decoration-color: #191c20 !important; } @@ -8781,6 +10970,12 @@ fieldset.keypair, fieldset.tresor { background-color: #23262c; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-850.outline, +[type=reset].button-zinc-850.outline { + background-color: transparent; + color: #23262c; +} + :is(a).color-zinc-850 { text-decoration-color: #23262c !important; } @@ -8796,6 +10991,12 @@ fieldset.keypair, fieldset.tresor { background-color: #2d3138; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-800.outline, +[type=reset].button-zinc-800.outline { + background-color: transparent; + color: #2d3138; +} + :is(a).color-zinc-800 { text-decoration-color: #2d3138 !important; } @@ -8811,6 +11012,12 @@ fieldset.keypair, fieldset.tresor { background-color: #373c44; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-750.outline, +[type=reset].button-zinc-750.outline { + background-color: transparent; + color: #373c44; +} + :is(a).color-zinc-750 { text-decoration-color: #373c44 !important; } @@ -8826,6 +11033,12 @@ fieldset.keypair, fieldset.tresor { background-color: #424751; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-700.outline, +[type=reset].button-zinc-700.outline { + background-color: transparent; + color: #424751; +} + :is(a).color-zinc-700 { text-decoration-color: #424751 !important; } @@ -8841,6 +11054,12 @@ fieldset.keypair, fieldset.tresor { background-color: #4d535e; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-650.outline, +[type=reset].button-zinc-650.outline { + background-color: transparent; + color: #4d535e; +} + :is(a).color-zinc-650 { text-decoration-color: #4d535e !important; } @@ -8856,6 +11075,12 @@ fieldset.keypair, fieldset.tresor { background-color: #5c6370; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-600.outline, +[type=reset].button-zinc-600.outline { + background-color: transparent; + color: #5c6370; +} + :is(a).color-zinc-600 { text-decoration-color: #5c6370 !important; } @@ -8871,6 +11096,12 @@ fieldset.keypair, fieldset.tresor { background-color: #646b79; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-550.outline, +[type=reset].button-zinc-550.outline { + background-color: transparent; + color: #646b79; +} + :is(a).color-zinc-550 { text-decoration-color: #646b79 !important; } @@ -8887,6 +11118,13 @@ fieldset.keypair, fieldset.tresor { background-color: #6f7887; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-500.outline, .button-zinc:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-zinc-500.outline, +[type=reset].outline.button-zinc { + background-color: transparent; + color: #6f7887; +} + :is(a).color-zinc-500, .color-zinc:is(a) { text-decoration-color: #6f7887 !important; } @@ -8902,6 +11140,12 @@ fieldset.keypair, fieldset.tresor { background-color: #7b8495; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-450.outline, +[type=reset].button-zinc-450.outline { + background-color: transparent; + color: #7b8495; +} + :is(a).color-zinc-450 { text-decoration-color: #7b8495 !important; } @@ -8917,6 +11161,12 @@ fieldset.keypair, fieldset.tresor { background-color: #8891a4; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-400.outline, +[type=reset].button-zinc-400.outline { + background-color: transparent; + color: #8891a4; +} + :is(a).color-zinc-400 { text-decoration-color: #8891a4 !important; } @@ -8932,6 +11182,12 @@ fieldset.keypair, fieldset.tresor { background-color: #969eaf; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-350.outline, +[type=reset].button-zinc-350.outline { + background-color: transparent; + color: #969eaf; +} + :is(a).color-zinc-350 { text-decoration-color: #969eaf !important; } @@ -8947,6 +11203,12 @@ fieldset.keypair, fieldset.tresor { background-color: #a4acba; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-300.outline, +[type=reset].button-zinc-300.outline { + background-color: transparent; + color: #a4acba; +} + :is(a).color-zinc-300 { text-decoration-color: #a4acba !important; } @@ -8962,6 +11224,12 @@ fieldset.keypair, fieldset.tresor { background-color: #b3b9c5; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-250.outline, +[type=reset].button-zinc-250.outline { + background-color: transparent; + color: #b3b9c5; +} + :is(a).color-zinc-250 { text-decoration-color: #b3b9c5 !important; } @@ -8977,6 +11245,12 @@ fieldset.keypair, fieldset.tresor { background-color: #c2c7d0; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-200.outline, +[type=reset].button-zinc-200.outline { + background-color: transparent; + color: #c2c7d0; +} + :is(a).color-zinc-200 { text-decoration-color: #c2c7d0 !important; } @@ -8992,6 +11266,12 @@ fieldset.keypair, fieldset.tresor { background-color: #d1d5db; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-150.outline, +[type=reset].button-zinc-150.outline { + background-color: transparent; + color: #d1d5db; +} + :is(a).color-zinc-150 { text-decoration-color: #d1d5db !important; } @@ -9007,6 +11287,12 @@ fieldset.keypair, fieldset.tresor { background-color: #e0e3e7; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-100.outline, +[type=reset].button-zinc-100.outline { + background-color: transparent; + color: #e0e3e7; +} + :is(a).color-zinc-100 { text-decoration-color: #e0e3e7 !important; } @@ -9022,6 +11308,12 @@ fieldset.keypair, fieldset.tresor { background-color: #f0f1f3; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-50.outline, +[type=reset].button-zinc-50.outline { + background-color: transparent; + color: #f0f1f3; +} + :is(a).color-zinc-50 { text-decoration-color: #f0f1f3 !important; } @@ -9037,6 +11329,12 @@ fieldset.keypair, fieldset.tresor { background-color: #646b79; } +:is(button, [type=submit], [type=button], [role=button]).button-zinc-main.outline, +[type=reset].button-zinc-main.outline { + background-color: transparent; + color: #646b79; +} + :is(a).color-zinc-main { text-decoration-color: #646b79 !important; } @@ -9052,6 +11350,12 @@ fieldset.keypair, fieldset.tresor { background-color: #0e1118; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-950.outline, +[type=reset].button-slate-950.outline { + background-color: transparent; + color: #0e1118; +} + :is(a).color-slate-950 { text-decoration-color: #0e1118 !important; } @@ -9067,6 +11371,12 @@ fieldset.keypair, fieldset.tresor { background-color: #181c25; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-900.outline, +[type=reset].button-slate-900.outline { + background-color: transparent; + color: #181c25; +} + :is(a).color-slate-900 { text-decoration-color: #181c25 !important; } @@ -9082,6 +11392,12 @@ fieldset.keypair, fieldset.tresor { background-color: #202632; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-850.outline, +[type=reset].button-slate-850.outline { + background-color: transparent; + color: #202632; +} + :is(a).color-slate-850 { text-decoration-color: #202632 !important; } @@ -9097,6 +11413,12 @@ fieldset.keypair, fieldset.tresor { background-color: #2a3140; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-800.outline, +[type=reset].button-slate-800.outline { + background-color: transparent; + color: #2a3140; +} + :is(a).color-slate-800 { text-decoration-color: #2a3140 !important; } @@ -9112,6 +11434,12 @@ fieldset.keypair, fieldset.tresor { background-color: #333c4e; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-750.outline, +[type=reset].button-slate-750.outline { + background-color: transparent; + color: #333c4e; +} + :is(a).color-slate-750 { text-decoration-color: #333c4e !important; } @@ -9127,6 +11455,12 @@ fieldset.keypair, fieldset.tresor { background-color: #3d475c; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-700.outline, +[type=reset].button-slate-700.outline { + background-color: transparent; + color: #3d475c; +} + :is(a).color-slate-700 { text-decoration-color: #3d475c !important; } @@ -9142,6 +11476,12 @@ fieldset.keypair, fieldset.tresor { background-color: #48536b; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-650.outline, +[type=reset].button-slate-650.outline { + background-color: transparent; + color: #48536b; +} + :is(a).color-slate-650 { text-decoration-color: #48536b !important; } @@ -9157,6 +11497,12 @@ fieldset.keypair, fieldset.tresor { background-color: #525f7a; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-600.outline, +[type=reset].button-slate-600.outline { + background-color: transparent; + color: #525f7a; +} + :is(a).color-slate-600 { text-decoration-color: #525f7a !important; } @@ -9172,6 +11518,12 @@ fieldset.keypair, fieldset.tresor { background-color: #5d6b89; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-550.outline, +[type=reset].button-slate-550.outline { + background-color: transparent; + color: #5d6b89; +} + :is(a).color-slate-550 { text-decoration-color: #5d6b89 !important; } @@ -9188,6 +11540,13 @@ fieldset.keypair, fieldset.tresor { background-color: #687899; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-500.outline, .button-slate:is(button, [type=submit], [type=button], [role=button]).outline, +[type=reset].button-slate-500.outline, +[type=reset].outline.button-slate { + background-color: transparent; + color: #687899; +} + :is(a).color-slate-500, .color-slate:is(a) { text-decoration-color: #687899 !important; } @@ -9203,6 +11562,12 @@ fieldset.keypair, fieldset.tresor { background-color: #7385a9; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-450.outline, +[type=reset].button-slate-450.outline { + background-color: transparent; + color: #7385a9; +} + :is(a).color-slate-450 { text-decoration-color: #7385a9 !important; } @@ -9218,6 +11583,12 @@ fieldset.keypair, fieldset.tresor { background-color: #8191b5; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-400.outline, +[type=reset].button-slate-400.outline { + background-color: transparent; + color: #8191b5; +} + :is(a).color-slate-400 { text-decoration-color: #8191b5 !important; } @@ -9233,6 +11604,12 @@ fieldset.keypair, fieldset.tresor { background-color: #909ebe; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-350.outline, +[type=reset].button-slate-350.outline { + background-color: transparent; + color: #909ebe; +} + :is(a).color-slate-350 { text-decoration-color: #909ebe !important; } @@ -9248,6 +11625,12 @@ fieldset.keypair, fieldset.tresor { background-color: #a0acc7; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-300.outline, +[type=reset].button-slate-300.outline { + background-color: transparent; + color: #a0acc7; +} + :is(a).color-slate-300 { text-decoration-color: #a0acc7 !important; } @@ -9263,6 +11646,12 @@ fieldset.keypair, fieldset.tresor { background-color: #b0b9d0; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-250.outline, +[type=reset].button-slate-250.outline { + background-color: transparent; + color: #b0b9d0; +} + :is(a).color-slate-250 { text-decoration-color: #b0b9d0 !important; } @@ -9278,6 +11667,12 @@ fieldset.keypair, fieldset.tresor { background-color: #bfc7d9; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-200.outline, +[type=reset].button-slate-200.outline { + background-color: transparent; + color: #bfc7d9; +} + :is(a).color-slate-200 { text-decoration-color: #bfc7d9 !important; } @@ -9293,6 +11688,12 @@ fieldset.keypair, fieldset.tresor { background-color: #cfd5e2; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-150.outline, +[type=reset].button-slate-150.outline { + background-color: transparent; + color: #cfd5e2; +} + :is(a).color-slate-150 { text-decoration-color: #cfd5e2 !important; } @@ -9308,6 +11709,12 @@ fieldset.keypair, fieldset.tresor { background-color: #dfe3eb; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-100.outline, +[type=reset].button-slate-100.outline { + background-color: transparent; + color: #dfe3eb; +} + :is(a).color-slate-100 { text-decoration-color: #dfe3eb !important; } @@ -9323,6 +11730,12 @@ fieldset.keypair, fieldset.tresor { background-color: #eff1f4; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-50.outline, +[type=reset].button-slate-50.outline { + background-color: transparent; + color: #eff1f4; +} + :is(a).color-slate-50 { text-decoration-color: #eff1f4 !important; } @@ -9338,6 +11751,12 @@ fieldset.keypair, fieldset.tresor { background-color: #525f7a; } +:is(button, [type=submit], [type=button], [role=button]).button-slate-main.outline, +[type=reset].button-slate-main.outline { + background-color: transparent; + color: #525f7a; +} + :is(a).color-slate-main { text-decoration-color: #525f7a !important; } diff --git a/components/web/static_files/css/pico-custom.scss b/components/web/static_files/css/pico-custom.scss index 7604592..81e088d 100644 --- a/components/web/static_files/css/pico-custom.scss +++ b/components/web/static_files/css/pico-custom.scss @@ -119,16 +119,19 @@ pre { padding: calc(var(--pico-spacing)/2); } -#nav-theme-toggle { - cursor:pointer !important; +nav[aria-label="breadcrumb"] span { + padding: var(--pico-nav-link-spacing-vertical) var(--pico-nav-link-spacing-horizontal); + margin-inline-start: calc(var(--pico-nav-link-spacing-horizontal) * -1); } + +#nav-theme-bulb { + cursor:pointer !important; + text-decoration: none; +} + .dark { filter: grayscale(100%); } -.hi, .hi a { - font-size:1.1rem; - --pico-text-decoration: none; -} table td article { margin-bottom: var(--pico-spacing); @@ -145,6 +148,10 @@ table td.created-modified { table td.created-modified, table th.created-modified { text-align: right; } +table td > a[role="button"], +table td > button { + padding: calc(var(--pico-form-element-spacing-vertical) / 2) calc(var(--pico-form-element-spacing-horizontal) / 2); +} .no-text-decoration { text-decoration: none !important; @@ -155,10 +162,6 @@ table td.created-modified, table th.created-modified { display: none; } -.help { - cursor:help; -} - .pointer { cursor:pointer; } @@ -265,15 +268,11 @@ table td.created-modified, table th.created-modified { --pico-color: #{$fuchsia-100}; } -.login-grid { - display: grid; - grid-template-columns: 20% 60% 20%; - grid-template-rows: 1fr; +article.login-mask { + padding: calc(var(--pico-spacing)*2); + border-radius: 1.5rem; } -.login-register { grid-column-start: 2; } - - thead th, thead td, tfoot th, tfoot td { --pico-font-weight: 400; } @@ -323,7 +322,6 @@ dialog article { align-items: baseline; margin: calc(var(--pico-spacing) /2) auto; } - .grid-auto-cols { display: grid; grid-template-columns: repeat(5, 1fr); @@ -350,10 +348,6 @@ nav details.dropdown { width: max-content; } -fieldset.vault-unlock { - padding: var(--pico-spacing) 0; -} - article.user-group { background-color: var(--pico-form-element-background-color); } @@ -429,6 +423,11 @@ fieldset.keypair, fieldset.tresor { padding: var(--pico-spacing); } +button#menu-vault-dialog-toggle { + padding: calc(var(--pico-form-element-spacing-vertical) / 1.5) calc(var(--pico-form-element-spacing-horizontal) / 1.5); + border-color: var(--pico-form-element-border-color); + --pico-border-radius: .5rem; +} /////////////////////////////////////// // Generators for colors and breakpoints @@ -468,31 +467,43 @@ fieldset.keypair, fieldset.tresor { @each $color-key, $color-var in $colors { @each $shade, $value in $color-var { - .color-#{"#{$color-key}"}-#{$shade} { + .color-#{$color-key}-#{$shade} { color: $value !important; } - :is(button, [type="submit"], [type="button"], [role="button"]).button-#{"#{$color-key}"}-#{$shade}, - [type="reset"].button-#{"#{$color-key}"}-#{$shade} { + + // Default filled button + :is(button, [type="submit"], [type="button"], [role="button"]).button-#{$color-key}-#{$shade}, + [type="reset"].button-#{$color-key}-#{$shade} { color: get-contrast-color($value); border-color: $value; background-color: $value; } - :is(a).color-#{"#{$color-key}"}-#{$shade} { + + // Outline version โ€” overrides background and text color + :is(button, [type="submit"], [type="button"], [role="button"]).button-#{$color-key}-#{$shade}.outline, + [type="reset"].button-#{$color-key}-#{$shade}.outline { + background-color: transparent; + color: $value; + } + + :is(a).color-#{$color-key}-#{$shade} { text-decoration-color: $value !important; } } @if map-has-key($color-var, 500) { - .color-#{"#{$color-key}"} { - @extend .color-#{"#{$color-key}"}-500; + .color-#{$color-key} { + @extend .color-#{$color-key}-500; } - :is(button, [type="submit"], [type="button"], [role="button"]).button-#{"#{$color-key}"}, - [type="reset"].button-#{"#{$color-key}"} { - @extend .button-#{"#{$color-key}"}-500; + + :is(button, [type="submit"], [type="button"], [role="button"]).button-#{$color-key}, + [type="reset"].button-#{$color-key} { + @extend .button-#{$color-key}-500; } } } + @each $size, $data in $breakpoints { $breakpoint: map-get($data, breakpoint); @media (max-width: $breakpoint) { diff --git a/components/web/static_files/hyperscript/common._hs b/components/web/static_files/hyperscript/common._hs index 0a060a2..412a377 100644 --- a/components/web/static_files/hyperscript/common._hs +++ b/components/web/static_files/hyperscript/common._hs @@ -150,28 +150,37 @@ end behavior tresorToggle def setUnlocked - get #vault-unlock-pin + get #menu-dialog-vault-unlock-pin add @disabled to it set its @placeholder to 'Tresor is unlocked' - set #vault-unlock's textContent to '๐Ÿ”“' + get #menu-dialog-vault-unlock + set its textContent to 'Unlock' + remove @disabled from it + set #menu-vault-indicator's textContent to 'unlocked โœ…' end def setLocked - get #vault-unlock-pin + get #menu-dialog-vault-unlock-pin remove @disabled from it set its @placeholder to 'Tresor password' - set #vault-unlock's textContent to '๐Ÿ”' + get #menu-dialog-vault-unlock + set its textContent to 'Unlock' + remove @disabled from it + set #menu-vault-indicator's textContent to 'locked ๐Ÿ”’' end def noTresor - get #vault-unlock-pin + get #menu-dialog-vault-unlock-pin add @disabled to it set its @placeholder to 'No tresor available' - set #vault-unlock's textContent to 'โ›”' + get #menu-dialog-vault-unlock + add @disabled to it + set its textContent to 'Not available' + set #menu-vault-indicator's textContent to 'not available โ›”' end init if window.vault.isUnlocked() call setUnlocked() else - if #vault-unlock's @data-tresor != "" + if #menu-dialog-vault-unlock's @data-tresor != "" call setLocked() else call noTresor() @@ -179,32 +188,33 @@ behavior tresorToggle end end on profileUpdate from body - exit unless #vault-unlock's @data-tresor == "" - set #vault-unlock's @data-tresor to (value of event.detail) + exit unless #menu-dialog-vault-unlock's @data-tresor == "" + set #menu-dialog-vault-unlock's @data-tresor to (value of event.detail) call setLocked() end - on keydown[keyCode == 13] from #vault-unlock-pin - trigger click on #vault-unlock unless #vault-unlock-pin's value is empty + on keydown[keyCode == 13] from #menu-dialog-vault-unlock-pin + trigger click on #menu-dialog-vault-unlock unless #menu-dialog-vault-unlock-pin's value is empty end - on click from #vault-unlock + on click from #menu-dialog-vault-unlock halt the event if not window.vault.isUnlocked() - exit unless value of #vault-unlock-pin - call JSON.parse(#vault-unlock's @data-tresor) set keyData to the result - call VaultUnlockPrivateKey(value of #vault-unlock-pin, keyData) + throw "No PIN" unless value of #menu-dialog-vault-unlock-pin + call JSON.parse(#menu-dialog-vault-unlock's @data-tresor) set keyData to the result + call VaultUnlockPrivateKey(value of #menu-dialog-vault-unlock-pin, keyData) call setUnlocked() else call window.vault.lock() call setLocked() end - set value of #vault-unlock-pin to '' + set value of #menu-dialog-vault-unlock-pin to '' + remove @open from closest on exception(error) trigger notification( title: 'Tresor error', level: 'validationError', message: 'Could not unlock tresor, check your PIN', duration: 3000, - locations: ['vault-unlock-pin'] + locations: ['menu-vault-unlock-pin'] ) end end @@ -213,7 +223,23 @@ behavior bodydefault on htmx:wsError or htmx:wsClose set #ws-indicator's textContent to 'โญ•' end - + init set :reloadCounter to 1 end + on forceReload + trigger notification( + title: 'Unlocked session', + level: 'user', + message: `Preventing window reload due to unlocked session (keep pressing to force reload)`, + duration: 2000, + locations: [] + ) + wait for a forceReload or 400ms + if result's type is 'forceReload' + increment :reloadCounter + log :reloadCounter + else + set :reloadCounter to 1 + end + end on keydown exit unless window.vault.isUnlocked() if navigator.platform.toUpperCase().indexOf('MAC') >= 0 @@ -222,14 +248,10 @@ behavior bodydefault set ctrlOrCmd to event.ctrlKey end if (event.key is "F5" or (ctrlOrCmd and event.key.toLowerCase() === "r")) or ((ctrlOrCmd and event.shiftKey and event.key.toLowerCase() === "r") or (event.shiftKey and e.key === "F5")) - trigger notification( - title: 'Unlocked session', - level: 'user', - message: 'Preventing window reload due to unlocked session', - duration: 2000, - locations: [] - ) - halt the event + trigger forceReload + if :reloadCounter < 2 + halt the event + end end end diff --git a/components/web/static_files/js/site.js b/components/web/static_files/js/site.js index b3ff002..7180635 100644 --- a/components/web/static_files/js/site.js +++ b/components/web/static_files/js/site.js @@ -26,6 +26,10 @@ htmx.on("body", "regCompleted", async function(evt){ htmx.ajax("GET", "/", "#body-main") }) +htmx.on("body", "appendCompleted", async function(evt){ + htmx.ajax("GET", "/", "#body-main") +}) + htmx.on("body", "startAuth", async function(evt){ const { startAuthentication } = SimpleWebAuthnBrowser var login_button = htmx.find("#authenticate") diff --git a/components/web/static_files/js/uservault.js b/components/web/static_files/js/uservault.js index a19a6eb..4e35a94 100644 --- a/components/web/static_files/js/uservault.js +++ b/components/web/static_files/js/uservault.js @@ -97,6 +97,14 @@ class UserCryptoVault { this.keyPair = { privateKey, publicKey }; } + async exportPrivateKeyPEM() { + if (!this.keyPair?.publicKey || !this.keyPair?.privateKey) throw new Error("Vault not unlocked"); + const pkcs8 = await crypto.subtle.exportKey("pkcs8", this.keyPair.privateKey); + const b64 = btoa(String.fromCharCode(...new Uint8Array(pkcs8))); + const lines = b64.match(/.{1,64}/g).join("\n"); + return `-----BEGIN PRIVATE KEY-----\n${lines}\n-----END PRIVATE KEY-----`; + } + async encryptData(message) { if (!this.keyPair?.publicKey || !this.keyPair?.privateKey) throw new Error("Vault not unlocked"); @@ -196,28 +204,28 @@ class UserCryptoVault { window.vault = new UserCryptoVault(); async function VaultSetupUserCryptoAndSend(password) { - await window.vault.generateKeyPair(); - await window.vault.wrapPrivateKeyWithPassword(password); - const payload = await window.vault.exportPayload(); - return payload; + await window.vault.generateKeyPair(); + await window.vault.wrapPrivateKeyWithPassword(password); + const payload = await window.vault.exportPayload(); + return payload; } async function VaultUnlockPrivateKey(password, keyData) { - await window.vault.unlockPrivateKey( - Uint8Array.from(atob(keyData.wrapped_private_key), c => c.charCodeAt(0)), - Uint8Array.from(atob(keyData.salt), c => c.charCodeAt(0)), - Uint8Array.from(atob(keyData.iv), c => c.charCodeAt(0)), - password, - keyData.public_key_pem - ); + await window.vault.unlockPrivateKey( + Uint8Array.from(atob(keyData.wrapped_private_key), c => c.charCodeAt(0)), + Uint8Array.from(atob(keyData.salt), c => c.charCodeAt(0)), + Uint8Array.from(atob(keyData.iv), c => c.charCodeAt(0)), + password, + keyData.public_key_pem + ); } async function VaultChangePassword(old_password, new_password, keyData) { - await window.vault.changePassword(old_password, new_password, - Uint8Array.from(atob(keyData.wrapped_private_key), c => c.charCodeAt(0)), - Uint8Array.from(atob(keyData.salt), c => c.charCodeAt(0)), - Uint8Array.from(atob(keyData.iv), c => c.charCodeAt(0)), - keyData.public_key_pem - ); + await window.vault.changePassword(old_password, new_password, + Uint8Array.from(atob(keyData.wrapped_private_key), c => c.charCodeAt(0)), + Uint8Array.from(atob(keyData.salt), c => c.charCodeAt(0)), + Uint8Array.from(atob(keyData.iv), c => c.charCodeAt(0)), + keyData.public_key_pem + ); } diff --git a/components/web/static_files/logo.png b/components/web/static_files/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..96a4e519e5775f6eb7e92deba1c5ebe2ad7da00c GIT binary patch literal 50854 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 literal 0 HcmV?d00001 diff --git a/components/web/static_files/logo2.png b/components/web/static_files/logo2.png new file mode 100644 index 0000000000000000000000000000000000000000..218eecd573cb3c508d0b7d5907736fe3c3e02b96 GIT binary patch literal 7190 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 literal 0 HcmV?d00001 diff --git a/components/web/templates/auth/authenticate.html b/components/web/templates/auth/authenticate.html index a25758f..f1bf4ed 100644 --- a/components/web/templates/auth/authenticate.html +++ b/components/web/templates/auth/authenticate.html @@ -5,17 +5,17 @@ {% block breadcrumb %} {% endblock breadcrumb %} {% block body %} - {% endif %} -