Spaces:
Sleeping
Sleeping
Simplify deployment: drop Postgres/RAG, plain uvicorn on lean requirements
Browse filesThe previous Dockerfile installed PostgreSQL + pgvector via apt and had
start.sh boot postgres before uvicorn. That path was failing on the Space
(Runtime error: Scheduling failure / crash before serving), likely because
the container can't run postgresql as a system service in the Space
sandbox. This reverts to the working simple setup: python:3.11-slim,
lean requirements (no jupyter/mlflow/optuna/postgres deps), and a
freshly built Angular frontend.
- Dockerfile +2 -17
- api/inference.py +14 -96
- api/main.py +11 -62
- api/rag.py +0 -230
- api/schema.py +1 -13
- data/raw/train.json +0 -3
- frontend/dist/frontend/browser/chunk-HLPJREHD.js +0 -0
- frontend/dist/frontend/browser/chunk-N7V54BGS.js +1 -0
- frontend/dist/frontend/browser/home.css.map +0 -7
- frontend/dist/frontend/browser/index.html +13 -14
- frontend/dist/frontend/browser/main-2Z7HIITH.js +0 -0
- frontend/dist/frontend/browser/main.js +0 -0
- frontend/dist/frontend/browser/main.js.map +0 -0
- frontend/dist/frontend/browser/styles-Z6I53I7P.css +1 -0
- frontend/dist/frontend/browser/styles.css +0 -379
- frontend/dist/frontend/browser/styles.css.map +0 -7
- requirements.txt +0 -8
- start.sh +0 -46
Dockerfile
CHANGED
|
@@ -1,16 +1,4 @@
|
|
| 1 |
-
FROM python:3.11-slim
|
| 2 |
-
|
| 3 |
-
# Add official PostgreSQL APT repo (provides postgresql-17-pgvector prebuilt)
|
| 4 |
-
RUN apt-get update && apt-get install -y gnupg2 curl \
|
| 5 |
-
&& curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc \
|
| 6 |
-
| gpg --dearmor -o /usr/share/keyrings/postgresql-keyring.gpg \
|
| 7 |
-
&& echo "deb [signed-by=/usr/share/keyrings/postgresql-keyring.gpg] http://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" \
|
| 8 |
-
> /etc/apt/sources.list.d/postgresql.list \
|
| 9 |
-
&& apt-get update && apt-get install -y \
|
| 10 |
-
postgresql-17 \
|
| 11 |
-
postgresql-17-pgvector \
|
| 12 |
-
libpq-dev \
|
| 13 |
-
&& rm -rf /var/lib/apt/lists/*
|
| 14 |
|
| 15 |
WORKDIR /app
|
| 16 |
|
|
@@ -19,11 +7,8 @@ RUN pip install --no-cache-dir -r requirements.txt
|
|
| 19 |
|
| 20 |
COPY api/ api/
|
| 21 |
COPY models/ models/
|
| 22 |
-
COPY data/ data/
|
| 23 |
COPY frontend/dist/frontend/browser/ frontend/dist/frontend/browser/
|
| 24 |
-
COPY start.sh /start.sh
|
| 25 |
-
RUN chmod +x /start.sh
|
| 26 |
|
| 27 |
EXPOSE 7860
|
| 28 |
|
| 29 |
-
CMD ["
|
|
|
|
| 1 |
+
FROM python:3.11-slim
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
|
| 3 |
WORKDIR /app
|
| 4 |
|
|
|
|
| 7 |
|
| 8 |
COPY api/ api/
|
| 9 |
COPY models/ models/
|
|
|
|
| 10 |
COPY frontend/dist/frontend/browser/ frontend/dist/frontend/browser/
|
|
|
|
|
|
|
| 11 |
|
| 12 |
EXPOSE 7860
|
| 13 |
|
| 14 |
+
CMD ["uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "7860"]
|
api/inference.py
CHANGED
|
@@ -1,104 +1,22 @@
|
|
| 1 |
import joblib
|
| 2 |
-
import os
|
| 3 |
-
from fastapi import HTTPException
|
| 4 |
|
| 5 |
-
|
|
|
|
|
|
|
| 6 |
|
| 7 |
-
|
|
|
|
|
|
|
| 8 |
|
| 9 |
|
| 10 |
-
def
|
| 11 |
-
return os.path.join(MODELS_DIR, filename)
|
| 12 |
|
|
|
|
|
|
|
|
|
|
| 13 |
|
| 14 |
-
|
| 15 |
-
|
|
|
|
| 16 |
|
| 17 |
-
|
| 18 |
-
def _load(filename: str, key: str) -> bool:
|
| 19 |
-
if not _available(filename):
|
| 20 |
-
return False
|
| 21 |
-
try:
|
| 22 |
-
_cache[key] = joblib.load(_path(filename))
|
| 23 |
-
return True
|
| 24 |
-
except Exception as e:
|
| 25 |
-
print(f"WARNING: could not load {filename}: {e}")
|
| 26 |
-
return False
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
def get_available_models() -> list[str]:
|
| 30 |
-
available = []
|
| 31 |
-
if 'logistic' in _cache: available.append('logistic')
|
| 32 |
-
if 'lgbm' in _cache: available.append('lgbm')
|
| 33 |
-
if 'xgb' in _cache: available.append('xgb')
|
| 34 |
-
return available
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
def load_models() -> None:
|
| 38 |
-
if 'vectorizer' not in _cache:
|
| 39 |
-
if not _available('tfidf_vectorizer.pkl'):
|
| 40 |
-
raise RuntimeError(
|
| 41 |
-
"tfidf_vectorizer.pkl not found in models/. "
|
| 42 |
-
"Run scripts/train_all_models.py first."
|
| 43 |
-
)
|
| 44 |
-
_cache['vectorizer'] = joblib.load(_path('tfidf_vectorizer.pkl'))
|
| 45 |
-
print("Vectorizer loaded.")
|
| 46 |
-
|
| 47 |
-
if 'logistic' not in _cache:
|
| 48 |
-
if _load('best_logistic.pkl', 'logistic'):
|
| 49 |
-
print("Logistic model loaded.")
|
| 50 |
-
|
| 51 |
-
if 'lgbm' not in _cache:
|
| 52 |
-
if _load('best_lgbm.pkl', 'lgbm'):
|
| 53 |
-
print("LightGBM model loaded.")
|
| 54 |
-
|
| 55 |
-
if 'xgb' not in _cache:
|
| 56 |
-
ok1 = _load('best_xgb.pkl', 'xgb')
|
| 57 |
-
ok2 = _load('xgb_encoder.pkl', 'xgb_encoder')
|
| 58 |
-
if ok1 and ok2:
|
| 59 |
-
print("XGBoost model loaded.")
|
| 60 |
-
elif ok1:
|
| 61 |
-
del _cache['xgb']
|
| 62 |
-
|
| 63 |
-
available = get_available_models()
|
| 64 |
-
if not available:
|
| 65 |
-
raise RuntimeError(
|
| 66 |
-
"No models loaded. Run scripts/train_all_models.py first."
|
| 67 |
-
)
|
| 68 |
-
print(f"Models ready: {available}")
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
def predict_claim(text: str, model_id: str = 'logistic') -> dict:
|
| 72 |
-
if 'vectorizer' not in _cache:
|
| 73 |
-
raise HTTPException(status_code=503, detail="Models not loaded.")
|
| 74 |
-
|
| 75 |
-
vectorizer = _cache['vectorizer']
|
| 76 |
-
vector = vectorizer.transform([text])
|
| 77 |
-
|
| 78 |
-
if model_id == 'lgbm':
|
| 79 |
-
if 'lgbm' not in _cache:
|
| 80 |
-
raise HTTPException(status_code=503, detail="LightGBM model not available.")
|
| 81 |
-
model = _cache['lgbm']
|
| 82 |
-
prediction = str(model.predict(vector)[0])
|
| 83 |
-
proba_values = model.predict_proba(vector)[0]
|
| 84 |
-
probabilities = {str(c): float(p) for c, p in zip(model.classes_, proba_values)}
|
| 85 |
-
|
| 86 |
-
elif model_id == 'xgb':
|
| 87 |
-
if 'xgb' not in _cache:
|
| 88 |
-
raise HTTPException(status_code=503, detail="XGBoost model not available.")
|
| 89 |
-
model = _cache['xgb']
|
| 90 |
-
encoder = _cache['xgb_encoder']
|
| 91 |
-
pred_enc = model.predict(vector)[0]
|
| 92 |
-
prediction = str(encoder.inverse_transform([pred_enc])[0])
|
| 93 |
-
proba_values = model.predict_proba(vector)[0]
|
| 94 |
-
probabilities = {str(c): float(p) for c, p in zip(encoder.classes_, proba_values)}
|
| 95 |
-
|
| 96 |
-
else: # logistic (default)
|
| 97 |
-
if 'logistic' not in _cache:
|
| 98 |
-
raise HTTPException(status_code=503, detail="Logistic model not available.")
|
| 99 |
-
model = _cache['logistic']
|
| 100 |
-
prediction = str(model.predict(vector)[0])
|
| 101 |
-
proba_values = model.predict_proba(vector)[0]
|
| 102 |
-
probabilities = {str(c): float(p) for c, p in zip(model.classes_, proba_values)}
|
| 103 |
-
|
| 104 |
-
return {"prediction": prediction, "probabilities": probabilities}
|
|
|
|
| 1 |
import joblib
|
|
|
|
|
|
|
| 2 |
|
| 3 |
+
model = joblib.load(
|
| 4 |
+
"models/best_logistic.pkl"
|
| 5 |
+
)
|
| 6 |
|
| 7 |
+
vectorizer = joblib.load(
|
| 8 |
+
"models/tfidf_vectorizer.pkl"
|
| 9 |
+
)
|
| 10 |
|
| 11 |
|
| 12 |
+
def predict_claim(text):
|
|
|
|
| 13 |
|
| 14 |
+
vector = vectorizer.transform(
|
| 15 |
+
[text]
|
| 16 |
+
)
|
| 17 |
|
| 18 |
+
prediction = model.predict(
|
| 19 |
+
vector
|
| 20 |
+
)
|
| 21 |
|
| 22 |
+
return str(prediction[0])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
api/main.py
CHANGED
|
@@ -1,80 +1,29 @@
|
|
| 1 |
-
from fastapi import FastAPI
|
| 2 |
from fastapi.responses import FileResponse
|
| 3 |
from fastapi.staticfiles import StaticFiles
|
| 4 |
-
from
|
| 5 |
-
from api.
|
| 6 |
-
from api.schema import ClaimRequest, PredictionResponse, EvidenceItem
|
| 7 |
-
from api.rag import load_rag_data, get_rag_result
|
| 8 |
-
from dotenv import load_dotenv
|
| 9 |
-
import asyncio
|
| 10 |
import os
|
| 11 |
-
from contextlib import asynccontextmanager
|
| 12 |
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
STATIC_DIR = "frontend/dist/frontend/browser"
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
@asynccontextmanager
|
| 19 |
-
async def lifespan(app: FastAPI):
|
| 20 |
-
print("Loading models...")
|
| 21 |
-
load_models()
|
| 22 |
-
print("Building RAG index...")
|
| 23 |
-
load_rag_data()
|
| 24 |
-
print("Startup complete.")
|
| 25 |
-
yield
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
app = FastAPI(lifespan=lifespan)
|
| 29 |
-
|
| 30 |
-
app.add_middleware(
|
| 31 |
-
CORSMiddleware,
|
| 32 |
-
allow_origins=["*"],
|
| 33 |
-
allow_credentials=True,
|
| 34 |
-
allow_methods=["*"],
|
| 35 |
-
allow_headers=["*"],
|
| 36 |
-
)
|
| 37 |
|
| 38 |
|
| 39 |
@app.get("/health")
|
| 40 |
def health():
|
| 41 |
-
return {"status": "ok"
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
@app.get("/models")
|
| 45 |
-
def list_models():
|
| 46 |
-
return {"available_models": get_available_models()}
|
| 47 |
|
| 48 |
|
| 49 |
@app.post("/predict")
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
if not claim:
|
| 54 |
-
raise HTTPException(status_code=400, detail="Claim text cannot be empty")
|
| 55 |
-
|
| 56 |
-
result = await asyncio.to_thread(predict_claim, claim, claim_request.model)
|
| 57 |
-
predicted_label = result["prediction"]
|
| 58 |
-
|
| 59 |
-
evidence_raw, justification = await asyncio.to_thread(
|
| 60 |
-
get_rag_result, claim, predicted_label
|
| 61 |
-
)
|
| 62 |
|
| 63 |
-
evidence = [EvidenceItem(**e) for e in evidence_raw] if evidence_raw else None
|
| 64 |
-
|
| 65 |
-
return PredictionResponse(
|
| 66 |
-
prediction=predicted_label,
|
| 67 |
-
probabilities=result.get("probabilities"),
|
| 68 |
-
evidence=evidence,
|
| 69 |
-
justification=justification,
|
| 70 |
-
)
|
| 71 |
-
except HTTPException:
|
| 72 |
-
raise
|
| 73 |
-
except Exception as e:
|
| 74 |
-
raise HTTPException(status_code=500, detail=f"Error processing claim: {str(e)}")
|
| 75 |
|
|
|
|
| 76 |
|
| 77 |
if os.path.exists(STATIC_DIR):
|
|
|
|
|
|
|
| 78 |
@app.get("/{full_path:path}")
|
| 79 |
async def serve_spa(full_path: str):
|
| 80 |
file_path = os.path.join(STATIC_DIR, full_path)
|
|
|
|
| 1 |
+
from fastapi import FastAPI
|
| 2 |
from fastapi.responses import FileResponse
|
| 3 |
from fastapi.staticfiles import StaticFiles
|
| 4 |
+
from api.inference import predict_claim
|
| 5 |
+
from api.schema import ClaimRequest, PredictionResponse
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
import os
|
|
|
|
| 7 |
|
| 8 |
+
app = FastAPI()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
|
| 10 |
|
| 11 |
@app.get("/health")
|
| 12 |
def health():
|
| 13 |
+
return {"status": "ok"}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
|
| 16 |
@app.post("/predict")
|
| 17 |
+
def predict_claim_endpoint(claim_request: ClaimRequest):
|
| 18 |
+
prediction = predict_claim(claim_request.claim)
|
| 19 |
+
return PredictionResponse(prediction=prediction)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
|
| 22 |
+
STATIC_DIR = "frontend/dist/frontend/browser"
|
| 23 |
|
| 24 |
if os.path.exists(STATIC_DIR):
|
| 25 |
+
app.mount("/assets", StaticFiles(directory=STATIC_DIR), name="assets")
|
| 26 |
+
|
| 27 |
@app.get("/{full_path:path}")
|
| 28 |
async def serve_spa(full_path: str):
|
| 29 |
file_path = os.path.join(STATIC_DIR, full_path)
|
api/rag.py
DELETED
|
@@ -1,230 +0,0 @@
|
|
| 1 |
-
import os
|
| 2 |
-
import json
|
| 3 |
-
import numpy as np
|
| 4 |
-
from sklearn.feature_extraction.text import TfidfVectorizer
|
| 5 |
-
from sklearn.decomposition import TruncatedSVD
|
| 6 |
-
from sklearn.pipeline import Pipeline
|
| 7 |
-
|
| 8 |
-
DATA_PATH = os.path.join(os.path.dirname(__file__), '..', 'data', 'raw', 'train.json')
|
| 9 |
-
RAG_DIMS = 512
|
| 10 |
-
|
| 11 |
-
_pipeline: Pipeline | None = None
|
| 12 |
-
_pgvector_ready = False
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
# ── helpers ──────────────────────────────────────────────────────────────────
|
| 16 |
-
|
| 17 |
-
def _database_url() -> str:
|
| 18 |
-
return os.environ.get(
|
| 19 |
-
'DATABASE_URL',
|
| 20 |
-
'postgresql://mlflow:mlflow123@localhost:5432/mlflow_db'
|
| 21 |
-
)
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
def _connect():
|
| 25 |
-
import psycopg2
|
| 26 |
-
from pgvector.psycopg2 import register_vector
|
| 27 |
-
conn = psycopg2.connect(_database_url())
|
| 28 |
-
register_vector(conn)
|
| 29 |
-
return conn
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
def _fit_pipeline(texts: list[str]) -> Pipeline:
|
| 33 |
-
pipe = Pipeline([
|
| 34 |
-
('tfidf', TfidfVectorizer(max_features=5000, stop_words='english', ngram_range=(1, 2))),
|
| 35 |
-
('svd', TruncatedSVD(n_components=RAG_DIMS, random_state=42)),
|
| 36 |
-
])
|
| 37 |
-
pipe.fit(texts)
|
| 38 |
-
return pipe
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
def _embed(pipe: Pipeline, texts: list[str]) -> np.ndarray:
|
| 42 |
-
vecs = pipe.transform(texts)
|
| 43 |
-
norms = np.linalg.norm(vecs, axis=1, keepdims=True)
|
| 44 |
-
norms[norms == 0] = 1.0
|
| 45 |
-
return (vecs / norms).astype(np.float32)
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
# ── startup ───────────────────────────────────────────────────────────────────
|
| 49 |
-
|
| 50 |
-
def load_rag_data(_main_vectorizer=None) -> None:
|
| 51 |
-
global _pipeline, _pgvector_ready
|
| 52 |
-
|
| 53 |
-
if not os.path.exists(DATA_PATH):
|
| 54 |
-
print(f"RAG: {DATA_PATH} not found — retrieval disabled.")
|
| 55 |
-
return
|
| 56 |
-
|
| 57 |
-
try:
|
| 58 |
-
with open(DATA_PATH, 'r', encoding='utf-8') as f:
|
| 59 |
-
data = json.load(f)
|
| 60 |
-
except Exception as e:
|
| 61 |
-
print(f"RAG: failed to load data — {e}")
|
| 62 |
-
return
|
| 63 |
-
|
| 64 |
-
statements = [str(item.get('statement', '')) for item in data]
|
| 65 |
-
labels = [str(item.get('label', '')) for item in data]
|
| 66 |
-
reasons = [str(item.get('reason', '')) for item in data]
|
| 67 |
-
|
| 68 |
-
# Always (re)fit the pipeline — fast enough on 10K rows
|
| 69 |
-
print("RAG: fitting LSA pipeline (TF-IDF 5 000 → SVD 512)…")
|
| 70 |
-
_pipeline = _fit_pipeline(statements)
|
| 71 |
-
|
| 72 |
-
db_url = _database_url()
|
| 73 |
-
print(f"RAG: connecting to {db_url.split('@')[-1]}…") # hide credentials
|
| 74 |
-
|
| 75 |
-
try:
|
| 76 |
-
conn = _connect()
|
| 77 |
-
cur = conn.cursor()
|
| 78 |
-
|
| 79 |
-
cur.execute("SELECT COUNT(*) FROM rag_claims;")
|
| 80 |
-
count = cur.fetchone()[0]
|
| 81 |
-
|
| 82 |
-
if count == 0:
|
| 83 |
-
print(f"RAG: inserting {len(statements)} claims into pgvector…")
|
| 84 |
-
vectors = _embed(_pipeline, statements)
|
| 85 |
-
|
| 86 |
-
from psycopg2.extras import execute_values
|
| 87 |
-
rows = [
|
| 88 |
-
(statements[i], labels[i], reasons[i][:500], vectors[i])
|
| 89 |
-
for i in range(len(statements))
|
| 90 |
-
]
|
| 91 |
-
execute_values(
|
| 92 |
-
cur,
|
| 93 |
-
"INSERT INTO rag_claims (statement, label, reason, embedding) VALUES %s",
|
| 94 |
-
rows,
|
| 95 |
-
template="(%s, %s, %s, %s)",
|
| 96 |
-
)
|
| 97 |
-
conn.commit()
|
| 98 |
-
print(f"RAG: {len(rows)} claims indexed in pgvector ✓")
|
| 99 |
-
else:
|
| 100 |
-
print(f"RAG: {count} claims already in pgvector — skipping insert.")
|
| 101 |
-
|
| 102 |
-
cur.close()
|
| 103 |
-
conn.close()
|
| 104 |
-
_pgvector_ready = True
|
| 105 |
-
print("RAG: ready ✓")
|
| 106 |
-
|
| 107 |
-
except Exception as e:
|
| 108 |
-
print(f"RAG ERROR: {e}")
|
| 109 |
-
print("RAG: retrieval disabled — run 'docker compose down -v && docker compose up --build' to reset.")
|
| 110 |
-
_pgvector_ready = False
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
# ── retrieval ─────────────────────────────────────────────────────────────────
|
| 114 |
-
|
| 115 |
-
def retrieve_similar(claim: str, predicted_label: str, top_k: int = 3) -> list:
|
| 116 |
-
if not _pgvector_ready or _pipeline is None:
|
| 117 |
-
return []
|
| 118 |
-
|
| 119 |
-
try:
|
| 120 |
-
query_vec = _embed(_pipeline, [claim])[0]
|
| 121 |
-
|
| 122 |
-
conn = _connect()
|
| 123 |
-
cur = conn.cursor()
|
| 124 |
-
cur.execute(
|
| 125 |
-
"""
|
| 126 |
-
SELECT statement, label, reason,
|
| 127 |
-
1 - (embedding <=> %s) AS similarity
|
| 128 |
-
FROM rag_claims
|
| 129 |
-
WHERE label = %s
|
| 130 |
-
ORDER BY embedding <=> %s
|
| 131 |
-
LIMIT %s
|
| 132 |
-
""",
|
| 133 |
-
(query_vec, predicted_label, query_vec, top_k),
|
| 134 |
-
)
|
| 135 |
-
rows = cur.fetchall()
|
| 136 |
-
cur.close()
|
| 137 |
-
conn.close()
|
| 138 |
-
|
| 139 |
-
return [
|
| 140 |
-
{
|
| 141 |
-
'statement': row[0],
|
| 142 |
-
'label': row[1],
|
| 143 |
-
'reason': row[2],
|
| 144 |
-
'similarity': float(row[3]),
|
| 145 |
-
}
|
| 146 |
-
for row in rows
|
| 147 |
-
]
|
| 148 |
-
except Exception as e:
|
| 149 |
-
print(f"RAG: retrieval error — {e}")
|
| 150 |
-
return []
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
# ── generation (NVIDIA NIM) ───────────────────────────────────────────────────
|
| 154 |
-
|
| 155 |
-
_NIM_BASE_URL = "https://integrate.api.nvidia.com/v1"
|
| 156 |
-
_NIM_MODEL = "meta/llama-3.1-8b-instruct"
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
def _generate_justification(claim: str, predicted_label: str, similar: list) -> str | None:
|
| 160 |
-
if not similar:
|
| 161 |
-
return None
|
| 162 |
-
|
| 163 |
-
nim_key = os.environ.get('NVIDIA_API_KEY')
|
| 164 |
-
if not nim_key:
|
| 165 |
-
print("RAG: NVIDIA_API_KEY not set — justification disabled.")
|
| 166 |
-
return None
|
| 167 |
-
|
| 168 |
-
try:
|
| 169 |
-
from openai import OpenAI
|
| 170 |
-
client = OpenAI(base_url=_NIM_BASE_URL, api_key=nim_key)
|
| 171 |
-
except ImportError:
|
| 172 |
-
return None
|
| 173 |
-
|
| 174 |
-
label_fr = {
|
| 175 |
-
'true': 'VRAI',
|
| 176 |
-
'mostly-true': 'MAJORITAIREMENT VRAI',
|
| 177 |
-
'half-true': 'PARTIELLEMENT VRAI',
|
| 178 |
-
'barely-true': 'À PEINE VRAI',
|
| 179 |
-
'false': 'FAUX',
|
| 180 |
-
'pants-fire': 'TOTALEMENT FAUX',
|
| 181 |
-
}.get(predicted_label, predicted_label.upper())
|
| 182 |
-
|
| 183 |
-
examples = []
|
| 184 |
-
for i, s in enumerate(similar[:3], 1):
|
| 185 |
-
examples.append(
|
| 186 |
-
f"Exemple {i} (similarité={s['similarity']:.2f}) :\n"
|
| 187 |
-
f" Déclaration : {s['statement']}\n"
|
| 188 |
-
f" Raison : {(s['reason'] or '')[:250]}"
|
| 189 |
-
)
|
| 190 |
-
|
| 191 |
-
prompt = (
|
| 192 |
-
f"Tu es un assistant de vérification des faits.\n"
|
| 193 |
-
f"Déclaration : « {claim} »\n"
|
| 194 |
-
f"Classification : {label_fr} ({predicted_label})\n\n"
|
| 195 |
-
f"Exemples similaires (même classification) dans la base LIAR :\n\n"
|
| 196 |
-
+ '\n\n'.join(examples) +
|
| 197 |
-
f"\n\nEn 2-3 phrases concises en français, justifie pourquoi cette déclaration est"
|
| 198 |
-
f" classée « {predicted_label} » en t'appuyant sur les similitudes avec ces exemples."
|
| 199 |
-
" Réponds directement sans titre ni introduction."
|
| 200 |
-
)
|
| 201 |
-
|
| 202 |
-
try:
|
| 203 |
-
resp = client.chat.completions.create(
|
| 204 |
-
model=_NIM_MODEL,
|
| 205 |
-
messages=[{"role": "user", "content": prompt}],
|
| 206 |
-
max_tokens=350,
|
| 207 |
-
temperature=0.3,
|
| 208 |
-
)
|
| 209 |
-
return resp.choices[0].message.content.strip()
|
| 210 |
-
except Exception as exc:
|
| 211 |
-
print(f"RAG NIM generation error: {exc}")
|
| 212 |
-
return None
|
| 213 |
-
|
| 214 |
-
|
| 215 |
-
# ── public API ────────────────────────────────────────────────────────────────
|
| 216 |
-
|
| 217 |
-
def get_rag_result(claim: str, predicted_label: str, _vectorizer=None) -> tuple[list, str | None]:
|
| 218 |
-
similar = retrieve_similar(claim, predicted_label)
|
| 219 |
-
justification = _generate_justification(claim, predicted_label, similar)
|
| 220 |
-
|
| 221 |
-
evidence = [
|
| 222 |
-
{
|
| 223 |
-
'statement': s['statement'],
|
| 224 |
-
'label': s['label'],
|
| 225 |
-
'similarity': round(s['similarity'], 3),
|
| 226 |
-
'reason': (s['reason'] or '')[:300] or None,
|
| 227 |
-
}
|
| 228 |
-
for s in similar
|
| 229 |
-
]
|
| 230 |
-
return evidence, justification
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
api/schema.py
CHANGED
|
@@ -1,21 +1,9 @@
|
|
| 1 |
from pydantic import BaseModel
|
| 2 |
-
from typing import Dict, List, Optional
|
| 3 |
|
| 4 |
|
| 5 |
class ClaimRequest(BaseModel):
|
| 6 |
claim: str
|
| 7 |
-
model: str = 'logistic'
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
class EvidenceItem(BaseModel):
|
| 11 |
-
statement: str
|
| 12 |
-
label: str
|
| 13 |
-
similarity: float
|
| 14 |
-
reason: Optional[str] = None
|
| 15 |
|
| 16 |
|
| 17 |
class PredictionResponse(BaseModel):
|
| 18 |
-
prediction: str
|
| 19 |
-
probabilities: Optional[Dict[str, float]] = None
|
| 20 |
-
evidence: Optional[List[EvidenceItem]] = None
|
| 21 |
-
justification: Optional[str] = None
|
|
|
|
| 1 |
from pydantic import BaseModel
|
|
|
|
| 2 |
|
| 3 |
|
| 4 |
class ClaimRequest(BaseModel):
|
| 5 |
claim: str
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
|
| 7 |
|
| 8 |
class PredictionResponse(BaseModel):
|
| 9 |
+
prediction: str
|
|
|
|
|
|
|
|
|
data/raw/train.json
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:821995c30a67c5dfd22e1f0f2b4d90a6f72358b26ee83621c8b451d6a828f951
|
| 3 |
-
size 15789816
|
|
|
|
|
|
|
|
|
|
|
|
frontend/dist/frontend/browser/chunk-HLPJREHD.js
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
frontend/dist/frontend/browser/chunk-N7V54BGS.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
import{Ab as me,Bb as ne,G as E,J as Tt,a as fe,c as Et,qb as S,rb as z,ub as vt,vb as Fe,zb as Y}from"./chunk-HLPJREHD.js";function bt(n){return new E(3e3,!1)}function bs(){return new E(3100,!1)}function ws(){return new E(3101,!1)}function As(n){return new E(3001,!1)}function Ps(n){return new E(3003,!1)}function Ns(n){return new E(3004,!1)}function At(n,e){return new E(3005,!1)}function Pt(){return new E(3006,!1)}function Nt(){return new E(3007,!1)}function Mt(n,e){return new E(3008,!1)}function Ct(n){return new E(3002,!1)}function kt(n,e,t,s,i){return new E(3010,!1)}function Dt(){return new E(3011,!1)}function Rt(){return new E(3012,!1)}function Ot(){return new E(3200,!1)}function Lt(){return new E(3202,!1)}function Ft(){return new E(3013,!1)}function It(n){return new E(3014,!1)}function zt(n){return new E(3015,!1)}function Kt(n){return new E(3016,!1)}function qt(n){return new E(3500,!1)}function Bt(n){return new E(3501,!1)}function Qt(n,e){return new E(3404,!1)}function Ms(n){return new E(3502,!1)}function Vt(n){return new E(3503,!1)}function $t(){return new E(3300,!1)}function Ut(n){return new E(3504,!1)}function Gt(n){return new E(3301,!1)}function jt(n,e){return new E(3302,!1)}function Wt(n){return new E(3303,!1)}function Ht(n,e){return new E(3400,!1)}function Yt(n){return new E(3401,!1)}function Xt(n){return new E(3402,!1)}function Jt(n,e){return new E(3505,!1)}var Cs=new Set(["-moz-outline-radius","-moz-outline-radius-bottomleft","-moz-outline-radius-bottomright","-moz-outline-radius-topleft","-moz-outline-radius-topright","-ms-grid-columns","-ms-grid-rows","-webkit-line-clamp","-webkit-text-fill-color","-webkit-text-stroke","-webkit-text-stroke-color","accent-color","all","backdrop-filter","background","background-color","background-position","background-size","block-size","border","border-block-end","border-block-end-color","border-block-end-width","border-block-start","border-block-start-color","border-block-start-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-width","border-color","border-end-end-radius","border-end-start-radius","border-image-outset","border-image-slice","border-image-width","border-inline-end","border-inline-end-color","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-width","border-left","border-left-color","border-left-width","border-radius","border-right","border-right-color","border-right-width","border-start-end-radius","border-start-start-radius","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-width","border-width","bottom","box-shadow","caret-color","clip","clip-path","color","column-count","column-gap","column-rule","column-rule-color","column-rule-width","column-width","columns","filter","flex","flex-basis","flex-grow","flex-shrink","font","font-size","font-size-adjust","font-stretch","font-variation-settings","font-weight","gap","grid-column-gap","grid-gap","grid-row-gap","grid-template-columns","grid-template-rows","height","inline-size","input-security","inset","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","left","letter-spacing","line-clamp","line-height","margin","margin-block-end","margin-block-start","margin-bottom","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","mask","mask-border","mask-position","mask-size","max-block-size","max-height","max-inline-size","max-lines","max-width","min-block-size","min-height","min-inline-size","min-width","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","outline","outline-color","outline-offset","outline-width","padding","padding-block-end","padding-block-start","padding-bottom","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","perspective","perspective-origin","right","rotate","row-gap","scale","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-coordinate","scroll-snap-destination","scrollbar-color","shape-image-threshold","shape-margin","shape-outside","tab-size","text-decoration","text-decoration-color","text-decoration-thickness","text-emphasis","text-emphasis-color","text-indent","text-shadow","text-underline-offset","top","transform","transform-origin","translate","vertical-align","visibility","width","word-spacing","z-index","zoom"]);function $(n){switch(n.length){case 0:return new Y;case 1:return n[0];default:return new me(n)}}function qe(n,e,t=new Map,s=new Map){let i=[],r=[],a=-1,o=null;if(e.forEach(l=>{let u=l.get("offset"),h=u==a,c=h&&o||new Map;l.forEach((_,y)=>{let f=y,g=_;if(y!=="offset")switch(f=n.normalizePropertyName(f,i),g){case ne:g=t.get(y);break;case z:g=s.get(y);break;default:g=n.normalizeStyleValue(y,f,g,i);break}c.set(f,g)}),h||r.push(c),o=c,a=u}),i.length)throw Ms(i);return r}function pe(n,e,t,s){switch(e){case"start":n.onStart(()=>s(t&&Ie(t,"start",n)));break;case"done":n.onDone(()=>s(t&&Ie(t,"done",n)));break;case"destroy":n.onDestroy(()=>s(t&&Ie(t,"destroy",n)));break}}function Ie(n,e,t){let s=t.totalTime,i=!!t.disabled,r=ge(n.element,n.triggerName,n.fromState,n.toState,e||n.phaseName,s??n.totalTime,i),a=n._data;return a!=null&&(r._data=a),r}function ge(n,e,t,s,i="",r=0,a){return{element:n,triggerName:e,fromState:t,toState:s,phaseName:i,totalTime:r,disabled:!!a}}function R(n,e,t){let s=n.get(e);return s||n.set(e,s=t),s}function Be(n){let e=n.indexOf(":"),t=n.substring(1,e),s=n.slice(e+1);return[t,s]}var ks=typeof document>"u"?null:document.documentElement;function ye(n){let e=n.parentNode||n.host||null;return e===ks?null:e}function Ds(n){return n.substring(1,6)=="ebkit"}var X=null,wt=!1;function Zt(n){X||(X=Os()||{},wt=X.style?"WebkitAppearance"in X.style:!1);let e=!0;return X.style&&!Ds(n)&&(e=n in X.style,!e&&wt&&(e="Webkit"+n.charAt(0).toUpperCase()+n.slice(1)in X.style)),e}function Rs(n){return Cs.has(n)}function Os(){return typeof document<"u"?document.body:null}function Qe(n,e){for(;e;){if(e===n)return!0;e=ye(e)}return!1}function Ve(n,e,t){if(t)return Array.from(n.querySelectorAll(e));let s=n.querySelector(e);return s?[s]:[]}var Ls=1e3,$e="{{",Fs="}}",_e="ng-enter",re="ng-leave",ae="ng-trigger",oe=".ng-trigger",Ue="ng-animating",Se=".ng-animating";function V(n){if(typeof n=="number")return n;let e=n.match(/^(-?[\.\d]+)(m?s)/);return!e||e.length<2?0:ze(parseFloat(e[1]),e[2])}function ze(n,e){return e==="s"?n*Ls:n}function le(n,e,t){return n.hasOwnProperty("duration")?n:zs(n,e,t)}var Is=/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i;function zs(n,e,t){let s,i=0,r="";if(typeof n=="string"){let a=n.match(Is);if(a===null)return e.push(bt(n)),{duration:0,delay:0,easing:""};s=ze(parseFloat(a[1]),a[2]);let o=a[3];o!=null&&(i=ze(parseFloat(o),a[4]));let l=a[5];l&&(r=l)}else s=n;if(!t){let a=!1,o=e.length;s<0&&(e.push(bs()),a=!0),i<0&&(e.push(ws()),a=!0),a&&e.splice(o,0,bt(n))}return{duration:s,delay:i,easing:r}}function xt(n){return n.length?n[0]instanceof Map?n:n.map(e=>new Map(Object.entries(e))):[]}function Ge(n){return Array.isArray(n)?new Map(...n):new Map(n)}function K(n,e,t){e.forEach((s,i)=>{let r=Ee(i);t&&!t.has(i)&&t.set(i,n.style[r]),n.style[r]=s})}function G(n,e){e.forEach((t,s)=>{let i=Ee(s);n.style[i]=""})}function ee(n){return Array.isArray(n)?n.length==1?n[0]:vt(n):n}function es(n,e,t){let s=e.params||{},i=je(n);i.length&&i.forEach(r=>{s.hasOwnProperty(r)||t.push(As(r))})}var Ke=new RegExp(`${$e}\\s*(.+?)\\s*${Fs}`,"g");function je(n){let e=[];if(typeof n=="string"){let t;for(;t=Ke.exec(n);)e.push(t[1]);Ke.lastIndex=0}return e}function te(n,e,t){let s=`${n}`,i=s.replace(Ke,(r,a)=>{let o=e[a];return o==null&&(t.push(Ps(a)),o=""),o.toString()});return i==s?n:i}var Ks=/-+([a-z0-9])/g;function Ee(n){return n.replace(Ks,(...e)=>e[1].toUpperCase())}function qs(n){return n.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function ts(n,e){return n===0||e===0}function ss(n,e,t){if(t.size&&e.length){let s=e[0],i=[];if(t.forEach((r,a)=>{s.has(a)||i.push(a),s.set(a,r)}),i.length)for(let r=1;r<e.length;r++){let a=e[r];i.forEach(o=>a.set(o,Te(n,o)))}}return e}function O(n,e,t){switch(e.type){case S.Trigger:return n.visitTrigger(e,t);case S.State:return n.visitState(e,t);case S.Transition:return n.visitTransition(e,t);case S.Sequence:return n.visitSequence(e,t);case S.Group:return n.visitGroup(e,t);case S.Animate:return n.visitAnimate(e,t);case S.Keyframes:return n.visitKeyframes(e,t);case S.Style:return n.visitStyle(e,t);case S.Reference:return n.visitReference(e,t);case S.AnimateChild:return n.visitAnimateChild(e,t);case S.AnimateRef:return n.visitAnimateRef(e,t);case S.Query:return n.visitQuery(e,t);case S.Stagger:return n.visitStagger(e,t);default:throw Ns(e.type)}}function Te(n,e){return window.getComputedStyle(n)[e]}var gs=(()=>{class n{validateStyleProperty(t){return Zt(t)}containsElement(t,s){return Qe(t,s)}getParentElement(t){return ye(t)}query(t,s,i){return Ve(t,s,i)}computeStyle(t,s,i){return i||""}animate(t,s,i,r,a,o=[],l){return new Y(i,r)}static \u0275fac=function(s){return new(s||n)};static \u0275prov=Tt({token:n,factory:n.\u0275fac})}return n})(),is=class{static NOOP=new gs},Ze=class{},xe=class{normalizePropertyName(e,t){return e}normalizeStyleValue(e,t,s,i){return s}},Bs=new Set(["width","height","minWidth","minHeight","maxWidth","maxHeight","left","top","bottom","right","fontSize","outlineWidth","outlineOffset","paddingTop","paddingLeft","paddingBottom","paddingRight","marginTop","marginLeft","marginBottom","marginRight","borderRadius","borderWidth","borderTopWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","textIndent","perspective"]),et=class extends Ze{normalizePropertyName(e,t){return Ee(e)}normalizeStyleValue(e,t,s,i){let r="",a=s.toString().trim();if(Bs.has(t)&&s!==0&&s!=="0")if(typeof s=="number")r="px";else{let o=s.match(/^[+-]?[\d\.]+([a-z]*)$/);o&&o[1].length==0&&i.push(At(e,s))}return a+r}};var Pe="*";function Qs(n,e){let t=[];return typeof n=="string"?n.split(/\s*,\s*/).forEach(s=>Vs(s,t,e)):t.push(n),t}function Vs(n,e,t){if(n[0]==":"){let l=$s(n,t);if(typeof l=="function"){e.push(l);return}n=l}let s=n.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);if(s==null||s.length<4)return t.push(zt(n)),e;let i=s[1],r=s[2],a=s[3];e.push(ns(i,a));let o=i==Pe&&a==Pe;r[0]=="<"&&!o&&e.push(ns(a,i))}function $s(n,e){switch(n){case":enter":return"void => *";case":leave":return"* => void";case":increment":return(t,s)=>parseFloat(s)>parseFloat(t);case":decrement":return(t,s)=>parseFloat(s)<parseFloat(t);default:return e.push(Kt(n)),"* => *"}}var ve=new Set(["true","1"]),be=new Set(["false","0"]);function ns(n,e){let t=ve.has(n)||be.has(n),s=ve.has(e)||be.has(e);return(i,r)=>{let a=n==Pe||n==i,o=e==Pe||e==r;return!a&&t&&typeof i=="boolean"&&(a=i?ve.has(n):be.has(n)),!o&&s&&typeof r=="boolean"&&(o=r?ve.has(e):be.has(e)),a&&o}}var ys=":self",Us=new RegExp(`s*${ys}s*,?`,"g");function ft(n,e,t,s){return new tt(n).build(e,t,s)}var rs="",tt=class{_driver;constructor(e){this._driver=e}build(e,t,s){let i=new st(t);return this._resetContextStyleTimingState(i),O(this,ee(e),i)}_resetContextStyleTimingState(e){e.currentQuerySelector=rs,e.collectedStyles=new Map,e.collectedStyles.set(rs,new Map),e.currentTime=0}visitTrigger(e,t){let s=t.queryCount=0,i=t.depCount=0,r=[],a=[];return e.name.charAt(0)=="@"&&t.errors.push(Pt()),e.definitions.forEach(o=>{if(this._resetContextStyleTimingState(t),o.type==S.State){let l=o,u=l.name;u.toString().split(/\s*,\s*/).forEach(h=>{l.name=h,r.push(this.visitState(l,t))}),l.name=u}else if(o.type==S.Transition){let l=this.visitTransition(o,t);s+=l.queryCount,i+=l.depCount,a.push(l)}else t.errors.push(Nt())}),{type:S.Trigger,name:e.name,states:r,transitions:a,queryCount:s,depCount:i,options:null}}visitState(e,t){let s=this.visitStyle(e.styles,t),i=e.options&&e.options.params||null;if(s.containsDynamicStyles){let r=new Set,a=i||{};s.styles.forEach(o=>{o instanceof Map&&o.forEach(l=>{je(l).forEach(u=>{a.hasOwnProperty(u)||r.add(u)})})}),r.size&&t.errors.push(Mt(e.name,[...r.values()]))}return{type:S.State,name:e.name,style:s,options:i?{params:i}:null}}visitTransition(e,t){t.queryCount=0,t.depCount=0;let s=O(this,ee(e.animation),t),i=Qs(e.expr,t.errors);return{type:S.Transition,matchers:i,animation:s,queryCount:t.queryCount,depCount:t.depCount,options:J(e.options)}}visitSequence(e,t){return{type:S.Sequence,steps:e.steps.map(s=>O(this,s,t)),options:J(e.options)}}visitGroup(e,t){let s=t.currentTime,i=0,r=e.steps.map(a=>{t.currentTime=s;let o=O(this,a,t);return i=Math.max(i,t.currentTime),o});return t.currentTime=i,{type:S.Group,steps:r,options:J(e.options)}}visitAnimate(e,t){let s=Hs(e.timings,t.errors);t.currentAnimateTimings=s;let i,r=e.styles?e.styles:Fe({});if(r.type==S.Keyframes)i=this.visitKeyframes(r,t);else{let a=e.styles,o=!1;if(!a){o=!0;let u={};s.easing&&(u.easing=s.easing),a=Fe(u)}t.currentTime+=s.duration+s.delay;let l=this.visitStyle(a,t);l.isEmptyStep=o,i=l}return t.currentAnimateTimings=null,{type:S.Animate,timings:s,style:i,options:null}}visitStyle(e,t){let s=this._makeStyleAst(e,t);return this._validateStyleAst(s,t),s}_makeStyleAst(e,t){let s=[],i=Array.isArray(e.styles)?e.styles:[e.styles];for(let o of i)typeof o=="string"?o===z?s.push(o):t.errors.push(Ct(o)):s.push(new Map(Object.entries(o)));let r=!1,a=null;return s.forEach(o=>{if(o instanceof Map&&(o.has("easing")&&(a=o.get("easing"),o.delete("easing")),!r)){for(let l of o.values())if(l.toString().indexOf($e)>=0){r=!0;break}}}),{type:S.Style,styles:s,easing:a,offset:e.offset,containsDynamicStyles:r,options:null}}_validateStyleAst(e,t){let s=t.currentAnimateTimings,i=t.currentTime,r=t.currentTime;s&&r>0&&(r-=s.duration+s.delay),e.styles.forEach(a=>{typeof a!="string"&&a.forEach((o,l)=>{let u=t.collectedStyles.get(t.currentQuerySelector),h=u.get(l),c=!0;h&&(r!=i&&r>=h.startTime&&i<=h.endTime&&(t.errors.push(kt(l,h.startTime,h.endTime,r,i)),c=!1),r=h.startTime),c&&u.set(l,{startTime:r,endTime:i}),t.options&&es(o,t.options,t.errors)})})}visitKeyframes(e,t){let s={type:S.Keyframes,styles:[],options:null};if(!t.currentAnimateTimings)return t.errors.push(Dt()),s;let i=1,r=0,a=[],o=!1,l=!1,u=0,h=e.steps.map(w=>{let A=this._makeStyleAst(w,t),C=A.offset!=null?A.offset:Ws(A.styles),N=0;return C!=null&&(r++,N=A.offset=C),l=l||N<0||N>1,o=o||N<u,u=N,a.push(N),A});l&&t.errors.push(Rt()),o&&t.errors.push(Ot());let c=e.steps.length,_=0;r>0&&r<c?t.errors.push(Lt()):r==0&&(_=i/(c-1));let y=c-1,f=t.currentTime,g=t.currentAnimateTimings,v=g.duration;return h.forEach((w,A)=>{let C=_>0?A==y?1:_*A:a[A],N=C*v;t.currentTime=f+g.delay+N,g.duration=N,this._validateStyleAst(w,t),w.offset=C,s.styles.push(w)}),s}visitReference(e,t){return{type:S.Reference,animation:O(this,ee(e.animation),t),options:J(e.options)}}visitAnimateChild(e,t){return t.depCount++,{type:S.AnimateChild,options:J(e.options)}}visitAnimateRef(e,t){return{type:S.AnimateRef,animation:this.visitReference(e.animation,t),options:J(e.options)}}visitQuery(e,t){let s=t.currentQuerySelector,i=e.options||{};t.queryCount++,t.currentQuery=e;let[r,a]=Gs(e.selector);t.currentQuerySelector=s.length?s+" "+r:r,R(t.collectedStyles,t.currentQuerySelector,new Map);let o=O(this,ee(e.animation),t);return t.currentQuery=null,t.currentQuerySelector=s,{type:S.Query,selector:r,limit:i.limit||0,optional:!!i.optional,includeSelf:a,animation:o,originalSelector:e.selector,options:J(e.options)}}visitStagger(e,t){t.currentQuery||t.errors.push(Ft());let s=e.timings==="full"?{duration:0,delay:0,easing:"full"}:le(e.timings,t.errors,!0);return{type:S.Stagger,animation:O(this,ee(e.animation),t),timings:s,options:null}}};function Gs(n){let e=!!n.split(/\s*,\s*/).find(t=>t==ys);return e&&(n=n.replace(Us,"")),n=n.replace(/@\*/g,oe).replace(/@\w+/g,t=>oe+"-"+t.slice(1)).replace(/:animating/g,Se),[n,e]}function js(n){return n?fe({},n):null}var st=class{errors;queryCount=0;depCount=0;currentTransition=null;currentQuery=null;currentQuerySelector=null;currentAnimateTimings=null;currentTime=0;collectedStyles=new Map;options=null;unsupportedCSSPropertiesFound=new Set;constructor(e){this.errors=e}};function Ws(n){if(typeof n=="string")return null;let e=null;if(Array.isArray(n))n.forEach(t=>{if(t instanceof Map&&t.has("offset")){let s=t;e=parseFloat(s.get("offset")),s.delete("offset")}});else if(n instanceof Map&&n.has("offset")){let t=n;e=parseFloat(t.get("offset")),t.delete("offset")}return e}function Hs(n,e){if(n.hasOwnProperty("duration"))return n;if(typeof n=="number"){let r=le(n,e).duration;return We(r,0,"")}let t=n;if(t.split(/\s+/).some(r=>r.charAt(0)=="{"&&r.charAt(1)=="{")){let r=We(0,0,"");return r.dynamic=!0,r.strValue=t,r}let i=le(t,e);return We(i.duration,i.delay,i.easing)}function J(n){return n?(n=fe({},n),n.params&&(n.params=js(n.params))):n={},n}function We(n,e,t){return{duration:n,delay:e,easing:t}}function mt(n,e,t,s,i,r,a=null,o=!1){return{type:1,element:n,keyframes:e,preStyleProps:t,postStyleProps:s,duration:i,delay:r,totalTime:i+r,easing:a,subTimeline:o}}var ie=class{_map=new Map;get(e){return this._map.get(e)||[]}append(e,t){let s=this._map.get(e);s||this._map.set(e,s=[]),s.push(...t)}has(e){return this._map.has(e)}clear(){this._map.clear()}},Ys=1,Xs=":enter",Js=new RegExp(Xs,"g"),Zs=":leave",xs=new RegExp(Zs,"g");function pt(n,e,t,s,i,r=new Map,a=new Map,o,l,u=[]){return new it().buildKeyframes(n,e,t,s,i,r,a,o,l,u)}var it=class{buildKeyframes(e,t,s,i,r,a,o,l,u,h=[]){u=u||new ie;let c=new nt(e,t,u,i,r,h,[]);c.options=l;let _=l.delay?V(l.delay):0;c.currentTimeline.delayNextStep(_),c.currentTimeline.setStyles([a],null,c.errors,l),O(this,s,c);let y=c.timelines.filter(f=>f.containsAnimation());if(y.length&&o.size){let f;for(let g=y.length-1;g>=0;g--){let v=y[g];if(v.element===t){f=v;break}}f&&!f.allowOnlyTimelineStyles()&&f.setStyles([o],null,c.errors,l)}return y.length?y.map(f=>f.buildKeyframes()):[mt(t,[],[],[],0,_,"",!1)]}visitTrigger(e,t){}visitState(e,t){}visitTransition(e,t){}visitAnimateChild(e,t){let s=t.subInstructions.get(t.element);if(s){let i=t.createSubContext(e.options),r=t.currentTimeline.currentTime,a=this._visitSubInstructions(s,i,i.options);r!=a&&t.transformIntoNewTimeline(a)}t.previousNode=e}visitAnimateRef(e,t){let s=t.createSubContext(e.options);s.transformIntoNewTimeline(),this._applyAnimationRefDelays([e.options,e.animation.options],t,s),this.visitReference(e.animation,s),t.transformIntoNewTimeline(s.currentTimeline.currentTime),t.previousNode=e}_applyAnimationRefDelays(e,t,s){for(let i of e){let r=i?.delay;if(r){let a=typeof r=="number"?r:V(te(r,i?.params??{},t.errors));s.delayNextStep(a)}}}_visitSubInstructions(e,t,s){let r=t.currentTimeline.currentTime,a=s.duration!=null?V(s.duration):null,o=s.delay!=null?V(s.delay):null;return a!==0&&e.forEach(l=>{let u=t.appendInstructionToTimeline(l,a,o);r=Math.max(r,u.duration+u.delay)}),r}visitReference(e,t){t.updateOptions(e.options,!0),O(this,e.animation,t),t.previousNode=e}visitSequence(e,t){let s=t.subContextCount,i=t,r=e.options;if(r&&(r.params||r.delay)&&(i=t.createSubContext(r),i.transformIntoNewTimeline(),r.delay!=null)){i.previousNode.type==S.Style&&(i.currentTimeline.snapshotCurrentStyles(),i.previousNode=Ne);let a=V(r.delay);i.delayNextStep(a)}e.steps.length&&(e.steps.forEach(a=>O(this,a,i)),i.currentTimeline.applyStylesToKeyframe(),i.subContextCount>s&&i.transformIntoNewTimeline()),t.previousNode=e}visitGroup(e,t){let s=[],i=t.currentTimeline.currentTime,r=e.options&&e.options.delay?V(e.options.delay):0;e.steps.forEach(a=>{let o=t.createSubContext(e.options);r&&o.delayNextStep(r),O(this,a,o),i=Math.max(i,o.currentTimeline.currentTime),s.push(o.currentTimeline)}),s.forEach(a=>t.currentTimeline.mergeTimelineCollectedStyles(a)),t.transformIntoNewTimeline(i),t.previousNode=e}_visitTiming(e,t){if(e.dynamic){let s=e.strValue,i=t.params?te(s,t.params,t.errors):s;return le(i,t.errors)}else return{duration:e.duration,delay:e.delay,easing:e.easing}}visitAnimate(e,t){let s=t.currentAnimateTimings=this._visitTiming(e.timings,t),i=t.currentTimeline;s.delay&&(t.incrementTime(s.delay),i.snapshotCurrentStyles());let r=e.style;r.type==S.Keyframes?this.visitKeyframes(r,t):(t.incrementTime(s.duration),this.visitStyle(r,t),i.applyStylesToKeyframe()),t.currentAnimateTimings=null,t.previousNode=e}visitStyle(e,t){let s=t.currentTimeline,i=t.currentAnimateTimings;!i&&s.hasCurrentStyleProperties()&&s.forwardFrame();let r=i&&i.easing||e.easing;e.isEmptyStep?s.applyEmptyStep(r):s.setStyles(e.styles,r,t.errors,t.options),t.previousNode=e}visitKeyframes(e,t){let s=t.currentAnimateTimings,i=t.currentTimeline.duration,r=s.duration,o=t.createSubContext().currentTimeline;o.easing=s.easing,e.styles.forEach(l=>{let u=l.offset||0;o.forwardTime(u*r),o.setStyles(l.styles,l.easing,t.errors,t.options),o.applyStylesToKeyframe()}),t.currentTimeline.mergeTimelineCollectedStyles(o),t.transformIntoNewTimeline(i+r),t.previousNode=e}visitQuery(e,t){let s=t.currentTimeline.currentTime,i=e.options||{},r=i.delay?V(i.delay):0;r&&(t.previousNode.type===S.Style||s==0&&t.currentTimeline.hasCurrentStyleProperties())&&(t.currentTimeline.snapshotCurrentStyles(),t.previousNode=Ne);let a=s,o=t.invokeQuery(e.selector,e.originalSelector,e.limit,e.includeSelf,!!i.optional,t.errors);t.currentQueryTotal=o.length;let l=null;o.forEach((u,h)=>{t.currentQueryIndex=h;let c=t.createSubContext(e.options,u);r&&c.delayNextStep(r),u===t.element&&(l=c.currentTimeline),O(this,e.animation,c),c.currentTimeline.applyStylesToKeyframe();let _=c.currentTimeline.currentTime;a=Math.max(a,_)}),t.currentQueryIndex=0,t.currentQueryTotal=0,t.transformIntoNewTimeline(a),l&&(t.currentTimeline.mergeTimelineCollectedStyles(l),t.currentTimeline.snapshotCurrentStyles()),t.previousNode=e}visitStagger(e,t){let s=t.parentContext,i=t.currentTimeline,r=e.timings,a=Math.abs(r.duration),o=a*(t.currentQueryTotal-1),l=a*t.currentQueryIndex;switch(r.duration<0?"reverse":r.easing){case"reverse":l=o-l;break;case"full":l=s.currentStaggerTime;break}let h=t.currentTimeline;l&&h.delayNextStep(l);let c=h.currentTime;O(this,e.animation,t),t.previousNode=e,s.currentStaggerTime=i.currentTime-c+(i.startTime-s.currentTimeline.startTime)}},Ne={},nt=class n{_driver;element;subInstructions;_enterClassName;_leaveClassName;errors;timelines;parentContext=null;currentTimeline;currentAnimateTimings=null;previousNode=Ne;subContextCount=0;options={};currentQueryIndex=0;currentQueryTotal=0;currentStaggerTime=0;constructor(e,t,s,i,r,a,o,l){this._driver=e,this.element=t,this.subInstructions=s,this._enterClassName=i,this._leaveClassName=r,this.errors=a,this.timelines=o,this.currentTimeline=l||new Me(this._driver,t,0),o.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(e,t){if(!e)return;let s=e,i=this.options;s.duration!=null&&(i.duration=V(s.duration)),s.delay!=null&&(i.delay=V(s.delay));let r=s.params;if(r){let a=i.params;a||(a=this.options.params={}),Object.keys(r).forEach(o=>{(!t||!a.hasOwnProperty(o))&&(a[o]=te(r[o],a,this.errors))})}}_copyOptions(){let e={};if(this.options){let t=this.options.params;if(t){let s=e.params={};Object.keys(t).forEach(i=>{s[i]=t[i]})}}return e}createSubContext(e=null,t,s){let i=t||this.element,r=new n(this._driver,i,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(i,s||0));return r.previousNode=this.previousNode,r.currentAnimateTimings=this.currentAnimateTimings,r.options=this._copyOptions(),r.updateOptions(e),r.currentQueryIndex=this.currentQueryIndex,r.currentQueryTotal=this.currentQueryTotal,r.parentContext=this,this.subContextCount++,r}transformIntoNewTimeline(e){return this.previousNode=Ne,this.currentTimeline=this.currentTimeline.fork(this.element,e),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(e,t,s){let i={duration:t??e.duration,delay:this.currentTimeline.currentTime+(s??0)+e.delay,easing:""},r=new rt(this._driver,e.element,e.keyframes,e.preStyleProps,e.postStyleProps,i,e.stretchStartingKeyframe);return this.timelines.push(r),i}incrementTime(e){this.currentTimeline.forwardTime(this.currentTimeline.duration+e)}delayNextStep(e){e>0&&this.currentTimeline.delayNextStep(e)}invokeQuery(e,t,s,i,r,a){let o=[];if(i&&o.push(this.element),e.length>0){e=e.replace(Js,"."+this._enterClassName),e=e.replace(xs,"."+this._leaveClassName);let l=s!=1,u=this._driver.query(this.element,e,l);s!==0&&(u=s<0?u.slice(u.length+s,u.length):u.slice(0,s)),o.push(...u)}return!r&&o.length==0&&a.push(It(t)),o}},Me=class n{_driver;element;startTime;_elementTimelineStylesLookup;duration=0;easing=null;_previousKeyframe=new Map;_currentKeyframe=new Map;_keyframes=new Map;_styleSummary=new Map;_localTimelineStyles=new Map;_globalTimelineStyles;_pendingStyles=new Map;_backFill=new Map;_currentEmptyStepKeyframe=null;constructor(e,t,s,i){this._driver=e,this.element=t,this.startTime=s,this._elementTimelineStylesLookup=i,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(t),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(t,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.hasCurrentStyleProperties();default:return!0}}hasCurrentStyleProperties(){return this._currentKeyframe.size>0}get currentTime(){return this.startTime+this.duration}delayNextStep(e){let t=this._keyframes.size===1&&this._pendingStyles.size;this.duration||t?(this.forwardTime(this.currentTime+e),t&&this.snapshotCurrentStyles()):this.startTime+=e}fork(e,t){return this.applyStylesToKeyframe(),new n(this._driver,e,t||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=new Map,this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=Ys,this._loadKeyframe()}forwardTime(e){this.applyStylesToKeyframe(),this.duration=e,this._loadKeyframe()}_updateStyle(e,t){this._localTimelineStyles.set(e,t),this._globalTimelineStyles.set(e,t),this._styleSummary.set(e,{time:this.currentTime,value:t})}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(e){e&&this._previousKeyframe.set("easing",e);for(let[t,s]of this._globalTimelineStyles)this._backFill.set(t,s||z),this._currentKeyframe.set(t,z);this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(e,t,s,i){t&&this._previousKeyframe.set("easing",t);let r=i&&i.params||{},a=ei(e,this._globalTimelineStyles);for(let[o,l]of a){let u=te(l,r,s);this._pendingStyles.set(o,u),this._localTimelineStyles.has(o)||this._backFill.set(o,this._globalTimelineStyles.get(o)??z),this._updateStyle(o,u)}}applyStylesToKeyframe(){this._pendingStyles.size!=0&&(this._pendingStyles.forEach((e,t)=>{this._currentKeyframe.set(t,e)}),this._pendingStyles.clear(),this._localTimelineStyles.forEach((e,t)=>{this._currentKeyframe.has(t)||this._currentKeyframe.set(t,e)}))}snapshotCurrentStyles(){for(let[e,t]of this._localTimelineStyles)this._pendingStyles.set(e,t),this._updateStyle(e,t)}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){let e=[];for(let t in this._currentKeyframe)e.push(t);return e}mergeTimelineCollectedStyles(e){e._styleSummary.forEach((t,s)=>{let i=this._styleSummary.get(s);(!i||t.time>i.time)&&this._updateStyle(s,t.value)})}buildKeyframes(){this.applyStylesToKeyframe();let e=new Set,t=new Set,s=this._keyframes.size===1&&this.duration===0,i=[];this._keyframes.forEach((o,l)=>{let u=new Map([...this._backFill,...o]);u.forEach((h,c)=>{h===ne?e.add(c):h===z&&t.add(c)}),s||u.set("offset",l/this.duration),i.push(u)});let r=[...e.values()],a=[...t.values()];if(s){let o=i[0],l=new Map(o);o.set("offset",0),l.set("offset",1),i=[o,l]}return mt(this.element,i,r,a,this.duration,this.startTime,this.easing,!1)}},rt=class extends Me{keyframes;preStyleProps;postStyleProps;_stretchStartingKeyframe;timings;constructor(e,t,s,i,r,a,o=!1){super(e,t,a.delay),this.keyframes=s,this.preStyleProps=i,this.postStyleProps=r,this._stretchStartingKeyframe=o,this.timings={duration:a.duration,delay:a.delay,easing:a.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let e=this.keyframes,{delay:t,duration:s,easing:i}=this.timings;if(this._stretchStartingKeyframe&&t){let r=[],a=s+t,o=t/a,l=new Map(e[0]);l.set("offset",0),r.push(l);let u=new Map(e[0]);u.set("offset",as(o)),r.push(u);let h=e.length-1;for(let c=1;c<=h;c++){let _=new Map(e[c]),y=_.get("offset"),f=t+y*s;_.set("offset",as(f/a)),r.push(_)}s=a,t=0,i="",e=r}return mt(this.element,e,this.preStyleProps,this.postStyleProps,s,t,i,!0)}};function as(n,e=3){let t=Math.pow(10,e-1);return Math.round(n*t)/t}function ei(n,e){let t=new Map,s;return n.forEach(i=>{if(i==="*"){s??=e.keys();for(let r of s)t.set(r,z)}else for(let[r,a]of i)t.set(r,a)}),t}function os(n,e,t,s,i,r,a,o,l,u,h,c,_){return{type:0,element:n,triggerName:e,isRemovalTransition:i,fromState:t,fromStyles:r,toState:s,toStyles:a,timelines:o,queriedElements:l,preStyleProps:u,postStyleProps:h,totalTime:c,errors:_}}var He={},Ce=class{_triggerName;ast;_stateStyles;constructor(e,t,s){this._triggerName=e,this.ast=t,this._stateStyles=s}match(e,t,s,i){return ti(this.ast.matchers,e,t,s,i)}buildStyles(e,t,s){let i=this._stateStyles.get("*");return e!==void 0&&(i=this._stateStyles.get(e?.toString())||i),i?i.buildStyles(t,s):new Map}build(e,t,s,i,r,a,o,l,u,h){let c=[],_=this.ast.options&&this.ast.options.params||He,y=o&&o.params||He,f=this.buildStyles(s,y,c),g=l&&l.params||He,v=this.buildStyles(i,g,c),w=new Set,A=new Map,C=new Map,N=i==="void",Z={params:_s(g,_),delay:this.ast.options?.delay},B=h?[]:pt(e,t,this.ast.animation,r,a,f,v,Z,u,c),k=0;return B.forEach(D=>{k=Math.max(D.duration+D.delay,k)}),c.length?os(t,this._triggerName,s,i,N,f,v,[],[],A,C,k,c):(B.forEach(D=>{let j=D.element,x=R(A,j,new Set);D.preStyleProps.forEach(W=>x.add(W));let gt=R(C,j,new Set);D.postStyleProps.forEach(W=>gt.add(W)),j!==t&&w.add(j)}),os(t,this._triggerName,s,i,N,f,v,B,[...w.values()],A,C,k))}};function ti(n,e,t,s,i){return n.some(r=>r(e,t,s,i))}function _s(n,e){let t=fe({},e);return Object.entries(n).forEach(([s,i])=>{i!=null&&(t[s]=i)}),t}var at=class{styles;defaultParams;normalizer;constructor(e,t,s){this.styles=e,this.defaultParams=t,this.normalizer=s}buildStyles(e,t){let s=new Map,i=_s(e,this.defaultParams);return this.styles.styles.forEach(r=>{typeof r!="string"&&r.forEach((a,o)=>{a&&(a=te(a,i,t));let l=this.normalizer.normalizePropertyName(o,t);a=this.normalizer.normalizeStyleValue(o,l,a,t),s.set(o,a)})}),s}};function si(n,e,t){return new ot(n,e,t)}var ot=class{name;ast;_normalizer;transitionFactories=[];fallbackTransition;states=new Map;constructor(e,t,s){this.name=e,this.ast=t,this._normalizer=s,t.states.forEach(i=>{let r=i.options&&i.options.params||{};this.states.set(i.name,new at(i.style,r,s))}),ls(this.states,"true","1"),ls(this.states,"false","0"),t.transitions.forEach(i=>{this.transitionFactories.push(new Ce(e,i,this.states))}),this.fallbackTransition=ii(e,this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(e,t,s,i){return this.transitionFactories.find(a=>a.match(e,t,s,i))||null}matchStyles(e,t,s){return this.fallbackTransition.buildStyles(e,t,s)}};function ii(n,e,t){let s=[(a,o)=>!0],i={type:S.Sequence,steps:[],options:null},r={type:S.Transition,animation:i,matchers:s,options:null,queryCount:0,depCount:0};return new Ce(n,r,e)}function ls(n,e,t){n.has(e)?n.has(t)||n.set(t,n.get(e)):n.has(t)&&n.set(e,n.get(t))}var ni=new ie,lt=class{bodyNode;_driver;_normalizer;_animations=new Map;_playersById=new Map;players=[];constructor(e,t,s){this.bodyNode=e,this._driver=t,this._normalizer=s}register(e,t){let s=[],i=[],r=ft(this._driver,t,s,i);if(s.length)throw Vt(s);this._animations.set(e,r)}_buildPlayer(e,t,s){let i=e.element,r=qe(this._normalizer,e.keyframes,t,s);return this._driver.animate(i,r,e.duration,e.delay,e.easing,[],!0)}create(e,t,s={}){let i=[],r=this._animations.get(e),a,o=new Map;if(r?(a=pt(this._driver,t,r,_e,re,new Map,new Map,s,ni,i),a.forEach(h=>{let c=R(o,h.element,new Map);h.postStyleProps.forEach(_=>c.set(_,null))})):(i.push($t()),a=[]),i.length)throw Ut(i);o.forEach((h,c)=>{h.forEach((_,y)=>{h.set(y,this._driver.computeStyle(c,y,z))})});let l=a.map(h=>{let c=o.get(h.element);return this._buildPlayer(h,new Map,c)}),u=$(l);return this._playersById.set(e,u),u.onDestroy(()=>this.destroy(e)),this.players.push(u),u}destroy(e){let t=this._getPlayer(e);t.destroy(),this._playersById.delete(e);let s=this.players.indexOf(t);s>=0&&this.players.splice(s,1)}_getPlayer(e){let t=this._playersById.get(e);if(!t)throw Gt(e);return t}listen(e,t,s,i){let r=ge(t,"","","");return pe(this._getPlayer(e),s,r,i),()=>{}}command(e,t,s,i){if(s=="register"){this.register(e,i[0]);return}if(s=="create"){let a=i[0]||{};this.create(e,t,a);return}let r=this._getPlayer(e);switch(s){case"play":r.play();break;case"pause":r.pause();break;case"reset":r.reset();break;case"restart":r.restart();break;case"finish":r.finish();break;case"init":r.init();break;case"setPosition":r.setPosition(parseFloat(i[0]));break;case"destroy":this.destroy(e);break}}},us="ng-animate-queued",ri=".ng-animate-queued",Ye="ng-animate-disabled",ai=".ng-animate-disabled",oi="ng-star-inserted",li=".ng-star-inserted",ui=[],Ss={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},ci={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},q="__ng_removed",ce=class{namespaceId;value;options;get params(){return this.options.params}constructor(e,t=""){this.namespaceId=t;let s=e&&e.hasOwnProperty("value"),i=s?e.value:e;if(this.value=di(i),s){let r=e,{value:a}=r,o=Et(r,["value"]);this.options=o}else this.options={};this.options.params||(this.options.params={})}absorbOptions(e){let t=e.params;if(t){let s=this.options.params;Object.keys(t).forEach(i=>{s[i]==null&&(s[i]=t[i])})}}},ue="void",Xe=new ce(ue),ut=class{id;hostElement;_engine;players=[];_triggers=new Map;_queue=[];_elementListeners=new Map;_hostClassName;constructor(e,t,s){this.id=e,this.hostElement=t,this._engine=s,this._hostClassName="ng-tns-"+e,I(t,this._hostClassName)}listen(e,t,s,i){if(!this._triggers.has(t))throw jt(s,t);if(s==null||s.length==0)throw Wt(t);if(!fi(s))throw Ht(s,t);let r=R(this._elementListeners,e,[]),a={name:t,phase:s,callback:i};r.push(a);let o=R(this._engine.statesByElement,e,new Map);return o.has(t)||(I(e,ae),I(e,ae+"-"+t),o.set(t,Xe)),()=>{this._engine.afterFlush(()=>{let l=r.indexOf(a);l>=0&&r.splice(l,1),this._triggers.has(t)||o.delete(t)})}}register(e,t){return this._triggers.has(e)?!1:(this._triggers.set(e,t),!0)}_getTrigger(e){let t=this._triggers.get(e);if(!t)throw Yt(e);return t}trigger(e,t,s,i=!0){let r=this._getTrigger(t),a=new he(this.id,t,e),o=this._engine.statesByElement.get(e);o||(I(e,ae),I(e,ae+"-"+t),this._engine.statesByElement.set(e,o=new Map));let l=o.get(t),u=new ce(s,this.id);if(!(s&&s.hasOwnProperty("value"))&&l&&u.absorbOptions(l.options),o.set(t,u),l||(l=Xe),!(u.value===ue)&&l.value===u.value){if(!gi(l.params,u.params)){let g=[],v=r.matchStyles(l.value,l.params,g),w=r.matchStyles(u.value,u.params,g);g.length?this._engine.reportError(g):this._engine.afterFlush(()=>{G(e,v),K(e,w)})}return}let _=R(this._engine.playersByElement,e,[]);_.forEach(g=>{g.namespaceId==this.id&&g.triggerName==t&&g.queued&&g.destroy()});let y=r.matchTransition(l.value,u.value,e,u.params),f=!1;if(!y){if(!i)return;y=r.fallbackTransition,f=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:t,transition:y,fromState:l,toState:u,player:a,isFallbackTransition:f}),f||(I(e,us),a.onStart(()=>{se(e,us)})),a.onDone(()=>{let g=this.players.indexOf(a);g>=0&&this.players.splice(g,1);let v=this._engine.playersByElement.get(e);if(v){let w=v.indexOf(a);w>=0&&v.splice(w,1)}}),this.players.push(a),_.push(a),a}deregister(e){this._triggers.delete(e),this._engine.statesByElement.forEach(t=>t.delete(e)),this._elementListeners.forEach((t,s)=>{this._elementListeners.set(s,t.filter(i=>i.name!=e))})}clearElementCache(e){this._engine.statesByElement.delete(e),this._elementListeners.delete(e);let t=this._engine.playersByElement.get(e);t&&(t.forEach(s=>s.destroy()),this._engine.playersByElement.delete(e))}_signalRemovalForInnerTriggers(e,t){let s=this._engine.driver.query(e,oe,!0);s.forEach(i=>{if(i[q])return;let r=this._engine.fetchNamespacesByElement(i);r.size?r.forEach(a=>a.triggerLeaveAnimation(i,t,!1,!0)):this.clearElementCache(i)}),this._engine.afterFlushAnimationsDone(()=>s.forEach(i=>this.clearElementCache(i)))}triggerLeaveAnimation(e,t,s,i){let r=this._engine.statesByElement.get(e),a=new Map;if(r){let o=[];if(r.forEach((l,u)=>{if(a.set(u,l.value),this._triggers.has(u)){let h=this.trigger(e,u,ue,i);h&&o.push(h)}}),o.length)return this._engine.markElementAsRemoved(this.id,e,!0,t,a),s&&$(o).onDone(()=>this._engine.processLeaveNode(e)),!0}return!1}prepareLeaveAnimationListeners(e){let t=this._elementListeners.get(e),s=this._engine.statesByElement.get(e);if(t&&s){let i=new Set;t.forEach(r=>{let a=r.name;if(i.has(a))return;i.add(a);let l=this._triggers.get(a).fallbackTransition,u=s.get(a)||Xe,h=new ce(ue),c=new he(this.id,a,e);this._engine.totalQueuedPlayers++,this._queue.push({element:e,triggerName:a,transition:l,fromState:u,toState:h,player:c,isFallbackTransition:!0})})}}removeNode(e,t){let s=this._engine;if(e.childElementCount&&this._signalRemovalForInnerTriggers(e,t),this.triggerLeaveAnimation(e,t,!0))return;let i=!1;if(s.totalAnimations){let r=s.players.length?s.playersByQueriedElement.get(e):[];if(r&&r.length)i=!0;else{let a=e;for(;a=a.parentNode;)if(s.statesByElement.get(a)){i=!0;break}}}if(this.prepareLeaveAnimationListeners(e),i)s.markElementAsRemoved(this.id,e,!1,t);else{let r=e[q];(!r||r===Ss)&&(s.afterFlush(()=>this.clearElementCache(e)),s.destroyInnerAnimations(e),s._onRemovalComplete(e,t))}}insertNode(e,t){I(e,this._hostClassName)}drainQueuedTransitions(e){let t=[];return this._queue.forEach(s=>{let i=s.player;if(i.destroyed)return;let r=s.element,a=this._elementListeners.get(r);a&&a.forEach(o=>{if(o.name==s.triggerName){let l=ge(r,s.triggerName,s.fromState.value,s.toState.value);l._data=e,pe(s.player,o.phase,l,o.callback)}}),i.markedForDestroy?this._engine.afterFlush(()=>{i.destroy()}):t.push(s)}),this._queue=[],t.sort((s,i)=>{let r=s.transition.ast.depCount,a=i.transition.ast.depCount;return r==0||a==0?r-a:this._engine.driver.containsElement(s.element,i.element)?1:-1})}destroy(e){this.players.forEach(t=>t.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,e)}},ct=class{bodyNode;driver;_normalizer;players=[];newHostElements=new Map;playersByElement=new Map;playersByQueriedElement=new Map;statesByElement=new Map;disabledNodes=new Set;totalAnimations=0;totalQueuedPlayers=0;_namespaceLookup={};_namespaceList=[];_flushFns=[];_whenQuietFns=[];namespacesByHostElement=new Map;collectedEnterElements=[];collectedLeaveElements=[];onRemovalComplete=(e,t)=>{};_onRemovalComplete(e,t){this.onRemovalComplete(e,t)}constructor(e,t,s){this.bodyNode=e,this.driver=t,this._normalizer=s}get queuedPlayers(){let e=[];return this._namespaceList.forEach(t=>{t.players.forEach(s=>{s.queued&&e.push(s)})}),e}createNamespace(e,t){let s=new ut(e,t,this);return this.bodyNode&&this.driver.containsElement(this.bodyNode,t)?this._balanceNamespaceList(s,t):(this.newHostElements.set(t,s),this.collectEnterElement(t)),this._namespaceLookup[e]=s}_balanceNamespaceList(e,t){let s=this._namespaceList,i=this.namespacesByHostElement;if(s.length-1>=0){let a=!1,o=this.driver.getParentElement(t);for(;o;){let l=i.get(o);if(l){let u=s.indexOf(l);s.splice(u+1,0,e),a=!0;break}o=this.driver.getParentElement(o)}a||s.unshift(e)}else s.push(e);return i.set(t,e),e}register(e,t){let s=this._namespaceLookup[e];return s||(s=this.createNamespace(e,t)),s}registerTrigger(e,t,s){let i=this._namespaceLookup[e];i&&i.register(t,s)&&this.totalAnimations++}destroy(e,t){e&&(this.afterFlush(()=>{}),this.afterFlushAnimationsDone(()=>{let s=this._fetchNamespace(e);this.namespacesByHostElement.delete(s.hostElement);let i=this._namespaceList.indexOf(s);i>=0&&this._namespaceList.splice(i,1),s.destroy(t),delete this._namespaceLookup[e]}))}_fetchNamespace(e){return this._namespaceLookup[e]}fetchNamespacesByElement(e){let t=new Set,s=this.statesByElement.get(e);if(s){for(let i of s.values())if(i.namespaceId){let r=this._fetchNamespace(i.namespaceId);r&&t.add(r)}}return t}trigger(e,t,s,i){if(we(t)){let r=this._fetchNamespace(e);if(r)return r.trigger(t,s,i),!0}return!1}insertNode(e,t,s,i){if(!we(t))return;let r=t[q];if(r&&r.setForRemoval){r.setForRemoval=!1,r.setForMove=!0;let a=this.collectedLeaveElements.indexOf(t);a>=0&&this.collectedLeaveElements.splice(a,1)}if(e){let a=this._fetchNamespace(e);a&&a.insertNode(t,s)}i&&this.collectEnterElement(t)}collectEnterElement(e){this.collectedEnterElements.push(e)}markElementAsDisabled(e,t){t?this.disabledNodes.has(e)||(this.disabledNodes.add(e),I(e,Ye)):this.disabledNodes.has(e)&&(this.disabledNodes.delete(e),se(e,Ye))}removeNode(e,t,s){if(we(t)){let i=e?this._fetchNamespace(e):null;i?i.removeNode(t,s):this.markElementAsRemoved(e,t,!1,s);let r=this.namespacesByHostElement.get(t);r&&r.id!==e&&r.removeNode(t,s)}else this._onRemovalComplete(t,s)}markElementAsRemoved(e,t,s,i,r){this.collectedLeaveElements.push(t),t[q]={namespaceId:e,setForRemoval:i,hasAnimation:s,removedBeforeQueried:!1,previousTriggersValues:r}}listen(e,t,s,i,r){return we(t)?this._fetchNamespace(e).listen(t,s,i,r):()=>{}}_buildInstruction(e,t,s,i,r){return e.transition.build(this.driver,e.element,e.fromState.value,e.toState.value,s,i,e.fromState.options,e.toState.options,t,r)}destroyInnerAnimations(e){let t=this.driver.query(e,oe,!0);t.forEach(s=>this.destroyActiveAnimationsForElement(s)),this.playersByQueriedElement.size!=0&&(t=this.driver.query(e,Se,!0),t.forEach(s=>this.finishActiveQueriedAnimationOnElement(s)))}destroyActiveAnimationsForElement(e){let t=this.playersByElement.get(e);t&&t.forEach(s=>{s.queued?s.markedForDestroy=!0:s.destroy()})}finishActiveQueriedAnimationOnElement(e){let t=this.playersByQueriedElement.get(e);t&&t.forEach(s=>s.finish())}whenRenderingDone(){return new Promise(e=>{if(this.players.length)return $(this.players).onDone(()=>e());e()})}processLeaveNode(e){let t=e[q];if(t&&t.setForRemoval){if(e[q]=Ss,t.namespaceId){this.destroyInnerAnimations(e);let s=this._fetchNamespace(t.namespaceId);s&&s.clearElementCache(e)}this._onRemovalComplete(e,t.setForRemoval)}e.classList?.contains(Ye)&&this.markElementAsDisabled(e,!1),this.driver.query(e,ai,!0).forEach(s=>{this.markElementAsDisabled(s,!1)})}flush(e=-1){let t=[];if(this.newHostElements.size&&(this.newHostElements.forEach((s,i)=>this._balanceNamespaceList(s,i)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let s=0;s<this.collectedEnterElements.length;s++){let i=this.collectedEnterElements[s];I(i,oi)}if(this._namespaceList.length&&(this.totalQueuedPlayers||this.collectedLeaveElements.length)){let s=[];try{t=this._flushAnimations(s,e)}finally{for(let i=0;i<s.length;i++)s[i]()}}else for(let s=0;s<this.collectedLeaveElements.length;s++){let i=this.collectedLeaveElements[s];this.processLeaveNode(i)}if(this.totalQueuedPlayers=0,this.collectedEnterElements.length=0,this.collectedLeaveElements.length=0,this._flushFns.forEach(s=>s()),this._flushFns=[],this._whenQuietFns.length){let s=this._whenQuietFns;this._whenQuietFns=[],t.length?$(t).onDone(()=>{s.forEach(i=>i())}):s.forEach(i=>i())}}reportError(e){throw Xt(e)}_flushAnimations(e,t){let s=new ie,i=[],r=new Map,a=[],o=new Map,l=new Map,u=new Map,h=new Set;this.disabledNodes.forEach(d=>{h.add(d);let m=this.driver.query(d,ri,!0);for(let p=0;p<m.length;p++)h.add(m[p])});let c=this.bodyNode,_=Array.from(this.statesByElement.keys()),y=ds(_,this.collectedEnterElements),f=new Map,g=0;y.forEach((d,m)=>{let p=_e+g++;f.set(m,p),d.forEach(T=>I(T,p))});let v=[],w=new Set,A=new Set;for(let d=0;d<this.collectedLeaveElements.length;d++){let m=this.collectedLeaveElements[d],p=m[q];p&&p.setForRemoval&&(v.push(m),w.add(m),p.hasAnimation?this.driver.query(m,li,!0).forEach(T=>w.add(T)):A.add(m))}let C=new Map,N=ds(_,Array.from(w));N.forEach((d,m)=>{let p=re+g++;C.set(m,p),d.forEach(T=>I(T,p))}),e.push(()=>{y.forEach((d,m)=>{let p=f.get(m);d.forEach(T=>se(T,p))}),N.forEach((d,m)=>{let p=C.get(m);d.forEach(T=>se(T,p))}),v.forEach(d=>{this.processLeaveNode(d)})});let Z=[],B=[];for(let d=this._namespaceList.length-1;d>=0;d--)this._namespaceList[d].drainQueuedTransitions(t).forEach(p=>{let T=p.player,P=p.element;if(Z.push(T),this.collectedEnterElements.length){let M=P[q];if(M&&M.setForMove){if(M.previousTriggersValues&&M.previousTriggersValues.has(p.triggerName)){let H=M.previousTriggersValues.get(p.triggerName),F=this.statesByElement.get(p.element);if(F&&F.has(p.triggerName)){let de=F.get(p.triggerName);de.value=H,F.set(p.triggerName,de)}}T.destroy();return}}let Q=!c||!this.driver.containsElement(c,P),L=C.get(P),U=f.get(P),b=this._buildInstruction(p,s,U,L,Q);if(b.errors&&b.errors.length){B.push(b);return}if(Q){T.onStart(()=>G(P,b.fromStyles)),T.onDestroy(()=>K(P,b.toStyles)),i.push(T);return}if(p.isFallbackTransition){T.onStart(()=>G(P,b.fromStyles)),T.onDestroy(()=>K(P,b.toStyles)),i.push(T);return}let St=[];b.timelines.forEach(M=>{M.stretchStartingKeyframe=!0,this.disabledNodes.has(M.element)||St.push(M)}),b.timelines=St,s.append(P,b.timelines);let vs={instruction:b,player:T,element:P};a.push(vs),b.queriedElements.forEach(M=>R(o,M,[]).push(T)),b.preStyleProps.forEach((M,H)=>{if(M.size){let F=l.get(H);F||l.set(H,F=new Set),M.forEach((de,Le)=>F.add(Le))}}),b.postStyleProps.forEach((M,H)=>{let F=u.get(H);F||u.set(H,F=new Set),M.forEach((de,Le)=>F.add(Le))})});if(B.length){let d=[];B.forEach(m=>{d.push(Jt(m.triggerName,m.errors))}),Z.forEach(m=>m.destroy()),this.reportError(d)}let k=new Map,D=new Map;a.forEach(d=>{let m=d.element;s.has(m)&&(D.set(m,m),this._beforeAnimationBuild(d.player.namespaceId,d.instruction,k))}),i.forEach(d=>{let m=d.element;this._getPreviousPlayers(m,!1,d.namespaceId,d.triggerName,null).forEach(T=>{R(k,m,[]).push(T),T.destroy()})});let j=v.filter(d=>fs(d,l,u)),x=new Map;hs(x,this.driver,A,u,z).forEach(d=>{fs(d,l,u)&&j.push(d)});let W=new Map;y.forEach((d,m)=>{hs(W,this.driver,new Set(d),l,ne)}),j.forEach(d=>{let m=x.get(d),p=W.get(d);x.set(d,new Map([...m?.entries()??[],...p?.entries()??[]]))});let Oe=[],yt=[],_t={};a.forEach(d=>{let{element:m,player:p,instruction:T}=d;if(s.has(m)){if(h.has(m)){p.onDestroy(()=>K(m,T.toStyles)),p.disabled=!0,p.overrideTotalTime(T.totalTime),i.push(p);return}let P=_t;if(D.size>1){let L=m,U=[];for(;L=L.parentNode;){let b=D.get(L);if(b){P=b;break}U.push(L)}U.forEach(b=>D.set(b,P))}let Q=this._buildAnimation(p.namespaceId,T,k,r,W,x);if(p.setRealPlayer(Q),P===_t)Oe.push(p);else{let L=this.playersByElement.get(P);L&&L.length&&(p.parentPlayer=$(L)),i.push(p)}}else G(m,T.fromStyles),p.onDestroy(()=>K(m,T.toStyles)),yt.push(p),h.has(m)&&i.push(p)}),yt.forEach(d=>{let m=r.get(d.element);if(m&&m.length){let p=$(m);d.setRealPlayer(p)}}),i.forEach(d=>{d.parentPlayer?d.syncPlayerEvents(d.parentPlayer):d.destroy()});for(let d=0;d<v.length;d++){let m=v[d],p=m[q];if(se(m,re),p&&p.hasAnimation)continue;let T=[];if(o.size){let Q=o.get(m);Q&&Q.length&&T.push(...Q);let L=this.driver.query(m,Se,!0);for(let U=0;U<L.length;U++){let b=o.get(L[U]);b&&b.length&&T.push(...b)}}let P=T.filter(Q=>!Q.destroyed);P.length?mi(this,m,P):this.processLeaveNode(m)}return v.length=0,Oe.forEach(d=>{this.players.push(d),d.onDone(()=>{d.destroy();let m=this.players.indexOf(d);this.players.splice(m,1)}),d.play()}),Oe}afterFlush(e){this._flushFns.push(e)}afterFlushAnimationsDone(e){this._whenQuietFns.push(e)}_getPreviousPlayers(e,t,s,i,r){let a=[];if(t){let o=this.playersByQueriedElement.get(e);o&&(a=o)}else{let o=this.playersByElement.get(e);if(o){let l=!r||r==ue;o.forEach(u=>{u.queued||!l&&u.triggerName!=i||a.push(u)})}}return(s||i)&&(a=a.filter(o=>!(s&&s!=o.namespaceId||i&&i!=o.triggerName))),a}_beforeAnimationBuild(e,t,s){let i=t.triggerName,r=t.element,a=t.isRemovalTransition?void 0:e,o=t.isRemovalTransition?void 0:i;for(let l of t.timelines){let u=l.element,h=u!==r,c=R(s,u,[]);this._getPreviousPlayers(u,h,a,o,t.toState).forEach(y=>{let f=y.getRealPlayer();f.beforeDestroy&&f.beforeDestroy(),y.destroy(),c.push(y)})}G(r,t.fromStyles)}_buildAnimation(e,t,s,i,r,a){let o=t.triggerName,l=t.element,u=[],h=new Set,c=new Set,_=t.timelines.map(f=>{let g=f.element;h.add(g);let v=g[q];if(v&&v.removedBeforeQueried)return new Y(f.duration,f.delay);let w=g!==l,A=pi((s.get(g)||ui).map(k=>k.getRealPlayer())).filter(k=>{let D=k;return D.element?D.element===g:!1}),C=r.get(g),N=a.get(g),Z=qe(this._normalizer,f.keyframes,C,N),B=this._buildPlayer(f,Z,A);if(f.subTimeline&&i&&c.add(g),w){let k=new he(e,o,g);k.setRealPlayer(B),u.push(k)}return B});u.forEach(f=>{R(this.playersByQueriedElement,f.element,[]).push(f),f.onDone(()=>hi(this.playersByQueriedElement,f.element,f))}),h.forEach(f=>I(f,Ue));let y=$(_);return y.onDestroy(()=>{h.forEach(f=>se(f,Ue)),K(l,t.toStyles)}),c.forEach(f=>{R(i,f,[]).push(y)}),y}_buildPlayer(e,t,s){return t.length>0?this.driver.animate(e.element,t,e.duration,e.delay,e.easing,s):new Y(e.duration,e.delay)}},he=class{namespaceId;triggerName;element;_player=new Y;_containsRealPlayer=!1;_queuedCallbacks=new Map;destroyed=!1;parentPlayer=null;markedForDestroy=!1;disabled=!1;queued=!0;totalTime=0;constructor(e,t,s){this.namespaceId=e,this.triggerName=t,this.element=s}setRealPlayer(e){this._containsRealPlayer||(this._player=e,this._queuedCallbacks.forEach((t,s)=>{t.forEach(i=>pe(e,s,void 0,i))}),this._queuedCallbacks.clear(),this._containsRealPlayer=!0,this.overrideTotalTime(e.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(e){this.totalTime=e}syncPlayerEvents(e){let t=this._player;t.triggerCallback&&e.onStart(()=>t.triggerCallback("start")),e.onDone(()=>this.finish()),e.onDestroy(()=>this.destroy())}_queueEvent(e,t){R(this._queuedCallbacks,e,[]).push(t)}onDone(e){this.queued&&this._queueEvent("done",e),this._player.onDone(e)}onStart(e){this.queued&&this._queueEvent("start",e),this._player.onStart(e)}onDestroy(e){this.queued&&this._queueEvent("destroy",e),this._player.onDestroy(e)}init(){this._player.init()}hasStarted(){return this.queued?!1:this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(e){this.queued||this._player.setPosition(e)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(e){let t=this._player;t.triggerCallback&&t.triggerCallback(e)}};function hi(n,e,t){let s=n.get(e);if(s){if(s.length){let i=s.indexOf(t);s.splice(i,1)}s.length==0&&n.delete(e)}return s}function di(n){return n??null}function we(n){return n&&n.nodeType===1}function fi(n){return n=="start"||n=="done"}function cs(n,e){let t=n.style.display;return n.style.display=e??"none",t}function hs(n,e,t,s,i){let r=[];t.forEach(l=>r.push(cs(l)));let a=[];s.forEach((l,u)=>{let h=new Map;l.forEach(c=>{let _=e.computeStyle(u,c,i);h.set(c,_),(!_||_.length==0)&&(u[q]=ci,a.push(u))}),n.set(u,h)});let o=0;return t.forEach(l=>cs(l,r[o++])),a}function ds(n,e){let t=new Map;if(n.forEach(o=>t.set(o,[])),e.length==0)return t;let s=1,i=new Set(e),r=new Map;function a(o){if(!o)return s;let l=r.get(o);if(l)return l;let u=o.parentNode;return t.has(u)?l=u:i.has(u)?l=s:l=a(u),r.set(o,l),l}return e.forEach(o=>{let l=a(o);l!==s&&t.get(l).push(o)}),t}function I(n,e){n.classList?.add(e)}function se(n,e){n.classList?.remove(e)}function mi(n,e,t){$(t).onDone(()=>n.processLeaveNode(e))}function pi(n){let e=[];return Es(n,e),e}function Es(n,e){for(let t=0;t<n.length;t++){let s=n[t];s instanceof me?Es(s.players,e):e.push(s)}}function gi(n,e){let t=Object.keys(n),s=Object.keys(e);if(t.length!=s.length)return!1;for(let i=0;i<t.length;i++){let r=t[i];if(!e.hasOwnProperty(r)||n[r]!==e[r])return!1}return!0}function fs(n,e,t){let s=t.get(n);if(!s)return!1;let i=e.get(n);return i?s.forEach(r=>i.add(r)):e.set(n,s),t.delete(n),!0}var ke=class{_driver;_normalizer;_transitionEngine;_timelineEngine;_triggerCache={};onRemovalComplete=(e,t)=>{};constructor(e,t,s){this._driver=t,this._normalizer=s,this._transitionEngine=new ct(e.body,t,s),this._timelineEngine=new lt(e.body,t,s),this._transitionEngine.onRemovalComplete=(i,r)=>this.onRemovalComplete(i,r)}registerTrigger(e,t,s,i,r){let a=e+"-"+i,o=this._triggerCache[a];if(!o){let l=[],u=[],h=ft(this._driver,r,l,u);if(l.length)throw Qt(i,l);o=si(i,h,this._normalizer),this._triggerCache[a]=o}this._transitionEngine.registerTrigger(t,i,o)}register(e,t){this._transitionEngine.register(e,t)}destroy(e,t){this._transitionEngine.destroy(e,t)}onInsert(e,t,s,i){this._transitionEngine.insertNode(e,t,s,i)}onRemove(e,t,s){this._transitionEngine.removeNode(e,t,s)}disableAnimations(e,t){this._transitionEngine.markElementAsDisabled(e,t)}process(e,t,s,i){if(s.charAt(0)=="@"){let[r,a]=Be(s),o=i;this._timelineEngine.command(r,t,a,o)}else this._transitionEngine.trigger(e,t,s,i)}listen(e,t,s,i,r){if(s.charAt(0)=="@"){let[a,o]=Be(s);return this._timelineEngine.listen(a,t,o,r)}return this._transitionEngine.listen(e,t,s,i,r)}flush(e=-1){this._transitionEngine.flush(e)}get players(){return[...this._transitionEngine.players,...this._timelineEngine.players]}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}afterFlushAnimationsDone(e){this._transitionEngine.afterFlushAnimationsDone(e)}};function yi(n,e){let t=null,s=null;return Array.isArray(e)&&e.length?(t=Je(e[0]),e.length>1&&(s=Je(e[e.length-1]))):e instanceof Map&&(t=Je(e)),t||s?new _i(n,t,s):null}var _i=(()=>{class n{_element;_startStyles;_endStyles;static initialStylesByElement=new WeakMap;_state=0;_initialStyles;constructor(t,s,i){this._element=t,this._startStyles=s,this._endStyles=i;let r=n.initialStylesByElement.get(t);r||n.initialStylesByElement.set(t,r=new Map),this._initialStyles=r}start(){this._state<1&&(this._startStyles&&K(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(K(this._element,this._initialStyles),this._endStyles&&(K(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(n.initialStylesByElement.delete(this._element),this._startStyles&&(G(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(G(this._element,this._endStyles),this._endStyles=null),K(this._element,this._initialStyles),this._state=3)}}return n})();function Je(n){let e=null;return n.forEach((t,s)=>{Si(s)&&(e=e||new Map,e.set(s,t))}),e}function Si(n){return n==="display"||n==="position"}var De=class{element;keyframes;options;_specialStyles;_onDoneFns=[];_onStartFns=[];_onDestroyFns=[];_duration;_delay;_initialized=!1;_finished=!1;_started=!1;_destroyed=!1;_finalKeyframe;_originalOnDoneFns=[];_originalOnStartFns=[];domPlayer=null;time=0;parentPlayer=null;currentSnapshot=new Map;constructor(e,t,s,i){this.element=e,this.keyframes=t,this.options=s,this._specialStyles=i,this._duration=s.duration,this._delay=s.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(e=>e()),this._onDoneFns=[])}init(){this._buildPlayer()&&this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return this.domPlayer;this._initialized=!0;let e=this.keyframes,t=this._triggerWebAnimation(this.element,e,this.options);if(!t)return this._onFinish(),null;this.domPlayer=t,this._finalKeyframe=e.length?e[e.length-1]:new Map;let s=()=>this._onFinish();return t.addEventListener("finish",s),this.onDestroy(()=>{t.removeEventListener("finish",s)}),t}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer?.pause()}_convertKeyframesToObject(e){let t=[];return e.forEach(s=>{t.push(Object.fromEntries(s))}),t}_triggerWebAnimation(e,t,s){let i=this._convertKeyframesToObject(t);try{return e.animate(i,s)}catch{return null}}onStart(e){this._originalOnStartFns.push(e),this._onStartFns.push(e)}onDone(e){this._originalOnDoneFns.push(e),this._onDoneFns.push(e)}onDestroy(e){this._onDestroyFns.push(e)}play(){let e=this._buildPlayer();e&&(this.hasStarted()||(this._onStartFns.forEach(t=>t()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),e.play())}pause(){this.init(),this.domPlayer?.pause()}finish(){this.init(),this.domPlayer&&(this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish())}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}_resetDomPlayerState(){this.domPlayer?.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(e=>e()),this._onDestroyFns=[])}setPosition(e){this.domPlayer||this.init(),this.domPlayer&&(this.domPlayer.currentTime=e*this.time)}getPosition(){return this.domPlayer?+(this.domPlayer.currentTime??0)/this.time:this._initialized?1:0}get totalTime(){return this._delay+this._duration}beforeDestroy(){let e=new Map;this.hasStarted()&&this._finalKeyframe.forEach((s,i)=>{i!=="offset"&&e.set(i,this._finished?s:Te(this.element,i))}),this.currentSnapshot=e}triggerCallback(e){let t=e==="start"?this._onStartFns:this._onDoneFns;t.forEach(s=>s()),t.length=0}},ht=class{validateStyleProperty(e){return!0}validateAnimatableStyleProperty(e){return!0}containsElement(e,t){return Qe(e,t)}getParentElement(e){return ye(e)}query(e,t,s){return Ve(e,t,s)}computeStyle(e,t,s){return Te(e,t)}animate(e,t,s,i,r,a=[]){let o=i==0?"both":"forwards",l={duration:s,delay:i,fill:o};r&&(l.easing=r);let u=new Map,h=a.filter(y=>y instanceof De);ts(s,i)&&h.forEach(y=>{y.currentSnapshot.forEach((f,g)=>u.set(g,f))});let c=xt(t).map(y=>new Map(y));c=ss(e,c,u);let _=yi(e,c);return new De(e,c,l,_)}};function Mi(n,e){return n==="noop"?new ke(e,new gs,new xe):new ke(e,new ht,new et)}var ms=class{_driver;_animationAst;constructor(e,t){this._driver=e;let s=[],r=ft(e,t,s,[]);if(s.length)throw qt(s);this._animationAst=r}buildTimelines(e,t,s,i,r){let a=Array.isArray(t)?Ge(t):t,o=Array.isArray(s)?Ge(s):s,l=[];r=r||new ie;let u=pt(this._driver,e,this._animationAst,_e,re,a,o,i,r,l);if(l.length)throw Bt(l);return u}},Ae="@",Ts="@.disabled",Re=class{namespaceId;delegate;engine;_onDestroy;\u0275type=0;constructor(e,t,s,i){this.namespaceId=e,this.delegate=t,this.engine=s,this._onDestroy=i}get data(){return this.delegate.data}destroyNode(e){this.delegate.destroyNode?.(e)}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.engine.afterFlushAnimationsDone(()=>{queueMicrotask(()=>{this.delegate.destroy()})}),this._onDestroy?.()}createElement(e,t){return this.delegate.createElement(e,t)}createComment(e){return this.delegate.createComment(e)}createText(e){return this.delegate.createText(e)}appendChild(e,t){this.delegate.appendChild(e,t),this.engine.onInsert(this.namespaceId,t,e,!1)}insertBefore(e,t,s,i=!0){this.delegate.insertBefore(e,t,s),this.engine.onInsert(this.namespaceId,t,e,i)}removeChild(e,t,s,i){if(i){this.delegate.removeChild(e,t,s,i);return}this.parentNode(t)&&this.engine.onRemove(this.namespaceId,t,this.delegate)}selectRootElement(e,t){return this.delegate.selectRootElement(e,t)}parentNode(e){return this.delegate.parentNode(e)}nextSibling(e){return this.delegate.nextSibling(e)}setAttribute(e,t,s,i){this.delegate.setAttribute(e,t,s,i)}removeAttribute(e,t,s){this.delegate.removeAttribute(e,t,s)}addClass(e,t){this.delegate.addClass(e,t)}removeClass(e,t){this.delegate.removeClass(e,t)}setStyle(e,t,s,i){this.delegate.setStyle(e,t,s,i)}removeStyle(e,t,s){this.delegate.removeStyle(e,t,s)}setProperty(e,t,s){t.charAt(0)==Ae&&t==Ts?this.disableAnimations(e,!!s):this.delegate.setProperty(e,t,s)}setValue(e,t){this.delegate.setValue(e,t)}listen(e,t,s,i){return this.delegate.listen(e,t,s,i)}disableAnimations(e,t){this.engine.disableAnimations(e,t)}},dt=class extends Re{factory;constructor(e,t,s,i,r){super(t,s,i,r),this.factory=e,this.namespaceId=t}setProperty(e,t,s){t.charAt(0)==Ae?t.charAt(1)=="."&&t==Ts?(s=s===void 0?!0:!!s,this.disableAnimations(e,s)):this.engine.process(this.namespaceId,e,t.slice(1),s):this.delegate.setProperty(e,t,s)}listen(e,t,s,i){if(t.charAt(0)==Ae){let r=Ei(e),a=t.slice(1),o="";return a.charAt(0)!=Ae&&([a,o]=Ti(a)),this.engine.listen(this.namespaceId,r,a,o,l=>{let u=l._data||-1;this.factory.scheduleListenerCallback(u,s,l)})}return this.delegate.listen(e,t,s,i)}};function Ei(n){switch(n){case"body":return document.body;case"document":return document;case"window":return window;default:return n}}function Ti(n){let e=n.indexOf("."),t=n.substring(0,e),s=n.slice(e+1);return[t,s]}var ps=class{delegate;engine;_zone;_currentId=0;_microtaskId=1;_animationCallbacksBuffer=[];_rendererCache=new Map;_cdRecurDepth=0;constructor(e,t,s){this.delegate=e,this.engine=t,this._zone=s,t.onRemovalComplete=(i,r)=>{r?.removeChild(null,i)}}createRenderer(e,t){let i=this.delegate.createRenderer(e,t);if(!e||!t?.data?.animation){let u=this._rendererCache,h=u.get(i);if(!h){let c=()=>u.delete(i);h=new Re("",i,this.engine,c),u.set(i,h)}return h}let r=t.id,a=t.id+"-"+this._currentId;this._currentId++,this.engine.register(a,e);let o=u=>{Array.isArray(u)?u.forEach(o):this.engine.registerTrigger(r,a,e,u.name,u)};return t.data.animation.forEach(o),new dt(this,a,i,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){queueMicrotask(()=>{this._microtaskId++})}scheduleListenerCallback(e,t,s){if(e>=0&&e<this._microtaskId){this._zone.run(()=>t(s));return}let i=this._animationCallbacksBuffer;i.length==0&&queueMicrotask(()=>{this._zone.run(()=>{i.forEach(r=>{let[a,o]=r;a(o)}),this._animationCallbacksBuffer=[]})}),i.push([t,s])}end(){this._cdRecurDepth--,this._cdRecurDepth==0&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}componentReplaced(e){this.engine.flush(),this.delegate.componentReplaced?.(e)}};export{is as AnimationDriver,gs as NoopAnimationDriver,ms as \u0275Animation,ke as \u0275AnimationEngine,dt as \u0275AnimationRenderer,ps as \u0275AnimationRendererFactory,Ze as \u0275AnimationStyleNormalizer,Re as \u0275BaseAnimationRenderer,_e as \u0275ENTER_CLASSNAME,re as \u0275LEAVE_CLASSNAME,xe as \u0275NoopAnimationStyleNormalizer,he as \u0275TransitionAnimationPlayer,ht as \u0275WebAnimationsDriver,De as \u0275WebAnimationsPlayer,et as \u0275WebAnimationsStyleNormalizer,ts as \u0275allowPreviousPlayerStylesMerge,qs as \u0275camelCaseToDashCase,Qe as \u0275containsElement,Mi as \u0275createEngine,ye as \u0275getParentElement,Ve as \u0275invokeQuery,xt as \u0275normalizeKeyframes,Zt as \u0275validateStyleProperty,Rs as \u0275validateWebAnimatableStyleProperty};
|
frontend/dist/frontend/browser/home.css.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"version": 3,
|
| 3 |
-
"sources": ["src/app/pages/home/home.css"],
|
| 4 |
-
"sourcesContent": ["/* ═══════════════════════════════════════════════════════════\n RESET + SHELL\n ═══════════════════════════════════════════════════════════ */\n\n:host { display: block; min-height: 100vh; }\n* { box-sizing: border-box; margin: 0; padding: 0; }\n\n.page {\n min-height: 100vh;\n background: radial-gradient(ellipse 140% 100% at 50% 0%, #f8f4ec 0%, #eee8da 100%);\n font-family: 'Barlow', -apple-system, sans-serif;\n color: #1a1510;\n position: relative;\n}\n\n/* ── subtle paper grain ── */\n.grain {\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: 900;\n opacity: 0.035;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.72' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23n)'/%3E%3C/svg%3E\");\n background-size: 280px;\n}\n\n/* ═══════════════════════════════════════════════════════════\n HEADER\n ═══════════════════════════════════════════════════════════ */\n\n.site-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 0 48px;\n height: 60px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n position: sticky;\n top: 0;\n background: rgba(248, 244, 236, 0.88);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n z-index: 50;\n}\n\n.hdr-left {\n display: flex;\n align-items: center;\n}\n\n/* ── Typographic wordmark ── */\n.brand-name {\n display: flex;\n align-items: baseline;\n line-height: 1;\n user-select: none;\n}\n\n.brand-r {\n font-family: 'Cormorant Garamond', Georgia, serif;\n font-size: 30px;\n font-weight: 700;\n font-style: italic;\n color: #c8952a;\n line-height: 1;\n letter-spacing: -0.5px;\n}\n\n.brand-dash {\n font-family: 'Barlow', sans-serif;\n font-size: 15px;\n font-weight: 300;\n color: rgba(26, 21, 16, 0.22);\n margin: 0 3px 0 2px;\n align-self: center;\n}\n\n.brand-word {\n font-family: 'Barlow', sans-serif;\n font-size: 12.5px;\n font-weight: 700;\n letter-spacing: 3.5px;\n text-transform: uppercase;\n color: #1a1510;\n align-self: center;\n}\n\n.hdr-right {\n display: flex;\n align-items: center;\n}\n\n.hdr-live {\n display: flex;\n align-items: center;\n gap: 7px;\n font-family: 'Fira Code', monospace;\n font-size: 11px;\n font-weight: 500;\n color: #3a5044;\n letter-spacing: 0.2px;\n}\n\n.live-dot {\n width: 6px;\n height: 6px;\n background: #3a9460;\n border-radius: 50%;\n animation: pulse 2.5s ease-in-out infinite;\n}\n\n/* ═══════════════════════════════════════════════════════════\n PAGE BODY\n ═══════════════════════════════════════════════════════════ */\n\n.page-body {\n max-width: 780px;\n margin: 0 auto;\n padding: 0 48px 100px;\n}\n\n/* ═══════════════════════════════════════════════════════════\n HERO\n ═══════════════════════════════════════════════════════════ */\n\n.hero {\n padding: 58px 0 28px;\n}\n\n.hero-eyebrow {\n font-size: 10.5px;\n font-weight: 600;\n letter-spacing: 2px;\n text-transform: uppercase;\n color: #7a7265;\n margin-bottom: 18px;\n}\n\n.hero-title {\n font-family: 'Cormorant Garamond', Georgia, serif;\n font-size: 72px;\n font-weight: 600;\n line-height: 0.92;\n letter-spacing: -1.5px;\n color: #1a1510;\n}\n\n.hero-title em {\n font-style: italic;\n color: #c8952a;\n font-weight: 500;\n}\n\n/* ═══════════════════════════════════════════════════════════\n MODEL SWITCHER RAIL\n ═══════════════════════════════════════════════════════════ */\n\n.model-rail {\n display: flex;\n align-items: center;\n gap: 18px;\n padding: 22px 0;\n border-top: 1px solid rgba(0, 0, 0, 0.09);\n border-bottom: 1px solid rgba(0, 0, 0, 0.09);\n margin-bottom: 36px;\n flex-wrap: wrap;\n}\n\n.rail-label {\n font-size: 9.5px;\n font-weight: 700;\n letter-spacing: 1.8px;\n text-transform: uppercase;\n color: #6a6255;\n flex-shrink: 0;\n}\n\n.rail-pills {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.model-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 15px;\n background: transparent;\n border: 1.5px solid rgba(0, 0, 0, 0.16);\n border-radius: 28px;\n font-family: 'Barlow', sans-serif;\n font-size: 12px;\n font-weight: 600;\n color: #5a5448;\n cursor: default;\n transition: all 0.17s;\n letter-spacing: 0.2px;\n}\n\n.model-pill.pill-on {\n background: #1a1510;\n border-color: #1a1510;\n color: #f5f0e5;\n cursor: pointer;\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.18);\n}\n\n.model-pill.pill-off {\n opacity: 0.35;\n}\n\n.model-pill:not(.pill-on):not(.pill-off) {\n cursor: pointer;\n}\n\n.model-pill:not(.pill-on):not(.pill-off):hover {\n border-color: rgba(0, 0, 0, 0.28);\n color: #1a1510;\n}\n\n.pill-dot {\n font-size: 9.5px;\n line-height: 1;\n opacity: 0.8;\n}\n\n.pill-algo {\n font-family: 'Fira Code', monospace;\n font-size: 11px;\n}\n\n.pill-acc {\n font-size: 11px;\n color: #8a8070;\n}\n\n/* ═══════════════════════════════════════════════════════════\n CLAIM INPUT\n ═══════════════════════════════════════════════════════════ */\n\n.claim-section {\n margin-bottom: 28px;\n}\n\n.claim-eyebrow {\n display: block;\n font-size: 9.5px;\n font-weight: 700;\n letter-spacing: 1.8px;\n text-transform: uppercase;\n color: #6a6255;\n margin-bottom: 14px;\n}\n\n.claim-field {\n display: block;\n width: 100%;\n background: transparent;\n border: none;\n border-bottom: 2px solid rgba(0, 0, 0, 0.14);\n padding: 10px 0 14px;\n font-family: 'Barlow', sans-serif;\n font-size: 16px;\n line-height: 1.68;\n color: #1a1510;\n resize: none;\n outline: none;\n transition: border-color 0.2s;\n}\n\n.claim-field:focus {\n border-bottom-color: #c8952a;\n}\n\n.claim-field::placeholder {\n color: #ccc4b4;\n font-style: italic;\n font-size: 15.5px;\n}\n\n.claim-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-top: 10px;\n}\n\n.claim-count {\n font-family: 'Fira Code', monospace;\n font-size: 11px;\n color: #8a8275;\n}\n\n.claim-count.warn { color: #c8952a; font-weight: 600; }\n\n.claim-actions {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.act-clear {\n background: none;\n border: none;\n font-family: 'Barlow', sans-serif;\n font-size: 12.5px;\n font-weight: 600;\n color: #8a8275;\n cursor: pointer;\n letter-spacing: 0.3px;\n transition: color 0.15s;\n padding: 6px 0;\n}\n\n.act-clear:hover:not(:disabled) { color: #1a1510; }\n.act-clear:disabled { opacity: 0.28; cursor: not-allowed; }\n\n.act-submit {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 10px 26px;\n background: #1a1510;\n color: #f5f0e5;\n border: none;\n border-radius: 3px;\n font-family: 'Barlow', sans-serif;\n font-size: 13px;\n font-weight: 700;\n cursor: pointer;\n letter-spacing: 0.6px;\n transition: background 0.15s, transform 0.12s, box-shadow 0.15s;\n}\n\n.act-submit:hover:not(:disabled) {\n background: #2e2820;\n box-shadow: 0 4px 18px rgba(0, 0, 0, 0.22);\n transform: translateY(-1px);\n}\n\n.act-submit:active:not(:disabled) { transform: translateY(0); box-shadow: none; }\n.act-submit:disabled { opacity: 0.3; cursor: not-allowed; }\n\n.spin-icon { animation: spin 0.72s linear infinite; }\n\n/* ═══════════════════════════════════════════════════════════\n DIVIDER\n ═══════════════════════════════════════════════════════════ */\n\n.divider {\n height: 2px;\n background: rgba(0, 0, 0, 0.1);\n margin-bottom: 40px;\n position: relative;\n overflow: hidden;\n border-radius: 1px;\n}\n\n.divider-fill {\n position: absolute;\n left: 0; top: 0; bottom: 0;\n width: 0;\n background: linear-gradient(90deg, #c8952a 0%, #e8b840 50%, #c8952a 100%);\n background-size: 200% 100%;\n}\n\n.divider-fill.running {\n animation:\n progressRun 14s cubic-bezier(0.1, 0.9, 0.2, 1) forwards,\n shimmerGold 1.6s linear infinite;\n}\n\n/* ═══════════════════════════════════════════════════════════\n RESULTS\n ═══════════════════════════════════════════════════════════ */\n\n.result-section { min-height: 160px; }\n\n/* ─��� empty ── */\n\n.empty-wrap { padding: 32px 0 20px; }\n\n.empty-italic {\n font-family: 'Cormorant Garamond', Georgia, serif;\n font-size: 26px;\n font-style: italic;\n font-weight: 500;\n color: #9a9285;\n margin-bottom: 8px;\n}\n\n.empty-hint {\n font-size: 12.5px;\n color: #8a8275;\n}\n\n.empty-hint em {\n font-style: normal;\n font-weight: 700;\n color: #6a6255;\n}\n\n/* ── skeleton ── */\n\n.skel-wrap {\n display: flex;\n flex-direction: column;\n gap: 18px;\n animation: fadeUp 0.22s ease;\n}\n\n.skel {\n background: linear-gradient(90deg, #e8e2d8 25%, #ddd8cc 50%, #e8e2d8 75%);\n background-size: 200% 100%;\n border-radius: 3px;\n animation: shimmer 1.4s infinite;\n}\n\n.skel-title { height: 58px; width: 55%; }\n.skel-rule { height: 2px; width: 100%; border-radius: 0; }\n\n.skel-chart-row {\n display: flex;\n gap: 10px;\n align-items: flex-end;\n height: 88px;\n}\n\n.skel-col { flex: 1; border-radius: 2px; }\n\n/* ── error ── */\n\n.error-wrap {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n padding: 20px 0;\n border-top: 2.5px solid #b83020;\n animation: fadeUp 0.2s ease;\n}\n\n.error-x {\n font-family: 'Cormorant Garamond', serif;\n font-size: 38px;\n line-height: 1;\n color: #b83020;\n font-weight: 700;\n flex-shrink: 0;\n margin-top: -4px;\n}\n\n.error-wrap div strong { font-size: 13.5px; font-weight: 700; color: #b83020; display: block; margin-bottom: 4px; }\n.error-wrap div p { font-size: 12.5px; color: #9a2810; line-height: 1.55; }\n\n/* ═══════════════════════════════════════════════════════════\n VERDICT BLOCK\n ═══════════════════════════════════════════════════════════ */\n\n.verdict-wrap {\n display: flex;\n flex-direction: column;\n gap: 36px;\n animation: fadeUp 0.28s cubic-bezier(0.34, 1.56, 0.64, 1);\n}\n\n.verdict-display {\n padding: 24px 0 20px;\n border-top: 2.5px solid currentColor;\n}\n\n.vd-confidence {\n font-family: 'Fira Code', monospace;\n font-size: 13px;\n font-weight: 600;\n color: #6a6255;\n margin-bottom: 4px;\n letter-spacing: 0.5px;\n}\n\n.pct { font-size: 10px; opacity: 0.8; }\n\n.vd-label {\n font-family: 'Cormorant Garamond', Georgia, serif;\n font-size: 64px;\n font-weight: 700;\n line-height: 1;\n letter-spacing: -1px;\n margin-bottom: 16px;\n text-transform: capitalize;\n}\n\n.vd-desc {\n font-size: 15px;\n line-height: 1.7;\n color: #6a6050;\n margin-bottom: 12px;\n max-width: 500px;\n}\n\n.vd-meta {\n font-family: 'Fira Code', monospace;\n font-size: 10.5px;\n color: #7a7265;\n letter-spacing: 0.3px;\n}\n\n.vd-meta code {\n background: rgba(0, 0, 0, 0.07);\n padding: 1px 5px;\n border-radius: 3px;\n}\n\n/* Verdict colour states */\n.vd-green { color: #0c6030; border-color: rgba(12, 96, 48, 0.45); }\n.vd-lime { color: #28783c; border-color: rgba(40, 120, 60, 0.40); }\n.vd-yellow { color: #8a6600; border-color: rgba(138, 102, 0, 0.42); }\n.vd-orange { color: #8a4600; border-color: rgba(138, 70, 0, 0.42); }\n.vd-red { color: #8a1e10; border-color: rgba(138, 30, 16, 0.42); }\n.vd-crimson { color: #6a0818; border-color: rgba(106, 8, 24, 0.42); }\n\n/* ═══════════════════════════════════════════════════════════\n VERTICAL BAR CHART\n ═══════════════════════════════════════════════════════════ */\n\n.class-chart {\n display: flex;\n gap: 8px;\n}\n\n.chart-col {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n}\n\n.col-pct {\n font-family: 'Fira Code', monospace;\n font-size: 10.5px;\n color: #7a7265;\n font-weight: 600;\n line-height: 1;\n}\n\n.col-pct.pct-active {\n color: #1a1510;\n font-weight: 700;\n}\n\n.pct-s { font-size: 8.5px; opacity: 0.7; }\n\n.col-track {\n width: 100%;\n height: 88px;\n display: flex;\n align-items: flex-end;\n background: rgba(0, 0, 0, 0.05);\n border-radius: 3px;\n overflow: hidden;\n}\n\n.chart-col.col-active .col-track {\n background: rgba(0, 0, 0, 0.08);\n}\n\n.col-bar {\n width: 100%;\n border-radius: 2px 2px 0 0;\n min-height: 0;\n transition: height 0.78s cubic-bezier(0.4, 0, 0.2, 1);\n transition-delay: var(--delay, 0ms);\n}\n\n/* Bar fills – spectrum from forest to crimson */\n.bar-green { background: linear-gradient(180deg, #3aaa72 0%, #1e8850 100%); }\n.bar-lime { background: linear-gradient(180deg, #50b868 0%, #389050 100%); }\n.bar-yellow { background: linear-gradient(180deg, #d0aa22 0%, #b09012 100%); }\n.bar-orange { background: linear-gradient(180deg, #d09232 0%, #b07018 100%); }\n.bar-red { background: linear-gradient(180deg, #e06052 0%, #c04035 100%); }\n.bar-crimson { background: linear-gradient(180deg, #c03058 0%, #a01838 100%); }\n\n.col-key {\n font-family: 'Fira Code', monospace;\n font-size: 9px;\n font-weight: 700;\n letter-spacing: 0.4px;\n color: #7a7265;\n text-align: center;\n}\n\n.col-key.key-active {\n color: #1a1510;\n font-weight: 700;\n}\n\n/* ═══════════════════════════════════════════════════════════\n ANIMATIONS\n ═══════════════════════════════════════════════════════════ */\n\n@keyframes spin {\n to { transform: rotate(360deg); }\n}\n\n@keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.22; }\n}\n\n@keyframes shimmer {\n to { background-position: -200% 0; }\n}\n\n@keyframes shimmerGold {\n 0%, 100% { background-position: 0% 0; }\n 50% { background-position: 100% 0; }\n}\n\n@keyframes fadeUp {\n from { opacity: 0; transform: translateY(9px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes progressRun {\n 0% { width: 0%; }\n 20% { width: 36%; }\n 50% { width: 62%; }\n 80% { width: 82%; }\n 100% { width: 91%; }\n}\n\n/* ═══════════════════════════════════════════════════════════\n RESPONSIVE\n ═══════════════════════════════════════════════════════════ */\n\n@media (max-width: 680px) {\n .page-body { padding: 0 22px 70px; }\n .site-header { padding: 0 22px; }\n .hero-title { font-size: 52px; }\n .vd-label { font-size: 46px; }\n .col-track { height: 68px; }\n .col-pct { font-size: 9.5px; }\n .col-key { font-size: 8px; }\n .class-chart { gap: 5px; }\n}\n\n@media (max-width: 440px) {\n .hero-title { font-size: 42px; }\n .vd-label { font-size: 38px; }\n .hdr-label { display: none; }\n .hdr-sep { display: none; }\n}\n"],
|
| 5 |
-
"mappings": "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",
|
| 6 |
-
"names": []
|
| 7 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/dist/frontend/browser/index.html
CHANGED
|
@@ -1,16 +1,15 @@
|
|
| 1 |
<!doctype html>
|
| 2 |
-
<html lang="fr">
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""/>
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
<
|
| 14 |
-
|
| 15 |
-
<script src="main.js" type="module"></script></body>
|
| 16 |
</html>
|
|
|
|
| 1 |
<!doctype html>
|
| 2 |
+
<html lang="fr" data-beasties-container>
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8">
|
| 5 |
+
<title>triple_r · FactCheck Engine</title>
|
| 6 |
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
| 7 |
+
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
| 8 |
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 9 |
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 10 |
+
<style>@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwhsk.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwhsk.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwhsk.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwhsk.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwg.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwhsk.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwhsk.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwhsk.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwhsk.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwg.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwhsk.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwhsk.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwhsk.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwhsk.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwg.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwhsk.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwhsk.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwhsk.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwhsk.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwhsk.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/jetbrainsmono/v24/tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwg.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}</style>
|
| 11 |
+
<style>:root{--bg-deep:#0a0e1a;--bg-panel:#060910;--bg-card:#0f172a;--border:#1e293b;--border-blue:#1d4ed8;--blue-400:#60a5fa;--blue-600:#1d4ed8;--text-pri:#f1f5f9;--text-sec:#94a3b8;--text-muted:#475569;--green:#4ade80;--red:#f87171;--yellow:#fbbf24}html,body{height:100%;margin:0}body{background:var(--bg-deep);font-family:JetBrains Mono,Fira Code,monospace;color:var(--text-pri)}*{box-sizing:border-box}</style><link rel="stylesheet" href="styles-Z6I53I7P.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-Z6I53I7P.css"></noscript></head>
|
| 12 |
+
<body>
|
| 13 |
+
<app-root></app-root>
|
| 14 |
+
<link rel="modulepreload" href="chunk-HLPJREHD.js"><script src="main-2Z7HIITH.js" type="module"></script></body>
|
|
|
|
| 15 |
</html>
|
frontend/dist/frontend/browser/main-2Z7HIITH.js
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
frontend/dist/frontend/browser/main.js
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
frontend/dist/frontend/browser/main.js.map
DELETED
|
The diff for this file is too large to render.
See raw diff
|
|
|
frontend/dist/frontend/browser/styles-Z6I53I7P.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
:root{--bg-deep: #0a0e1a;--bg-panel: #060910;--bg-card: #0f172a;--border: #1e293b;--border-blue: #1d4ed8;--blue-400: #60a5fa;--blue-600: #1d4ed8;--text-pri: #f1f5f9;--text-sec: #94a3b8;--text-muted: #475569;--green: #4ade80;--red: #f87171;--yellow: #fbbf24}html,body{height:100%;margin:0}body{background:var(--bg-deep);font-family:JetBrains Mono,Fira Code,monospace;color:var(--text-pri)}*{box-sizing:border-box}::selection{background:var(--blue-600);color:var(--text-pri)}textarea,input,button{font-family:inherit}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-panel)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}
|
frontend/dist/frontend/browser/styles.css
DELETED
|
@@ -1,379 +0,0 @@
|
|
| 1 |
-
/* src/styles.css */
|
| 2 |
-
/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
|
| 3 |
-
@layer properties;
|
| 4 |
-
@layer theme, base, components, utilities;
|
| 5 |
-
@layer theme {
|
| 6 |
-
:root,
|
| 7 |
-
:host {
|
| 8 |
-
--font-sans:
|
| 9 |
-
ui-sans-serif,
|
| 10 |
-
system-ui,
|
| 11 |
-
sans-serif,
|
| 12 |
-
"Apple Color Emoji",
|
| 13 |
-
"Segoe UI Emoji",
|
| 14 |
-
"Segoe UI Symbol",
|
| 15 |
-
"Noto Color Emoji";
|
| 16 |
-
--font-mono:
|
| 17 |
-
ui-monospace,
|
| 18 |
-
SFMono-Regular,
|
| 19 |
-
Menlo,
|
| 20 |
-
Monaco,
|
| 21 |
-
Consolas,
|
| 22 |
-
"Liberation Mono",
|
| 23 |
-
"Courier New",
|
| 24 |
-
monospace;
|
| 25 |
-
--color-blue-600: oklch(54.6% 0.245 262.881);
|
| 26 |
-
--color-slate-100: oklch(96.8% 0.007 247.896);
|
| 27 |
-
--color-white: #fff;
|
| 28 |
-
--spacing: 0.25rem;
|
| 29 |
-
--container-4xl: 56rem;
|
| 30 |
-
--text-lg: 1.125rem;
|
| 31 |
-
--text-lg--line-height: calc(1.75 / 1.125);
|
| 32 |
-
--text-2xl: 1.5rem;
|
| 33 |
-
--text-2xl--line-height: calc(2 / 1.5);
|
| 34 |
-
--text-4xl: 2.25rem;
|
| 35 |
-
--text-4xl--line-height: calc(2.5 / 2.25);
|
| 36 |
-
--font-weight-semibold: 600;
|
| 37 |
-
--font-weight-bold: 700;
|
| 38 |
-
--radius-lg: 0.5rem;
|
| 39 |
-
--radius-xl: 0.75rem;
|
| 40 |
-
--default-font-family: var(--font-sans);
|
| 41 |
-
--default-mono-font-family: var(--font-mono);
|
| 42 |
-
}
|
| 43 |
-
}
|
| 44 |
-
@layer base {
|
| 45 |
-
*,
|
| 46 |
-
::after,
|
| 47 |
-
::before,
|
| 48 |
-
::backdrop,
|
| 49 |
-
::file-selector-button {
|
| 50 |
-
box-sizing: border-box;
|
| 51 |
-
margin: 0;
|
| 52 |
-
padding: 0;
|
| 53 |
-
border: 0 solid;
|
| 54 |
-
}
|
| 55 |
-
html,
|
| 56 |
-
:host {
|
| 57 |
-
line-height: 1.5;
|
| 58 |
-
-webkit-text-size-adjust: 100%;
|
| 59 |
-
tab-size: 4;
|
| 60 |
-
font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");
|
| 61 |
-
font-feature-settings: var(--default-font-feature-settings, normal);
|
| 62 |
-
font-variation-settings: var(--default-font-variation-settings, normal);
|
| 63 |
-
-webkit-tap-highlight-color: transparent;
|
| 64 |
-
}
|
| 65 |
-
hr {
|
| 66 |
-
height: 0;
|
| 67 |
-
color: inherit;
|
| 68 |
-
border-top-width: 1px;
|
| 69 |
-
}
|
| 70 |
-
abbr:where([title]) {
|
| 71 |
-
-webkit-text-decoration: underline dotted;
|
| 72 |
-
text-decoration: underline dotted;
|
| 73 |
-
}
|
| 74 |
-
h1,
|
| 75 |
-
h2,
|
| 76 |
-
h3,
|
| 77 |
-
h4,
|
| 78 |
-
h5,
|
| 79 |
-
h6 {
|
| 80 |
-
font-size: inherit;
|
| 81 |
-
font-weight: inherit;
|
| 82 |
-
}
|
| 83 |
-
a {
|
| 84 |
-
color: inherit;
|
| 85 |
-
-webkit-text-decoration: inherit;
|
| 86 |
-
text-decoration: inherit;
|
| 87 |
-
}
|
| 88 |
-
b,
|
| 89 |
-
strong {
|
| 90 |
-
font-weight: bolder;
|
| 91 |
-
}
|
| 92 |
-
code,
|
| 93 |
-
kbd,
|
| 94 |
-
samp,
|
| 95 |
-
pre {
|
| 96 |
-
font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);
|
| 97 |
-
font-feature-settings: var(--default-mono-font-feature-settings, normal);
|
| 98 |
-
font-variation-settings: var(--default-mono-font-variation-settings, normal);
|
| 99 |
-
font-size: 1em;
|
| 100 |
-
}
|
| 101 |
-
small {
|
| 102 |
-
font-size: 80%;
|
| 103 |
-
}
|
| 104 |
-
sub,
|
| 105 |
-
sup {
|
| 106 |
-
font-size: 75%;
|
| 107 |
-
line-height: 0;
|
| 108 |
-
position: relative;
|
| 109 |
-
vertical-align: baseline;
|
| 110 |
-
}
|
| 111 |
-
sub {
|
| 112 |
-
bottom: -0.25em;
|
| 113 |
-
}
|
| 114 |
-
sup {
|
| 115 |
-
top: -0.5em;
|
| 116 |
-
}
|
| 117 |
-
table {
|
| 118 |
-
text-indent: 0;
|
| 119 |
-
border-color: inherit;
|
| 120 |
-
border-collapse: collapse;
|
| 121 |
-
}
|
| 122 |
-
:-moz-focusring {
|
| 123 |
-
outline: auto;
|
| 124 |
-
}
|
| 125 |
-
progress {
|
| 126 |
-
vertical-align: baseline;
|
| 127 |
-
}
|
| 128 |
-
summary {
|
| 129 |
-
display: list-item;
|
| 130 |
-
}
|
| 131 |
-
ol,
|
| 132 |
-
ul,
|
| 133 |
-
menu {
|
| 134 |
-
list-style: none;
|
| 135 |
-
}
|
| 136 |
-
img,
|
| 137 |
-
svg,
|
| 138 |
-
video,
|
| 139 |
-
canvas,
|
| 140 |
-
audio,
|
| 141 |
-
iframe,
|
| 142 |
-
embed,
|
| 143 |
-
object {
|
| 144 |
-
display: block;
|
| 145 |
-
vertical-align: middle;
|
| 146 |
-
}
|
| 147 |
-
img,
|
| 148 |
-
video {
|
| 149 |
-
max-width: 100%;
|
| 150 |
-
height: auto;
|
| 151 |
-
}
|
| 152 |
-
button,
|
| 153 |
-
input,
|
| 154 |
-
select,
|
| 155 |
-
optgroup,
|
| 156 |
-
textarea,
|
| 157 |
-
::file-selector-button {
|
| 158 |
-
font: inherit;
|
| 159 |
-
font-feature-settings: inherit;
|
| 160 |
-
font-variation-settings: inherit;
|
| 161 |
-
letter-spacing: inherit;
|
| 162 |
-
color: inherit;
|
| 163 |
-
border-radius: 0;
|
| 164 |
-
background-color: transparent;
|
| 165 |
-
opacity: 1;
|
| 166 |
-
}
|
| 167 |
-
:where(select:is([multiple], [size])) optgroup {
|
| 168 |
-
font-weight: bolder;
|
| 169 |
-
}
|
| 170 |
-
:where(select:is([multiple], [size])) optgroup option {
|
| 171 |
-
padding-inline-start: 20px;
|
| 172 |
-
}
|
| 173 |
-
::file-selector-button {
|
| 174 |
-
margin-inline-end: 4px;
|
| 175 |
-
}
|
| 176 |
-
::placeholder {
|
| 177 |
-
opacity: 1;
|
| 178 |
-
}
|
| 179 |
-
@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
|
| 180 |
-
::placeholder {
|
| 181 |
-
color: currentcolor;
|
| 182 |
-
}
|
| 183 |
-
@supports (color: color-mix(in lab, red, red)) {
|
| 184 |
-
::placeholder {
|
| 185 |
-
color: color-mix(in oklab, currentcolor 50%, transparent);
|
| 186 |
-
}
|
| 187 |
-
}
|
| 188 |
-
}
|
| 189 |
-
textarea {
|
| 190 |
-
resize: vertical;
|
| 191 |
-
}
|
| 192 |
-
::-webkit-search-decoration {
|
| 193 |
-
-webkit-appearance: none;
|
| 194 |
-
}
|
| 195 |
-
::-webkit-date-and-time-value {
|
| 196 |
-
min-height: 1lh;
|
| 197 |
-
text-align: inherit;
|
| 198 |
-
}
|
| 199 |
-
::-webkit-datetime-edit {
|
| 200 |
-
display: inline-flex;
|
| 201 |
-
}
|
| 202 |
-
::-webkit-datetime-edit-fields-wrapper {
|
| 203 |
-
padding: 0;
|
| 204 |
-
}
|
| 205 |
-
::-webkit-datetime-edit,
|
| 206 |
-
::-webkit-datetime-edit-year-field,
|
| 207 |
-
::-webkit-datetime-edit-month-field,
|
| 208 |
-
::-webkit-datetime-edit-day-field,
|
| 209 |
-
::-webkit-datetime-edit-hour-field,
|
| 210 |
-
::-webkit-datetime-edit-minute-field,
|
| 211 |
-
::-webkit-datetime-edit-second-field,
|
| 212 |
-
::-webkit-datetime-edit-millisecond-field,
|
| 213 |
-
::-webkit-datetime-edit-meridiem-field {
|
| 214 |
-
padding-block: 0;
|
| 215 |
-
}
|
| 216 |
-
::-webkit-calendar-picker-indicator {
|
| 217 |
-
line-height: 1;
|
| 218 |
-
}
|
| 219 |
-
:-moz-ui-invalid {
|
| 220 |
-
box-shadow: none;
|
| 221 |
-
}
|
| 222 |
-
button,
|
| 223 |
-
input:where([type=button], [type=reset], [type=submit]),
|
| 224 |
-
::file-selector-button {
|
| 225 |
-
appearance: button;
|
| 226 |
-
}
|
| 227 |
-
::-webkit-inner-spin-button,
|
| 228 |
-
::-webkit-outer-spin-button {
|
| 229 |
-
height: auto;
|
| 230 |
-
}
|
| 231 |
-
[hidden]:where(:not([hidden=until-found])) {
|
| 232 |
-
display: none !important;
|
| 233 |
-
}
|
| 234 |
-
}
|
| 235 |
-
@layer utilities {
|
| 236 |
-
.static {
|
| 237 |
-
position: static;
|
| 238 |
-
}
|
| 239 |
-
.mx-auto {
|
| 240 |
-
margin-inline: auto;
|
| 241 |
-
}
|
| 242 |
-
.mt-2 {
|
| 243 |
-
margin-top: calc(var(--spacing) * 2);
|
| 244 |
-
}
|
| 245 |
-
.mt-4 {
|
| 246 |
-
margin-top: calc(var(--spacing) * 4);
|
| 247 |
-
}
|
| 248 |
-
.mt-8 {
|
| 249 |
-
margin-top: calc(var(--spacing) * 8);
|
| 250 |
-
}
|
| 251 |
-
.mb-6 {
|
| 252 |
-
margin-bottom: calc(var(--spacing) * 6);
|
| 253 |
-
}
|
| 254 |
-
.min-h-screen {
|
| 255 |
-
min-height: 100vh;
|
| 256 |
-
}
|
| 257 |
-
.w-full {
|
| 258 |
-
width: 100%;
|
| 259 |
-
}
|
| 260 |
-
.max-w-4xl {
|
| 261 |
-
max-width: var(--container-4xl);
|
| 262 |
-
}
|
| 263 |
-
.rounded-lg {
|
| 264 |
-
border-radius: var(--radius-lg);
|
| 265 |
-
}
|
| 266 |
-
.rounded-xl {
|
| 267 |
-
border-radius: var(--radius-xl);
|
| 268 |
-
}
|
| 269 |
-
.border {
|
| 270 |
-
border-style: var(--tw-border-style);
|
| 271 |
-
border-width: 1px;
|
| 272 |
-
}
|
| 273 |
-
.bg-blue-600 {
|
| 274 |
-
background-color: var(--color-blue-600);
|
| 275 |
-
}
|
| 276 |
-
.bg-slate-100 {
|
| 277 |
-
background-color: var(--color-slate-100);
|
| 278 |
-
}
|
| 279 |
-
.bg-white {
|
| 280 |
-
background-color: var(--color-white);
|
| 281 |
-
}
|
| 282 |
-
.p-4 {
|
| 283 |
-
padding: calc(var(--spacing) * 4);
|
| 284 |
-
}
|
| 285 |
-
.p-8 {
|
| 286 |
-
padding: calc(var(--spacing) * 8);
|
| 287 |
-
}
|
| 288 |
-
.p-10 {
|
| 289 |
-
padding: calc(var(--spacing) * 10);
|
| 290 |
-
}
|
| 291 |
-
.px-6 {
|
| 292 |
-
padding-inline: calc(var(--spacing) * 6);
|
| 293 |
-
}
|
| 294 |
-
.py-3 {
|
| 295 |
-
padding-block: calc(var(--spacing) * 3);
|
| 296 |
-
}
|
| 297 |
-
.text-2xl {
|
| 298 |
-
font-size: var(--text-2xl);
|
| 299 |
-
line-height: var(--tw-leading, var(--text-2xl--line-height));
|
| 300 |
-
}
|
| 301 |
-
.text-4xl {
|
| 302 |
-
font-size: var(--text-4xl);
|
| 303 |
-
line-height: var(--tw-leading, var(--text-4xl--line-height));
|
| 304 |
-
}
|
| 305 |
-
.text-lg {
|
| 306 |
-
font-size: var(--text-lg);
|
| 307 |
-
line-height: var(--tw-leading, var(--text-lg--line-height));
|
| 308 |
-
}
|
| 309 |
-
.font-bold {
|
| 310 |
-
--tw-font-weight: var(--font-weight-bold);
|
| 311 |
-
font-weight: var(--font-weight-bold);
|
| 312 |
-
}
|
| 313 |
-
.font-semibold {
|
| 314 |
-
--tw-font-weight: var(--font-weight-semibold);
|
| 315 |
-
font-weight: var(--font-weight-semibold);
|
| 316 |
-
}
|
| 317 |
-
.text-white {
|
| 318 |
-
color: var(--color-white);
|
| 319 |
-
}
|
| 320 |
-
.shadow-lg {
|
| 321 |
-
--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
|
| 322 |
-
box-shadow:
|
| 323 |
-
var(--tw-inset-shadow),
|
| 324 |
-
var(--tw-inset-ring-shadow),
|
| 325 |
-
var(--tw-ring-offset-shadow),
|
| 326 |
-
var(--tw-ring-shadow),
|
| 327 |
-
var(--tw-shadow);
|
| 328 |
-
}
|
| 329 |
-
}
|
| 330 |
-
html,
|
| 331 |
-
body {
|
| 332 |
-
margin: 0;
|
| 333 |
-
padding: 0;
|
| 334 |
-
height: 100%;
|
| 335 |
-
}
|
| 336 |
-
@property --tw-border-style { syntax: "*"; inherits: false; initial-value: solid; }
|
| 337 |
-
@property --tw-font-weight { syntax: "*"; inherits: false; }
|
| 338 |
-
@property --tw-shadow { syntax: "*"; inherits: false; initial-value: 0 0 #0000; }
|
| 339 |
-
@property --tw-shadow-color { syntax: "*"; inherits: false; }
|
| 340 |
-
@property --tw-shadow-alpha { syntax: "<percentage>"; inherits: false; initial-value: 100%; }
|
| 341 |
-
@property --tw-inset-shadow { syntax: "*"; inherits: false; initial-value: 0 0 #0000; }
|
| 342 |
-
@property --tw-inset-shadow-color { syntax: "*"; inherits: false; }
|
| 343 |
-
@property --tw-inset-shadow-alpha { syntax: "<percentage>"; inherits: false; initial-value: 100%; }
|
| 344 |
-
@property --tw-ring-color { syntax: "*"; inherits: false; }
|
| 345 |
-
@property --tw-ring-shadow { syntax: "*"; inherits: false; initial-value: 0 0 #0000; }
|
| 346 |
-
@property --tw-inset-ring-color { syntax: "*"; inherits: false; }
|
| 347 |
-
@property --tw-inset-ring-shadow { syntax: "*"; inherits: false; initial-value: 0 0 #0000; }
|
| 348 |
-
@property --tw-ring-inset { syntax: "*"; inherits: false; }
|
| 349 |
-
@property --tw-ring-offset-width { syntax: "<length>"; inherits: false; initial-value: 0px; }
|
| 350 |
-
@property --tw-ring-offset-color { syntax: "*"; inherits: false; initial-value: #fff; }
|
| 351 |
-
@property --tw-ring-offset-shadow { syntax: "*"; inherits: false; initial-value: 0 0 #0000; }
|
| 352 |
-
@layer properties {
|
| 353 |
-
@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
|
| 354 |
-
*,
|
| 355 |
-
::before,
|
| 356 |
-
::after,
|
| 357 |
-
::backdrop {
|
| 358 |
-
--tw-border-style: solid;
|
| 359 |
-
--tw-font-weight: initial;
|
| 360 |
-
--tw-shadow: 0 0 #0000;
|
| 361 |
-
--tw-shadow-color: initial;
|
| 362 |
-
--tw-shadow-alpha: 100%;
|
| 363 |
-
--tw-inset-shadow: 0 0 #0000;
|
| 364 |
-
--tw-inset-shadow-color: initial;
|
| 365 |
-
--tw-inset-shadow-alpha: 100%;
|
| 366 |
-
--tw-ring-color: initial;
|
| 367 |
-
--tw-ring-shadow: 0 0 #0000;
|
| 368 |
-
--tw-inset-ring-color: initial;
|
| 369 |
-
--tw-inset-ring-shadow: 0 0 #0000;
|
| 370 |
-
--tw-ring-inset: initial;
|
| 371 |
-
--tw-ring-offset-width: 0px;
|
| 372 |
-
--tw-ring-offset-color: #fff;
|
| 373 |
-
--tw-ring-offset-shadow: 0 0 #0000;
|
| 374 |
-
}
|
| 375 |
-
}
|
| 376 |
-
}
|
| 377 |
-
|
| 378 |
-
/* angular:styles/global:styles */
|
| 379 |
-
/*# sourceMappingURL=styles.css.map */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
frontend/dist/frontend/browser/styles.css.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"version": 3,
|
| 3 |
-
"sources": ["src/%3Cno source%3E", "node_modules/tailwindcss/index.css", "src/styles.css"],
|
| 4 |
-
"sourcesContent": [null, "@layer theme, base, components, utilities;\n\n@layer theme {\n @theme default {\n --font-sans:\n ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\",\n \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-serif: ui-serif, Georgia, Cambria, \"Times New Roman\", Times, serif;\n --font-mono:\n ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n\n --color-red-50: oklch(97.1% 0.013 17.38);\n --color-red-100: oklch(93.6% 0.032 17.717);\n --color-red-200: oklch(88.5% 0.062 18.334);\n --color-red-300: oklch(80.8% 0.114 19.571);\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-red-600: oklch(57.7% 0.245 27.325);\n --color-red-700: oklch(50.5% 0.213 27.518);\n --color-red-800: oklch(44.4% 0.177 26.899);\n --color-red-900: oklch(39.6% 0.141 25.723);\n --color-red-950: oklch(25.8% 0.092 26.042);\n\n --color-orange-50: oklch(98% 0.016 73.684);\n --color-orange-100: oklch(95.4% 0.038 75.164);\n --color-orange-200: oklch(90.1% 0.076 70.697);\n --color-orange-300: oklch(83.7% 0.128 66.29);\n --color-orange-400: oklch(75% 0.183 55.934);\n --color-orange-500: oklch(70.5% 0.213 47.604);\n --color-orange-600: oklch(64.6% 0.222 41.116);\n --color-orange-700: oklch(55.3% 0.195 38.402);\n --color-orange-800: oklch(47% 0.157 37.304);\n --color-orange-900: oklch(40.8% 0.123 38.172);\n --color-orange-950: oklch(26.6% 0.079 36.259);\n\n --color-amber-50: oklch(98.7% 0.022 95.277);\n --color-amber-100: oklch(96.2% 0.059 95.617);\n --color-amber-200: oklch(92.4% 0.12 95.746);\n --color-amber-300: oklch(87.9% 0.169 91.605);\n --color-amber-400: oklch(82.8% 0.189 84.429);\n --color-amber-500: oklch(76.9% 0.188 70.08);\n --color-amber-600: oklch(66.6% 0.179 58.318);\n --color-amber-700: oklch(55.5% 0.163 48.998);\n --color-amber-800: oklch(47.3% 0.137 46.201);\n --color-amber-900: oklch(41.4% 0.112 45.904);\n --color-amber-950: oklch(27.9% 0.077 45.635);\n\n --color-yellow-50: oklch(98.7% 0.026 102.212);\n --color-yellow-100: oklch(97.3% 0.071 103.193);\n --color-yellow-200: oklch(94.5% 0.129 101.54);\n --color-yellow-300: oklch(90.5% 0.182 98.111);\n --color-yellow-400: oklch(85.2% 0.199 91.936);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\n --color-yellow-700: oklch(55.4% 0.135 66.442);\n --color-yellow-800: oklch(47.6% 0.114 61.907);\n --color-yellow-900: oklch(42.1% 0.095 57.708);\n --color-yellow-950: oklch(28.6% 0.066 53.813);\n\n --color-lime-50: oklch(98.6% 0.031 120.757);\n --color-lime-100: oklch(96.7% 0.067 122.328);\n --color-lime-200: oklch(93.8% 0.127 124.321);\n --color-lime-300: oklch(89.7% 0.196 126.665);\n --color-lime-400: oklch(84.1% 0.238 128.85);\n --color-lime-500: oklch(76.8% 0.233 130.85);\n --color-lime-600: oklch(64.8% 0.2 131.684);\n --color-lime-700: oklch(53.2% 0.157 131.589);\n --color-lime-800: oklch(45.3% 0.124 130.933);\n --color-lime-900: oklch(40.5% 0.101 131.063);\n --color-lime-950: oklch(27.4% 0.072 132.109);\n\n --color-green-50: oklch(98.2% 0.018 155.826);\n --color-green-100: oklch(96.2% 0.044 156.743);\n --color-green-200: oklch(92.5% 0.084 155.995);\n --color-green-300: oklch(87.1% 0.15 154.449);\n --color-green-400: oklch(79.2% 0.209 151.711);\n --color-green-500: oklch(72.3% 0.219 149.579);\n --color-green-600: oklch(62.7% 0.194 149.214);\n --color-green-700: oklch(52.7% 0.154 150.069);\n --color-green-800: oklch(44.8% 0.119 151.328);\n --color-green-900: oklch(39.3% 0.095 152.535);\n --color-green-950: oklch(26.6% 0.065 152.934);\n\n --color-emerald-50: oklch(97.9% 0.021 166.113);\n --color-emerald-100: oklch(95% 0.052 163.051);\n --color-emerald-200: oklch(90.5% 0.093 164.15);\n --color-emerald-300: oklch(84.5% 0.143 164.978);\n --color-emerald-400: oklch(76.5% 0.177 163.223);\n --color-emerald-500: oklch(69.6% 0.17 162.48);\n --color-emerald-600: oklch(59.6% 0.145 163.225);\n --color-emerald-700: oklch(50.8% 0.118 165.612);\n --color-emerald-800: oklch(43.2% 0.095 166.913);\n --color-emerald-900: oklch(37.8% 0.077 168.94);\n --color-emerald-950: oklch(26.2% 0.051 172.552);\n\n --color-teal-50: oklch(98.4% 0.014 180.72);\n --color-teal-100: oklch(95.3% 0.051 180.801);\n --color-teal-200: oklch(91% 0.096 180.426);\n --color-teal-300: oklch(85.5% 0.138 181.071);\n --color-teal-400: oklch(77.7% 0.152 181.912);\n --color-teal-500: oklch(70.4% 0.14 182.503);\n --color-teal-600: oklch(60% 0.118 184.704);\n --color-teal-700: oklch(51.1% 0.096 186.391);\n --color-teal-800: oklch(43.7% 0.078 188.216);\n --color-teal-900: oklch(38.6% 0.063 188.416);\n --color-teal-950: oklch(27.7% 0.046 192.524);\n\n --color-cyan-50: oklch(98.4% 0.019 200.873);\n --color-cyan-100: oklch(95.6% 0.045 203.388);\n --color-cyan-200: oklch(91.7% 0.08 205.041);\n --color-cyan-300: oklch(86.5% 0.127 207.078);\n --color-cyan-400: oklch(78.9% 0.154 211.53);\n --color-cyan-500: oklch(71.5% 0.143 215.221);\n --color-cyan-600: oklch(60.9% 0.126 221.723);\n --color-cyan-700: oklch(52% 0.105 223.128);\n --color-cyan-800: oklch(45% 0.085 224.283);\n --color-cyan-900: oklch(39.8% 0.07 227.392);\n --color-cyan-950: oklch(30.2% 0.056 229.695);\n\n --color-sky-50: oklch(97.7% 0.013 236.62);\n --color-sky-100: oklch(95.1% 0.026 236.824);\n --color-sky-200: oklch(90.1% 0.058 230.902);\n --color-sky-300: oklch(82.8% 0.111 230.318);\n --color-sky-400: oklch(74.6% 0.16 232.661);\n --color-sky-500: oklch(68.5% 0.169 237.323);\n --color-sky-600: oklch(58.8% 0.158 241.966);\n --color-sky-700: oklch(50% 0.134 242.749);\n --color-sky-800: oklch(44.3% 0.11 240.79);\n --color-sky-900: oklch(39.1% 0.09 240.876);\n --color-sky-950: oklch(29.3% 0.066 243.157);\n\n --color-blue-50: oklch(97% 0.014 254.604);\n --color-blue-100: oklch(93.2% 0.032 255.585);\n --color-blue-200: oklch(88.2% 0.059 254.128);\n --color-blue-300: oklch(80.9% 0.105 251.813);\n --color-blue-400: oklch(70.7% 0.165 254.624);\n --color-blue-500: oklch(62.3% 0.214 259.815);\n --color-blue-600: oklch(54.6% 0.245 262.881);\n --color-blue-700: oklch(48.8% 0.243 264.376);\n --color-blue-800: oklch(42.4% 0.199 265.638);\n --color-blue-900: oklch(37.9% 0.146 265.522);\n --color-blue-950: oklch(28.2% 0.091 267.935);\n\n --color-indigo-50: oklch(96.2% 0.018 272.314);\n --color-indigo-100: oklch(93% 0.034 272.788);\n --color-indigo-200: oklch(87% 0.065 274.039);\n --color-indigo-300: oklch(78.5% 0.115 274.713);\n --color-indigo-400: oklch(67.3% 0.182 276.935);\n --color-indigo-500: oklch(58.5% 0.233 277.117);\n --color-indigo-600: oklch(51.1% 0.262 276.966);\n --color-indigo-700: oklch(45.7% 0.24 277.023);\n --color-indigo-800: oklch(39.8% 0.195 277.366);\n --color-indigo-900: oklch(35.9% 0.144 278.697);\n --color-indigo-950: oklch(25.7% 0.09 281.288);\n\n --color-violet-50: oklch(96.9% 0.016 293.756);\n --color-violet-100: oklch(94.3% 0.029 294.588);\n --color-violet-200: oklch(89.4% 0.057 293.283);\n --color-violet-300: oklch(81.1% 0.111 293.571);\n --color-violet-400: oklch(70.2% 0.183 293.541);\n --color-violet-500: oklch(60.6% 0.25 292.717);\n --color-violet-600: oklch(54.1% 0.281 293.009);\n --color-violet-700: oklch(49.1% 0.27 292.581);\n --color-violet-800: oklch(43.2% 0.232 292.759);\n --color-violet-900: oklch(38% 0.189 293.745);\n --color-violet-950: oklch(28.3% 0.141 291.089);\n\n --color-purple-50: oklch(97.7% 0.014 308.299);\n --color-purple-100: oklch(94.6% 0.033 307.174);\n --color-purple-200: oklch(90.2% 0.063 306.703);\n --color-purple-300: oklch(82.7% 0.119 306.383);\n --color-purple-400: oklch(71.4% 0.203 305.504);\n --color-purple-500: oklch(62.7% 0.265 303.9);\n --color-purple-600: oklch(55.8% 0.288 302.321);\n --color-purple-700: oklch(49.6% 0.265 301.924);\n --color-purple-800: oklch(43.8% 0.218 303.724);\n --color-purple-900: oklch(38.1% 0.176 304.987);\n --color-purple-950: oklch(29.1% 0.149 302.717);\n\n --color-fuchsia-50: oklch(97.7% 0.017 320.058);\n --color-fuchsia-100: oklch(95.2% 0.037 318.852);\n --color-fuchsia-200: oklch(90.3% 0.076 319.62);\n --color-fuchsia-300: oklch(83.3% 0.145 321.434);\n --color-fuchsia-400: oklch(74% 0.238 322.16);\n --color-fuchsia-500: oklch(66.7% 0.295 322.15);\n --color-fuchsia-600: oklch(59.1% 0.293 322.896);\n --color-fuchsia-700: oklch(51.8% 0.253 323.949);\n --color-fuchsia-800: oklch(45.2% 0.211 324.591);\n --color-fuchsia-900: oklch(40.1% 0.17 325.612);\n --color-fuchsia-950: oklch(29.3% 0.136 325.661);\n\n --color-pink-50: oklch(97.1% 0.014 343.198);\n --color-pink-100: oklch(94.8% 0.028 342.258);\n --color-pink-200: oklch(89.9% 0.061 343.231);\n --color-pink-300: oklch(82.3% 0.12 346.018);\n --color-pink-400: oklch(71.8% 0.202 349.761);\n --color-pink-500: oklch(65.6% 0.241 354.308);\n --color-pink-600: oklch(59.2% 0.249 0.584);\n --color-pink-700: oklch(52.5% 0.223 3.958);\n --color-pink-800: oklch(45.9% 0.187 3.815);\n --color-pink-900: oklch(40.8% 0.153 2.432);\n --color-pink-950: oklch(28.4% 0.109 3.907);\n\n --color-rose-50: oklch(96.9% 0.015 12.422);\n --color-rose-100: oklch(94.1% 0.03 12.58);\n --color-rose-200: oklch(89.2% 0.058 10.001);\n --color-rose-300: oklch(81% 0.117 11.638);\n --color-rose-400: oklch(71.2% 0.194 13.428);\n --color-rose-500: oklch(64.5% 0.246 16.439);\n --color-rose-600: oklch(58.6% 0.253 17.585);\n --color-rose-700: oklch(51.4% 0.222 16.935);\n --color-rose-800: oklch(45.5% 0.188 13.697);\n --color-rose-900: oklch(41% 0.159 10.272);\n --color-rose-950: oklch(27.1% 0.105 12.094);\n\n --color-slate-50: oklch(98.4% 0.003 247.858);\n --color-slate-100: oklch(96.8% 0.007 247.896);\n --color-slate-200: oklch(92.9% 0.013 255.508);\n --color-slate-300: oklch(86.9% 0.022 252.894);\n --color-slate-400: oklch(70.4% 0.04 256.788);\n --color-slate-500: oklch(55.4% 0.046 257.417);\n --color-slate-600: oklch(44.6% 0.043 257.281);\n --color-slate-700: oklch(37.2% 0.044 257.287);\n --color-slate-800: oklch(27.9% 0.041 260.031);\n --color-slate-900: oklch(20.8% 0.042 265.755);\n --color-slate-950: oklch(12.9% 0.042 264.695);\n\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: oklch(96.7% 0.003 264.542);\n --color-gray-200: oklch(92.8% 0.006 264.531);\n --color-gray-300: oklch(87.2% 0.01 258.338);\n --color-gray-400: oklch(70.7% 0.022 261.325);\n --color-gray-500: oklch(55.1% 0.027 264.364);\n --color-gray-600: oklch(44.6% 0.03 256.802);\n --color-gray-700: oklch(37.3% 0.034 259.733);\n --color-gray-800: oklch(27.8% 0.033 256.848);\n --color-gray-900: oklch(21% 0.034 264.665);\n --color-gray-950: oklch(13% 0.028 261.692);\n\n --color-zinc-50: oklch(98.5% 0 0);\n --color-zinc-100: oklch(96.7% 0.001 286.375);\n --color-zinc-200: oklch(92% 0.004 286.32);\n --color-zinc-300: oklch(87.1% 0.006 286.286);\n --color-zinc-400: oklch(70.5% 0.015 286.067);\n --color-zinc-500: oklch(55.2% 0.016 285.938);\n --color-zinc-600: oklch(44.2% 0.017 285.786);\n --color-zinc-700: oklch(37% 0.013 285.805);\n --color-zinc-800: oklch(27.4% 0.006 286.033);\n --color-zinc-900: oklch(21% 0.006 285.885);\n --color-zinc-950: oklch(14.1% 0.005 285.823);\n\n --color-neutral-50: oklch(98.5% 0 0);\n --color-neutral-100: oklch(97% 0 0);\n --color-neutral-200: oklch(92.2% 0 0);\n --color-neutral-300: oklch(87% 0 0);\n --color-neutral-400: oklch(70.8% 0 0);\n --color-neutral-500: oklch(55.6% 0 0);\n --color-neutral-600: oklch(43.9% 0 0);\n --color-neutral-700: oklch(37.1% 0 0);\n --color-neutral-800: oklch(26.9% 0 0);\n --color-neutral-900: oklch(20.5% 0 0);\n --color-neutral-950: oklch(14.5% 0 0);\n\n --color-stone-50: oklch(98.5% 0.001 106.423);\n --color-stone-100: oklch(97% 0.001 106.424);\n --color-stone-200: oklch(92.3% 0.003 48.717);\n --color-stone-300: oklch(86.9% 0.005 56.366);\n --color-stone-400: oklch(70.9% 0.01 56.259);\n --color-stone-500: oklch(55.3% 0.013 58.071);\n --color-stone-600: oklch(44.4% 0.011 73.639);\n --color-stone-700: oklch(37.4% 0.01 67.558);\n --color-stone-800: oklch(26.8% 0.007 34.298);\n --color-stone-900: oklch(21.6% 0.006 56.043);\n --color-stone-950: oklch(14.7% 0.004 49.25);\n\n --color-mauve-50: oklch(98.5% 0 0);\n --color-mauve-100: oklch(96% 0.003 325.6);\n --color-mauve-200: oklch(92.2% 0.005 325.62);\n --color-mauve-300: oklch(86.5% 0.012 325.68);\n --color-mauve-400: oklch(71.1% 0.019 323.02);\n --color-mauve-500: oklch(54.2% 0.034 322.5);\n --color-mauve-600: oklch(43.5% 0.029 321.78);\n --color-mauve-700: oklch(36.4% 0.029 323.89);\n --color-mauve-800: oklch(26.3% 0.024 320.12);\n --color-mauve-900: oklch(21.2% 0.019 322.12);\n --color-mauve-950: oklch(14.5% 0.008 326);\n\n --color-olive-50: oklch(98.8% 0.003 106.5);\n --color-olive-100: oklch(96.6% 0.005 106.5);\n --color-olive-200: oklch(93% 0.007 106.5);\n --color-olive-300: oklch(88% 0.011 106.6);\n --color-olive-400: oklch(73.7% 0.021 106.9);\n --color-olive-500: oklch(58% 0.031 107.3);\n --color-olive-600: oklch(46.6% 0.025 107.3);\n --color-olive-700: oklch(39.4% 0.023 107.4);\n --color-olive-800: oklch(28.6% 0.016 107.4);\n --color-olive-900: oklch(22.8% 0.013 107.4);\n --color-olive-950: oklch(15.3% 0.006 107.1);\n\n --color-mist-50: oklch(98.7% 0.002 197.1);\n --color-mist-100: oklch(96.3% 0.002 197.1);\n --color-mist-200: oklch(92.5% 0.005 214.3);\n --color-mist-300: oklch(87.2% 0.007 219.6);\n --color-mist-400: oklch(72.3% 0.014 214.4);\n --color-mist-500: oklch(56% 0.021 213.5);\n --color-mist-600: oklch(45% 0.017 213.2);\n --color-mist-700: oklch(37.8% 0.015 216);\n --color-mist-800: oklch(27.5% 0.011 216.9);\n --color-mist-900: oklch(21.8% 0.008 223.9);\n --color-mist-950: oklch(14.8% 0.004 228.8);\n\n --color-taupe-50: oklch(98.6% 0.002 67.8);\n --color-taupe-100: oklch(96% 0.002 17.2);\n --color-taupe-200: oklch(92.2% 0.005 34.3);\n --color-taupe-300: oklch(86.8% 0.007 39.5);\n --color-taupe-400: oklch(71.4% 0.014 41.2);\n --color-taupe-500: oklch(54.7% 0.021 43.1);\n --color-taupe-600: oklch(43.8% 0.017 39.3);\n --color-taupe-700: oklch(36.7% 0.016 35.7);\n --color-taupe-800: oklch(26.8% 0.011 36.5);\n --color-taupe-900: oklch(21.4% 0.009 43.1);\n --color-taupe-950: oklch(14.7% 0.004 49.3);\n\n --color-black: #000;\n --color-white: #fff;\n\n --spacing: 0.25rem;\n\n --breakpoint-sm: 40rem;\n --breakpoint-md: 48rem;\n --breakpoint-lg: 64rem;\n --breakpoint-xl: 80rem;\n --breakpoint-2xl: 96rem;\n\n --container-3xs: 16rem;\n --container-2xs: 18rem;\n --container-xs: 20rem;\n --container-sm: 24rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-xl: 36rem;\n --container-2xl: 42rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n --container-5xl: 64rem;\n --container-6xl: 72rem;\n --container-7xl: 80rem;\n\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 2.25rem;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 3rem;\n --text-5xl--line-height: 1;\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --text-7xl: 4.5rem;\n --text-7xl--line-height: 1;\n --text-8xl: 6rem;\n --text-8xl--line-height: 1;\n --text-9xl: 8rem;\n --text-9xl--line-height: 1;\n\n --font-weight-thin: 100;\n --font-weight-extralight: 200;\n --font-weight-light: 300;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-extrabold: 800;\n --font-weight-black: 900;\n\n --tracking-tighter: -0.05em;\n --tracking-tight: -0.025em;\n --tracking-normal: 0em;\n --tracking-wide: 0.025em;\n --tracking-wider: 0.05em;\n --tracking-widest: 0.1em;\n\n --leading-tight: 1.25;\n --leading-snug: 1.375;\n --leading-normal: 1.5;\n --leading-relaxed: 1.625;\n --leading-loose: 2;\n\n --radius-xs: 0.125rem;\n --radius-sm: 0.25rem;\n --radius-md: 0.375rem;\n --radius-lg: 0.5rem;\n --radius-xl: 0.75rem;\n --radius-2xl: 1rem;\n --radius-3xl: 1.5rem;\n --radius-4xl: 2rem;\n\n --shadow-2xs: 0 1px rgb(0 0 0 / 0.05);\n --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-md:\n 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --shadow-lg:\n 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --shadow-xl:\n 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05);\n --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05);\n --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05);\n\n --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05);\n --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15);\n --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12);\n --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15);\n --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1);\n --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);\n\n --text-shadow-2xs: 0px 1px 0px rgb(0 0 0 / 0.15);\n --text-shadow-xs: 0px 1px 1px rgb(0 0 0 / 0.2);\n --text-shadow-sm:\n 0px 1px 0px rgb(0 0 0 / 0.075), 0px 1px 1px rgb(0 0 0 / 0.075),\n 0px 2px 2px rgb(0 0 0 / 0.075);\n --text-shadow-md:\n 0px 1px 1px rgb(0 0 0 / 0.1), 0px 1px 2px rgb(0 0 0 / 0.1),\n 0px 2px 4px rgb(0 0 0 / 0.1);\n --text-shadow-lg:\n 0px 1px 2px rgb(0 0 0 / 0.1), 0px 3px 2px rgb(0 0 0 / 0.1),\n 0px 4px 8px rgb(0 0 0 / 0.1);\n\n --ease-in: cubic-bezier(0.4, 0, 1, 1);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);\n\n --animate-spin: spin 1s linear infinite;\n --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --animate-bounce: bounce 1s infinite;\n\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n @keyframes ping {\n 75%,\n 100% {\n transform: scale(2);\n opacity: 0;\n }\n }\n\n @keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n }\n\n @keyframes bounce {\n 0%,\n 100% {\n transform: translateY(-25%);\n animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n }\n\n 50% {\n transform: none;\n animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n }\n }\n\n --blur-xs: 4px;\n --blur-sm: 8px;\n --blur-md: 12px;\n --blur-lg: 16px;\n --blur-xl: 24px;\n --blur-2xl: 40px;\n --blur-3xl: 64px;\n\n --perspective-dramatic: 100px;\n --perspective-near: 300px;\n --perspective-normal: 500px;\n --perspective-midrange: 800px;\n --perspective-distant: 1200px;\n\n --aspect-video: 16 / 9;\n\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: --theme(--font-sans, initial);\n --default-font-feature-settings: --theme(\n --font-sans--font-feature-settings,\n initial\n );\n --default-font-variation-settings: --theme(\n --font-sans--font-variation-settings,\n initial\n );\n --default-mono-font-family: --theme(--font-mono, initial);\n --default-mono-font-feature-settings: --theme(\n --font-mono--font-feature-settings,\n initial\n );\n --default-mono-font-variation-settings: --theme(\n --font-mono--font-variation-settings,\n initial\n );\n }\n\n /* Deprecated */\n @theme default inline reference {\n --blur: 8px;\n --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);\n --drop-shadow: 0 1px 2px rgb(0 0 0 / 0.1), 0 1px 1px rgb(0 0 0 / 0.06);\n --radius: 0.25rem;\n --max-width-prose: 65ch;\n }\n}\n\n@layer base {\n /*\n 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n 2. Remove default margins and padding\n 3. Reset all borders.\n*/\n\n *,\n ::after,\n ::before,\n ::backdrop,\n ::file-selector-button {\n box-sizing: border-box; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 2 */\n border: 0 solid; /* 3 */\n }\n\n /*\n 1. Use a consistent sensible line-height in all browsers.\n 2. Prevent adjustments of font size after orientation changes in iOS.\n 3. Use a more readable tab size.\n 4. Use the user's configured `sans` font-family by default.\n 5. Use the user's configured `sans` font-feature-settings by default.\n 6. Use the user's configured `sans` font-variation-settings by default.\n 7. Disable tap highlights on iOS.\n*/\n\n html,\n :host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n tab-size: 4; /* 3 */\n font-family: --theme(\n --default-font-family,\n ui-sans-serif,\n system-ui,\n sans-serif,\n \"Apple Color Emoji\",\n \"Segoe UI Emoji\",\n \"Segoe UI Symbol\",\n \"Noto Color Emoji\"\n ); /* 4 */\n font-feature-settings: --theme(\n --default-font-feature-settings,\n normal\n ); /* 5 */\n font-variation-settings: --theme(\n --default-font-variation-settings,\n normal\n ); /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n }\n\n /*\n 1. Add the correct height in Firefox.\n 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n 3. Reset the default border style to a 1px solid border.\n*/\n\n hr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n }\n\n /*\n Add the correct text decoration in Chrome, Edge, and Safari.\n*/\n\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n\n /*\n Remove the default font size and weight for headings.\n*/\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n\n /*\n Reset links to optimize for opt-in styling instead of opt-out.\n*/\n\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n\n /*\n Add the correct font weight in Edge and Safari.\n*/\n\n b,\n strong {\n font-weight: bolder;\n }\n\n /*\n 1. Use the user's configured `mono` font-family by default.\n 2. Use the user's configured `mono` font-feature-settings by default.\n 3. Use the user's configured `mono` font-variation-settings by default.\n 4. Correct the odd `em` font sizing in all browsers.\n*/\n\n code,\n kbd,\n samp,\n pre {\n font-family: --theme(\n --default-mono-font-family,\n ui-monospace,\n SFMono-Regular,\n Menlo,\n Monaco,\n Consolas,\n \"Liberation Mono\",\n \"Courier New\",\n monospace\n ); /* 1 */\n font-feature-settings: --theme(\n --default-mono-font-feature-settings,\n normal\n ); /* 2 */\n font-variation-settings: --theme(\n --default-mono-font-variation-settings,\n normal\n ); /* 3 */\n font-size: 1em; /* 4 */\n }\n\n /*\n Add the correct font size in all browsers.\n*/\n\n small {\n font-size: 80%;\n }\n\n /*\n Prevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\n sub,\n sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n\n sub {\n bottom: -0.25em;\n }\n\n sup {\n top: -0.5em;\n }\n\n /*\n 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n 3. Remove gaps between table borders by default.\n*/\n\n table {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n }\n\n /*\n Use the modern Firefox focus style for all focusable elements.\n*/\n\n :-moz-focusring {\n outline: auto;\n }\n\n /*\n Add the correct vertical alignment in Chrome and Firefox.\n*/\n\n progress {\n vertical-align: baseline;\n }\n\n /*\n Add the correct display in Chrome and Safari.\n*/\n\n summary {\n display: list-item;\n }\n\n /*\n Make lists unstyled by default.\n*/\n\n ol,\n ul,\n menu {\n list-style: none;\n }\n\n /*\n 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\n img,\n svg,\n video,\n canvas,\n audio,\n iframe,\n embed,\n object {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n }\n\n /*\n Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\n img,\n video {\n max-width: 100%;\n height: auto;\n }\n\n /*\n 1. Inherit font styles in all browsers.\n 2. Remove border radius in all browsers.\n 3. Remove background color in all browsers.\n 4. Ensure consistent opacity for disabled states in all browsers.\n*/\n\n button,\n input,\n select,\n optgroup,\n textarea,\n ::file-selector-button {\n font: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n border-radius: 0; /* 2 */\n background-color: transparent; /* 3 */\n opacity: 1; /* 4 */\n }\n\n /*\n Restore default font weight.\n*/\n\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n\n /*\n Restore indentation.\n*/\n\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n\n /*\n Restore space after button.\n*/\n\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n\n /*\n Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n*/\n\n ::placeholder {\n opacity: 1;\n }\n\n /*\n Set the default placeholder color to a semi-transparent version of the current text color in browsers that do not\n crash when using `color-mix(…)` with `currentcolor`. (https://github.com/tailwindlabs/tailwindcss/issues/17194)\n*/\n\n @supports (not (-webkit-appearance: -apple-pay-button)) /* Not Safari */ or\n (contain-intrinsic-size: 1px) /* Safari 17+ */ {\n ::placeholder {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n\n /*\n Prevent resizing textareas horizontally by default.\n*/\n\n textarea {\n resize: vertical;\n }\n\n /*\n Remove the inner padding in Chrome and Safari on macOS.\n*/\n\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n\n /*\n 1. Ensure date/time inputs have the same height when empty in iOS Safari.\n 2. Ensure text alignment can be changed on date/time inputs in iOS Safari.\n*/\n\n ::-webkit-date-and-time-value {\n min-height: 1lh; /* 1 */\n text-align: inherit; /* 2 */\n }\n\n /*\n Prevent height from changing on date/time inputs in macOS Safari when the input is set to `display: block`.\n*/\n\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n\n /*\n Remove excess padding from pseudo-elements in date/time inputs to ensure consistent height across browsers.\n*/\n\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n\n ::-webkit-datetime-edit,\n ::-webkit-datetime-edit-year-field,\n ::-webkit-datetime-edit-month-field,\n ::-webkit-datetime-edit-day-field,\n ::-webkit-datetime-edit-hour-field,\n ::-webkit-datetime-edit-minute-field,\n ::-webkit-datetime-edit-second-field,\n ::-webkit-datetime-edit-millisecond-field,\n ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n\n /*\n Center dropdown marker shown on inputs with paired `<datalist>`s in Chrome. (https://github.com/tailwindlabs/tailwindcss/issues/18499)\n*/\n\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n\n /*\n Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n :-moz-ui-invalid {\n box-shadow: none;\n }\n\n /*\n Correct the inability to style the border radius in iOS Safari.\n*/\n\n button,\n input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]),\n ::file-selector-button {\n appearance: button;\n }\n\n /*\n Correct the cursor style of increment and decrement buttons in Safari.\n*/\n\n ::-webkit-inner-spin-button,\n ::-webkit-outer-spin-button {\n height: auto;\n }\n\n /*\n Make elements with the HTML hidden attribute stay hidden by default.\n*/\n\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n\n@layer utilities {\n @tailwind utilities;\n}\n", "@import 'tailwindcss';\n\nhtml, body {\n margin: 0;\n padding: 0;\n height: 100%;\n}\n"],
|
| 5 |
-
"mappings": "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",
|
| 6 |
-
"names": []
|
| 7 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
requirements.txt
CHANGED
|
@@ -4,11 +4,3 @@ aiofiles==24.1.0
|
|
| 4 |
joblib==1.5.1
|
| 5 |
scikit-learn==1.7.0
|
| 6 |
numpy==2.3.1
|
| 7 |
-
lightgbm==4.6.0
|
| 8 |
-
xgboost==3.0.2
|
| 9 |
-
pandas==2.3.0
|
| 10 |
-
openai>=1.30.0
|
| 11 |
-
python-dotenv>=1.0.0
|
| 12 |
-
psycopg2-binary>=2.9.9
|
| 13 |
-
pgvector>=0.3.0
|
| 14 |
-
scipy>=1.13.0
|
|
|
|
| 4 |
joblib==1.5.1
|
| 5 |
scikit-learn==1.7.0
|
| 6 |
numpy==2.3.1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
start.sh
DELETED
|
@@ -1,46 +0,0 @@
|
|
| 1 |
-
#!/bin/bash
|
| 2 |
-
set -e
|
| 3 |
-
|
| 4 |
-
service postgresql start
|
| 5 |
-
|
| 6 |
-
for i in $(seq 1 20); do
|
| 7 |
-
if pg_isready -U postgres -q; then
|
| 8 |
-
echo "PostgreSQL ready."
|
| 9 |
-
break
|
| 10 |
-
fi
|
| 11 |
-
echo "Waiting for PostgreSQL... ($i/20)"
|
| 12 |
-
sleep 1
|
| 13 |
-
done
|
| 14 |
-
|
| 15 |
-
# Write SQL to files — single-quoted heredoc prevents $$ shell expansion
|
| 16 |
-
cat > /tmp/init_user.sql << 'EOF'
|
| 17 |
-
DO $$ BEGIN
|
| 18 |
-
IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname='mlflow') THEN
|
| 19 |
-
CREATE USER mlflow WITH PASSWORD 'mlflow123';
|
| 20 |
-
END IF;
|
| 21 |
-
END $$;
|
| 22 |
-
EOF
|
| 23 |
-
|
| 24 |
-
cat > /tmp/init_db.sql << 'EOF'
|
| 25 |
-
SELECT 'CREATE DATABASE mlflow_db OWNER mlflow'
|
| 26 |
-
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname='mlflow_db')\gexec
|
| 27 |
-
EOF
|
| 28 |
-
|
| 29 |
-
cat > /tmp/init_schema.sql << 'EOF'
|
| 30 |
-
CREATE EXTENSION IF NOT EXISTS vector;
|
| 31 |
-
CREATE TABLE IF NOT EXISTS rag_claims (
|
| 32 |
-
id SERIAL PRIMARY KEY,
|
| 33 |
-
statement TEXT,
|
| 34 |
-
label TEXT,
|
| 35 |
-
reason TEXT,
|
| 36 |
-
embedding vector(512)
|
| 37 |
-
);
|
| 38 |
-
EOF
|
| 39 |
-
|
| 40 |
-
su postgres -c "psql -f /tmp/init_user.sql"
|
| 41 |
-
su postgres -c "psql -f /tmp/init_db.sql"
|
| 42 |
-
su postgres -c "psql -d mlflow_db -f /tmp/init_schema.sql"
|
| 43 |
-
|
| 44 |
-
export DATABASE_URL="postgresql://mlflow:mlflow123@localhost:5432/mlflow_db"
|
| 45 |
-
|
| 46 |
-
exec uvicorn api.main:app --host 0.0.0.0 --port 7860
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|