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 0000000..96a4e51 Binary files /dev/null and b/components/web/static_files/logo.png differ diff --git a/components/web/static_files/logo2.png b/components/web/static_files/logo2.png new file mode 100644 index 0000000..218eecd Binary files /dev/null and b/components/web/static_files/logo2.png differ 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 %} -