diff --git a/server.py b/server.py
index 2e68cdf..8660931 100644
--- a/server.py
+++ b/server.py
@@ -53,6 +53,7 @@ import loosefolder as loosefolder_mod
from scan_worker import _extract_meta_for_file, _relpath, _scan_one
import concurrent.futures
+import contextlib
import contextvars
import inspect
import ipaddress
@@ -288,10 +289,16 @@ def _env_flag(name: str) -> bool:
# raw offsets so distinct customs stay distinct, while named tunings keep
# grouping by name (stable across the offsets-column migration). Used by both
# the tuning-names listing and the filter WHERE so the contract matches.
-_TUNING_GROUP_KEY_SQL = (
- "CASE WHEN tuning_name = 'Custom Tuning' AND COALESCE(tuning_offsets, '') != '' "
- "THEN tuning_offsets ELSE tuning_name END"
-)
+def _tuning_group_key_sql(alias: str) -> str:
+ """The tuning grouping key (name for named tunings, raw offsets for
+ customs) against an explicit table alias — the grouped filter law (§7.1)
+ evaluates chart-intrinsic predicates inside a member subquery, where bare
+ column names would resolve against the wrong scope."""
+ return (f"CASE WHEN {alias}.tuning_name = 'Custom Tuning' AND COALESCE({alias}.tuning_offsets, '') != '' "
+ f"THEN {alias}.tuning_offsets ELSE {alias}.tuning_name END")
+
+
+_TUNING_GROUP_KEY_SQL = _tuning_group_key_sql("songs")
# ── SQLite metadata cache ─────────────────────────────────────────────────────
@@ -614,6 +621,54 @@ class MetadataDB:
updated_at TEXT
)
""")
+ # ── Multi-chart grouping (P5a) ───────────────────────────────────────
+ # A "work" is a song that may be charted by several feedpaks; each chart
+ # stays its own `songs` row (unchanged), but they GROUP under a shared
+ # work_key = normalize(artist+title). Two sparse, never-purged-on-rescan
+ # override tables + one MATERIALIZED read-model so the grid can group
+ # server-side without a query-time GROUP BY (which would kill the keyset
+ # seek / A–Z / virtualization — see query_page).
+ #
+ # chart_group_pref: your chosen "keeper" chart per work (sparse; unset ⇒
+ # auto-pick). Keyed by work_key, NOT filename, so it survives a chart's
+ # rescan; an orphaned preferred (file gone) degrades to auto-pick.
+ self.conn.execute("""
+ CREATE TABLE IF NOT EXISTS chart_group_pref (
+ work_key TEXT PRIMARY KEY,
+ preferred_filename TEXT NOT NULL,
+ updated_at TEXT
+ )
+ """)
+ # chart_group_split: "these aren't the same song" escape hatch — a chart
+ # gets its own unique split_key so it stands alone as a singleton work.
+ # Filename-keyed → purged with the song on delete_song.
+ self.conn.execute("""
+ CREATE TABLE IF NOT EXISTS chart_group_split (
+ filename TEXT PRIMARY KEY,
+ split_key TEXT NOT NULL,
+ updated_at TEXT
+ )
+ """)
+ # work_display: the MATERIALIZED representative-filter read-model, rebuilt
+ # from songs + the two override tables. One row per song:
+ # effective_work_key = split_key if split else work_key
+ # is_group_representative = 1 for the keeper (pref or auto-pick) of a work
+ # group_size = the ⚑ N charts in the work
+ # Grouping-ON is then just `WHERE is_group_representative = 1` (keyset-safe).
+ # A derived cache: filename-keyed, rebuilt on demand (dirty flag) — safe to
+ # drop/rebuild, so it's purged on delete and re-materialized after a scan.
+ self.conn.execute("""
+ CREATE TABLE IF NOT EXISTS work_display (
+ filename TEXT PRIMARY KEY,
+ work_key TEXT NOT NULL,
+ effective_work_key TEXT NOT NULL,
+ is_group_representative INTEGER NOT NULL DEFAULT 1,
+ group_size INTEGER NOT NULL DEFAULT 1
+ )
+ """)
+ self.conn.execute("CREATE INDEX IF NOT EXISTS idx_work_display_rep ON work_display(is_group_representative)")
+ self.conn.execute("CREATE INDEX IF NOT EXISTS idx_work_display_eff ON work_display(effective_work_key)")
+ self.conn.execute("CREATE INDEX IF NOT EXISTS idx_work_display_wk ON work_display(work_key)")
self.conn.execute("""
CREATE TABLE IF NOT EXISTS loops (
id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -813,6 +868,9 @@ class MetadataDB:
self.conn.execute("INSERT OR IGNORE INTO wallet (id) VALUES (1)")
self.conn.commit()
self._lock = threading.Lock()
+ # work_display (P5a) is a derived cache; True forces a (re)build on the
+ # first grouped query and after any songs churn (put / delete / rescan).
+ self._work_display_dirty = True
# One-time repair of pre-fix rows written under URL-encoded filenames
# (idempotent: a no-op once every row is canonical).
self._migrate_decode_stat_filenames()
@@ -2315,6 +2373,8 @@ class MetadataDB:
meta.get("tuning_offsets", "") or ""),
)
self.conn.commit()
+ # A song's identity may have changed → the grouping read-model is stale.
+ self._work_display_dirty = True
def count(self) -> int:
return self.conn.execute("SELECT COUNT(*) FROM songs WHERE title != ''").fetchone()[0]
@@ -2336,6 +2396,7 @@ class MetadataDB:
if stale:
self.conn.executemany("DELETE FROM songs WHERE filename = ?", [(f,) for f in stale])
self.conn.commit()
+ self._work_display_dirty = True # membership changed → regroup
return len(stale)
def _estd_set(self) -> set[str]:
@@ -2392,18 +2453,23 @@ class MetadataDB:
mastery: list[str] | None = None,
tags_has: list[str] | None = None,
user_difficulty_in: list[str] | None = None,
- naming_mode: str = "legacy") -> tuple[str, list]:
+ naming_mode: str = "legacy",
+ include_intrinsic: bool = True) -> tuple[str, list]:
"""Shared WHERE-clause builder for query_page / query_artists /
query_stats. Returns (where_sql, params). Leading 'WHERE' is
included so callers paste it directly. See feedBack#129/#69.
+
+ Clauses are two classes (the §7.1 filter law): work-identity +
+ practice-state predicates live here; CHART-INTRINSIC predicates
+ (format / arrangements / stems / lyrics / tuning) are built by
+ `_build_intrinsic_where` and appended when `include_intrinsic`.
+ Grouped queries pass include_intrinsic=False and re-apply the
+ intrinsic set as a match-if-ANY-member subquery instead.
"""
where = "WHERE title != ''"
params: list = []
if favorites_only:
where += " AND filename IN (SELECT filename FROM favorites)"
- if format_filter:
- where += " AND format = ?"
- params.append(format_filter)
if artist_filter:
# The dropdown/tree list CANONICAL names (query_artists), so a filter
# value is canonical — expand it to every raw variant aliased to it so
@@ -2455,6 +2521,35 @@ class MetadataDB:
if q:
where += " AND (title LIKE ? COLLATE NOCASE OR artist LIKE ? COLLATE NOCASE OR album LIKE ? COLLATE NOCASE)"
params += [f"%{q}%"] * 3
+ if include_intrinsic:
+ ifrag, iparams = self._build_intrinsic_where(
+ "songs", format_filter=format_filter,
+ arrangements_has=arrangements_has, arrangements_lacks=arrangements_lacks,
+ stems_has=stems_has, stems_lacks=stems_lacks,
+ has_lyrics=has_lyrics, tunings=tunings, naming_mode=naming_mode)
+ where += ifrag
+ params += iparams
+ return where, params
+
+ def _build_intrinsic_where(self, alias: str, format_filter: str = "",
+ arrangements_has: list[str] | None = None,
+ arrangements_lacks: list[str] | None = None,
+ stems_has: list[str] | None = None,
+ stems_lacks: list[str] | None = None,
+ has_lyrics: int | None = None,
+ tunings: list[str] | None = None,
+ naming_mode: str = "legacy") -> tuple[str, list]:
+ """CHART-INTRINSIC predicates (format / arrangements / stems / lyrics /
+ tuning) as ' AND …' fragments against an explicit table alias. Flat
+ queries apply them to `songs` directly; grouped queries evaluate them
+ against each work member `m` inside an EXISTS (§7.1 filter law — a
+ work matches when ANY of its charts does, so a song you own in Drop D
+ isn't hidden because your preferred chart is E Standard)."""
+ where = ""
+ params: list = []
+ if format_filter:
+ where += f" AND {alias}.format = ?"
+ params.append(format_filter)
# arrangements_has / arrangements_lacks: OR within axis (any-of).
# Uses JSON1's json_each which yields one row per arrangement, then
# matches the relevant field. The whole subquery is wrapped in EXISTS
@@ -2507,13 +2602,13 @@ class MetadataDB:
f"Bonus {arr_type}%",
] + extra_null_params
where += (
- " AND EXISTS (SELECT 1 FROM json_each(songs.arrangements) WHERE "
+ f" AND EXISTS (SELECT 1 FROM json_each({alias}.arrangements) WHERE "
+ " OR ".join(f"({c})" for c in clauses)
+ ")"
)
else:
placeholders = ",".join(["?"] * len(arr_has))
- where += (" AND EXISTS (SELECT 1 FROM json_each(songs.arrangements) "
+ where += (f" AND EXISTS (SELECT 1 FROM json_each({alias}.arrangements) "
f"WHERE json_extract(value, '$.name') IN ({placeholders}))")
params += arr_has
arr_lacks = [a for a in (arrangements_lacks or []) if a in self._ALLOWED_ARRANGEMENT_NAMES]
@@ -2553,29 +2648,29 @@ class MetadataDB:
f"Bonus {arr_type}%",
] + extra_null_params
where += (
- " AND NOT EXISTS (SELECT 1 FROM json_each(songs.arrangements) WHERE "
+ f" AND NOT EXISTS (SELECT 1 FROM json_each({alias}.arrangements) WHERE "
+ " OR ".join(f"({c})" for c in clauses)
+ ")"
)
else:
placeholders = ",".join(["?"] * len(arr_lacks))
- where += (" AND NOT EXISTS (SELECT 1 FROM json_each(songs.arrangements) "
+ where += (f" AND NOT EXISTS (SELECT 1 FROM json_each({alias}.arrangements) "
f"WHERE json_extract(value, '$.name') IN ({placeholders}))")
params += arr_lacks
stems_h = [s for s in (stems_has or []) if s in self._ALLOWED_STEM_IDS]
if stems_h:
placeholders = ",".join(["?"] * len(stems_h))
- where += (" AND EXISTS (SELECT 1 FROM json_each(songs.stem_ids) "
+ where += (f" AND EXISTS (SELECT 1 FROM json_each({alias}.stem_ids) "
f"WHERE value IN ({placeholders}))")
params += stems_h
stems_l = [s for s in (stems_lacks or []) if s in self._ALLOWED_STEM_IDS]
if stems_l:
placeholders = ",".join(["?"] * len(stems_l))
- where += (" AND NOT EXISTS (SELECT 1 FROM json_each(songs.stem_ids) "
+ where += (f" AND NOT EXISTS (SELECT 1 FROM json_each({alias}.stem_ids) "
f"WHERE value IN ({placeholders}))")
params += stems_l
if has_lyrics in (0, 1):
- where += " AND has_lyrics = ?"
+ where += f" AND {alias}.has_lyrics = ?"
params.append(has_lyrics)
if tunings:
# Keep the input cap conservative (32) so a hostile caller
@@ -2587,11 +2682,257 @@ class MetadataDB:
# Match the same grouping key tuning_names() returns so a single
# "Custom Tuning" pill selects exactly its offset set while named
# tunings still match by name.
- where += (f" AND {_TUNING_GROUP_KEY_SQL} "
+ where += (f" AND {_tuning_group_key_sql(alias)} "
f"COLLATE NOCASE IN ({placeholders})")
params += tn
return where, params
+ # Under group=1, chart-intrinsic filters match if ANY member of the work
+ # matches (§7.1 filter law). A pure predicate on the representative scan —
+ # no GROUP BY, no row multiplication — so the keyset cursor stays valid.
+ def _grouped_member_match(self, intrinsic_frag: str, intrinsic_params: list) -> tuple[str, list]:
+ if not intrinsic_frag:
+ return "", []
+ return ((" AND EXISTS (SELECT 1 FROM songs m JOIN work_display mw ON mw.filename = m.filename "
+ "WHERE mw.effective_work_key = (SELECT w0.effective_work_key FROM work_display w0 "
+ "WHERE w0.filename = songs.filename)" + intrinsic_frag + ")"),
+ list(intrinsic_params))
+
+ # ── Multi-chart grouping engine (P5a) ────────────────────────────────────
+ @staticmethod
+ def _norm_token(s, fold_the=False):
+ """Fold a name to a comparison token: strip diacritics + punctuation +
+ whitespace, lowercase, optionally drop a leading 'the ' (artist names)."""
+ import re
+ import unicodedata
+ raw = str(s or "")
+ s = unicodedata.normalize("NFKD", raw)
+ s = "".join(c for c in s if not unicodedata.combining(c)).lower()
+ if fold_the:
+ s = re.sub(r"^the\s+", "", s)
+ folded = re.sub(r"[^a-z0-9]+", "", s)
+ if folded:
+ return folded
+ # All-non-Latin titles (CJK/Cyrillic/Greek/Arabic) fold to "" above,
+ # which would collapse every such song into one bogus work. Fall back to
+ # the raw text lowercased with whitespace collapsed so distinct titles
+ # keep distinct keys. Latin names always hit the `folded` branch, so
+ # their behavior is unchanged.
+ return re.sub(r"\s+", " ", raw.strip().lower())
+
+ @classmethod
+ def _work_key(cls, artist, title) -> str:
+ """Identity of a musical WORK = normalize(artist)+'|'+normalize(title).
+ Recording-MBID identity is a later enrichment upgrade (§3); this text key
+ groups the common 'same song, several charts' case now."""
+ return cls._norm_token(artist, fold_the=True) + "|" + cls._norm_token(title)
+
+ def _alias_map_if_exists(self) -> dict:
+ """{raw_artist_lower: canonical} from P4's artist_alias when that table is
+ present, so work_key groups across artist aliases (ACDC/AC/DC) once P4 is
+ merged; {} (→ raw artist) when it isn't. Forward-compatible, no hard P4 dep."""
+ try:
+ rows = self.conn.execute("SELECT raw_name, canonical_name FROM artist_alias").fetchall()
+ except Exception:
+ return {}
+ return {r[0].lower(): r[1] for r in rows}
+
+ @staticmethod
+ def _pick_representative(members: list, prefs: dict) -> str:
+ """The keeper chart of a group: the user's chart_group_pref when its file
+ is present, else auto-pick = MOST-PLAYED (history-sticky, §7.1: real
+ practice wins — a newer/'more complete' import must not silently take
+ the pick from the chart your reps accrued on, and a one-off try of an
+ alternate can't out-rank a practiced incumbent) → most-complete
+ (arrangements) → newest → filename. An all-unplayed group therefore
+ still picks by completeness. `members` = dicts {fn, wk, arr, plays, mtime}."""
+ if members:
+ pref = prefs.get(members[0]["wk"])
+ if pref and any(m["fn"] == pref for m in members):
+ return pref
+ best = min(members, key=lambda m: (-m["plays"], -m["arr"], -m["mtime"], m["fn"]))
+ return best["fn"]
+
+ def _load_work_members(self):
+ """Read songs + overrides → ({effective_work_key: [member dicts]}, prefs)."""
+ amap = self._alias_map_if_exists()
+ splits = dict(self.conn.execute(
+ "SELECT filename, split_key FROM chart_group_split").fetchall())
+ prefs = dict(self.conn.execute(
+ "SELECT work_key, preferred_filename FROM chart_group_pref").fetchall())
+ plays = dict(self.conn.execute(
+ "SELECT filename, SUM(plays) FROM song_stats GROUP BY filename").fetchall())
+ groups: dict = {}
+ for fn, artist, title, arr_json, mtime in self.conn.execute(
+ "SELECT filename, artist, title, arrangements, mtime FROM songs WHERE title != ''"):
+ wk = self._work_key(amap.get((artist or "").lower(), artist), title)
+ eff = splits.get(fn) or wk
+ try:
+ arr = len(json.loads(arr_json)) if arr_json else 0
+ except Exception:
+ arr = 0
+ groups.setdefault(eff, []).append(
+ {"fn": fn, "wk": wk, "arr": arr, "plays": int(plays.get(fn) or 0), "mtime": mtime or 0})
+ return groups, prefs
+
+ def rebuild_work_display(self) -> None:
+ """Full re-materialization of work_display from songs + the override
+ tables. O(n) — cheap enough to run lazily after any songs churn."""
+ with self._lock:
+ groups, prefs = self._load_work_members()
+ out = []
+ for eff, members in groups.items():
+ rep = self._pick_representative(members, prefs)
+ n = len(members)
+ for m in members:
+ out.append((m["fn"], m["wk"], eff, 1 if m["fn"] == rep else 0, n))
+ self.conn.execute("DELETE FROM work_display")
+ if out:
+ self.conn.executemany(
+ "INSERT INTO work_display (filename, work_key, effective_work_key, "
+ "is_group_representative, group_size) VALUES (?, ?, ?, ?, ?)", out)
+ self.conn.commit()
+ self._work_display_dirty = False
+
+ def _ensure_work_display(self) -> None:
+ """(Re)build the read-model when a change marked it dirty (or it's never
+ been built). Called at the top of every grouped query."""
+ if getattr(self, "_work_display_dirty", True):
+ self.rebuild_work_display()
+
+ def work_key_for(self, filename: str):
+ """work_key of a song (from its current artist+title), or None if absent."""
+ row = self.conn.execute(
+ "SELECT artist, title FROM songs WHERE filename = ?", (filename,)).fetchone()
+ if not row:
+ return None
+ amap = self._alias_map_if_exists()
+ return self._work_key(amap.get((row[0] or "").lower(), row[0]), row[1])
+
+ def set_chart_preferred(self, work_key: str, filename: str) -> None:
+ """Pick the keeper chart of a work. Incremental: re-flips
+ is_group_representative within the work's (non-split) group only —
+ group_size is unchanged — so no full rebuild."""
+ with self._lock:
+ self.conn.execute(
+ "INSERT INTO chart_group_pref (work_key, preferred_filename, updated_at) "
+ "VALUES (?, ?, datetime('now')) "
+ "ON CONFLICT(work_key) DO UPDATE SET "
+ "preferred_filename = excluded.preferred_filename, updated_at = excluded.updated_at",
+ (work_key, filename))
+ if not self._work_display_dirty:
+ members = [r[0] for r in self.conn.execute(
+ "SELECT filename FROM work_display WHERE effective_work_key = ?",
+ (work_key,)).fetchall()]
+ if filename in members:
+ self.conn.execute(
+ "UPDATE work_display SET is_group_representative = "
+ "CASE WHEN filename = ? THEN 1 ELSE 0 END "
+ "WHERE effective_work_key = ?", (filename, work_key))
+ else:
+ # pref target isn't a current member (orphan/split) — reconcile
+ # on the next lazy rebuild rather than leave it half-applied.
+ self._work_display_dirty = True
+ self.conn.commit()
+
+ def clear_chart_preferred(self, work_key: str) -> None:
+ """Reset a work to auto-pick; lazy full rebuild."""
+ with self._lock:
+ self.conn.execute("DELETE FROM chart_group_pref WHERE work_key = ?", (work_key,))
+ self._work_display_dirty = True
+ self.conn.commit()
+
+ def split_chart(self, filename: str) -> None:
+ """'These aren't the same' — give a chart a unique split_key so it stands
+ alone as a singleton work. Lazy full rebuild (the old group's membership +
+ sizes shift)."""
+ wk = self.work_key_for(filename) or filename
+ with self._lock:
+ self.conn.execute(
+ "INSERT INTO chart_group_split (filename, split_key, updated_at) "
+ "VALUES (?, ?, datetime('now')) "
+ "ON CONFLICT(filename) DO UPDATE SET "
+ "split_key = excluded.split_key, updated_at = excluded.updated_at",
+ (filename, f"{wk}#split#{filename}"))
+ self._work_display_dirty = True
+ self.conn.commit()
+
+ def unsplit_chart(self, filename: str) -> None:
+ """Undo a split — the chart rejoins its work. Lazy full rebuild."""
+ with self._lock:
+ self.conn.execute("DELETE FROM chart_group_split WHERE filename = ?", (filename,))
+ self._work_display_dirty = True
+ self.conn.commit()
+
+ def work_charts(self, work_key: str) -> dict:
+ """Every chart in a work (P5b) — the Charts drawer's data. Members are the
+ work's CURRENT (non-split) group: work_display rows whose effective_work_key
+ matches. Each carries its effective title/artist, arrangements, tuning,
+ format, best accuracy, and the representative/preferred flags so the drawer
+ can label 'Preferred — your pick' vs 'Preferred (auto)'."""
+ self._ensure_work_display()
+ amap = self._alias_map_if_exists()
+ pref_row = self.conn.execute(
+ "SELECT preferred_filename FROM chart_group_pref WHERE work_key = ?", (work_key,)).fetchone()
+ pref_fn = pref_row[0] if pref_row else None
+ rows = self.conn.execute(
+ "SELECT wd.filename, wd.is_group_representative, s.title, s.artist, s.album, s.year, "
+ "s.arrangements, s.tuning_name, s.tuning, s.format, "
+ "(SELECT MAX(best_accuracy) FROM song_stats st WHERE st.filename = wd.filename AND st.plays > 0) "
+ "FROM work_display wd JOIN songs s ON s.filename = wd.filename "
+ "WHERE wd.effective_work_key = ? "
+ "ORDER BY wd.is_group_representative DESC, s.title COLLATE NOCASE, s.filename",
+ (work_key,)).fetchall()
+ charts = []
+ for fn, is_rep, title, artist, album, year, arr_json, tuning_name, tuning, fmt, best in rows:
+ try:
+ arrangements = _ensure_smart_names(json.loads(arr_json) if arr_json else [])
+ except Exception:
+ arrangements = []
+ charts.append({
+ "filename": fn,
+ "title": title or fn,
+ "artist": amap.get((artist or "").lower(), artist) or "",
+ "album": album or "", "year": year or "",
+ "arrangements": arrangements,
+ "tuning_name": tuning_name or "", "tuning": tuning or "",
+ "format": fmt or "archive",
+ "best_accuracy": best,
+ "is_representative": bool(is_rep),
+ "is_preferred": (fn == pref_fn),
+ })
+ return {
+ "work_key": work_key,
+ "count": len(charts),
+ "preferred_filename": pref_fn,
+ # Whether the keeper is your explicit pick or the auto-pick — drives the
+ # drawer's "Preferred — your pick" vs "Preferred (auto)" label.
+ "preferred_source": "user" if pref_fn else "auto",
+ "charts": charts,
+ }
+
+ def chart_work(self, filename: str) -> dict:
+ """The work a chart belongs to (P5d): its EFFECTIVE work_key (a split
+ chart resolves to its own singleton key) + how many charts share it.
+ Lets an opener resolve group membership for rows that didn't come from
+ a grouped query — the tree view's rows ride the ungrouped artists
+ endpoint, so they carry no chart_count/work_key annotation."""
+ key = self._canonical_song_filename(filename)
+ self._ensure_work_display()
+ row = self.conn.execute(
+ "SELECT effective_work_key, group_size FROM work_display WHERE filename = ?",
+ (key,)).fetchone()
+ if not row:
+ return {"filename": key, "work_key": None, "chart_count": 0, "is_split": False}
+ split = self.conn.execute(
+ "SELECT 1 FROM chart_group_split WHERE filename = ?", (key,)).fetchone()
+ return {"filename": key, "work_key": row[0], "chart_count": row[1],
+ "is_split": bool(split)}
+
+ # Predicate that narrows a query to one representative chart per work — the
+ # keyset-safe grouping filter (see query_page / query_stats).
+ _GROUP_REP_PREDICATE = " AND filename IN (SELECT filename FROM work_display WHERE is_group_representative = 1)"
+
def query_page(self, q: str = "", page: int = 0, size: int = 24,
sort: str = "artist", direction: str = "asc",
favorites_only: bool = False,
@@ -2608,13 +2949,28 @@ class MetadataDB:
tags_has: list[str] | None = None,
user_difficulty_in: list[str] | None = None,
after: str | None = None,
+ group: bool = False,
naming_mode: str = "legacy") -> tuple[list[dict], int]:
"""Server-side paginated search. Returns (songs, total_count).
`after` is an opaque keyset cursor (the last row of the previous page).
When supplied and the sort can keyset, the page is fetched with a
WHERE-seek instead of OFFSET — O(page), independent of depth. Unknown
- sorts / bad cursors fall back to OFFSET, so it's always safe."""
+ sorts / bad cursors fall back to OFFSET, so it's always safe.
+
+ `group` collapses a work's charts to one card (P5a): it adds a single
+ `WHERE is_group_representative = 1` predicate over the materialized
+ work_display, so the total counts WORKS not charts and the keyset seek /
+ sort / A–Z all stay correct over the representative subset. Each grouped
+ row carries `chart_count` (the ⚑ N).
+
+ Filter law under grouping (P5e, §7.1): work-identity (artist/album/q)
+ + practice-state (favorites/mastery/tags/difficulty) predicates stay on
+ the representative row (identity ≈ the work; practice-state anchors on
+ the preferred chart), while CHART-INTRINSIC predicates (format/
+ arrangements/stems/lyrics/tuning) match if ANY member of the work does
+ — and when the representative itself doesn't match, the row carries a
+ `display_chart` override so the card can show/play the matching one."""
where, params = self._build_where(
q=q, favorites_only=favorites_only, format_filter=format_filter,
artist_filter=artist_filter, album_filter=album_filter,
@@ -2622,8 +2978,20 @@ class MetadataDB:
stems_has=stems_has, stems_lacks=stems_lacks,
has_lyrics=has_lyrics, tunings=tunings, mastery=mastery,
tags_has=tags_has, user_difficulty_in=user_difficulty_in,
- naming_mode=naming_mode,
+ naming_mode=naming_mode, include_intrinsic=not group,
)
+ ifrag, iparams = "", []
+ if group:
+ self._ensure_work_display()
+ ifrag, iparams = self._build_intrinsic_where(
+ "m", format_filter=format_filter,
+ arrangements_has=arrangements_has, arrangements_lacks=arrangements_lacks,
+ stems_has=stems_has, stems_lacks=stems_lacks,
+ has_lyrics=has_lyrics, tunings=tunings, naming_mode=naming_mode)
+ mfrag, mparams = self._grouped_member_match(ifrag, iparams)
+ where += mfrag
+ params += mparams
+ where += self._GROUP_REP_PREDICATE
sort_map = {
"artist": "artist COLLATE NOCASE", "artist-desc": "artist COLLATE NOCASE DESC",
@@ -2678,6 +3046,22 @@ class MetadataDB:
"(SELECT MAX(best_accuracy) FROM song_stats s WHERE s.filename = songs.filename) DESC"
),
}
+ if group and sort in ("mastery", "mastery-desc"):
+ # Sort law (§7.1): mastery aggregates MAX across the WHOLE group —
+ # a song surfaces on any chart you've touched, even when the
+ # preferred chart is unplayed. Mastery never keysets (OFFSET
+ # paging), so the aggregate can't disturb a cursor. The recency
+ # ("Recently Added") aggregate is deliberately NOT applied: mtime
+ # IS a keyset sort, so its aggregate would need materializing into
+ # work_display to stay cursor-safe — deferred until wanted (the
+ # auto-pick's `newest` factor already surfaces new charts of
+ # unplayed works; played works stay put by the sticky rule).
+ _gm = ("(SELECT MAX(st.best_accuracy) FROM song_stats st "
+ "JOIN work_display sw ON sw.filename = st.filename "
+ "WHERE sw.effective_work_key = (SELECT w1.effective_work_key "
+ "FROM work_display w1 WHERE w1.filename = songs.filename))")
+ sort_map["mastery"] = f"({_gm} IS NULL) ASC, {_gm} ASC"
+ sort_map["mastery-desc"] = f"({_gm} IS NULL) ASC, {_gm} DESC"
order = sort_map.get(sort, "artist COLLATE NOCASE")
# Legacy `dir=desc` toggle: only safe to append on simple sort
# clauses that don't already encode a direction. Compound /
@@ -2693,28 +3077,39 @@ class MetadataDB:
# also what makes keyset seeking correct.
order += ", filename"
- total = self.conn.execute(f"SELECT COUNT(*) FROM songs {where}", params).fetchone()[0]
+ # Grouped reads filter through the materialized work_display (the
+ # `is_group_representative=1` predicate). rebuild_work_display does
+ # DELETE→INSERT→commit under self._lock, so a lock-free reader on
+ # another thread (shared conn, check_same_thread=False) could land its
+ # SELECT in the mid-rebuild window and see 0 rows. Hold self._lock
+ # across the representative COUNT+SELECT so it can't overlap a rebuild.
+ # _ensure_work_display already rebuilt above under its own lock (and
+ # self._lock is NOT reentrant), so we must NOT nest it here. Ungrouped
+ # reads stay lock-free (WAL) via nullcontext.
+ read_guard = self._lock if group else contextlib.nullcontext()
+ with read_guard:
+ total = self.conn.execute(f"SELECT COUNT(*) FROM songs {where}", params).fetchone()[0]
- cols = ("SELECT filename, title, artist, album, year, duration, tuning, "
- "arrangements, has_lyrics, mtime, format, stem_count, stem_ids, "
- "tuning_name, tuning_offsets FROM songs ")
- cursor = _decode_cursor(after) if after else None
- eff_sort = _effective_keyset_sort(sort, direction)
- if cursor and eff_sort in _KEYSET_SORTS:
- # Keyset seek: rows strictly after the cursor in the total order
- # `
, filename ASC` (NULL-aware, so == OFFSET exactly).
- col, collate, primary_dir = _KEYSET_SORTS[eff_sort]
- seek, seek_params = _keyset_seek(col, collate, primary_dir, cursor[0], cursor[1])
- seek_where = where + (" AND " if where else " WHERE ") + seek
- rows = self.conn.execute(
- f"{cols}{seek_where} ORDER BY {order} LIMIT ?",
- params + seek_params + [size],
- ).fetchall()
- else:
- rows = self.conn.execute(
- f"{cols}{where} ORDER BY {order} LIMIT ? OFFSET ?",
- params + [size, page * size],
- ).fetchall()
+ cols = ("SELECT filename, title, artist, album, year, duration, tuning, "
+ "arrangements, has_lyrics, mtime, format, stem_count, stem_ids, "
+ "tuning_name, tuning_offsets FROM songs ")
+ cursor = _decode_cursor(after) if after else None
+ eff_sort = _effective_keyset_sort(sort, direction)
+ if cursor and eff_sort in _KEYSET_SORTS:
+ # Keyset seek: rows strictly after the cursor in the total order
+ # `
, filename ASC` (NULL-aware, so == OFFSET exactly).
+ col, collate, primary_dir = _KEYSET_SORTS[eff_sort]
+ seek, seek_params = _keyset_seek(col, collate, primary_dir, cursor[0], cursor[1])
+ seek_where = where + (" AND " if where else " WHERE ") + seek
+ rows = self.conn.execute(
+ f"{cols}{seek_where} ORDER BY {order} LIMIT ?",
+ params + seek_params + [size],
+ ).fetchall()
+ else:
+ rows = self.conn.execute(
+ f"{cols}{where} ORDER BY {order} LIMIT ? OFFSET ?",
+ params + [size, page * size],
+ ).fetchall()
estd = self._estd_set()
favs = self.favorite_set()
@@ -2750,8 +3145,69 @@ class MetadataDB:
s["tags"] = tgm.get(s["filename"], [])
if amap:
s["artist"] = amap.get((s.get("artist") or "").lower(), s.get("artist"))
+ # Grouped rows carry the ⚑ N (chart_count) + the work_key from the
+ # materialized read-model, so the card can render the "N charts" chip and
+ # address the Charts drawer (GET /api/work/{work_key}/charts) without a
+ # second request — plus `is_split` (P5e) so the ⋮ menu can offer the
+ # "Rejoin other versions" undo on a split-out chart.
+ if group and fns:
+ ph = ",".join("?" * len(fns))
+ wd = {r[0]: (r[1], r[2], r[3]) for r in self.conn.execute(
+ "SELECT filename, group_size, work_key, effective_work_key "
+ f"FROM work_display WHERE filename IN ({ph})", fns).fetchall()}
+ splits = {r[0] for r in self.conn.execute(
+ f"SELECT filename FROM chart_group_split WHERE filename IN ({ph})", fns).fetchall()}
+ eff_by_fn = {}
+ for s in songs:
+ gs, wk, eff = wd.get(s["filename"], (1, None, None))
+ s["chart_count"] = gs
+ s["work_key"] = wk
+ s["is_split"] = s["filename"] in splits
+ if eff:
+ eff_by_fn[s["filename"]] = eff
+ if ifrag:
+ self._attach_display_charts(songs, eff_by_fn, ifrag, iparams)
return songs, total
+ def _attach_display_charts(self, songs: list[dict], eff_by_fn: dict,
+ intrinsic_frag: str, intrinsic_params: list) -> None:
+ """§7.1: when chart-intrinsic filters admit a work through a member the
+ REPRESENTATIVE doesn't itself satisfy, the card 'switches its displayed
+ chart to a matching one'. The row (sort keys, cursor identity, the
+ mastery/favorite anchor) stays the representative's — only the
+ display/play facts ride along under `display_chart`, so keyset paging
+ and the practice-state anchor are untouched. `intrinsic_frag`/`params`
+ are the member-aliased ('m') predicates already built by the caller."""
+ keys = sorted(set(eff_by_fn.values()))
+ if not keys:
+ return
+ ph = ",".join("?" * len(keys))
+ rows = self.conn.execute(
+ "SELECT mw.effective_work_key, m.filename, m.title, m.duration, m.tuning, "
+ "m.arrangements, m.has_lyrics, m.mtime, m.format, m.stem_count, m.stem_ids, "
+ "m.tuning_name, m.tuning_offsets "
+ "FROM songs m JOIN work_display mw ON mw.filename = m.filename "
+ f"WHERE mw.effective_work_key IN ({ph}){intrinsic_frag} "
+ "ORDER BY mw.is_group_representative DESC, m.mtime DESC, m.filename",
+ keys + list(intrinsic_params)).fetchall()
+ best: dict = {}
+ for r in rows:
+ best.setdefault(r[0], r) # rep-first, then newest — one match per work
+ for s in songs:
+ m = best.get(eff_by_fn.get(s["filename"]))
+ if not m or m[1] == s["filename"]:
+ continue # the representative itself matches (or nothing does)
+ s["display_chart"] = {
+ "filename": m[1], "title": m[2] or m[1], "duration": m[3],
+ "tuning": m[4],
+ "arrangements": _ensure_smart_names(json.loads(m[5]) if m[5] else []),
+ "has_lyrics": bool(m[6]), "mtime": m[7],
+ "format": m[8] or "archive",
+ "stem_count": int(m[9] or 0),
+ "stem_ids": json.loads(m[10]) if m[10] else [],
+ "tuning_name": m[11] or "", "tuning_offsets": m[12] or "",
+ }
+
def query_artists(self, letter: str = "", q: str = "",
favorites_only: bool = False,
page: int = 0, size: int = 50,
@@ -2861,11 +3317,17 @@ class MetadataDB:
tunings: list[str] | None = None,
sort: str = "artist",
want_sort_letters: bool = False,
+ group: bool = False,
naming_mode: str = "legacy") -> dict:
"""Aggregate stats for the letter bar. Accepts the same filter
params as query_page so the letter counts stay synchronized
with the grid when filters are active.
+ `group` (P5a) restricts every count to one representative chart per work
+ (the same predicate query_page uses), so `total_songs` and the jump-rail
+ `sort_letters` count WORKS not charts and stay in lockstep with the
+ grouped grid.
+
`sort` selects the column the v3 jump rail's `sort_letters`
breakdown keys on (artist for artist sorts, title for title
sorts) so the rail's present-letters match the grid's actual
@@ -2883,20 +3345,44 @@ class MetadataDB:
arrangements_has=arrangements_has, arrangements_lacks=arrangements_lacks,
stems_has=stems_has, stems_lacks=stems_lacks,
has_lyrics=has_lyrics, tunings=tunings, naming_mode=naming_mode,
+ include_intrinsic=not group,
)
- total = self.conn.execute(f"SELECT COUNT(*) FROM songs {where}", params).fetchone()[0]
- # NOCASE collation here mirrors `query_artists` and the per-
- # letter `COUNT(DISTINCT artist COLLATE NOCASE)` below — without
- # it, an artist stored under two different casings would inflate
- # `total_artists` against the letter-bar breakdown the UI
- # renders next to it.
- artist_count = self.conn.execute(
- f"SELECT COUNT(DISTINCT artist COLLATE NOCASE) FROM songs {where}", params
- ).fetchone()[0]
- rows = self.conn.execute(
- f"SELECT UPPER(SUBSTR(artist, 1, 1)) as letter, COUNT(DISTINCT artist COLLATE NOCASE) "
- f"FROM songs {where} GROUP BY letter", params
- ).fetchall()
+ if group:
+ # Same filter law as query_page (§7.1): chart-intrinsic predicates
+ # match-if-ANY-member, applied identically here so the letter-bar
+ # counts stay in lockstep with the grouped grid.
+ self._ensure_work_display()
+ ifrag, iparams = self._build_intrinsic_where(
+ "m", format_filter=format_filter,
+ arrangements_has=arrangements_has, arrangements_lacks=arrangements_lacks,
+ stems_has=stems_has, stems_lacks=stems_lacks,
+ has_lyrics=has_lyrics, tunings=tunings, naming_mode=naming_mode)
+ mfrag, mparams = self._grouped_member_match(ifrag, iparams)
+ where += mfrag
+ params += mparams
+ where += self._GROUP_REP_PREDICATE
+ # Grouped stat counts filter through work_display (same
+ # is_group_representative=1 predicate as query_page); hold self._lock
+ # across these representative SELECTs so they can't observe a
+ # mid-rebuild empty table (see query_page for the full rationale).
+ # _ensure_work_display already rebuilt above under its own lock, so we
+ # do NOT nest it here (self._lock is non-reentrant). Ungrouped reads
+ # stay lock-free (WAL) via nullcontext.
+ read_guard = self._lock if group else contextlib.nullcontext()
+ with read_guard:
+ total = self.conn.execute(f"SELECT COUNT(*) FROM songs {where}", params).fetchone()[0]
+ # NOCASE collation here mirrors `query_artists` and the per-
+ # letter `COUNT(DISTINCT artist COLLATE NOCASE)` below — without
+ # it, an artist stored under two different casings would inflate
+ # `total_artists` against the letter-bar breakdown the UI
+ # renders next to it.
+ artist_count = self.conn.execute(
+ f"SELECT COUNT(DISTINCT artist COLLATE NOCASE) FROM songs {where}", params
+ ).fetchone()[0]
+ rows = self.conn.execute(
+ f"SELECT UPPER(SUBSTR(artist, 1, 1)) as letter, COUNT(DISTINCT artist COLLATE NOCASE) "
+ f"FROM songs {where} GROUP BY letter", params
+ ).fetchall()
letters = {}
for letter, count in rows:
count = int(count or 0)
@@ -2917,10 +3403,12 @@ class MetadataDB:
# only when the caller opts in, so non-rail callers skip the scan.
if want_sort_letters:
sort_col = "title" if sort in ("title", "title-desc") else "artist"
- sort_rows = self.conn.execute(
- f"SELECT UPPER(SUBSTR(COALESCE({sort_col}, ''), 1, 1)) AS letter, COUNT(*) "
- f"FROM songs {where} GROUP BY letter", params
- ).fetchall()
+ # Same representative-SELECT lock guard as the counts above.
+ with read_guard:
+ sort_rows = self.conn.execute(
+ f"SELECT UPPER(SUBSTR(COALESCE({sort_col}, ''), 1, 1)) AS letter, COUNT(*) "
+ f"FROM songs {where} GROUP BY letter", params
+ ).fetchall()
sort_letters: dict[str, int] = {}
for letter, count in sort_rows:
count = int(count or 0)
@@ -5410,6 +5898,14 @@ def delete_song(filename: str):
# Personal difficulty / notes / tags for this song (we hold the
# lock, so purge is lock-free).
meta_db.purge_song_user_data(cache_key)
+ # Multi-chart grouping (P5a): drop this chart's split + read-model rows,
+ # and any preferred-chart pointer that named it (the work re-auto-picks).
+ # work_key-keyed prefs for OTHER charts survive. Mark the read-model
+ # dirty so the affected work regroups on the next grouped query.
+ meta_db.conn.execute("DELETE FROM chart_group_split WHERE filename = ?", (cache_key,))
+ meta_db.conn.execute("DELETE FROM work_display WHERE filename = ?", (cache_key,))
+ meta_db.conn.execute("DELETE FROM chart_group_pref WHERE preferred_filename = ?", (cache_key,))
+ meta_db._work_display_dirty = True
meta_db.conn.commit()
_invalidate_song_caches(cache_key)
@@ -5512,7 +6008,7 @@ async def list_library(q: str = "", page: int = 0, size: int = 24, sort: str = "
stems_has: str = "", stems_lacks: str = "",
has_lyrics: str = "", tunings: str = "", provider: str = "local",
mastery: str = "", tags: str = "", user_difficulty: str = "",
- after: str = "", naming_mode: str = "legacy"):
+ after: str = "", group: int = 0, naming_mode: str = "legacy"):
"""Paginated library search through the selected library provider.
`after` is an opaque keyset cursor (feedBack#636 item 3): pass back the
@@ -5535,6 +6031,7 @@ async def list_library(q: str = "", page: int = 0, size: int = 24, sort: str = "
sort=sort,
direction=dir,
after=((after or None) if is_local else None),
+ group=bool(group),
naming_mode=naming_mode,
mastery=_split_csv(mastery),
tags_has=_split_csv(tags),
@@ -5554,6 +6051,66 @@ async def list_library(q: str = "", page: int = 0, size: int = 24, sort: str = "
"next_cursor": next_cursor}
+# ── Multi-chart work grouping API (P5b) ──────────────────────────────────────
+# Read + manage the charts of a work (the P5d Charts drawer consumes this). The
+# grouping engine lives in MetadataDB (P5a); these are its HTTP surface. Local
+# library only. NOTE: a scoped "work changed" repaint broadcast for OTHER open
+# views is deferred to P5d — there's no server-side library event bus today, and
+# the drawer updates itself from these responses.
+
+@app.get("/api/work/{work_key:path}/charts")
+def api_get_work_charts(work_key: str):
+ """All charts in a work + which is the keeper (your pick vs auto-pick)."""
+ return meta_db.work_charts(work_key)
+
+
+@app.put("/api/work/{work_key:path}/preferred")
+def api_set_work_preferred(work_key: str, data: dict):
+ """Set the keeper chart of a work: body {filename}. The filename must be a
+ current member of the work. Returns the refreshed chart list."""
+ fn = (data.get("filename") or "").strip()
+ if not fn:
+ return JSONResponse({"error": "filename is required"}, 400)
+ members = {c["filename"] for c in meta_db.work_charts(work_key)["charts"]}
+ if fn not in members:
+ return JSONResponse({"error": "filename is not a chart of this work"}, 400)
+ meta_db.set_chart_preferred(work_key, fn)
+ return meta_db.work_charts(work_key)
+
+
+@app.delete("/api/work/{work_key:path}/preferred")
+def api_reset_work_preferred(work_key: str):
+ """Reset a work to auto-pick (drop the explicit preferred)."""
+ meta_db.clear_chart_preferred(work_key)
+ return meta_db.work_charts(work_key)
+
+
+@app.post("/api/chart/{filename:path}/split")
+def api_split_chart(filename: str):
+ """'These aren't the same song' — split this chart out as its own singleton
+ work. Under /api/chart (NOT /api/song) so the DELETE /api/song/{path}
+ catch-all can't shadow it."""
+ key = meta_db._canonical_song_filename(filename)
+ meta_db.split_chart(key)
+ return {"ok": True, "filename": key}
+
+
+@app.post("/api/chart/{filename:path}/unsplit")
+def api_unsplit_chart(filename: str):
+ """Undo a split — rejoin the chart to its work."""
+ key = meta_db._canonical_song_filename(filename)
+ meta_db.unsplit_chart(key)
+ return {"ok": True, "filename": key}
+
+
+@app.get("/api/chart/{filename:path}/work")
+def api_get_chart_work(filename: str):
+ """Resolve a chart's work membership: {work_key, chart_count}. For openers
+ on rows that came from an ungrouped query (the tree view) — grouped grid
+ rows already carry both fields inline."""
+ return meta_db.chart_work(filename)
+
+
@app.get("/api/library/artists")
async def list_artists(letter: str = "", q: str = "", favorites: int = 0, page: int = 0,
size: int = 50, format: str = "",
@@ -5591,12 +6148,13 @@ async def library_stats(favorites: int = 0, q: str = "", format: str = "",
stems_has: str = "", stems_lacks: str = "",
has_lyrics: str = "", tunings: str = "", provider: str = "local",
sort: str = "artist", sort_letters: int = 0,
- naming_mode: str = "legacy"):
+ group: int = 0, naming_mode: str = "legacy"):
"""Aggregate stats for the UI. Accepts the same filter params as
/api/library so the letter bar mirrors the active grid filter set.
`sort` selects the column the jump rail's `sort_letters` keys on;
`sort_letters=1` opts into that breakdown (the rail), so non-rail
- callers skip the extra per-letter aggregate."""
+ callers skip the extra per-letter aggregate. `group=1` counts works not
+ charts (mirrors the grouped grid)."""
library_provider = _get_library_provider(provider)
_require_library_provider_capability(library_provider, "library.read")
return await _call_library_provider_async(
@@ -5605,6 +6163,7 @@ async def library_stats(favorites: int = 0, q: str = "", format: str = "",
naming_mode=naming_mode,
sort=sort,
want_sort_letters=bool(sort_letters),
+ group=bool(group),
**_library_filter_args(
q=q, favorites=favorites, format=format,
artist=artist, album=album,
diff --git a/static/tailwind.min.css b/static/tailwind.min.css
index ab4521f..c4090ce 100644
--- a/static/tailwind.min.css
+++ b/static/tailwind.min.css
@@ -1,2 +1,2 @@
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }
-/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!container{width:100%!important}.container{width:100%}@media (min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{top:0;bottom:0}.-left-\[1\.4375rem\]{left:-1.4375rem}.-right-\[1\.4375rem\]{right:-1.4375rem}.bottom-0{bottom:0}.bottom-1{bottom:.25rem}.bottom-1\.5{bottom:.375rem}.bottom-4{bottom:1rem}.bottom-5{bottom:1.25rem}.bottom-6{bottom:1.5rem}.bottom-\[30\%\]{bottom:30%}.bottom-full{bottom:100%}.left-0{left:0}.left-0\.5{left:.125rem}.left-1\.5{left:.375rem}.left-1\/2{left:50%}.left-2{left:.5rem}.left-2\.5{left:.625rem}.left-3{left:.75rem}.left-9{left:2.25rem}.left-\[30\%\]{left:30%}.right-0{right:0}.right-0\.5{right:.125rem}.right-1\.5{right:.375rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-\[30\%\]{right:30%}.top-0{top:0}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-10{top:2.5rem}.top-2{top:.5rem}.top-3{top:.75rem}.top-4{top:1rem}.top-\[30\%\]{top:30%}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1000\]{z-index:1000}.z-\[1001\]{z-index:1001}.z-\[100\]{z-index:100}.z-\[120\]{z-index:120}.z-\[200\]{z-index:200}.z-\[210\]{z-index:210}.z-\[250\]{z-index:250}.z-\[300\]{z-index:300}.z-\[60\]{z-index:60}.z-\[61\]{z-index:61}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.m-1{margin:.25rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-10{margin-bottom:2.5rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-5{margin-left:1.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.\!grid{display:grid!important}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-\[3\/1\]{aspect-ratio:3/1}.aspect-square{aspect-ratio:1/1}.aspect-video{aspect-ratio:16/9}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-1\/2{height:50%}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-2\/3{height:66.666667%}.h-20{height:5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[3px\]{height:3px}.h-\[92px\]{height:92px}.h-\[calc\(50\%-1\.5px\)\]{height:calc(50% - 1.5px)}.h-\[calc\(50\%-2\.5px\)\]{height:calc(50% - 2.5px)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-32{max-height:8rem}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-96{max-height:24rem}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.min-h-5{min-height:1.25rem}.min-h-6{min-height:1.5rem}.min-h-\[18rem\]{min-height:18rem}.min-h-\[2\.5em\]{min-height:2.5em}.min-h-\[480px\]{min-height:480px}.min-h-\[6rem\]{min-height:6rem}.w-0\.5{width:.125rem}.w-1{width:.25rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[96px\]{width:96px}.w-\[calc\(50\%-1px\)\]{width:calc(50% - 1px)}.w-\[calc\(50\%-2px\)\]{width:calc(50% - 2px)}.w-full{width:100%}.min-w-0{min-width:0}.min-w-40{min-width:10rem}.min-w-\[1\.25rem\]{min-width:1.25rem}.min-w-\[1\.75rem\]{min-width:1.75rem}.min-w-\[10rem\]{min-width:10rem}.min-w-\[180px\]{min-width:180px}.min-w-full{min-width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[11rem\]{max-width:11rem}.max-w-\[130px\]{max-width:130px}.max-w-\[160px\]{max-width:160px}.max-w-\[210px\]{max-width:210px}.max-w-\[5\.5rem\]{max-width:5.5rem}.max-w-\[90\%\]{max-width:90%}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.translate-x-full{--tw-translate-x:100%}.-rotate-12,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-12{--tw-rotate:-12deg}.rotate-12{--tw-rotate:12deg}.rotate-12,.rotate-45{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate:45deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-\[3px\]{gap:3px}.gap-px{gap:1px}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem*var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px*var(--tw-divide-y-reverse))}.divide-fb-border\/30>:not([hidden])~:not([hidden]){border-color:rgba(51,65,85,.3)}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-bl-md{border-bottom-left-radius:.375rem}.rounded-br-md{border-bottom-right-radius:.375rem}.rounded-tl-md{border-top-left-radius:.375rem}.rounded-tr-md{border-top-right-radius:.375rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-accent{--tw-border-opacity:1;border-color:rgb(64 128 224/var(--tw-border-opacity,1))}.border-accent-dark{--tw-border-opacity:1;border-color:rgb(32 96 176/var(--tw-border-opacity,1))}.border-accent-dark\/0{border-color:rgba(32,96,176,0)}.border-accent-dark\/10{border-color:rgba(32,96,176,.1)}.border-accent-dark\/100{border-color:#2060b0}.border-accent-dark\/15{border-color:rgba(32,96,176,.15)}.border-accent-dark\/20{border-color:rgba(32,96,176,.2)}.border-accent-dark\/25{border-color:rgba(32,96,176,.25)}.border-accent-dark\/30{border-color:rgba(32,96,176,.3)}.border-accent-dark\/35{border-color:rgba(32,96,176,.35)}.border-accent-dark\/40{border-color:rgba(32,96,176,.4)}.border-accent-dark\/45{border-color:rgba(32,96,176,.45)}.border-accent-dark\/5{border-color:rgba(32,96,176,.05)}.border-accent-dark\/50{border-color:rgba(32,96,176,.5)}.border-accent-dark\/55{border-color:rgba(32,96,176,.55)}.border-accent-dark\/60{border-color:rgba(32,96,176,.6)}.border-accent-dark\/65{border-color:rgba(32,96,176,.65)}.border-accent-dark\/70{border-color:rgba(32,96,176,.7)}.border-accent-dark\/75{border-color:rgba(32,96,176,.75)}.border-accent-dark\/80{border-color:rgba(32,96,176,.8)}.border-accent-dark\/85{border-color:rgba(32,96,176,.85)}.border-accent-dark\/90{border-color:rgba(32,96,176,.9)}.border-accent-dark\/95{border-color:rgba(32,96,176,.95)}.border-accent-light{--tw-border-opacity:1;border-color:rgb(96 160 255/var(--tw-border-opacity,1))}.border-accent-light\/0{border-color:rgba(96,160,255,0)}.border-accent-light\/10{border-color:rgba(96,160,255,.1)}.border-accent-light\/100{border-color:#60a0ff}.border-accent-light\/15{border-color:rgba(96,160,255,.15)}.border-accent-light\/20{border-color:rgba(96,160,255,.2)}.border-accent-light\/25{border-color:rgba(96,160,255,.25)}.border-accent-light\/30{border-color:rgba(96,160,255,.3)}.border-accent-light\/35{border-color:rgba(96,160,255,.35)}.border-accent-light\/40{border-color:rgba(96,160,255,.4)}.border-accent-light\/45{border-color:rgba(96,160,255,.45)}.border-accent-light\/5{border-color:rgba(96,160,255,.05)}.border-accent-light\/50{border-color:rgba(96,160,255,.5)}.border-accent-light\/55{border-color:rgba(96,160,255,.55)}.border-accent-light\/60{border-color:rgba(96,160,255,.6)}.border-accent-light\/65{border-color:rgba(96,160,255,.65)}.border-accent-light\/70{border-color:rgba(96,160,255,.7)}.border-accent-light\/75{border-color:rgba(96,160,255,.75)}.border-accent-light\/80{border-color:rgba(96,160,255,.8)}.border-accent-light\/85{border-color:rgba(96,160,255,.85)}.border-accent-light\/90{border-color:rgba(96,160,255,.9)}.border-accent-light\/95{border-color:rgba(96,160,255,.95)}.border-accent\/20{border-color:rgba(64,128,224,.2)}.border-accent\/40{border-color:rgba(64,128,224,.4)}.border-amber-100{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity,1))}.border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity,1))}.border-amber-50{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity,1))}.border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.border-amber-500\/30{border-color:rgba(245,158,11,.3)}.border-amber-600{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity,1))}.border-amber-700{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity,1))}.border-amber-700\/60{border-color:rgba(180,83,9,.6)}.border-amber-800{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity,1))}.border-amber-800\/60{border-color:rgba(146,64,14,.6)}.border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity,1))}.border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity,1))}.border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.border-blue-50{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity,1))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity,1))}.border-blue-700\/60{border-color:rgba(29,78,216,.6)}.border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity,1))}.border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity,1))}.border-dark-500{--tw-border-opacity:1;border-color:rgb(30 30 58/var(--tw-border-opacity,1))}.border-dark-500\/0{border-color:rgba(30,30,58,0)}.border-dark-500\/10{border-color:rgba(30,30,58,.1)}.border-dark-500\/100{border-color:#1e1e3a}.border-dark-500\/15{border-color:rgba(30,30,58,.15)}.border-dark-500\/20{border-color:rgba(30,30,58,.2)}.border-dark-500\/25{border-color:rgba(30,30,58,.25)}.border-dark-500\/30{border-color:rgba(30,30,58,.3)}.border-dark-500\/35{border-color:rgba(30,30,58,.35)}.border-dark-500\/40{border-color:rgba(30,30,58,.4)}.border-dark-500\/45{border-color:rgba(30,30,58,.45)}.border-dark-500\/5{border-color:rgba(30,30,58,.05)}.border-dark-500\/50{border-color:rgba(30,30,58,.5)}.border-dark-500\/55{border-color:rgba(30,30,58,.55)}.border-dark-500\/60{border-color:rgba(30,30,58,.6)}.border-dark-500\/65{border-color:rgba(30,30,58,.65)}.border-dark-500\/70{border-color:rgba(30,30,58,.7)}.border-dark-500\/75{border-color:rgba(30,30,58,.75)}.border-dark-500\/80{border-color:rgba(30,30,58,.8)}.border-dark-500\/85{border-color:rgba(30,30,58,.85)}.border-dark-500\/90{border-color:rgba(30,30,58,.9)}.border-dark-500\/95{border-color:rgba(30,30,58,.95)}.border-dark-600{--tw-border-opacity:1;border-color:rgb(24 24 48/var(--tw-border-opacity,1))}.border-dark-600\/0{border-color:rgba(24,24,48,0)}.border-dark-600\/10{border-color:rgba(24,24,48,.1)}.border-dark-600\/100{border-color:#181830}.border-dark-600\/15{border-color:rgba(24,24,48,.15)}.border-dark-600\/20{border-color:rgba(24,24,48,.2)}.border-dark-600\/25{border-color:rgba(24,24,48,.25)}.border-dark-600\/30{border-color:rgba(24,24,48,.3)}.border-dark-600\/35{border-color:rgba(24,24,48,.35)}.border-dark-600\/40{border-color:rgba(24,24,48,.4)}.border-dark-600\/45{border-color:rgba(24,24,48,.45)}.border-dark-600\/5{border-color:rgba(24,24,48,.05)}.border-dark-600\/50{border-color:rgba(24,24,48,.5)}.border-dark-600\/55{border-color:rgba(24,24,48,.55)}.border-dark-600\/60{border-color:rgba(24,24,48,.6)}.border-dark-600\/65{border-color:rgba(24,24,48,.65)}.border-dark-600\/70{border-color:rgba(24,24,48,.7)}.border-dark-600\/75{border-color:rgba(24,24,48,.75)}.border-dark-600\/80{border-color:rgba(24,24,48,.8)}.border-dark-600\/85{border-color:rgba(24,24,48,.85)}.border-dark-600\/90{border-color:rgba(24,24,48,.9)}.border-dark-600\/95{border-color:rgba(24,24,48,.95)}.border-dark-700{--tw-border-opacity:1;border-color:rgb(16 16 30/var(--tw-border-opacity,1))}.border-dark-700\/0{border-color:rgba(16,16,30,0)}.border-dark-700\/10{border-color:rgba(16,16,30,.1)}.border-dark-700\/100{border-color:#10101e}.border-dark-700\/15{border-color:rgba(16,16,30,.15)}.border-dark-700\/20{border-color:rgba(16,16,30,.2)}.border-dark-700\/25{border-color:rgba(16,16,30,.25)}.border-dark-700\/30{border-color:rgba(16,16,30,.3)}.border-dark-700\/35{border-color:rgba(16,16,30,.35)}.border-dark-700\/40{border-color:rgba(16,16,30,.4)}.border-dark-700\/45{border-color:rgba(16,16,30,.45)}.border-dark-700\/5{border-color:rgba(16,16,30,.05)}.border-dark-700\/50{border-color:rgba(16,16,30,.5)}.border-dark-700\/55{border-color:rgba(16,16,30,.55)}.border-dark-700\/60{border-color:rgba(16,16,30,.6)}.border-dark-700\/65{border-color:rgba(16,16,30,.65)}.border-dark-700\/70{border-color:rgba(16,16,30,.7)}.border-dark-700\/75{border-color:rgba(16,16,30,.75)}.border-dark-700\/80{border-color:rgba(16,16,30,.8)}.border-dark-700\/85{border-color:rgba(16,16,30,.85)}.border-dark-700\/90{border-color:rgba(16,16,30,.9)}.border-dark-700\/95{border-color:rgba(16,16,30,.95)}.border-dark-800{--tw-border-opacity:1;border-color:rgb(10 10 18/var(--tw-border-opacity,1))}.border-dark-800\/0{border-color:rgba(10,10,18,0)}.border-dark-800\/10{border-color:rgba(10,10,18,.1)}.border-dark-800\/100{border-color:#0a0a12}.border-dark-800\/15{border-color:rgba(10,10,18,.15)}.border-dark-800\/20{border-color:rgba(10,10,18,.2)}.border-dark-800\/25{border-color:rgba(10,10,18,.25)}.border-dark-800\/30{border-color:rgba(10,10,18,.3)}.border-dark-800\/35{border-color:rgba(10,10,18,.35)}.border-dark-800\/40{border-color:rgba(10,10,18,.4)}.border-dark-800\/45{border-color:rgba(10,10,18,.45)}.border-dark-800\/5{border-color:rgba(10,10,18,.05)}.border-dark-800\/50{border-color:rgba(10,10,18,.5)}.border-dark-800\/55{border-color:rgba(10,10,18,.55)}.border-dark-800\/60{border-color:rgba(10,10,18,.6)}.border-dark-800\/65{border-color:rgba(10,10,18,.65)}.border-dark-800\/70{border-color:rgba(10,10,18,.7)}.border-dark-800\/75{border-color:rgba(10,10,18,.75)}.border-dark-800\/80{border-color:rgba(10,10,18,.8)}.border-dark-800\/85{border-color:rgba(10,10,18,.85)}.border-dark-800\/90{border-color:rgba(10,10,18,.9)}.border-dark-800\/95{border-color:rgba(10,10,18,.95)}.border-dark-900{--tw-border-opacity:1;border-color:rgb(5 5 8/var(--tw-border-opacity,1))}.border-dark-900\/0{border-color:rgba(5,5,8,0)}.border-dark-900\/10{border-color:rgba(5,5,8,.1)}.border-dark-900\/100{border-color:#050508}.border-dark-900\/15{border-color:rgba(5,5,8,.15)}.border-dark-900\/20{border-color:rgba(5,5,8,.2)}.border-dark-900\/25{border-color:rgba(5,5,8,.25)}.border-dark-900\/30{border-color:rgba(5,5,8,.3)}.border-dark-900\/35{border-color:rgba(5,5,8,.35)}.border-dark-900\/40{border-color:rgba(5,5,8,.4)}.border-dark-900\/45{border-color:rgba(5,5,8,.45)}.border-dark-900\/5{border-color:rgba(5,5,8,.05)}.border-dark-900\/50{border-color:rgba(5,5,8,.5)}.border-dark-900\/55{border-color:rgba(5,5,8,.55)}.border-dark-900\/60{border-color:rgba(5,5,8,.6)}.border-dark-900\/65{border-color:rgba(5,5,8,.65)}.border-dark-900\/70{border-color:rgba(5,5,8,.7)}.border-dark-900\/75{border-color:rgba(5,5,8,.75)}.border-dark-900\/80{border-color:rgba(5,5,8,.8)}.border-dark-900\/85{border-color:rgba(5,5,8,.85)}.border-dark-900\/90{border-color:rgba(5,5,8,.9)}.border-dark-900\/95{border-color:rgba(5,5,8,.95)}.border-emerald-700\/60{border-color:rgba(4,120,87,.6)}.border-emerald-800\/60{border-color:rgba(6,95,70,.6)}.border-fb-border{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity,1))}.border-fb-border\/30{border-color:rgba(51,65,85,.3)}.border-fb-border\/40{border-color:rgba(51,65,85,.4)}.border-fb-border\/50{border-color:rgba(51,65,85,.5)}.border-fb-border\/60{border-color:rgba(51,65,85,.6)}.border-fb-border\/70{border-color:rgba(51,65,85,.7)}.border-fb-good\/40{border-color:rgba(34,197,94,.4)}.border-fb-good\/50{border-color:rgba(34,197,94,.5)}.border-fb-low\/40{border-color:rgba(239,68,68,.4)}.border-fb-primary{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity,1))}.border-fb-primary\/40{border-color:rgba(14,165,233,.4)}.border-fb-primary\/50{border-color:rgba(14,165,233,.5)}.border-fb-textDim{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity,1))}.border-gold{--tw-border-opacity:1;border-color:rgb(232 192 64/var(--tw-border-opacity,1))}.border-gold\/20{border-color:rgba(232,192,64,.2)}.border-gold\/40{border-color:rgba(232,192,64,.4)}.border-gold\/50{border-color:rgba(232,192,64,.5)}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.border-gray-50{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity,1))}.border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity,1))}.border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.border-gray-700\/60{border-color:rgba(55,65,81,.6)}.border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.border-gray-800\/50{border-color:rgba(31,41,55,.5)}.border-gray-800\/70{border-color:rgba(31,41,55,.7)}.border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity,1))}.border-green-100{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity,1))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.border-green-300{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity,1))}.border-green-400{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity,1))}.border-green-50{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity,1))}.border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity,1))}.border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity,1))}.border-green-700{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity,1))}.border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity,1))}.border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity,1))}.border-indigo-100{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity,1))}.border-indigo-200{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity,1))}.border-indigo-300{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity,1))}.border-indigo-400{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity,1))}.border-indigo-50{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity,1))}.border-indigo-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity,1))}.border-indigo-600{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity,1))}.border-indigo-700{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity,1))}.border-indigo-800{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity,1))}.border-indigo-900{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity,1))}.border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.border-pink-100{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity,1))}.border-pink-200{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity,1))}.border-pink-300{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity,1))}.border-pink-400{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity,1))}.border-pink-50{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity,1))}.border-pink-500{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity,1))}.border-pink-600{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity,1))}.border-pink-700{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity,1))}.border-pink-800{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity,1))}.border-pink-900{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity,1))}.border-purple-100{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity,1))}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.border-purple-300{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity,1))}.border-purple-400{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity,1))}.border-purple-400\/30{border-color:rgba(192,132,252,.3)}.border-purple-400\/40{border-color:rgba(192,132,252,.4)}.border-purple-50{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity,1))}.border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity,1))}.border-purple-600{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity,1))}.border-purple-700{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity,1))}.border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity,1))}.border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity,1))}.border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.border-red-50{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity,1))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.border-red-500\/40{border-color:rgba(239,68,68,.4)}.border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity,1))}.border-red-700\/60{border-color:rgba(185,28,28,.6)}.border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.border-red-800\/70{border-color:rgba(153,27,27,.7)}.border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity,1))}.border-red-900\/30{border-color:rgba(127,29,29,.3)}.border-red-900\/50{border-color:rgba(127,29,29,.5)}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity,1))}.border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity,1))}.border-slate-50{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity,1))}.border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity,1))}.border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity,1))}.border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity,1))}.border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity,1))}.border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity,1))}.border-teal-700\/60{border-color:rgba(15,118,110,.6)}.border-violet-100{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity,1))}.border-yellow-100{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity,1))}.border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity,1))}.border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity,1))}.border-yellow-400{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity,1))}.border-yellow-400\/40{border-color:rgba(250,204,21,.4)}.border-yellow-50{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity,1))}.border-yellow-500{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity,1))}.border-yellow-600{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity,1))}.border-yellow-700{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity,1))}.border-yellow-800{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity,1))}.border-yellow-900{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity,1))}.\!bg-accent{--tw-bg-opacity:1!important;background-color:rgb(64 128 224/var(--tw-bg-opacity,1))!important}.bg-accent{--tw-bg-opacity:1;background-color:rgb(64 128 224/var(--tw-bg-opacity,1))}.bg-accent-dark{--tw-bg-opacity:1;background-color:rgb(32 96 176/var(--tw-bg-opacity,1))}.bg-accent-dark\/0{background-color:rgba(32,96,176,0)}.bg-accent-dark\/10{background-color:rgba(32,96,176,.1)}.bg-accent-dark\/100{background-color:#2060b0}.bg-accent-dark\/15{background-color:rgba(32,96,176,.15)}.bg-accent-dark\/20{background-color:rgba(32,96,176,.2)}.bg-accent-dark\/25{background-color:rgba(32,96,176,.25)}.bg-accent-dark\/30{background-color:rgba(32,96,176,.3)}.bg-accent-dark\/35{background-color:rgba(32,96,176,.35)}.bg-accent-dark\/40{background-color:rgba(32,96,176,.4)}.bg-accent-dark\/45{background-color:rgba(32,96,176,.45)}.bg-accent-dark\/5{background-color:rgba(32,96,176,.05)}.bg-accent-dark\/50{background-color:rgba(32,96,176,.5)}.bg-accent-dark\/55{background-color:rgba(32,96,176,.55)}.bg-accent-dark\/60{background-color:rgba(32,96,176,.6)}.bg-accent-dark\/65{background-color:rgba(32,96,176,.65)}.bg-accent-dark\/70{background-color:rgba(32,96,176,.7)}.bg-accent-dark\/75{background-color:rgba(32,96,176,.75)}.bg-accent-dark\/80{background-color:rgba(32,96,176,.8)}.bg-accent-dark\/85{background-color:rgba(32,96,176,.85)}.bg-accent-dark\/90{background-color:rgba(32,96,176,.9)}.bg-accent-dark\/95{background-color:rgba(32,96,176,.95)}.bg-accent-light{--tw-bg-opacity:1;background-color:rgb(96 160 255/var(--tw-bg-opacity,1))}.bg-accent-light\/0{background-color:rgba(96,160,255,0)}.bg-accent-light\/10{background-color:rgba(96,160,255,.1)}.bg-accent-light\/100{background-color:#60a0ff}.bg-accent-light\/15{background-color:rgba(96,160,255,.15)}.bg-accent-light\/20{background-color:rgba(96,160,255,.2)}.bg-accent-light\/25{background-color:rgba(96,160,255,.25)}.bg-accent-light\/30{background-color:rgba(96,160,255,.3)}.bg-accent-light\/35{background-color:rgba(96,160,255,.35)}.bg-accent-light\/40{background-color:rgba(96,160,255,.4)}.bg-accent-light\/45{background-color:rgba(96,160,255,.45)}.bg-accent-light\/5{background-color:rgba(96,160,255,.05)}.bg-accent-light\/50{background-color:rgba(96,160,255,.5)}.bg-accent-light\/55{background-color:rgba(96,160,255,.55)}.bg-accent-light\/60{background-color:rgba(96,160,255,.6)}.bg-accent-light\/65{background-color:rgba(96,160,255,.65)}.bg-accent-light\/70{background-color:rgba(96,160,255,.7)}.bg-accent-light\/75{background-color:rgba(96,160,255,.75)}.bg-accent-light\/80{background-color:rgba(96,160,255,.8)}.bg-accent-light\/85{background-color:rgba(96,160,255,.85)}.bg-accent-light\/90{background-color:rgba(96,160,255,.9)}.bg-accent-light\/95{background-color:rgba(96,160,255,.95)}.bg-accent\/10{background-color:rgba(64,128,224,.1)}.bg-accent\/20{background-color:rgba(64,128,224,.2)}.bg-accent\/30{background-color:rgba(64,128,224,.3)}.bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.bg-amber-200{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity,1))}.bg-amber-300{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity,1))}.bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity,1))}.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.bg-amber-500\/10{background-color:rgba(245,158,11,.1)}.bg-amber-500\/5{background-color:rgba(245,158,11,.05)}.bg-amber-600{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity,1))}.bg-amber-700{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity,1))}.bg-amber-800{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity,1))}.bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity,1))}.bg-amber-900\/30{background-color:rgba(120,53,15,.3)}.bg-amber-900\/60{background-color:rgba(120,53,15,.6)}.bg-amber-900\/80{background-color:rgba(120,53,15,.8)}.bg-black\/30{background-color:rgba(0,0,0,.3)}.bg-black\/40{background-color:rgba(0,0,0,.4)}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-black\/55{background-color:rgba(0,0,0,.55)}.bg-black\/60{background-color:rgba(0,0,0,.6)}.bg-black\/70{background-color:rgba(0,0,0,.7)}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.bg-blue-200{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity,1))}.bg-blue-300{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity,1))}.bg-blue-400{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity,1))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-blue-500\/10{background-color:rgba(59,130,246,.1)}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-blue-700{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.bg-blue-800{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity,1))}.bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity,1))}.bg-blue-900\/40{background-color:rgba(30,58,138,.4)}.bg-current{background-color:currentColor}.bg-cyan-400{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity,1))}.bg-dark-500{--tw-bg-opacity:1;background-color:rgb(30 30 58/var(--tw-bg-opacity,1))}.bg-dark-500\/0{background-color:rgba(30,30,58,0)}.bg-dark-500\/10{background-color:rgba(30,30,58,.1)}.bg-dark-500\/100{background-color:#1e1e3a}.bg-dark-500\/15{background-color:rgba(30,30,58,.15)}.bg-dark-500\/20{background-color:rgba(30,30,58,.2)}.bg-dark-500\/25{background-color:rgba(30,30,58,.25)}.bg-dark-500\/30{background-color:rgba(30,30,58,.3)}.bg-dark-500\/35{background-color:rgba(30,30,58,.35)}.bg-dark-500\/40{background-color:rgba(30,30,58,.4)}.bg-dark-500\/45{background-color:rgba(30,30,58,.45)}.bg-dark-500\/5{background-color:rgba(30,30,58,.05)}.bg-dark-500\/50{background-color:rgba(30,30,58,.5)}.bg-dark-500\/55{background-color:rgba(30,30,58,.55)}.bg-dark-500\/60{background-color:rgba(30,30,58,.6)}.bg-dark-500\/65{background-color:rgba(30,30,58,.65)}.bg-dark-500\/70{background-color:rgba(30,30,58,.7)}.bg-dark-500\/75{background-color:rgba(30,30,58,.75)}.bg-dark-500\/80{background-color:rgba(30,30,58,.8)}.bg-dark-500\/85{background-color:rgba(30,30,58,.85)}.bg-dark-500\/90{background-color:rgba(30,30,58,.9)}.bg-dark-500\/95{background-color:rgba(30,30,58,.95)}.bg-dark-600{--tw-bg-opacity:1;background-color:rgb(24 24 48/var(--tw-bg-opacity,1))}.bg-dark-600\/0{background-color:rgba(24,24,48,0)}.bg-dark-600\/10{background-color:rgba(24,24,48,.1)}.bg-dark-600\/100{background-color:#181830}.bg-dark-600\/15{background-color:rgba(24,24,48,.15)}.bg-dark-600\/20{background-color:rgba(24,24,48,.2)}.bg-dark-600\/25{background-color:rgba(24,24,48,.25)}.bg-dark-600\/30{background-color:rgba(24,24,48,.3)}.bg-dark-600\/35{background-color:rgba(24,24,48,.35)}.bg-dark-600\/40{background-color:rgba(24,24,48,.4)}.bg-dark-600\/45{background-color:rgba(24,24,48,.45)}.bg-dark-600\/5{background-color:rgba(24,24,48,.05)}.bg-dark-600\/50{background-color:rgba(24,24,48,.5)}.bg-dark-600\/55{background-color:rgba(24,24,48,.55)}.bg-dark-600\/60{background-color:rgba(24,24,48,.6)}.bg-dark-600\/65{background-color:rgba(24,24,48,.65)}.bg-dark-600\/70{background-color:rgba(24,24,48,.7)}.bg-dark-600\/75{background-color:rgba(24,24,48,.75)}.bg-dark-600\/80{background-color:rgba(24,24,48,.8)}.bg-dark-600\/85{background-color:rgba(24,24,48,.85)}.bg-dark-600\/90{background-color:rgba(24,24,48,.9)}.bg-dark-600\/95{background-color:rgba(24,24,48,.95)}.bg-dark-700{--tw-bg-opacity:1;background-color:rgb(16 16 30/var(--tw-bg-opacity,1))}.bg-dark-700\/0{background-color:rgba(16,16,30,0)}.bg-dark-700\/10{background-color:rgba(16,16,30,.1)}.bg-dark-700\/100{background-color:#10101e}.bg-dark-700\/15{background-color:rgba(16,16,30,.15)}.bg-dark-700\/20{background-color:rgba(16,16,30,.2)}.bg-dark-700\/25{background-color:rgba(16,16,30,.25)}.bg-dark-700\/30{background-color:rgba(16,16,30,.3)}.bg-dark-700\/35{background-color:rgba(16,16,30,.35)}.bg-dark-700\/40{background-color:rgba(16,16,30,.4)}.bg-dark-700\/45{background-color:rgba(16,16,30,.45)}.bg-dark-700\/5{background-color:rgba(16,16,30,.05)}.bg-dark-700\/50{background-color:rgba(16,16,30,.5)}.bg-dark-700\/55{background-color:rgba(16,16,30,.55)}.bg-dark-700\/60{background-color:rgba(16,16,30,.6)}.bg-dark-700\/65{background-color:rgba(16,16,30,.65)}.bg-dark-700\/70{background-color:rgba(16,16,30,.7)}.bg-dark-700\/75{background-color:rgba(16,16,30,.75)}.bg-dark-700\/80{background-color:rgba(16,16,30,.8)}.bg-dark-700\/85{background-color:rgba(16,16,30,.85)}.bg-dark-700\/90{background-color:rgba(16,16,30,.9)}.bg-dark-700\/95{background-color:rgba(16,16,30,.95)}.bg-dark-800{--tw-bg-opacity:1;background-color:rgb(10 10 18/var(--tw-bg-opacity,1))}.bg-dark-800\/0{background-color:rgba(10,10,18,0)}.bg-dark-800\/10{background-color:rgba(10,10,18,.1)}.bg-dark-800\/100{background-color:#0a0a12}.bg-dark-800\/15{background-color:rgba(10,10,18,.15)}.bg-dark-800\/20{background-color:rgba(10,10,18,.2)}.bg-dark-800\/25{background-color:rgba(10,10,18,.25)}.bg-dark-800\/30{background-color:rgba(10,10,18,.3)}.bg-dark-800\/35{background-color:rgba(10,10,18,.35)}.bg-dark-800\/40{background-color:rgba(10,10,18,.4)}.bg-dark-800\/45{background-color:rgba(10,10,18,.45)}.bg-dark-800\/5{background-color:rgba(10,10,18,.05)}.bg-dark-800\/50{background-color:rgba(10,10,18,.5)}.bg-dark-800\/55{background-color:rgba(10,10,18,.55)}.bg-dark-800\/60{background-color:rgba(10,10,18,.6)}.bg-dark-800\/65{background-color:rgba(10,10,18,.65)}.bg-dark-800\/70{background-color:rgba(10,10,18,.7)}.bg-dark-800\/75{background-color:rgba(10,10,18,.75)}.bg-dark-800\/80{background-color:rgba(10,10,18,.8)}.bg-dark-800\/85{background-color:rgba(10,10,18,.85)}.bg-dark-800\/90{background-color:rgba(10,10,18,.9)}.bg-dark-800\/95{background-color:rgba(10,10,18,.95)}.bg-dark-900{--tw-bg-opacity:1;background-color:rgb(5 5 8/var(--tw-bg-opacity,1))}.bg-dark-900\/0{background-color:rgba(5,5,8,0)}.bg-dark-900\/10{background-color:rgba(5,5,8,.1)}.bg-dark-900\/100{background-color:#050508}.bg-dark-900\/15{background-color:rgba(5,5,8,.15)}.bg-dark-900\/20{background-color:rgba(5,5,8,.2)}.bg-dark-900\/25{background-color:rgba(5,5,8,.25)}.bg-dark-900\/30{background-color:rgba(5,5,8,.3)}.bg-dark-900\/35{background-color:rgba(5,5,8,.35)}.bg-dark-900\/40{background-color:rgba(5,5,8,.4)}.bg-dark-900\/45{background-color:rgba(5,5,8,.45)}.bg-dark-900\/5{background-color:rgba(5,5,8,.05)}.bg-dark-900\/50{background-color:rgba(5,5,8,.5)}.bg-dark-900\/55{background-color:rgba(5,5,8,.55)}.bg-dark-900\/60{background-color:rgba(5,5,8,.6)}.bg-dark-900\/65{background-color:rgba(5,5,8,.65)}.bg-dark-900\/70{background-color:rgba(5,5,8,.7)}.bg-dark-900\/75{background-color:rgba(5,5,8,.75)}.bg-dark-900\/80{background-color:rgba(5,5,8,.8)}.bg-dark-900\/85{background-color:rgba(5,5,8,.85)}.bg-dark-900\/90{background-color:rgba(5,5,8,.9)}.bg-dark-900\/95{background-color:rgba(5,5,8,.95)}.bg-emerald-400{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity,1))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-emerald-500\/10{background-color:rgba(16,185,129,.1)}.bg-emerald-500\/5{background-color:rgba(16,185,129,.05)}.bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.bg-fb-bg{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-fb-bg\/40{background-color:rgba(15,23,42,.4)}.bg-fb-bg\/50{background-color:rgba(15,23,42,.5)}.bg-fb-bg\/60{background-color:rgba(15,23,42,.6)}.bg-fb-bg\/95{background-color:rgba(15,23,42,.95)}.bg-fb-border{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity,1))}.bg-fb-card{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.bg-fb-card\/50{background-color:rgba(30,41,59,.5)}.bg-fb-card\/60{background-color:rgba(30,41,59,.6)}.bg-fb-card\/80{background-color:rgba(30,41,59,.8)}.bg-fb-cardMuted{--tw-bg-opacity:1;background-color:rgb(11 18 32/var(--tw-bg-opacity,1))}.bg-fb-good{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-fb-good\/30{background-color:rgba(34,197,94,.3)}.bg-fb-low{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-fb-low\/15{background-color:rgba(239,68,68,.15)}.bg-fb-low\/30{background-color:rgba(239,68,68,.3)}.bg-fb-mid{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.bg-fb-primary{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.bg-fb-primary\/20{background-color:rgba(14,165,233,.2)}.bg-fb-sidebar{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.bg-fb-sidebar\/80{background-color:rgba(17,24,39,.8)}.bg-fb-sidebar\/95{background-color:rgba(17,24,39,.95)}.bg-gold{--tw-bg-opacity:1;background-color:rgb(232 192 64/var(--tw-bg-opacity,1))}.bg-gold\/10{background-color:rgba(232,192,64,.1)}.bg-gold\/5{background-color:rgba(232,192,64,.05)}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.bg-gray-500\/40{background-color:hsla(220,9%,46%,.4)}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-gray-800\/50{background-color:rgba(31,41,55,.5)}.bg-gray-800\/60{background-color:rgba(31,41,55,.6)}.bg-gray-800\/70{background-color:rgba(31,41,55,.7)}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity,1))}.bg-green-300{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity,1))}.bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity,1))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.bg-green-800{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity,1))}.bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.bg-green-900\/30{background-color:rgba(20,83,45,.3)}.bg-green-900\/40{background-color:rgba(20,83,45,.4)}.bg-green-900\/50{background-color:rgba(20,83,45,.5)}.bg-green-900\/60{background-color:rgba(20,83,45,.6)}.bg-green-900\/80{background-color:rgba(20,83,45,.8)}.bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity,1))}.bg-indigo-200{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity,1))}.bg-indigo-300{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity,1))}.bg-indigo-400{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity,1))}.bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.bg-indigo-500{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity,1))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.bg-indigo-700{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.bg-indigo-800{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity,1))}.bg-indigo-900{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity,1))}.bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity,1))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity,1))}.bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity,1))}.bg-pink-300{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity,1))}.bg-pink-400{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity,1))}.bg-pink-50{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity,1))}.bg-pink-500{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity,1))}.bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.bg-pink-700{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity,1))}.bg-pink-800{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity,1))}.bg-pink-900{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity,1))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity,1))}.bg-purple-300{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity,1))}.bg-purple-400{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity,1))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.bg-purple-500\/10{background-color:rgba(168,85,247,.1)}.bg-purple-500\/20{background-color:rgba(168,85,247,.2)}.bg-purple-500\/40{background-color:rgba(168,85,247,.4)}.bg-purple-600{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity,1))}.bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.bg-purple-800{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity,1))}.bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity,1))}.bg-purple-900\/30{background-color:rgba(88,28,135,.3)}.bg-purple-900\/40{background-color:rgba(88,28,135,.4)}.bg-purple-900\/60{background-color:rgba(88,28,135,.6)}.bg-purple-900\/80{background-color:rgba(88,28,135,.8)}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.bg-red-200{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity,1))}.bg-red-300{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity,1))}.bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-red-500\/10{background-color:rgba(239,68,68,.1)}.bg-red-500\/5{background-color:rgba(239,68,68,.05)}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.bg-red-600\/80{background-color:rgba(220,38,38,.8)}.bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.bg-red-800{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity,1))}.bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.bg-red-900\/10{background-color:rgba(127,29,29,.1)}.bg-red-900\/30{background-color:rgba(127,29,29,.3)}.bg-red-900\/40{background-color:rgba(127,29,29,.4)}.bg-red-900\/95{background-color:rgba(127,29,29,.95)}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity,1))}.bg-slate-400{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity,1))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity,1))}.bg-slate-600{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity,1))}.bg-slate-700{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity,1))}.bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-teal-500\/10{background-color:rgba(20,184,166,.1)}.bg-transparent{background-color:transparent}.bg-violet-200{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity,1))}.bg-yellow-300{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity,1))}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity,1))}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity,1))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.bg-yellow-500\/10{background-color:rgba(234,179,8,.1)}.bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.bg-yellow-700{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity,1))}.bg-yellow-800{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity,1))}.bg-yellow-900{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity,1))}.bg-yellow-900\/30{background-color:rgba(113,63,18,.3)}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-accent-light{--tw-gradient-from:#60a0ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(96,160,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-black\/70{--tw-gradient-from:rgba(0,0,0,.7) var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-black\/80{--tw-gradient-from:rgba(0,0,0,.8) var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-black\/90{--tw-gradient-from:rgba(0,0,0,.9) var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-black\/40{--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),rgba(0,0,0,.4) var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-purple-400{--tw-gradient-to:#c084fc var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.object-right{-o-object-position:right;object-position:right}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-px{padding-top:1px;padding-bottom:1px}.pb-1{padding-bottom:.25rem}.pb-10{padding-bottom:2.5rem}.pb-16{padding-bottom:4rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pb-8{padding-bottom:2rem}.pl-0{padding-left:0}.pl-10{padding-left:2.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-8{padding-left:2rem}.pr-0{padding-right:0}.pr-1{padding-right:.25rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-24{padding-top:6rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.font-display{font-family:Inter,system-ui,sans-serif}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-6xl{font-size:3.75rem;line-height:1}.text-9xl{font-size:8rem;line-height:1}.text-\[0\.625rem\]{font-size:.625rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-5{line-height:1.25rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.\!text-white{--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity,1))!important}.text-\[\#FF4B4B\]{--tw-text-opacity:1;color:rgb(255 75 75/var(--tw-text-opacity,1))}.text-accent{--tw-text-opacity:1;color:rgb(64 128 224/var(--tw-text-opacity,1))}.text-accent-dark{--tw-text-opacity:1;color:rgb(32 96 176/var(--tw-text-opacity,1))}.text-accent-dark\/0{color:rgba(32,96,176,0)}.text-accent-dark\/10{color:rgba(32,96,176,.1)}.text-accent-dark\/100{color:#2060b0}.text-accent-dark\/15{color:rgba(32,96,176,.15)}.text-accent-dark\/20{color:rgba(32,96,176,.2)}.text-accent-dark\/25{color:rgba(32,96,176,.25)}.text-accent-dark\/30{color:rgba(32,96,176,.3)}.text-accent-dark\/35{color:rgba(32,96,176,.35)}.text-accent-dark\/40{color:rgba(32,96,176,.4)}.text-accent-dark\/45{color:rgba(32,96,176,.45)}.text-accent-dark\/5{color:rgba(32,96,176,.05)}.text-accent-dark\/50{color:rgba(32,96,176,.5)}.text-accent-dark\/55{color:rgba(32,96,176,.55)}.text-accent-dark\/60{color:rgba(32,96,176,.6)}.text-accent-dark\/65{color:rgba(32,96,176,.65)}.text-accent-dark\/70{color:rgba(32,96,176,.7)}.text-accent-dark\/75{color:rgba(32,96,176,.75)}.text-accent-dark\/80{color:rgba(32,96,176,.8)}.text-accent-dark\/85{color:rgba(32,96,176,.85)}.text-accent-dark\/90{color:rgba(32,96,176,.9)}.text-accent-dark\/95{color:rgba(32,96,176,.95)}.text-accent-light{--tw-text-opacity:1;color:rgb(96 160 255/var(--tw-text-opacity,1))}.text-accent-light\/0{color:rgba(96,160,255,0)}.text-accent-light\/10{color:rgba(96,160,255,.1)}.text-accent-light\/100{color:#60a0ff}.text-accent-light\/15{color:rgba(96,160,255,.15)}.text-accent-light\/20{color:rgba(96,160,255,.2)}.text-accent-light\/25{color:rgba(96,160,255,.25)}.text-accent-light\/30{color:rgba(96,160,255,.3)}.text-accent-light\/35{color:rgba(96,160,255,.35)}.text-accent-light\/40{color:rgba(96,160,255,.4)}.text-accent-light\/45{color:rgba(96,160,255,.45)}.text-accent-light\/5{color:rgba(96,160,255,.05)}.text-accent-light\/50{color:rgba(96,160,255,.5)}.text-accent-light\/55{color:rgba(96,160,255,.55)}.text-accent-light\/60{color:rgba(96,160,255,.6)}.text-accent-light\/65{color:rgba(96,160,255,.65)}.text-accent-light\/70{color:rgba(96,160,255,.7)}.text-accent-light\/75{color:rgba(96,160,255,.75)}.text-accent-light\/80{color:rgba(96,160,255,.8)}.text-accent-light\/85{color:rgba(96,160,255,.85)}.text-accent-light\/90{color:rgba(96,160,255,.9)}.text-accent-light\/95{color:rgba(96,160,255,.95)}.text-accent\/70{color:rgba(64,128,224,.7)}.text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity,1))}.text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}.text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}.text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.text-amber-400\/90{color:rgba(251,191,36,.9)}.text-amber-50{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity,1))}.text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity,1))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.text-blue-100{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity,1))}.text-blue-200{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity,1))}.text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-blue-400\/70{color:rgba(96,165,250,.7)}.text-blue-50{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity,1))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity,1))}.text-cyan-300{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity,1))}.text-cyan-300\/90{color:rgba(103,232,249,.9)}.text-cyan-400{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity,1))}.text-dark-500{--tw-text-opacity:1;color:rgb(30 30 58/var(--tw-text-opacity,1))}.text-dark-500\/0{color:rgba(30,30,58,0)}.text-dark-500\/10{color:rgba(30,30,58,.1)}.text-dark-500\/100{color:#1e1e3a}.text-dark-500\/15{color:rgba(30,30,58,.15)}.text-dark-500\/20{color:rgba(30,30,58,.2)}.text-dark-500\/25{color:rgba(30,30,58,.25)}.text-dark-500\/30{color:rgba(30,30,58,.3)}.text-dark-500\/35{color:rgba(30,30,58,.35)}.text-dark-500\/40{color:rgba(30,30,58,.4)}.text-dark-500\/45{color:rgba(30,30,58,.45)}.text-dark-500\/5{color:rgba(30,30,58,.05)}.text-dark-500\/50{color:rgba(30,30,58,.5)}.text-dark-500\/55{color:rgba(30,30,58,.55)}.text-dark-500\/60{color:rgba(30,30,58,.6)}.text-dark-500\/65{color:rgba(30,30,58,.65)}.text-dark-500\/70{color:rgba(30,30,58,.7)}.text-dark-500\/75{color:rgba(30,30,58,.75)}.text-dark-500\/80{color:rgba(30,30,58,.8)}.text-dark-500\/85{color:rgba(30,30,58,.85)}.text-dark-500\/90{color:rgba(30,30,58,.9)}.text-dark-500\/95{color:rgba(30,30,58,.95)}.text-dark-600{--tw-text-opacity:1;color:rgb(24 24 48/var(--tw-text-opacity,1))}.text-dark-600\/0{color:rgba(24,24,48,0)}.text-dark-600\/10{color:rgba(24,24,48,.1)}.text-dark-600\/100{color:#181830}.text-dark-600\/15{color:rgba(24,24,48,.15)}.text-dark-600\/20{color:rgba(24,24,48,.2)}.text-dark-600\/25{color:rgba(24,24,48,.25)}.text-dark-600\/30{color:rgba(24,24,48,.3)}.text-dark-600\/35{color:rgba(24,24,48,.35)}.text-dark-600\/40{color:rgba(24,24,48,.4)}.text-dark-600\/45{color:rgba(24,24,48,.45)}.text-dark-600\/5{color:rgba(24,24,48,.05)}.text-dark-600\/50{color:rgba(24,24,48,.5)}.text-dark-600\/55{color:rgba(24,24,48,.55)}.text-dark-600\/60{color:rgba(24,24,48,.6)}.text-dark-600\/65{color:rgba(24,24,48,.65)}.text-dark-600\/70{color:rgba(24,24,48,.7)}.text-dark-600\/75{color:rgba(24,24,48,.75)}.text-dark-600\/80{color:rgba(24,24,48,.8)}.text-dark-600\/85{color:rgba(24,24,48,.85)}.text-dark-600\/90{color:rgba(24,24,48,.9)}.text-dark-600\/95{color:rgba(24,24,48,.95)}.text-dark-700{--tw-text-opacity:1;color:rgb(16 16 30/var(--tw-text-opacity,1))}.text-dark-700\/0{color:rgba(16,16,30,0)}.text-dark-700\/10{color:rgba(16,16,30,.1)}.text-dark-700\/100{color:#10101e}.text-dark-700\/15{color:rgba(16,16,30,.15)}.text-dark-700\/20{color:rgba(16,16,30,.2)}.text-dark-700\/25{color:rgba(16,16,30,.25)}.text-dark-700\/30{color:rgba(16,16,30,.3)}.text-dark-700\/35{color:rgba(16,16,30,.35)}.text-dark-700\/40{color:rgba(16,16,30,.4)}.text-dark-700\/45{color:rgba(16,16,30,.45)}.text-dark-700\/5{color:rgba(16,16,30,.05)}.text-dark-700\/50{color:rgba(16,16,30,.5)}.text-dark-700\/55{color:rgba(16,16,30,.55)}.text-dark-700\/60{color:rgba(16,16,30,.6)}.text-dark-700\/65{color:rgba(16,16,30,.65)}.text-dark-700\/70{color:rgba(16,16,30,.7)}.text-dark-700\/75{color:rgba(16,16,30,.75)}.text-dark-700\/80{color:rgba(16,16,30,.8)}.text-dark-700\/85{color:rgba(16,16,30,.85)}.text-dark-700\/90{color:rgba(16,16,30,.9)}.text-dark-700\/95{color:rgba(16,16,30,.95)}.text-dark-800{--tw-text-opacity:1;color:rgb(10 10 18/var(--tw-text-opacity,1))}.text-dark-800\/0{color:rgba(10,10,18,0)}.text-dark-800\/10{color:rgba(10,10,18,.1)}.text-dark-800\/100{color:#0a0a12}.text-dark-800\/15{color:rgba(10,10,18,.15)}.text-dark-800\/20{color:rgba(10,10,18,.2)}.text-dark-800\/25{color:rgba(10,10,18,.25)}.text-dark-800\/30{color:rgba(10,10,18,.3)}.text-dark-800\/35{color:rgba(10,10,18,.35)}.text-dark-800\/40{color:rgba(10,10,18,.4)}.text-dark-800\/45{color:rgba(10,10,18,.45)}.text-dark-800\/5{color:rgba(10,10,18,.05)}.text-dark-800\/50{color:rgba(10,10,18,.5)}.text-dark-800\/55{color:rgba(10,10,18,.55)}.text-dark-800\/60{color:rgba(10,10,18,.6)}.text-dark-800\/65{color:rgba(10,10,18,.65)}.text-dark-800\/70{color:rgba(10,10,18,.7)}.text-dark-800\/75{color:rgba(10,10,18,.75)}.text-dark-800\/80{color:rgba(10,10,18,.8)}.text-dark-800\/85{color:rgba(10,10,18,.85)}.text-dark-800\/90{color:rgba(10,10,18,.9)}.text-dark-800\/95{color:rgba(10,10,18,.95)}.text-dark-900{--tw-text-opacity:1;color:rgb(5 5 8/var(--tw-text-opacity,1))}.text-dark-900\/0{color:rgba(5,5,8,0)}.text-dark-900\/10{color:rgba(5,5,8,.1)}.text-dark-900\/100{color:#050508}.text-dark-900\/15{color:rgba(5,5,8,.15)}.text-dark-900\/20{color:rgba(5,5,8,.2)}.text-dark-900\/25{color:rgba(5,5,8,.25)}.text-dark-900\/30{color:rgba(5,5,8,.3)}.text-dark-900\/35{color:rgba(5,5,8,.35)}.text-dark-900\/40{color:rgba(5,5,8,.4)}.text-dark-900\/45{color:rgba(5,5,8,.45)}.text-dark-900\/5{color:rgba(5,5,8,.05)}.text-dark-900\/50{color:rgba(5,5,8,.5)}.text-dark-900\/55{color:rgba(5,5,8,.55)}.text-dark-900\/60{color:rgba(5,5,8,.6)}.text-dark-900\/65{color:rgba(5,5,8,.65)}.text-dark-900\/70{color:rgba(5,5,8,.7)}.text-dark-900\/75{color:rgba(5,5,8,.75)}.text-dark-900\/80{color:rgba(5,5,8,.8)}.text-dark-900\/85{color:rgba(5,5,8,.85)}.text-dark-900\/90{color:rgba(5,5,8,.9)}.text-dark-900\/95{color:rgba(5,5,8,.95)}.text-emerald-300{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity,1))}.text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity,1))}.text-fb-accent{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-fb-gold{--tw-text-opacity:1;color:rgb(232 192 64/var(--tw-text-opacity,1))}.text-fb-good{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.text-fb-low{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-fb-mid{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.text-fb-primary{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity,1))}.text-fb-text{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.text-fb-text\/80{color:rgba(248,250,252,.8)}.text-fb-textDim{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-fb-textDim\/40{color:rgba(148,163,184,.4)}.text-fb-textDim\/60{color:rgba(148,163,184,.6)}.text-fb-textDim\/70{color:rgba(148,163,184,.7)}.text-gold{--tw-text-opacity:1;color:rgb(232 192 64/var(--tw-text-opacity,1))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-100{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity,1))}.text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.text-green-50{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity,1))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.text-green-900{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity,1))}.text-indigo-100{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity,1))}.text-indigo-200{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity,1))}.text-indigo-300{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity,1))}.text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity,1))}.text-indigo-50{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity,1))}.text-indigo-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity,1))}.text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.text-indigo-700{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}.text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity,1))}.text-indigo-900{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity,1))}.text-pink-100{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity,1))}.text-pink-200{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity,1))}.text-pink-300{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity,1))}.text-pink-400{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity,1))}.text-pink-50{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity,1))}.text-pink-500{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity,1))}.text-pink-600{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity,1))}.text-pink-700{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity,1))}.text-pink-800{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity,1))}.text-pink-900{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity,1))}.text-purple-100{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity,1))}.text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity,1))}.text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.text-purple-50{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity,1))}.text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.text-purple-800{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity,1))}.text-purple-900{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity,1))}.text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity,1))}.text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-red-400\/90{color:hsla(0,91%,71%,.9)}.text-red-50{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity,1))}.text-slate-100{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity,1))}.text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity,1))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.text-teal-300{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity,1))}.text-transparent{color:transparent}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/30{color:hsla(0,0%,100%,.3)}.text-yellow-100{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity,1))}.text-yellow-200{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity,1))}.text-yellow-300{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity,1))}.text-yellow-300\/80{color:rgba(253,224,71,.8)}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.text-yellow-50{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity,1))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity,1))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity,1))}.text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.overline{text-decoration-line:overline}.line-through{text-decoration-line:line-through}.placeholder-fb-textDim::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(148 163 184/var(--tw-placeholder-opacity,1))}.placeholder-fb-textDim::placeholder{--tw-placeholder-opacity:1;color:rgb(148 163 184/var(--tw-placeholder-opacity,1))}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.placeholder-gray-600::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(75 85 99/var(--tw-placeholder-opacity,1))}.placeholder-gray-600::placeholder{--tw-placeholder-opacity:1;color:rgb(75 85 99/var(--tw-placeholder-opacity,1))}.accent-accent{accent-color:#4080e0}.accent-fb-primary{accent-color:#0ea5e9}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-5{opacity:.05}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-\[0_0_10px_3px_rgba\(52\2c 211\2c 153\2c 0\.95\)\]{--tw-shadow:0 0 10px 3px rgba(52,211,153,.95);--tw-shadow-colored:0 0 10px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(192\2c 132\2c 252\2c 0\.55\)\]{--tw-shadow:0 0 12px rgba(192,132,252,.55);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(192\2c 132\2c 252\2c 0\.65\)\]{--tw-shadow:0 0 12px rgba(192,132,252,.65);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(216\2c 180\2c 254\2c 0\.65\)\]{--tw-shadow:0 0 12px rgba(216,180,254,.65);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(221\2c 214\2c 254\2c 0\.6\)\]{--tw-shadow:0 0 12px rgba(221,214,254,.6);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(251\2c 146\2c 60\2c 0\.55\)\]{--tw-shadow:0 0 12px rgba(251,146,60,.55);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(251\2c 146\2c 60\2c 0\.65\)\]{--tw-shadow:0 0 12px rgba(251,146,60,.65);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(96\2c 165\2c 250\2c 0\.55\)\]{--tw-shadow:0 0 12px rgba(96,165,250,.55);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(96\2c 165\2c 250\2c 0\.65\)\]{--tw-shadow:0 0 12px rgba(96,165,250,.65);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_4px_1px_rgba\(185\2c 28\2c 28\2c 0\.7\)\]{--tw-shadow:0 0 4px 1px rgba(185,28,28,.7);--tw-shadow-colored:0 0 4px 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_6px_2px_rgba\(239\2c 68\2c 68\2c 0\.8\)\]{--tw-shadow:0 0 6px 2px rgba(239,68,68,.8);--tw-shadow-colored:0 0 6px 2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_6px_2px_rgba\(249\2c 115\2c 22\2c 0\.85\)\]{--tw-shadow:0 0 6px 2px rgba(249,115,22,.85);--tw-shadow-colored:0 0 6px 2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_2px_rgba\(234\2c 179\2c 8\2c 0\.9\)\]{--tw-shadow:0 0 8px 2px rgba(234,179,8,.9);--tw-shadow-colored:0 0 8px 2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_2px_rgba\(52\2c 211\2c 153\2c 0\.85\)\]{--tw-shadow:0 0 8px 2px rgba(52,211,153,.85);--tw-shadow-colored:0 0 8px 2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(255\2c 255\2c 255\2c 0\.5\)\]{--tw-shadow:0 0 8px hsla(0,0%,100%,.5);--tw-shadow-colored:0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(74\2c 222\2c 128\2c 0\.5\)\]{--tw-shadow:0 0 8px rgba(74,222,128,.5);--tw-shadow-colored:0 0 8px var(--tw-shadow-color)}.shadow-\[0_0_8px_rgba\(74\2c 222\2c 128\2c 0\.5\)\],.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-fb-primary\/20{--tw-shadow-color:rgba(14,165,233,.2);--tw-shadow:var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.\!ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-amber-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 243 199/var(--tw-ring-opacity,1))}.ring-amber-200{--tw-ring-opacity:1;--tw-ring-color:rgb(253 230 138/var(--tw-ring-opacity,1))}.ring-amber-300{--tw-ring-opacity:1;--tw-ring-color:rgb(252 211 77/var(--tw-ring-opacity,1))}.ring-amber-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 191 36/var(--tw-ring-opacity,1))}.ring-amber-50{--tw-ring-opacity:1;--tw-ring-color:rgb(255 251 235/var(--tw-ring-opacity,1))}.ring-amber-500{--tw-ring-opacity:1;--tw-ring-color:rgb(245 158 11/var(--tw-ring-opacity,1))}.ring-amber-600{--tw-ring-opacity:1;--tw-ring-color:rgb(217 119 6/var(--tw-ring-opacity,1))}.ring-amber-700{--tw-ring-opacity:1;--tw-ring-color:rgb(180 83 9/var(--tw-ring-opacity,1))}.ring-amber-800{--tw-ring-opacity:1;--tw-ring-color:rgb(146 64 14/var(--tw-ring-opacity,1))}.ring-amber-900{--tw-ring-opacity:1;--tw-ring-color:rgb(120 53 15/var(--tw-ring-opacity,1))}.ring-blue-100{--tw-ring-opacity:1;--tw-ring-color:rgb(219 234 254/var(--tw-ring-opacity,1))}.ring-blue-200{--tw-ring-opacity:1;--tw-ring-color:rgb(191 219 254/var(--tw-ring-opacity,1))}.ring-blue-300{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity,1))}.ring-blue-400{--tw-ring-opacity:1;--tw-ring-color:rgb(96 165 250/var(--tw-ring-opacity,1))}.ring-blue-50{--tw-ring-opacity:1;--tw-ring-color:rgb(239 246 255/var(--tw-ring-opacity,1))}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.ring-blue-600{--tw-ring-opacity:1;--tw-ring-color:rgb(37 99 235/var(--tw-ring-opacity,1))}.ring-blue-700{--tw-ring-opacity:1;--tw-ring-color:rgb(29 78 216/var(--tw-ring-opacity,1))}.ring-blue-800{--tw-ring-opacity:1;--tw-ring-color:rgb(30 64 175/var(--tw-ring-opacity,1))}.ring-blue-900{--tw-ring-opacity:1;--tw-ring-color:rgb(30 58 138/var(--tw-ring-opacity,1))}.ring-cyan-500\/30{--tw-ring-color:rgba(6,182,212,.3)}.ring-emerald-400{--tw-ring-opacity:1;--tw-ring-color:rgb(52 211 153/var(--tw-ring-opacity,1))}.ring-fb-primary{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity,1))}.ring-gray-100{--tw-ring-opacity:1;--tw-ring-color:rgb(243 244 246/var(--tw-ring-opacity,1))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity,1))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity,1))}.ring-gray-400{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity,1))}.ring-gray-50{--tw-ring-opacity:1;--tw-ring-color:rgb(249 250 251/var(--tw-ring-opacity,1))}.ring-gray-500{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.ring-gray-600{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity,1))}.ring-gray-700{--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity,1))}.ring-gray-800{--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity,1))}.ring-gray-900{--tw-ring-opacity:1;--tw-ring-color:rgb(17 24 39/var(--tw-ring-opacity,1))}.ring-green-100{--tw-ring-opacity:1;--tw-ring-color:rgb(220 252 231/var(--tw-ring-opacity,1))}.ring-green-200{--tw-ring-opacity:1;--tw-ring-color:rgb(187 247 208/var(--tw-ring-opacity,1))}.ring-green-300{--tw-ring-opacity:1;--tw-ring-color:rgb(134 239 172/var(--tw-ring-opacity,1))}.ring-green-400{--tw-ring-opacity:1;--tw-ring-color:rgb(74 222 128/var(--tw-ring-opacity,1))}.ring-green-50{--tw-ring-opacity:1;--tw-ring-color:rgb(240 253 244/var(--tw-ring-opacity,1))}.ring-green-500{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity,1))}.ring-green-600{--tw-ring-opacity:1;--tw-ring-color:rgb(22 163 74/var(--tw-ring-opacity,1))}.ring-green-700{--tw-ring-opacity:1;--tw-ring-color:rgb(21 128 61/var(--tw-ring-opacity,1))}.ring-green-800{--tw-ring-opacity:1;--tw-ring-color:rgb(22 101 52/var(--tw-ring-opacity,1))}.ring-green-900{--tw-ring-opacity:1;--tw-ring-color:rgb(20 83 45/var(--tw-ring-opacity,1))}.ring-indigo-100{--tw-ring-opacity:1;--tw-ring-color:rgb(224 231 255/var(--tw-ring-opacity,1))}.ring-indigo-200{--tw-ring-opacity:1;--tw-ring-color:rgb(199 210 254/var(--tw-ring-opacity,1))}.ring-indigo-300{--tw-ring-opacity:1;--tw-ring-color:rgb(165 180 252/var(--tw-ring-opacity,1))}.ring-indigo-400{--tw-ring-opacity:1;--tw-ring-color:rgb(129 140 248/var(--tw-ring-opacity,1))}.ring-indigo-50{--tw-ring-opacity:1;--tw-ring-color:rgb(238 242 255/var(--tw-ring-opacity,1))}.ring-indigo-500{--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity,1))}.ring-indigo-600{--tw-ring-opacity:1;--tw-ring-color:rgb(79 70 229/var(--tw-ring-opacity,1))}.ring-indigo-700{--tw-ring-opacity:1;--tw-ring-color:rgb(67 56 202/var(--tw-ring-opacity,1))}.ring-indigo-800{--tw-ring-opacity:1;--tw-ring-color:rgb(55 48 163/var(--tw-ring-opacity,1))}.ring-indigo-900{--tw-ring-opacity:1;--tw-ring-color:rgb(49 46 129/var(--tw-ring-opacity,1))}.ring-pink-100{--tw-ring-opacity:1;--tw-ring-color:rgb(252 231 243/var(--tw-ring-opacity,1))}.ring-pink-200{--tw-ring-opacity:1;--tw-ring-color:rgb(251 207 232/var(--tw-ring-opacity,1))}.ring-pink-300{--tw-ring-opacity:1;--tw-ring-color:rgb(249 168 212/var(--tw-ring-opacity,1))}.ring-pink-400{--tw-ring-opacity:1;--tw-ring-color:rgb(244 114 182/var(--tw-ring-opacity,1))}.ring-pink-50{--tw-ring-opacity:1;--tw-ring-color:rgb(253 242 248/var(--tw-ring-opacity,1))}.ring-pink-500{--tw-ring-opacity:1;--tw-ring-color:rgb(236 72 153/var(--tw-ring-opacity,1))}.ring-pink-600{--tw-ring-opacity:1;--tw-ring-color:rgb(219 39 119/var(--tw-ring-opacity,1))}.ring-pink-700{--tw-ring-opacity:1;--tw-ring-color:rgb(190 24 93/var(--tw-ring-opacity,1))}.ring-pink-800{--tw-ring-opacity:1;--tw-ring-color:rgb(157 23 77/var(--tw-ring-opacity,1))}.ring-pink-900{--tw-ring-opacity:1;--tw-ring-color:rgb(131 24 67/var(--tw-ring-opacity,1))}.ring-purple-100{--tw-ring-opacity:1;--tw-ring-color:rgb(243 232 255/var(--tw-ring-opacity,1))}.ring-purple-200{--tw-ring-opacity:1;--tw-ring-color:rgb(233 213 255/var(--tw-ring-opacity,1))}.ring-purple-300{--tw-ring-opacity:1;--tw-ring-color:rgb(216 180 254/var(--tw-ring-opacity,1))}.ring-purple-400{--tw-ring-opacity:1;--tw-ring-color:rgb(192 132 252/var(--tw-ring-opacity,1))}.ring-purple-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 245 255/var(--tw-ring-opacity,1))}.ring-purple-500{--tw-ring-opacity:1;--tw-ring-color:rgb(168 85 247/var(--tw-ring-opacity,1))}.ring-purple-600{--tw-ring-opacity:1;--tw-ring-color:rgb(147 51 234/var(--tw-ring-opacity,1))}.ring-purple-700{--tw-ring-opacity:1;--tw-ring-color:rgb(126 34 206/var(--tw-ring-opacity,1))}.ring-purple-800{--tw-ring-opacity:1;--tw-ring-color:rgb(107 33 168/var(--tw-ring-opacity,1))}.ring-purple-900{--tw-ring-opacity:1;--tw-ring-color:rgb(88 28 135/var(--tw-ring-opacity,1))}.ring-red-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 226 226/var(--tw-ring-opacity,1))}.ring-red-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 202 202/var(--tw-ring-opacity,1))}.ring-red-300{--tw-ring-opacity:1;--tw-ring-color:rgb(252 165 165/var(--tw-ring-opacity,1))}.ring-red-400{--tw-ring-opacity:1;--tw-ring-color:rgb(248 113 113/var(--tw-ring-opacity,1))}.ring-red-50{--tw-ring-opacity:1;--tw-ring-color:rgb(254 242 242/var(--tw-ring-opacity,1))}.ring-red-500{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity,1))}.ring-red-600{--tw-ring-opacity:1;--tw-ring-color:rgb(220 38 38/var(--tw-ring-opacity,1))}.ring-red-700{--tw-ring-opacity:1;--tw-ring-color:rgb(185 28 28/var(--tw-ring-opacity,1))}.ring-red-800{--tw-ring-opacity:1;--tw-ring-color:rgb(153 27 27/var(--tw-ring-opacity,1))}.ring-red-900{--tw-ring-opacity:1;--tw-ring-color:rgb(127 29 29/var(--tw-ring-opacity,1))}.ring-slate-100{--tw-ring-opacity:1;--tw-ring-color:rgb(241 245 249/var(--tw-ring-opacity,1))}.ring-slate-200{--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity,1))}.ring-slate-300{--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity,1))}.ring-slate-400{--tw-ring-opacity:1;--tw-ring-color:rgb(148 163 184/var(--tw-ring-opacity,1))}.ring-slate-50{--tw-ring-opacity:1;--tw-ring-color:rgb(248 250 252/var(--tw-ring-opacity,1))}.ring-slate-500{--tw-ring-opacity:1;--tw-ring-color:rgb(100 116 139/var(--tw-ring-opacity,1))}.ring-slate-600{--tw-ring-opacity:1;--tw-ring-color:rgb(71 85 105/var(--tw-ring-opacity,1))}.ring-slate-700{--tw-ring-opacity:1;--tw-ring-color:rgb(51 65 85/var(--tw-ring-opacity,1))}.ring-slate-800{--tw-ring-opacity:1;--tw-ring-color:rgb(30 41 59/var(--tw-ring-opacity,1))}.ring-slate-900{--tw-ring-opacity:1;--tw-ring-color:rgb(15 23 42/var(--tw-ring-opacity,1))}.ring-yellow-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 249 195/var(--tw-ring-opacity,1))}.ring-yellow-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 240 138/var(--tw-ring-opacity,1))}.ring-yellow-300{--tw-ring-opacity:1;--tw-ring-color:rgb(253 224 71/var(--tw-ring-opacity,1))}.ring-yellow-400{--tw-ring-opacity:1;--tw-ring-color:rgb(250 204 21/var(--tw-ring-opacity,1))}.ring-yellow-50{--tw-ring-opacity:1;--tw-ring-color:rgb(254 252 232/var(--tw-ring-opacity,1))}.ring-yellow-500{--tw-ring-opacity:1;--tw-ring-color:rgb(234 179 8/var(--tw-ring-opacity,1))}.ring-yellow-600{--tw-ring-opacity:1;--tw-ring-color:rgb(202 138 4/var(--tw-ring-opacity,1))}.ring-yellow-700{--tw-ring-opacity:1;--tw-ring-color:rgb(161 98 7/var(--tw-ring-opacity,1))}.ring-yellow-800{--tw-ring-opacity:1;--tw-ring-color:rgb(133 77 14/var(--tw-ring-opacity,1))}.ring-yellow-900{--tw-ring-opacity:1;--tw-ring-color:rgb(113 63 18/var(--tw-ring-opacity,1))}.blur{--tw-blur:blur(8px)}.blur,.drop-shadow{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px rgba(0,0,0,.1)) drop-shadow(0 1px 1px rgba(0,0,0,.06))}.invert{--tw-invert:invert(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\!filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-blur,.backdrop-blur-lg{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-lg{--tw-backdrop-blur:blur(16px)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.backdrop-blur-md,.backdrop-blur-sm{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-\[2px\]:after{content:var(--tw-content);left:2px}.after\:top-\[2px\]:after{content:var(--tw-content);top:2px}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.after\:border:after{content:var(--tw-content);border-width:1px}.after\:border-gray-300:after{content:var(--tw-content);--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.first\:border-t-0:first-child{border-top-width:0}.first\:pt-0:first-child{padding-top:0}.last\:mb-0:last-child{margin-bottom:0}.last\:border-0:last-child{border-width:0}.hover\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-accent\/40:hover{border-color:rgba(64,128,224,.4)}.hover\:border-accent\/50:hover{border-color:rgba(64,128,224,.5)}.hover\:border-fb-border:hover{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity,1))}.hover\:border-fb-border\/70:hover{border-color:rgba(51,65,85,.7)}.hover\:border-fb-primary:hover{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity,1))}.hover\:border-fb-primary\/40:hover{border-color:rgba(14,165,233,.4)}.hover\:border-fb-primary\/50:hover{border-color:rgba(14,165,233,.5)}.hover\:border-gray-600:hover{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.hover\:border-red-700:hover{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity,1))}.hover\:border-white:hover{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.hover\:bg-accent-light:hover{--tw-bg-opacity:1;background-color:rgb(96 160 255/var(--tw-bg-opacity,1))}.hover\:bg-accent\/30:hover{background-color:rgba(64,128,224,.3)}.hover\:bg-black\/70:hover{background-color:rgba(0,0,0,.7)}.hover\:bg-black\/75:hover{background-color:rgba(0,0,0,.75)}.hover\:bg-dark-500:hover{--tw-bg-opacity:1;background-color:rgb(30 30 58/var(--tw-bg-opacity,1))}.hover\:bg-dark-700:hover{--tw-bg-opacity:1;background-color:rgb(16 16 30/var(--tw-bg-opacity,1))}.hover\:bg-dark-700\/70:hover{background-color:rgba(16,16,30,.7)}.hover\:bg-emerald-600:hover{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.hover\:bg-fb-border:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity,1))}.hover\:bg-fb-card:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.hover\:bg-fb-card\/50:hover{background-color:rgba(30,41,59,.5)}.hover\:bg-fb-card\/60:hover{background-color:rgba(30,41,59,.6)}.hover\:bg-fb-card\/70:hover{background-color:rgba(30,41,59,.7)}.hover\:bg-fb-low\/30:hover{background-color:rgba(239,68,68,.3)}.hover\:bg-fb-primary:hover{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.hover\:bg-fb-primaryHi:hover{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity,1))}.hover\:bg-gold\/20:hover{background-color:rgba(232,192,64,.2)}.hover\:bg-green-900\/50:hover{background-color:rgba(20,83,45,.5)}.hover\:bg-purple-900\/60:hover{background-color:rgba(88,28,135,.6)}.hover\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.hover\:bg-red-500\/10:hover{background-color:rgba(239,68,68,.1)}.hover\:bg-red-900\/30:hover{background-color:rgba(127,29,29,.3)}.hover\:bg-red-900\/50:hover{background-color:rgba(127,29,29,.5)}.hover\:bg-red-900\/60:hover{background-color:rgba(127,29,29,.6)}.hover\:bg-white\/5:hover{background-color:hsla(0,0%,100%,.05)}.hover\:text-accent:hover{--tw-text-opacity:1;color:rgb(64 128 224/var(--tw-text-opacity,1))}.hover\:text-accent-light:hover{--tw-text-opacity:1;color:rgb(96 160 255/var(--tw-text-opacity,1))}.hover\:text-fb-accent:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.hover\:text-fb-primaryHi:hover{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity,1))}.hover\:text-fb-text:hover{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.hover\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.hover\:text-gray-400:hover{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.hover\:text-red-100:hover{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity,1))}.hover\:text-red-200:hover{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.hover\:text-red-300:hover{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:ring-1:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.hover\:ring-1:hover,.hover\:ring-2:hover{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.hover\:ring-2:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.hover\:ring-fb-primary\/40:hover{--tw-ring-color:rgba(14,165,233,.4)}.hover\:ring-fb-primary\/50:hover{--tw-ring-color:rgba(14,165,233,.5)}.focus\:border-accent:focus{--tw-border-opacity:1;border-color:rgb(64 128 224/var(--tw-border-opacity,1))}.focus\:border-accent\/50:focus{border-color:rgba(64,128,224,.5)}.focus\:border-blue-500:focus{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.focus\:border-fb-primary:focus{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity,1))}.focus\:border-fb-primary\/60:focus{border-color:rgba(14,165,233,.6)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-1:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-accent\/30:focus{--tw-ring-color:rgba(64,128,224,.3)}.focus\:ring-accent\/40:focus{--tw-ring-color:rgba(64,128,224,.4)}.focus\:ring-accent\/60:focus{--tw-ring-color:rgba(64,128,224,.6)}.focus\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.focus\:ring-fb-primary:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity,1))}.focus\:ring-gray-500\/40:focus{--tw-ring-color:hsla(220,9%,46%,.4)}.focus\:ring-red-400\/60:focus{--tw-ring-color:hsla(0,91%,71%,.6)}.focus\:ring-sky-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity,1))}.active\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group[open] .group-open\:rotate-180{--tw-rotate:180deg}.group:hover .group-hover\:scale-105,.group[open] .group-open\:rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.group:hover .group-hover\:text-accent-light{--tw-text-opacity:1;color:rgb(96 160 255/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-fb-text{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.group:hover .group-hover\:opacity-0{opacity:0}.group:hover .group-hover\:opacity-100{opacity:1}.group:hover .group-hover\:opacity-70{opacity:.7}.peer:checked~.peer-checked\:bg-accent{--tw-bg-opacity:1;background-color:rgb(64 128 224/var(--tw-bg-opacity,1))}.peer:checked~.peer-checked\:after\:translate-x-full:after{content:var(--tw-content);--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:after\:border-white:after{content:var(--tw-content);--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.peer:focus~.peer-focus\:outline-none{outline:2px solid transparent;outline-offset:2px}@media (min-width:640px){.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:w-96{width:24rem}.sm\:w-\[26rem\]{width:26rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-start{justify-content:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:text-left{text-align:left}.sm\:text-right{text-align:right}}@media (min-width:768px){.md\:col-span-2{grid-column:span 2/span 2}.md\:-mx-8{margin-left:-2rem;margin-right:-2rem}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-60{width:15rem}.md\:w-auto{width:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:p-8{padding:2rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}}@media (min-width:1024px){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:w-96{width:24rem}.lg\:max-w-96{max-width:24rem}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(9rem\2c 0\.9fr\)_minmax\(12rem\2c 1fr\)_4rem_minmax\(12rem\2c 1fr\)\]{grid-template-columns:minmax(9rem,.9fr) minmax(12rem,1fr) 4rem minmax(12rem,1fr)}.lg\:items-center{align-items:center}.lg\:items-stretch{align-items:stretch}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:gap-16{gap:4rem}}@media (min-width:1280px){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:gap-24{gap:6rem}}
\ No newline at end of file
+/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!container{width:100%!important}.container{width:100%}@media (min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{top:0;bottom:0}.-left-\[1\.4375rem\]{left:-1.4375rem}.-right-\[1\.4375rem\]{right:-1.4375rem}.bottom-0{bottom:0}.bottom-1{bottom:.25rem}.bottom-1\.5{bottom:.375rem}.bottom-4{bottom:1rem}.bottom-5{bottom:1.25rem}.bottom-6{bottom:1.5rem}.bottom-\[30\%\]{bottom:30%}.bottom-full{bottom:100%}.left-0{left:0}.left-0\.5{left:.125rem}.left-1\.5{left:.375rem}.left-1\/2{left:50%}.left-2{left:.5rem}.left-2\.5{left:.625rem}.left-3{left:.75rem}.left-9{left:2.25rem}.left-\[30\%\]{left:30%}.right-0{right:0}.right-0\.5{right:.125rem}.right-1\.5{right:.375rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-\[30\%\]{right:30%}.top-0{top:0}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-10{top:2.5rem}.top-2{top:.5rem}.top-3{top:.75rem}.top-4{top:1rem}.top-\[30\%\]{top:30%}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1000\]{z-index:1000}.z-\[1001\]{z-index:1001}.z-\[100\]{z-index:100}.z-\[120\]{z-index:120}.z-\[200\]{z-index:200}.z-\[210\]{z-index:210}.z-\[250\]{z-index:250}.z-\[300\]{z-index:300}.z-\[60\]{z-index:60}.z-\[61\]{z-index:61}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.m-1{margin:.25rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-10{margin-bottom:2.5rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-5{margin-left:1.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.\!grid{display:grid!important}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-\[3\/1\]{aspect-ratio:3/1}.aspect-square{aspect-ratio:1/1}.aspect-video{aspect-ratio:16/9}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-1\/2{height:50%}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-2\/3{height:66.666667%}.h-20{height:5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[3px\]{height:3px}.h-\[92px\]{height:92px}.h-\[calc\(50\%-1\.5px\)\]{height:calc(50% - 1.5px)}.h-\[calc\(50\%-2\.5px\)\]{height:calc(50% - 2.5px)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-32{max-height:8rem}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-96{max-height:24rem}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.min-h-5{min-height:1.25rem}.min-h-6{min-height:1.5rem}.min-h-\[18rem\]{min-height:18rem}.min-h-\[2\.5em\]{min-height:2.5em}.min-h-\[480px\]{min-height:480px}.min-h-\[6rem\]{min-height:6rem}.w-0\.5{width:.125rem}.w-1{width:.25rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[96px\]{width:96px}.w-\[calc\(50\%-1px\)\]{width:calc(50% - 1px)}.w-\[calc\(50\%-2px\)\]{width:calc(50% - 2px)}.w-full{width:100%}.min-w-0{min-width:0}.min-w-40{min-width:10rem}.min-w-\[1\.25rem\]{min-width:1.25rem}.min-w-\[1\.75rem\]{min-width:1.75rem}.min-w-\[10rem\]{min-width:10rem}.min-w-\[180px\]{min-width:180px}.min-w-full{min-width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[11rem\]{max-width:11rem}.max-w-\[130px\]{max-width:130px}.max-w-\[160px\]{max-width:160px}.max-w-\[210px\]{max-width:210px}.max-w-\[5\.5rem\]{max-width:5.5rem}.max-w-\[90\%\]{max-width:90%}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.translate-x-full{--tw-translate-x:100%}.-rotate-12,.translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-12{--tw-rotate:-12deg}.rotate-12{--tw-rotate:12deg}.rotate-12,.rotate-45{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate:45deg}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-\[3px\]{gap:3px}.gap-px{gap:1px}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem*var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem*var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px*var(--tw-divide-y-reverse))}.divide-fb-border\/30>:not([hidden])~:not([hidden]){border-color:rgba(51,65,85,.3)}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.scroll-smooth{scroll-behavior:smooth}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.text-wrap{text-wrap:wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-bl-md{border-bottom-left-radius:.375rem}.rounded-br-md{border-bottom-right-radius:.375rem}.rounded-tl-md{border-top-left-radius:.375rem}.rounded-tr-md{border-top-right-radius:.375rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-accent{--tw-border-opacity:1;border-color:rgb(64 128 224/var(--tw-border-opacity,1))}.border-accent-dark{--tw-border-opacity:1;border-color:rgb(32 96 176/var(--tw-border-opacity,1))}.border-accent-dark\/0{border-color:rgba(32,96,176,0)}.border-accent-dark\/10{border-color:rgba(32,96,176,.1)}.border-accent-dark\/100{border-color:#2060b0}.border-accent-dark\/15{border-color:rgba(32,96,176,.15)}.border-accent-dark\/20{border-color:rgba(32,96,176,.2)}.border-accent-dark\/25{border-color:rgba(32,96,176,.25)}.border-accent-dark\/30{border-color:rgba(32,96,176,.3)}.border-accent-dark\/35{border-color:rgba(32,96,176,.35)}.border-accent-dark\/40{border-color:rgba(32,96,176,.4)}.border-accent-dark\/45{border-color:rgba(32,96,176,.45)}.border-accent-dark\/5{border-color:rgba(32,96,176,.05)}.border-accent-dark\/50{border-color:rgba(32,96,176,.5)}.border-accent-dark\/55{border-color:rgba(32,96,176,.55)}.border-accent-dark\/60{border-color:rgba(32,96,176,.6)}.border-accent-dark\/65{border-color:rgba(32,96,176,.65)}.border-accent-dark\/70{border-color:rgba(32,96,176,.7)}.border-accent-dark\/75{border-color:rgba(32,96,176,.75)}.border-accent-dark\/80{border-color:rgba(32,96,176,.8)}.border-accent-dark\/85{border-color:rgba(32,96,176,.85)}.border-accent-dark\/90{border-color:rgba(32,96,176,.9)}.border-accent-dark\/95{border-color:rgba(32,96,176,.95)}.border-accent-light{--tw-border-opacity:1;border-color:rgb(96 160 255/var(--tw-border-opacity,1))}.border-accent-light\/0{border-color:rgba(96,160,255,0)}.border-accent-light\/10{border-color:rgba(96,160,255,.1)}.border-accent-light\/100{border-color:#60a0ff}.border-accent-light\/15{border-color:rgba(96,160,255,.15)}.border-accent-light\/20{border-color:rgba(96,160,255,.2)}.border-accent-light\/25{border-color:rgba(96,160,255,.25)}.border-accent-light\/30{border-color:rgba(96,160,255,.3)}.border-accent-light\/35{border-color:rgba(96,160,255,.35)}.border-accent-light\/40{border-color:rgba(96,160,255,.4)}.border-accent-light\/45{border-color:rgba(96,160,255,.45)}.border-accent-light\/5{border-color:rgba(96,160,255,.05)}.border-accent-light\/50{border-color:rgba(96,160,255,.5)}.border-accent-light\/55{border-color:rgba(96,160,255,.55)}.border-accent-light\/60{border-color:rgba(96,160,255,.6)}.border-accent-light\/65{border-color:rgba(96,160,255,.65)}.border-accent-light\/70{border-color:rgba(96,160,255,.7)}.border-accent-light\/75{border-color:rgba(96,160,255,.75)}.border-accent-light\/80{border-color:rgba(96,160,255,.8)}.border-accent-light\/85{border-color:rgba(96,160,255,.85)}.border-accent-light\/90{border-color:rgba(96,160,255,.9)}.border-accent-light\/95{border-color:rgba(96,160,255,.95)}.border-accent\/20{border-color:rgba(64,128,224,.2)}.border-accent\/40{border-color:rgba(64,128,224,.4)}.border-amber-100{--tw-border-opacity:1;border-color:rgb(254 243 199/var(--tw-border-opacity,1))}.border-amber-200{--tw-border-opacity:1;border-color:rgb(253 230 138/var(--tw-border-opacity,1))}.border-amber-300{--tw-border-opacity:1;border-color:rgb(252 211 77/var(--tw-border-opacity,1))}.border-amber-400{--tw-border-opacity:1;border-color:rgb(251 191 36/var(--tw-border-opacity,1))}.border-amber-50{--tw-border-opacity:1;border-color:rgb(255 251 235/var(--tw-border-opacity,1))}.border-amber-500{--tw-border-opacity:1;border-color:rgb(245 158 11/var(--tw-border-opacity,1))}.border-amber-500\/30{border-color:rgba(245,158,11,.3)}.border-amber-600{--tw-border-opacity:1;border-color:rgb(217 119 6/var(--tw-border-opacity,1))}.border-amber-700{--tw-border-opacity:1;border-color:rgb(180 83 9/var(--tw-border-opacity,1))}.border-amber-700\/60{border-color:rgba(180,83,9,.6)}.border-amber-800{--tw-border-opacity:1;border-color:rgb(146 64 14/var(--tw-border-opacity,1))}.border-amber-800\/60{border-color:rgba(146,64,14,.6)}.border-amber-900{--tw-border-opacity:1;border-color:rgb(120 53 15/var(--tw-border-opacity,1))}.border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity,1))}.border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.border-blue-50{--tw-border-opacity:1;border-color:rgb(239 246 255/var(--tw-border-opacity,1))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity,1))}.border-blue-700\/60{border-color:rgba(29,78,216,.6)}.border-blue-800{--tw-border-opacity:1;border-color:rgb(30 64 175/var(--tw-border-opacity,1))}.border-blue-900{--tw-border-opacity:1;border-color:rgb(30 58 138/var(--tw-border-opacity,1))}.border-dark-500{--tw-border-opacity:1;border-color:rgb(30 30 58/var(--tw-border-opacity,1))}.border-dark-500\/0{border-color:rgba(30,30,58,0)}.border-dark-500\/10{border-color:rgba(30,30,58,.1)}.border-dark-500\/100{border-color:#1e1e3a}.border-dark-500\/15{border-color:rgba(30,30,58,.15)}.border-dark-500\/20{border-color:rgba(30,30,58,.2)}.border-dark-500\/25{border-color:rgba(30,30,58,.25)}.border-dark-500\/30{border-color:rgba(30,30,58,.3)}.border-dark-500\/35{border-color:rgba(30,30,58,.35)}.border-dark-500\/40{border-color:rgba(30,30,58,.4)}.border-dark-500\/45{border-color:rgba(30,30,58,.45)}.border-dark-500\/5{border-color:rgba(30,30,58,.05)}.border-dark-500\/50{border-color:rgba(30,30,58,.5)}.border-dark-500\/55{border-color:rgba(30,30,58,.55)}.border-dark-500\/60{border-color:rgba(30,30,58,.6)}.border-dark-500\/65{border-color:rgba(30,30,58,.65)}.border-dark-500\/70{border-color:rgba(30,30,58,.7)}.border-dark-500\/75{border-color:rgba(30,30,58,.75)}.border-dark-500\/80{border-color:rgba(30,30,58,.8)}.border-dark-500\/85{border-color:rgba(30,30,58,.85)}.border-dark-500\/90{border-color:rgba(30,30,58,.9)}.border-dark-500\/95{border-color:rgba(30,30,58,.95)}.border-dark-600{--tw-border-opacity:1;border-color:rgb(24 24 48/var(--tw-border-opacity,1))}.border-dark-600\/0{border-color:rgba(24,24,48,0)}.border-dark-600\/10{border-color:rgba(24,24,48,.1)}.border-dark-600\/100{border-color:#181830}.border-dark-600\/15{border-color:rgba(24,24,48,.15)}.border-dark-600\/20{border-color:rgba(24,24,48,.2)}.border-dark-600\/25{border-color:rgba(24,24,48,.25)}.border-dark-600\/30{border-color:rgba(24,24,48,.3)}.border-dark-600\/35{border-color:rgba(24,24,48,.35)}.border-dark-600\/40{border-color:rgba(24,24,48,.4)}.border-dark-600\/45{border-color:rgba(24,24,48,.45)}.border-dark-600\/5{border-color:rgba(24,24,48,.05)}.border-dark-600\/50{border-color:rgba(24,24,48,.5)}.border-dark-600\/55{border-color:rgba(24,24,48,.55)}.border-dark-600\/60{border-color:rgba(24,24,48,.6)}.border-dark-600\/65{border-color:rgba(24,24,48,.65)}.border-dark-600\/70{border-color:rgba(24,24,48,.7)}.border-dark-600\/75{border-color:rgba(24,24,48,.75)}.border-dark-600\/80{border-color:rgba(24,24,48,.8)}.border-dark-600\/85{border-color:rgba(24,24,48,.85)}.border-dark-600\/90{border-color:rgba(24,24,48,.9)}.border-dark-600\/95{border-color:rgba(24,24,48,.95)}.border-dark-700{--tw-border-opacity:1;border-color:rgb(16 16 30/var(--tw-border-opacity,1))}.border-dark-700\/0{border-color:rgba(16,16,30,0)}.border-dark-700\/10{border-color:rgba(16,16,30,.1)}.border-dark-700\/100{border-color:#10101e}.border-dark-700\/15{border-color:rgba(16,16,30,.15)}.border-dark-700\/20{border-color:rgba(16,16,30,.2)}.border-dark-700\/25{border-color:rgba(16,16,30,.25)}.border-dark-700\/30{border-color:rgba(16,16,30,.3)}.border-dark-700\/35{border-color:rgba(16,16,30,.35)}.border-dark-700\/40{border-color:rgba(16,16,30,.4)}.border-dark-700\/45{border-color:rgba(16,16,30,.45)}.border-dark-700\/5{border-color:rgba(16,16,30,.05)}.border-dark-700\/50{border-color:rgba(16,16,30,.5)}.border-dark-700\/55{border-color:rgba(16,16,30,.55)}.border-dark-700\/60{border-color:rgba(16,16,30,.6)}.border-dark-700\/65{border-color:rgba(16,16,30,.65)}.border-dark-700\/70{border-color:rgba(16,16,30,.7)}.border-dark-700\/75{border-color:rgba(16,16,30,.75)}.border-dark-700\/80{border-color:rgba(16,16,30,.8)}.border-dark-700\/85{border-color:rgba(16,16,30,.85)}.border-dark-700\/90{border-color:rgba(16,16,30,.9)}.border-dark-700\/95{border-color:rgba(16,16,30,.95)}.border-dark-800{--tw-border-opacity:1;border-color:rgb(10 10 18/var(--tw-border-opacity,1))}.border-dark-800\/0{border-color:rgba(10,10,18,0)}.border-dark-800\/10{border-color:rgba(10,10,18,.1)}.border-dark-800\/100{border-color:#0a0a12}.border-dark-800\/15{border-color:rgba(10,10,18,.15)}.border-dark-800\/20{border-color:rgba(10,10,18,.2)}.border-dark-800\/25{border-color:rgba(10,10,18,.25)}.border-dark-800\/30{border-color:rgba(10,10,18,.3)}.border-dark-800\/35{border-color:rgba(10,10,18,.35)}.border-dark-800\/40{border-color:rgba(10,10,18,.4)}.border-dark-800\/45{border-color:rgba(10,10,18,.45)}.border-dark-800\/5{border-color:rgba(10,10,18,.05)}.border-dark-800\/50{border-color:rgba(10,10,18,.5)}.border-dark-800\/55{border-color:rgba(10,10,18,.55)}.border-dark-800\/60{border-color:rgba(10,10,18,.6)}.border-dark-800\/65{border-color:rgba(10,10,18,.65)}.border-dark-800\/70{border-color:rgba(10,10,18,.7)}.border-dark-800\/75{border-color:rgba(10,10,18,.75)}.border-dark-800\/80{border-color:rgba(10,10,18,.8)}.border-dark-800\/85{border-color:rgba(10,10,18,.85)}.border-dark-800\/90{border-color:rgba(10,10,18,.9)}.border-dark-800\/95{border-color:rgba(10,10,18,.95)}.border-dark-900{--tw-border-opacity:1;border-color:rgb(5 5 8/var(--tw-border-opacity,1))}.border-dark-900\/0{border-color:rgba(5,5,8,0)}.border-dark-900\/10{border-color:rgba(5,5,8,.1)}.border-dark-900\/100{border-color:#050508}.border-dark-900\/15{border-color:rgba(5,5,8,.15)}.border-dark-900\/20{border-color:rgba(5,5,8,.2)}.border-dark-900\/25{border-color:rgba(5,5,8,.25)}.border-dark-900\/30{border-color:rgba(5,5,8,.3)}.border-dark-900\/35{border-color:rgba(5,5,8,.35)}.border-dark-900\/40{border-color:rgba(5,5,8,.4)}.border-dark-900\/45{border-color:rgba(5,5,8,.45)}.border-dark-900\/5{border-color:rgba(5,5,8,.05)}.border-dark-900\/50{border-color:rgba(5,5,8,.5)}.border-dark-900\/55{border-color:rgba(5,5,8,.55)}.border-dark-900\/60{border-color:rgba(5,5,8,.6)}.border-dark-900\/65{border-color:rgba(5,5,8,.65)}.border-dark-900\/70{border-color:rgba(5,5,8,.7)}.border-dark-900\/75{border-color:rgba(5,5,8,.75)}.border-dark-900\/80{border-color:rgba(5,5,8,.8)}.border-dark-900\/85{border-color:rgba(5,5,8,.85)}.border-dark-900\/90{border-color:rgba(5,5,8,.9)}.border-dark-900\/95{border-color:rgba(5,5,8,.95)}.border-emerald-700\/60{border-color:rgba(4,120,87,.6)}.border-emerald-800\/60{border-color:rgba(6,95,70,.6)}.border-fb-border{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity,1))}.border-fb-border\/30{border-color:rgba(51,65,85,.3)}.border-fb-border\/40{border-color:rgba(51,65,85,.4)}.border-fb-border\/50{border-color:rgba(51,65,85,.5)}.border-fb-border\/60{border-color:rgba(51,65,85,.6)}.border-fb-border\/70{border-color:rgba(51,65,85,.7)}.border-fb-good\/40{border-color:rgba(34,197,94,.4)}.border-fb-good\/50{border-color:rgba(34,197,94,.5)}.border-fb-low\/40{border-color:rgba(239,68,68,.4)}.border-fb-primary{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity,1))}.border-fb-primary\/30{border-color:rgba(14,165,233,.3)}.border-fb-primary\/40{border-color:rgba(14,165,233,.4)}.border-fb-primary\/50{border-color:rgba(14,165,233,.5)}.border-fb-primary\/60{border-color:rgba(14,165,233,.6)}.border-fb-textDim{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity,1))}.border-gold{--tw-border-opacity:1;border-color:rgb(232 192 64/var(--tw-border-opacity,1))}.border-gold\/20{border-color:rgba(232,192,64,.2)}.border-gold\/40{border-color:rgba(232,192,64,.4)}.border-gold\/50{border-color:rgba(232,192,64,.5)}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.border-gray-50{--tw-border-opacity:1;border-color:rgb(249 250 251/var(--tw-border-opacity,1))}.border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity,1))}.border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.border-gray-700\/60{border-color:rgba(55,65,81,.6)}.border-gray-800{--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.border-gray-800\/50{border-color:rgba(31,41,55,.5)}.border-gray-800\/70{border-color:rgba(31,41,55,.7)}.border-gray-900{--tw-border-opacity:1;border-color:rgb(17 24 39/var(--tw-border-opacity,1))}.border-green-100{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity,1))}.border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.border-green-300{--tw-border-opacity:1;border-color:rgb(134 239 172/var(--tw-border-opacity,1))}.border-green-400{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity,1))}.border-green-50{--tw-border-opacity:1;border-color:rgb(240 253 244/var(--tw-border-opacity,1))}.border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity,1))}.border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity,1))}.border-green-700{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity,1))}.border-green-800{--tw-border-opacity:1;border-color:rgb(22 101 52/var(--tw-border-opacity,1))}.border-green-900{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity,1))}.border-indigo-100{--tw-border-opacity:1;border-color:rgb(224 231 255/var(--tw-border-opacity,1))}.border-indigo-200{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity,1))}.border-indigo-300{--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity,1))}.border-indigo-400{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity,1))}.border-indigo-50{--tw-border-opacity:1;border-color:rgb(238 242 255/var(--tw-border-opacity,1))}.border-indigo-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity,1))}.border-indigo-600{--tw-border-opacity:1;border-color:rgb(79 70 229/var(--tw-border-opacity,1))}.border-indigo-700{--tw-border-opacity:1;border-color:rgb(67 56 202/var(--tw-border-opacity,1))}.border-indigo-800{--tw-border-opacity:1;border-color:rgb(55 48 163/var(--tw-border-opacity,1))}.border-indigo-900{--tw-border-opacity:1;border-color:rgb(49 46 129/var(--tw-border-opacity,1))}.border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.border-pink-100{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity,1))}.border-pink-200{--tw-border-opacity:1;border-color:rgb(251 207 232/var(--tw-border-opacity,1))}.border-pink-300{--tw-border-opacity:1;border-color:rgb(249 168 212/var(--tw-border-opacity,1))}.border-pink-400{--tw-border-opacity:1;border-color:rgb(244 114 182/var(--tw-border-opacity,1))}.border-pink-50{--tw-border-opacity:1;border-color:rgb(253 242 248/var(--tw-border-opacity,1))}.border-pink-500{--tw-border-opacity:1;border-color:rgb(236 72 153/var(--tw-border-opacity,1))}.border-pink-600{--tw-border-opacity:1;border-color:rgb(219 39 119/var(--tw-border-opacity,1))}.border-pink-700{--tw-border-opacity:1;border-color:rgb(190 24 93/var(--tw-border-opacity,1))}.border-pink-800{--tw-border-opacity:1;border-color:rgb(157 23 77/var(--tw-border-opacity,1))}.border-pink-900{--tw-border-opacity:1;border-color:rgb(131 24 67/var(--tw-border-opacity,1))}.border-purple-100{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity,1))}.border-purple-200{--tw-border-opacity:1;border-color:rgb(233 213 255/var(--tw-border-opacity,1))}.border-purple-300{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity,1))}.border-purple-400{--tw-border-opacity:1;border-color:rgb(192 132 252/var(--tw-border-opacity,1))}.border-purple-400\/30{border-color:rgba(192,132,252,.3)}.border-purple-400\/40{border-color:rgba(192,132,252,.4)}.border-purple-50{--tw-border-opacity:1;border-color:rgb(250 245 255/var(--tw-border-opacity,1))}.border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity,1))}.border-purple-600{--tw-border-opacity:1;border-color:rgb(147 51 234/var(--tw-border-opacity,1))}.border-purple-700{--tw-border-opacity:1;border-color:rgb(126 34 206/var(--tw-border-opacity,1))}.border-purple-800{--tw-border-opacity:1;border-color:rgb(107 33 168/var(--tw-border-opacity,1))}.border-purple-900{--tw-border-opacity:1;border-color:rgb(88 28 135/var(--tw-border-opacity,1))}.border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.border-red-50{--tw-border-opacity:1;border-color:rgb(254 242 242/var(--tw-border-opacity,1))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.border-red-500\/40{border-color:rgba(239,68,68,.4)}.border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity,1))}.border-red-700\/60{border-color:rgba(185,28,28,.6)}.border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.border-red-800\/70{border-color:rgba(153,27,27,.7)}.border-red-900{--tw-border-opacity:1;border-color:rgb(127 29 29/var(--tw-border-opacity,1))}.border-red-900\/30{border-color:rgba(127,29,29,.3)}.border-red-900\/50{border-color:rgba(127,29,29,.5)}.border-slate-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity,1))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.border-slate-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity,1))}.border-slate-400{--tw-border-opacity:1;border-color:rgb(148 163 184/var(--tw-border-opacity,1))}.border-slate-50{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity,1))}.border-slate-500{--tw-border-opacity:1;border-color:rgb(100 116 139/var(--tw-border-opacity,1))}.border-slate-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity,1))}.border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity,1))}.border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity,1))}.border-slate-900{--tw-border-opacity:1;border-color:rgb(15 23 42/var(--tw-border-opacity,1))}.border-teal-700\/60{border-color:rgba(15,118,110,.6)}.border-violet-100{--tw-border-opacity:1;border-color:rgb(237 233 254/var(--tw-border-opacity,1))}.border-yellow-100{--tw-border-opacity:1;border-color:rgb(254 249 195/var(--tw-border-opacity,1))}.border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity,1))}.border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity,1))}.border-yellow-400{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity,1))}.border-yellow-400\/40{border-color:rgba(250,204,21,.4)}.border-yellow-50{--tw-border-opacity:1;border-color:rgb(254 252 232/var(--tw-border-opacity,1))}.border-yellow-500{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity,1))}.border-yellow-600{--tw-border-opacity:1;border-color:rgb(202 138 4/var(--tw-border-opacity,1))}.border-yellow-700{--tw-border-opacity:1;border-color:rgb(161 98 7/var(--tw-border-opacity,1))}.border-yellow-800{--tw-border-opacity:1;border-color:rgb(133 77 14/var(--tw-border-opacity,1))}.border-yellow-900{--tw-border-opacity:1;border-color:rgb(113 63 18/var(--tw-border-opacity,1))}.\!bg-accent{--tw-bg-opacity:1!important;background-color:rgb(64 128 224/var(--tw-bg-opacity,1))!important}.bg-accent{--tw-bg-opacity:1;background-color:rgb(64 128 224/var(--tw-bg-opacity,1))}.bg-accent-dark{--tw-bg-opacity:1;background-color:rgb(32 96 176/var(--tw-bg-opacity,1))}.bg-accent-dark\/0{background-color:rgba(32,96,176,0)}.bg-accent-dark\/10{background-color:rgba(32,96,176,.1)}.bg-accent-dark\/100{background-color:#2060b0}.bg-accent-dark\/15{background-color:rgba(32,96,176,.15)}.bg-accent-dark\/20{background-color:rgba(32,96,176,.2)}.bg-accent-dark\/25{background-color:rgba(32,96,176,.25)}.bg-accent-dark\/30{background-color:rgba(32,96,176,.3)}.bg-accent-dark\/35{background-color:rgba(32,96,176,.35)}.bg-accent-dark\/40{background-color:rgba(32,96,176,.4)}.bg-accent-dark\/45{background-color:rgba(32,96,176,.45)}.bg-accent-dark\/5{background-color:rgba(32,96,176,.05)}.bg-accent-dark\/50{background-color:rgba(32,96,176,.5)}.bg-accent-dark\/55{background-color:rgba(32,96,176,.55)}.bg-accent-dark\/60{background-color:rgba(32,96,176,.6)}.bg-accent-dark\/65{background-color:rgba(32,96,176,.65)}.bg-accent-dark\/70{background-color:rgba(32,96,176,.7)}.bg-accent-dark\/75{background-color:rgba(32,96,176,.75)}.bg-accent-dark\/80{background-color:rgba(32,96,176,.8)}.bg-accent-dark\/85{background-color:rgba(32,96,176,.85)}.bg-accent-dark\/90{background-color:rgba(32,96,176,.9)}.bg-accent-dark\/95{background-color:rgba(32,96,176,.95)}.bg-accent-light{--tw-bg-opacity:1;background-color:rgb(96 160 255/var(--tw-bg-opacity,1))}.bg-accent-light\/0{background-color:rgba(96,160,255,0)}.bg-accent-light\/10{background-color:rgba(96,160,255,.1)}.bg-accent-light\/100{background-color:#60a0ff}.bg-accent-light\/15{background-color:rgba(96,160,255,.15)}.bg-accent-light\/20{background-color:rgba(96,160,255,.2)}.bg-accent-light\/25{background-color:rgba(96,160,255,.25)}.bg-accent-light\/30{background-color:rgba(96,160,255,.3)}.bg-accent-light\/35{background-color:rgba(96,160,255,.35)}.bg-accent-light\/40{background-color:rgba(96,160,255,.4)}.bg-accent-light\/45{background-color:rgba(96,160,255,.45)}.bg-accent-light\/5{background-color:rgba(96,160,255,.05)}.bg-accent-light\/50{background-color:rgba(96,160,255,.5)}.bg-accent-light\/55{background-color:rgba(96,160,255,.55)}.bg-accent-light\/60{background-color:rgba(96,160,255,.6)}.bg-accent-light\/65{background-color:rgba(96,160,255,.65)}.bg-accent-light\/70{background-color:rgba(96,160,255,.7)}.bg-accent-light\/75{background-color:rgba(96,160,255,.75)}.bg-accent-light\/80{background-color:rgba(96,160,255,.8)}.bg-accent-light\/85{background-color:rgba(96,160,255,.85)}.bg-accent-light\/90{background-color:rgba(96,160,255,.9)}.bg-accent-light\/95{background-color:rgba(96,160,255,.95)}.bg-accent\/10{background-color:rgba(64,128,224,.1)}.bg-accent\/20{background-color:rgba(64,128,224,.2)}.bg-accent\/30{background-color:rgba(64,128,224,.3)}.bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity,1))}.bg-amber-200{--tw-bg-opacity:1;background-color:rgb(253 230 138/var(--tw-bg-opacity,1))}.bg-amber-300{--tw-bg-opacity:1;background-color:rgb(252 211 77/var(--tw-bg-opacity,1))}.bg-amber-400{--tw-bg-opacity:1;background-color:rgb(251 191 36/var(--tw-bg-opacity,1))}.bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity,1))}.bg-amber-500\/10{background-color:rgba(245,158,11,.1)}.bg-amber-500\/5{background-color:rgba(245,158,11,.05)}.bg-amber-600{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity,1))}.bg-amber-700{--tw-bg-opacity:1;background-color:rgb(180 83 9/var(--tw-bg-opacity,1))}.bg-amber-800{--tw-bg-opacity:1;background-color:rgb(146 64 14/var(--tw-bg-opacity,1))}.bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity,1))}.bg-amber-900\/30{background-color:rgba(120,53,15,.3)}.bg-amber-900\/60{background-color:rgba(120,53,15,.6)}.bg-amber-900\/80{background-color:rgba(120,53,15,.8)}.bg-black\/30{background-color:rgba(0,0,0,.3)}.bg-black\/40{background-color:rgba(0,0,0,.4)}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-black\/55{background-color:rgba(0,0,0,.55)}.bg-black\/60{background-color:rgba(0,0,0,.6)}.bg-black\/70{background-color:rgba(0,0,0,.7)}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.bg-blue-200{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity,1))}.bg-blue-300{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity,1))}.bg-blue-400{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity,1))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-blue-500\/10{background-color:rgba(59,130,246,.1)}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-blue-700{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.bg-blue-800{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity,1))}.bg-blue-900{--tw-bg-opacity:1;background-color:rgb(30 58 138/var(--tw-bg-opacity,1))}.bg-blue-900\/40{background-color:rgba(30,58,138,.4)}.bg-current{background-color:currentColor}.bg-cyan-400{--tw-bg-opacity:1;background-color:rgb(34 211 238/var(--tw-bg-opacity,1))}.bg-dark-500{--tw-bg-opacity:1;background-color:rgb(30 30 58/var(--tw-bg-opacity,1))}.bg-dark-500\/0{background-color:rgba(30,30,58,0)}.bg-dark-500\/10{background-color:rgba(30,30,58,.1)}.bg-dark-500\/100{background-color:#1e1e3a}.bg-dark-500\/15{background-color:rgba(30,30,58,.15)}.bg-dark-500\/20{background-color:rgba(30,30,58,.2)}.bg-dark-500\/25{background-color:rgba(30,30,58,.25)}.bg-dark-500\/30{background-color:rgba(30,30,58,.3)}.bg-dark-500\/35{background-color:rgba(30,30,58,.35)}.bg-dark-500\/40{background-color:rgba(30,30,58,.4)}.bg-dark-500\/45{background-color:rgba(30,30,58,.45)}.bg-dark-500\/5{background-color:rgba(30,30,58,.05)}.bg-dark-500\/50{background-color:rgba(30,30,58,.5)}.bg-dark-500\/55{background-color:rgba(30,30,58,.55)}.bg-dark-500\/60{background-color:rgba(30,30,58,.6)}.bg-dark-500\/65{background-color:rgba(30,30,58,.65)}.bg-dark-500\/70{background-color:rgba(30,30,58,.7)}.bg-dark-500\/75{background-color:rgba(30,30,58,.75)}.bg-dark-500\/80{background-color:rgba(30,30,58,.8)}.bg-dark-500\/85{background-color:rgba(30,30,58,.85)}.bg-dark-500\/90{background-color:rgba(30,30,58,.9)}.bg-dark-500\/95{background-color:rgba(30,30,58,.95)}.bg-dark-600{--tw-bg-opacity:1;background-color:rgb(24 24 48/var(--tw-bg-opacity,1))}.bg-dark-600\/0{background-color:rgba(24,24,48,0)}.bg-dark-600\/10{background-color:rgba(24,24,48,.1)}.bg-dark-600\/100{background-color:#181830}.bg-dark-600\/15{background-color:rgba(24,24,48,.15)}.bg-dark-600\/20{background-color:rgba(24,24,48,.2)}.bg-dark-600\/25{background-color:rgba(24,24,48,.25)}.bg-dark-600\/30{background-color:rgba(24,24,48,.3)}.bg-dark-600\/35{background-color:rgba(24,24,48,.35)}.bg-dark-600\/40{background-color:rgba(24,24,48,.4)}.bg-dark-600\/45{background-color:rgba(24,24,48,.45)}.bg-dark-600\/5{background-color:rgba(24,24,48,.05)}.bg-dark-600\/50{background-color:rgba(24,24,48,.5)}.bg-dark-600\/55{background-color:rgba(24,24,48,.55)}.bg-dark-600\/60{background-color:rgba(24,24,48,.6)}.bg-dark-600\/65{background-color:rgba(24,24,48,.65)}.bg-dark-600\/70{background-color:rgba(24,24,48,.7)}.bg-dark-600\/75{background-color:rgba(24,24,48,.75)}.bg-dark-600\/80{background-color:rgba(24,24,48,.8)}.bg-dark-600\/85{background-color:rgba(24,24,48,.85)}.bg-dark-600\/90{background-color:rgba(24,24,48,.9)}.bg-dark-600\/95{background-color:rgba(24,24,48,.95)}.bg-dark-700{--tw-bg-opacity:1;background-color:rgb(16 16 30/var(--tw-bg-opacity,1))}.bg-dark-700\/0{background-color:rgba(16,16,30,0)}.bg-dark-700\/10{background-color:rgba(16,16,30,.1)}.bg-dark-700\/100{background-color:#10101e}.bg-dark-700\/15{background-color:rgba(16,16,30,.15)}.bg-dark-700\/20{background-color:rgba(16,16,30,.2)}.bg-dark-700\/25{background-color:rgba(16,16,30,.25)}.bg-dark-700\/30{background-color:rgba(16,16,30,.3)}.bg-dark-700\/35{background-color:rgba(16,16,30,.35)}.bg-dark-700\/40{background-color:rgba(16,16,30,.4)}.bg-dark-700\/45{background-color:rgba(16,16,30,.45)}.bg-dark-700\/5{background-color:rgba(16,16,30,.05)}.bg-dark-700\/50{background-color:rgba(16,16,30,.5)}.bg-dark-700\/55{background-color:rgba(16,16,30,.55)}.bg-dark-700\/60{background-color:rgba(16,16,30,.6)}.bg-dark-700\/65{background-color:rgba(16,16,30,.65)}.bg-dark-700\/70{background-color:rgba(16,16,30,.7)}.bg-dark-700\/75{background-color:rgba(16,16,30,.75)}.bg-dark-700\/80{background-color:rgba(16,16,30,.8)}.bg-dark-700\/85{background-color:rgba(16,16,30,.85)}.bg-dark-700\/90{background-color:rgba(16,16,30,.9)}.bg-dark-700\/95{background-color:rgba(16,16,30,.95)}.bg-dark-800{--tw-bg-opacity:1;background-color:rgb(10 10 18/var(--tw-bg-opacity,1))}.bg-dark-800\/0{background-color:rgba(10,10,18,0)}.bg-dark-800\/10{background-color:rgba(10,10,18,.1)}.bg-dark-800\/100{background-color:#0a0a12}.bg-dark-800\/15{background-color:rgba(10,10,18,.15)}.bg-dark-800\/20{background-color:rgba(10,10,18,.2)}.bg-dark-800\/25{background-color:rgba(10,10,18,.25)}.bg-dark-800\/30{background-color:rgba(10,10,18,.3)}.bg-dark-800\/35{background-color:rgba(10,10,18,.35)}.bg-dark-800\/40{background-color:rgba(10,10,18,.4)}.bg-dark-800\/45{background-color:rgba(10,10,18,.45)}.bg-dark-800\/5{background-color:rgba(10,10,18,.05)}.bg-dark-800\/50{background-color:rgba(10,10,18,.5)}.bg-dark-800\/55{background-color:rgba(10,10,18,.55)}.bg-dark-800\/60{background-color:rgba(10,10,18,.6)}.bg-dark-800\/65{background-color:rgba(10,10,18,.65)}.bg-dark-800\/70{background-color:rgba(10,10,18,.7)}.bg-dark-800\/75{background-color:rgba(10,10,18,.75)}.bg-dark-800\/80{background-color:rgba(10,10,18,.8)}.bg-dark-800\/85{background-color:rgba(10,10,18,.85)}.bg-dark-800\/90{background-color:rgba(10,10,18,.9)}.bg-dark-800\/95{background-color:rgba(10,10,18,.95)}.bg-dark-900{--tw-bg-opacity:1;background-color:rgb(5 5 8/var(--tw-bg-opacity,1))}.bg-dark-900\/0{background-color:rgba(5,5,8,0)}.bg-dark-900\/10{background-color:rgba(5,5,8,.1)}.bg-dark-900\/100{background-color:#050508}.bg-dark-900\/15{background-color:rgba(5,5,8,.15)}.bg-dark-900\/20{background-color:rgba(5,5,8,.2)}.bg-dark-900\/25{background-color:rgba(5,5,8,.25)}.bg-dark-900\/30{background-color:rgba(5,5,8,.3)}.bg-dark-900\/35{background-color:rgba(5,5,8,.35)}.bg-dark-900\/40{background-color:rgba(5,5,8,.4)}.bg-dark-900\/45{background-color:rgba(5,5,8,.45)}.bg-dark-900\/5{background-color:rgba(5,5,8,.05)}.bg-dark-900\/50{background-color:rgba(5,5,8,.5)}.bg-dark-900\/55{background-color:rgba(5,5,8,.55)}.bg-dark-900\/60{background-color:rgba(5,5,8,.6)}.bg-dark-900\/65{background-color:rgba(5,5,8,.65)}.bg-dark-900\/70{background-color:rgba(5,5,8,.7)}.bg-dark-900\/75{background-color:rgba(5,5,8,.75)}.bg-dark-900\/80{background-color:rgba(5,5,8,.8)}.bg-dark-900\/85{background-color:rgba(5,5,8,.85)}.bg-dark-900\/90{background-color:rgba(5,5,8,.9)}.bg-dark-900\/95{background-color:rgba(5,5,8,.95)}.bg-emerald-400{--tw-bg-opacity:1;background-color:rgb(52 211 153/var(--tw-bg-opacity,1))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-emerald-500\/10{background-color:rgba(16,185,129,.1)}.bg-emerald-500\/5{background-color:rgba(16,185,129,.05)}.bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.bg-fb-bg{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-fb-bg\/40{background-color:rgba(15,23,42,.4)}.bg-fb-bg\/50{background-color:rgba(15,23,42,.5)}.bg-fb-bg\/60{background-color:rgba(15,23,42,.6)}.bg-fb-bg\/95{background-color:rgba(15,23,42,.95)}.bg-fb-border{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity,1))}.bg-fb-card{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.bg-fb-card\/50{background-color:rgba(30,41,59,.5)}.bg-fb-card\/60{background-color:rgba(30,41,59,.6)}.bg-fb-card\/80{background-color:rgba(30,41,59,.8)}.bg-fb-cardMuted{--tw-bg-opacity:1;background-color:rgb(11 18 32/var(--tw-bg-opacity,1))}.bg-fb-good{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-fb-good\/30{background-color:rgba(34,197,94,.3)}.bg-fb-low{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-fb-low\/15{background-color:rgba(239,68,68,.15)}.bg-fb-low\/30{background-color:rgba(239,68,68,.3)}.bg-fb-mid{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.bg-fb-primary{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.bg-fb-primary\/15{background-color:rgba(14,165,233,.15)}.bg-fb-primary\/20{background-color:rgba(14,165,233,.2)}.bg-fb-primary\/5{background-color:rgba(14,165,233,.05)}.bg-fb-sidebar{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.bg-fb-sidebar\/80{background-color:rgba(17,24,39,.8)}.bg-fb-sidebar\/95{background-color:rgba(17,24,39,.95)}.bg-gold{--tw-bg-opacity:1;background-color:rgb(232 192 64/var(--tw-bg-opacity,1))}.bg-gold\/10{background-color:rgba(232,192,64,.1)}.bg-gold\/5{background-color:rgba(232,192,64,.05)}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.bg-gray-500\/40{background-color:hsla(220,9%,46%,.4)}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-gray-800\/50{background-color:rgba(31,41,55,.5)}.bg-gray-800\/60{background-color:rgba(31,41,55,.6)}.bg-gray-800\/70{background-color:rgba(31,41,55,.7)}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity,1))}.bg-green-300{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity,1))}.bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity,1))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.bg-green-800{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity,1))}.bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.bg-green-900\/30{background-color:rgba(20,83,45,.3)}.bg-green-900\/40{background-color:rgba(20,83,45,.4)}.bg-green-900\/50{background-color:rgba(20,83,45,.5)}.bg-green-900\/60{background-color:rgba(20,83,45,.6)}.bg-green-900\/80{background-color:rgba(20,83,45,.8)}.bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity,1))}.bg-indigo-200{--tw-bg-opacity:1;background-color:rgb(199 210 254/var(--tw-bg-opacity,1))}.bg-indigo-300{--tw-bg-opacity:1;background-color:rgb(165 180 252/var(--tw-bg-opacity,1))}.bg-indigo-400{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity,1))}.bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity,1))}.bg-indigo-500{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity,1))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.bg-indigo-700{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.bg-indigo-800{--tw-bg-opacity:1;background-color:rgb(55 48 163/var(--tw-bg-opacity,1))}.bg-indigo-900{--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity,1))}.bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity,1))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity,1))}.bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.bg-pink-200{--tw-bg-opacity:1;background-color:rgb(251 207 232/var(--tw-bg-opacity,1))}.bg-pink-300{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity,1))}.bg-pink-400{--tw-bg-opacity:1;background-color:rgb(244 114 182/var(--tw-bg-opacity,1))}.bg-pink-50{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity,1))}.bg-pink-500{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity,1))}.bg-pink-600{--tw-bg-opacity:1;background-color:rgb(219 39 119/var(--tw-bg-opacity,1))}.bg-pink-700{--tw-bg-opacity:1;background-color:rgb(190 24 93/var(--tw-bg-opacity,1))}.bg-pink-800{--tw-bg-opacity:1;background-color:rgb(157 23 77/var(--tw-bg-opacity,1))}.bg-pink-900{--tw-bg-opacity:1;background-color:rgb(131 24 67/var(--tw-bg-opacity,1))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity,1))}.bg-purple-300{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity,1))}.bg-purple-400{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity,1))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.bg-purple-500\/10{background-color:rgba(168,85,247,.1)}.bg-purple-500\/20{background-color:rgba(168,85,247,.2)}.bg-purple-500\/40{background-color:rgba(168,85,247,.4)}.bg-purple-600{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity,1))}.bg-purple-700{--tw-bg-opacity:1;background-color:rgb(126 34 206/var(--tw-bg-opacity,1))}.bg-purple-800{--tw-bg-opacity:1;background-color:rgb(107 33 168/var(--tw-bg-opacity,1))}.bg-purple-900{--tw-bg-opacity:1;background-color:rgb(88 28 135/var(--tw-bg-opacity,1))}.bg-purple-900\/30{background-color:rgba(88,28,135,.3)}.bg-purple-900\/40{background-color:rgba(88,28,135,.4)}.bg-purple-900\/60{background-color:rgba(88,28,135,.6)}.bg-purple-900\/80{background-color:rgba(88,28,135,.8)}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.bg-red-200{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity,1))}.bg-red-300{--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity,1))}.bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity,1))}.bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-red-500\/10{background-color:rgba(239,68,68,.1)}.bg-red-500\/5{background-color:rgba(239,68,68,.05)}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.bg-red-600\/80{background-color:rgba(220,38,38,.8)}.bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.bg-red-800{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity,1))}.bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.bg-red-900\/10{background-color:rgba(127,29,29,.1)}.bg-red-900\/30{background-color:rgba(127,29,29,.3)}.bg-red-900\/40{background-color:rgba(127,29,29,.4)}.bg-red-900\/95{background-color:rgba(127,29,29,.95)}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity,1))}.bg-slate-400{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity,1))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity,1))}.bg-slate-600{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity,1))}.bg-slate-700{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity,1))}.bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.bg-teal-500\/10{background-color:rgba(20,184,166,.1)}.bg-transparent{background-color:transparent}.bg-violet-200{--tw-bg-opacity:1;background-color:rgb(221 214 254/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity,1))}.bg-yellow-300{--tw-bg-opacity:1;background-color:rgb(253 224 71/var(--tw-bg-opacity,1))}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity,1))}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity,1))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.bg-yellow-500\/10{background-color:rgba(234,179,8,.1)}.bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity,1))}.bg-yellow-700{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity,1))}.bg-yellow-800{--tw-bg-opacity:1;background-color:rgb(133 77 14/var(--tw-bg-opacity,1))}.bg-yellow-900{--tw-bg-opacity:1;background-color:rgb(113 63 18/var(--tw-bg-opacity,1))}.bg-yellow-900\/30{background-color:rgba(113,63,18,.3)}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-accent-light{--tw-gradient-from:#60a0ff var(--tw-gradient-from-position);--tw-gradient-to:rgba(96,160,255,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-black\/70{--tw-gradient-from:rgba(0,0,0,.7) var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-black\/80{--tw-gradient-from:rgba(0,0,0,.8) var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-black\/90{--tw-gradient-from:rgba(0,0,0,.9) var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-black\/40{--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),rgba(0,0,0,.4) var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-purple-400{--tw-gradient-to:#c084fc var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.object-right{-o-object-position:right;object-position:right}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-px{padding-top:1px;padding-bottom:1px}.pb-1{padding-bottom:.25rem}.pb-10{padding-bottom:2.5rem}.pb-16{padding-bottom:4rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pb-8{padding-bottom:2rem}.pl-0{padding-left:0}.pl-10{padding-left:2.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-8{padding-left:2rem}.pr-0{padding-right:0}.pr-1{padding-right:.25rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-24{padding-top:6rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.font-display{font-family:Inter,system-ui,sans-serif}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-6xl{font-size:3.75rem;line-height:1}.text-9xl{font-size:8rem;line-height:1}.text-\[0\.625rem\]{font-size:.625rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-5{line-height:1.25rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.\!text-white{--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity,1))!important}.text-\[\#FF4B4B\]{--tw-text-opacity:1;color:rgb(255 75 75/var(--tw-text-opacity,1))}.text-accent{--tw-text-opacity:1;color:rgb(64 128 224/var(--tw-text-opacity,1))}.text-accent-dark{--tw-text-opacity:1;color:rgb(32 96 176/var(--tw-text-opacity,1))}.text-accent-dark\/0{color:rgba(32,96,176,0)}.text-accent-dark\/10{color:rgba(32,96,176,.1)}.text-accent-dark\/100{color:#2060b0}.text-accent-dark\/15{color:rgba(32,96,176,.15)}.text-accent-dark\/20{color:rgba(32,96,176,.2)}.text-accent-dark\/25{color:rgba(32,96,176,.25)}.text-accent-dark\/30{color:rgba(32,96,176,.3)}.text-accent-dark\/35{color:rgba(32,96,176,.35)}.text-accent-dark\/40{color:rgba(32,96,176,.4)}.text-accent-dark\/45{color:rgba(32,96,176,.45)}.text-accent-dark\/5{color:rgba(32,96,176,.05)}.text-accent-dark\/50{color:rgba(32,96,176,.5)}.text-accent-dark\/55{color:rgba(32,96,176,.55)}.text-accent-dark\/60{color:rgba(32,96,176,.6)}.text-accent-dark\/65{color:rgba(32,96,176,.65)}.text-accent-dark\/70{color:rgba(32,96,176,.7)}.text-accent-dark\/75{color:rgba(32,96,176,.75)}.text-accent-dark\/80{color:rgba(32,96,176,.8)}.text-accent-dark\/85{color:rgba(32,96,176,.85)}.text-accent-dark\/90{color:rgba(32,96,176,.9)}.text-accent-dark\/95{color:rgba(32,96,176,.95)}.text-accent-light{--tw-text-opacity:1;color:rgb(96 160 255/var(--tw-text-opacity,1))}.text-accent-light\/0{color:rgba(96,160,255,0)}.text-accent-light\/10{color:rgba(96,160,255,.1)}.text-accent-light\/100{color:#60a0ff}.text-accent-light\/15{color:rgba(96,160,255,.15)}.text-accent-light\/20{color:rgba(96,160,255,.2)}.text-accent-light\/25{color:rgba(96,160,255,.25)}.text-accent-light\/30{color:rgba(96,160,255,.3)}.text-accent-light\/35{color:rgba(96,160,255,.35)}.text-accent-light\/40{color:rgba(96,160,255,.4)}.text-accent-light\/45{color:rgba(96,160,255,.45)}.text-accent-light\/5{color:rgba(96,160,255,.05)}.text-accent-light\/50{color:rgba(96,160,255,.5)}.text-accent-light\/55{color:rgba(96,160,255,.55)}.text-accent-light\/60{color:rgba(96,160,255,.6)}.text-accent-light\/65{color:rgba(96,160,255,.65)}.text-accent-light\/70{color:rgba(96,160,255,.7)}.text-accent-light\/75{color:rgba(96,160,255,.75)}.text-accent-light\/80{color:rgba(96,160,255,.8)}.text-accent-light\/85{color:rgba(96,160,255,.85)}.text-accent-light\/90{color:rgba(96,160,255,.9)}.text-accent-light\/95{color:rgba(96,160,255,.95)}.text-accent\/70{color:rgba(64,128,224,.7)}.text-amber-100{--tw-text-opacity:1;color:rgb(254 243 199/var(--tw-text-opacity,1))}.text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity,1))}.text-amber-300{--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity,1))}.text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.text-amber-400\/90{color:rgba(251,191,36,.9)}.text-amber-50{--tw-text-opacity:1;color:rgb(255 251 235/var(--tw-text-opacity,1))}.text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.text-amber-600{--tw-text-opacity:1;color:rgb(217 119 6/var(--tw-text-opacity,1))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity,1))}.text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity,1))}.text-amber-900{--tw-text-opacity:1;color:rgb(120 53 15/var(--tw-text-opacity,1))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.text-blue-100{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity,1))}.text-blue-200{--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity,1))}.text-blue-300{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-blue-400\/70{color:rgba(96,165,250,.7)}.text-blue-50{--tw-text-opacity:1;color:rgb(239 246 255/var(--tw-text-opacity,1))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity,1))}.text-cyan-300{--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity,1))}.text-cyan-300\/90{color:rgba(103,232,249,.9)}.text-cyan-400{--tw-text-opacity:1;color:rgb(34 211 238/var(--tw-text-opacity,1))}.text-dark-500{--tw-text-opacity:1;color:rgb(30 30 58/var(--tw-text-opacity,1))}.text-dark-500\/0{color:rgba(30,30,58,0)}.text-dark-500\/10{color:rgba(30,30,58,.1)}.text-dark-500\/100{color:#1e1e3a}.text-dark-500\/15{color:rgba(30,30,58,.15)}.text-dark-500\/20{color:rgba(30,30,58,.2)}.text-dark-500\/25{color:rgba(30,30,58,.25)}.text-dark-500\/30{color:rgba(30,30,58,.3)}.text-dark-500\/35{color:rgba(30,30,58,.35)}.text-dark-500\/40{color:rgba(30,30,58,.4)}.text-dark-500\/45{color:rgba(30,30,58,.45)}.text-dark-500\/5{color:rgba(30,30,58,.05)}.text-dark-500\/50{color:rgba(30,30,58,.5)}.text-dark-500\/55{color:rgba(30,30,58,.55)}.text-dark-500\/60{color:rgba(30,30,58,.6)}.text-dark-500\/65{color:rgba(30,30,58,.65)}.text-dark-500\/70{color:rgba(30,30,58,.7)}.text-dark-500\/75{color:rgba(30,30,58,.75)}.text-dark-500\/80{color:rgba(30,30,58,.8)}.text-dark-500\/85{color:rgba(30,30,58,.85)}.text-dark-500\/90{color:rgba(30,30,58,.9)}.text-dark-500\/95{color:rgba(30,30,58,.95)}.text-dark-600{--tw-text-opacity:1;color:rgb(24 24 48/var(--tw-text-opacity,1))}.text-dark-600\/0{color:rgba(24,24,48,0)}.text-dark-600\/10{color:rgba(24,24,48,.1)}.text-dark-600\/100{color:#181830}.text-dark-600\/15{color:rgba(24,24,48,.15)}.text-dark-600\/20{color:rgba(24,24,48,.2)}.text-dark-600\/25{color:rgba(24,24,48,.25)}.text-dark-600\/30{color:rgba(24,24,48,.3)}.text-dark-600\/35{color:rgba(24,24,48,.35)}.text-dark-600\/40{color:rgba(24,24,48,.4)}.text-dark-600\/45{color:rgba(24,24,48,.45)}.text-dark-600\/5{color:rgba(24,24,48,.05)}.text-dark-600\/50{color:rgba(24,24,48,.5)}.text-dark-600\/55{color:rgba(24,24,48,.55)}.text-dark-600\/60{color:rgba(24,24,48,.6)}.text-dark-600\/65{color:rgba(24,24,48,.65)}.text-dark-600\/70{color:rgba(24,24,48,.7)}.text-dark-600\/75{color:rgba(24,24,48,.75)}.text-dark-600\/80{color:rgba(24,24,48,.8)}.text-dark-600\/85{color:rgba(24,24,48,.85)}.text-dark-600\/90{color:rgba(24,24,48,.9)}.text-dark-600\/95{color:rgba(24,24,48,.95)}.text-dark-700{--tw-text-opacity:1;color:rgb(16 16 30/var(--tw-text-opacity,1))}.text-dark-700\/0{color:rgba(16,16,30,0)}.text-dark-700\/10{color:rgba(16,16,30,.1)}.text-dark-700\/100{color:#10101e}.text-dark-700\/15{color:rgba(16,16,30,.15)}.text-dark-700\/20{color:rgba(16,16,30,.2)}.text-dark-700\/25{color:rgba(16,16,30,.25)}.text-dark-700\/30{color:rgba(16,16,30,.3)}.text-dark-700\/35{color:rgba(16,16,30,.35)}.text-dark-700\/40{color:rgba(16,16,30,.4)}.text-dark-700\/45{color:rgba(16,16,30,.45)}.text-dark-700\/5{color:rgba(16,16,30,.05)}.text-dark-700\/50{color:rgba(16,16,30,.5)}.text-dark-700\/55{color:rgba(16,16,30,.55)}.text-dark-700\/60{color:rgba(16,16,30,.6)}.text-dark-700\/65{color:rgba(16,16,30,.65)}.text-dark-700\/70{color:rgba(16,16,30,.7)}.text-dark-700\/75{color:rgba(16,16,30,.75)}.text-dark-700\/80{color:rgba(16,16,30,.8)}.text-dark-700\/85{color:rgba(16,16,30,.85)}.text-dark-700\/90{color:rgba(16,16,30,.9)}.text-dark-700\/95{color:rgba(16,16,30,.95)}.text-dark-800{--tw-text-opacity:1;color:rgb(10 10 18/var(--tw-text-opacity,1))}.text-dark-800\/0{color:rgba(10,10,18,0)}.text-dark-800\/10{color:rgba(10,10,18,.1)}.text-dark-800\/100{color:#0a0a12}.text-dark-800\/15{color:rgba(10,10,18,.15)}.text-dark-800\/20{color:rgba(10,10,18,.2)}.text-dark-800\/25{color:rgba(10,10,18,.25)}.text-dark-800\/30{color:rgba(10,10,18,.3)}.text-dark-800\/35{color:rgba(10,10,18,.35)}.text-dark-800\/40{color:rgba(10,10,18,.4)}.text-dark-800\/45{color:rgba(10,10,18,.45)}.text-dark-800\/5{color:rgba(10,10,18,.05)}.text-dark-800\/50{color:rgba(10,10,18,.5)}.text-dark-800\/55{color:rgba(10,10,18,.55)}.text-dark-800\/60{color:rgba(10,10,18,.6)}.text-dark-800\/65{color:rgba(10,10,18,.65)}.text-dark-800\/70{color:rgba(10,10,18,.7)}.text-dark-800\/75{color:rgba(10,10,18,.75)}.text-dark-800\/80{color:rgba(10,10,18,.8)}.text-dark-800\/85{color:rgba(10,10,18,.85)}.text-dark-800\/90{color:rgba(10,10,18,.9)}.text-dark-800\/95{color:rgba(10,10,18,.95)}.text-dark-900{--tw-text-opacity:1;color:rgb(5 5 8/var(--tw-text-opacity,1))}.text-dark-900\/0{color:rgba(5,5,8,0)}.text-dark-900\/10{color:rgba(5,5,8,.1)}.text-dark-900\/100{color:#050508}.text-dark-900\/15{color:rgba(5,5,8,.15)}.text-dark-900\/20{color:rgba(5,5,8,.2)}.text-dark-900\/25{color:rgba(5,5,8,.25)}.text-dark-900\/30{color:rgba(5,5,8,.3)}.text-dark-900\/35{color:rgba(5,5,8,.35)}.text-dark-900\/40{color:rgba(5,5,8,.4)}.text-dark-900\/45{color:rgba(5,5,8,.45)}.text-dark-900\/5{color:rgba(5,5,8,.05)}.text-dark-900\/50{color:rgba(5,5,8,.5)}.text-dark-900\/55{color:rgba(5,5,8,.55)}.text-dark-900\/60{color:rgba(5,5,8,.6)}.text-dark-900\/65{color:rgba(5,5,8,.65)}.text-dark-900\/70{color:rgba(5,5,8,.7)}.text-dark-900\/75{color:rgba(5,5,8,.75)}.text-dark-900\/80{color:rgba(5,5,8,.8)}.text-dark-900\/85{color:rgba(5,5,8,.85)}.text-dark-900\/90{color:rgba(5,5,8,.9)}.text-dark-900\/95{color:rgba(5,5,8,.95)}.text-emerald-300{--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity,1))}.text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity,1))}.text-fb-accent{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-fb-gold{--tw-text-opacity:1;color:rgb(232 192 64/var(--tw-text-opacity,1))}.text-fb-good{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.text-fb-low{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-fb-mid{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.text-fb-primary{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity,1))}.text-fb-primary\/90{color:rgba(14,165,233,.9)}.text-fb-text{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.text-fb-text\/80{color:rgba(248,250,252,.8)}.text-fb-textDim{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-fb-textDim\/40{color:rgba(148,163,184,.4)}.text-fb-textDim\/60{color:rgba(148,163,184,.6)}.text-fb-textDim\/70{color:rgba(148,163,184,.7)}.text-gold{--tw-text-opacity:1;color:rgb(232 192 64/var(--tw-text-opacity,1))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-100{--tw-text-opacity:1;color:rgb(220 252 231/var(--tw-text-opacity,1))}.text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.text-green-300{--tw-text-opacity:1;color:rgb(134 239 172/var(--tw-text-opacity,1))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.text-green-50{--tw-text-opacity:1;color:rgb(240 253 244/var(--tw-text-opacity,1))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.text-green-900{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity,1))}.text-indigo-100{--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity,1))}.text-indigo-200{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity,1))}.text-indigo-300{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity,1))}.text-indigo-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity,1))}.text-indigo-50{--tw-text-opacity:1;color:rgb(238 242 255/var(--tw-text-opacity,1))}.text-indigo-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity,1))}.text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity,1))}.text-indigo-700{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}.text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity,1))}.text-indigo-900{--tw-text-opacity:1;color:rgb(49 46 129/var(--tw-text-opacity,1))}.text-pink-100{--tw-text-opacity:1;color:rgb(252 231 243/var(--tw-text-opacity,1))}.text-pink-200{--tw-text-opacity:1;color:rgb(251 207 232/var(--tw-text-opacity,1))}.text-pink-300{--tw-text-opacity:1;color:rgb(249 168 212/var(--tw-text-opacity,1))}.text-pink-400{--tw-text-opacity:1;color:rgb(244 114 182/var(--tw-text-opacity,1))}.text-pink-50{--tw-text-opacity:1;color:rgb(253 242 248/var(--tw-text-opacity,1))}.text-pink-500{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity,1))}.text-pink-600{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity,1))}.text-pink-700{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity,1))}.text-pink-800{--tw-text-opacity:1;color:rgb(157 23 77/var(--tw-text-opacity,1))}.text-pink-900{--tw-text-opacity:1;color:rgb(131 24 67/var(--tw-text-opacity,1))}.text-purple-100{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity,1))}.text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/var(--tw-text-opacity,1))}.text-purple-300{--tw-text-opacity:1;color:rgb(216 180 254/var(--tw-text-opacity,1))}.text-purple-400{--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity,1))}.text-purple-50{--tw-text-opacity:1;color:rgb(250 245 255/var(--tw-text-opacity,1))}.text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.text-purple-800{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity,1))}.text-purple-900{--tw-text-opacity:1;color:rgb(88 28 135/var(--tw-text-opacity,1))}.text-red-100{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity,1))}.text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-red-400\/90{color:hsla(0,91%,71%,.9)}.text-red-50{--tw-text-opacity:1;color:rgb(254 242 242/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity,1))}.text-slate-100{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity,1))}.text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity,1))}.text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity,1))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity,1))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.text-teal-300{--tw-text-opacity:1;color:rgb(94 234 212/var(--tw-text-opacity,1))}.text-transparent{color:transparent}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-white\/30{color:hsla(0,0%,100%,.3)}.text-yellow-100{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity,1))}.text-yellow-200{--tw-text-opacity:1;color:rgb(254 240 138/var(--tw-text-opacity,1))}.text-yellow-300{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity,1))}.text-yellow-300\/80{color:rgba(253,224,71,.8)}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.text-yellow-50{--tw-text-opacity:1;color:rgb(254 252 232/var(--tw-text-opacity,1))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity,1))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity,1))}.text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.overline{text-decoration-line:overline}.line-through{text-decoration-line:line-through}.placeholder-fb-textDim::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(148 163 184/var(--tw-placeholder-opacity,1))}.placeholder-fb-textDim::placeholder{--tw-placeholder-opacity:1;color:rgb(148 163 184/var(--tw-placeholder-opacity,1))}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.placeholder-gray-600::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(75 85 99/var(--tw-placeholder-opacity,1))}.placeholder-gray-600::placeholder{--tw-placeholder-opacity:1;color:rgb(75 85 99/var(--tw-placeholder-opacity,1))}.accent-accent{accent-color:#4080e0}.accent-fb-primary{accent-color:#0ea5e9}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-5{opacity:.05}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-2xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-\[0_0_10px_3px_rgba\(52\2c 211\2c 153\2c 0\.95\)\]{--tw-shadow:0 0 10px 3px rgba(52,211,153,.95);--tw-shadow-colored:0 0 10px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(192\2c 132\2c 252\2c 0\.55\)\]{--tw-shadow:0 0 12px rgba(192,132,252,.55);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(192\2c 132\2c 252\2c 0\.65\)\]{--tw-shadow:0 0 12px rgba(192,132,252,.65);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(216\2c 180\2c 254\2c 0\.65\)\]{--tw-shadow:0 0 12px rgba(216,180,254,.65);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(221\2c 214\2c 254\2c 0\.6\)\]{--tw-shadow:0 0 12px rgba(221,214,254,.6);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(251\2c 146\2c 60\2c 0\.55\)\]{--tw-shadow:0 0 12px rgba(251,146,60,.55);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(251\2c 146\2c 60\2c 0\.65\)\]{--tw-shadow:0 0 12px rgba(251,146,60,.65);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(96\2c 165\2c 250\2c 0\.55\)\]{--tw-shadow:0 0 12px rgba(96,165,250,.55);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(96\2c 165\2c 250\2c 0\.65\)\]{--tw-shadow:0 0 12px rgba(96,165,250,.65);--tw-shadow-colored:0 0 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_4px_1px_rgba\(185\2c 28\2c 28\2c 0\.7\)\]{--tw-shadow:0 0 4px 1px rgba(185,28,28,.7);--tw-shadow-colored:0 0 4px 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_6px_2px_rgba\(239\2c 68\2c 68\2c 0\.8\)\]{--tw-shadow:0 0 6px 2px rgba(239,68,68,.8);--tw-shadow-colored:0 0 6px 2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_6px_2px_rgba\(249\2c 115\2c 22\2c 0\.85\)\]{--tw-shadow:0 0 6px 2px rgba(249,115,22,.85);--tw-shadow-colored:0 0 6px 2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_2px_rgba\(234\2c 179\2c 8\2c 0\.9\)\]{--tw-shadow:0 0 8px 2px rgba(234,179,8,.9);--tw-shadow-colored:0 0 8px 2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_2px_rgba\(52\2c 211\2c 153\2c 0\.85\)\]{--tw-shadow:0 0 8px 2px rgba(52,211,153,.85);--tw-shadow-colored:0 0 8px 2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(255\2c 255\2c 255\2c 0\.5\)\]{--tw-shadow:0 0 8px hsla(0,0%,100%,.5);--tw-shadow-colored:0 0 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(74\2c 222\2c 128\2c 0\.5\)\]{--tw-shadow:0 0 8px rgba(74,222,128,.5);--tw-shadow-colored:0 0 8px var(--tw-shadow-color)}.shadow-\[0_0_8px_rgba\(74\2c 222\2c 128\2c 0\.5\)\],.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-fb-primary\/20{--tw-shadow-color:rgba(14,165,233,.2);--tw-shadow:var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.\!ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important;--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)!important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)!important}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring,.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-amber-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 243 199/var(--tw-ring-opacity,1))}.ring-amber-200{--tw-ring-opacity:1;--tw-ring-color:rgb(253 230 138/var(--tw-ring-opacity,1))}.ring-amber-300{--tw-ring-opacity:1;--tw-ring-color:rgb(252 211 77/var(--tw-ring-opacity,1))}.ring-amber-400{--tw-ring-opacity:1;--tw-ring-color:rgb(251 191 36/var(--tw-ring-opacity,1))}.ring-amber-50{--tw-ring-opacity:1;--tw-ring-color:rgb(255 251 235/var(--tw-ring-opacity,1))}.ring-amber-500{--tw-ring-opacity:1;--tw-ring-color:rgb(245 158 11/var(--tw-ring-opacity,1))}.ring-amber-600{--tw-ring-opacity:1;--tw-ring-color:rgb(217 119 6/var(--tw-ring-opacity,1))}.ring-amber-700{--tw-ring-opacity:1;--tw-ring-color:rgb(180 83 9/var(--tw-ring-opacity,1))}.ring-amber-800{--tw-ring-opacity:1;--tw-ring-color:rgb(146 64 14/var(--tw-ring-opacity,1))}.ring-amber-900{--tw-ring-opacity:1;--tw-ring-color:rgb(120 53 15/var(--tw-ring-opacity,1))}.ring-blue-100{--tw-ring-opacity:1;--tw-ring-color:rgb(219 234 254/var(--tw-ring-opacity,1))}.ring-blue-200{--tw-ring-opacity:1;--tw-ring-color:rgb(191 219 254/var(--tw-ring-opacity,1))}.ring-blue-300{--tw-ring-opacity:1;--tw-ring-color:rgb(147 197 253/var(--tw-ring-opacity,1))}.ring-blue-400{--tw-ring-opacity:1;--tw-ring-color:rgb(96 165 250/var(--tw-ring-opacity,1))}.ring-blue-50{--tw-ring-opacity:1;--tw-ring-color:rgb(239 246 255/var(--tw-ring-opacity,1))}.ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.ring-blue-600{--tw-ring-opacity:1;--tw-ring-color:rgb(37 99 235/var(--tw-ring-opacity,1))}.ring-blue-700{--tw-ring-opacity:1;--tw-ring-color:rgb(29 78 216/var(--tw-ring-opacity,1))}.ring-blue-800{--tw-ring-opacity:1;--tw-ring-color:rgb(30 64 175/var(--tw-ring-opacity,1))}.ring-blue-900{--tw-ring-opacity:1;--tw-ring-color:rgb(30 58 138/var(--tw-ring-opacity,1))}.ring-cyan-500\/30{--tw-ring-color:rgba(6,182,212,.3)}.ring-emerald-400{--tw-ring-opacity:1;--tw-ring-color:rgb(52 211 153/var(--tw-ring-opacity,1))}.ring-fb-primary{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity,1))}.ring-gray-100{--tw-ring-opacity:1;--tw-ring-color:rgb(243 244 246/var(--tw-ring-opacity,1))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity,1))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity,1))}.ring-gray-400{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity,1))}.ring-gray-50{--tw-ring-opacity:1;--tw-ring-color:rgb(249 250 251/var(--tw-ring-opacity,1))}.ring-gray-500{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.ring-gray-600{--tw-ring-opacity:1;--tw-ring-color:rgb(75 85 99/var(--tw-ring-opacity,1))}.ring-gray-700{--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity,1))}.ring-gray-800{--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity,1))}.ring-gray-900{--tw-ring-opacity:1;--tw-ring-color:rgb(17 24 39/var(--tw-ring-opacity,1))}.ring-green-100{--tw-ring-opacity:1;--tw-ring-color:rgb(220 252 231/var(--tw-ring-opacity,1))}.ring-green-200{--tw-ring-opacity:1;--tw-ring-color:rgb(187 247 208/var(--tw-ring-opacity,1))}.ring-green-300{--tw-ring-opacity:1;--tw-ring-color:rgb(134 239 172/var(--tw-ring-opacity,1))}.ring-green-400{--tw-ring-opacity:1;--tw-ring-color:rgb(74 222 128/var(--tw-ring-opacity,1))}.ring-green-50{--tw-ring-opacity:1;--tw-ring-color:rgb(240 253 244/var(--tw-ring-opacity,1))}.ring-green-500{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity,1))}.ring-green-600{--tw-ring-opacity:1;--tw-ring-color:rgb(22 163 74/var(--tw-ring-opacity,1))}.ring-green-700{--tw-ring-opacity:1;--tw-ring-color:rgb(21 128 61/var(--tw-ring-opacity,1))}.ring-green-800{--tw-ring-opacity:1;--tw-ring-color:rgb(22 101 52/var(--tw-ring-opacity,1))}.ring-green-900{--tw-ring-opacity:1;--tw-ring-color:rgb(20 83 45/var(--tw-ring-opacity,1))}.ring-indigo-100{--tw-ring-opacity:1;--tw-ring-color:rgb(224 231 255/var(--tw-ring-opacity,1))}.ring-indigo-200{--tw-ring-opacity:1;--tw-ring-color:rgb(199 210 254/var(--tw-ring-opacity,1))}.ring-indigo-300{--tw-ring-opacity:1;--tw-ring-color:rgb(165 180 252/var(--tw-ring-opacity,1))}.ring-indigo-400{--tw-ring-opacity:1;--tw-ring-color:rgb(129 140 248/var(--tw-ring-opacity,1))}.ring-indigo-50{--tw-ring-opacity:1;--tw-ring-color:rgb(238 242 255/var(--tw-ring-opacity,1))}.ring-indigo-500{--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity,1))}.ring-indigo-600{--tw-ring-opacity:1;--tw-ring-color:rgb(79 70 229/var(--tw-ring-opacity,1))}.ring-indigo-700{--tw-ring-opacity:1;--tw-ring-color:rgb(67 56 202/var(--tw-ring-opacity,1))}.ring-indigo-800{--tw-ring-opacity:1;--tw-ring-color:rgb(55 48 163/var(--tw-ring-opacity,1))}.ring-indigo-900{--tw-ring-opacity:1;--tw-ring-color:rgb(49 46 129/var(--tw-ring-opacity,1))}.ring-pink-100{--tw-ring-opacity:1;--tw-ring-color:rgb(252 231 243/var(--tw-ring-opacity,1))}.ring-pink-200{--tw-ring-opacity:1;--tw-ring-color:rgb(251 207 232/var(--tw-ring-opacity,1))}.ring-pink-300{--tw-ring-opacity:1;--tw-ring-color:rgb(249 168 212/var(--tw-ring-opacity,1))}.ring-pink-400{--tw-ring-opacity:1;--tw-ring-color:rgb(244 114 182/var(--tw-ring-opacity,1))}.ring-pink-50{--tw-ring-opacity:1;--tw-ring-color:rgb(253 242 248/var(--tw-ring-opacity,1))}.ring-pink-500{--tw-ring-opacity:1;--tw-ring-color:rgb(236 72 153/var(--tw-ring-opacity,1))}.ring-pink-600{--tw-ring-opacity:1;--tw-ring-color:rgb(219 39 119/var(--tw-ring-opacity,1))}.ring-pink-700{--tw-ring-opacity:1;--tw-ring-color:rgb(190 24 93/var(--tw-ring-opacity,1))}.ring-pink-800{--tw-ring-opacity:1;--tw-ring-color:rgb(157 23 77/var(--tw-ring-opacity,1))}.ring-pink-900{--tw-ring-opacity:1;--tw-ring-color:rgb(131 24 67/var(--tw-ring-opacity,1))}.ring-purple-100{--tw-ring-opacity:1;--tw-ring-color:rgb(243 232 255/var(--tw-ring-opacity,1))}.ring-purple-200{--tw-ring-opacity:1;--tw-ring-color:rgb(233 213 255/var(--tw-ring-opacity,1))}.ring-purple-300{--tw-ring-opacity:1;--tw-ring-color:rgb(216 180 254/var(--tw-ring-opacity,1))}.ring-purple-400{--tw-ring-opacity:1;--tw-ring-color:rgb(192 132 252/var(--tw-ring-opacity,1))}.ring-purple-50{--tw-ring-opacity:1;--tw-ring-color:rgb(250 245 255/var(--tw-ring-opacity,1))}.ring-purple-500{--tw-ring-opacity:1;--tw-ring-color:rgb(168 85 247/var(--tw-ring-opacity,1))}.ring-purple-600{--tw-ring-opacity:1;--tw-ring-color:rgb(147 51 234/var(--tw-ring-opacity,1))}.ring-purple-700{--tw-ring-opacity:1;--tw-ring-color:rgb(126 34 206/var(--tw-ring-opacity,1))}.ring-purple-800{--tw-ring-opacity:1;--tw-ring-color:rgb(107 33 168/var(--tw-ring-opacity,1))}.ring-purple-900{--tw-ring-opacity:1;--tw-ring-color:rgb(88 28 135/var(--tw-ring-opacity,1))}.ring-red-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 226 226/var(--tw-ring-opacity,1))}.ring-red-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 202 202/var(--tw-ring-opacity,1))}.ring-red-300{--tw-ring-opacity:1;--tw-ring-color:rgb(252 165 165/var(--tw-ring-opacity,1))}.ring-red-400{--tw-ring-opacity:1;--tw-ring-color:rgb(248 113 113/var(--tw-ring-opacity,1))}.ring-red-50{--tw-ring-opacity:1;--tw-ring-color:rgb(254 242 242/var(--tw-ring-opacity,1))}.ring-red-500{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity,1))}.ring-red-600{--tw-ring-opacity:1;--tw-ring-color:rgb(220 38 38/var(--tw-ring-opacity,1))}.ring-red-700{--tw-ring-opacity:1;--tw-ring-color:rgb(185 28 28/var(--tw-ring-opacity,1))}.ring-red-800{--tw-ring-opacity:1;--tw-ring-color:rgb(153 27 27/var(--tw-ring-opacity,1))}.ring-red-900{--tw-ring-opacity:1;--tw-ring-color:rgb(127 29 29/var(--tw-ring-opacity,1))}.ring-slate-100{--tw-ring-opacity:1;--tw-ring-color:rgb(241 245 249/var(--tw-ring-opacity,1))}.ring-slate-200{--tw-ring-opacity:1;--tw-ring-color:rgb(226 232 240/var(--tw-ring-opacity,1))}.ring-slate-300{--tw-ring-opacity:1;--tw-ring-color:rgb(203 213 225/var(--tw-ring-opacity,1))}.ring-slate-400{--tw-ring-opacity:1;--tw-ring-color:rgb(148 163 184/var(--tw-ring-opacity,1))}.ring-slate-50{--tw-ring-opacity:1;--tw-ring-color:rgb(248 250 252/var(--tw-ring-opacity,1))}.ring-slate-500{--tw-ring-opacity:1;--tw-ring-color:rgb(100 116 139/var(--tw-ring-opacity,1))}.ring-slate-600{--tw-ring-opacity:1;--tw-ring-color:rgb(71 85 105/var(--tw-ring-opacity,1))}.ring-slate-700{--tw-ring-opacity:1;--tw-ring-color:rgb(51 65 85/var(--tw-ring-opacity,1))}.ring-slate-800{--tw-ring-opacity:1;--tw-ring-color:rgb(30 41 59/var(--tw-ring-opacity,1))}.ring-slate-900{--tw-ring-opacity:1;--tw-ring-color:rgb(15 23 42/var(--tw-ring-opacity,1))}.ring-yellow-100{--tw-ring-opacity:1;--tw-ring-color:rgb(254 249 195/var(--tw-ring-opacity,1))}.ring-yellow-200{--tw-ring-opacity:1;--tw-ring-color:rgb(254 240 138/var(--tw-ring-opacity,1))}.ring-yellow-300{--tw-ring-opacity:1;--tw-ring-color:rgb(253 224 71/var(--tw-ring-opacity,1))}.ring-yellow-400{--tw-ring-opacity:1;--tw-ring-color:rgb(250 204 21/var(--tw-ring-opacity,1))}.ring-yellow-50{--tw-ring-opacity:1;--tw-ring-color:rgb(254 252 232/var(--tw-ring-opacity,1))}.ring-yellow-500{--tw-ring-opacity:1;--tw-ring-color:rgb(234 179 8/var(--tw-ring-opacity,1))}.ring-yellow-600{--tw-ring-opacity:1;--tw-ring-color:rgb(202 138 4/var(--tw-ring-opacity,1))}.ring-yellow-700{--tw-ring-opacity:1;--tw-ring-color:rgb(161 98 7/var(--tw-ring-opacity,1))}.ring-yellow-800{--tw-ring-opacity:1;--tw-ring-color:rgb(133 77 14/var(--tw-ring-opacity,1))}.ring-yellow-900{--tw-ring-opacity:1;--tw-ring-color:rgb(113 63 18/var(--tw-ring-opacity,1))}.blur{--tw-blur:blur(8px)}.blur,.drop-shadow{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px rgba(0,0,0,.1)) drop-shadow(0 1px 1px rgba(0,0,0,.06))}.invert{--tw-invert:invert(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\!filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-blur,.backdrop-blur-lg{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-lg{--tw-backdrop-blur:blur(16px)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px)}.backdrop-blur-md,.backdrop-blur-sm{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-\[2px\]:after{content:var(--tw-content);left:2px}.after\:top-\[2px\]:after{content:var(--tw-content);top:2px}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.after\:border:after{content:var(--tw-content);border-width:1px}.after\:border-gray-300:after{content:var(--tw-content);--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.first\:border-t-0:first-child{border-top-width:0}.first\:pt-0:first-child{padding-top:0}.last\:mb-0:last-child{margin-bottom:0}.last\:border-0:last-child{border-width:0}.hover\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-accent\/40:hover{border-color:rgba(64,128,224,.4)}.hover\:border-accent\/50:hover{border-color:rgba(64,128,224,.5)}.hover\:border-fb-accent\/50:hover{border-color:rgba(239,68,68,.5)}.hover\:border-fb-border:hover{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity,1))}.hover\:border-fb-border\/70:hover{border-color:rgba(51,65,85,.7)}.hover\:border-fb-primary:hover{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity,1))}.hover\:border-fb-primary\/40:hover{border-color:rgba(14,165,233,.4)}.hover\:border-fb-primary\/50:hover{border-color:rgba(14,165,233,.5)}.hover\:border-gray-600:hover{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.hover\:border-red-700:hover{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity,1))}.hover\:border-white:hover{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.hover\:bg-accent-light:hover{--tw-bg-opacity:1;background-color:rgb(96 160 255/var(--tw-bg-opacity,1))}.hover\:bg-accent\/30:hover{background-color:rgba(64,128,224,.3)}.hover\:bg-black\/70:hover{background-color:rgba(0,0,0,.7)}.hover\:bg-black\/75:hover{background-color:rgba(0,0,0,.75)}.hover\:bg-dark-500:hover{--tw-bg-opacity:1;background-color:rgb(30 30 58/var(--tw-bg-opacity,1))}.hover\:bg-dark-700:hover{--tw-bg-opacity:1;background-color:rgb(16 16 30/var(--tw-bg-opacity,1))}.hover\:bg-dark-700\/70:hover{background-color:rgba(16,16,30,.7)}.hover\:bg-emerald-600:hover{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.hover\:bg-fb-border:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity,1))}.hover\:bg-fb-card:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.hover\:bg-fb-card\/50:hover{background-color:rgba(30,41,59,.5)}.hover\:bg-fb-card\/60:hover{background-color:rgba(30,41,59,.6)}.hover\:bg-fb-card\/70:hover{background-color:rgba(30,41,59,.7)}.hover\:bg-fb-low\/30:hover{background-color:rgba(239,68,68,.3)}.hover\:bg-fb-primary:hover{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.hover\:bg-fb-primaryHi:hover{--tw-bg-opacity:1;background-color:rgb(56 189 248/var(--tw-bg-opacity,1))}.hover\:bg-gold\/20:hover{background-color:rgba(232,192,64,.2)}.hover\:bg-green-900\/50:hover{background-color:rgba(20,83,45,.5)}.hover\:bg-purple-900\/60:hover{background-color:rgba(88,28,135,.6)}.hover\:bg-red-500:hover{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.hover\:bg-red-500\/10:hover{background-color:rgba(239,68,68,.1)}.hover\:bg-red-900\/30:hover{background-color:rgba(127,29,29,.3)}.hover\:bg-red-900\/50:hover{background-color:rgba(127,29,29,.5)}.hover\:bg-red-900\/60:hover{background-color:rgba(127,29,29,.6)}.hover\:bg-white\/5:hover{background-color:hsla(0,0%,100%,.05)}.hover\:text-accent:hover{--tw-text-opacity:1;color:rgb(64 128 224/var(--tw-text-opacity,1))}.hover\:text-accent-light:hover{--tw-text-opacity:1;color:rgb(96 160 255/var(--tw-text-opacity,1))}.hover\:text-fb-accent:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.hover\:text-fb-primaryHi:hover{--tw-text-opacity:1;color:rgb(56 189 248/var(--tw-text-opacity,1))}.hover\:text-fb-text:hover{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.hover\:text-gray-200:hover{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.hover\:text-gray-400:hover{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.hover\:text-red-100:hover{--tw-text-opacity:1;color:rgb(254 226 226/var(--tw-text-opacity,1))}.hover\:text-red-200:hover{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.hover\:text-red-300:hover{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:ring-1:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.hover\:ring-1:hover,.hover\:ring-2:hover{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.hover\:ring-2:hover{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.hover\:ring-fb-primary\/40:hover{--tw-ring-color:rgba(14,165,233,.4)}.hover\:ring-fb-primary\/50:hover{--tw-ring-color:rgba(14,165,233,.5)}.focus\:border-accent:focus{--tw-border-opacity:1;border-color:rgb(64 128 224/var(--tw-border-opacity,1))}.focus\:border-accent\/50:focus{border-color:rgba(64,128,224,.5)}.focus\:border-blue-500:focus{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.focus\:border-fb-primary:focus{--tw-border-opacity:1;border-color:rgb(14 165 233/var(--tw-border-opacity,1))}.focus\:border-fb-primary\/60:focus{border-color:rgba(14,165,233,.6)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-1:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-accent\/30:focus{--tw-ring-color:rgba(64,128,224,.3)}.focus\:ring-accent\/40:focus{--tw-ring-color:rgba(64,128,224,.4)}.focus\:ring-accent\/60:focus{--tw-ring-color:rgba(64,128,224,.6)}.focus\:ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.focus\:ring-fb-primary:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity,1))}.focus\:ring-gray-500\/40:focus{--tw-ring-color:hsla(220,9%,46%,.4)}.focus\:ring-red-400\/60:focus{--tw-ring-color:hsla(0,91%,71%,.6)}.focus\:ring-sky-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity,1))}.active\:scale-95:active{--tw-scale-x:.95;--tw-scale-y:.95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group[open] .group-open\:rotate-180{--tw-rotate:180deg}.group:hover .group-hover\:scale-105,.group[open] .group-open\:rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.group:hover .group-hover\:text-accent-light{--tw-text-opacity:1;color:rgb(96 160 255/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-fb-text{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.group:hover .group-hover\:opacity-0{opacity:0}.group:hover .group-hover\:opacity-100{opacity:1}.group:hover .group-hover\:opacity-70{opacity:.7}.peer:checked~.peer-checked\:bg-accent{--tw-bg-opacity:1;background-color:rgb(64 128 224/var(--tw-bg-opacity,1))}.peer:checked~.peer-checked\:after\:translate-x-full:after{content:var(--tw-content);--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:after\:border-white:after{content:var(--tw-content);--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.peer:focus~.peer-focus\:outline-none{outline:2px solid transparent;outline-offset:2px}@media (min-width:640px){.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:w-96{width:24rem}.sm\:w-\[26rem\]{width:26rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-start{justify-content:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:text-left{text-align:left}.sm\:text-right{text-align:right}}@media (min-width:768px){.md\:col-span-2{grid-column:span 2/span 2}.md\:-mx-8{margin-left:-2rem;margin-right:-2rem}.md\:flex{display:flex}.md\:hidden{display:none}.md\:w-60{width:15rem}.md\:w-auto{width:auto}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-end{align-items:flex-end}.md\:items-center{align-items:center}.md\:p-8{padding:2rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}}@media (min-width:1024px){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:w-96{width:24rem}.lg\:max-w-96{max-width:24rem}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(9rem\2c 0\.9fr\)_minmax\(12rem\2c 1fr\)_4rem_minmax\(12rem\2c 1fr\)\]{grid-template-columns:minmax(9rem,.9fr) minmax(12rem,1fr) 4rem minmax(12rem,1fr)}.lg\:items-center{align-items:center}.lg\:items-stretch{align-items:stretch}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:gap-16{gap:4rem}}@media (min-width:1280px){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.xl\:gap-24{gap:6rem}}
\ No newline at end of file
diff --git a/static/v3/songs.js b/static/v3/songs.js
index 88dea60..b36555c 100644
--- a/static/v3/songs.js
+++ b/static/v3/songs.js
@@ -57,6 +57,8 @@
const state = {
provider: 'local', view: 'grid', sort: 'artist', format: '', q: '',
artist: '', album: '',
+ grouping: true, // one card per song (multi-chart grouping); persisted
+
filters: { arr_has: [], arr_lacks: [], stem_has: [], stem_lacks: [], lyrics: '', tunings: [], mastery: [] },
page: 0, total: 0, loading: false, built: false, accuracy: {}, tuningNames: [],
artistCatalog: [], renderedHash: '',
@@ -149,6 +151,7 @@
if (SORTS.some(([v]) => v === saved.sort)) state.sort = saved.sort;
if (FORMATS.some(([v]) => v === saved.format)) state.format = saved.format;
if (saved.view === 'grid' || saved.view === 'tree' || saved.view === 'folder') state.view = saved.view;
+ if (typeof saved.grouping === 'boolean') state.grouping = saved.grouping;
const f = saved.filters;
if (f && typeof f === 'object') {
const arr = (x) => (Array.isArray(x) ? x.slice() : []);
@@ -167,6 +170,7 @@
const f = state.filters;
localStorage.setItem(PREFS_KEY, JSON.stringify({
sort: state.sort, format: state.format, view: state.view,
+ grouping: state.grouping !== false,
filters: {
arr_has: [...f.arr_has], arr_lacks: [...f.arr_lacks],
stem_has: [...f.stem_has], stem_lacks: [...f.stem_lacks],
@@ -228,6 +232,20 @@
return !!(tree.querySelector('[data-fn]') || tree.querySelector('details'));
}
+ // ── Multi-chart grouping (P5c, design §7.1) ─────────────────────────────
+ // The grid queries with group=1 so charts of the same work collapse to ONE
+ // card — the representative (preferred/auto-pick) chart — with rows carrying
+ // chart_count + work_key from the materialized work_display read-model
+ // (P5a/P5b). group must ride BOTH the page fetch and the rail's stats fetch
+ // so page, total and sort_letters all count works identically — a
+ // works-vs-charts mismatch would break the rail's cumulative-seek math and
+ // the sizer geometry. Grouping is default-ON per the design, with a
+ // persisted toggle in the filter drawer (P5e) — OFF falls back to today's
+ // one-card-per-chart. Only the local provider implements group=; smart
+ // collections and remote providers ignore it and stay flat (their rows
+ // then carry no chart_count, so no ⚑ chips render).
+ function groupingActive() { return state.grouping !== false; }
+
function queryParams(extra, opts) {
const f = state.filters;
const skipArtistAlbum = opts && opts.catalog;
@@ -660,6 +678,19 @@
'').join('');
}
+ // ⚑ multi-chart chip (P5c, design §7.1): the persistent "other versions
+ // exist" cue on a grouped card. Rendered ONLY when the grouped query says
+ // this card stands for 2+ charts of one work (chart_count = work_display
+ // group_size, P5a) — a single-chart card emits nothing, so its markup stays
+ // byte-identical to an ungrouped card. First in the chip row + shrink-0 so
+ // the overflow-hidden row clips arrangement chips before it ever clips the
+ // cue. Clicking it opens the Charts drawer (see wireCards).
+ function chartsChipHtml(song) {
+ const n = song.chart_count;
+ if (!(n >= 2) || !song.work_key) return '';
+ return '';
+ }
+
// ── Tuning-match flags (working-tuning PR 6) ───────────────────────────────
// Colour each song's tuning chip by whether your CURRENT working tuning covers
// it: green = play it now, amber = needs a retune. Uses the tuner plugin's
@@ -698,16 +729,22 @@
function songCard(song) {
const fav = song.favorite;
const key = cardKey(song);
+ // §7.1 display-chart switch (P5e): under a chart-intrinsic filter the
+ // server may attach `display_chart` — the member that MATCHES the
+ // filter when the representative doesn't. The card SHOWS and PLAYS
+ // that chart, while the row identity (sort keys, data-fn, the
+ // accuracy/heart anchor = the preferred chart) stays the rep's.
+ const shown = song.display_chart ? Object.assign({}, song, song.display_chart) : song;
// In select mode the checkbox occupies top-2 left-2, so shift the
// tuning chip right (left-9) to avoid overlapping it.
const tuningLabel = (typeof window.displayTuningName === 'function')
- ? window.displayTuningName(song.tuning_name || song.tuning)
- : (song.tuning_name || '');
+ ? window.displayTuningName(shown.tuning_name || shown.tuning)
+ : (shown.tuning_name || '');
let tuning = '';
if (tuningLabel) {
const rawOffsets = (typeof window.parseRawTuningOffsets === 'function')
- ? (window.parseRawTuningOffsets(song.tuning_offsets)
- || window.parseRawTuningOffsets(song.tuning_name || song.tuning))
+ ? (window.parseRawTuningOffsets(shown.tuning_offsets)
+ || window.parseRawTuningOffsets(shown.tuning_name || shown.tuning))
: null;
const targetNotes = (tuningLabel === 'Custom Tuning' && rawOffsets
&& typeof window.displayTuningTargets === 'function')
@@ -722,7 +759,7 @@
// Also flag a bass-only song (every arrangement is a bass part) so coverage
// scores its bass tuning against the bass base pitches, not guitar — otherwise
// a 4-string bass tuning read as guitar can false-match a guitar player.
- const chipArrs = song.arrangements || [];
+ const chipArrs = shown.arrangements || [];
const chipIsBass = chipArrs.length > 0
&& chipArrs.every((a) => /\bbass\b/i.test((a && a.name) || ''));
const matchAttr = (rawOffsets && rawOffsets.length)
@@ -740,7 +777,8 @@
const checkbox = state.selectMode
? ''
: '';
- const arrChips = arrChipsHtml(song);
+ const arrChips = arrChipsHtml(shown);
+ const chartsChip = chartsChipHtml(song);
// Plugin-contributed card actions placed 'inline' (in the hover action
// row) or 'overlay' (centered over the art). Menu-placed actions live in
// the ⋮ menu (openCardMenu); rendering these here means plugins using
@@ -765,20 +803,20 @@
const selRing = state.selected.has(key) ? ' ring-2 ring-fb-primary' : '';
return '
' +
// Always emit the chip row (even when empty) at a FIXED single-line
// height — uniform card height is what makes the windowed grid's
// absolute-position math exact (.v3-card-chips in v3.css).
- '
' + arrChips + '
' +
+ '
' + chartsChip + arrChips + '
' +
'
';
}
@@ -796,8 +834,23 @@
const items = (reg ? reg.list(song) : []).filter((a) => !a.placement || a.placement === 'menu');
const menu = document.createElement('div');
menu.className = 'v3-card-menu absolute top-10 right-2 z-30 min-w-[10rem] bg-fb-card border border-fb-border/60 rounded-lg shadow-xl py-1 text-sm';
+ // Multi-chart entries (P5d): a grouped grid row carries chart_count +
+ // work_key (P5a annotation), so the menu knows inline whether this card
+ // stands for versions. Local library only — the work API is local.
+ const canCharts = state.provider === 'local' && song.work_key && song.chart_count >= 2;
+ // Play follows the DISPLAYED chart (see wireCards) — under an intrinsic
+ // filter that's the matching member, not the representative.
+ const playTarget = song.display_chart ? Object.assign({}, song, song.display_chart) : song;
const rows = [
- { id: '__play', label: 'Play', run: () => { _saveLibraryScrollSnapshot(); window.playSong && window.playSong(enc(song.filename)); } },
+ { id: '__play', label: 'Play', run: () => { _saveLibraryScrollSnapshot(); window.playSong && window.playSong(enc(playTarget.filename)); } },
+ ...(canCharts ? [
+ { id: '__charts', label: 'Charts (' + song.chart_count + ')…' },
+ { id: '__playver', label: 'Play version ▸' },
+ ] : []),
+ // Undo for the drawer's "Split out" (P5e) — a split chart is its
+ // own singleton card (no ⚑ chip), so this is its only way back.
+ ...(state.provider === 'local' && song.is_split
+ ? [{ id: '__unsplit', label: 'Rejoin other versions' }] : []),
{ id: '__playlist', label: 'Add to playlist' },
...items.map((a) => ({ id: a.id, label: a.label, destructive: a.destructive, enabled: a.enabled, plugin: a.pluginId })),
];
@@ -816,30 +869,308 @@
menu.querySelectorAll('[data-act]').forEach((b) => b.addEventListener('click', async (e) => {
e.stopPropagation();
const id = b.getAttribute('data-act');
+ // 'Play version ▸' swaps THIS menu's rows for the work's charts —
+ // it must expand in place, so it's the one entry that doesn't close.
+ if (id === '__playver') { await _expandPlayVersions(menu, song, closeMenu); return; }
closeMenu();
- if (id === '__play') { playCard(song); return; }
+ if (id === '__play') { playCard(playTarget); return; }
+ if (id === '__charts') { openChartsDrawer(song.work_key, song); return; }
+ if (id === '__unsplit') {
+ if (await jsend('POST', '/api/chart/' + enc(song.filename) + '/unsplit')) _groupChanged();
+ return;
+ }
if (id === '__playlist') { await addFilenamesToPlaylist([song.filename]); return; }
if (reg) await reg.run(id, song, { source: 'v3-songs' });
}));
+ // Tree rows ride the (ungrouped) artists endpoint, so they don't carry
+ // chart_count/work_key — resolve the work lazily and slot a
+ // "Charts (N)…" entry into the still-open menu when versions exist.
+ // Grid rows already carry both (chart_count defined ⇒ no fetch).
+ if (state.provider === 'local' && song.chart_count === undefined && song.filename) {
+ jget('/api/chart/' + enc(song.filename) + '/work').then((w) => {
+ if (!w || !menu.isConnected) return;
+ const addEntry = (label, run) => {
+ const b = document.createElement('button');
+ b.className = 'w-full text-left px-3 py-1.5 hover:bg-fb-card/60 text-fb-text';
+ b.textContent = label;
+ b.addEventListener('click', (e) => { e.stopPropagation(); closeMenu(); run(); });
+ menu.appendChild(b);
+ };
+ if (w.chart_count >= 2 && w.work_key) {
+ addEntry('Charts (' + w.chart_count + ')…', () => openChartsDrawer(w.work_key, song));
+ }
+ if (w.is_split) {
+ addEntry('Rejoin other versions', async () => {
+ if (await jsend('POST', '/api/chart/' + enc(song.filename) + '/unsplit')) _groupChanged();
+ });
+ }
+ });
+ }
setTimeout(() => document.addEventListener('click', closer), 0);
}
+ // 'Play version ▸' (P5d): swap the ⋮ menu's rows for the work's charts;
+ // picking one plays that chart directly. A one-off alternate play — the
+ // keeper/headline doesn't move (stats record to the played chart's own
+ // filename), which is the design's "casual try ≠ deliberate adopt".
+ async function _expandPlayVersions(menu, song, closeMenu) {
+ const data = await jget('/api/work/' + enc(song.work_key) + '/charts');
+ if (!data || !Array.isArray(data.charts) || !data.charts.length || !menu.isConnected) return;
+ menu.innerHTML = data.charts.map((c) => {
+ const tl = (typeof window.displayTuningName === 'function')
+ ? window.displayTuningName(c.tuning_name || c.tuning) : (c.tuning_name || '');
+ return '';
+ }).join('');
+ menu.querySelectorAll('[data-ver]').forEach((vb) => vb.addEventListener('click', (e) => {
+ e.stopPropagation();
+ const fn = vb.getAttribute('data-ver');
+ closeMenu();
+ _saveLibraryScrollSnapshot();
+ if (window.playSong) window.playSong(enc(fn));
+ }));
+ }
+
+ // ── Charts drawer (P5d, design §7.1 UX-2/3) ────────────────────────────────
+ // The single deep-management surface for a work's charts. A body-appended
+ // slide-in panel (the filter-drawer idiom; body-appended like the playlist
+ // picker so it opens from any view) listing every chart of the work as a
+ // radiogroup — the checked row is the keeper the grid card plays. Clicking
+ // an unchecked row (or Enter/Space on it) = Set as preferred, one tap;
+ // "Reset to auto pick" appears when the keeper is your explicit pick.
+ // Writes go through the work-charts API and the drawer re-renders from the
+ // response (there's no server-side library event bus — the drawer is its
+ // own refresh); the grid re-fetches because the representative may have
+ // flipped. Global mode only — the slot-scoped (curated-album) mode is P6;
+ // the per-row Split escape hatch is P5e.
+ let _chartsPrevFocus = null; // focus to restore when the drawer closes
+
+ function _chartsDrawerEls() {
+ let ov = document.getElementById('v3-charts-overlay');
+ let dr = document.getElementById('v3-charts-drawer');
+ if (!ov) {
+ ov = document.createElement('div');
+ ov.id = 'v3-charts-overlay';
+ ov.className = 'fixed inset-0 bg-black/50 z-40 hidden';
+ ov.addEventListener('click', closeChartsDrawer);
+ document.body.appendChild(ov);
+ }
+ if (!dr) {
+ dr = document.createElement('aside');
+ dr.id = 'v3-charts-drawer';
+ dr.className = 'fixed top-0 right-0 h-full w-full sm:w-96 bg-fb-sidebar border-l border-fb-border/50 z-50 transform translate-x-full transition-transform duration-200 overflow-y-auto v3-scroll';
+ dr.setAttribute('role', 'dialog');
+ dr.setAttribute('aria-modal', 'true');
+ dr.setAttribute('aria-label', 'Charts of this song');
+ // a11y: Escape closes; Tab is trapped inside the open drawer
+ // (aria-modal alone doesn't trap for keyboard users); ArrowUp/Down
+ // move focus between the chart rows (focus only — selection stays
+ // on Enter/Space, since a native-radio "arrow = select" would fire
+ // a preferred write on every keystroke).
+ dr.addEventListener('keydown', (e) => {
+ if (e.key === 'Escape') { e.preventDefault(); closeChartsDrawer(); return; }
+ if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
+ const rows = [...dr.querySelectorAll('[role="radio"]')];
+ if (!rows.length) return;
+ const i = rows.indexOf(document.activeElement);
+ if (i === -1) return;
+ e.preventDefault();
+ rows[(i + (e.key === 'ArrowDown' ? 1 : rows.length - 1)) % rows.length].focus();
+ return;
+ }
+ if (e.key !== 'Tab') return;
+ const foci = dr.querySelectorAll('button, [tabindex]:not([tabindex="-1"])');
+ if (!foci.length) return;
+ const first = foci[0], last = foci[foci.length - 1];
+ if (e.shiftKey && document.activeElement === first) { e.preventDefault(); last.focus(); }
+ else if (!e.shiftKey && document.activeElement === last) { e.preventDefault(); first.focus(); }
+ });
+ document.body.appendChild(dr);
+ }
+ return { ov: ov, dr: dr };
+ }
+
+ // One chart row. `checked` = the current keeper (pref or auto-pick). The
+ // filename line is deliberate: duplicate charts usually share title/artist,
+ // so the pack filename is often the only human-readable distinguisher.
+ function _chartRowHtml(c, data) {
+ const checked = c.is_representative;
+ const prefLabel = checked
+ ? (data.preferred_source === 'user' ? 'Preferred — your pick' : 'Preferred (auto)')
+ : '';
+ const tuningLabel = (typeof window.displayTuningName === 'function')
+ ? window.displayTuningName(c.tuning_name || c.tuning)
+ : (c.tuning_name || '');
+ const meta = [fmtLabel(c), tuningLabel,
+ (c.arrangements || []).map((a) => a.name).join('/'),
+ c.year ? String(c.year) : '']
+ .filter(Boolean).join(' · ');
+ const acc = (typeof c.best_accuracy === 'number')
+ ? '' + Math.round(c.best_accuracy * 100) + '%'
+ : 'not played';
+ return '
' +
+ '
' +
+ '
' +
+ '
' + esc(c.title) + '
' +
+ '
' + esc(meta) + ' · ' + acc + '
' +
+ '
' + esc(c.filename) + '
' +
+ (prefLabel ? '
' + esc(prefLabel) + '
' : '') +
+ '
' +
+ '' +
+ '
' +
+ '
' +
+ '' +
+ // Split escape hatch (P5e, §7.1): "these aren't the same song".
+ // Only offered while the work still has 2+ charts — splitting the
+ // last member is meaningless. Undo lives in the split-out card's
+ // ⋮ menu ("Rejoin other versions").
+ (data.count >= 2
+ ? ''
+ : '') +
+ '
' +
+ '
';
+ }
+
+ // A preferred/auto flip can change which chart the grid's card stands for —
+ // re-fetch the grid in place (scroll preserved; renderWindow refills from
+ // the current scrollTop). The tree lists every chart flat, so it's
+ // unaffected; rare curate action, so a full re-fetch is fine.
+ function _groupChanged() {
+ if (state.view === 'grid' && groupingActive()) loadGrid(true);
+ }
+
+ function _renderChartsDrawer(data, opts) {
+ const els = _chartsDrawerEls();
+ const dr = els.dr;
+ const head = data.charts.find((c) => c.is_representative) || data.charts[0];
+ // Mastery-anchor heads-up (§7.1): shown once, ambiently, right after a
+ // switch — the headline may drop because history stays with each chart
+ // (motor mastery is arrangement-specific). Text only, no toast/sound.
+ const switchNote = (opts && opts.switched)
+ ? '
Practice history stays with each chart — your new pick starts from its own stats.