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 %}
-
+
{% include "auth/includes/login/login.html" %}
{% with hidden=True %}
{% include "auth/includes/register/register.html" %}
{% endwith %}
-
+
{% endblock body %}
diff --git a/components/web/templates/auth/includes/login/login.html b/components/web/templates/auth/includes/login/login.html
index a609f94..0c596a4 100644
--- a/components/web/templates/auth/includes/login/login.html
+++ b/components/web/templates/auth/includes/login/login.html
@@ -2,7 +2,7 @@
"hidden" is used to include both login and register forms in main.html while only showing either/or
#}
-