@gjsify/adwaita-web 0.53.0 → 0.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_icons.generated.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_variables.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_theme.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_root.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_reset.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_icon.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_labels.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_box.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_style_classes.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_window.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_headerbar.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_action_bar.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_window_title.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_button.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_button_content.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_popover.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_split_button.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_menu_button.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_drop_down.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_toggle_group.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_switch.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_entry.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_checks.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_progress_bar.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_preferences.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_card.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_data_grid.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_clamp.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_spinner.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_shortcut_label.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_avatar.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_banner.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_status_page.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_action_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_entry_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_switch_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_combo_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_spin_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_button_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_expander_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_password_entry_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_toast.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_toolbar_view.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_scrolling.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_wrap_box.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_panes.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_overlay_split_view.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_navigation_split_view.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_carousel.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_tab_view.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_view_switcher.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_inline_view_switcher.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_view_stack.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_view_switcher_bar.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_navigation_view.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_bottom_sheet.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_sidebar.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_about_dialog.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_alert_dialog.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_preferences_dialog.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_dialog.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_widget.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/adwaita-skin.scss"],"names":[],"mappings":";AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;ACpDF;EAlME;EACA;EAGA;EACA;EAGA;EACA;EACA;EAKA;EAOA;EAMA;EACA;EACA;EACA;EACA;EAMA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAIA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EASA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EAgBA;EACA;EACA;EACA;EACA;EAaA;EACA;EACA;EAwCA;EACA;EACA;EACA;;;AAaF;EACE;IACE;IACA;IACA;;;AC5IJ;EACE;IA/DA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAKA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAUA;;;AAkBF;EA5EE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAUA;;;AAyBF;EDrFE;EACA;EAGA;EACA;EAGA;EACA;EACA;EAKA;EAOA;EAMA;EACA;EACA;EACA;EACA;EAMA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAIA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EASA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EAgBA;EACA;EACA;EACA;EACA;EAaA;EACA;EACA;EAwCA;EACA;EACA;EACA;;;AErLF;EACE;EACA;EACA;EACA;EACA;;;ACmCF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAcF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAOA;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;ACjFJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAQA;;AAKA;EACE;;;AA+BJ;EACE;EACA;;;AAcF;EACE;;;ACzBF;EACE;EACA;EACA;EACA;EAEA;;AAEA;EAEE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AASF;EACE;EAGA;;AAWF;EACE;;AAGF;EACE;;AAiBF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AASJ;EACE;;;AAIF;EACE;;;AAOA;EACE;EAEA;EACA;EACA;;;AALF;EACE;EAEA;EACA;EACA;;;AALF;EACE;EAEA;EACA;EACA;;;AAIJ;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAIF;EACE;;;AAIF;EACE;EACA;;;AAIF;EACE;EACA;;;AAIF;EACE;EACA;EACA;;;AAIF;EACE;EACA;EACA;;;AAIF;EACE;EACA;;;AAIF;EACE;;;ACzOF;EACE;EACA;EACA;;;AAGF;EACE;;;ACaF;AAAA;AAAA;AAKA;EACE;EACA;;;AAOF;EACE;EACA;;AAEA;EAEE;EACA;;AAGF;EACE;EACA;;;AAMJ;EACE;;;AAGF;AAAA;AAAA;AAOA;AAAA;EACE;EACA;EACA;EACA,YACE;;AAIF;EATF;AAAA;IAUI,YACE;;;;AAcJ;EACE,YACE;;AAGF;EACE;;AAMF;EACE;;AASJ;EAEE;EACA;EACA;;AAEA;EANF;IAOI;;;;AAKN;AAAA;AAAA;AASA;EAGE;EACA;EAKA;;;AAKF;EACE;EACA;EACA;EACA;EACA;;AAEA;EAGE;EAGA;;;AAIJ;AAAA;AAAA;AAeA;EACE;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;EAIE;;AAEA;AAAA;AAAA;AAAA;EACE;;AAGF;AAAA;AAAA;AAAA;EACE;;AASF;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAON;EACE;EACA;;;AAMJ;EACE;EACA;EACA;;AAEA;EAEE;;AAGF;EACE;;;AAIJ;AAAA;AAAA;AAUA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAkBA;AAAA;EAEE;;AAII;AAAA;AAAA;EAEE;EACA;;AAGF;AAAA;AAAA;EAEE;EACA;;AATF;AAAA;AAAA;EAEE;EACA;;AAGF;AAAA;AAAA;EAEE;EACA;;AAKN;AAAA;EACE;;AAII;AAAA;AAAA;EAEE;EACA;;AAGF;AAAA;AAAA;EAEE;EACA;;AATF;AAAA;AAAA;EAEE;EACA;;AAGF;AAAA;AAAA;EAEE;EACA;;;AAOV;AAAA;AAAA;AAQA;EACE;;;AAIF;EACE;;;AAKF;AAAA;AAAA;AA+BA;EACE;;;AAGF;EACE;;;AAIA;EACE;;AAGF;EACE;;;AAKF;EACE;;AAGF;EACE;;;AC1ZJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAGF;EACA;EACA;;;ACAF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;AAEA;EAgBE;EACA;EAIA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EAGA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;;AAiBN;AAAA;EAEE,kBACE;;;AC5GJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;AAAA;EAEI;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;;AC3CR;EACE;EACA;EACA;EACA;EACA;EACA;;AAKA;AAAA;EAEE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AChCJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAKF;EACE;;AAEA;EACE;;AAGF;EACE;;AAKJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AASJ;EACE;EACA;EACA;EAEA;EACA;;AAEA;EACE;;AAGF;EACE;;AAQJ;EACE;EACA;;AAIF;EACE;EACA;;AAIF;EACE;EACA;EACA;;AAQF;EACE;EACA;EACA;;AAOF;EACE;;AAEA;EACE;;AAGF;EACE;;AAUJ;EACE;EACA;EACA;EACA;;AAEA;EANF;IAOI;;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;;AClJN;EACE;EACA;;;AAKF;EACE;EACA;;;AAGF;EACE;EACA;EAEA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAGF;EAGE;EACA;EACA;;AAMA;EACE;;AAGF;EACE;EACA;EACA;EACA;;;ACrCN;EAIE;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA,YACE;;AAOF;EA3BF;IA4BI,YACE;;;AAYJ;EAEE;;AAKF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAOA;EACE;;AAGF;EACE;;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKA;EAGE;;AAGF;EACE;;AAIF;EACE;IAIE;;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;;;AAWJ;EACE;EACA;EACA;;;AAeF;EACE;EACA;EACA;;;AAMF;EACE;;;AAOF;EACE;EACA;EACA;EACA;;;AAYF;EACE;EACA;EACA;EACA;EACA;EACA;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKJ;EACE;EACA;EACA;EACA;EACA;;;AAKF;EACE;;;ACrRF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EAEE;;AAIF;EACE;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EAEE;;AAYJ;EACE;EACA;;AAEA;EACE;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;EACA;;AAKJ;EACE;EACA;;AAEA;EACE;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAKJ;EACE;;AAIF;EACE;EACA;;AAEA;AAAA;EAEE;EACA;;;ACtKN;EACI;EACA;EACA;EACA;;AAGA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAKR;EACI;;AAIJ;EACI;;AAIJ;EACI;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;;AAUR;EACI;EACA;EACA;;;AC7ER;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAWF;EACE;EACA;EACA;;AAKF;EACE;;AAIF;EACE;EACA;EACA;EACA;;AAMF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACjIJ;EACE;EACA;;;AAGF;EAGE;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAGF;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAIF;EACE;EACA;EACA,YACE;;AAGF;EACE;;AAMN;EACE;;AAEA;EACE;EACA;EACA;;AAMJ;EACE;EAEA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;;AAEA;EACE;;AAKN;EACE;;;AC5FN;EACE;EACA;EACA;EACA;EACA;;AAIA;EACE;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;;AAEA;EACE;;;AAIJ;EACE;EACA;;;AAOF;EACE;;AAEA;EACE;;;AClFJ;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAGF;EAEE;EACA;;AAIF;EACE;EACA;EACA;;;ACOJ;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;AAAA;EACE;EACA;EACA;EACA;EACA;;AAIF;AAAA;EAME;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;AAGF;EAhBF;AAAA;IAoBI;;;AAKF;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAQF;AAAA;EACE;;AAEA;EAHF;AAAA;IAII;;;AAIJ;AAAA;EACE;EACA;;AAEA;EAJF;AAAA;IAKI;;;AAON;AAAA;AAAA;EAEE;EACA;EACA;;AAQA;AAAA;AAAA;EACE;;AAMF;AAAA;AAAA;EACE;;AAKJ;AAAA;EACE;EACA;;AAKF;AAAA;EACE;EACA;;;AAKJ;EACE;;;AAIF;EACE;;;AAIF;EACE,YA/IY;EAgJZ,oBAhJY;;;AAmJd;EACE,YAlJa;EAmJb,oBAnJa;;;AA2Jf;AAAA;EAEE,YA3JW;EA4JX,oBA5JW;;;AAiKb;AAAA;EAEE;;AAEA;AAAA;EACE;EACA;;AAKF;AAAA;EACE;;;ACtLJ;EACE;EACA;EACA;EAGA;;AAEA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAVF;IAYI;;;AAIJ;EAEE;EACA;EACA;EACA;EACA,YACE;;AAOJ;EAIE;;AAIF;EACE;;AAKF;EACE;;AAKF;EACE;;AASF;EAEE;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAOJ;EACE;EACA;EACA;EACA;;AAIA;EARF;IASI;IACA;IACA;;;;AASN;EACE;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;ACxJJ;EACE;;AAMA;EACE;;AAKF;EACE;EACA;EACA;EACA;;AAKA;EACE;;AASF;EACE;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAMF;EAGE;;;ACrEJ;AAAA;EAIE;EACA;EACA;;;ACAF;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAKF;EACE;EACA;;AAMF;EACE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAgBF;EAGE;EACA;EACA;EACA;EACA;;AAMF;EACE;EACA;EACA;;AAKJ;EACE;;AAEA;EACE;;AAMJ;EACE;EACA;;AAEA;EACE;EACA;;AAOJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;;ACvIN;EACE;EACA;;;ACSF;EAIE;EACA;EACA;EACA;EACA;EACA;EAIA;;AAEA;EACE;EAGA;;;ACnBJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAXF;IAYI,YACE;;;AAQN;EACE;EACA;EACA;EAGA;EACA;;AAKF;EACE;;;ACvEJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAQF;EACE;EACA;EACA;EACA;;;AClCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;AAGA;EACE;;AAOF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAOF;EACE;EACA;;AAEA;EACE;;;AC/CR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAIF;EACE;;AAMF;EACE;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;;AC/DN;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;;;AAOJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;ACnDF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;AAGF;EACE;;AAIJ;AAAA;EAEE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAaF;AAAA;EACE;EACA;;AAGF;AAAA;EACE;EACA;;AAMF;AAAA;EACE;EACA;;AAEA;AAAA;EACE;EACA;;;ACvFN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIF;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACtCF;EACE;EACA;;;ACRJ;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAWA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAUJ;EACE;;AAGF;EACE;;;ACvFJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;ACtDN;EACE;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAKA;EACE;;AAGF;EACE;;AAKJ;EACE;EACA;EACA;;AAGE;EACE;EACA;;AAMF;EACE;EACA;;AAMN;EACE;EACA;EACA;;AAGE;EACE;EACA;;AAMF;EACE;EACA;;;AC3FR;EACE;EACA;EACA;;AAEA;EACE;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAKF;EACE;EACA;;AAIF;AAAA;EAEE;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAWF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAKF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EACE;;;AC3FR;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIF;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAKJ;EACE;EACA;;;ACpDJ;EACE;EACA;;AAGA;EACE;EACA;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;;AChJN;EACE;EACA;EACA;EACA;EACA;EAEA;;AAEA;AAAA;EAEE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AA4BF;EACE;;AASF;EACE;;AAMF;AAAA;EAEE;EACA;;AAGF;EACE,YACE;;AAGF;EACE;;AAIJ;EACE,YACE;;AAGF;EACE;;AAgBF;AAAA;EACE;EACA;EACA;;;AAeN;AAAA;EAEE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;ACnHA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAOF;EACE,QAnCc;EAoCd;EACA;EACA;;AAGF;EACE,QA1Cc;EA2Cd;EACA;EACA;;AAQF;EAEE;EACA;EACA;EAGA;;AAGF;EACE;EACA,kBACE;EAEF;EACA;;AAGF;EACE;EACA,kBACE;EAEF;EACA;;AAGF;EACE;IAEE;;;;AC3FN;EACE;EACA;EACA;EACA;EAKA;EACA;;;AAQF;EACE;;;AAWF;EACE;;;AAQF;AAAA;EAEE;;;AAYF;EACE;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;;;ACnDF;EACE;EACA;;;AAUF;EACE;EACA;;;AAaF;EACE;EACA;;;AClCF;EACE;EACA;EACA;EACA;EACA;EACA;;AAUA;EACE;EACA;EACA;EACA;EACA;EACA;EAGA;;AAkBF;EACE;EACA;EACA;EACA;EACA;EACA;;AAKF;EACE;;AAOA;EACE;;AAGF;EACE;;AASF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAOJ;EACE;EACA;EACA;EACA;;AAmBA;EACE;EACA;;AAGF;EACE;EACA;;AAKA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAQN;EACE;EACA;EACA;EACA;EACA;;AAMF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAMJ;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACxMF;EACE;EACA;EACA;EACA;EACA;;AAOA;EACE;EACA;EACA;EACA;;AASF;EACE;EACA;EACA;EACA;EACA;EACA;;AAQF;AAAA;EAEE;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;;AAOF;EACE;;AAGF;EACE;;AASJ;EACE;;AAGF;EACE;;AAMA;EACE;;AAGF;EACE;EACA;EACA;EACA;;;ACtFN;EACE;EACA;EAMA;;AAEA;EACE;EACA;EACA;EACA;EACA;EAEA;EACA;;AAEA;EACE;;AAiBJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMJ;AAAA;EAEE;EACA;EACA;EACA;;AAIA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMJ;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAIA;EACE;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA,YACE;;AAMJ;EACE;;;AAON;EACE;;AAEA;EACE;EACA;EACA;EACA;EAEA;EACA,YACE;;AAGF;EACE;;;ACxIN;EACE;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAKF;EACE;;AAEA;EACE;;AAGF;EACE;;AAON;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;AAAA;AAAA;EAIE;;AAGF;EACE;EACA;EACA;EACA;;AAQF;AAAA;EAEE;EACA;EACA;;AAEA;AAAA;EACE;;AAWJ;EACE;;AAEA;EACE;;AAOJ;EACE;;AAEA;EACE;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAKJ;EACE;EACA;;AAKF;EACE;;AAMA;EAGE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;;ACnRN;EACI;EACA;EACA;;AAIA;EACI;EACA;EACA;EACA;;AAKJ;EACI;EACA;EACA;EAOA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACI;EAEJ;EACA;;AAOA;EACI;;AAGJ;EACI;EACA;EACA;;AAGJ;EAII;EACA;EACA;EACA;;AAMJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAmBR;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAKJ;EACI;;AAEA;EACI;;AAGJ;EACI;;AAMZ;EACI;EACA;;AAMA;EACI;;AAGJ;EACI;EACA;EASA;EACA;;AAEA;EACI;EACA;;AA4BZ;EACI;EACA;EACA;EACA;;AAMJ;EACI;;AAEA;EACI;EACA;EACA;EACA;;;ACtNZ;EAGI;EAEA;EACA;EACA;;AAGA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACI;EAGJ;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAIJ;EACI;EACA;EACA,YACI;;AAGJ;EACI;;AAOZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAMJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAKR;EACI;;AAIA;EACI;;AAMR;EACI;EACA;EACA;;AAGJ;EACI;;AAKA;EACI;;AAGJ;EACI;EACA;EACA;;AAMR;EACI;;AAEA;EACI;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;EACA;;AAEA;EACI;;AAKZ;EACI;;;ACpMZ;EACI;EACA;EACA;EAEA;EACA;;AAIA;EACI;;AAEA;EACI;EACA;EACA;EACA;;;ACdZ;EACI;;AAOA;EACI;;AATR;EAYI;EAGA;EACA;EACA;;AAGA;EACI;EACA;EAEA;;AAMJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACI;EAEJ;EACA;;AAMA;EACI;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAKJ;EACI;;AAEA;EACI;;;AC/HhB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAKA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAyBF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAKF;EACE;EACA;;AAMJ;EACE;;AAMF;EACE;;;AAIJ;EACE;IACE;IACA;;EAGF;IACE;IACA;;;ACzFJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAMA;EACE;EACA;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;AAGF;EACE;EACA;EACA;EACA,YACE;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAGF;EACA,YACE;EAEF;;AAUF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAMF;EACE;;AAEA;EAEE;;AAMN;EACE;;AAOF;EACE;EACA,YACE;;AAMJ;EACE;;;AC5JJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EAEA;;AAGF;EACE;EACA;;AAKA;EACE;;AAKF;EACE;EACA;EACA;;AAGF;EACE;;AAGA;EACE;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;;AAYF;EACE;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAKF;EACE;EACA;;AAEA;EAEE;;AAKN;EACE;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKJ;EACE;EACA;EACA;;AASA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAEA;EACE;;AAKN;EACE;;;AAgBJ;EAGE;EACA;;AAGF;EACE;EACA;;AAVJ;EAaE;EAEA;;AAEA;EACE;EACA;EACA;;AAIA;EACE;;AAGF;EACE;;AAIJ;AAAA;EAEE;;AAEA;AAAA;EACE;;AAGF;AAAA;EACE;;;ACnQN;EAEE;;AAEA;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAGF;;AAEA;EACE;EACA;;AAKJ;AAAA;AAAA;EAGE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAMA;EACE;EACA;;AAGF;EACE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;;AAEA;EACE;;AAKJ;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;;AAMR;EACE;IACE;;EAEF;IACE;;;AAIJ;EACE;IACE;IACA;;EAEF;IACE;IACA;;;ACrPJ;EACE;;AAEA;EACE;;;AAKJ;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA,YACE;EAIF;EAEA;;;AAIF;EACE;;;AAIF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EAEA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAIF;EACE;;AAEA;EACE;;;AAMJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;;AAUN;EACE;EACA;;;AAGF;EACE;IACE;;EAEF;IACE;;;AAIJ;EACE;IACE;IACA;;EAEF;IACE;IACA;;;AC7IJ;EAGE;;AAEA;EACE;;AAOF;EACE;EACA;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;AAQJ;EACE;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAMJ;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;;AAMA;EACE;;;ACzIR;EACE;;AAEA;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA,YACE;EAIF;EACA;;AAEA;EACE;;AAMJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;;AAIF;EACE;;AAtKF;EACE;EACA;EACA;;AAGF;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;;;AAkKJ;EAhLE;IACE;IACA;IACA;;EAGF;IACE;IACA;IAEA;IACA;IACA;IACA;IACA;;;AAwKJ;EACE;IACE;;EAEF;IACE;;;AAIJ;EACE;IACE;IACA;;EAEF;IACE;IACA;;;AAIJ;EACE;IACE;;EAEF;IACE;;;AC/LJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;EAEE;;;ACwDF;EACE","sourcesContent":["// _icons.generated.scss — auto-generated by scripts/build-scss.mjs\n// DO NOT EDIT — regenerated on every build from @gjsify/adwaita-icons.\n\n:root {\n --icon-go-down: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%201%205%20c%200%20-0.265625%200.105469%20-0.519531%200.292969%20-0.707031%20c%200.390625%20-0.390625%201.023437%20-0.390625%201.414062%200%20l%205.292969%205.292969%20l%205.292969%20-5.292969%20c%200.390625%20-0.390625%201.023437%20-0.390625%201.414062%200%20c%200.1875%200.1875%200.292969%200.441406%200.292969%200.707031%20s%20-0.105469%200.519531%20-0.292969%200.707031%20l%20-6%206%20c%20-0.390625%200.390625%20-1.023437%200.390625%20-1.414062%200%20l%20-6%20-6%20c%20-0.1875%20-0.1875%20-0.292969%20-0.441406%20-0.292969%20-0.707031%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-sidebar-show: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cg%20fill%3D'currentColor'%3E%20%3Cpath%20d%3D'm%206%2013%20v%20-10%20h%20-3%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%208%20c%200%200.550781%200.449219%201%201%201%20z%20m%200%200'%20fill-opacity%3D'0.34902'%2F%3E%20%3Cpath%20d%3D'm%203%201%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%208%20c%200%201.644531%201.355469%203%203%203%20h%2010%20c%201.644531%200%203%20-1.355469%203%20-3%20v%20-8%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%200%202%20h%203%20v%2010%20h%20-3%20c%20-0.570312%200%20-1%20-0.429688%20-1%20-1%20v%20-8%20c%200%20-0.570312%200.429688%20-1%201%20-1%20z%20m%204%200%20h%206%20c%200.570312%200%201%200.429688%201%201%20v%208%20c%200%200.570312%20-0.429688%201%20-1%201%20h%20-6%20z%20m%200%200'%2F%3E%20%3C%2Fg%3E%20%3C%2Fsvg%3E\");\n --icon-go-previous: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%2012%202%20c%200%20-0.265625%20-0.105469%20-0.519531%20-0.292969%20-0.707031%20c%20-0.390625%20-0.390625%20-1.023437%20-0.390625%20-1.414062%200%20l%20-6%206%20c%20-0.1875%200.1875%20-0.292969%200.441406%20-0.292969%200.707031%20s%200.105469%200.519531%200.292969%200.707031%20l%206%206%20c%200.390625%200.390625%201.023437%200.390625%201.414062%200%20c%200.1875%20-0.1875%200.292969%20-0.441406%200.292969%20-0.707031%20s%20-0.105469%20-0.519531%20-0.292969%20-0.707031%20l%20-5.292969%20-5.292969%20l%205.292969%20-5.292969%20c%200.1875%20-0.1875%200.292969%20-0.441406%200.292969%20-0.707031%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-go-next: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%204%202%20c%200%20-0.265625%200.105469%20-0.519531%200.292969%20-0.707031%20c%200.390625%20-0.390625%201.023437%20-0.390625%201.414062%200%20l%206%206%20c%200.1875%200.1875%200.292969%200.441406%200.292969%200.707031%20s%20-0.105469%200.519531%20-0.292969%200.707031%20l%20-6%206%20c%20-0.390625%200.390625%20-1.023437%200.390625%20-1.414062%200%20c%20-0.1875%20-0.1875%20-0.292969%20-0.441406%20-0.292969%20-0.707031%20s%200.105469%20-0.519531%200.292969%20-0.707031%20l%205.292969%20-5.292969%20l%20-5.292969%20-5.292969%20c%20-0.1875%20-0.1875%20-0.292969%20-0.441406%20-0.292969%20-0.707031%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-view-refresh: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%207.40625%201%20c%20-0.613281%200.007812%20-1.234375%200.089844%20-1.847656%200.253906%20c%20-3.273438%200.878906%20-5.558594%203.855469%20-5.558594%207.246094%20s%202.285156%206.367188%205.558594%207.242188%20c%203.273437%200.878906%206.742187%20-0.558594%208.4375%20-3.492188%20c%200.277344%20-0.480469%200.109375%20-1.089844%20-0.367188%20-1.367188%20c%20-0.476562%20-0.273437%20-1.089844%20-0.109374%20-1.367187%200.367188%20c%20-1.246094%202.160156%20-3.777344%203.207031%20-6.1875%202.5625%20c%20-2.40625%20-0.644531%20-4.074219%20-2.820312%20-4.074219%20-5.3125%20c%200%20-2.496094%201.667969%20-4.667969%204.074219%20-5.3125%20c%202.410156%20-0.644531%204.941406%200.402344%206.1875%202.5625%20c%200.058593%200.085938%200.125%200.164062%200.203125%200.226562%20l%20-0.019532%200.015626%20l%20-0.007812%200.007812%20h%20-1.4375%20c%20-0.550781%200%20-1%200.449219%20-1%201%20c%200%200%200%201%201%201%20h%205%20v%20-5%20s%200.003906%20-1%20-1%20-1%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%201.6875%20l%20-0.015625%200.011719%20l%20-0.011719%200.011719%20c%20-1.277344%20-2.179688%20-3.53125%20-3.519532%20-5.953125%20-3.691407%20c%20-0.203125%20-0.015625%20-0.40625%20-0.019531%20-0.613281%20-0.019531%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-open-menu: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cg%20fill%3D'currentColor'%3E%20%3Cpath%20d%3D'm%201%202%20h%2014%20v%202%20h%20-14%20z%20m%200%200'%2F%3E%20%3Cpath%20d%3D'm%201%207%20h%2014%20v%202%20h%20-14%20z%20m%200%200'%2F%3E%20%3Cpath%20d%3D'm%201%2012%20h%2014%20v%202%20h%20-14%20z%20m%200%200'%2F%3E%20%3C%2Fg%3E%20%3C%2Fsvg%3E\");\n --icon-go-home: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%200.363281%20c%20-0.5%200%20-1%200.167969%20-1.40625%200.507813%20l%20-4.464844%203.722656%20c%20-0.714844%200.59375%20-1.128906%201.476562%20-1.128906%202.40625%20v%206%20c%200%201.65625%201.34375%203%203%203%20h%208%20c%201.65625%200%203%20-1.34375%203%20-3%20v%20-6%20c%200%20-0.929688%20-0.414062%20-1.8125%20-1.128906%20-2.40625%20l%20-4.464844%20-3.722656%20c%20-0.40625%20-0.339844%20-0.90625%20-0.507813%20-1.40625%20-0.507813%20z%20m%20-0.015625%201.996094%20c%200.050781%20-0.003906%200.101563%200.011719%200.144531%200.046875%20l%204.464844%203.722656%20c%200.257812%200.214844%200.40625%200.535156%200.40625%200.871094%20v%206%20c%200%200.5625%20-0.4375%201%20-1%201%20h%20-2%20v%20-5%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20h%20-2%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%205%20h%20-2%20c%20-0.5625%200%20-1%20-0.4375%20-1%20-1%20v%20-6%20c%200%20-0.335938%200.148438%20-0.65625%200.40625%20-0.871094%20l%204.464844%20-3.722656%20c%200.035156%20-0.027344%200.074218%20-0.042969%200.113281%20-0.046875%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-list-add: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%207%201%20v%206%20h%20-6%20v%202%20h%206%20v%206%20h%202%20v%20-6%20h%206%20v%20-2%20h%20-6%20v%20-6%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-network-wireless: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%201.992188%20c%20-2.617188%200%20-5.238281%200.933593%20-7.195312%202.808593%20l%20-0.496094%200.480469%20c%20-0.3984378%200.378906%20-0.410156%201.011719%20-0.03125%201.410156%20c%200.382812%200.398438%201.015625%200.410156%201.414062%200.03125%20l%200.5%20-0.476562%20c%203.085938%20-2.957032%208.53125%20-2.957032%2011.617188%200%20l%200.5%200.476562%20c%200.398437%200.378906%201.03125%200.367188%201.414062%20-0.03125%20c%200.378906%20-0.398437%200.367188%20-1.03125%20-0.03125%20-1.410156%20l%20-0.496094%20-0.484375%20c%20-1.957031%20-1.871094%20-4.578124%20-2.804687%20-7.195312%20-2.804687%20z%20m%20-0.03125%204.007812%20c%20-1.570312%200.011719%20-3.128906%200.628906%20-4.207031%201.8125%20l%20-0.5%200.550781%20c%20-0.179688%200.195313%20-0.277344%200.453125%20-0.261719%200.71875%20c%200.011719%200.265625%200.128906%200.515625%200.328125%200.695313%20c%200.195313%200.179687%200.453125%200.273437%200.71875%200.257812%20c%200.265625%20-0.011718%200.515625%20-0.128906%200.695313%20-0.328125%20l%200.496093%20-0.546875%20c%201.277344%20-1.402344%204.160157%20-1.496094%205.523438%200.003906%20l%200.5%200.542969%20c%200.175781%200.199219%200.425781%200.316407%200.691406%200.328125%20c%200.265625%200.015625%200.523437%20-0.078125%200.722656%20-0.257812%20c%200.195313%20-0.179688%200.3125%20-0.429688%200.324219%20-0.695313%20c%200.011719%20-0.261719%20-0.082031%20-0.523437%20-0.261719%20-0.71875%20l%20-0.5%20-0.546875%20c%20-1.121093%20-1.234375%20-2.703125%20-1.828125%20-4.269531%20-1.816406%20z%20m%200.03125%204%20c%20-0.511719%200%20-1.023438%200.195312%20-1.414062%200.585938%20c%20-0.78125%200.78125%20-0.78125%202.046874%200%202.828124%20s%202.046874%200.78125%202.828124%200%20s%200.78125%20-2.046874%200%20-2.828124%20c%20-0.390624%20-0.390626%20-0.902343%20-0.585938%20-1.414062%20-0.585938%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-folder: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%202.96875%201.003906%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%208%20c%200%201.644532%201.355469%203%203%203%20h%2010%20c%201.644531%200%203%20-1.355468%203%20-3%20v%20-6%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20h%20-3.585938%20l%20-1.707031%20-1.707031%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20z%20m%200%202%20h%203.585938%20l%201%201%20h%20-5.585938%20c%200%20-0.5625%200.4375%20-1%201%20-1%20z%20m%20-1%202%20h%2011%20c%200.5625%200%201%200.4375%201%201%20v%206%20c%200%200.5625%20-0.4375%201%20-1%201%20h%20-10%20c%20-0.5625%200%20-1%20-0.4375%20-1%20-1%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-starred: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%200%20c%20-0.429688%200%20-0.8125%200.273438%20-0.949219%200.683594%20l%20-1.449219%204.339844%20l%20-4.589843%20-0.015626%20c%20-0.980469%20-0.003906%20-1.382813%201.257813%20-0.582031%201.820313%20l%203.625%202.554687%20l%20-1.5%204.285157%20c%20-0.316407%200.902343%200.6875%201.691406%201.492187%201.171875%20l%204.003906%20-2.59375%20l%203.894531%202.585937%20c%200.800782%200.53125%201.816407%20-0.257812%201.5%20-1.160156%20l%20-1.503906%20-4.289063%20l%203.644532%20-2.578124%20c%200.789062%20-0.5625%200.394531%20-1.808594%20-0.574219%20-1.8125%20l%20-4.660157%20-0.015626%20l%20-1.402343%20-4.285156%20c%20-0.132813%20-0.410156%20-0.515625%20-0.68749975%20-0.949219%20-0.691406%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-system-search: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%206.5%200%20c%20-3.578125%200%20-6.5%202.921875%20-6.5%206.5%20s%202.921875%206.496094%206.5%206.496094%20c%201.429688%200%202.753906%20-0.464844%203.828125%20-1.253906%20l%202.945313%202.945312%20c%200.957031%200.9375%202.363281%20-0.5%201.40625%20-1.4375%20l%20-2.929688%20-2.929688%20c%200.785156%20-1.074218%201.25%20-2.394531%201.25%20-3.820312%20c%200%20-3.578125%20-2.921875%20-6.5%20-6.5%20-6.5%20z%20m%200%202%20c%202.496094%200%204.5%202.003906%204.5%204.5%20s%20-2.003906%204.496094%20-4.5%204.496094%20s%20-4.5%20-2%20-4.5%20-4.496094%20s%202.003906%20-4.5%204.5%20-4.5%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-contact-new: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%201%20c%20-1.65625%200%20-3%201.34375%20-3%203%20s%201.34375%203%203%203%20s%203%20-1.34375%203%20-3%20s%20-1.34375%20-3%20-3%20-3%20z%20m%20-1.5%207%20c%20-2.492188%200%20-4.5%202.007812%20-4.5%204.5%20v%200.5%20c%200%201.109375%200.890625%202%202%202%20h%206%20v%20-1%20h%20-3%20v%20-4%20h%203%20v%20-1.972656%20c%20-0.164062%20-0.019532%20-0.332031%20-0.027344%20-0.5%20-0.027344%20z%20m%204.5%200%20v%203%20h%20-3%20v%202%20h%203%20v%203%20h%202%20v%20-3%20h%203%20v%20-2%20h%20-3%20v%20-3%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-mail-unread: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%203%202%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%206%20c%200%201.644531%201.355469%203%203%203%20h%2010%20c%201.644531%200%203%20-1.355469%203%20-3%20v%20-6%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%200.800781%202%20h%208.394531%20l%20-3.917968%202.613281%20c%20-0.171875%200.113281%20-0.382813%200.113281%20-0.554688%200%20z%20m%20-1.800781%201.203125%20l%204.613281%203.074219%20c%200.835938%200.558594%201.9375%200.558594%202.773438%200%20l%204.613281%20-3.074219%20v%205.796875%20c%200%200.570312%20-0.429688%201%20-1%201%20h%20-10%20c%20-0.570312%200%20-1%20-0.429688%20-1%20-1%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-avatar-default: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%201%20c%20-1.65625%200%20-3%201.34375%20-3%203%20s%201.34375%203%203%203%20s%203%20-1.34375%203%20-3%20s%20-1.34375%20-3%20-3%20-3%20z%20m%20-1.5%207%20c%20-2.492188%200%20-4.5%202.007812%20-4.5%204.5%20v%200.5%20c%200%201.109375%200.890625%202%202%202%20h%208%20c%201.109375%200%202%20-0.890625%202%20-2%20v%20-0.5%20c%200%20-2.492188%20-2.007812%20-4.5%20-4.5%20-4.5%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-camera-photo: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cg%20fill%3D'currentColor'%3E%20%3Cpath%20d%3D'm%206.5%200%20c%20-0.265625%200%20-0.519531%200.105469%20-0.707031%200.292969%20l%20-1.707031%201.707031%20h%20-1.085938%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%207%20c%200%201.644531%201.355469%203%203%203%20h%2010%20c%201.644531%200%203%20-1.355469%203%20-3%20v%20-7%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20h%20-1.085938%20l%20-1.707031%20-1.707031%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20z%20m%200.414062%202%20h%202.171876%20l%201.707031%201.707031%20c%200.1875%200.1875%200.441406%200.292969%200.707031%200.292969%20h%201.5%20c%200.570312%200%201%200.429688%201%201%20v%207%20c%200%200.570312%20-0.429688%201%20-1%201%20h%20-10%20c%20-0.570312%200%20-1%20-0.429688%20-1%20-1%20v%20-7%20c%200%20-0.570312%200.429688%20-1%201%20-1%20h%201.5%20c%200.265625%200%200.519531%20-0.105469%200.707031%20-0.292969%20z%20m%200%200'%2F%3E%20%3Cpath%20d%3D'm%208%204%20c%20-2.199219%200%20-4%201.800781%20-4%204%20s%201.800781%204%204%204%20s%204%20-1.800781%204%20-4%20s%20-1.800781%20-4%20-4%20-4%20z%20m%200%202%20c%201.117188%200%202%200.882812%202%202%20s%20-0.882812%202%20-2%202%20s%20-2%20-0.882812%20-2%20-2%20s%200.882812%20-2%202%20-2%20z%20m%200%200'%2F%3E%20%3C%2Fg%3E%20%3C%2Fsvg%3E\");\n --icon-user-trash: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cg%20fill%3D'currentColor'%3E%20%3Cpath%20d%3D'm%206.5%200%20c%20-1.378906%200%20-2.5%201.121094%20-2.5%202.5%20v%200.5%20h%20-3%20c%20-0.550781%200%20-1%200.449219%20-1%201%20s%200.449219%201%201%201%20h%201%20v%208%20c%200%201.65625%201.34375%203%203%203%20h%206%20c%201.65625%200%203%20-1.34375%203%20-3%20v%20-8%20h%201%20c%200.550781%200%201%20-0.449219%201%20-1%20s%20-0.449219%20-1%20-1%20-1%20h%20-3.023438%20v%20-0.5%20c%200%20-1.378906%20-1.117187%20-2.5%20-2.5%20-2.5%20z%20m%200%202%20h%202.976562%20c%200.289063%200%200.5%200.210938%200.5%200.5%20v%200.5%20h%20-3.976562%20v%20-0.5%20c%200%20-0.289062%200.210938%20-0.5%200.5%20-0.5%20z%20m%20-2.5%203%20h%208%20v%208%20c%200%200.5625%20-0.4375%201%20-1%201%20h%20-6%20c%20-0.5625%200%20-1%20-0.4375%20-1%20-1%20z%20m%200%200'%2F%3E%20%3Cpath%20d%3D'm%207%207%20v%205%20c%200%200.277344%20-0.222656%200.5%20-0.5%200.5%20s%20-0.5%20-0.222656%20-0.5%20-0.5%20v%20-5%20c%200%20-0.277344%200.222656%20-0.5%200.5%20-0.5%20s%200.5%200.222656%200.5%200.5%20z%20m%200%200'%2F%3E%20%3Cpath%20d%3D'm%2010%207%20v%205%20c%200%200.277344%20-0.222656%200.5%20-0.5%200.5%20s%20-0.5%20-0.222656%20-0.5%20-0.5%20v%20-5%20c%200%20-0.277344%200.222656%20-0.5%200.5%20-0.5%20s%200.5%200.222656%200.5%200.5%20z%20m%200%200'%2F%3E%20%3C%2Fg%3E%20%3C%2Fsvg%3E\");\n --icon-view-reveal: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%202%20c%20-3.648438%200.003906%20-6.832031%202.476562%20-7.738281%206.007812%20c%200.914062%203.527344%204.097656%205.988282%207.738281%205.992188%20c%203.648438%20-0.003906%206.832031%20-2.476562%207.738281%20-6.011719%20c%20-0.914062%20-3.523437%20-4.097656%20-5.984375%20-7.738281%20-5.988281%20z%20m%200%202%20c%202.210938%200%204%201.789062%204%204%20s%20-1.789062%204%20-4%204%20s%20-4%20-1.789062%20-4%20-4%20s%201.789062%20-4%204%20-4%20z%20m%200%202%20c%20-1.105469%200%20-2%200.894531%20-2%202%20s%200.894531%202%202%202%20s%202%20-0.894531%202%20-2%20s%20-0.894531%20-2%20-2%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-view-conceal: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%201.53125%200.46875%20l%20-1.0625%201.0625%20l%2014%2014%20l%201.0625%20-1.0625%20l%20-2.382812%20-2.382812%20c%201.265624%20-1.0625%202.171874%20-2.496094%202.589843%20-4.097657%20c%20-0.914062%20-3.523437%20-4.097656%20-5.984375%20-7.738281%20-5.988281%20c%20-1.367188%200.011719%20-2.707031%200.371094%20-3.894531%201.042969%20z%20m%206.46875%203.53125%20c%202.210938%200%204%201.789062%204%204%20c%20-0.003906%200.800781%20-0.246094%201.578125%20-0.699219%202.238281%20l%20-1.46875%20-1.46875%20c%200.105469%20-0.242187%200.164063%20-0.503906%200.167969%20-0.769531%20c%200%20-1.105469%20-0.894531%20-2%20-2%20-2%20c%20-0.265625%200.003906%20-0.527344%200.0625%20-0.769531%200.167969%20l%20-1.46875%20-1.46875%20c%200.660156%20-0.453125%201.4375%20-0.695313%202.238281%20-0.699219%20z%20m%20-6.144531%200.917969%20c%20-0.753907%200.898437%20-1.296875%201.957031%20-1.59375%203.09375%20c%200.914062%203.523437%204.097656%205.984375%207.738281%205.988281%20c%200.855469%20-0.007812%201.703125%20-0.152344%202.511719%20-0.425781%20l%20-1.667969%20-1.667969%20c%20-0.277344%200.058594%20-0.5625%200.089844%20-0.84375%200.09375%20c%20-2.210938%200%20-4%20-1.789062%20-4%20-4%20c%200.003906%20-0.28125%200.035156%20-0.566406%200.09375%20-0.84375%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-document-edit: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%2012.277344%200.832031%20c%20-0.578125%200.007813%20-1.167969%200.230469%20-1.691406%200.753907%20l%20-9%209%20c%20-0.375%200.375%20-0.585938%200.882812%20-0.585938%201.414062%20v%203%20h%203%20c%200.53125%200%201.039062%20-0.210938%201.414062%20-0.585938%20l%209%20-9%20c%201.789063%20-1.789062%200.082032%20-4.390624%20-1.890624%20-4.570312%20c%20-0.082032%20-0.011719%20-0.164063%20-0.011719%20-0.246094%20-0.011719%20z%20m%20-1.777344%203.605469%20l%201.0625%201.0625%20l%20-7.0625%207.0625%20l%20-1.0625%20-1.0625%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-document-open: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%203%201%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%208%20c%200%201.644531%201.355469%203%203%203%20h%208.882812%20c%200.832032%200%201.578126%20-0.402344%202.054688%20-0.9375%20c%200.472656%20-0.53125%200.738281%20-1.167969%200.910156%20-1.800781%20l%200.972656%20-2.609375%20c%200.390626%20-1.449219%20-0.09375%20-2.652344%20-0.820312%20-3.167969%20c%20-0.484375%20-0.34375%20-0.714844%20-0.292969%20-1%20-0.324219%20v%20-1.160156%20c%200%20-0.855469%20-0.558594%20-1.589844%20-1.09375%20-1.828125%20c%20-0.417969%20-0.1875%20-0.808594%20-0.183594%20-0.953125%20-0.171875%20h%20-3.539063%20l%20-1.707031%20-1.707031%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20z%20m%200%202%20h%202.585938%20l%201.707031%201.707031%20c%200.1875%200.1875%200.441406%200.292969%200.707031%200.292969%20h%204%20v%201%20h%20-5%20h%200.039062%20c%20-0.914062%20-0.039062%20-1.746093%200.394531%20-2.1875%200.96875%20c%20-0.714843%201.226562%20-1.160156%202.28125%20-1.800781%203.71875%20c%20-0.171875%200.527344%200.113281%201.09375%200.636719%201.265625%20c%200.527344%200.167969%201.09375%20-0.117187%201.261719%20-0.640625%20c%200.488281%20-1.011719%200.921875%20-1.816406%201.339843%20-2.808594%20c%200.210938%20-0.503906%200.703126%20-0.492187%200.898438%20-0.503906%20h%205.8125%20c%201%200%201.046875%200.703125%200.886719%201.128906%20l%20-0.96875%202.609375%20c%20-0.121094%200.4375%20-0.300781%200.800781%20-0.476563%200.996094%20c%20-0.175781%200.199219%20-0.285156%200.265625%20-0.558594%200.265625%20h%20-8.882812%20c%20-0.570312%200%20-1%20-0.429688%20-1%20-1%20v%20-8%20c%200%20-0.570312%200.46875%20-0.792969%201%20-1%20z%20m%209.105469%201.996094%20h%200.003906%20v%200.003906%20h%200.003906%20l%20-0.003906%200.003906%20h%20-0.003906%20v%20-0.003906%20c%20-0.003907%200%20-0.007813%200%20-0.011719%200%20h%20-0.003906%20l%20-0.003906%20-0.003906%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-document-save: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%200%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%208.585938%20l%20-1.292969%20-1.292969%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20s%20-0.519531%200.105469%20-0.707031%200.292969%20c%20-0.390625%200.390625%20-0.390625%201.023437%200%201.414062%20l%203%203%20c%200.390625%200.390625%201.023437%200.390625%201.414062%200%20l%203%20-3%20c%200.390625%20-0.390625%200.390625%20-1.023437%200%20-1.414062%20s%20-1.023437%20-0.390625%20-1.414062%200%20l%20-1.292969%201.292969%20v%20-8.585938%20c%200%20-0.550781%20-0.449219%20-1%20-1%20-1%20z%20m%20-7%2014%20v%202%20h%2014%20v%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-mail-send: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%200%20c%20-0.257812%200%20-0.511719%200.0976562%20-0.707031%200.292969%20l%20-1.25%201.25%20l%20-1.761719%201.730469%20c%20-0.191406%200.199218%20-0.28125%200.441406%20-0.28125%200.75%20c%200%200.976562%201%201%201%201%20c%200.257812%200%200.527344%20-0.128907%200.71875%20-0.3125%20l%201.28125%20-1.28125%20v%203.570312%20s%200%201%201%201%20s%201%20-1%201%20-1%20v%20-3.570312%20l%201.28125%201.28125%20c%200.191406%200.183593%200.410156%200.3125%200.71875%200.3125%20c%200%200%201%20-0.023438%201%20-1%20c%200%20-0.308594%20-0.089844%20-0.550782%20-0.28125%20-0.75%20l%20-1.761719%20-1.730469%20l%20-1.25%20-1.25%20c%20-0.195312%20-0.1953128%20-0.449219%20-0.292969%20-0.707031%20-0.292969%20z%20m%20-5%209%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%204%20h%202%20v%20-3.800781%20l%204.613281%203.078125%20c%200.835938%200.558594%201.9375%200.558594%202.773438%200%20l%204.613281%20-3.078125%20v%203.800781%20h%202%20v%20-4%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%200.800781%202%20h%208.398438%20l%20-3.921875%202.613281%20c%20-0.171875%200.113281%20-0.382813%200.113281%20-0.554688%200%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-mail-reply-sender: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%205%202%20c%20-0.265625%200%20-0.519531%200.105469%20-0.707031%200.292969%20l%20-4%204%20c%20-0.3906252%200.390625%20-0.3906252%201.023437%200%201.414062%20l%204%204%20c%200.390625%200.390625%201.023437%200.390625%201.414062%200%20s%200.390625%20-1.023437%200%20-1.414062%20l%20-2.292969%20-2.292969%20h%208.585938%20c%201.117188%200%202%200.882812%202%202%20v%203%20c%200%200.550781%200.449219%201%201%201%20s%201%20-0.449219%201%20-1%20v%20-3%20c%200%20-0.023438%200%20-0.046875%20-0.003906%20-0.070312%20c%20-0.035156%20-2.164063%20-1.820313%20-3.929688%20-3.996094%20-3.929688%20h%20-8.585938%20l%202.292969%20-2.292969%20c%200.390625%20-0.390625%200.390625%20-1.023437%200%20-1.414062%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-folder-documents: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%204.96875%201.003906%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%209%20c%200%201.644532%201.355469%203%203%203%20h%206%20c%201.644531%200%203%20-1.355468%203%20-3%20v%20-7.5%20c%200%20-0.265625%20-0.105469%20-0.519531%20-0.292969%20-0.707031%20l%20-3.5%20-3.5%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20z%20m%200%202%20h%204%20v%201.5%20c%200%201%200.5%201.5%201.5%201.5%20h%201.5%20v%207%20c%200%200.570313%20-0.429688%201%20-1%201%20h%20-6%20c%20-0.570312%200%20-1%20-0.429687%20-1%20-1%20v%20-9%20c%200%20-0.570312%200.429688%20-1%201%20-1%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-folder-download: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%207.984375%200%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%208.585938%20l%20-2.292969%20-2.292969%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20s%20-0.519531%200.105469%20-0.707031%200.292969%20c%20-0.390625%200.390625%20-0.390625%201.023437%200%201.414062%20l%204%204%20c%200.390625%200.390625%201.023437%200.390625%201.414062%200%20l%204%20-4%20c%200.390625%20-0.390625%200.390625%20-1.023437%200%20-1.414062%20s%20-1.023437%20-0.390625%20-1.414062%200%20l%20-2.292969%202.292969%20v%20-8.585938%20c%200%20-0.550781%20-0.449219%20-1%20-1%20-1%20z%20m%20-6%2014%20v%202%20h%2012%20v%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-view-grid: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%202%201%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%204%20c%200%200.554688%200.445312%201%201%201%20h%204%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-4%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%208%200%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%204%20c%200%200.554688%200.445312%201%201%201%20h%204%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-4%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%20-8%208%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%204%20c%200%200.554688%200.445312%201%201%201%20h%204%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-4%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%208%200%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%204%20c%200%200.554688%200.445312%201%201%201%20h%204%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-4%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-view-list: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%202%201%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%202%20c%200%200.554688%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-2%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%205%201%20v%202%20h%208%20v%20-2%20z%20m%20-5%204.015625%20c%20-0.554688%200%20-1%200.445313%20-1%201%20v%201.980469%20c%200%200.550781%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.449219%201%20-1%20v%20-1.980469%20c%200%20-0.554687%20-0.445312%20-1%20-1%20-1%20z%20m%205%200.984375%20v%202%20h%208%20v%20-2%20z%20m%20-5%204%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%201.980469%20c%200%200.550781%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.449219%201%20-1%20v%20-1.980469%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%205%200.984375%20v%202%20h%208%20v%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-view-more: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%207.996094%200%20c%20-1.105469%200%20-2%200.894531%20-2%202%20s%200.894531%202%202%202%20c%201.101562%200%202%20-0.894531%202%20-2%20s%20-0.898438%20-2%20-2%20-2%20z%20m%200%206%20c%20-1.105469%200%20-2%200.894531%20-2%202%20s%200.894531%202%202%202%20c%201.101562%200%202%20-0.894531%202%20-2%20s%20-0.898438%20-2%20-2%20-2%20z%20m%200%206%20c%20-1.105469%200%20-2%200.894531%20-2%202%20s%200.894531%202%202%202%20c%201.101562%200%202%20-0.894531%202%20-2%20s%20-0.898438%20-2%20-2%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-view-paged: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cg%20fill%3D'currentColor'%3E%20%3Cpath%20d%3D'm%209%205.5%20v%20-1%20c%200%20-0.277344%20-0.222656%20-0.5%20-0.5%20-0.5%20h%20-3%20c%20-0.277344%200%20-0.5%200.222656%20-0.5%200.5%20v%201%20c%200%200.277344%200.222656%200.5%200.5%200.5%20h%203%20c%200.277344%200%200.5%20-0.222656%200.5%20-0.5%20z%20m%200%200'%20fill-opacity%3D'0.34902'%2F%3E%20%3Cpath%20d%3D'm%204%200%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%207%20c%200%201.644531%201.355469%203%203%203%20h%206%20c%201.644531%200%203%20-1.355469%203%20-3%20v%20-7%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%200%202%20h%206%20c%200.570312%200%201%200.429688%201%201%20v%207%20c%200%200.570312%20-0.429688%201%20-1%201%20h%20-6%20c%20-0.570312%200%20-1%20-0.429688%20-1%20-1%20v%20-7%20c%200%20-0.570312%200.429688%20-1%201%20-1%20z%20m%2011%202%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%208%20c%200%200.550781%20-0.449219%201%20-1%201%20h%20-7%20c%20-0.550781%200%20-1%200.449219%20-1%201%20s%200.449219%201%201%201%20h%207%20c%201.65625%200%203%20-1.34375%203%20-3%20v%20-8%20c%200%20-0.550781%20-0.449219%20-1%20-1%20-1%20z%20m%200%200'%2F%3E%20%3Cpath%20d%3D'm%209%208.5%20v%20-1%20c%200%20-0.277344%20-0.222656%20-0.5%20-0.5%20-0.5%20h%20-3%20c%20-0.277344%200%20-0.5%200.222656%20-0.5%200.5%20v%201%20c%200%200.277344%200.222656%200.5%200.5%200.5%20h%203%20c%200.277344%200%200.5%20-0.222656%200.5%20-0.5%20z%20m%200%200'%20fill-opacity%3D'0.34902'%2F%3E%20%3C%2Fg%3E%20%3C%2Fsvg%3E\");\n --icon-view-columns: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%202%201%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%2012%20c%200%200.554688%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-12%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%205%200%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%2012%20c%200%200.554688%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-12%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%205%200%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%2012%20c%200%200.554688%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-12%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-list-remove: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%201%207%20h%2014%20v%202%20h%20-14%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-send-to: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%200%20c%20-0.257812%200%20-0.511719%200.0976562%20-0.707031%200.292969%20l%20-1.246094%201.25%20l%20-1.765625%201.730469%20c%20-0.191406%200.199218%20-0.28125%200.441406%20-0.28125%200.75%20c%200%200.976562%201%201%201%201%20c%200.257812%200%200.527344%20-0.128907%200.71875%20-0.3125%20l%201.28125%20-1.28125%20v%207.570312%20s%200%201%201%201%20s%201%20-1%201%20-1%20v%20-7.570312%20l%201.28125%201.28125%20c%200.191406%200.183593%200.410156%200.3125%200.71875%200.3125%20c%200%200%201%20-0.023438%201%20-1%20c%200%20-0.308594%20-0.089844%20-0.550782%20-0.28125%20-0.75%20l%20-1.765625%20-1.730469%20l%20-1.246094%20-1.25%20c%20-0.195312%20-0.1953128%20-0.449219%20-0.292969%20-0.707031%20-0.292969%20z%20m%20-3.96875%206.964844%20c%20-1.660156%20-0.027344%20-3.03125%201.371094%20-3.03125%203.035156%20v%202.972656%20c%200%201.664063%201.371094%203.035156%203.03125%203.035156%20h%207.9375%20c%201.664062%200%203.03125%20-1.371093%203.03125%20-3.035156%20v%20-2.972656%20c%200%20-1.664062%20-1.367188%20-3.0625%20-3.03125%20-3.035156%20l%20-1.96875%200.035156%20v%202%20l%201.96875%20-0.035156%20c%200.589844%20-0.007813%201.03125%200.445312%201.03125%201.035156%20v%202.972656%20c%200%200.589844%20-0.441406%201.035156%20-1.03125%201.035156%20h%20-7.9375%20c%20-0.585938%200%20-1.03125%20-0.445312%20-1.03125%20-1.035156%20v%20-2.972656%20c%200%20-0.589844%200.445312%20-1.042969%201.03125%20-1.035156%20l%201.96875%200.035156%20v%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-folder-music: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%201%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%204.339844%20c%20-0.457031%20-0.214844%20-0.964844%20-0.339844%20-1.5%20-0.339844%20c%20-1.921875%200%20-3.5%201.578125%20-3.5%203.5%20s%201.578125%203.5%203.5%203.5%20c%201.914062%200%203.492188%20-1.570312%203.5%20-3.484375%20c%200%20-0.003906%200%20-0.011719%200%20-0.015625%20v%20-7.5%20c%200%20-0.5625%200.4375%20-1%201%20-1%20h%204%20c%200.5625%200%201%200.4375%201%201%20v%204.339844%20c%20-0.457031%20-0.214844%20-0.964844%20-0.339844%20-1.5%20-0.339844%20c%20-1.921875%200%20-3.5%201.578125%20-3.5%203.5%20s%201.578125%203.5%203.5%203.5%20s%203.5%20-1.578125%203.5%20-3.5%20v%20-7.5%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%20-4.5%209%20c%200.839844%200%201.5%200.660156%201.5%201.5%20v%200.015625%20c%20-0.007812%200.832031%20-0.664062%201.484375%20-1.5%201.484375%20c%20-0.839844%200%20-1.5%20-0.660156%20-1.5%20-1.5%20s%200.660156%20-1.5%201.5%20-1.5%20z%20m%208%200%20c%200.839844%200%201.5%200.660156%201.5%201.5%20s%20-0.660156%201.5%20-1.5%201.5%20s%20-1.5%20-0.660156%20-1.5%20-1.5%20s%200.660156%20-1.5%201.5%20-1.5%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-edit-copy: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%200%203%20c%200%20-1.644531%201.355469%20-3%203%20-3%20h%205%20c%201.644531%200%203%201.355469%203%203%20c%200%200.550781%20-0.449219%201%20-1%201%20s%20-1%20-0.449219%20-1%20-1%20c%200%20-0.570312%20-0.429688%20-1%20-1%20-1%20h%20-5%20c%20-0.570312%200%20-1%200.429688%20-1%201%20v%205%20c%200%200.570312%200.429688%201%201%201%20c%200.550781%200%201%200.449219%201%201%20s%20-0.449219%201%20-1%201%20c%20-1.644531%200%20-3%20-1.355469%20-3%20-3%20z%20m%205%205%20c%200%20-1.644531%201.355469%20-3%203%20-3%20h%205%20c%201.644531%200%203%201.355469%203%203%20v%205%20c%200%201.644531%20-1.355469%203%20-3%203%20h%20-5%20c%20-1.644531%200%20-3%20-1.355469%20-3%20-3%20z%20m%202%200%20v%205%20c%200%200.570312%200.429688%201%201%201%20h%205%20c%200.570312%200%201%20-0.429688%201%20-1%20v%20-5%20c%200%20-0.570312%20-0.429688%20-1%20-1%20-1%20h%20-5%20c%20-0.570312%200%20-1%200.429688%20-1%201%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-emblem-system: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%200%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%200.238281%20c%200%200.464844%20-0.378906%200.902344%20-0.820312%201.046875%20c%20-0.023438%200.007813%20-0.042969%200.011719%20-0.0625%200.019532%20c%20-0.445313%200.148437%20-1.007813%200.015624%20-1.28125%20-0.359376%20l%20-0.140626%20-0.195312%20c%20-0.15625%20-0.214844%20-0.390624%20-0.359375%20-0.652343%20-0.398438%20c%20-0.261719%20-0.042968%20-0.53125%200.019532%20-0.742188%200.175782%20c%20-0.449219%200.324218%20-0.550781%200.949218%20-0.222656%201.398437%20l%200.140625%200.199219%20c%200.277344%200.375%200.226562%200.953125%20-0.050781%201.328125%20c%20-0.011719%200.015625%20-0.023438%200.035156%20-0.035157%200.050781%20c%20-0.273437%200.378906%20-0.804687%200.601563%20-1.25%200.457032%20l%20-0.230468%20-0.074219%20c%20-0.523438%20-0.171875%20-1.089844%200.117187%20-1.257813%200.640625%20c%20-0.171875%200.527344%200.113281%201.089844%200.640625%201.261718%20l%200.222656%200.074219%20c%200.445313%200.144531%200.738282%200.636719%200.75%201.101563%20v%200.070312%20c%200.015626%200.464844%20-0.304687%200.960938%20-0.746093%201.105469%20l%20-0.226563%200.070313%20c%20-0.527344%200.171874%20-0.8125%200.738281%20-0.640625%201.261718%20c%200.167969%200.523438%200.734375%200.8125%201.257813%200.640625%20l%200.230468%20-0.074219%20c%200.445313%20-0.144531%200.976563%200.078126%201.25%200.457032%20c%200.011719%200.015625%200.027344%200.035156%200.039063%200.050781%20c%200.277344%200.375%200.324219%200.953125%200.050781%201.328125%20l%20-0.144531%200.203125%20c%20-0.324219%200.445313%20-0.226563%201.070313%200.222656%201.394531%20c%200.445313%200.324219%201.070313%200.226563%201.394531%20-0.21875%20l%200.144532%20-0.199218%20c%200.273437%20-0.378907%200.835937%20-0.507813%201.277344%20-0.359376%20c%200.019531%200.007813%200.042968%200.011719%200.0625%200.019532%20c%200.445312%200.140625%200.820312%200.578125%200.820312%201.046875%20v%200.238281%20c%200%200.550781%200.449219%201%201%201%20s%201%20-0.449219%201%20-1%20v%20-0.238281%20c%200%20-0.46875%200.378906%20-0.90625%200.820312%20-1.046875%20c%200.023438%20-0.007813%200.042969%20-0.015625%200.066407%20-0.023438%20c%200.441406%20-0.144531%201.003906%20-0.015625%201.277343%200.363282%20l%200.144532%200.199218%20c%200.324218%200.445313%200.949218%200.542969%201.394531%200.21875%20c%200.445313%20-0.324218%200.546875%20-0.949218%200.222656%20-1.394531%20l%20-0.148437%20-0.203125%20c%20-0.273438%20-0.375%20-0.226563%20-0.953125%200.050781%20-1.328125%20c%200.015625%20-0.015625%200.027344%20-0.035156%200.039063%20-0.050781%20c%200.273437%20-0.378906%200.804687%20-0.601563%201.25%20-0.457032%20l%200.234374%200.078126%20c%200.523438%200.167968%201.085938%20-0.121094%201.257813%20-0.644532%20c%200.171875%20-0.523437%20-0.117187%20-1.089844%20-0.640625%20-1.257812%20l%20-0.230469%20-0.074219%20c%20-0.445312%20-0.144531%20-0.734375%20-0.640625%20-0.746093%20-1.105469%20c%200%20-0.023437%200%20-0.046875%200%20-0.070312%20c%20-0.015626%20-0.464844%200.300781%20-0.957032%200.746093%20-1.101563%20l%200.230469%20-0.074219%20c%200.523438%20-0.171874%200.8125%20-0.734374%200.640625%20-1.261718%20c%20-0.171875%20-0.523438%20-0.734375%20-0.8125%20-1.257813%20-0.640625%20l%20-0.230468%200.074219%20c%20-0.445313%200.144531%20-0.980469%20-0.078126%20-1.253906%20-0.457032%20c%20-0.011719%20-0.015625%20-0.023438%20-0.035156%20-0.035157%20-0.050781%20c%20-0.277343%20-0.375%20-0.324219%20-0.953125%20-0.050781%20-1.328125%20l%200.144531%20-0.199219%20c%200.324219%20-0.445312%200.226563%20-1.074219%20-0.222656%20-1.398437%20c%20-0.214844%20-0.15625%20-0.480469%20-0.21875%20-0.742187%20-0.179688%20c%20-0.265626%200.042969%20-0.5%200.1875%20-0.652344%200.402344%20l%20-0.144532%200.195312%20c%20-0.273437%200.378907%20-0.835937%200.507813%20-1.28125%200.363282%20c%20-0.019531%20-0.007813%20-0.039062%20-0.015625%20-0.0625%20-0.023438%20c%20-0.441406%20-0.140625%20-0.820312%20-0.578125%20-0.820312%20-1.046875%20v%20-0.238281%20c%200%20-0.550781%20-0.449219%20-1%20-1%20-1%20z%20m%200%204%20c%200.871094%200%201.675781%200.273438%202.332031%200.742188%20c%200.003907%200.007812%200.011719%200.015624%200.019531%200.023437%20c%200.011719%200.003906%200.019532%200.007813%200.03125%200.015625%20c%200.660157%200.484375%201.160157%201.171875%201.421876%201.976562%20v%200.007813%20s%200.003906%200.003906%200.003906%200.007813%20c%200.292968%200.851562%200.15625%201.65625%200%202.457031%20c%200%200%20-0.003906%200.003906%20-0.003906%200.007812%20v%200.003907%20c%20-0.261719%200.800781%20-0.757813%201.488281%20-1.414063%201.976562%20c%20-0.015625%200.003906%20-0.027344%200.011719%20-0.039063%200.019531%20c%20-0.007812%200.003907%20-0.015624%200.011719%20-0.019531%200.019531%20c%20-0.65625%200.46875%20-1.460937%200.742188%20-2.332031%200.742188%20c%20-0.855469%200%20-1.644531%20-0.265625%20-2.289062%20-0.714844%20c%20-0.019532%20-0.015625%20-0.042969%20-0.035156%20-0.0625%20-0.046875%20c%20-0.011719%20-0.007812%20-0.023438%20-0.015625%20-0.035157%20-0.019531%20c%20-0.652343%20-0.484375%20-1.148437%20-1.160156%20-1.40625%20-1.945312%20c%20-0.003906%20-0.015626%20-0.007812%20-0.023438%20-0.011719%20-0.035157%20c%20-0.003906%20-0.007812%20-0.007812%20-0.015625%20-0.011718%20-0.019531%20c%20-0.285156%20-0.847656%20-0.148438%20-1.644531%200%20-2.4375%20c%200.003906%20-0.007812%200.007812%20-0.011719%200.011718%20-0.019531%20c%200.003907%20-0.011719%200.007813%20-0.023438%200.011719%20-0.039063%20c%200.261719%20-0.785156%200.757813%20-1.460937%201.414063%20-1.945312%20c%200.007812%20-0.003906%200.019531%20-0.007813%200.027344%20-0.015625%20c%200.019531%20-0.011719%200.042968%20-0.03125%200.058593%20-0.046875%20c%200.648438%20-0.449219%201.4375%20-0.714844%202.292969%20-0.714844%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-preferences-system: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%2013.855469%200%20l%20-1.539063%201.4375%20c%20-0.453125%200.421875%20-0.53125%201.148438%20-0.269531%201.707031%20l%20-5.886719%205.996094%20c%20-0.011718%200%20-0.019531%200%20-0.03125%200%20c%20-0.257812%20-0.128906%20-0.550781%20-0.183594%20-0.839844%20-0.148437%20c%20-0.328124%200.046874%20-0.632812%200.199218%20-0.867187%200.441406%20l%20-3.945313%203.996094%20c%20-0.3906245%200.375%20-0.5468745%200.933593%20-0.4062495%201.457031%20c%200.1406255%200.523437%200.5546875%200.929687%201.0820315%201.058593%20c%200.527344%200.132813%201.082031%20-0.03125%201.453125%20-0.425781%20l%203.945312%20-3.996093%20c%200.472657%20-0.453126%200.59375%20-1.15625%200.296875%20-1.738282%20l%205.890625%20-5.964844%20c%200.558594%200.25%201.273438%200.148438%201.707031%20-0.289062%20l%201.414063%20-1.5625%20z%20m%20-10.308594%200.0898438%20c%20-0.398437%200%20-0.785156%200.0937502%20-1.140625%200.2187502%20l%201.882812%201.878906%20c%200.390626%200.382812%200.390626%201%200%201.386719%20l%20-0.710937%200.707031%20c%20-0.386719%200.386719%20-1%200.386719%20-1.390625%200%20l%20-1.882812%20-1.878906%20c%20-0.125%200.355468%20-0.2187505%200.742187%20-0.2187505%201.140625%20c%200%201.90625%201.5507815%203.453125%203.4609375%203.453125%20c%200.402344%200%200.789063%20-0.09375%201.144531%20-0.21875%20l%201.175782%201.171875%20h%200.058593%20l%202.070313%20-2.0625%20l%20-1.203125%20-1.203125%20c%200.125%20-0.359375%200.214843%20-0.742188%200.214843%20-1.140625%20c%200%20-1.90625%20-1.546874%20-3.4531252%20-3.460937%20-3.4531252%20z%20m%206.550781%207.8906252%20l%20-2.070312%202.066406%20c%200.011718%200.027344%200.023437%200.058594%200.03125%200.089844%20l%201.144531%201.140625%20c%20-0.125%200.355468%20-0.21875%200.742187%20-0.21875%201.140625%20c%200%201.902343%201.550781%203.449219%203.460937%203.449219%20c%200.433594%200%200.855469%20-0.101563%201.238282%20-0.246094%20l%20-2.007813%20-2%20c%20-0.386719%20-0.386719%20-0.386719%20-1.035156%200%20-1.417969%20l%200.679688%20-0.679687%20c%200.195312%20-0.191407%200.457031%20-0.308594%200.710937%20-0.308594%20s%200.515625%200.117187%200.710938%200.308594%20l%201.945312%201.941406%20c%200.105469%20-0.328125%200.183594%20-0.683594%200.183594%20-1.046875%20c%200%20-1.90625%20-1.546875%20-3.453125%20-3.460938%20-3.453125%20c%20-0.398437%200%20-0.785156%200.09375%20-1.140624%200.21875%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-application-x-executable: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208.015625%200.015625%20c%20-0.769531%200%20-1.539063%200.292969%20-2.121094%200.875%20l%20-5.003906%205.003906%20c%20-1.164063%201.164063%20-1.164063%203.078125%200%204.242188%20l%205.003906%205.003906%20c%201.164063%201.164063%203.078125%201.164063%204.242188%200%20l%205.007812%20-5.003906%20c%201.164063%20-1.164063%201.164063%20-3.078125%200%20-4.242188%20l%20-5.007812%20-5.003906%20c%20-0.582031%20-0.582031%20-1.351563%20-0.875%20-2.121094%20-0.875%20z%20m%200.101563%201.988281%20c%200.210937%200.023438%200.414062%200.117188%200.585937%200.28125%20l%20-0.339844%200.113282%20c%20-0.074219%20-0.136719%20-0.15625%20-0.269532%20-0.246093%20-0.394532%20z%20m%20-1.570313%201.058594%20c%200.300781%200.421875%200.464844%200.929688%200.46875%201.453125%20c%200%201.378906%20-1.121094%202.5%20-2.5%202.5%20c%20-0.523437%20-0.003906%20-1.03125%20-0.171875%20-1.449219%20-0.472656%20z%20m%203.441406%200.503906%20l%203.742188%203.742188%20c%200.402343%200.402344%200.402343%201.011718%200%201.414062%20l%20-0.253907%200.25%20c%20-0.039062%20-0.046875%20-0.074218%20-0.09375%20-0.117187%20-0.140625%20l%200.621094%20-0.855469%20l%20-0.808594%20-0.585937%20l%20-0.621094%200.851563%20c%20-0.167969%20-0.078126%20-0.347656%20-0.136719%20-0.535156%20-0.175782%20v%20-1.050781%20h%20-1%20v%201.050781%20c%20-0.183594%200.039063%20-0.363281%200.097656%20-0.53125%200.175782%20l%20-0.621094%20-0.851563%20l%20-0.804687%200.585937%20l%200.617187%200.855469%20c%20-0.125%200.136719%20-0.238281%200.289063%20-0.332031%200.453125%20l%20-1%20-0.324218%20l%20-0.308594%200.949218%20l%201%200.324219%20c%20-0.011718%200.09375%20-0.019531%200.1875%20-0.019531%200.28125%20s%200.007813%200.1875%200.019531%200.28125%20l%20-1%200.324219%20l%200.308594%200.949218%20l%201%20-0.324218%20c%200.09375%200.164062%200.207031%200.316406%200.332031%200.453125%20l%20-0.617187%200.855469%20l%200.195312%200.140624%20l%20-0.53125%200.53125%20c%20-0.402344%200.40625%20-1.011718%200.40625%20-1.414062%200%20l%20-4.902344%20-4.902343%20l%200.027344%20-0.039063%20l%200.210937%20-0.289062%20c%200.328125%200.152344%200.679688%200.269531%201.046875%200.339844%20v%201.179687%20h%201.648438%20v%20-1.179687%20c%200.363281%20-0.070313%200.714844%20-0.1875%201.046875%20-0.339844%20l%200.207031%200.289062%20l%200.484375%200.667969%20l%201.335937%20-0.972656%20l%20-0.484374%20-0.667969%20l%20-0.210938%20-0.289062%20c%200.25%20-0.269532%200.46875%20-0.566407%200.648438%20-0.890626%20l%200.339843%200.113282%20l%200.785157%200.253906%20l%200.507812%20-1.566406%20l%20-0.785156%20-0.257813%20l%20-0.335938%20-0.109375%20c%200.019532%20-0.179687%200.035156%20-0.363281%200.035156%20-0.550781%20s%20-0.015624%20-0.371094%20-0.035156%20-0.550781%20l%200.335938%20-0.109375%20l%200.785156%20-0.257813%20z%20m%201.527344%205.449219%20c%200.527344%200%200.984375%200.265625%201.25%200.667969%20l%20-2.078125%202.082031%20c%20-0.40625%20-0.269531%20-0.671875%20-0.722656%20-0.671875%20-1.25%20c%200%20-0.835937%200.667969%20-1.5%201.5%20-1.5%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3Cpath%20d%3D'm%204.039062%20-18.988281%20c%20-1.449218%200%20-2.679687%201.046875%20-2.964843%202.421875%20c%20-0.019531%200.097656%20-0.035157%200.199218%20-0.046875%200.300781%20c%20-0.007813%200.101563%20-0.015625%200.203125%20-0.015625%200.304687%20v%207.910157%20c%200%201.660156%201.367187%203.027343%203.027343%203.027343%20h%207.949219%20c%201.660157%200%203.027344%20-1.367187%203.027344%20-3.027343%20v%20-7.910157%20c%200%20-0.105468%20-0.003906%20-0.207031%20-0.015625%20-0.304687%20c%20-0.011719%20-0.101563%20-0.027344%20-0.203125%20-0.046875%20-0.300781%20c%20-0.285156%20-1.375%20-1.511719%20-2.421875%20-2.964844%20-2.421875%20z%20m%200%202.003906%20h%202.976563%20v%203%20h%20-2.976563%20c%20-0.585937%200%20-1.027343%20-0.441406%20-1.027343%20-1.027344%20v%20-0.949219%20c%200.003906%20-0.035156%200.003906%20-0.070312%200.007812%20-0.105468%20c%200.003907%20-0.035156%200.007813%20-0.070313%200.011719%20-0.105469%20c%200.007812%20-0.035156%200.019531%20-0.066406%200.027344%20-0.097656%20c%200.125%20-0.421875%200.503906%20-0.714844%200.980468%20-0.714844%20z%20m%204.976563%200%20h%202.972656%20c%200.585938%200%201.023438%200.4375%201.027344%201.023437%20v%200.949219%20c%200%200.585938%20-0.441406%201.027344%20-1.027344%201.027344%20h%20-2.972656%20z%20m%204%203.71875%20v%205.214844%20c%200%200.585937%20-0.441406%201.027343%20-1.027344%201.027343%20h%20-7.949219%20c%20-0.585937%200%20-1.027343%20-0.441406%20-1.027343%20-1.027343%20v%20-5.175781%20c%200.324219%200.148437%200.671875%200.246093%201.027343%200.246093%20h%202.976563%20v%203.035157%20l%202%200.992187%20v%20-4.027344%20h%202.972656%20c%200.34375%200%200.695313%20-0.113281%201.027344%20-0.285156%20z%20m%20-5%2033.28125%20c%20-0.851563%200%20-1.699219%200.328125%20-2.351563%200.976563%20l%20-4.671874%204.671874%20c%20-1.300782%201.300782%20-1.300782%203.402344%200%204.703126%20l%204.671874%204.671874%20c%201.300782%201.300782%203.402344%201.300782%204.699219%200%20l%204.675781%20-4.671874%20c%201.300782%20-1.300782%201.300782%20-3.402344%200%20-4.703126%20l%20-4.675781%20-4.671874%20c%20-0.648437%20-0.648438%20-1.496093%20-0.976563%20-2.347656%20-0.976563%20z%20m%200%201.984375%20c%200.335937%200%200.675781%200.132812%200.941406%200.402344%20l%203.03125%203.027344%20c%20-0.066406%200.039062%20-0.136719%200.070312%20-0.210937%200.09375%20c%20-0.019532%200.003906%20-0.039063%200.011718%20-0.0625%200.015624%20c%20-0.441406%200.148438%20-1.003906%200.019532%20-1.277344%20-0.359374%20l%20-0.140625%20-0.195313%20c%20-0.15625%20-0.210937%20-0.390625%20-0.355469%20-0.652344%20-0.398437%20c%20-0.066406%20-0.011719%20-0.132812%20-0.015626%20-0.199219%20-0.011719%20c%20-0.195312%200.007812%20-0.382812%200.074219%20-0.542968%200.191406%20c%20-0.449219%200.324219%20-0.550782%200.949219%20-0.226563%201.394531%20l%200.144531%200.199219%20c%200.273438%200.378906%200.226563%200.953125%20-0.050781%201.332031%20c%20-0.011719%200.015625%20-0.023437%200.03125%20-0.035156%200.050782%20c%20-0.273437%200.378906%20-0.808594%200.597656%20-1.253906%200.453124%20l%20-0.226563%20-0.074218%20c%20-0.523437%20-0.167969%20-1.089844%200.117187%20-1.257812%200.644531%20c%20-0.171875%200.523437%200.113281%201.089844%200.636718%201.261719%20l%200.226563%200.070312%20c%200.445313%200.144532%200.738281%200.640625%200.746094%201.105469%20c%200.003906%200.023437%200.003906%200.042969%200.003906%200.066406%20c%200.015625%200.464844%20-0.304687%200.960938%20-0.75%201.105469%20l%20-0.226563%200.074219%20c%20-0.179687%200.058593%20-0.332031%200.164062%20-0.445312%200.296875%20l%20-3.785156%20-3.785156%20c%20-0.535156%20-0.535157%20-0.535156%20-1.355469%200%20-1.890626%20l%204.667968%20-4.667968%20c%200.269532%20-0.269532%200.609376%20-0.402344%200.945313%20-0.402344%20z%20m%205.585937%205.234375%20c%200.058594%200%200.117188%200.003906%200.175782%200.007813%20c%200.382812%200.523437%200.335937%201.234374%20-0.144532%201.71875%20l%20-3.753906%203.75%20c%20-0.027344%20-0.066407%20-0.050781%20-0.136719%20-0.070312%20-0.203126%20c%20-0.003906%20-0.011718%20-0.007813%20-0.023437%20-0.011719%20-0.035156%20c%20-0.003906%20-0.007812%20-0.007813%20-0.011718%20-0.011719%20-0.019531%20c%20-0.285156%20-0.84375%20-0.152344%20-1.644531%200%20-2.4375%20c%200.003906%20-0.003906%200.007813%20-0.007813%200.011719%20-0.015625%20c%200.003906%20-0.011719%200.007813%20-0.027344%200.011719%20-0.039062%20c%200.261718%20-0.789063%200.757812%20-1.464844%201.410156%20-1.945313%20c%200.011719%20-0.003906%200.023438%20-0.011719%200.03125%20-0.015625%20c%200.019531%20-0.015625%200.042969%20-0.03125%200.058594%20-0.046875%20c%200.648437%20-0.453125%201.4375%20-0.71875%202.292968%20-0.71875%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-window-close: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%204%204%20h%201%20h%200.03125%20c%200.253906%200.011719%200.511719%200.128906%200.6875%200.3125%20l%202.28125%202.28125%20l%202.3125%20-2.28125%20c%200.265625%20-0.230469%200.445312%20-0.304688%200.6875%20-0.3125%20h%201%20v%201%20c%200%200.285156%20-0.035156%200.550781%20-0.25%200.75%20l%20-2.28125%202.28125%20l%202.25%202.25%20c%200.1875%200.1875%200.28125%200.453125%200.28125%200.71875%20v%201%20h%20-1%20c%20-0.265625%200%20-0.53125%20-0.09375%20-0.71875%20-0.28125%20l%20-2.28125%20-2.28125%20l%20-2.28125%202.28125%20c%20-0.1875%200.1875%20-0.453125%200.28125%20-0.71875%200.28125%20h%20-1%20v%20-1%20c%200%20-0.265625%200.09375%20-0.53125%200.28125%20-0.71875%20l%202.28125%20-2.25%20l%20-2.28125%20-2.28125%20c%20-0.210938%20-0.195312%20-0.304688%20-0.46875%20-0.28125%20-0.75%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-window-minimize: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%204%2010.007812%20h%208%20v%201.988282%20h%20-8%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-window-maximize: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%203.988281%203.992188%20v%208.011718%20h%208.011719%20v%20-8.011718%20z%20m%202%202%20h%204.011719%20v%204.011718%20h%20-4.011719%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-image-missing: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%204.015625%201.03125%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%201%20h%201%20v%20-1%20c%200%20-1.109375%200.890625%20-2%202%20-2%20h%201%20v%20-1%20z%20m%202%200%20v%201%20h%204%20v%20-1%20z%20m%205%200%20v%201%20h%201%20c%201.109375%200%202%200.890625%202%202%20v%201%20h%201%20v%20-1%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%20-5%204%20c%20-0.550781%200%20-1%200.449219%20-1%201%20s%200.449219%201%201%201%20s%201%20-0.449219%201%20-1%20s%20-0.449219%20-1%20-1%20-1%20z%20m%20-5%201%20v%204%20h%201%20v%20-4%20z%20m%2013%200%20v%204%20h%201%20v%20-4%20z%20m%20-4.5%202%20l%20-2%202%20l%20-1.5%20-1%20l%20-2%202%20v%200.5%20c%200%200.5%200.5%200.5%200.5%200.5%20h%207%20s%200.472656%20-0.035156%200.5%20-0.5%20v%20-1%20z%20m%20-8.5%203%20v%201%20c%200%201.644531%201.355469%203%203%203%20h%201%20v%20-1%20h%20-1%20c%20-1.109375%200%20-2%20-0.890625%20-2%20-2%20v%20-1%20z%20m%2013%200%20v%201%20c%200%201.109375%20-0.890625%202%20-2%202%20h%20-1%20v%201%20h%201%20c%201.644531%200%203%20-1.355469%203%20-3%20v%20-1%20z%20m%20-8%203%20v%201%20h%204%20v%20-1%20z%20m%200%200'%20fill%3D'currentColor'%20fill-opacity%3D'0.34902'%2F%3E%20%3C%2Fsvg%3E\");\n}\n\n.adw-icon--go-down {\n mask-image: var(--icon-go-down);\n -webkit-mask-image: var(--icon-go-down);\n}\n\n.adw-icon--sidebar-show {\n mask-image: var(--icon-sidebar-show);\n -webkit-mask-image: var(--icon-sidebar-show);\n}\n\n.adw-icon--go-previous {\n mask-image: var(--icon-go-previous);\n -webkit-mask-image: var(--icon-go-previous);\n}\n\n.adw-icon--go-next {\n mask-image: var(--icon-go-next);\n -webkit-mask-image: var(--icon-go-next);\n}\n\n.adw-icon--view-refresh {\n mask-image: var(--icon-view-refresh);\n -webkit-mask-image: var(--icon-view-refresh);\n}\n\n.adw-icon--open-menu {\n mask-image: var(--icon-open-menu);\n -webkit-mask-image: var(--icon-open-menu);\n}\n\n.adw-icon--go-home {\n mask-image: var(--icon-go-home);\n -webkit-mask-image: var(--icon-go-home);\n}\n\n.adw-icon--list-add {\n mask-image: var(--icon-list-add);\n -webkit-mask-image: var(--icon-list-add);\n}\n\n.adw-icon--network-wireless {\n mask-image: var(--icon-network-wireless);\n -webkit-mask-image: var(--icon-network-wireless);\n}\n\n.adw-icon--folder {\n mask-image: var(--icon-folder);\n -webkit-mask-image: var(--icon-folder);\n}\n\n.adw-icon--starred {\n mask-image: var(--icon-starred);\n -webkit-mask-image: var(--icon-starred);\n}\n\n.adw-icon--system-search {\n mask-image: var(--icon-system-search);\n -webkit-mask-image: var(--icon-system-search);\n}\n\n.adw-icon--contact-new {\n mask-image: var(--icon-contact-new);\n -webkit-mask-image: var(--icon-contact-new);\n}\n\n.adw-icon--mail-unread {\n mask-image: var(--icon-mail-unread);\n -webkit-mask-image: var(--icon-mail-unread);\n}\n\n.adw-icon--avatar-default {\n mask-image: var(--icon-avatar-default);\n -webkit-mask-image: var(--icon-avatar-default);\n}\n\n.adw-icon--camera-photo {\n mask-image: var(--icon-camera-photo);\n -webkit-mask-image: var(--icon-camera-photo);\n}\n\n.adw-icon--user-trash {\n mask-image: var(--icon-user-trash);\n -webkit-mask-image: var(--icon-user-trash);\n}\n\n.adw-icon--view-reveal {\n mask-image: var(--icon-view-reveal);\n -webkit-mask-image: var(--icon-view-reveal);\n}\n\n.adw-icon--view-conceal {\n mask-image: var(--icon-view-conceal);\n -webkit-mask-image: var(--icon-view-conceal);\n}\n\n.adw-icon--document-edit {\n mask-image: var(--icon-document-edit);\n -webkit-mask-image: var(--icon-document-edit);\n}\n\n.adw-icon--document-open {\n mask-image: var(--icon-document-open);\n -webkit-mask-image: var(--icon-document-open);\n}\n\n.adw-icon--document-save {\n mask-image: var(--icon-document-save);\n -webkit-mask-image: var(--icon-document-save);\n}\n\n.adw-icon--mail-send {\n mask-image: var(--icon-mail-send);\n -webkit-mask-image: var(--icon-mail-send);\n}\n\n.adw-icon--mail-reply-sender {\n mask-image: var(--icon-mail-reply-sender);\n -webkit-mask-image: var(--icon-mail-reply-sender);\n}\n\n.adw-icon--folder-documents {\n mask-image: var(--icon-folder-documents);\n -webkit-mask-image: var(--icon-folder-documents);\n}\n\n.adw-icon--folder-download {\n mask-image: var(--icon-folder-download);\n -webkit-mask-image: var(--icon-folder-download);\n}\n\n.adw-icon--view-grid {\n mask-image: var(--icon-view-grid);\n -webkit-mask-image: var(--icon-view-grid);\n}\n\n.adw-icon--view-list {\n mask-image: var(--icon-view-list);\n -webkit-mask-image: var(--icon-view-list);\n}\n\n.adw-icon--view-more {\n mask-image: var(--icon-view-more);\n -webkit-mask-image: var(--icon-view-more);\n}\n\n.adw-icon--view-paged {\n mask-image: var(--icon-view-paged);\n -webkit-mask-image: var(--icon-view-paged);\n}\n\n.adw-icon--view-columns {\n mask-image: var(--icon-view-columns);\n -webkit-mask-image: var(--icon-view-columns);\n}\n\n.adw-icon--list-remove {\n mask-image: var(--icon-list-remove);\n -webkit-mask-image: var(--icon-list-remove);\n}\n\n.adw-icon--send-to {\n mask-image: var(--icon-send-to);\n -webkit-mask-image: var(--icon-send-to);\n}\n\n.adw-icon--folder-music {\n mask-image: var(--icon-folder-music);\n -webkit-mask-image: var(--icon-folder-music);\n}\n\n.adw-icon--edit-copy {\n mask-image: var(--icon-edit-copy);\n -webkit-mask-image: var(--icon-edit-copy);\n}\n\n.adw-icon--emblem-system {\n mask-image: var(--icon-emblem-system);\n -webkit-mask-image: var(--icon-emblem-system);\n}\n\n.adw-icon--preferences-system {\n mask-image: var(--icon-preferences-system);\n -webkit-mask-image: var(--icon-preferences-system);\n}\n\n.adw-icon--application-x-executable {\n mask-image: var(--icon-application-x-executable);\n -webkit-mask-image: var(--icon-application-x-executable);\n}\n\n.adw-icon--window-close {\n mask-image: var(--icon-window-close);\n -webkit-mask-image: var(--icon-window-close);\n}\n\n.adw-icon--window-minimize {\n mask-image: var(--icon-window-minimize);\n -webkit-mask-image: var(--icon-window-minimize);\n}\n\n.adw-icon--window-maximize {\n mask-image: var(--icon-window-maximize);\n -webkit-mask-image: var(--icon-window-maximize);\n}\n\n.adw-icon--image-missing {\n mask-image: var(--icon-image-missing);\n -webkit-mask-image: var(--icon-image-missing);\n}\n","// _variables.scss — Adwaita CSS custom properties (light theme defaults).\n// Reference: refs/libadwaita/src/stylesheet/_colors.scss (canonical color palette)\n// Reference: refs/adwaita-web/adwaita-web/scss/_variables.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Subset adapted for @gjsify/adwaita-web Web Components.\n\n@mixin light-theme {\n // Window\n --window-bg-color: #fafafb;\n --window-fg-color: rgba(0, 0, 6, 0.8);\n\n // Views\n --view-bg-color: #ffffff;\n --view-fg-color: rgba(0, 0, 6, 0.8);\n\n // Header bar\n --headerbar-bg-color: #ffffff;\n --headerbar-fg-color: rgba(0, 0, 6, 0.8);\n --headerbar-shade-color: rgba(0, 0, 6, 0.12);\n\n // Hairline separators (header underline, sidebar/pane dividers). Subtle in\n // BOTH themes — dark theme flips to a faint light line, the way libadwaita\n // draws separators, instead of a harsh near-black line on a dark surface.\n --separator-color: rgba(0, 0, 6, 0.1);\n\n // The GENERIC shade the whole `*-shade-color` family below specialises\n // (`_colors.scss:79,141`). Scroll undershoots are drawn from it, and it belongs\n // to the palette rather than to any one widget: a scroller can sit on a window,\n // a view, a sidebar or a card, and reading its neighbour's shade would make the\n // same indicator four different colours.\n --shade-color: rgba(0, 0, 6, 0.07);\n\n // Sidebar / split panes. libadwaita defines the whole family, not just the\n // background (_colors.scss:47-58), and only the background was here — so\n // `.sidebar-pane` had no foreground to name, and an app overriding\n // `--sidebar-fg-color` was overriding nothing.\n --sidebar-bg-color: #ebebed;\n --sidebar-fg-color: rgba(0, 0, 6, 0.8);\n --sidebar-backdrop-color: #f2f2f4;\n --sidebar-shade-color: rgba(0, 0, 6, 0.07);\n --sidebar-border-color: rgba(0, 0, 6, 0.07);\n\n // The MIDDLE pane of a three-pane setup. Nothing renders one yet; the tokens\n // are defined because they are public API an app may already reference, and a\n // half-present family reads as \"this one is unsupported\" rather than \"this\n // composition is not built yet\".\n --secondary-sidebar-bg-color: #f3f3f5;\n --secondary-sidebar-fg-color: rgba(0, 0, 6, 0.8);\n --secondary-sidebar-backdrop-color: #f6f6fa;\n --secondary-sidebar-shade-color: rgba(0, 0, 6, 0.07);\n --secondary-sidebar-border-color: rgba(0, 0, 6, 0.07);\n\n // Cards / boxed lists\n --card-bg-color: #ffffff;\n --card-fg-color: rgba(0, 0, 6, 0.8);\n --card-shade-color: rgba(0, 0, 6, 0.07);\n\n // Accent\n --accent-bg-color: #3584e4;\n --accent-fg-color: #ffffff;\n --accent-color: #1c71d8;\n\n // Popover (menus, dropdowns) — an elevated surface above the window.\n --popover-bg-color: #ffffff;\n --popover-fg-color: rgba(0, 0, 6, 0.8);\n --popover-shade-color: rgba(0, 0, 6, 0.07);\n\n // Dialog scrim — the dimming wash behind a presented dialog (Adw dims with\n // --shade-color at double alpha; this is the equivalent neutral wash).\n --dialog-scrim-color: rgba(0, 0, 6, 0.32);\n\n // Buttons\n --button-bg-color: rgba(0, 0, 6, 0.08);\n --button-hover-color: rgba(0, 0, 6, 0.13);\n --button-active-color: rgba(0, 0, 6, 0.19);\n\n // Entries\n --entry-bg-color: #ffffff;\n --entry-border-color: rgba(0, 0, 6, 0.18);\n --entry-border-hover-color: rgba(0, 0, 6, 0.28);\n\n // Destructive action\n --destructive-bg-color: #e01b24;\n --destructive-fg-color: #ffffff;\n --destructive-color: oklab(from var(--destructive-bg-color) min(l, 0.5) a b);\n\n // Semantic states. `.error` / `.warning` / `.success` (see _labels.scss) do\n // not just recolour text — they REBIND the three accent tokens to these, so\n // anything accent-coloured inside them follows. Values are libadwaita's\n // (_colors.scss:16-29): red_3 / yellow_5 / green_4 from _palette.scss:106-121.\n // The standalone `*-color` is upstream's own relative-colour derivation of the\n // background, kept as an expression rather than resolved to a hex so it tracks\n // a re-themed `*-bg-color`.\n --success-bg-color: #2ec27e;\n --success-fg-color: #ffffff;\n --success-color: oklab(from var(--success-bg-color) min(l, 0.5) a b);\n --warning-bg-color: #e5a50a;\n --warning-fg-color: rgba(0, 0, 0, 0.8);\n --warning-color: oklab(from var(--warning-bg-color) min(l, 0.5) a b);\n --error-bg-color: #e01b24;\n --error-fg-color: #ffffff;\n --error-color: oklab(from var(--error-bg-color) min(l, 0.5) a b);\n\n // Switch\n --switch-off-bg: rgba(0, 0, 0, 0.2);\n --switch-knob-bg: #ffffff;\n\n // Layout radii\n --window-radius: 15px;\n --card-radius: 12px;\n --button-radius: 9px;\n\n // Spacing scale\n --spacing-xs: 6px;\n --spacing-s: 9px;\n --spacing-m: 12px;\n --spacing-l: 18px;\n --spacing-xl: 24px;\n\n // Typography — GNOME default: Adwaita Sans 11. The tail is a PLATFORM-NATIVE\n // ladder, and it is there because the families above it resolve on a GNOME desktop\n // and NOWHERE ELSE: 'Adwaita Sans' is NAMED, not shipped (`status/stylesheet-font-\n // families.json`), and 'Cantarell' is its predecessor. A macOS host has neither,\n // and the `sans-serif` generic is Helvetica there — #1817, a widget set that looks\n // right on the machine it was authored on and lands on Helvetica in every screenshot\n // a consumer takes. `system-ui` asks the host for its own UI face (San Francisco,\n // Segoe UI); `-apple-system` and 'Segoe UI' are the pre-`system-ui` spellings of\n // those same two answers, kept for the engines that need them.\n //\n // The caption is this block's FIRST SENTENCE on purpose: `generate-adwaita-tokens.mjs`\n // titles a group from the block touching its declaration, cut at the first `. `, so a\n // caption written as a trailing line is unreachable and an uncapped one becomes a\n // section header on the website's theming page.\n --font-family: 'Adwaita Sans', 'Cantarell', 'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif;\n --font-size-base: 11pt;\n --font-size-small: 9pt;\n --font-size-heading: 12pt;\n --dim-opacity: 0.55;\n\n // Borders and disabled dimming, as libadwaita's own two-step (_colors.scss:263,\n // 317-329): an OPACITY token the high-contrast query moves, and a colour\n // DERIVED from it against `currentColor` — so a border follows the text colour\n // of the surface it is drawn on instead of being a fixed grey.\n //\n // `--disabled-opacity` had no home here, and three partials said so in a\n // comment and reached for `--dim-opacity` instead (`_switch.scss:81-83`,\n // `_checks.scss:164-166`, `_progress_bar.scss:87-89`). Those are different\n // numbers upstream — 50% disabled vs 55% dimmed — and under high contrast they\n // move in OPPOSITE directions (disabled 40%, dimmed 90%), so the stand-in was\n // most wrong exactly where it mattered most.\n --border-opacity: 15%;\n --border-color: color-mix(in srgb, currentColor var(--border-opacity), transparent);\n --disabled-opacity: 0.5;\n\n // Document + monospace families, behind `.document` / `.monospace`\n // (_labels.scss:75-84). In GTK these four are written into `:root` at RUNTIME\n // by AdwStyleManager from the desktop's font settings\n // (adw-style-manager.c:169-218), defaulting to `Sans 10` / `Monospace 10`\n // (:50-56). A browser has no style manager, so they are ordinary tokens here\n // — same names, so re-theming goes through the documented contract.\n //\n // The monospace stack has ONE home, and did not until recently: `_data_grid.scss`\n // used to inline it, and `source-view/theme.ts` carried a SECOND, longer copy in\n // a TS string literal (measured on one page, `.cm-scroller` resolved to\n // 'Adwaita Mono', 'Cascadia Code', 'JetBrains Mono', … while a `.monospace`\n // label beside it resolved to this token — two typefaces, same document).\n // A literal in TS is also outside the `stylesheet-font-families` rule, which\n // reads `.css`/`.scss`. Both now read this token; its consumers are\n // `.monospace` (_labels.scss:128), `_action_row.scss:94`, the data-grid mono\n // cell (via `@extend .monospace`) and `<adw-source-view>`.\n //\n // Adwaita Mono heads the stack as a PROGRESSIVE ENHANCEMENT, not because\n // anything here ships it: `@gjsify/adwaita-fonts` vendors two Sans TTFs and no\n // mono face at all (the upstream mono faces are 1.4-1.5 MB each). This comment\n // used to claim the package ships it — a claim the NativeScript theme, which\n // carries the same stack, already contradicted in prose\n // (`nativescript-bridge/adwaita/src/theme/adwaita.css:769`). So on a GNOME\n // desktop the system `adwaita-mono-fonts` resolves it; anywhere else the\n // generic tail is what renders, which is the correct outcome and the reason the\n // tail exists. Held honest by the `stylesheet-font-families` conformance rule,\n // whose ledger carries this reason — never delete one without the other.\n //\n // `'Cantarell'` is dropped from that stack on the way here: Cantarell is\n // GNOME's PROPORTIONAL UI font, so a monospace fallback chain that reaches it\n // second lands on a font whose figures do not line up — the exact property\n // `.monospace` exists for.\n //\n // 'Consolas' is the same repair as `system-ui` beside it in `--font-family` (#1817):\n // `ui-monospace` is the right way to ask and is not universally supported, and the\n // engines without it fell to the `monospace` generic — Courier New on Windows. The\n // `'SF Mono'` / `'Menlo'` pair answers on macOS and `ui-monospace` on Linux, so this\n // is the Windows half, not a second opinion about the other two.\n --document-font-family: var(--font-family);\n --document-font-size: var(--font-size-base);\n --monospace-font-family: 'Adwaita Mono', ui-monospace, 'SF Mono', 'Menlo', 'Consolas', monospace;\n --monospace-font-size: var(--font-size-base);\n}\n\n// The tokens above are a MIXIN rather than a bare `:root` block so `.theme-light`\n// can include them too (see `_theme.scss`). A light opt-out that exists only as\n// `:not(.theme-light)` on the media query cannot serve a SUBTREE: on a dark system\n// the root stays dark, and a container asking for light matches no rule at all.\n:root {\n @include light-theme;\n}\n\n// High contrast moves the three opacity tokens, and only those — every colour\n// that reads them follows without its own query (_colors.scss:325-329).\n@media (prefers-contrast: more) {\n :root {\n --border-opacity: 50%;\n --dim-opacity: 0.9;\n --disabled-opacity: 0.4;\n }\n}\n","// _theme.scss — Light/dark theme switching.\n// Auto via prefers-color-scheme + manual .theme-dark / .theme-light overrides.\n// Reference: refs/libadwaita/src/stylesheet/_colors.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// `light-theme` lives in _variables.scss; @use makes it reachable (the skin uses\n// the module system, so a mixin there is namespaced rather than global).\n@use 'variables';\n\n@mixin dark-theme {\n --window-bg-color: #222226;\n --window-fg-color: #ffffff;\n --view-bg-color: #1d1d20;\n --view-fg-color: #ffffff;\n --headerbar-bg-color: #2e2e32;\n --headerbar-fg-color: #ffffff;\n --headerbar-shade-color: rgba(0, 0, 6, 0.36);\n --separator-color: rgba(255, 255, 255, 0.08);\n --shade-color: rgba(0, 0, 6, 0.25);\n --sidebar-bg-color: #2e2e32;\n --sidebar-fg-color: #ffffff;\n --sidebar-backdrop-color: #28282c;\n --sidebar-shade-color: rgba(0, 0, 6, 0.25);\n --sidebar-border-color: rgba(0, 0, 6, 0.36);\n --secondary-sidebar-bg-color: #28282c;\n --secondary-sidebar-fg-color: #ffffff;\n --secondary-sidebar-backdrop-color: #252529;\n --secondary-sidebar-shade-color: rgba(0, 0, 6, 0.25);\n --secondary-sidebar-border-color: rgba(0, 0, 6, 0.36);\n --card-bg-color: rgba(255, 255, 255, 0.08);\n --card-fg-color: #ffffff;\n --card-shade-color: rgba(0, 0, 6, 0.36);\n --accent-color: #78aeed;\n --popover-bg-color: #36363a;\n --popover-fg-color: #ffffff;\n --popover-shade-color: rgba(0, 0, 6, 0.36);\n // A deeper scrim in dark mode so the dimming reads against a dark window.\n --dialog-scrim-color: rgba(0, 0, 6, 0.55);\n --button-bg-color: rgba(255, 255, 255, 0.1);\n --button-hover-color: rgba(255, 255, 255, 0.15);\n --button-active-color: rgba(255, 255, 255, 0.22);\n --entry-bg-color: rgba(255, 255, 255, 0.06);\n --entry-border-color: rgba(255, 255, 255, 0.16);\n --entry-border-hover-color: rgba(255, 255, 255, 0.26);\n --destructive-bg-color: #c01c28;\n --destructive-fg-color: #ffffff;\n --destructive-color: oklab(from var(--destructive-bg-color) max(l, 0.85) a b);\n // Semantic states — libadwaita's dark overrides (_colors.scss:83-92): the\n // backgrounds darken (green_5 / a hand-picked amber / red_4) and the\n // standalone colour LIGHTENS instead of darkening, so it stays readable on a\n // dark surface. Upstream does not re-declare the `*-fg-color`s here either.\n --success-bg-color: #26a269;\n --success-color: oklab(from var(--success-bg-color) max(l, 0.85) a b);\n --warning-bg-color: #cd9309;\n --warning-color: oklab(from var(--warning-bg-color) max(l, 0.85) a b);\n --error-bg-color: #c01c28;\n --error-color: oklab(from var(--error-bg-color) max(l, 0.85) a b);\n --switch-off-bg: rgba(255, 255, 255, 0.2);\n --switch-knob-bg: #deddda;\n // The active toggle chip is NOT near-white in both themes — that premise was\n // wrong, and it is what made the selected toggle a solid white pill on a dark\n // window while GTK draws a grey one. libadwaita's own _colors.scss:247-248 says\n // dark takes a TRANSLUCENT white over the dark background, with white text:\n // --active-toggle-bg-color: rgb(255 255 255 / 20%);\n // --active-toggle-fg-color: #ffffff;\n // The foreground needs no entry at all — _toggle_group.scss defaults it to\n // var(--window-fg-color), which is already #ffffff here. Only the background\n // was ever missing; the old dark override forced dark text to compensate for it.\n --active-toggle-bg-color: rgb(255 255 255 / 20%);\n}\n\n// Auto dark theme via prefers-color-scheme — opt out with .theme-light\n@media (prefers-color-scheme: dark) {\n :root:not(.theme-light) {\n @include dark-theme;\n }\n}\n\n// Manual override, on ANY element rather than only on `:root`.\n//\n// It was `:root.theme-dark`, which silently does nothing unless the class lands on\n// `<html>` — so an EMBEDDED consumer could not give its own subtree a scheme without\n// re-theming the host page around it. The storybook is exactly that case: it scopes\n// to its own container, the class was present, the tokens never changed, and nothing\n// reported a problem. Custom properties resolve per element, so an element-level\n// selector overrides the inherited values for its subtree and for nothing else.\n.theme-dark {\n @include dark-theme;\n}\n\n// The light counterpart, for the same reason: on a dark system a subtree has to be\n// able to ask for light, which `:root:not(.theme-light)` on the media query above\n// cannot give it once the class sits anywhere but the root.\n.theme-light {\n @include variables.light-theme;\n}\n","// _root.scss — opt-in page surface for chrome-less layouts.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_window.scss (surface tokens)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: original opt-in helper for @gjsify/adwaita-web.\n//\n// The components theme via the `--window-*` CSS custom properties, but only\n// `adw-window` actually PAINTS the window surface (background + text colour).\n// A page laid out WITHOUT an `<adw-window>` (e.g. a plain browser view that\n// hosts rows/cards directly) therefore renders on the browser default (white)\n// and its native form controls / scrollbars don't follow the light/dark scheme.\n//\n// Applying `.adw-root` to `<body>` (or `<html>` / the `:root` element) binds the\n// Adwaita window surface + `color-scheme: light dark` to the document, so a\n// window-less layout is themed exactly like the components inside it. This is\n// OPT-IN and additive — it does not change any component's own styling.\n.adw-root {\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n color-scheme: light dark;\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n}\n","// _reset.scss — style-isolation boundary for embedding in arbitrary host pages.\n//\n// adwaita-web renders as LIGHT-DOM custom elements (by design: the widgets\n// compose with the page and stay overridable via the `--adw-*` / `--*` design\n// tokens). The trade-off of light DOM is that a host page's *inherited*\n// typography — `font-family`, `color`, `line-height`, `letter-spacing`, … — and\n// generic element resets can leak into the widgets.\n//\n// This partial establishes an Adwaita typographic + box-model context at EVERY\n// component boundary, so inheritance from the host stops at the widget. It sets\n// only a FLOOR: it is `@use`d before the component partials, so each component's\n// own rules override it, and consumers keep full control through the tokens and\n// ordinary higher-specificity rules (isolation without giving up overriding).\n//\n// The box battles (borders, backgrounds) are already won by the components'\n// class-scoped rules against realistic element-level host CSS; the real leak is\n// inherited typography + a host `* {}` box-sizing reset, which is what this\n// neutralises.\n\n// Every custom element adwaita-web defines — one entry per `customElements\n// .define(…)` call under `src/`, in BOTH namespaces: a tag carries the prefix of\n// the library that owns its GType (ADR 0034 clause 1), so `gtk-entry` is on this\n// list beside `adw-action-row`.\n//\n// DERIVED, NOT REMEMBERED: `scripts/check-adwaita-reset-components.mjs` walks\n// those calls and fails on any tag missing from this list (and on any entry with\n// no call behind it). A hand-kept list is a second copy of the registry, and it\n// had already drifted — `adw-source-view` was defined for its whole life and\n// never listed, so it silently ran without the isolation floor. Nothing noticed,\n// because the only spec touching this file instantiates `adw-switch-row`.\n$adw-components:\n adw-about-dialog, adw-action-row, gtk-action-bar, adw-alert-dialog, adw-alert-response,\n adw-avatar, adw-banner, adw-bottom-sheet, adw-bottom-sheet-bottom-bar,\n adw-bottom-sheet-content, adw-bottom-sheet-sheet, gtk-box, gtk-button, adw-button-content, adw-button-row,\n adw-card, adw-carousel, adw-carousel-indicator-dots,\n adw-carousel-indicator-lines, gtk-check-button, adw-clamp, adw-combo-row,\n adw-data-grid,\n adw-dialog, gtk-drop-down, gtk-entry, adw-entry-row, adw-expander-row,\n adw-header-bar, gtk-image, adw-inline-view-switcher, gtk-label, gtk-menu-button,\n adw-navigation-page,\n adw-navigation-split-view, adw-navigation-view, adw-overlay-split-view,\n adw-password-entry-row, gtk-popover, adw-preferences-dialog,\n adw-preferences-group, adw-preferences-page, gtk-progress-bar, adw-radio,\n adw-shortcut-label, adw-sidebar, adw-sidebar-item,\n adw-sidebar-section, adw-source-view, adw-spinner, adw-spin-row,\n adw-split-button, adw-status-page, gtk-switch, adw-switch-row,\n adw-tab-page, adw-tab-view, adw-toast-overlay, adw-toggle, adw-toggle-group,\n adw-toolbar-view, adw-view-stack, adw-view-stack-page, adw-view-switcher,\n adw-view-switcher-bar, adw-view-switcher-page, adw-window, adw-window-title,\n adw-wrap-box;\n\n// Roots: re-root the inherited typographic properties (and the box model) so a\n// host page's font / colour / spacing cannot flow into the widget. Every value\n// is the Adwaita default; a component that wants something else overrides it on\n// its own element (this rule is emitted first).\n#{$adw-components} {\n box-sizing: border-box;\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n font-weight: 400;\n font-style: normal;\n font-variant: normal;\n line-height: normal;\n letter-spacing: normal;\n word-spacing: normal;\n text-align: start;\n text-indent: 0;\n text-transform: none;\n text-shadow: none;\n}\n\n// A box and a label INHERIT inside another widget, as every GTK node does. They\n// are the two elements an authored tree puts INSIDE the others — a label in a\n// `.error` box, a box of labels in a header bar — and the floor above would\n// repaint every one of them in `--window-fg-color` at the base size, whatever\n// its parent says. Nested in any component the floor already stops the host\n// page, so only the OUTERMOST one keeps it. `:where()` adds no specificity, so a\n// class on the element itself (`.title-1`, `.dimmed`) still wins.\n//\n// A button's content inherits for the same reason: `<adw-button-content>` is the child\n// of a `<gtk-button>`, and the floor painted its icon and label in the window colour on\n// a `.suggested-action` button, where GTK draws them in the accent foreground.\n:where(#{$adw-components}) :is(gtk-box, gtk-label, adw-button-content) {\n color: inherit;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n font-style: inherit;\n font-variant: inherit;\n line-height: inherit;\n letter-spacing: inherit;\n word-spacing: inherit;\n text-transform: inherit;\n text-shadow: inherit;\n}\n\n// Descendants: `box-sizing` does not inherit, so a host `*, *::before {\n// box-sizing: content-box }` reset would still reach internal elements. Pin it\n// to `border-box` (adwaita's model throughout) inside every component.\n@each $c in $adw-components {\n #{$c} *,\n #{$c} *::before,\n #{$c} *::after {\n box-sizing: border-box;\n }\n}\n","// _icon.scss — the symbolic icon box behind <gtk-image>.\n//\n// A symbolic icon is rendered as a CSS mask rather than an <img> or inline SVG,\n// so `currentColor` drives the fill and the glyph re-themes with whatever\n// contains it. The per-name `.adw-icon--<name>` mask classes are GENERATED into\n// scss/_icons.generated.scss by scripts/build-scss.mjs (one entry per icon in\n// its ICONS map), so adding an icon is a single map edit.\n//\n// This block lived in `_button.scss` for as long as the button was the only\n// widget that drew one. It is emitted BEFORE the widget partials so a context\n// that sizes its own icons (`.adw-about-dialog-icon` at 96px, the split button's\n// 14px arrows, the view switcher's 16px) still wins on ordinary specificity.\n//\n// Reference: refs/libadwaita/src/stylesheet/_common.scss:34-41 — `.normal-icons`\n// / `.large-icons` set `-gtk-icon-size`. libadwaita has NO `_icon.scss`: there\n// the icon is a GtkImage and its size is a widget property, not a rule.\n// Reference: refs/adwaita-web/adwaita-web/scss/_icon.scss — the vendored web\n// port's `.adw-icon` is an inline-flex holder around a real <svg>; this\n// package masks instead, which is what keeps it colourable via currentColor.\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components (mask-based).\n\n.adw-icon {\n display: inline-block;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n background-color: currentColor;\n mask-size: 16px;\n mask-repeat: no-repeat;\n mask-position: center;\n -webkit-mask-size: 16px;\n -webkit-mask-repeat: no-repeat;\n -webkit-mask-position: center;\n\n // `currentColor` IS the icon: the mask is painted with the inherited colour,\n // so a suggested-action button's `--accent-fg-color` has to reach it. Since\n // <gtk-image> is a custom element it is also in `$adw-components`, and the\n // ADR-0010 boundary reset re-roots `color` on every entry there — which would\n // otherwise repaint every icon in `--window-fg-color` regardless of its host.\n // Class beats type selector, so this restores inheritance.\n color: inherit;\n\n // `display: inline-block` (author CSS) otherwise beats the UA `[hidden]`\n // rule, so a hidden icon (e.g. an avatar's fallback icon while initials\n // show) would still render as a solid maskless square. Honor `hidden`.\n &[hidden] {\n display: none;\n }\n}\n\n// THE FALLBACK GLYPH — what a name the stylesheet cannot draw resolves to.\n//\n// Until this rule existed there was no `mask-image` on `.adw-icon` at all, so an\n// icon whose name has no generated class kept `background-color: currentColor`\n// over an empty mask and painted a SOLID 16px square in the widget's text\n// colour. Measured in Firefox: `.adw-icon.adw-icon--dialog-error` reported\n// `mask-image: none`, `background-color: rgb(0, 128, 0)`, box 16x16 — visually a\n// deliberate colour swatch, which is why three renderer-comparison surfaces\n// carried substituted glyphs and nobody read it as a bug.\n//\n// `image-missing` is libadwaita's OWN answer to \"I have no icon to draw here\":\n// C substitutes exactly that name for a NULL icon-name in three widgets\n// (adw-button-content.c:294,356 · adw-view-switcher-button.c:286,347,405 ·\n// adw-inline-view-switcher.c:142), and GTK's icon theme returns the same\n// broken-image paintable for a name it cannot find. So the three renderers end\n// up on ONE glyph: GTK draws it from the system theme, the web draws it from\n// here, and NativeScript cannot reach the state at all — its GtkImage takes SVG\n// SOURCE, not a name, so a missing icon there is a missing import the compiler\n// rejects. Nothing THROWS, on any of the three: an icon is decorative and taking\n// an application down over a glyph is a failure mode none of them has.\n//\n// `:where()` and not `.adw-icon`, and that is the load-bearing detail:\n// `adwaita-skin.scss` @uses `icons.generated` BEFORE `icon`, so at equal\n// specificity this rule would come last and override every generated mask class\n// — every icon in the package would draw the broken glyph. `:where()` scores\n// 0,0,0, so ANY `.adw-icon--<name>` rule beats it wherever it sits in the\n// cascade, including one `registerIcon()` inserts at runtime.\n:where(.adw-icon) {\n mask-image: var(--icon-image-missing);\n -webkit-mask-image: var(--icon-image-missing);\n}\n\n// …and NO name at all draws nothing, rather than the broken glyph. `<gtk-image>`\n// leaves the node classless only when `icon-name` is ABSENT or EMPTY, which is the\n// state where the HOST decided against an icon — the tab strip's indicator slot,\n// the avatar's fallback while initials show. `Gtk.Image` with a NULL icon-name\n// draws nothing too.\n//\n// A name that was GIVEN never reaches this rule, even an unusable one: the element\n// puts `adw-icon--image-missing` on it, because `gtk_icon_theme_lookup_icon` has no\n// \"found nothing\" answer either. Until it did, `<adw-button-row start-icon-name=\"a b\">`\n// reserved a VISIBLE 16px slot and painted none of it — this rule turning the\n// pre-existing solid square into an invisible hole.\n.adw-icon:not([class*='adw-icon--']) {\n background-color: transparent;\n}\n","// _labels.scss — libadwaita's typography + semantic-colour UTILITY CLASSES, and\n// the `label {}` rules of the element they are written for.\n//\n// `refs/libadwaita/src/stylesheet/widgets/_labels.scss` is a widget partial in\n// name only: `label { … }` is four lines of GtkLabel plumbing and everything else\n// in it is a CLASS a consumer puts on whatever node it already has — a `<span>` on\n// a hand-written page, or <gtk-label>, which exists because an AUTHORED tree (a\n// Blueprint `Gtk.Label` mounted through `mountSharedTree`) arrives as a tag with a\n// `label` attribute and needs an element to read it. ADR 0010 makes the class\n// surface the public contract either way; the element adds the layout below and\n// nothing to the classes.\n//\n// This is also where the in-tree duplication ends: `_data_grid.scss` declared\n// `font-variant-numeric: tabular-nums` twice and inlined a whole monospace font\n// stack — i.e. `.numeric` and `.monospace` — and dimmed its header row with a\n// raw `opacity: var(--dim-opacity)` where `.dimmed` is the upstream spelling. It\n// composes these now.\n//\n// WHAT DIFFERS FROM UPSTREAM, AND WHY\n//\n// - `font-size` percentages are upstream's (181% / 136% / 118% / 82%), which\n// are relative to the INHERITED size. That is what libadwaita means by them\n// and it composes with `--font-size-base`, so they are kept verbatim rather\n// than resolved to pt values.\n// - `.document` / `.monospace` read `--document-font-*` / `--monospace-font-*`.\n// In GTK those four are written into `:root` at runtime by AdwStyleManager\n// from the desktop's font settings (adw-style-manager.c:169-218), defaulting\n// to `Sans 10` / `Monospace 10` (:50-56). There is no style manager in a\n// browser, so `_variables.scss` supplies them as ordinary tokens — same\n// names, so a consumer re-themes through the documented contract.\n// - `refs/adwaita-web/adwaita-web/scss/_utility_classes.scss` carries its own\n// version of this block (it puts these in `_utility_classes.scss`, NOT in\n// `_label.scss`) and it disagrees with libadwaita on two points: it adds a\n// `line-height` to every title/heading, and it dims `.caption` and\n// `.caption-heading` by folding `--dim-opacity` into them. Neither is in\n// libadwaita — a caption is small, not dim, and dimming is `.dimmed`'s job,\n// composable onto anything. libadwaita is followed here.\n//\n// Reference: refs/libadwaita/src/stylesheet/widgets/_labels.scss:13-88 (every class below)\n// Reference: refs/libadwaita/src/adw-style-manager.c:50-56,169-218 (the four font tokens)\n// Reference: refs/adwaita-web/adwaita-web/scss/_utility_classes.scss (the vendored port's variant, NOT followed — see above)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web; `label {}` is ported onto\n// <gtk-label> without `:disabled`, which the element has no state for.\n\n// <gtk-label>: `label {}` (_labels.scss:1-11) plus the layout GtkLabel does in C.\n//\n// THE TWO SPACERS ARE `xalign`. GTK places the text at `xalign * (width − text\n// width)` inside the label's allocation (gtklabel.c, gtk_label_get_layout_location); the\n// element's free space is split between `::before` and `::after` in the ratio\n// `xalign : 1 − xalign`, which is that formula, and flips in RTL as the C does.\n//\n// `YALIGN` HAS NO CONTINUUM ON THE CROSS AXIS. `xalign`'s spacer trick splits free space\n// along flexbox's MAIN axis, where a flex item's `flex-grow` ratio is a real number;\n// `align-items` is the CROSS-axis equivalent and CSS gives it three keywords, not a ratio\n// — there is no `align-items: 0.25` the way there is a `flex-grow: 0.25`. A second pair of\n// spacers would need a second axis, and a `<gtk-label>` cannot be both a row (for `xalign`)\n// and a column (for `yalign`) at once without an inner wrapper element, which would cost\n// every single-line label the \"one text node, no children\" DOM shape `gtk-label.spec.ts`\n// pins for the XSS answer. So `--gtk-label-align-items` is set by `labelYalignAlignItems`\n// (`@gjsify/adwaita-core`) from the NEAREST of three zones — `flex-start` below `0.25`,\n// `flex-end` above `0.75`, `center` between (the default, unchanged from before this\n// property existed) — exact at the three values GTK's own default and both edges take,\n// and a DECLARED divergence for anything else: nearest zone, not a silent half-split, and\n// `label.spec.ts`/`gtk-label.spec.ts` both say so where they test the intermediate values.\n//\n// `white-space: pre`: Pango keeps a newline and a run of spaces, and a label that\n// does not wrap is as wide as its text — which a flex item's `min-width: auto`\n// already makes its minimum. `wrap` breaks at word boundaries, WORD being the\n// default `wrap-mode` — so does `ellipsize` alone, see `.adw-label-clamp` below.\ngtk-label {\n display: flex;\n align-items: var(--gtk-label-align-items, center);\n white-space: pre;\n caret-color: currentColor;\n // GtkLabel is not selectable unless asked (`selectable` defaults to FALSE).\n user-select: none;\n\n &::before,\n &::after {\n content: '';\n flex-shrink: 1;\n flex-basis: 0;\n }\n\n &::before {\n flex-grow: var(--gtk-label-xalign, 0.5);\n }\n\n &::after {\n flex-grow: calc(1 - var(--gtk-label-xalign, 0.5));\n }\n\n &[wrap] {\n white-space: pre-wrap;\n }\n\n // `gtk-label.ts`'s span-render path: the text moves into this span so it can be pinned\n // to its measured wrap width (a flex item is blockified by spec, but `display: block` is\n // spelled out rather than relied on implicitly). Present whenever `wrap` is set OR\n // `ellipsize` is active — MEASURED (`@gjsify/adwaita-core`'s `label.ts` header): GTK's\n // own Pango layout wraps onto multiple lines from `ellipsize` ALONE, `wrap` or not, so\n // both cases need the same span and the same measurement pass.\n .adw-label-text {\n display: block;\n // A pinned width, or a shrink-to-fit one, may never push the label wider than its\n // container.\n max-width: 100%;\n }\n\n // `wrap-mode` — Pango's break-opportunity choice — is a real `word-break`/\n // `overflow-wrap` mapping, not a declared gap: CSS's `break-all` is Pango's CHAR (break\n // anywhere), and `overflow-wrap: anywhere` is Pango's WORD_CHAR (word boundaries, falling\n // back to a character break only when a single word will not fit) — the pspec's own\n // words for that member. WORD, the default, is the browser's un-overridden behaviour, so\n // it has no rule here. Scoped to `.adw-label-text` alone, not `[wrap]`: `wrap-mode` only\n // matters once the layout can span more than one line at all, which `ellipsize` alone\n // already grants (see above) — the span's mere existence is that condition.\n &[wrap-mode='char'] .adw-label-text {\n word-break: break-all;\n }\n\n &[wrap-mode='word-char'] .adw-label-text {\n overflow-wrap: anywhere;\n }\n\n // `ellipsize` — a JS-toggled CLASS, not an attribute selector: `.adw-label-clamp` is set\n // by `gtk-label.ts`'s `_renderSpan` from `ellipsize`'s NORMALIZED value, so a raw,\n // unrecognised `ellipsize` attribute (which `normalizeLabelEllipsize` already reads as\n // `none`) can never leave this rule half-applied the way an `[ellipsize]` PRESENCE\n // selector would. `lines`, gated by `labelEffectiveLines` (`@gjsify/adwaita-core`) to\n // \"ellipsize is active\", `wrap` or not — MEASURED, the same header — applies here\n // REGARDLESS of `wrap`: a real `Gtk.Label` allocated with `wrap=FALSE, ellipsize=END,\n // lines=2` lays out exactly two lines, ellipsized, not one. `-webkit-line-clamp` needs\n // its own box context (`display: -webkit-box` + `-webkit-box-orient: vertical`) and text\n // that can actually WRAP (`white-space: normal`, overriding the host's inherited `pre`/\n // `pre-wrap`) to have more than one line to clamp in the first place; the default of `1`\n // is Pango's own when `lines` is unset (`--gtk-label-lines` is still set then — see\n // `_render()` — so the fallback here is only a defensive belt for a span whose host\n // somehow reached this class without it).\n .adw-label-text.adw-label-clamp {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: var(--gtk-label-lines, 1);\n overflow: hidden;\n text-overflow: var(--gtk-label-ellipsize-overflow, ellipsis);\n white-space: normal;\n }\n\n &[selectable] {\n user-select: text;\n cursor: text;\n }\n\n &.separator {\n @extend .dimmed;\n }\n}\n\n// _labels.scss:13-15\n.dimmed {\n opacity: var(--dim-opacity);\n}\n\n// _labels.scss:17-19\n.accent {\n color: var(--accent-color);\n}\n\n// _labels.scss:21-29 — a semantic class does not just recolour the text, it\n// REBINDS the three accent tokens, so a button or switch inside it turns the\n// same colour without knowing which state it is in.\n@each $e_type in error, warning, success {\n .#{$e_type} {\n color: var(--accent-color);\n\n --accent-bg-color: var(--#{$e_type}-bg-color);\n --accent-fg-color: var(--#{$e_type}-fg-color);\n --accent-color: var(--#{$e_type}-color);\n }\n}\n\n/**********************\n * General Typography *\n **********************/\n\n// _labels.scss:35-53\n.title-1 {\n font-weight: 800;\n font-size: 181%;\n}\n\n.title-2 {\n font-weight: 800;\n font-size: 136%;\n}\n\n.title-3 {\n font-weight: 700;\n font-size: 136%;\n}\n\n.title-4 {\n font-weight: 700;\n font-size: 118%;\n}\n\n// _labels.scss:55-57\n.heading {\n font-weight: 700;\n}\n\n// _labels.scss:59-62\n.body {\n font-weight: 400;\n line-height: 140%;\n}\n\n// _labels.scss:64-67\n.caption-heading {\n font-weight: 700;\n font-size: 82%;\n}\n\n// _labels.scss:69-73\n.caption {\n font-weight: 400;\n font-size: 82%;\n line-height: 140%;\n}\n\n// _labels.scss:75-79\n.document {\n font-family: var(--document-font-family);\n font-size: var(--document-font-size);\n line-height: 140%;\n}\n\n// _labels.scss:81-84\n.monospace {\n font-family: var(--monospace-font-family);\n font-size: var(--monospace-font-size);\n}\n\n// _labels.scss:86-88\n.numeric {\n font-variant-numeric: tabular-nums;\n}\n","// _box.scss — <gtk-box>, GTK's one-axis container.\n//\n// libadwaita has no box partial: a box draws nothing, it only places children.\n// The element sets `flex-direction` and `gap` inline from its normalised\n// properties (gtk-box.ts); this is the rest of GtkBoxLayout's shape.\n//\n// `align-items: stretch`: a child's default `halign`/`valign` is FILL, so it takes\n// the whole cross axis. `min-width`/`min-height: 0` are deliberately NOT set on\n// the children: a GTK box never allocates a child less than its minimum, and a\n// flex item's `auto` minimum is that.\n//\n// Reference: refs/gtk/gtk/gtkboxlayout.c (homogeneous: every child the same size)\n// Copyright (c) The GTK Team. LGPLv2.1+.\n\ngtk-box {\n display: flex;\n flex-direction: row;\n align-items: stretch;\n}\n\ngtk-box[homogeneous] > * {\n flex: 1 1 0;\n}\n","// _style_classes.scss — libadwaita's documented, WIDGET-INDEPENDENT style classes.\n//\n// THE GAP THIS CLOSES\n//\n// `refs/libadwaita/doc/style-classes.md` is the public contract an app author\n// reads: put `.card` on a box, `.boxed-list` on a list, `.toolbar` on a bar,\n// `.linked` around a button group. Twenty-one of those classes had NO rule in\n// this package (#1049) — and two of them looked ported because their names\n// appear in comments (`.osd`, `.linked`) while the code spells its own\n// `.adw-linked`. A consumer following the upstream documentation got nothing,\n// silently, which is the worst failure mode for a styling contract.\n//\n// Widget-scoped classes are NOT here — they live with the widget whose markup\n// they modify (`.property` in `_action_row.scss`, `.compact` in\n// `_status_page.scss`, `.devel` in `_headerbar.scss`, `.osd`'s button and\n// progress-bar variants in theirs), because that is where their selector needs\n// to see the widget's inner nodes. `scripts/check-adwaita-style-classes.mjs`\n// holds the ledger of which class lives where and fails when one has no rule at\n// all.\n//\n// Reference: refs/libadwaita/doc/style-classes.md (the documented surface)\n// Reference: refs/libadwaita/src/stylesheet/_common.scss:25-28,43-60,90-104\n// Reference: refs/libadwaita/src/stylesheet/widgets/_misc.scss:4-7,21-32,197-236\n// Reference: refs/libadwaita/src/stylesheet/widgets/_views.scss:1-18\n// Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss:520-600\n// Reference: refs/libadwaita/src/stylesheet/widgets/_toolbars.scss:91-102\n// Reference: refs/libadwaita/src/stylesheet/widgets/_linked.scss:1-45\n// Reference: refs/libadwaita/src/stylesheet/widgets/_scrolling.scss:150-166\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web — GTK node names (`row`,\n// `list`, `button`) become the custom-element tags and `.adw-*` structure\n// classes this package renders, and GTK-only drawing (`image()`,\n// `-gtk-icon-shadow`, `border-spacing` on a box) becomes its CSS equivalent.\n\n/************\n * Surfaces *\n ************/\n\n// _common.scss:25-28 — an opaque window-coloured background on any node.\n.background {\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n}\n\n// _views.scss:1-18 — the content-area surface. `:disabled` and `:selected` are\n// GTK pseudo-classes with no DOM counterpart; `[disabled]`/`[aria-selected]`\n// are how the same states are spelled here, and both are what our own widgets\n// already set.\n.view {\n background-color: var(--view-bg-color);\n color: var(--view-fg-color);\n\n &:disabled,\n &[disabled] {\n color: color-mix(in srgb, var(--view-fg-color) var(--disabled-opacity), transparent);\n background-color: color-mix(in srgb, var(--window-bg-color) 60%, var(--view-bg-color));\n }\n\n &[aria-selected='true'] {\n background-color: color-mix(in srgb, var(--accent-bg-color) 25%, transparent);\n border-radius: var(--button-radius);\n }\n}\n\n// _misc.scss:4-7 — the default border. `--border-color` is derived from\n// `currentColor`, so this follows the foreground of whatever it is drawn on.\n.frame {\n border: 1px solid var(--border-color);\n}\n\n/*********\n * Cards *\n *********/\n\n// _misc.scss:197-236. The ONE card recipe: `adw-card` and the preferences\n// group's list box each carried their own copy of these five declarations\n// before this placeholder existed.\n%card {\n background-color: var(--card-bg-color);\n color: var(--card-fg-color);\n border-radius: var(--card-radius);\n box-shadow:\n 0 0 0 1px rgb(0 0 6 / 3%),\n 0 1px 3px 1px rgb(0 0 6 / 7%),\n 0 2px 6px 2px rgb(0 0 6 / 3%);\n\n @media (prefers-contrast: more) {\n box-shadow:\n 0 0 0 1px var(--border-color),\n 0 1px 3px 1px rgb(0 0 6 / 7%),\n 0 2px 6px 2px rgb(0 0 6 / 3%);\n }\n}\n\n.card {\n @extend %card;\n\n // `.card.activatable` gets the hover/active states of an activatable row\n // (:225-235). GTK's `background-image: image(…)` is a solid-colour layer over\n // the background; a one-stop gradient is its CSS equivalent, and it composes\n // with `background-color` the same way — so a re-themed card keeps its colour\n // and only gains the wash.\n &.activatable {\n transition:\n background-color 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94),\n box-shadow 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);\n\n &:hover {\n background-image: linear-gradient(\n color-mix(in srgb, currentColor 3%, transparent),\n color-mix(in srgb, currentColor 3%, transparent)\n );\n }\n\n &:active {\n background-image: linear-gradient(\n color-mix(in srgb, currentColor 8%, transparent),\n color-mix(in srgb, currentColor 8%, transparent)\n );\n }\n }\n\n // A card inside (or itself) an OSD surface loses its own elevation and reads\n // as a translucent inset instead (:212-220).\n .osd &,\n &.osd {\n background-color: color-mix(in srgb, currentColor 10%, transparent);\n color: rgb(255 255 255 / 90%);\n box-shadow: none;\n\n @media (prefers-contrast: more) {\n box-shadow: 0 0 0 1px var(--border-color);\n }\n }\n}\n\n/***************\n * Boxed lists *\n ***************/\n\n// _lists.scss:520-556. In GTK the row separators are drawn by the rows\n// themselves and the list only supplies the card box plus the rounding of its\n// two ends — which is exactly how this package's rows behave already\n// (`adw-action-row` and friends draw their own `border-bottom` and drop it on\n// `:last-child`), so the class is the box and the clip.\n.boxed-list {\n @extend %card;\n\n display: flex;\n flex-direction: column;\n // The rounding of the first and last row is a CLIP here rather than per-row\n // corner radii: a row is a custom element whose own background paints over\n // the list's corners, and every row type would otherwise need the same four\n // radii repeated.\n overflow: hidden;\n}\n\n// :556-600 — same content, each row its own card. The list drops its box, and\n// the rows carry it, spaced 12px apart.\n.boxed-list-separate {\n display: flex;\n flex-direction: column;\n gap: 12px;\n background: none;\n color: var(--card-fg-color);\n\n > * {\n @extend %card;\n\n overflow: hidden;\n // A row that draws a separator for its neighbours must not draw one when it\n // IS the card (:585-586: `border: none`).\n border-bottom: none;\n }\n}\n\n/************\n * Toolbars *\n ************/\n\n// _toolbars.scss:91-102 + doc \"Toolbars\". GTK's `border-spacing: 6px` on a box\n// is the gap between children; the flex row is what makes that expressible.\n//\n// The automatic flat appearance follows upstream's rule list exactly: icon-only\n// buttons, buttons with an `adw-button-content` (icon + label), menu buttons and\n// split buttons go flat — unless they are `.raised`, `.suggested-action`,\n// `.destructive-action`, `.opaque`, or sit inside a `.linked` group. Text-only\n// buttons keep their frame, which is why this cannot be a blanket\n// `.toolbar gtk-button { … }`.\n$_keeps-frame: ':not(.raised):not(.suggested-action):not(.destructive-action):not(.opaque)';\n\n.toolbar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px;\n\n gtk-button#{$_keeps-frame} .adw-button.icon-only,\n gtk-button#{$_keeps-frame}:has(adw-button-content) .adw-button,\n gtk-menu-button#{$_keeps-frame} .adw-button,\n adw-split-button#{$_keeps-frame} .adw-button {\n background-color: transparent;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n }\n\n // Inside a linked group the frames come BACK — upstream states this as its own\n // rule (`_toolbars.scss:20-26`) rather than as an exclusion, because a linked\n // group only reads as one control if its members are raised.\n .linked,\n .adw-linked {\n gtk-button#{$_keeps-frame} .adw-button,\n gtk-menu-button#{$_keeps-frame} .adw-button,\n adw-split-button#{$_keeps-frame} .adw-button {\n background-color: var(--button-bg-color);\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n }\n }\n\n // Stand-alone OSD toolbars — the floating video-player-controls shape\n // (:99-102).\n &.osd {\n padding: 12px;\n border-radius: calc(var(--button-radius) + 6px);\n }\n}\n\n// _misc.scss:21-32 — a separator that reserves whitespace instead of drawing a\n// line, for separating groups inside a toolbar.\n.spacer {\n background: none;\n border: none;\n flex-shrink: 0;\n\n &,\n &.horizontal {\n min-width: 12px;\n }\n\n &.vertical {\n min-height: 12px;\n }\n}\n\n/*******\n * OSD *\n *******/\n\n// _common.scss:43-60. The exclusions are upstream's: a progress bar, button,\n// menu button, split button and inline view switcher each define what `.osd`\n// means for them, and must not get the dark surface treatment on top.\n//\n// This is a token REBIND, not just a colour: everything accent-coloured inside\n// an OSD surface turns white without knowing it is inside one.\n.osd:not(gtk-progress-bar):not(gtk-button):not(gtk-menu-button):not(adw-split-button):not(\n adw-inline-view-switcher\n ) {\n --accent-bg-color: rgb(255 255 255 / 75%);\n --accent-fg-color: rgb(0 0 0 / 75%);\n --accent-color: oklab(from var(--accent-bg-color) max(l, 0.85) a b);\n --destructive-color: oklab(from var(--destructive-bg-color) max(l, 0.85) a b);\n --success-color: oklab(from var(--success-bg-color) max(l, 0.85) a b);\n --warning-color: oklab(from var(--warning-bg-color) max(l, 0.85) a b);\n --error-color: oklab(from var(--error-bg-color) max(l, 0.85) a b);\n\n color: rgb(255 255 255 / 90%);\n border: none;\n background-color: rgb(0 0 0 / 70%);\n background-clip: padding-box;\n}\n\n/*******************\n * Linked controls *\n *******************/\n\n// _linked.scss:1-45 + doc \"Linked Controls\": the children of a linked box share\n// their touching edges. Upstream squares the inner corners and overlaps the\n// borders by -1px; this package's controls have no border, so the overlap is\n// dropped and only the corner squaring remains.\n//\n// `.adw-linked` is this package's own earlier spelling, kept as an alias — and\n// it USED to add a 2px gap between children, which is a segmented look, not a\n// linked one. The gap is gone; a consumer who wanted it can say `gap`.\n// The styled node is either the child itself (a bare `.adw-button` /\n// `.adw-entry`) or one rendered inside the child host element (`<gtk-button>`,\n// `<gtk-menu-button>`, `<gtk-drop-down>`, …) — so both spellings are matched\n// rather than enumerating host tags the way GTK has to.\n$_linked-nodes: '.adw-button', '.adw-entry';\n\n.linked,\n.adw-linked {\n display: inline-flex;\n\n &:not(.vertical) > * {\n @each $node in $_linked-nodes {\n &:not(:first-child) #{$node},\n &:not(:first-child)#{$node} {\n border-start-start-radius: 0;\n border-end-start-radius: 0;\n }\n\n &:not(:last-child) #{$node},\n &:not(:last-child)#{$node} {\n border-start-end-radius: 0;\n border-end-end-radius: 0;\n }\n }\n }\n\n &.vertical {\n flex-direction: column;\n\n > * {\n @each $node in $_linked-nodes {\n &:not(:first-child) #{$node},\n &:not(:first-child)#{$node} {\n border-start-start-radius: 0;\n border-start-end-radius: 0;\n }\n\n &:not(:last-child) #{$node},\n &:not(:last-child)#{$node} {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n }\n }\n }\n }\n}\n\n/*************\n * App icons *\n *************/\n\n// _common.scss:90-104. `-gtk-icon-shadow` has no CSS counterpart; `filter:\n// drop-shadow()` is the equivalent that follows the icon's alpha rather than its\n// box, which is what makes these legible on a light background. Each upstream\n// shadow layer becomes one `drop-shadow()`.\n.lowres-icon {\n filter: drop-shadow(0 -1px rgb(0 0 6 / 5%)) drop-shadow(1px 0 rgb(0 0 6 / 10%))\n drop-shadow(0 1px rgb(0 0 6 / 30%)) drop-shadow(-1px 0 rgb(0 0 6 / 10%));\n}\n\n.icon-dropshadow {\n filter: drop-shadow(0 1px 12px rgb(0 0 6 / 5%)) drop-shadow(0 -1px rgb(0 0 6 / 5%))\n drop-shadow(1px 0 rgb(0 0 6 / 10%)) drop-shadow(0 1px rgb(0 0 6 / 30%))\n drop-shadow(-1px 0 rgb(0 0 6 / 10%));\n}\n\n/************************\n * Undershoot indicators *\n ************************/\n\n// _scrolling.scss:150-166 — a shadow on the given edge of a scrolling box,\n// telling the reader there is content past it. GTK draws them with an inset\n// background; an inset `box-shadow` on the scroll container is the CSS\n// equivalent and, unlike a `::before`, stays put while the content scrolls.\n//\n// `-start`/`-end` follow text direction, same as `margin-start`/`margin-end`,\n// which `:dir()` expresses directly.\n//\n// THESE FOUR NAMES HAVE TWO WRITERS, so both of them are excluded here and this\n// rule is left to the third: an author applying the documented style class by\n// hand to markup adwaita-web does not drive.\n//\n// - `adw-toolbar-view` carries `undershoot-top`/`-bottom` as its own STATE\n// (`update_undershoots`), and hands the two flags down to the scrollers.\n// - `src/scroll-shading.ts` stamps all four onto every scroller under a toolbar\n// view and marks it `.adw-scroll-shaded`; `_scrolling.scss` draws that one,\n// per scroller, as the 1px line + 4px fade GTK paints on a `scrolledwindow`.\n//\n// Without the second exclusion each shaded scroller drew BOTH — a 6px blurred\n// host shadow under the new gradient — and on the horizontal axis, which\n// `_scrolling.scss` deliberately leaves unpainted because neither AdwTabBox nor\n// AdwCarousel has a `scrolledwindow` node, this rule was the only thing drawing\n// at all: an overflowing tab strip lost its own `inset 0 -1px` bottom hairline to\n// this more specific `box-shadow` and gained an edge shadow libadwaita never\n// draws there.\n$undershoot-color: color-mix(in srgb, currentColor 6%, transparent);\n\n.undershoot-top:not(adw-toolbar-view):not(.adw-scroll-shaded) {\n box-shadow: inset 0 6px 6px -6px $undershoot-color;\n}\n\n.undershoot-bottom:not(adw-toolbar-view):not(.adw-scroll-shaded) {\n box-shadow: inset 0 -6px 6px -6px $undershoot-color;\n}\n\n.undershoot-start:not(.adw-scroll-shaded) {\n &:dir(ltr) {\n box-shadow: inset 6px 0 6px -6px $undershoot-color;\n }\n\n &:dir(rtl) {\n box-shadow: inset -6px 0 6px -6px $undershoot-color;\n }\n}\n\n.undershoot-end:not(.adw-scroll-shaded) {\n &:dir(ltr) {\n box-shadow: inset -6px 0 6px -6px $undershoot-color;\n }\n\n &:dir(rtl) {\n box-shadow: inset 6px 0 6px -6px $undershoot-color;\n }\n}\n","// _window.scss — adw-window styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_window.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_window.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-window {\n display: flex;\n flex-direction: column;\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n border-radius: var(--window-radius);\n box-shadow:\n 0 0 14px 5px rgb(0 0 0 / 15%),\n 0 0 5px 2px rgb(0 0 0 / 10%),\n 0 0 0 1px rgb(0 0 0 / 5%);\n overflow: hidden;\n outline: 1px solid rgb(255 255 255 / 7%);\n outline-offset: -1px;\n}\n","// _headerbar.scss — adw-header-bar styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_headerbar.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_header-bar.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// A GRID, not a flex row, because `Adw.HeaderBar` puts its three sections in a\n// `GtkCenterBox` (adw-header-bar.c:992) — and a center box centres its middle\n// child in the WHOLE box, not in whatever space the sides left over. As a flex\n// row with `flex: 1` on the centre, the title was centred between the buttons\n// instead: any bar whose two sides differ in width — which is most of them, e.g.\n// a storybook preview header with no start buttons and two end buttons — drew its\n// title visibly off-centre.\n//\n// `1fr` is `minmax(auto, 1fr)`, and that auto floor is what makes this the LOOSE\n// centering policy (the default) rather than STRICT: the side tracks share the\n// free space equally, so the title sits dead centre while both sides fit, but a\n// side whose content is wider than its share pushes the title off centre rather\n// than truncating itself. STRICT — `adw_header_bar_set_centering_policy`, which\n// size-groups the two sides — would instead keep the title centred at all cost.\nadw-header-bar {\n display: grid;\n grid-template-columns: 1fr minmax(0, auto) 1fr;\n align-items: center;\n min-height: 47px;\n padding: 0 6px;\n background-color: var(--headerbar-bg-color);\n color: var(--headerbar-fg-color);\n box-shadow: inset 0 -1px var(--separator-color);\n // flex-shrink: 0 ensures the headerbar never collapses inside a flex-column\n // adw-window, preventing a spurious spacing band between bar and content.\n flex-shrink: 0;\n\n .adw-header-bar-center {\n // STRETCHED into its track, never `justify-self: center`. A grid item that is\n // centred is sized `fit-content`, whose floor is the item's own MIN-CONTENT —\n // and a `nowrap` title's min-content is the whole string. Centred, a 260px bar\n // with a back button and two end buttons therefore drew a 277px centre section\n // starting 6.6px OUTSIDE the bar and running straight over all three buttons,\n // with the ellipsis never reached. Stretched, the item is exactly its track,\n // and the track is what is left once both sides have their natural width.\n //\n // That leftover is the rule `gtk_center_layout_distribute` applies while\n // `shrink-center-last` is FALSE (gtkcenterlayout.c:155-157): the centre is\n // CLAMPed to `size - spacing - (start.natural + end.natural)` and then pushed\n // in from either side, so it cannot overlap them. The centring above still\n // holds wherever the bar HAS room, because the two `1fr` side tracks split the\n // free space evenly and `justify-content: center` centres the title in the\n // middle track.\n display: flex;\n justify-content: center;\n // min-width: 0 prevents the title from pushing the end buttons off-screen.\n // `shrink-center-last` is FALSE on the center box, so the TITLE is what gives\n // way when the bar runs out of room, not the buttons.\n min-width: 0;\n }\n\n .adw-header-bar-title {\n font-weight: bold;\n font-size: var(--font-size-base);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .adw-header-bar-start {\n justify-self: start;\n display: flex;\n align-items: center;\n padding: 0 6px;\n gap: 4px;\n }\n\n .adw-header-bar-end {\n justify-self: end;\n display: flex;\n align-items: center;\n // justify-content: flex-end aligns end buttons to the right edge of the\n // end section, fixing the pause-button misposition bug.\n justify-content: flex-end;\n padding: 0 6px;\n gap: 4px;\n }\n\n .adw-header-btn {\n position: relative;\n width: 34px;\n height: 34px;\n border: none;\n border-radius: var(--button-radius);\n background: transparent;\n color: var(--headerbar-fg-color);\n cursor: pointer;\n padding: 0;\n margin: 0;\n flex-shrink: 0;\n\n &:hover {\n background: rgba(128, 128, 128, 0.12);\n }\n\n &:active {\n background: rgba(128, 128, 128, 0.22);\n }\n }\n}\n\n// `.devel` on the WINDOW gives every header bar inside it a striped background —\n// the marker for a nightly or unstable build (style-classes.md \"Development\n// Window\", `_toolbars.scss:345-354`).\n//\n// Upstream cross-fades a 5% recoloured SVG (`assets/devel-stripes.svg`) and\n// masks it so it fades out downwards. The stripe geometry is read off that\n// asset: a 64px tile, 32px of stripe per period, leaning left as it descends.\n//\n// The fade is the top LAYER here rather than a mask: `mask-image` on the bar\n// would fade its title and buttons with the stripes, and a masked pseudo-element\n// would paint over them. Washing the stripes out with the bar's own opaque\n// background colour renders identically and leaves the content alone.\n.devel adw-header-bar,\nadw-window.devel adw-header-bar {\n background-image:\n linear-gradient(to bottom, transparent 0%, var(--headerbar-bg-color) 100%),\n repeating-linear-gradient(\n 116.565deg,\n color-mix(in srgb, currentColor 5%, transparent) 0 32px,\n transparent 32px 64px\n );\n}\n","// _action_bar.scss — <gtk-action-bar>, GTK's bottom bar of packed widgets.\n//\n// libadwaita styles the bar's inner box (`actionbar > revealer > box`); this element has\n// no revealer, so the host carries that box's surface and the three sections are its\n// start box, centre and end box. `border-spacing: 6px` there is the gap between the\n// packed children here.\n//\n// `revealed` is applied by toggling the `hidden` attribute, and `[hidden]` is re-asserted\n// as an AUTHOR rule for the reason `_view_switcher_bar.scss` gives: the UA rule loses to\n// this block's own `display` by cascade origin.\n//\n// Reference: refs/libadwaita/src/stylesheet/widgets/_toolbars.scss (GtkActionBar)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\ngtk-action-bar {\n display: flex;\n align-items: center;\n gap: 6px;\n box-sizing: border-box;\n background-color: var(--headerbar-bg-color);\n color: var(--headerbar-fg-color);\n box-shadow: inset 0 1px var(--headerbar-shade-color);\n padding: 7px 6px 6px 6px;\n\n &[hidden] {\n display: none;\n }\n\n > .adw-action-bar-start,\n > .adw-action-bar-end {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n > .adw-action-bar-start {\n flex: 1 1 0;\n justify-content: flex-start;\n }\n\n > .adw-action-bar-center {\n display: flex;\n align-items: center;\n }\n\n > .adw-action-bar-end {\n flex: 1 1 0;\n justify-content: flex-end;\n }\n}\n","// _window_title.scss — adw-window-title styling (header-bar title widget).\n// Reference: refs/adwaita-web/adwaita-web/docs/widgets/windowtitle.md\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-window-title {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n line-height: 1.15;\n min-width: 0;\n\n // Both labels carry 12px sides upstream (_header-bar.scss:214-227). Without them the\n // gallery's window title measured 27px narrower than GTK's render of the same `.blp`,\n // and a header bar's title could run up against the buttons beside it.\n .adw-window-title-title,\n .adw-window-title-subtitle {\n padding-left: 12px;\n padding-right: 12px;\n }\n\n .adw-window-title-title {\n font-size: var(--font-size-base);\n font-weight: 700;\n color: var(--headerbar-fg-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n }\n\n .adw-window-title-subtitle {\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n color: var(--headerbar-fg-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n }\n}\n","// _button.scss — gtk-button + Adwaita button styles + symbolic icons + .linked.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_buttons.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// <gtk-button> is a thin host that renders an inner <button class=\"adw-button\">;\n// the class set is the real styling API and works on a plain <button> too.\ngtk-button {\n display: inline-flex;\n}\n\n.adw-button {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n min-height: 34px;\n min-width: 34px;\n margin: 0;\n padding: 4px 14px;\n border: none;\n border-radius: var(--button-radius);\n background-color: var(--button-bg-color);\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n font-weight: 700;\n line-height: 1;\n text-decoration: none;\n cursor: pointer;\n transition: background-color 0.1s ease;\n user-select: none;\n -webkit-user-select: none;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n &:disabled {\n opacity: 0.45;\n cursor: default;\n }\n\n // Flat — no resting background; only reacts on hover/active. The header bar's\n // navigation buttons use this.\n &.flat {\n background-color: transparent;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n }\n\n // Suggested action — accent-coloured primary button.\n &.suggested-action {\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n\n &:hover {\n background-color: var(--accent-color);\n }\n\n &:active {\n background-color: var(--accent-color);\n filter: brightness(0.92);\n }\n }\n\n // Destructive action — libadwaita's `%destructive_button` (_buttons.scss:183-210):\n // red TEXT on a 15% tint of it, not a filled red button. It was filled here, so the\n // gallery's \"Delete\" read as a second primary action beside the GTK render of the\n // same `.blp`. The accent tokens are rebound as upstream does, so anything accent-\n // coloured inside the button (a focus ring) turns red with it.\n &.destructive-action {\n --accent-bg-color: var(--destructive-bg-color);\n --accent-fg-color: var(--destructive-fg-color);\n --accent-color: var(--destructive-color);\n\n color: var(--destructive-color);\n background-color: color-mix(in srgb, currentColor 15%, transparent);\n\n &:hover {\n background-color: color-mix(in srgb, currentColor 20%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 35%, transparent);\n }\n }\n\n // A label-only button — GTK's `.text-button`, which `gtk_button_set_label` puts on the\n // button (_buttons.scss:72-75). 17px against the 14px every web button had, so each\n // text button in the gallery's button row was 6px narrower than GTK's. Before the pill,\n // circular and icon-only rules, which upstream also lets win.\n &.text-button {\n padding-left: 17px;\n padding-right: 17px;\n }\n\n // Icon-only square button (no label).\n &.icon-only {\n padding: 0;\n width: 34px;\n }\n\n // Circular — round icon button.\n &.circular {\n padding: 0;\n width: 34px;\n border-radius: 9999px;\n }\n\n // Pill — fully-rounded ends, and libadwaita's `%pill_button` padding\n // (_buttons.scss: `padding: 10px 32px`). It was 6px 20px, which drew every pill\n // 10px shorter and 24px narrower than GTK beside a GTK render of the same `.blp`.\n // GTK's height is `min-height: 24px` plus that padding, so 44; the floor is\n // restated because the base's 34 would otherwise hold the box at the text height.\n &.pill {\n min-height: 44px;\n padding: 10px 32px;\n border-radius: 9999px;\n }\n\n // Raised — the documented opt-OUT of the automatic flat appearance a button\n // gets inside a `.toolbar` or a header bar (style-classes.md \"Raised\"). It is\n // the default look, stated explicitly, so it must also beat `.flat` when both\n // are present, the way `_toolbars.scss` treats it.\n &.raised {\n background-color: var(--button-bg-color);\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n }\n\n // OSD — a standalone button overlapping content (style-classes.md \"OSD ›\n // Overlay Buttons\"). `_common.scss:44` excludes buttons from the generic OSD\n // surface precisely so this can define what `.osd` means for one:\n // `_buttons.scss:111-135` gives it a dark translucent background whose hover\n // and active states mix TOWARDS the foreground rather than changing alpha, so\n // it stays readable over any content. It composes with `.circular` / `.pill`.\n &.osd {\n min-height: 32px;\n min-width: 32px;\n color: rgb(255 255 255 / 90%);\n background-color: rgb(0 0 0 / 65%);\n\n @media (prefers-contrast: more) {\n box-shadow: 0 0 0 1px currentColor;\n }\n\n &:hover {\n color: #ffffff;\n background-color: color-mix(in srgb, black calc(0.85 * 65%), currentColor calc(0.15 * 65%));\n }\n\n &:active {\n color: #ffffff;\n background-color: color-mix(in srgb, black calc(0.75 * 65%), currentColor calc(0.25 * 65%));\n }\n }\n}\n\n// The symbolic icon (`.adw-icon`) used to be declared here, because the first\n// widget that needed one was the button. It is `scss/_icon.scss` now — every\n// other widget needs one too, and `<gtk-image>` is an element.\n\n// The linked group is `scss/_style_classes.scss` now, under libadwaita's own\n// `.linked` name (with `.adw-linked` kept as an alias): the documented class is\n// what a consumer reading style-classes.md reaches for, and it applies to\n// entries and drop-downs too, not only to buttons.\n","// _button_content.scss — adw-button-content styling (icon + label box used as a\n// button child). Mirrors libadwaita's `buttoncontent > box > {image, label}`\n// node: a horizontal box with 6px spacing between icon and label and a bold\n// label, plus optional ellipsizing when `.can-shrink` is set.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_buttons.scss (buttoncontent)\n// Reference: refs/libadwaita/src/adw-button-content.c (AdwButtonContent)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// The class <adw-button-content> stamps on the button hosting it\n// (adw-button-content.c:115), removed again on unroot (:126).\n//\n// libadwaita: `button.image-text-button { padding-left: 9px; padding-right: 9px }`\n// (_buttons.scss:77-80) — against the 17px a plain `.text-button` gets (:72-75).\n// This rule lived in NEITHER renderer, so every icon+label button was drawn with\n// the wrong horizontal padding.\n//\n// Only the PADDING half of that block applies here. The same selector also\n// declares `> box, > box > box { border-spacing: 4px }` (:82-84), and neither\n// matches: the node tree is `button > buttoncontent > box` (:47-52), so the\n// button's direct child is the `buttoncontent`, not a box. The icon↔label gap\n// stays the 6px `buttoncontent > box` gives it (:626-628), which is the `gap`\n// below. It lives in this file rather than in `_button.scss` because the class\n// belongs to this widget, and `.adw-button.image-text-button` beats `.adw-button`\n// on specificity regardless of order.\n//\n// `:not(.pill)` because upstream states `.pill` (:322-323) AFTER this block at the same\n// specificity, so a pill keeps its `10px 32px` whatever it holds. This file is emitted\n// after `_button.scss`, so without the exclusion the order flipped: a pill button with\n// button content was drawn 9px from its label, 47px narrower than GTK.\n.adw-button.image-text-button:not(.pill) {\n padding-left: 9px;\n padding-right: 9px;\n}\n\n// Inside a split button the class sits on the `splitbutton` node instead, and a\n// DIFFERENT block wins: `splitbutton.image-text-button > button` (:499-502).\n.adw-split-button.image-text-button > .adw-split-button-action {\n padding-left: 9px;\n padding-right: 9px;\n}\n\nadw-button-content {\n display: inline-flex;\n align-items: center;\n // Centered as a group, matching the box's halign:center in AdwButtonContent.\n justify-content: center;\n min-width: 0;\n\n // The inner box holds the image + label nodes (border-spacing 6px upstream).\n .adw-button-content-box {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n min-width: 0;\n }\n\n .adw-button-content-label {\n // libadwaita: `buttoncontent > box > label { font-weight: bold; }` with a\n // 2px trailing pad (LTR) so the label does not hug the button edge.\n font-weight: 700;\n line-height: 1;\n padding-right: 2px;\n }\n\n // can-shrink — the label ellipsizes instead of forcing the button wider\n // (Gtk.Label PANGO_ELLIPSIZE_END). The icon keeps its natural size.\n &.can-shrink {\n .adw-button-content-box {\n min-width: 0;\n }\n\n .adw-button-content-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n }\n }\n}\n","// _popover.scss — <gtk-popover>, the one popover surface in this package.\n//\n// It replaces three hand-rolled copies (`.adw-menu-button-popover`,\n// `.adw-drop-down-popover`, `.adw-split-button-menu`) that disagreed with\n// libadwaita AND with each other: 12px / 12px / 9px radius against libadwaita's\n// 15px, two correct three-layer shadows and one invented two-layer one. Nothing\n// compared any of them to the vendored stylesheet, so all three shipped.\n//\n// GROUND TRUTH, AND THE SELECTOR THAT WINS THE CASCADE\n//\n// `popover > contents` is `padding: 8px; border-radius: $popover_radius` plus a\n// three-layer shadow (_popovers.scss:13-21), with a `prefers-contrast: more`\n// variant that swaps the innermost layer for a hairline border (:23-27).\n// `$popover_radius` is `$menu_radius + 6` = 15px (_common.scss:10,13) — not\n// `$card_radius` (12px) and not `$button_radius` (9px), the two tokens the\n// copies reached for.\n//\n// The PADDING has a second, more specific rule: `popover.menu > contents`\n// re-declares `padding: 0` and moves the inset onto the item box as\n// `$menu_margin` (6px) at _menus.scss:58-66. Two element selectors plus a class\n// beats one element selector plus a child, so a MENU popover renders a 6px inset\n// and a plain one an 8px inset. The three copies all used 6px — they were right\n// about the inset for the menus they drew, and wrong only about the radius.\n//\n// We reproduce the menu inset with ONE node instead of GTK's contents+box pair:\n// `[menu]` puts the 6px directly on the surface. Same rendered geometry, and\n// there is no separate box element to hang it on in the DOM.\n//\n// Reference: refs/libadwaita/src/stylesheet/widgets/_popovers.scss:7-28\n// Reference: refs/libadwaita/src/stylesheet/widgets/_menus.scss:58-66, :134-156\n// Reference: refs/libadwaita/src/stylesheet/_common.scss:10-13 ($menu_radius, $menu_margin, $popover_radius)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for the @gjsify/adwaita-web light-DOM custom elements.\n\n// Distance between the anchor and the surface. GTK gets this gap from the\n// popover's arrow, which this port does not draw (`has-arrow` is not modelled —\n// GtkPopover's C is not vendored here). 6px is what the menu button and the\n// drop-down already used; the split button's 4px was the odd one out.\n$popover-gap: 6px;\n\ngtk-popover {\n // $popover_radius = $menu_radius + 6 (_common.scss:10,13). Exposed as a token\n // so consumers re-theme it the same way as the rest (ADR 0010), with the\n // libadwaita value as the fallback.\n --popover-radius: 15px;\n\n position: absolute;\n z-index: 10;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n min-width: 120px; // popover.menu > contents (_menus.scss:2-4)\n padding: 8px; // popover > contents (_popovers.scss:14)\n border-radius: var(--popover-radius);\n background-color: var(--popover-bg-color, var(--window-bg-color, #fff));\n color: var(--popover-fg-color, var(--window-fg-color));\n\n // The exact three layers of _popovers.scss:18-20. The COUNT is load-bearing:\n // the split button shipped two.\n box-shadow:\n 0 0 0 1px rgba(0, 0, 0, 0.05),\n 0 1px 5px 1px rgba(0, 0, 0, 0.09),\n 0 2px 14px 3px rgba(0, 0, 0, 0.05);\n\n // _popovers.scss:23-27 — the innermost layer becomes a real hairline so the\n // surface has a visible edge when the shadow alone is not enough. Missing\n // from all three copies.\n @media (prefers-contrast: more) {\n box-shadow:\n 0 0 0 1px var(--separator-color),\n 0 1px 5px 1px rgba(0, 0, 0, 0.09),\n 0 2px 14px 3px rgba(0, 0, 0, 0.05);\n }\n\n // `popover.menu > contents { padding: 0 }` + `$menu_margin` on the item box\n // (_menus.scss:58-66), flattened onto the single surface node.\n //\n // `[menu]` is the attribute the element sets; `.menu` is the name libadwaita\n // DOCUMENTS for the same thing (style-classes.md \"Menu Popovers\"). Both are\n // accepted, because a consumer following the upstream documentation reaches\n // for the class and would otherwise get an 8px inset and no explanation.\n &[menu],\n &.menu {\n padding: 6px;\n }\n\n // --- Placement. Pure CSS, as it always was: nothing measures a rect and\n // --- nothing flips on overflow, in either the element or the core.\n &[data-position='bottom'] {\n top: calc(100% + #{$popover-gap});\n }\n\n &[data-position='top'] {\n bottom: calc(100% + #{$popover-gap});\n }\n\n &[data-position='start'] {\n top: 0;\n right: calc(100% + #{$popover-gap});\n }\n\n &[data-position='end'] {\n top: 0;\n left: calc(100% + #{$popover-gap});\n }\n\n // `align` picks the edge the surface lines up with, and only applies on the\n // vertical axis — a start/end popover is already pinned horizontally.\n &[data-position='bottom'],\n &[data-position='top'] {\n &[data-align='start'] {\n left: 0;\n }\n\n &[data-align='end'] {\n right: 0;\n }\n }\n}\n\n// A popover row — libadwaita's `modelbutton` (_menus.scss:134-156).\n.adw-popover-item {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--spacing-xs);\n width: 100%;\n min-height: 32px; // :135\n min-width: 40px; // :136\n margin: 0;\n // `padding: 0 $menu_padding` (:137) — $menu_padding is 12px (_common.scss:12),\n // and the vertical inset comes from min-height, not from padding. No 12px\n // spacing token exists in this port, so the value is literal like the radius.\n padding: 0 12px;\n border: none;\n border-radius: 9px; // $menu_radius (:138) — NOT calc(--button-radius - 2px), which two copies invented\n background-color: transparent; // :139\n color: inherit;\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n text-align: start;\n cursor: pointer;\n transition: background-color 0.1s ease;\n\n // `&:hover, &:selected { background-color: $selected_color }` (:141-144).\n // `:selected` is GTK's keyboard-highlight pseudo-class; in the DOM that state\n // is focus, so `.selected` (the drop-down's chosen row) and `:focus` share it.\n &:hover,\n &:focus,\n &.selected {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color); // $selected_active_color (:146-148)\n }\n\n // :150-156 — a contrast-mode ring on the same three states.\n @media (prefers-contrast: more) {\n &:hover,\n &:focus,\n &.selected,\n &:active {\n box-shadow: inset 0 0 0 1px var(--separator-color);\n }\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: -2px;\n }\n\n &[disabled] {\n opacity: var(--disabled-opacity);\n pointer-events: none;\n }\n}\n\n// Optional heading atop a menu. libadwaita's `label.title` is `font-weight: bold`\n// + `padding: 4px ($menu_padding + 20px)` (_menus.scss:180-183) — 32px of\n// horizontal padding to centre the title over icon-indented rows, which\n// libadwaita's own comment calls out as fragile. This port keeps the tighter\n// inset `.adw-menu-button-title` already shipped rather than changing how the\n// existing menus look; only the class name moved here. A DELIBERATE deviation,\n// not a reading of :180-183.\n.adw-popover-title {\n padding: 4px var(--spacing-s) 6px;\n font-weight: 700;\n opacity: var(--dim-opacity);\n}\n\n// --- The menu INSIDE the popover (ADR 0042) -----------------------------------\n//\n// One rule set for both menu-bearing elements, because the split button's dropdown\n// half IS a GtkMenuButton and its popup is the same `popover.menu`. SIX nodes, none of\n// which has a counterpart in the port's previous menus — they drew a flat list of labels\n// and nothing else: the separator, the section title, the accelerator, the check/radio\n// mark (plus the two nested `[aria-checked='true']` rules that draw it), the submenu\n// chevron and the back row.\n\n// `popover.menu separator { margin: 6px 0 }` (_menus.scss:68-70). GTK's separator is\n// a real widget with its own background; in the DOM the hairline is the border, so\n// the 6px is split above and below it rather than being a margin on a 1px box.\n.adw-popover-separator {\n height: 1px;\n margin: 6px 0;\n background-color: var(--separator-color, rgba(0, 0, 0, 0.15));\n}\n\n// A section's heading. `.adw-popover-title` already carries the weight and the dim;\n// this is the tighter top inset a heading needs when it follows a separator rather\n// than opening the menu.\n.adw-popover-section-title {\n padding-top: 2px;\n}\n\n// `popover.menu accelerator { color: dim; margin-left: $menu_padding }`\n// (_menus.scss:78-82). `margin-inline-start` rather than `margin-left`, so it follows\n// the writing direction the way GTK's `:dir(ltr)`/`:dir(rtl)` pair does — the two\n// rules are one logical property here.\n.adw-popover-item-accel {\n margin-inline-start: auto;\n padding-inline-start: 12px;\n opacity: var(--dim-opacity);\n font-size: 0.9em;\n}\n\n// `popover.menu check, radio { min-width: 14px; min-height: 14px; padding: 2px }`\n// (_menus.scss:85-90). The slot is reserved whether or not the row is checked, so the\n// labels of a group line up — the reason it is a node and not a `::before`.\n//\n// A DELIBERATE SUBSTITUTION, the same kind `<adw-split-button>`'s pan-up arrow already\n// documents: GTK draws the tick with `object-select-symbolic`, and this port's icon set\n// ships no checkmark (`_icons.generated.scss` has 42 glyphs and none of them is one). A\n// two-sided rotated border is the tick, so nothing here depends on an asset that would\n// silently render as `image-missing`.\n.adw-popover-item-check {\n position: relative;\n box-sizing: border-box;\n flex: none;\n width: 14px;\n height: 14px;\n padding: 2px;\n\n // Drawn off `aria-checked`, never off a class of its own: the accessible state and\n // the visible state are then the same fact rather than two that can disagree.\n [aria-checked='true'] > &::after {\n content: '';\n position: absolute;\n inset-inline-start: 4px;\n top: 1px;\n width: 4px;\n height: 8px;\n border: solid currentcolor;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n\n // A radio's mark is a filled dot, so the tick becomes a disc.\n &.radio {\n border-radius: 9999px;\n }\n\n [aria-checked='true'] > &.radio::after {\n inset-inline-start: 4px;\n top: 4px;\n width: 6px;\n height: 6px;\n border: none;\n border-radius: 9999px;\n background-color: currentcolor;\n transform: none;\n }\n}\n\n// The chevron on a row that opens a submenu.\n.adw-popover-item-arrow {\n margin-inline-start: auto;\n width: 16px;\n height: 16px;\n flex: none;\n opacity: var(--dim-opacity);\n}\n\n// The row that leaves a submenu. It carries the parent's own label, so it reads as\n// the heading of the page it returns to rather than as a bare \"Back\".\n.adw-popover-back {\n font-weight: 700;\n}\n","// _split_button.scss — adw-split-button styling: a primary action button fused\n// with a dropdown that opens a menu of related actions, split by a thin divider.\n// The suggested/destructive/flat style classes recolor the whole control like\n// the matching Adwaita button variants.\n// Reference: refs/libadwaita/src/adw-split-button.c (splitbutton CSS node)\n// Reference: refs/adwaita-web/adwaita-web/scss/_split_button.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n.adw-split-button {\n position: relative;\n box-sizing: border-box;\n display: inline-flex;\n align-items: stretch;\n vertical-align: middle;\n min-height: 34px;\n border-radius: var(--button-radius);\n background-color: var(--button-bg-color);\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n user-select: none;\n -webkit-user-select: none;\n\n &:focus-within {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n // Primary action half — fills the available width, rounded on the leading\n // side only so it meets the dropdown flush.\n .adw-split-button-action {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n flex-grow: 1;\n min-height: 34px;\n margin: 0;\n padding: 4px 14px;\n border: none;\n border-radius: var(--button-radius) 0 0 var(--button-radius);\n background-color: transparent;\n color: inherit;\n font: inherit;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n transition: background-color 0.1s ease;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus,\n &:focus-visible {\n outline: none;\n }\n\n // Icon-only action half — square, no horizontal text padding.\n &.icon-only {\n padding: 0;\n width: 34px;\n flex-grow: 0;\n }\n }\n\n // Thin divider between the two halves (the splitbutton `separator` node).\n .adw-split-button-dropdown {\n position: relative;\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 34px;\n // libadwaita: `splitbutton > menubutton > button { padding: 0 4px }` over the button's\n // 16px minimum (_buttons.scss:486-489), so the arrow half is 24px. It was 28, and the\n // gallery's split button measured 5px wider than GTK's render of the same `.blp`.\n width: 24px;\n margin: 0;\n padding: 0 4px;\n border: none;\n border-left: 1px solid var(--separator-color);\n border-radius: 0 var(--button-radius) var(--button-radius) 0;\n background-color: transparent;\n color: inherit;\n cursor: pointer;\n transition: background-color 0.1s ease;\n\n .adw-icon {\n width: 14px;\n height: 14px;\n mask-size: 14px;\n -webkit-mask-size: 14px;\n }\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus,\n &:focus-visible {\n outline: none;\n }\n }\n\n // The dropdown menu is `<gtk-popover>` (`_popover.scss`), and this was the\n // WORST of the three hand-rolled surfaces: `--button-radius` (9px) where\n // libadwaita's popover is 15px, under a two-layer shadow that exists nowhere\n // in the vendored stylesheet (`popover > contents` has three,\n // _popovers.scss:18-20), and a `calc(var(--button-radius) - 2px)` (7px) row\n // where `modelbutton` is 9px. Nothing element-specific was left to keep.\n\n // --- Suggested action — accent-coloured whole control ---\n &.suggested-action {\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n\n .adw-split-button-dropdown {\n border-left-color: rgba(255, 255, 255, 0.3);\n }\n\n .adw-split-button-action:hover,\n .adw-split-button-dropdown:hover {\n background-color: var(--accent-color);\n }\n\n .adw-split-button-action:active,\n .adw-split-button-dropdown:active {\n background-color: var(--accent-color);\n filter: brightness(0.92);\n }\n }\n\n // --- Destructive action — red whole control ---\n &.destructive-action {\n background-color: var(--destructive-bg-color);\n color: var(--destructive-fg-color);\n\n .adw-split-button-dropdown {\n border-left-color: rgba(255, 255, 255, 0.3);\n }\n\n .adw-split-button-action:hover,\n .adw-split-button-dropdown:hover {\n filter: brightness(1.06);\n }\n\n .adw-split-button-action:active,\n .adw-split-button-dropdown:active {\n filter: brightness(0.9);\n }\n }\n\n // --- Flat — no resting background; only reacts on hover/active ---\n &.flat {\n background-color: transparent;\n }\n\n // --- Disabled ---\n &.disabled {\n opacity: 0.45;\n cursor: default;\n\n .adw-split-button-action,\n .adw-split-button-dropdown {\n cursor: default;\n pointer-events: none;\n }\n }\n}\n","// _menu_button.scss — gtk-menu-button styling: a flat (or circular) icon button\n// that drops an Adwaita-styled popover menu (the web counterpart of\n// Adw.MenuButton / Gtk.MenuButton). The button mirrors libadwaita's flat/circular\n// `menubutton > button`; the popover reproduces `popover.menu > contents` with\n// its soft triple-shadow surface and `modelbutton`-style item rows.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_buttons.scss (menubutton flat/circular)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_popovers.scss (popover > contents)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_menus.scss (popover.menu modelbutton)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n.adw-menu-button {\n position: relative;\n box-sizing: border-box;\n display: inline-flex;\n vertical-align: middle;\n\n // The icon button — square with the button radius by default.\n .adw-menu-button-button {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 34px;\n min-height: 34px;\n margin: 0;\n padding: 0 8px;\n border: none;\n border-radius: var(--button-radius);\n background-color: var(--button-bg-color);\n color: var(--window-fg-color);\n cursor: pointer;\n transition: background-color 0.1s ease;\n\n .adw-menu-button-icon {\n width: 16px;\n height: 16px;\n flex: none;\n }\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n }\n\n // Flat — no resting fill (the header app-menu idiom).\n &.flat .adw-menu-button-button {\n background-color: transparent;\n }\n\n // The open state keeps a subtle fill so the button reads as \"checked\".\n &.active .adw-menu-button-button {\n background-color: var(--button-active-color);\n }\n\n // Circular — a round 34×34 button (window-control / FAB idiom).\n &.circular .adw-menu-button-button {\n padding: 0;\n border-radius: 9999px;\n }\n\n &.disabled {\n opacity: 0.45;\n\n .adw-menu-button-button {\n cursor: default;\n pointer-events: none;\n }\n }\n\n // The surface, the heading and the item row are `<gtk-popover>`'s —\n // `_popover.scss` (`gtk-popover`, `.adw-popover-title`, `.adw-popover-item`).\n // What used to be here was one of three hand-rolled copies: a\n // `--card-radius` (12px) surface where libadwaita's is 15px, and a\n // `calc(var(--button-radius) - 2px)` (7px) row where `modelbutton` is 9px.\n // Only the icon slot is a menu-button fact.\n .adw-menu-button-item-icon {\n width: 16px;\n height: 16px;\n flex: none;\n }\n}\n","// _drop_down.scss — gtk-drop-down: a standalone dropdown selector (the web\n// counterpart of Gtk.DropDown). A normal Adwaita button showing the current\n// selection + a `pan-down` chevron, dropping an elevated Adwaita popover list of\n// options. The popover reproduces libadwaita's popover.menu > contents surface\n// (soft triple shadow), the items its modelbutton rows, matching <gtk-menu-button>.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_popovers.scss (popover > contents)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_menus.scss (modelbutton rows)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_dropdowns.scss (dropdown button)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Implemented for @gjsify/adwaita-web Web Components.\n\n.adw-drop-down {\n position: relative;\n box-sizing: border-box;\n display: inline-flex;\n vertical-align: middle;\n\n // The selection button — a normal Adwaita button (label + dim chevron).\n .adw-drop-down-button {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-xs);\n min-width: 100px;\n min-height: 34px;\n margin: 0;\n padding: 0 8px 0 12px;\n border: none;\n border-radius: var(--button-radius);\n background-color: var(--button-bg-color);\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n cursor: pointer;\n transition: background-color 0.1s ease;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n &:disabled {\n cursor: default;\n pointer-events: none;\n }\n }\n\n .adw-drop-down-label {\n flex: 1 1 auto;\n min-width: 0;\n text-align: start;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // The chevron — a smaller, dimmed down-glyph after the label.\n .adw-drop-down-arrow {\n width: 12px;\n height: 12px;\n mask-size: 12px;\n -webkit-mask-size: 12px;\n flex: none;\n opacity: var(--dim-opacity);\n }\n\n &.disabled {\n opacity: 0.55;\n }\n\n // The popover SURFACE is `<gtk-popover>`'s (`_popover.scss`, the `[menu]`\n // variant — a dropdown's popover is a `popover.menu`, _dropdowns.scss:22).\n // What stays here is what libadwaita ALSO scopes to `dropdown`:\n // - the extra 6px above the contents (`popover.menu { padding-top: 6px }`,\n // _dropdowns.scss:23). GTK puts it on the popover node while the 6px inset\n // sits on `> contents`; flattened onto one node they add, which is what\n // the two-node original renders too.\n // - the width tracking the button rather than libadwaita's flat `min-width`.\n .adw-drop-down-popover {\n padding-top: 12px;\n min-width: 100%;\n max-width: 320px;\n }\n\n // Search entry atop the popover (enable-search). It reuses the .adw-entry skin\n // but needs its own bottom margin to separate it from the list.\n .adw-drop-down-search {\n margin-bottom: var(--spacing-xs);\n }\n\n // Scrollable column of option rows.\n .adw-drop-down-list {\n display: flex;\n flex-direction: column;\n max-height: 320px;\n overflow-y: auto;\n }\n\n // An option row is `.adw-popover-item` (`_popover.scss` — libadwaita's\n // `modelbutton`). Only the trailing-check layout is a drop-down fact: the\n // label and the check sit at opposite ends of the row.\n .adw-drop-down-item {\n justify-content: space-between;\n gap: var(--spacing-s);\n }\n\n .adw-drop-down-item-label {\n flex: 1 1 auto;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // The selected-row check — a CSS checkmark, shown only on `.selected`.\n .adw-drop-down-item-check {\n position: relative;\n width: 16px;\n height: 16px;\n flex: none;\n }\n\n .adw-drop-down-item.selected .adw-drop-down-item-check::after {\n content: '';\n position: absolute;\n left: 5px;\n top: 2px;\n width: 4px;\n height: 8px;\n border: solid var(--accent-color);\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n}\n","// _toggle_group.scss — adw-toggle-group styling (a linked set of toggle buttons\n// with a single active item, recolored with the Adwaita active-toggle accent).\n// Reference: refs/libadwaita/src/stylesheet/widgets/_toggle-group.scss (AdwToggleGroup)\n// Reference: refs/adwaita-web/adwaita-web/scss/_toggle_group.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// The active toggle uses a white-on-fg \"raised\" chip. These tokens default to\n// libadwaita's light-theme values; _theme.scss overrides them for dark.\n:root {\n --active-toggle-bg-color: #ffffff;\n --active-toggle-fg-color: var(--window-fg-color);\n}\n\nadw-toggle-group {\n // libadwaita's ---group-padding: a small inset so the active chip floats\n // inside the group's pill, leaving a hairline of group background around it.\n --group-padding: 3px;\n\n display: inline-flex;\n box-sizing: border-box;\n padding: var(--group-padding);\n border-radius: var(--button-radius);\n background-color: var(--button-bg-color);\n\n .adw-toggle-group-inner {\n display: flex;\n align-items: stretch;\n gap: var(--group-padding);\n }\n\n // Each toggle is a button-shaped chip with the group's inner radius.\n .adw-toggle {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-xs);\n min-width: 34px;\n min-height: 28px;\n margin: 0;\n padding: 4px 11px;\n border: none;\n border-radius: calc(var(--button-radius) - var(--group-padding));\n background-color: transparent;\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n transition:\n color 0.2s ease,\n background-color 0.2s ease,\n box-shadow 0.2s ease;\n user-select: none;\n -webkit-user-select: none;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n // The active toggle — a raised white chip, the way libadwaita draws it.\n &.active {\n background-color: var(--active-toggle-bg-color);\n color: var(--active-toggle-fg-color);\n box-shadow:\n 0 1px 3px 1px rgba(0, 0, 6, 0.07),\n 0 2px 6px 2px rgba(0, 0, 6, 0.03);\n\n &:hover {\n background-color: var(--active-toggle-bg-color);\n }\n }\n }\n\n // Round — group + toggles become pill-shaped.\n &.round {\n border-radius: 17px;\n\n .adw-toggle {\n border-radius: calc(17px - var(--group-padding));\n padding-left: calc(15px - var(--group-padding));\n padding-right: calc(15px - var(--group-padding));\n }\n }\n\n // Flat — no group background; the active toggle uses a subtle fill instead of\n // the raised white chip.\n &.flat {\n --group-padding: 0px;\n\n padding: 0;\n background: none;\n\n .adw-toggle {\n border-radius: var(--button-radius);\n\n &.active {\n background-color: var(--button-active-color);\n color: inherit;\n box-shadow: none;\n\n &:hover {\n background-color: var(--button-active-color);\n }\n }\n }\n\n &.round .adw-toggle {\n border-radius: 17px;\n }\n }\n}\n","// _switch.scss — the <gtk-switch> control: a track, a hidden checkbox and a\n// sliding knob. UNSCOPED, which is the whole point of the partial.\n//\n// WHY IT IS ITS OWN FILE. These rules used to live inside `_switch_row.scss`,\n// nested under `adw-switch-row { … }` — so `.adw-switch` did not exist anywhere\n// else, and the moment a second widget needed a toggle it could not use it.\n// `_expander_row.scss` therefore carried a character-for-character copy of the\n// whole block (same 44×24 box, same hidden input, same 20px knob, same\n// `translateX(20px)`, same focus ring) under a different class name. Two copies\n// of a control is how a hover state gets fixed in one of them.\n//\n// FIDELITY, RECORDED RATHER THAN \"FIXED\": the 44×24 track with the 20px knob is\n// `refs/adwaita-web/adwaita-web/scss/_switch.scss`'s geometry, NOT libadwaita's.\n// libadwaita draws `switch` as a 3px-padded trough around a 20px slider with\n// `border-radius: 14px` (refs/libadwaita/src/stylesheet/widgets/_switch.scss:3-4,\n// :24-26) — about 26px tall, not 24, and correspondingly narrower. What ships\n// here is the vendored web port's box, unchanged by the extraction; changing the\n// geometry is a visual decision for a separate change, and citing libadwaita for\n// numbers that came from somewhere else would be the misreading the conformance\n// header warns about.\n//\n// Reference: refs/adwaita-web/adwaita-web/scss/_switch.scss (the geometry that ships)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_switch.scss:3-4,20-26 (the geometry that does not, + the disabled treatment)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components; lifted out of\n// `adw-switch-row {}` so <gtk-switch> is usable anywhere.\n\n.adw-switch {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n\n // The real control: focusable and keyboard-toggleable, but never painted —\n // the slider below is what the user sees and clicks.\n input {\n opacity: 0;\n width: 0;\n height: 0;\n position: absolute;\n }\n}\n\n.adw-switch-slider {\n position: absolute;\n cursor: pointer;\n inset: 0;\n background-color: var(--switch-off-bg);\n border-radius: 12px;\n transition: background-color 0.15s ease-out;\n\n &::before {\n content: \"\";\n position: absolute;\n height: 20px;\n width: 20px;\n left: 2px;\n bottom: 2px;\n background-color: var(--switch-knob-bg);\n border-radius: 50%;\n transition: transform 0.15s ease-out;\n box-shadow: 0 1px 2px rgb(0 0 0 / 20%);\n }\n}\n\n.adw-switch input:checked + .adw-switch-slider {\n background-color: var(--accent-bg-color);\n\n &::before {\n transform: translateX(20px);\n }\n}\n\n.adw-switch input:focus-visible + .adw-switch-slider {\n outline: 2px solid var(--accent-color);\n outline-offset: 2px;\n}\n\n// libadwaita dims the whole widget (`filter: Opacity(var(--disabled-opacity))`,\n// _switch.scss:20-22), and `--disabled-opacity` is a real token here now — it\n// used to be stood in for by `--dim-opacity`, which is a different number and\n// moves the OTHER way under high contrast.\n.adw-switch.disabled {\n opacity: var(--disabled-opacity);\n\n .adw-switch-slider {\n cursor: not-allowed;\n }\n}\n","// _entry.scss — gtk-entry / .adw-entry text input (e.g. a browser URL bar).\n// Reference: refs/libadwaita/src/stylesheet/widgets/_entries.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// <gtk-entry> hosts an inner <input class=\"adw-entry\">; it fills its flex slot.\ngtk-entry {\n display: flex;\n flex: 1;\n min-width: 0;\n}\n\n.adw-entry {\n box-sizing: border-box;\n width: 100%;\n min-height: 34px;\n margin: 0;\n padding: 5px 12px;\n border: none;\n border-radius: var(--button-radius);\n background-color: var(--entry-bg-color);\n color: var(--view-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n box-shadow: inset 0 0 0 1px var(--entry-border-color);\n transition: box-shadow 0.1s ease;\n\n &::placeholder {\n color: var(--view-fg-color);\n opacity: var(--dim-opacity);\n }\n\n &:hover {\n box-shadow: inset 0 0 0 1px var(--entry-border-hover-color);\n }\n\n &:focus,\n &:focus-visible {\n outline: none;\n box-shadow: inset 0 0 0 2px var(--accent-color);\n }\n\n // Dimmed disabled state, mirroring .adw-button:disabled.\n &:disabled {\n opacity: 0.45;\n cursor: default;\n box-shadow: inset 0 0 0 1px var(--entry-border-color);\n }\n}\n","// _checks.scss — <gtk-check-button> AND <adw-radio>, in ONE partial.\n//\n// WHY ONE FILE FOR TWO ELEMENTS. Upstream's\n// `refs/libadwaita/src/stylesheet/widgets/_checks.scss` merges them deliberately:\n// everything but the corner radius and the glyph is a shared `check, radio { … }`\n// block (:20-65), and the indeterminate dash is re-declared for BOTH at the end\n// (:79-81). There is no `_radio.scss` upstream to mirror. `refs/adwaita-web` does\n// split them into `_checkbox.scss` + `_radio.scss`, and the split is exactly where\n// it drifted: its two indicators grew different sizes, different border treatments\n// and different selection-mode rules, and only one of them has a hover state.\n//\n// TWO PLACES THE VENDORED WEB PORT DISAGREES WITH LIBADWAITA. libadwaita is\n// followed in both:\n//\n// 1. INDETERMINATE. `refs/adwaita-web/adwaita-web/scss/_checkbox.scss` has no\n// indeterminate state at all — no dash, no third glyph, nothing. libadwaita\n// paints it with the same accent fill as checked (:52-60) and its own dash\n// glyph (:79-81). Ported.\n// 2. THE CHECKED RADIO. `refs/adwaita-web/adwaita-web/scss/_radio.scss:22-33`\n// colours only the BORDER and the dot with `--accent-color`, leaving the\n// indicator's background as the view colour. libadwaita FILLS the whole\n// control with `--accent-bg-color` and draws the bullet in\n// `--accent-fg-color` (:54-55) — the same treatment the checkbox gets, which\n// is the point of the shared block. Ported.\n//\n// THE GLYPHS ARE LIBADWAITA'S OWN ASSETS. GTK draws them with\n// `-gtk-icon-source: -gtk-recolor(url(\"assets/check.svg\"))` (:70, :76, :80),\n// which has no CSS spelling. The path data below is copied from\n// `refs/libadwaita/src/stylesheet/assets/{check,bullet,dash}.svg` and painted as\n// a mask filled with `currentColor` — the same technique `_icon.scss` already\n// uses, and what makes `-gtk-recolor` work here: the shared block sets\n// `color: var(--accent-fg-color)` on a checked indicator, so the glyph follows.\n// `bullet.svg` carries a `transform=\"translate(-381 -339)\"` on a path whose\n// commands after the first are all relative, so the translation is folded into\n// the absolute `M` (388,342 → 7,3) and nothing else changes.\n//\n// Reference: refs/libadwaita/src/stylesheet/widgets/_checks.scss (all of it)\n// Reference: refs/libadwaita/src/stylesheet/assets/{check,bullet,dash}.svg (the three glyphs)\n// Reference: refs/libadwaita/src/stylesheet/_colors.scss:280-286 (the trough colours)\n// Reference: refs/adwaita-web/adwaita-web/scss/{_checkbox,_radio}.scss (the vendored port's split, NOT followed — see above)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Implemented as Web Components for @gjsify/adwaita-web; the GTK\n// icon sources are re-expressed as CSS masks.\n\n// assets/check.svg\n$check-glyph: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14'%3E%3Cpath fill='black' d='m 12.599609,2.1992188 a 1,1 0 0 0 -1.40039,0.2011718 L 5.890625,9.4765625 2.7070313,6.2929687 a 1,1 0 0 0 -1.4140626,0 1,1 0 0 0 0,1.4140625 l 4,3.9999998 A 1.0001,1.0001 0 0 0 6.8007812,11.599609 L 12.800781,3.5996094 A 1,1 0 0 0 12.599609,2.1992188 Z'/%3E%3C/svg%3E\");\n// assets/bullet.svg\n$bullet-glyph: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14'%3E%3Cpath fill='black' d='M 7 3 c -2.207 0 -4 1.793 -4 4 s 1.793 4 4 4 c 2.208 0 4 -1.793 4 -4 s -1.792 -4 -4 -4 z'/%3E%3C/svg%3E\");\n// assets/dash.svg\n$dash-glyph: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14'%3E%3Cpath fill='black' d='M 3 5 A 2 2 0 0 0 1 7 A 2 2 0 0 0 3 9 L 11 9 A 2 2 0 0 0 13 7 A 2 2 0 0 0 11 5 Z'/%3E%3C/svg%3E\");\n\n// `checkbutton { … }` (:3-18) — the host is the button, not the indicator.\ngtk-check-button,\nadw-radio {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 4px; // border-spacing: 4px (:4)\n padding: 3px; // (:6)\n border-radius: 9px; // $check_radius + 3px (:5)\n cursor: pointer;\n user-select: none;\n\n // The real control: focusable and keyboard-operable, never painted. The\n // indicator below is what the user sees; the host handles the pointer.\n .adw-check-input {\n position: absolute;\n width: 0;\n height: 0;\n margin: 0;\n opacity: 0;\n }\n\n // `check, radio { … }` (:20-31), shared by both elements.\n .adw-check-indicator {\n // GTK sizes the CONTENT box (`min-width`/`min-height: 14px`, :22-23) and\n // grows the drawn control with `padding: 3px` (:26), i.e. 20x20. Opting out\n // of the ADR-0010 descendant border-box pin keeps that arithmetic — and\n // keeps `checkbutton.selection-mode`'s one-line `padding: 7px` (:87)\n // working exactly as it does upstream instead of needing a second number.\n box-sizing: content-box;\n width: 14px;\n height: 14px;\n padding: 3px;\n flex-shrink: 0;\n box-shadow: inset 0 0 0 2px color-mix(in srgb, currentColor 15%, transparent); // $trough_color\n transition:\n background 200ms ease-out,\n box-shadow 200ms ease-out;\n\n @media (prefers-contrast: more) {\n // $trough_color_hc (_colors.scss:284) stands in for $border_color: this\n // package defines no `--border-opacity`, and the two are the same 30%\n // mix of currentColor in the light theme.\n box-shadow: inset 0 0 0 2px color-mix(in srgb, currentColor 30%, transparent);\n }\n\n // The glyph layer. No mask until a state supplies one, so an unchecked\n // control paints nothing here.\n &::after {\n content: '';\n display: block;\n width: 100%;\n height: 100%;\n background-color: currentColor;\n mask-repeat: no-repeat;\n mask-position: center;\n mask-size: 14px; // -gtk-icon-size: 14px (:25)\n -webkit-mask-repeat: no-repeat;\n -webkit-mask-position: center;\n -webkit-mask-size: 14px;\n }\n }\n\n // `&:not(:checked):not(:indeterminate) { &:hover / &:active }` (:33-50).\n // Hover and active live on the HOST here — the indicator is 20px inside a\n // control whose label is part of the target, exactly as `checkbutton` is.\n &:not([checked]):not([indeterminate]):not([disabled]) {\n &:hover .adw-check-indicator {\n box-shadow: inset 0 0 0 2px color-mix(in srgb, currentColor 20%, transparent); // $trough_hover_color\n\n @media (prefers-contrast: more) {\n box-shadow: inset 0 0 0 2px color-mix(in srgb, currentColor 60%, transparent);\n }\n }\n\n &:active .adw-check-indicator {\n background-color: color-mix(in srgb, currentColor 25%, transparent); // $trough_active_color\n box-shadow: none;\n\n @media (prefers-contrast: more) {\n background-color: color-mix(in srgb, currentColor 60%, transparent);\n }\n }\n }\n\n // `&:checked, &:indeterminate { … }` (:52-60) — ONE block for both states, so\n // they differ only in the glyph.\n &[checked] .adw-check-indicator,\n &[indeterminate] .adw-check-indicator {\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n box-shadow: none;\n }\n\n // GTK's `background-image: image(<colour>)` (:58-59) is a flat fill; a\n // two-stop gradient of one colour is its CSS spelling, as `_button_row.scss`\n // already does.\n &[checked]:not([disabled]),\n &[indeterminate]:not([disabled]) {\n &:hover .adw-check-indicator {\n background-image: linear-gradient(\n color-mix(in srgb, currentColor 10%, transparent),\n color-mix(in srgb, currentColor 10%, transparent)\n );\n }\n\n &:active .adw-check-indicator {\n background-image: linear-gradient(rgb(0 0 6 / 20%), rgb(0 0 6 / 20%));\n }\n }\n\n // `&:disabled { filter: Opacity(var(--disabled-opacity)) }` (:62-64).\n &[disabled] {\n cursor: not-allowed;\n opacity: var(--disabled-opacity);\n }\n\n // `@include focus-ring()` on `checkbutton` (:8). The ring follows the real\n // control's focus, not the host's, so keyboard focus is what shows it.\n .adw-check-input:focus-visible ~ .adw-check-indicator {\n outline: 2px solid var(--accent-color);\n outline-offset: 2px;\n }\n}\n\n// `check { border-radius: $check_radius }` (:67-68)\ngtk-check-button .adw-check-indicator {\n border-radius: 6px;\n}\n\n// `radio { border-radius: 100% }` (:73-74)\nadw-radio .adw-check-indicator {\n border-radius: 100%;\n}\n\n// `check:checked` → check.svg (:70) / `radio:checked` → bullet.svg (:76)\ngtk-check-button[checked] .adw-check-indicator::after {\n mask-image: $check-glyph;\n -webkit-mask-image: $check-glyph;\n}\n\nadw-radio[checked] .adw-check-indicator::after {\n mask-image: $bullet-glyph;\n -webkit-mask-image: $bullet-glyph;\n}\n\n// `check, radio { &:indeterminate { … dash.svg } }` (:79-81). Upstream this is a\n// SEPARATE rule after both `:checked` blocks at equal specificity, so the dash\n// wins over the check/bullet on a control that is both. Same order, same\n// specificity, same outcome here — and the same precedence `resolveCheckState`\n// in `@gjsify/adwaita-core` encodes for the a11y value.\ngtk-check-button[indeterminate] .adw-check-indicator::after,\nadw-radio[indeterminate] .adw-check-indicator::after {\n mask-image: $dash-glyph;\n -webkit-mask-image: $dash-glyph;\n}\n\n// `checkbutton.selection-mode { … }` (:83-95) — the big round check used in a\n// selection-mode header bar.\ngtk-check-button.selection-mode,\nadw-radio.selection-mode {\n border-radius: 100px;\n\n .adw-check-indicator {\n padding: 7px;\n border-radius: 100px;\n }\n\n // `label { &:dir(ltr) { margin-right: 6px } &:dir(rtl) { margin-left: 6px } }`\n // (:91-94) — one logical property covers both directions.\n .adw-check-label {\n margin-inline-end: 6px;\n }\n}\n","// _progress_bar.scss — <gtk-progress-bar>, the determinate partner to\n// <adw-spinner>.\n//\n// TWO SOURCES, AND WHICH HALF CAME FROM WHICH — the two disagree, so this is not\n// bookkeeping:\n//\n// GEOMETRY + COLOUR + THE OSD VARIANT come from\n// `refs/libadwaita/src/stylesheet/widgets/_progress-bar.scss`: an 8px trough\n// (:6), the 99px `$_progress-radius` (:33-35), the `%scale_trough` /\n// `%scale_highlight` placeholders it shares with the scale\n// (`_scale.scss:1-17`), the `> trough.empty > progress { all: unset }` rule\n// that makes a zero fraction draw NOTHING rather than a 0px sliver (:85), and\n// the `.osd` variant — a 2px bar with no trough, for under a header bar\n// (:59-83).\n//\n// THE INDETERMINATE ANIMATION comes from\n// `refs/adwaita-web/adwaita-web/scss/_progressbar.scss:25-66`, because\n// libadwaita has NO CSS equivalent: GTK animates a pulsing block from C\n// (`gtk_progress_bar_pulse`), so the stylesheet has nothing to copy. Its\n// keyframes and its `prefers-reduced-motion` fallback are the only parts taken\n// from there. Its GEOMETRY is NOT: it draws a 6px bar with a 3px radius and\n// has no trough placeholder, no OSD variant and no text node, so copying its\n// numbers would put a bar in this package that matches neither source.\n//\n// NOT PORTED, deliberately: `progressbar.vertical` (:10-15) and the four\n// `progress.{left,right,top,bottom}` corner-radius rules (:37-55). Both exist\n// for orientations and trough-splitting `<gtk-progress-bar>` does not expose —\n// there is no `orientation` attribute — and a rule nothing can ever select is a\n// rule that rots.\n//\n// Reference: refs/libadwaita/src/stylesheet/widgets/_progress-bar.scss:5-6,17-21,23-25,27-35,59-85\n// Reference: refs/libadwaita/src/stylesheet/widgets/_scale.scss:1-17 (%scale_trough, %scale_highlight)\n// Reference: refs/libadwaita/src/stylesheet/_colors.scss:280-286 (the trough colours)\n// Reference: refs/adwaita-web/adwaita-web/scss/_progressbar.scss:25-66 (indeterminate keyframes + reduced-motion fallback ONLY)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Implemented as a Web Component for @gjsify/adwaita-web.\n\n// `.dimmed` / `.numeric`, which the text node @extends exactly as upstream does.\n@use 'labels';\n\ngtk-progress-bar {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-xs);\n // `progressbar.horizontal > trough { min-width: 150px }` (:5) is a WIDGET\n // minimum in GTK, so it belongs on the element rather than on the trough.\n min-width: 150px;\n\n .adw-progress-bar-trough {\n // %scale_trough (_scale.scss:1-10)\n position: relative;\n display: flex;\n overflow: hidden;\n height: 8px; // :6 — `&, > progress { min-height: 8px }`\n border-radius: 99px;\n background-color: color-mix(in srgb, currentColor 15%, transparent);\n transition: background 200ms ease-out;\n\n @media (prefers-contrast: more) {\n // $trough_color_hc (_colors.scss:284)\n background-color: color-mix(in srgb, currentColor 30%, transparent);\n }\n }\n\n .adw-progress-bar-progress {\n // %scale_highlight (_scale.scss:12-17) + $_progress-radius (:33-35)\n height: 100%;\n border-radius: 99px;\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n transition:\n width 200ms ease-out,\n background 200ms ease-out;\n }\n\n // `> text { @extend .dimmed; @extend .numeric; font-size: smaller; }` (:17-21)\n // — literally upstream's three lines, now that `.dimmed` and `.numeric` exist\n // here as the same utility classes they are there.\n .adw-progress-bar-text {\n @extend .dimmed;\n @extend .numeric;\n\n font-size: smaller;\n }\n\n // `&:disabled { filter: Opacity(var(--disabled-opacity)) }` (:23-25).\n &[disabled] {\n opacity: var(--disabled-opacity);\n }\n\n // Fill from the far end. GTK spells this `:inverted`; flexbox handles the\n // writing direction, so nothing here needs an RTL branch.\n &[inverted] .adw-progress-bar-trough {\n justify-content: flex-end;\n }\n\n // `> trough.empty > progress { all: unset }` (:85) — at fraction 0 the\n // indicator DISAPPEARS instead of drawing a rounded 0px stub.\n .adw-progress-bar-trough.empty .adw-progress-bar-progress {\n all: unset;\n }\n\n // The `.osd` variant (:59-83): a hairline bar with no trough at all, the way\n // it is drawn under a header bar. `[osd]` is the attribute this element takes;\n // `.osd` is libadwaita's DOCUMENTED spelling for the same variant, and\n // `_style_classes.scss` excludes `gtk-progress-bar` from the generic OSD\n // surface exactly so the class lands here instead of turning the bar into a\n // dark translucent box.\n &[osd],\n &.osd {\n min-width: 2px;\n\n .adw-progress-bar-trough {\n height: 2px;\n border-radius: 0;\n background-color: transparent;\n box-shadow: none;\n }\n\n .adw-progress-bar-progress {\n border-radius: 0;\n }\n }\n\n // Indeterminate. The block leaves the flex flow and bounces across the trough;\n // this is the ONLY part of the widget taken from the vendored web port, since\n // GTK pulses from C and its stylesheet has no equivalent to copy.\n &[pulsing] .adw-progress-bar-progress {\n position: absolute;\n inset-block: 0;\n width: 30%;\n animation: adw-progress-bar-indeterminate 1.5s infinite ease-in-out;\n\n // `_progressbar.scss:42-49` — with motion suppressed the block stops moving\n // and fills the trough, so the bar still reads as \"busy\" and not as \"0%\".\n @media (prefers-reduced-motion: reduce) {\n left: 0;\n width: 100%;\n animation: none;\n }\n }\n}\n\n// refs/adwaita-web/adwaita-web/scss/_progressbar.scss:53-66, verbatim offsets.\n// `left` rather than `inset-inline-start`: the port animates a physical offset,\n// and a keyframe that flipped with the writing direction would no longer be the\n// animation being cited.\n@keyframes adw-progress-bar-indeterminate {\n 0% {\n left: -35%;\n width: 30%;\n }\n\n 50% {\n left: 50%;\n width: 40%;\n }\n\n 100% {\n left: 105%;\n width: 30%;\n }\n}\n","// _preferences.scss — adw-preferences-group styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_preferences.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_preferences.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n@use 'style_classes';\n\nadw-preferences-group {\n display: block;\n\n // An author `display` beats the UA `[hidden] { display: none }` regardless of\n // specificity, so without this a group hidden through the DOM `hidden`\n // property would keep rendering — the search treats it as invisible\n // (`is_visible_group`), and the two must agree.\n &[hidden] {\n display: none;\n }\n\n // The header is a flex row: a title/description label column on the left\n // (stretches to fill) and the optional header-suffix on the trailing edge.\n .adw-preferences-group-header {\n display: flex;\n align-items: center;\n gap: var(--spacing-s);\n padding: var(--spacing-xs) 2px;\n\n // An author `display` beats the UA `[hidden] { display: none }` no matter\n // the specificity, so `headerEl.hidden = true` did NOTHING here: an empty\n // group kept its header box and its padding.\n &[hidden] {\n display: none;\n }\n\n // libadwaita's own metrics, keyed off `is_single_line`:\n // `> box.header:not(.single-line) { margin-bottom: 6px }` and\n // `> box.single-line { min-height: 34px }`\n // (refs/libadwaita/src/stylesheet/widgets/_preferences.scss:6-13). A\n // title-only or suffix-only header is one line tall and needs the height\n // floor instead of the gap below it.\n &:not(.single-line) {\n margin-bottom: 6px;\n }\n\n &.single-line {\n min-height: 34px;\n }\n }\n\n .adw-preferences-group-labels {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-width: 0;\n }\n\n .adw-preferences-group-suffix {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n }\n\n .adw-preferences-group-title {\n font-size: var(--font-size-base);\n font-weight: 700;\n margin: 0;\n color: var(--window-fg-color);\n }\n\n // Dimmed description line below the title.\n .adw-preferences-group-description {\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n margin: 0;\n color: var(--window-fg-color);\n }\n\n // A preferences group's list IS a boxed list — same card surface, same clip\n // for the rounding of the first and last row. It used to carry its own copy of\n // the five card declarations.\n .adw-preferences-group-listbox {\n @extend %card;\n\n overflow: hidden;\n }\n}\n","// _card.scss — adw-card styling.\n//\n// The card SURFACE (colours, radius, elevation) is `%card` in\n// `_style_classes.scss`, shared with the documented `.card` class and with\n// `.boxed-list`; this element adds only what makes it an element: a block box\n// and the padding a bare `.card` deliberately does not have.\n//\n// Reference: refs/adwaita-web/adwaita-web/scss/_card.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_misc.scss:197-236\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n@use 'style_classes';\n\nadw-card,\n.adw-card {\n @extend %card;\n\n display: block;\n padding: var(--spacing-l);\n overflow: hidden;\n}\n","// _data_grid.scss — adw-data-grid: a slim, aligned numeric grid for genuinely\n// tabular data (an accounting BWA / P&L statement, invoice line-items). The web\n// mirror of the native Gtk.Grid the Buchhaltung app fills for its financial\n// statements — labels left, amounts right-aligned with tabular figures so\n// columns of numbers line up, plus the section / subtotal / total emphasis a\n// statement needs. NOT a Gtk.ColumnView (no sorting, no zebra striping); boxed\n// lists stay the default for record lists. Uses CSS subgrid so each row is a\n// real element (hover, hairline rules, activation) while columns stay aligned.\n// Reference: refs/libadwaita/src/stylesheet/_colors.scss (separator / card / dim tokens)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss (boxed-list density)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_labels.scss:13-15,81-88 (.dimmed / .monospace / .numeric)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Implemented for @gjsify/adwaita-web Web Components.\n\n// `.dimmed` / `.monospace` / `.numeric`. This file used to declare\n// `font-variant-numeric: tabular-nums` twice, inline a whole monospace font\n// stack, and dim its header row with a raw `opacity: var(--dim-opacity)` — i.e.\n// three private copies of utilities libadwaita publishes. It composes them now,\n// the way upstream's own `_progress-bar.scss:17-21` composes the same two.\n@use 'labels';\n\n.adw-data-grid {\n display: block;\n box-sizing: border-box;\n color: var(--card-fg-color);\n font-size: var(--font-size-base);\n\n // Optional title above the grid.\n .adw-data-grid-caption {\n font-size: var(--font-size-heading);\n font-weight: 700;\n color: var(--window-fg-color);\n margin: 0 0 var(--spacing-s);\n padding: 0 var(--spacing-xs);\n }\n\n // Horizontal scroll is CONTAINED here — a wide statement (many month columns)\n // scrolls sideways within the grid instead of overflowing the page.\n .adw-data-grid-scroll {\n overflow-x: auto;\n overflow-y: hidden;\n }\n\n // The grid owns the column tracks; each row is a subgrid spanning them, so\n // figures in the same column line up across every row. `min-width: max-content`\n // keeps columns from crushing — they overflow into the scroller instead.\n .adw-data-grid-table {\n display: grid;\n box-sizing: border-box;\n width: 100%;\n min-width: max-content;\n // grid-template-columns is set inline from the column descriptors.\n }\n\n .adw-data-grid-row {\n display: grid;\n grid-template-columns: subgrid;\n grid-column: 1 / -1;\n align-items: center;\n }\n\n // Airy Adwaita cell density (matching the boxed-list row rhythm), single-line.\n .adw-data-grid-cell {\n box-sizing: border-box;\n min-width: 0;\n padding: var(--spacing-s) var(--spacing-m);\n white-space: nowrap;\n text-align: left;\n\n &.align-end {\n text-align: right;\n }\n\n &.align-center {\n text-align: center;\n }\n\n // Tabular figures are the WHOLE POINT vs a boxed list — numbers line up.\n // `numeric` needs no rule at all: the cell carries the bare class, so\n // libadwaita's own `.numeric` (_labels.scss:86-88) already applies.\n // A mono cell is monospace AND tabular, so it composes both.\n &.mono {\n @extend .monospace;\n @extend .numeric;\n }\n }\n\n // Header row — dim, small, uppercase caps with a hairline underline (Adwaita\n // list-column headings), never sortable.\n .adw-data-grid-row.header {\n .adw-data-grid-cell {\n @extend .dimmed;\n\n font-size: var(--font-size-small);\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n border-bottom: 1px solid var(--separator-color);\n }\n }\n\n // A section header spans all columns as a bold group title (a BWA's sections).\n .adw-data-grid-row.variant-section {\n .section-cell {\n font-weight: 700;\n color: var(--window-fg-color);\n padding-top: var(--spacing-m);\n }\n }\n\n // A subtotal is bold with a hairline rule above it (Gesamtleistung, Rohertrag…).\n .adw-data-grid-row.variant-subtotal {\n border-top: 1px solid var(--separator-color);\n\n .adw-data-grid-cell {\n font-weight: 700;\n }\n }\n\n // The final total is bold with a STRONGER rule above (the accounting result —\n // Betriebsergebnis), plus a thin rule below to evoke the ruled grand-total line.\n .adw-data-grid-row.variant-total {\n border-top: 2px solid var(--separator-color);\n border-bottom: 1px solid var(--separator-color);\n\n .adw-data-grid-cell {\n font-weight: 800;\n color: var(--window-fg-color);\n }\n }\n\n // Optional interactive rows (master-detail). Hairline separators only where\n // Adwaita would — NOT zebra striping — so no default row borders; the hover /\n // focus affordance carries the interaction.\n .adw-data-grid-row.interactive {\n cursor: pointer;\n border-radius: var(--button-radius);\n\n &:hover {\n background-color: var(--button-bg-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: -2px;\n }\n }\n}\n","// _clamp.scss — adw-clamp styling.\n//\n// The element itself is deliberately UNCAPPED and full-width: it is the box the\n// tightening curve is evaluated against, so it has to keep reporting the\n// AVAILABLE width. The cap and the centring live on the children, written by the\n// element from `clampAllocate` (see src/elements/adw-clamp.ts) — an element that\n// capped itself would feed its own capped width back into its ResizeObserver.\n//\n// Reference: refs/libadwaita/src/adw-clamp-layout.c (adw_clamp_layout_allocate)\n// Reference: refs/adwaita-web/adwaita-web/scss/_clamp.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-clamp {\n display: block;\n width: 100%;\n}\n","// _spinner.scss — adw-spinner styling.\n//\n// Almost nothing is left here on purpose. The ring is an SVG the element draws\n// per frame from `@gjsify/adwaita-core`'s `spinnerArc`, because the arc BREATHES\n// (2.7 to 102.8 degrees) and CSS cannot express that: the `border-top-color`\n// chase this file used to carry was a fixed 90-degree quarter-circle at 0.8s\n// against libadwaita's 1.2s, with a hardcoded grey track and square-cut ends.\n//\n// What CSS still owns is the box: the element is `size × size` and the ring is\n// centred inside it, which is how a 200px spinner shows a 64px ring\n// (adw-spinner.c:95-99 hands the widget's real size to the paintable, which caps\n// only the radius).\n//\n// There is deliberately NO `prefers-reduced-motion` rule. The C opts out of the\n// animation setting explicitly (`adw_animation_set_follow_enable_animations_setting\n// (…, FALSE)`, adw-spinner-paintable.c:537) — a frozen busy indicator reads as a\n// hang. This file used to stop the animation there.\n//\n// Reference: refs/libadwaita/src/adw-spinner.c\n// Reference: refs/libadwaita/src/adw-spinner-paintable.c\n// Reference: refs/adwaita-web/adwaita-web/scss/_spinner.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-spinner {\n // The element writes the measured box onto `style` when it upgrades; these are\n // the values in force until then, which are Adwaita's own minimum\n // (adw-spinner.c:14, reported as both minimum and natural at :78-81).\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: 16px;\n height: 16px;\n // The arc strokes `currentColor` — `gtk_widget_get_color` (:432), the widget's\n // TEXT colour, never the accent. The track is the same colour at 15%, which\n // the SVG applies as `stroke-opacity`.\n color: inherit;\n\n svg {\n display: block;\n // The ring never grows past its own diameter, so an over-large box centres\n // it rather than stretching it.\n flex: none;\n }\n}\n","// _shortcut_label.scss — <adw-shortcut-label> and its keycaps.\n//\n// TWO SOURCES, AND WHY ONLY ONE IS FOLLOWED. libadwaita styles the widget in\n// `_shortcuts-dialog.scss:33-58`: a 6px `border-spacing` at both levels (between\n// the boxes AND between the keycaps inside one), keycaps filled with 10% of the\n// current colour, an inset bottom shadow that reads as a key's edge, a 6px\n// radius, 6px padding and a 20px minimum width — plus `> .dimmed { padding: 6px\n// 0 }` so a separator lines up with the caps beside it.\n//\n// `refs/adwaita-web/adwaita-web/scss/_shortcut_label.scss` styles ONE outlined\n// tag for the whole shortcut: monospace, a border, small text, and an empty\n// `kbd, .keycap {}` block with a comment saying the real thing has per-keycap\n// styling. It is a placeholder for this widget, not a port of it, so nothing is\n// taken from it — the geometry above is libadwaita's.\n//\n// The keycap fill is `currentColor`-relative, so a shortcut label inside a\n// dimmed or coloured context stays legible without a second token.\n//\n// Reference: refs/libadwaita/src/stylesheet/widgets/_shortcuts-dialog.scss:33-58\n// Reference: refs/adwaita-web/adwaita-web/scss/_shortcut_label.scss (NOT followed — see above)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components; GTK's\n// `border-spacing` on a box becomes flex `gap`.\n\nadw-shortcut-label {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n border-radius: 6px;\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n // One combination — the keycaps of a single accelerator. Its own 6px gap is\n // the second `border-spacing` in `&, > box { border-spacing: 6px }` (:37-39).\n .adw-shortcut-label-keys {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n }\n\n .keycap {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n min-width: 20px;\n padding: 6px;\n border-radius: 6px;\n background: color-mix(in srgb, currentColor 10%, transparent);\n box-shadow: inset 0 -2px var(--card-shade-color);\n\n @media (prefers-contrast: more) {\n box-shadow:\n inset 0 -2px var(--card-shade-color),\n 0 0 0 1px var(--border-color);\n }\n }\n\n // The `L` / `R` of a sided modifier key — `%s <small><b>%s</b></small>` in the\n // C (adw-shortcut-label.c:195), i.e. smaller and bold, riding along inside the\n // same keycap rather than being a cap of its own.\n .adw-shortcut-label-side {\n margin-inline-start: 2px;\n font-size: 82%;\n font-weight: 700;\n // `<sub>` lowers the baseline by default; the marker is part of the key's\n // label, not a subscript of a formula.\n vertical-align: baseline;\n bottom: 0;\n }\n\n // `> .dimmed { padding: 6px 0 }` (:55-57) — the separators and the\n // disabled-text placeholder, aligned with the keycaps' text.\n > .dimmed {\n padding: 6px 0;\n }\n}\n","// _avatar.scss — adw-avatar styling (round, initials or fallback icon).\n// Reference: refs/adwaita-web/adwaita-web/scss/_avatar.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_avatar.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n border-radius: 50%;\n overflow: hidden;\n box-sizing: border-box;\n font-weight: 700;\n user-select: none;\n background-color: rgba(127, 127, 127, 0.25);\n color: var(--window-fg-color);\n\n .adw-avatar-text {\n line-height: 1;\n text-align: center;\n }\n\n .adw-avatar-icon {\n background-color: currentColor;\n opacity: 0.7;\n -webkit-mask-size: contain;\n mask-size: contain;\n }\n\n // `custom-image`. The avatar's own `border-radius: 50%` + `overflow: hidden`\n // already clip it, so the image only has to FILL the box — `cover`, not\n // `contain`, because GTK scales the paintable to the widget and crops inside a\n // rounded clip, where `contain` would letterbox a non-square photo inside the\n // circle.\n .adw-avatar-custom-image {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n}\n","// _banner.scss — adw-banner styling (full-width accent message strip).\n// Reference: refs/adwaita-web/adwaita-web/scss/_banner.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_toolbars.scss (AdwBanner)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-banner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--spacing-m);\n padding: var(--spacing-xs) var(--spacing-m);\n width: 100%;\n box-sizing: border-box;\n // Adw.Banner uses a neutral elevated surface, not the accent colour.\n background-color: var(--sidebar-bg-color);\n color: var(--window-fg-color);\n\n // Adw.Banner stays hidden until revealed.\n &:not(.revealed) {\n display: none;\n }\n\n // The title is a `.heading` label and the button a plain GTK text button\n // (adw-banner.ui:25, :29), so the title is bold and the button 34px tall with the 17px\n // `.text-button` sides. Both were lighter here, and the banner stood 8px shorter than\n // GTK's render of the gallery's banner `.blp`.\n .adw-banner-title {\n flex: 1 1 auto;\n min-width: 0;\n font-size: var(--font-size-base);\n font-weight: 700;\n }\n\n .adw-banner-button {\n flex-shrink: 0;\n box-sizing: border-box;\n min-height: 34px;\n border: none;\n border-radius: var(--button-radius);\n padding: 5px 17px;\n background: var(--button-bg-color);\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n font-weight: 700;\n cursor: pointer;\n\n &:hover {\n background: var(--button-hover-color);\n }\n\n // `button-style` (Since 1.7). ADW_BANNER_BUTTON_SUGGESTED adds\n // `.suggested-action` to the banner button (adw-banner.c:769), which is the\n // shared accent appearance — the same declaration `.adw-button.suggested-action`\n // carries, restated here because the banner button is not an `.adw-button`.\n &.suggested-action {\n background: var(--accent-bg-color);\n color: var(--accent-fg-color);\n\n &:hover {\n background: var(--accent-color);\n }\n }\n }\n}\n","// _status_page.scss — adw-status-page styling (centered empty state).\n// Reference: refs/adwaita-web/adwaita-web/scss/_status_page.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_misc.scss (AdwStatusPage)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// THE METRICS ARE UPSTREAM'S, measured against a GTK render of the gallery's status page\n// `.blp`. They were the vendored web port's — a 96px icon, an 18pt title, the description\n// capped at 32ch and 12px gaps all round — and beside GTK the page was a different\n// composition: the description wrapped at 290px where GTK sets it on one line, and the child\n// sat 61px higher. `_misc.scss` (statuspage) has a 36px 12px margin, 12px between icon,\n// title and description, 24px more under the icon, `.title-1` for the title and 36px\n// between that column and the child; `adw-status-page.ui` clamps the column at AdwClamp's\n// default 600px.\nadw-status-page {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n gap: 12px;\n padding: 36px 12px;\n color: var(--window-fg-color);\n\n .adw-status-page-icon {\n width: 128px;\n height: 128px;\n margin-bottom: 24px;\n background-color: currentColor;\n opacity: 0.45;\n -webkit-mask-size: contain;\n mask-size: contain;\n }\n\n // `.title-1` (`_labels.scss`), restated: each partial compiles on its own, so an\n // `@extend` across them finds no target.\n .adw-status-page-title {\n font-weight: 800;\n font-size: 181%;\n max-width: 600px;\n }\n\n .adw-status-page-description {\n font-size: var(--font-size-base);\n opacity: var(--dim-opacity);\n max-width: 600px;\n }\n\n // 36px from the column, of which the flex gap already gives 12.\n .adw-status-page-child {\n margin-top: 24px;\n }\n\n // `.compact` — the documented smaller status page, for a sidebar or a popover\n // (style-classes.md \"Compact Status Page\"): margins 24px 12px, the icon 96px with 12px\n // under it, `.title-2`, and 24px to the child (`_misc.scss`, statuspage.compact).\n &.compact {\n padding: 24px 12px;\n\n .adw-status-page-icon {\n width: 96px;\n height: 96px;\n margin-bottom: 12px;\n }\n\n .adw-status-page-title {\n font-size: 136%;\n }\n\n .adw-status-page-child {\n margin-top: 12px;\n }\n }\n}\n","// _row.scss — Shared base styling for rows in preferences groups.\n// Reference: refs/adwaita-web/adwaita-web/scss/_row_types.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss (AdwActionRow)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-switch-row,\nadw-combo-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 50px;\n padding: var(--spacing-s) var(--spacing-m);\n gap: var(--spacing-m);\n border-bottom: 1px solid var(--card-shade-color);\n\n &:last-child {\n border-bottom: none;\n }\n}\n\n// Shared title/subtitle text column used by every row type (action/switch/\n// combo/spin). The title is the primary label; the subtitle is dimmed and\n// hidden when empty.\n.adw-row-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.adw-row-subtitle {\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n color: var(--card-fg-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n// Trailing edit pencil shared by editable rows (entry/password) — the\n// Adw.EntryRow edit affordance. Dimmed; clicking focuses the entry.\n.adw-row-edit {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n color: var(--card-fg-color);\n opacity: 0.55;\n cursor: pointer;\n}\n\n// Utility separator (used by content layouts)\n.adw-separator-vertical {\n width: 1px;\n align-self: stretch;\n background-color: var(--card-shade-color);\n flex-shrink: 0;\n}\n","// _action_row.scss — adw-action-row styling (title/subtitle + prefix/suffix).\n// Reference: refs/adwaita-web/adwaita-web/scss/_action_row.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-action-row {\n display: flex;\n align-items: center;\n gap: var(--spacing-m);\n min-height: 50px;\n padding: var(--spacing-s) var(--spacing-m);\n border-bottom: 1px solid var(--card-shade-color);\n color: var(--card-fg-color);\n\n &:last-child {\n border-bottom: none;\n }\n\n &.activatable {\n cursor: pointer;\n\n &:hover {\n background-color: var(--button-bg-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n }\n\n .adw-action-row-prefix,\n .adw-action-row-suffix {\n display: flex;\n align-items: center;\n gap: var(--spacing-xs);\n flex-shrink: 0;\n }\n\n .adw-action-row-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n flex: 1 1 auto;\n min-width: 0;\n }\n\n .adw-row-title {\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .adw-row-subtitle {\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n color: var(--card-fg-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n}\n\n// `.property` SWAPS the emphasis of a row: the title becomes the small dimmed\n// label and the subtitle carries the value at full weight — a read-only property\n// rather than an action (style-classes.md \"Property Rows\", `_lists.scss:426-455`).\n//\n// It is written against the shared `.adw-row-title` / `.adw-row-subtitle` nodes,\n// so it works on every row type that renders them (action, expander header,\n// entry, switch), which is the same reach upstream gives it.\nadw-action-row.property,\nadw-expander-row.property {\n .adw-row-title {\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n }\n\n .adw-row-subtitle {\n font-size: var(--font-size-base);\n opacity: 1;\n }\n\n // `.monospace` on a property row monospaces the VALUE only — the label and any\n // suffix widget stay in the UI font (`_lists.scss:445-455`). Put `.monospace`\n // on the list instead to get all of it.\n &.monospace {\n font-family: inherit;\n font-size: inherit;\n\n .adw-row-subtitle {\n font-family: var(--monospace-font-family);\n font-size: var(--monospace-font-size);\n }\n }\n}\n","// _entry_row.scss — adw-entry-row styling (inline editable boxed-list row).\n// Reference: refs/adwaita-web/adwaita-web/scss/_entry_row.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_entries.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-entry-row {\n display: flex;\n align-items: center;\n gap: var(--spacing-m);\n min-height: 50px;\n padding: var(--spacing-xs) var(--spacing-m);\n border-bottom: 1px solid var(--card-shade-color);\n\n &:last-child {\n border-bottom: none;\n }\n\n // Focus ring matching libadwaita's row focus (inset accent outline).\n &:focus-within {\n box-shadow: inset 0 0 0 2px var(--accent-color);\n }\n\n // Filled Adw.EntryRow layout: a small floating title above the value,\n // both left-aligned in a column.\n .adw-entry-row-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n flex: 1 1 auto;\n min-width: 0;\n gap: 1px;\n }\n\n .adw-row-title {\n font-size: var(--font-size-small);\n color: var(--card-fg-color);\n opacity: var(--dim-opacity);\n }\n\n .adw-entry-row-input {\n width: 100%;\n min-width: 0;\n border: none;\n background: transparent;\n color: var(--card-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n text-align: left;\n outline: none;\n padding: 0;\n }\n}\n","// _switch_row.scss — adw-switch-row styling.\n//\n// The TOGGLE is not here: it is `<gtk-switch>` and `scss/_switch.scss`. It used\n// to be, nested under `adw-switch-row {`, which is exactly why `.adw-switch` was\n// unreachable from anywhere else and `_expander_row.scss` grew a\n// character-for-character copy of it.\n//\n// Reference: refs/adwaita-web/adwaita-web/scss/_switch_row.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-switch-row {\n .adw-row-title {\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n }\n}\n","// _combo_row.scss — adw-combo-row styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_combo_row.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss (AdwComboRow)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-combo-row {\n position: relative;\n cursor: pointer;\n\n .adw-row-title {\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n pointer-events: none;\n }\n\n // Hidden <select> overlay — stretches across the row to capture clicks\n // anywhere. The visual dropdown arrow is rendered by .adw-row-value::after\n // below, so the select itself doesn't need a background image.\n select {\n appearance: none;\n -webkit-appearance: none;\n background-color: transparent;\n border: none;\n padding: 6px 24px 6px 8px;\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n cursor: pointer;\n text-align: right;\n position: absolute;\n inset: 0;\n opacity: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: -1px;\n }\n\n option {\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n }\n }\n\n .adw-row-value {\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n opacity: var(--dim-opacity);\n display: flex;\n align-items: center;\n gap: 4px;\n\n // Dropdown arrow — rendered via CSS mask so `currentColor` drives the\n // fill, making the icon theme-aware (matches libadwaita's dark theme).\n // Using background-image with a data-URI SVG would NOT resolve\n // `currentColor` in most browsers.\n //\n // `model_changed` (adw-combo-row.c:187-195) hides the arrow box entirely on\n // a model of one item or none, so the row stops presenting itself as a\n // chooser. `[data-presents-chooser='false']` below is that rule; the element\n // publishes the attribute and disables the overlaid <select> alongside.\n &::after {\n content: \"\";\n display: inline-block;\n width: 12px;\n height: 12px;\n background-color: currentColor;\n -webkit-mask-image: var(--icon-go-down);\n mask-image: var(--icon-go-down);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: contain;\n mask-size: contain;\n -webkit-mask-position: center;\n mask-position: center;\n }\n }\n}\n\n// A model with one item or none: no arrow, and the row is not activatable\n// (`model_changed`, adw-combo-row.c:187-195). Written as its own block rather\n// than a modifier inside `.adw-row-value` so the two selectors that draw the\n// arrow and the one that removes it read at the same specificity depth.\nadw-combo-row[data-presents-chooser='false'] {\n .adw-row-value::after {\n display: none;\n }\n\n select {\n cursor: default;\n }\n}\n","// _spin_row.scss — adw-spin-row styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_spin_button.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_spin-button.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-spin-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 50px;\n padding: var(--spacing-s) var(--spacing-m);\n gap: var(--spacing-m);\n border-bottom: 1px solid var(--card-shade-color);\n\n &:last-child {\n border-bottom: none;\n }\n\n .adw-row-title {\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n }\n}\n\n.adw-spin-control {\n display: flex;\n align-items: center;\n gap: 2px;\n\n button {\n width: 32px;\n height: 32px;\n border: none;\n border-radius: var(--button-radius);\n background: transparent;\n color: var(--card-fg-color);\n cursor: pointer;\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n &:hover {\n background: rgba(128, 128, 128, 0.15);\n }\n }\n\n input {\n width: 56px;\n text-align: center;\n border: none;\n border-radius: var(--button-radius);\n background: rgba(128, 128, 128, 0.1);\n color: var(--card-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n padding: 4px 2px;\n\n &:focus {\n outline: 2px solid var(--accent-color);\n outline-offset: -1px;\n }\n }\n}\n","// _button_row.scss — adw-button-row styling (a boxed-list row that acts as a\n// button: centered title + optional start icon, with suggested/destructive\n// recoloring).\n// Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss (row.button)\n// Reference: refs/adwaita-web/adwaita-web/scss/_button_row.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-button-row {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n // libadwaita: `row.button > box { min-height: 40px; margin: 0 12px }` (_lists.scss:458-462),\n // and the row around it measures 44 in a GTK render of the gallery's button-row `.blp`.\n // It was a plain row's 50 here, so the button row stood 6px taller than GTK's.\n min-height: 44px;\n padding: 0 var(--spacing-m);\n border-bottom: 1px solid var(--card-shade-color);\n color: var(--card-fg-color);\n cursor: pointer;\n transition: background-color 0.1s ease;\n\n &:last-child {\n border-bottom: none;\n }\n\n // Contents are centered as a group (libadwaita's GtkBox halign:center), with\n // the start icon hugging the title via a small gap (border-spacing 6px).\n .adw-button-row-contents {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-xs);\n min-width: 0;\n }\n\n .adw-button-row-title {\n font-size: var(--font-size-base);\n font-weight: 700;\n text-align: center;\n color: inherit;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // Default (no style class): button-like hover/active feedback.\n &.activatable {\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n }\n\n // Suggested action — accent-coloured, full-bleed (no separator line).\n &.suggested-action {\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n border-bottom: none;\n\n &.activatable {\n &:hover {\n background-color: var(--accent-bg-color);\n background-image: linear-gradient(\n color-mix(in srgb, currentColor 10%, transparent),\n color-mix(in srgb, currentColor 10%, transparent)\n );\n }\n\n &:active {\n background-color: var(--accent-bg-color);\n background-image: linear-gradient(rgba(0, 0, 6, 0.2), rgba(0, 0, 6, 0.2));\n }\n }\n }\n\n // Destructive action — red, same full-bleed treatment as suggested.\n &.destructive-action {\n background-color: var(--destructive-bg-color);\n color: var(--destructive-fg-color);\n border-bottom: none;\n\n &.activatable {\n &:hover {\n background-color: var(--destructive-bg-color);\n background-image: linear-gradient(\n color-mix(in srgb, currentColor 10%, transparent),\n color-mix(in srgb, currentColor 10%, transparent)\n );\n }\n\n &:active {\n background-color: var(--destructive-bg-color);\n background-image: linear-gradient(rgba(0, 0, 6, 0.2), rgba(0, 0, 6, 0.2));\n }\n }\n }\n}\n","// _expander_row.scss — adw-expander-row styling (disclosure header + nested rows).\n// Reference: refs/adwaita-web/adwaita-web/scss/_expander_row.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss (AdwExpanderRow)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-expander-row {\n display: block;\n border-bottom: 1px solid var(--card-shade-color);\n color: var(--card-fg-color);\n\n &:last-child {\n border-bottom: none;\n }\n\n // Header — styled like an activatable action row.\n .adw-expander-row-header {\n display: flex;\n align-items: center;\n gap: var(--spacing-m);\n min-height: 50px;\n padding: var(--spacing-s) var(--spacing-m);\n cursor: pointer;\n\n &:hover {\n background-color: var(--button-bg-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n }\n\n .adw-row-title {\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // The text column takes the free space so prefix/suffix widgets, the enable\n // switch and the chevron sit at their respective edges.\n .adw-expander-row-header > .adw-row-text {\n flex: 1;\n min-width: 0;\n }\n\n // Header prefix / suffix widget slots (Adw.ExpanderRow add_prefix/add_suffix).\n .adw-expander-row-prefix,\n .adw-expander-row-suffix {\n display: flex;\n align-items: center;\n gap: var(--spacing-s);\n flex-shrink: 0;\n }\n\n // Disclosure chevron — points down when collapsed, flips up when expanded,\n // matching libadwaita's Adw.ExpanderRow arrow.\n .adw-expander-row-chevron {\n opacity: var(--dim-opacity);\n transform: rotate(0deg);\n transition: transform 0.2s ease-out;\n flex-shrink: 0;\n }\n\n &.expanded .adw-expander-row-chevron {\n transform: rotate(180deg);\n }\n\n // The optional enable switch is `<gtk-switch>` and needs no geometry of its\n // own — `.adw-expander-row-enable-switch` is a query/override hook only. This\n // block used to be a character-for-character copy of the switch row's toggle\n // (44×24 box, hidden input, 20px knob, translateX(20px), focus ring), because\n // `.adw-switch` was nested inside `adw-switch-row {` and unreachable from here.\n\n // Disclosed content — a nested listbox of rows, hidden until expanded. The\n // nested surface is slightly inset/recessed, the way libadwaita draws it.\n .adw-expander-row-content {\n display: none;\n flex-direction: column;\n background-color: var(--window-bg-color);\n border-top: 1px solid var(--card-shade-color);\n\n &.expanded {\n display: flex;\n }\n\n // Nested rows: indent the text column and keep the hairline separators,\n // dropping the last one (the content area's own edge closes it off).\n > adw-action-row,\n > adw-entry-row,\n > adw-switch-row,\n > adw-combo-row,\n > adw-spin-row {\n padding-left: var(--spacing-xl);\n border-bottom: 1px solid var(--card-shade-color);\n\n &:last-child {\n border-bottom: none;\n }\n }\n }\n}\n","// _password_entry_row.scss — adw-password-entry-row styling (masked entry row\n// with a trailing peek toggle). Mirrors _entry_row.scss (the password row is a\n// specialization of the entry row) and adds the flat peek button.\n// Reference: refs/adwaita-web/adwaita-web/scss/_entry_row.scss (no password variant upstream)\n// Reference: refs/libadwaita/src/adw-password-entry-row.c\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-password-entry-row {\n display: flex;\n align-items: center;\n gap: var(--spacing-m);\n min-height: 50px;\n padding: var(--spacing-xs) var(--spacing-m);\n border-bottom: 1px solid var(--card-shade-color);\n\n &:last-child {\n border-bottom: none;\n }\n\n // Focus ring matching libadwaita's row focus (inset accent outline).\n &:focus-within {\n box-shadow: inset 0 0 0 2px var(--accent-color);\n }\n\n // Filled Adw.EntryRow layout: a small floating title above the value,\n // both left-aligned in a column.\n .adw-password-entry-row-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n flex: 1 1 auto;\n min-width: 0;\n gap: 1px;\n }\n\n .adw-row-title {\n font-size: var(--font-size-small);\n color: var(--card-fg-color);\n opacity: var(--dim-opacity);\n }\n\n .adw-password-entry-row-input {\n width: 100%;\n min-width: 0;\n border: none;\n background: transparent;\n color: var(--card-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n text-align: left;\n outline: none;\n padding: 0;\n\n // Slightly wider tracking for the masked dots, like the native entry.\n &[type='password'] {\n letter-spacing: 0.125em;\n }\n }\n\n // Trailing peek toggle — flat circular icon button, vertically centred.\n .adw-password-entry-row-toggle {\n flex-shrink: 0;\n align-self: center;\n }\n}\n","// _toast.scss — adw-toast and adw-toast-overlay styling.\n// adw-toast-overlay wraps content and layers transient `.adw-toast` banners over\n// the bottom of its own bounds (the Adw.ToastOverlay model). Each banner carries\n// a title, an optional action button and a CSS-drawn \"×\" close button, and slides\n// up on show / down on dismiss (mirroring Adw.Toast).\n// Reference: refs/adwaita-web/adwaita-web/scss/_toast.scss\n// Reference: refs/adwaita-web/adwaita-web/scss/_toast_overlay.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_misc.scss (Toasts)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-toast-overlay {\n position: relative;\n display: block;\n\n // The wrapped content (Adw.ToastOverlay :child) occupies the overlay's box.\n .adw-toast-overlay-content {\n width: 100%;\n height: 100%;\n }\n\n // The toast slot: layered over the bottom edge of the overlay and centered,\n // the way AdwToastOverlay floats a toast above its child. Like\n // Adw.ToastOverlay only ONE toast is mounted at a time (the queue lives in\n // `@gjsify/adwaita-core`); the flex column keeps it centered and lets an\n // outgoing `.hiding` strip finish its exit transition in place.\n .adw-toast-overlay-toasts {\n position: absolute;\n bottom: var(--spacing-m);\n left: 50%;\n transform: translateX(-50%);\n z-index: 9999;\n display: flex;\n flex-direction: column-reverse;\n gap: var(--spacing-s);\n align-items: center;\n pointer-events: none;\n }\n}\n\n.adw-toast {\n background-color: #3d3846;\n color: #ffffff;\n padding: var(--spacing-s) var(--spacing-m);\n border-radius: var(--card-radius);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3), 0 1px 2px rgba(0, 0, 0, 0.25);\n display: flex;\n align-items: center;\n gap: var(--spacing-s);\n width: max-content;\n max-width: 400px;\n min-height: 36px;\n pointer-events: auto;\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n\n opacity: 0;\n transform: translateY(100%) scale(0.9);\n transition: opacity 0.2s cubic-bezier(0, 0, 0.2, 1),\n transform 0.2s cubic-bezier(0, 0, 0.2, 1);\n will-change: transform, opacity;\n\n &.visible {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n\n &.hiding {\n opacity: 0;\n transform: translateY(100%) scale(0.9);\n transition-duration: 0.15s;\n transition-timing-function: cubic-bezier(0.4, 0, 1, 1);\n }\n\n .adw-toast-content-wrapper {\n flex: 1 1 auto;\n min-width: 0;\n }\n\n .adw-toast-title {\n font-weight: normal;\n line-height: 1.3;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // Action button — a flat pill tinted with the accent color so it reads as\n // suggested against the dark toast surface (Adw.Toast:button-label).\n .adw-toast-action-button {\n flex-shrink: 0;\n box-sizing: border-box;\n margin: 0;\n padding: 4px var(--spacing-m);\n border: none;\n border-radius: var(--button-radius);\n background-color: rgba(255, 255, 255, 0.12);\n color: #ffffff;\n font-family: inherit;\n font-size: var(--font-size-base);\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n transition: background-color 150ms ease-in-out;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.2);\n }\n\n &:active {\n background-color: rgba(255, 255, 255, 0.26);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n }\n\n // Close affordance — `window-close-symbolic` in a 24px circle, as upstream builds it\n // (adw-toast-widget.ui:64). The element supplies the <gtk-image>; this only places it.\n .adw-toast-close-button {\n box-sizing: border-box;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n margin: 0;\n padding: 0;\n border: none;\n border-radius: 9999px;\n background-color: transparent;\n color: #ffffff;\n cursor: pointer;\n opacity: 0.7;\n transition:\n background-color 150ms ease-in-out,\n opacity 150ms ease-in-out;\n\n &:hover {\n opacity: 1;\n background-color: rgba(255, 255, 255, 0.12);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n }\n}\n","// _toolbar_view.scss — adw-toolbar-view styling (content framed by top/bottom bars).\n// Reference: refs/adwaita-web/adwaita-web/scss/_toolbar_view.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_toolbars.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-toolbar-view {\n display: flex;\n flex-direction: column;\n min-height: 0;\n min-width: 0;\n flex: 1 1 auto;\n // Positioning context for the extend-content-to-*-edge overlays below.\n position: relative;\n\n .adw-toolbar-view-top,\n .adw-toolbar-view-bottom {\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n }\n\n .adw-toolbar-view-content {\n flex: 1 1 auto;\n min-height: 0;\n min-width: 0;\n overflow: auto;\n display: flex;\n flex-direction: column;\n background-color: var(--window-bg-color);\n }\n\n // THE CONTENT WIDGET FILLS THE CONTENT RECT. `adw_toolbar_view_size_allocate`\n // (adw-toolbar-view.c:390-397) hands `self->content` the whole rect between the\n // bars, and a GTK widget that wants less of it says so through its own\n // alignment. This port collects the content into a flex COLUMN, where an item\n // declaring no `flex-grow` is content-sized instead, so the child stopped\n // wherever its content did and the pane below it stayed empty. Measured on the\n // docs Navigation Split View preview: a 293px sidebar pane holding a 176px\n // `adw-sidebar`, i.e. 117px of window-coloured dead strip under the last row,\n // and beside it a status page top-aligned in a pane it was supposed to centre in.\n // The web storybook had been papering over it in its own sheet\n // (`.sb-sidebar-scroll { flex: 1 1 auto }`), deleted now that the widget carries\n // it: a per-consumer copy is what a missing widget rule looks like from the\n // outside, and it keeps the widget green while the next consumer hits the same\n // wall.\n //\n // `:only-child` because Adw.ToolbarView HAS one content widget. Several stacked\n // children are this port's own extension, and GTK defines no distribution for\n // them, so inventing one here would be a claim rather than a copy.\n //\n // NO `min-height: 0` alongside it, deliberately: the automatic minimum size is\n // already the right answer per child. A scroller (`adw-sidebar`, any\n // `overflow: auto` box) gets an automatic minimum of 0 and shrinks to scroll\n // itself, as its GtkScrolledWindow would; a status page keeps its content-based\n // minimum, so a pane too short to hold it scrolls THIS box instead of crushing a\n // centred column into overflow its reader cannot scroll back up to.\n .adw-toolbar-view-content > :only-child {\n flex: 1 1 auto;\n }\n\n // …UNLESS IT ASKED FOR LESS. A content widget with a `valign` other than fill is\n // allocated its natural height and placed by that alignment (`_widget.scss`'s auto\n // margin), which a growing flex item cannot be: the grow claims the free space before\n // an auto margin sees any. Measured on the gallery's navigation view, whose `.blp`\n // centres a pill button in a toolbar view: GTK drew it 44px tall mid-pane, this port\n // stretched it over the whole 293px content rect.\n .adw-toolbar-view-content > :only-child:is([valign='start'], [valign='end'], [valign='center']) {\n flex-grow: 0;\n }\n\n // top-bar-style / bottom-bar-style: an opaque background plus a persistent\n // shadow, which `.border` swaps for a hairline (adw-toolbar-view.c:1011-1024,\n // _toolbars.scss `> .top-bar.raised`).\n .adw-toolbar-view-top.raised,\n .adw-toolbar-view-bottom.raised {\n background-color: var(--headerbar-bg-color);\n color: var(--headerbar-fg-color);\n }\n\n .adw-toolbar-view-top.raised {\n box-shadow:\n 0 1px var(--headerbar-shade-color),\n 0 2px 4px var(--headerbar-shade-color);\n\n &.border {\n box-shadow: 0 1px var(--headerbar-shade-color);\n }\n }\n\n .adw-toolbar-view-bottom.raised {\n box-shadow:\n 0 -1px var(--headerbar-shade-color),\n 0 -2px 4px var(--headerbar-shade-color);\n\n &.border {\n box-shadow: 0 -1px var(--headerbar-shade-color);\n }\n }\n\n // A bar in a toolbar view is INLINE — `%headerbar-inline` → `%headerbar-flat`:\n // no background of its own, no separator, the content's foreground\n // (_toolbars.scss :313-317, _header-bar.scss :110-147). That is what makes a\n // flat-style view read as ONE surface with the bar sitting in it rather than as\n // a bar bolted on top of a pane, and it is why the shading below is the ONLY\n // thing that ever draws a line between them.\n //\n // Not folded into `%headerbar` itself: a header bar used as a WINDOW titlebar\n // keeps its own background and shade, which is what `adw-header-bar` outside a\n // toolbar view still renders.\n .adw-toolbar-view-top,\n .adw-toolbar-view-bottom {\n &:not(.raised) adw-header-bar {\n background: none;\n color: inherit;\n box-shadow: none;\n }\n }\n\n // The scroll shading under a FLAT bar belongs to the SCROLLER, not to the view:\n // upstream's selector is `toolbarview.undershoot-top scrolledwindow`, and GTK\n // draws that node only while the scroller is off the edge. Drawn from the view\n // instead — which is what this did — the fade is unconditional, so every flat\n // bar sat behind a permanent hairline that native shows only after scrolling.\n // `_scrolling.scss` + `src/scroll-shading.ts` now own it, per scroller.\n}\n\n// extend-content-to-*-edge: the content spans the full height and the bar is\n// drawn OVER it, which is `content_offset = 0` / `content_height = height` in\n// adw_toolbar_view_size_allocate (adw-toolbar-view.c:390-397).\nadw-toolbar-view[extend-content-to-top-edge] > .adw-toolbar-view-top,\nadw-toolbar-view[extend-content-to-bottom-edge] > .adw-toolbar-view-bottom {\n position: absolute;\n left: 0;\n right: 0;\n}\n\nadw-toolbar-view[extend-content-to-top-edge] > .adw-toolbar-view-top {\n top: 0;\n}\n\nadw-toolbar-view[extend-content-to-bottom-edge] > .adw-toolbar-view-bottom {\n bottom: 0;\n}\n","// _scrolling.scss — GtkScrolledWindow's edge indicators.\n//\n// The two states are drawn by ONE pseudo-element per edge, because they cannot be\n// live at once: an undershoot means content is hidden past the edge, an overshoot\n// means the position is past it. `src/scroll-shading.ts` decides which, and carries\n// the overshoot's size in `--adw-overshoot`.\n//\n// Both boxes are sticky with a negative margin of their own height, so they weld to\n// the scrollport edge and consume no layout — an absolutely positioned child of a\n// scroll container scrolls away with the content instead of staying at the edge.\n//\n// Reference: refs/libadwaita/src/stylesheet/_drawing.scss (undershoot/overshoot mixins)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_scrolling.scss\n// Reference: refs/gtk/gtk/gtkscrolledwindow.c (UNDERSHOOT_SIZE, MAX_OVERSHOOT_DISTANCE)\n// Copyright (c) GNOME contributors (GTK, libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web.\n\n// `UNDERSHOOT_SIZE` — the band the node is allocated. Mostly transparent: the\n// gradient over it is done after 4px.\n$undershoot_size: 40px;\n\n// The shade both gradients start from — `color-mix(… var(--shade-color) 75% …)`.\n$undershoot_shade: color-mix(in srgb, var(--shade-color) 75%, transparent);\n\n.adw-scroll-shaded {\n // The two indicator boxes exist for every shaded scroller and stay invisible\n // until a state class turns them on, so nothing has to be inserted or removed\n // while scrolling.\n &::before,\n &::after {\n content: '';\n display: block;\n position: sticky;\n z-index: 1;\n flex-shrink: 0;\n pointer-events: none;\n height: 0;\n background: none;\n box-shadow: none;\n }\n\n &::before {\n top: 0;\n }\n\n &::after {\n bottom: 0;\n }\n\n // --- Undershoot: \"there is content past this edge\" ---\n //\n // A 1px line at the very edge plus a 4px fade, both at 75% of the shade colour.\n // Constant size: it says THAT content is hidden, never how much.\n &.undershoot-top::before {\n height: $undershoot_size;\n margin-bottom: -$undershoot_size;\n box-shadow: inset 0 1px $undershoot_shade;\n background: linear-gradient(to bottom, $undershoot_shade, transparent 4px);\n }\n\n &.undershoot-bottom::after {\n height: $undershoot_size;\n margin-top: -$undershoot_size;\n box-shadow: inset 0 -1px $undershoot_shade;\n background: linear-gradient(to top, $undershoot_shade, transparent 4px);\n }\n\n // --- Overshoot: \"there is nothing past this edge\" ---\n //\n // Two stacked radial gradients in the CURRENT text colour — a tight 3% band at\n // the edge over a soft 50% wash — sized to how far past the edge the position\n // was pushed. `--adw-overshoot` is set per scroller by the shading controller.\n &.overshoot-top::before,\n &.overshoot-bottom::after {\n height: var(--adw-overshoot, 0px);\n background-repeat: no-repeat;\n box-shadow: none;\n // The spring-back: the size is driven from JS, the fade rides the transition\n // so releasing the wheel eases out instead of cutting.\n transition: height 200ms ease-out, opacity 200ms ease-out;\n }\n\n &.overshoot-top::before {\n margin-bottom: calc(var(--adw-overshoot, 0px) * -1);\n background-image:\n radial-gradient(farthest-side at top, color-mix(in srgb, currentColor 12%, transparent) 85%, transparent),\n radial-gradient(farthest-side at top, color-mix(in srgb, currentColor 5%, transparent), transparent);\n background-size: 100% 3%, 100% 50%;\n background-position: top;\n }\n\n &.overshoot-bottom::after {\n margin-top: calc(var(--adw-overshoot, 0px) * -1);\n background-image:\n radial-gradient(farthest-side at bottom, color-mix(in srgb, currentColor 12%, transparent) 85%, transparent),\n radial-gradient(farthest-side at bottom, color-mix(in srgb, currentColor 5%, transparent), transparent);\n background-size: 100% 3%, 100% 50%;\n background-position: bottom;\n }\n\n @media (prefers-reduced-motion: reduce) {\n &.overshoot-top::before,\n &.overshoot-bottom::after {\n transition: none;\n }\n }\n}\n","// _wrap_box.scss — adw-wrap-box styling (a box that wraps its children onto new\n// lines, the web analog of flexbox `flex-wrap: wrap`). Mirrors Adw.WrapBox.\n// Reference: refs/adwaita-web/adwaita-web/scss/_wrap_box.scss\n// Reference: refs/libadwaita/src/adw-wrap-box.c / adw-wrap-layout.c (Adw.WrapBox)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// Direction, gaps, `justify-content` and `align-content` are driven imperatively\n// by the component from its attributes — these are the libadwaita defaults\n// (horizontal, packed to the start of each line, lines wrapping downwards from\n// the top). A wrap box is a pure layout container, so it carries no background\n// of its own; children handle their own theming.\nadw-wrap-box {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n // Each child is allocated the FULL cross extent of its line — `h = line_size`\n // in adw-wrap-layout.c:746-751 — which is `stretch`, the flexbox default. The\n // port used to write `flex-start` here and drive it from `align`, which is a\n // MAIN-axis property in libadwaita and belongs on `justify-content`.\n align-items: stretch;\n align-content: flex-start;\n}\n\n// `wrap-policy`, published by the component as a custom property. The FALLBACK\n// is the load-bearing part: it is `ADW_WRAP_NATURAL`, libadwaita's default\n// (adw-wrap-box.c:491-495), where CSS defaults `flex-shrink` to 1 — so a wrap\n// box that has not upgraded yet, or one whose policy is unset, draws Adwaita's\n// choice rather than the cascade's.\nadw-wrap-box > * {\n flex-shrink: var(--adw-wrap-box-child-shrink, 0);\n}\n\n// FILL grows the children and keeps the spacing constant\n// (adw-wrap-layout.c:317-319, :326-341); SPREAD deliberately does NOT, so the\n// gaps take the leftover instead. `data-line-justify` is the mode the component\n// resolved for a COMPLETE line.\n//\n// A lone child is excluded because it is not on a complete line: a box with one\n// element child has exactly one line, and that line is the final one — see\n// below.\nadw-wrap-box[data-line-justify='fill'] > *:not(:only-child) {\n flex-grow: 1;\n}\n\n// `:only-child` is the one line-membership fact CSS knows without a layout pass,\n// and libadwaita treats that line as the LAST one. Both justified modes stretch\n// it: FILL by definition, SPREAD because its \"keep the children at their minimum\n// size\" branch is guarded by `n_children > 1` (adw-wrap-layout.c:338), so a lone\n// child is stretched regardless (adw-wrap-box.c:349-352).\nadw-wrap-box[data-last-line-justify='fill'] > :only-child,\nadw-wrap-box[data-last-line-justify='spread'] > :only-child {\n flex-grow: 1;\n}\n\n// The final line, when it is NOT justified (`justify-last-line` unset — the C\n// default, adw-wrap-box.c:379-381): a generated flex item absorbs that line's\n// leftover space, so it packs at the start of the main axis the way an\n// un-justified line does, while `justify-content: space-between` keeps spreading\n// the complete lines above it. `::after` is the only per-line hook flexbox\n// offers, and it lands on the final line by construction.\n//\n// The negative main-axis margin cancels exactly the one gap the filler would\n// otherwise add, so an exactly-full line can never be pushed into a new one.\nadw-wrap-box[data-line-justify='spread'][data-last-line-justify='none']::after {\n content: '';\n flex: 1 0 0;\n min-width: 0;\n min-height: 0;\n margin-left: calc(-1 * var(--adw-wrap-box-child-spacing, 0px));\n}\n\n// A vertical box packs along the block axis, so the gap to cancel is the one\n// before the filler in that direction.\nadw-wrap-box[orientation='vertical'][data-line-justify='spread'][data-last-line-justify='none']::after {\n margin-left: 0;\n margin-top: calc(-1 * var(--adw-wrap-box-child-spacing, 0px));\n}\n","// _panes.scss — `.sidebar-pane` / `.content-pane` / `.overlay-pane`.\n//\n// These are libadwaita STYLE CLASSES, not private markup of one widget. Both\n// split views document them as their CSS node tree\n// (adw-navigation-split-view.c:157-165, adw-overlay-split-view.c:136-152) and\n// both apply them to their pane bins, which makes them the supported hook an\n// app themes a pane through. They lived nowhere in this stylesheet, so each\n// split view hard-coded `--sidebar-bg-color` onto its own private pane div\n// instead — with two consequences.\n//\n// The first is that an app writing the documented selector styles nothing, and\n// gets no error saying so. Our own docs site is the evidence: every split-view\n// example carried `class=\"sidebar\"` on the sidebar toolbar view, hand-written\n// by someone reaching for exactly this, matching no rule in the build.\n//\n// The second is a rendering defect, because the class is not constant — it is\n// how the widget says which of its states a pane is in. A collapsed overlay\n// sidebar is an `.overlay-pane`, on the WINDOW background, not the sidebar one\n// (adw-overlay-split-view.c:718-741); a collapsed navigation split view has no\n// pane bins at all, its pages being ordinary navigation pages. Painting the\n// sidebar colour at every width, as the private rules did, got both wrong.\n//\n// Reference: refs/libadwaita/src/stylesheet/widgets/_sidebars.scss (.sidebar-pane, .overlay-pane)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n.sidebar-pane {\n background-color: var(--sidebar-bg-color);\n color: var(--sidebar-fg-color);\n}\n\n// A pane nested inside another sidebar pane defers to it rather than stacking a\n// second tint (`.sidebar-pane .sidebar-pane`, _sidebars.scss). libadwaita also\n// recolours the MIDDLE pane of a three-pane setup through\n// `--secondary-sidebar-*`; that needs a split view nested in a split view to\n// mean anything, and no such composition is rendered yet, so the tokens are\n// defined (they are public API an app may already reference) and the selector\n// is left for whoever builds the composition that can test it.\n.sidebar-pane .sidebar-pane {\n background-color: transparent;\n color: inherit;\n}\n\n// `.content-pane` deliberately has NO rule here. libadwaita gives it no colour\n// of its own — the window shows through — and writing `transparent` would be a\n// claim, not a copy: it would override the `--window-bg-color` the navigation\n// split view sets on its own content pane for the case where the view is not a\n// window's direct child. The class is still applied, because being able to\n// select it is the point.\n\n// Collapsed: the sidebar floats ABOVE the content as a temporary panel, and\n// libadwaita gives it the window colours rather than the sidebar ones — a panel\n// over the content is not the same surface as a pane beside it.\n.overlay-pane {\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n}\n","// _overlay_split_view.scss — adw-overlay-split-view styling.\n//\n// The GEOMETRY is no longer here. It used to be four `transform: translateX(±100%)`\n// rules keyed on `.collapsed` / `.show-sidebar` / `.sidebar-end`, which can only\n// express the two END STATES of a reveal — so `show-progress` was 0 or 1, the\n// five `OVERLAY_SWIPE_*` conformance tables shipped unexercised, and the docked\n// hide slid the wrong way for an `end` sidebar because the JS wrote `marginRight`\n// whichever edge the pane was on.\n//\n// The element now writes the pane rect per frame from\n// `layoutOverlaySplitView`, which is continuous and knows the edge (including\n// under RTL, where a `start` sidebar is drawn on the RIGHT —\n// `get_start_or_end`, adw-overlay-split-view.c:227-234). What is left here is\n// what CSS genuinely owns: the box model, the stacking, and the transition that\n// smooths a programmatic toggle.\n//\n// Reference: refs/libadwaita/src/adw-overlay-split-view.c\n// Reference: refs/libadwaita/src/stylesheet/widgets/_sidebars.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Implemented as Web Component for @gjsify/adwaita-web.\n\nadw-overlay-split-view {\n display: flex;\n flex-direction: row;\n flex: 1;\n min-height: 0;\n position: relative;\n overflow: hidden;\n\n // NO background here. The pane colour comes from the `.sidebar-pane` /\n // `.overlay-pane` class the element toggles (see _panes.scss), because which\n // of the two a pane is in is exactly what decides its colour — hard-coding\n // `--sidebar-bg-color` on this private class painted a collapsed overlay,\n // which libadwaita puts on the window background, as though it were docked.\n // A flex column, as the content pane is, so the pane's widget fills it: GTK allocates the\n // sidebar the whole pane. A block pane sized a toolbar view by its content, and the\n // gallery's `.blp` sidebar list stopped 130px above the pane's bottom edge.\n .adw-osv-sidebar {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n flex-shrink: 0;\n z-index: 10;\n align-self: stretch;\n // Only `opacity` transitions. The offset is driven per frame, so animating\n // it here would fight the swipe: a gesture would lag its own finger.\n transition: opacity 0.2s ease;\n }\n\n // THE CONTAINER MINIMUM, as CSS spells it. `measure_uncollapsed`\n // (adw-overlay-split-view.c:558-563) is `trunc(sidebar_min * progress) +\n // content_min`, and a flex row reaches exactly that on its own PROVIDED the\n // content is allowed to claim its own minimum: the sidebar is `flex-shrink: 0`\n // with a `min-width` of `sidebar_min`, so the sum is the container's floor.\n //\n // `min-width: 0` was here instead — the flex idiom for \"let this be crushed so\n // an ellipsis can happen\" — which is precisely how the content pane could be\n // squeezed to nothing while the sidebar kept its whole width. A child that\n // needs to truncate can still ask for `min-width: 0` itself; the PANE may not.\n //\n // Not computed in JS: a measured number would need the content's min-content\n // size, which the DOM does not expose without a reflow, and the first attempt\n // used `scrollWidth` — the pane's CURRENT width — which pinned the view at\n // whatever it happened to be and stopped it responding to its breakpoint.\n .adw-osv-content {\n flex: 1;\n min-width: min-content;\n min-height: 0;\n display: flex;\n flex-direction: column;\n align-self: stretch;\n }\n\n // Docked — the sidebar sits in the flex row and the hidden part is taken off\n // its own edge by a negative margin the element computes.\n &:not(.collapsed) .adw-osv-sidebar {\n position: relative;\n }\n\n // Docked + sidebar-end — dock the sidebar to the far side of the content\n // (the Adw.OverlaySplitView { sidebar-position: end } layout). flex `order`\n // flips the visual order without changing the slotting DOM order.\n &:not(.collapsed).sidebar-end {\n .adw-osv-content {\n order: 1;\n }\n\n .adw-osv-sidebar {\n order: 2;\n }\n }\n\n // THE DIVIDER FOLLOWS THE VISUAL SIDE, not the logical one. `_sidebars.scss`\n // makes it `:dir()` × `.end` (:21-39), which is exactly the product\n // `.sidebar-at-visual-start` already carries: under RTL a `start` sidebar is\n // drawn on the right and its divider belongs on its left edge.\n &:not(.collapsed) {\n .adw-osv-sidebar {\n border-inline-end: none;\n border-inline-start: none;\n }\n\n &.sidebar-at-visual-start .adw-osv-sidebar {\n border-right: 1px solid var(--separator-color);\n }\n\n &:not(.sidebar-at-visual-start) .adw-osv-sidebar {\n border-left: 1px solid var(--separator-color);\n }\n }\n\n // Overlay (collapsed) — the sidebar floats above the content at the absolute\n // offset the element writes into `left`, which is the only property that can\n // carry a mid-swipe position.\n &.collapsed .adw-osv-sidebar {\n position: absolute;\n top: 0;\n bottom: 0;\n box-shadow: 0 0 12px rgb(0 0 0 / 25%);\n }\n\n // THE TWO RESTING STATES ARE CSS. Everything BETWEEN them is JS.\n //\n // Dropping these is what shipped the docs-site regression. The offset is\n // driven per frame from `layoutOverlaySplitView` — but a view that has never\n // been measured drives nothing, and an absolutely-positioned pane with no\n // `left` resolves to `left: 0` at full opacity. So a HIDDEN sidebar was\n // painted over the content at the wrong edge, on a page whose slideshow\n // builds each slide inside `display: none` and moves it in, so the first\n // measurement never arrived and this fallback was the whole rendering.\n //\n // Not a second copy of the arithmetic: 0% and 100% ARE the two ends the JS\n // interpolates between, and neither of them needs a pixel to say. The element\n // clears its inline placement whenever it has no measurement, which is what\n // hands control back to these rules instead of stranding a stale offset.\n &.collapsed {\n // Revealed: flush against the edge the pane is drawn on.\n &.sidebar-at-visual-start .adw-osv-sidebar {\n left: 0;\n right: auto;\n }\n\n &:not(.sidebar-at-visual-start) .adw-osv-sidebar {\n left: auto;\n right: 0;\n }\n\n // Hidden: entirely off that same edge, and untouchable while it is there.\n &:not(.show-sidebar) {\n .adw-osv-sidebar {\n opacity: 0;\n pointer-events: none;\n }\n\n &.sidebar-at-visual-start .adw-osv-sidebar {\n left: auto;\n right: 100%;\n }\n\n &:not(.sidebar-at-visual-start) .adw-osv-sidebar {\n left: 100%;\n right: auto;\n }\n }\n }\n\n // Docked and hidden — the pane takes no room in the row. The JS expresses\n // this as a negative margin so it can animate; unmeasured, the end state is\n // simply a pane of no width.\n &:not(.collapsed):not(.show-sidebar) .adw-osv-sidebar {\n width: 0;\n min-width: 0;\n overflow: hidden;\n opacity: 0;\n pointer-events: none;\n }\n\n // Backdrop — the click-outside shield. `hidden` is the element's, off\n // `shieldVisible`; the OPACITY is the shadow-helper progress, so it fades with\n // the reveal instead of appearing whole.\n .adw-osv-backdrop {\n display: none;\n }\n\n &.collapsed .adw-osv-backdrop:not([hidden]) {\n display: block;\n position: absolute;\n inset: 0;\n background: rgb(0 0 0 / 30%);\n z-index: 9;\n transition: opacity 0.2s ease;\n }\n}\n\n// Sidebar content layout helper — wraps the sidebar's children with the\n// standard Adwaita spacing scale (12px padding, 12px gap between groups).\n.adw-sidebar-content {\n padding: var(--spacing-m);\n display: flex;\n flex-direction: column;\n gap: var(--spacing-m);\n}\n\n// Sidebar toggle button — sidebar-show-symbolic icon via CSS mask\n.adw-sidebar-toggle-icon::after {\n content: '';\n position: absolute;\n inset: 0;\n background-color: currentColor;\n -webkit-mask-image: var(--icon-sidebar-show);\n mask-image: var(--icon-sidebar-show);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 16px 16px;\n mask-size: 16px 16px;\n -webkit-mask-position: center;\n mask-position: center;\n pointer-events: none;\n}\n","// _navigation_split_view.scss — adw-navigation-split-view styling (docked sidebar).\n//\n// Visibility is `data-pane-visible`, written by the element from\n// `update_navigation_stack` (adw-navigation-split-view.c:342-405), not from the\n// two flags. Two of that table's rules are not expressible as\n// `.collapsed.show-content`: a LONE child stays visible whatever `show-content`\n// says (:389-401), and with `sidebar-position: end` the CONTENT is the root page\n// so the sidebar is pushed ON TOP of it rather than replacing it. This file used\n// to key off the flags and got both wrong — a collapsed view with only a sidebar\n// rendered blank.\n//\n// Reference: refs/adwaita-web/adwaita-web/docs/widgets/navigationsplitview.md\n// Reference: refs/libadwaita/src/adw-navigation-split-view.c\n// Reference: refs/libadwaita/src/stylesheet/widgets/_sidebars.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-navigation-split-view {\n display: flex;\n flex-direction: row;\n min-height: 0;\n min-width: 0;\n flex: 1 1 auto;\n\n // NO background here — it comes from the `.sidebar-pane` class the element\n // applies while DOCKED (see _panes.scss). Collapsed, libadwaita builds no\n // pane bins at all and the sidebar is an ordinary full-window navigation\n // page; a background nailed to this private class made it sidebar-coloured\n // at every width.\n .adw-nsv-sidebar {\n display: flex;\n flex-direction: column;\n min-height: 0;\n flex-shrink: 0;\n }\n\n // The container MINIMUM, as CSS spells it: `measure_uncollapsed`\n // (adw-navigation-split-view.c:264-267) is `sidebar_min + content_min`, which\n // a flex row reaches by itself once the content may claim its own minimum.\n // `min-width: 0` — the flex idiom for \"let this be crushed\" — was here, which\n // is how the content pane could be squeezed to nothing while the sidebar,\n // being `flex-shrink: 0`, kept its whole width.\n .adw-nsv-content {\n display: flex;\n flex-direction: column;\n min-width: min-content;\n min-height: 0;\n flex: 1 1 auto;\n background-color: var(--window-bg-color);\n }\n\n // A pane's page fills the pane, as GTK allocates it the whole pane. The two panes are\n // flex columns and an `<adw-navigation-page>` is a block, so a page in one — which is\n // what a `.blp` writes, `sidebar: Adw.NavigationPage { … }` — was sized by its content:\n // the gallery's sidebar list stopped 118px short of the pane it sat in. Its child fills\n // it in turn, the way `.adw-navigation-page > *` does inside a navigation view.\n .adw-nsv-sidebar > adw-navigation-page,\n .adw-nsv-content > adw-navigation-page {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n\n > * {\n flex: 1 1 auto;\n min-height: 0;\n }\n }\n\n // `sidebar-position: end` docks the sidebar past the content. flex `order`\n // flips the visual order without changing the slotting DOM order.\n &.sidebar-end {\n .adw-nsv-content {\n order: 1;\n }\n\n .adw-nsv-sidebar {\n order: 2;\n }\n }\n\n // THE DIVIDER FOLLOWS THE VISUAL SIDE. `_sidebars.scss:1293-1302` makes it\n // `:dir()` × `.end`, which is the product `.sidebar-at-visual-start` carries:\n // under RTL a `start` sidebar is drawn on the right and its divider belongs on\n // its left edge. A fixed `border-right` drew it on the wrong side for half the\n // four combinations.\n &.sidebar-at-visual-start .adw-nsv-sidebar {\n border-right: 1px solid var(--separator-color);\n }\n\n &:not(.sidebar-at-visual-start) .adw-nsv-sidebar {\n border-left: 1px solid var(--separator-color);\n }\n\n // Collapsed: whichever pane the STACK puts on top fills the view, and the\n // other is not rendered at all.\n &.collapsed {\n [data-pane-visible='false'] {\n display: none;\n }\n\n .adw-nsv-sidebar[data-pane-visible='true'] {\n flex: 1 1 auto;\n max-width: none;\n border-right: none;\n border-left: none;\n }\n }\n}\n","// _carousel.scss — adw-carousel + its dot/line page indicators.\n//\n// A horizontal scroll-snap pager (adw-carousel) plus two indicator widgets that\n// bind to it. The indicators reproduce libadwaita's snapshot drawing as CSS: a\n// per-marker `--adw-carousel-progress` (0 = inactive, 1 = focused) lerps between\n// the inactive and selected size/opacity exactly as AdwCarousel does.\n//\n// Dots: DOTS_RADIUS 3 → DOTS_RADIUS_SELECTED 4 (6px → 8px), DOTS_SPACING 7,\n// DOTS_OPACITY 0.3 → DOTS_OPACITY_SELECTED 0.9, active fill = accent.\n// Lines: LINE_LENGTH 35, LINE_WIDTH 3, LINE_SPACING 5, LINE_OPACITY 0.3 →\n// LINE_OPACITY_ACTIVE 0.9, active fill = accent.\n//\n// Reference: refs/libadwaita/src/adw-carousel.c\n// Reference: refs/libadwaita/src/adw-carousel-indicator-dots.c\n// Reference: refs/libadwaita/src/adw-carousel-indicator-lines.c\n// Reference: refs/adwaita-web/adwaita-web/scss/_carousel_indicators.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-carousel {\n display: block;\n overflow: hidden;\n // A carousel's own width is its parent's to give, never its pages laid end to end. The\n // track is a row of full-width pages, so its max-content width is their SUM, and a\n // carousel in a stretching box (the gallery's `.blp`) pushed that box 274px past its\n // window. GTK measures a carousel by its widest page; CSS has no \"max of the children\"\n // for a scrolling row, so the width comes from outside, as a filled GTK allocation does.\n contain: inline-size;\n\n .adw-carousel-track {\n display: flex;\n flex-direction: row;\n height: 100%;\n overflow-x: auto;\n scroll-snap-type: x mandatory;\n // Hide the scrollbar — the carousel is paged, not scrolled by chrome.\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n // `100%` is the FALLBACK basis, used until the element has measured its pages:\n // libadwaita gives every page the largest natural size capped at the carousel\n // (adw-carousel.c:748-765), which is only 100% when a page asks for it all. The\n // element narrows `flex-basis` to the measured size and pads the track by the\n // half-gap that leaves, so the neighbours peek in as they do in GTK.\n //\n // `center` and not `start` for the same reason: the strip is drawn centred\n // (:801), and centre-snapping is what makes the track padding cancel out of the\n // scroll offset, leaving `scrollLeft = position * distance` exactly true.\n //\n // `min-width: 0` because a flex item floors at its own min-content size: without\n // it a page whose content is wider than the carousel keeps that width instead of\n // being capped at it, and GTK allocates the capped one (:754) and clips.\n .adw-carousel-page {\n flex: 0 0 100%;\n min-width: 0;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n scroll-snap-align: center;\n scroll-snap-stop: always;\n }\n}\n\n// Shared layout for both indicator kinds — a centered, horizontally-laid-out\n// row of markers (matching the AdwCarouselIndicator* widgets).\nadw-carousel-indicator-dots,\nadw-carousel-indicator-lines {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--spacing-xs);\n\n // The clickable marker resets the button chrome — the visible shape is drawn\n // by the per-kind rules below.\n button {\n appearance: none;\n -webkit-appearance: none;\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n cursor: pointer;\n flex: 0 0 auto;\n }\n}\n\n// Dots — DOTS_SPACING 7px between centers; base diameter 6px (radius 3) growing\n// to 8px (radius 4) on the focused dot, opacity ramping 0.3 → 0.9.\nadw-carousel-indicator-dots {\n gap: 7px;\n\n .adw-carousel-dot {\n width: 8px;\n height: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n // The painted disc lives in ::before so the 8px hit-target stays constant\n // while the visible dot grows from 6px → 8px with progress.\n &::before {\n content: '';\n display: block;\n // 6px + (8px - 6px) * progress\n width: calc(6px + 2px * var(--adw-carousel-progress, 0));\n height: calc(6px + 2px * var(--adw-carousel-progress, 0));\n border-radius: 50%;\n background-color: var(--window-fg-color);\n // 0.3 + (0.9 - 0.3) * progress\n opacity: calc(0.3 + 0.6 * var(--adw-carousel-progress, 0));\n transition:\n width 0.2s ease,\n height 0.2s ease,\n opacity 0.2s ease,\n background-color 0.2s ease;\n }\n\n &.active::before {\n background-color: var(--window-fg-color);\n }\n }\n}\n\n// Lines — LINE_LENGTH 35px, LINE_WIDTH 3px, LINE_SPACING 5px; opacity ramps\n// 0.3 → 0.9; the active line recolors to the accent.\nadw-carousel-indicator-lines {\n gap: 5px;\n\n .adw-carousel-line {\n width: 35px;\n height: 3px;\n border-radius: 1.5px;\n background-color: var(--window-fg-color);\n // 0.3 + (0.9 - 0.3) * progress\n opacity: calc(0.3 + 0.6 * var(--adw-carousel-progress, 0));\n transition:\n opacity 0.2s ease,\n background-color 0.2s ease;\n\n &.active {\n background-color: var(--window-fg-color);\n }\n }\n}\n","// _tab_view.scss — adw-tab-view styling (a dynamic tabbed container with a tab\n// bar header; one page visible at a time). The bar is a headerbar-colored strip\n// of rounded chips; the selected chip is raised onto the view background, the\n// way libadwaita draws AdwTabBar over an AdwTabView.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_tab-view.scss (tabbar/tabbox/tab)\n// Reference: refs/adwaita-web/adwaita-web/scss/_tabs.scss\n// Copyright (c) 2020-2022 Purism SPC / GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-tab-view {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n overflow: hidden;\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n\n // --- Tab bar (the AdwTabBar strip) ---\n // Faithful port of libadwaita's `tabbar` (refs/libadwaita _tab-view.scss +\n // _colors.scss): a headerbar-colored box with an inset bottom shade; tabs\n // FILL their slot as rounded rects and use the currentColor alpha fills —\n // selected 10% (hover 13%, active 19%), plain hover 7%, active 16%.\n .adw-tab-bar {\n display: flex;\n align-items: stretch;\n flex-shrink: 0;\n box-sizing: border-box;\n padding: 0 1px 1px;\n background-color: var(--headerbar-bg-color);\n color: var(--headerbar-fg-color);\n // libadwaita's inset bottom shade under the bar.\n box-shadow: inset 0 -1px var(--headerbar-shade-color);\n overflow-x: auto;\n scrollbar-width: none;\n\n &[hidden] {\n display: none;\n }\n }\n\n .adw-tab-box {\n display: flex;\n align-items: stretch;\n flex: 1 1 auto;\n padding: 4px 0;\n }\n\n // --- A single tab ---\n .adw-tab {\n position: relative;\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-xs);\n max-width: 200px;\n min-height: 30px;\n margin: 0;\n padding: 0 var(--spacing-m);\n border: none;\n border-radius: var(--button-radius);\n background-color: transparent;\n color: inherit;\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n line-height: 1;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n transition: background-color 150ms ease-in-out;\n\n &:hover {\n background-color: color-mix(in srgb, currentColor 7%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 16%, transparent);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: -2px;\n }\n\n // The selected tab — libadwaita's currentColor alpha fill covering the\n // whole tab slot (NOT a raised chip on the view background).\n &.active {\n background-color: color-mix(in srgb, currentColor 10%, transparent);\n\n &:hover {\n background-color: color-mix(in srgb, currentColor 13%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 19%, transparent);\n }\n }\n }\n\n // Thin separators between tabs, hidden next to the selected or hovered tab\n // (libadwaita tabbox > separator + its .hidden state).\n .adw-tab + .adw-tab::before {\n content: '';\n position: absolute;\n left: 0;\n top: 3px;\n bottom: 3px;\n width: 1px;\n background-color: currentColor;\n opacity: 0.2;\n transition: opacity 150ms ease-in-out;\n pointer-events: none;\n }\n\n .adw-tab.active + .adw-tab::before,\n .adw-tab + .adw-tab.active::before,\n .adw-tab:hover + .adw-tab::before,\n .adw-tab + .adw-tab:hover::before {\n opacity: 0;\n }\n\n .adw-tab-title {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n }\n\n // --- Icon + indicator slots (AdwTab update_icons) ---\n // Both are mask-image spans carrying `adw-icon adw-icon--<name>`; the element\n // toggles `hidden` from `tabIconState`, whose rules decide which of the two\n // shows — on a pinned tab the indicator REPLACES the icon.\n // Reference: refs/libadwaita/src/adw-tab.c (update_icons, :171-198)\n .adw-tab-icon,\n .adw-tab-indicator {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n\n &[hidden] {\n display: none;\n }\n }\n\n // `AdwTabPage:loading` swaps the icon image for an `AdwSpinnerPaintable`\n // (`update_icons`, adw-tab.c:172-190) — the SAME paintable `Adw.Spinner` uses.\n // So the tab mounts a real `<adw-spinner>` in the icon's slot and this block\n // only places it. It used to restate `border: 2px`,\n // `rgba(127, 127, 127, 0.25)` and `0.8s` under a comment claiming the geometry\n // and keyframes were adw-spinner's and \"not a second copy of them\" — which is\n // how it inherited every spinner defect independently.\n .adw-tab-spinner {\n flex: none;\n\n &[hidden] {\n display: none;\n }\n }\n\n // A pinned tab is a single-glyph chip: libadwaita hides both the title and the\n // close button at construction (refs/libadwaita/src/adw-tab.c:645-650). The\n // close button is gated in JS by `tabCloseVisible`, which carries the same rule.\n .adw-tab.pinned {\n padding: 0 var(--spacing-xs);\n\n .adw-tab-title {\n display: none;\n }\n }\n\n // `AdwTabPage:needs-attention` — the accent underline libadwaita animates in\n // (refs/libadwaita/src/adw-tab.c update_needs_attention).\n .adw-tab.needs-attention::after {\n content: '';\n position: absolute;\n bottom: 2px;\n left: 50%;\n width: 12px;\n height: 2px;\n transform: translateX(-50%);\n border-radius: 1px;\n background-color: var(--accent-bg-color);\n }\n\n // --- Close affordance (CSS-drawn \"×\"; `window-close` ships, see adw-tab-view.ts) ---\n // Presence is decided in JS by `tabCloseVisible` — `(hovering && fullyVisible)\n // || selected || dragging`, and never on a pinned tab (adw-tab.c:124, :645-650)\n // — which is why the `[hidden]` rule below is load-bearing rather than cosmetic.\n .adw-tab-close {\n box-sizing: border-box;\n flex-shrink: 0;\n position: relative;\n width: 18px;\n height: 18px;\n margin: 0;\n padding: 0;\n border: none;\n border-radius: 9999px;\n background-color: transparent;\n color: inherit;\n cursor: pointer;\n opacity: 0.7;\n transition:\n background-color 150ms ease-in-out,\n opacity 150ms ease-in-out;\n\n &[hidden] {\n display: none;\n }\n\n &:hover {\n opacity: 1;\n background-color: var(--button-hover-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n &::before,\n &::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 9px;\n height: 1.5px;\n background-color: currentColor;\n border-radius: 1px;\n }\n\n &::before {\n transform: translate(-50%, -50%) rotate(45deg);\n }\n\n &::after {\n transform: translate(-50%, -50%) rotate(-45deg);\n }\n }\n\n // Adw.TabBar `expand-tabs` — tabs stretch to fill the bar evenly.\n &[expand-tabs] .adw-tab {\n flex: 1 1 0;\n max-width: none;\n }\n\n // Web-specific escape hatch: static tab sets (e.g. documentation command\n // tabs) render no close affordance.\n &[no-close] .adw-tab-close {\n display: none;\n }\n\n // Single-tab bars draw no tab background (libadwaita keeps a lone tab\n // non-interactive-looking).\n .adw-tab-bar.single-tab .adw-tab {\n &,\n &:hover,\n &:active {\n background: none;\n }\n }\n\n // --- Pages (the AdwTabView content area) ---\n .adw-tab-view-pages {\n flex: 1 1 auto;\n position: relative;\n box-sizing: border-box;\n overflow: hidden;\n background-color: var(--view-bg-color);\n color: var(--view-fg-color);\n }\n\n .adw-tab-page {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n overflow: auto;\n\n &[hidden] {\n display: none;\n }\n\n &.active-page {\n display: block;\n }\n }\n}\n","// _view_switcher.scss — adw-view-switcher styling: an adaptive, tab-style\n// switcher (single `viewswitcher` node) above a content area showing one page\n// at a time. Buttons are always icon + label, laid out side by side (`.wide`)\n// or stacked (`.narrow`), matching libadwaita's policy style classes.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_view-switcher.scss (AdwViewSwitcher)\n// Reference: refs/adwaita-web/adwaita-web/scss/_viewswitcher.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-view-switcher {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n\n // The segmented button bar — the single `viewswitcher` node in libadwaita.\n // Homogeneous tabs (equal width via flex:1) with a small gutter between them.\n .adw-view-switcher-bar {\n display: flex;\n align-items: stretch;\n gap: 3px; // libadwaita's `border-spacing: 3px`\n min-height: 34px;\n }\n\n // Each tab is a flat, transparent toggle that lights up with a subtle\n // neutral fill when hovered and a slightly stronger one while selected.\n .adw-view-switcher-button {\n box-sizing: border-box;\n display: inline-flex;\n flex: 1 1 0; // homogeneous — every tab gets equal width\n // `min-width: auto` is the flex-item default, and it floors every tab at\n // its own min-content width, so a long title made ITS tab wider than the\n // others and homogeneity silently stopped holding at exactly the widths\n // where it matters. GTK's homogeneous box has no such floor\n // (adw-view-switcher.c:475) and the labels ellipsize instead\n // (adw-view-switcher-button.ui:42), which is what the 0 restores.\n min-width: 0;\n align-items: center;\n justify-content: center;\n margin: 0;\n padding: 2px 12px;\n border: none;\n border-radius: var(--button-radius);\n background-color: transparent;\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n font-weight: 700;\n line-height: 1.2;\n cursor: pointer;\n transition:\n color 0.2s ease,\n background-color 0.2s ease;\n user-select: none;\n -webkit-user-select: none;\n\n // A page with neither title nor icon has NO button at all\n // (adw-view-switcher.c:178), spelled here as the `hidden` attribute.\n // Re-assert it as an AUTHOR rule: the UA `[hidden] { display: none }`\n // loses to this block's own author `display: inline-flex` (cascade ORIGIN\n // beats specificity), so without this a hidden button stays on screen.\n &[hidden] {\n display: none;\n }\n\n .adw-icon {\n width: 16px;\n height: 16px;\n flex: none;\n }\n\n .adw-view-switcher-label {\n // Same min-content floor as the button, one level down: without it the\n // `overflow: hidden` box never shrinks, so the ellipsis never appears\n // and the label pushes its tab wide instead.\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // AdwIndicatorBin's badge — the unread count, or a bare dot when only\n // `needs-attention` is set.\n // Reference: refs/libadwaita/src/adw-indicator-bin.c\n .adw-view-switcher-indicator {\n display: inline-flex;\n box-sizing: border-box;\n align-items: center;\n justify-content: center;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n border-radius: 8px;\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n font-size: 0.625rem;\n font-weight: 700;\n line-height: 1;\n\n &[hidden] {\n display: none;\n }\n\n &.needs-attention {\n min-width: 6px;\n width: 6px;\n height: 6px;\n padding: 0;\n border-radius: 3px;\n }\n }\n\n // AdwViewSwitcherButton is a `.flat` GtkToggleButton\n // (adw-view-switcher-button.ui:5-7), so its five states are\n // `%button_basic_flat`'s currentColor alpha ladder, NOT the filled-button\n // tokens: hover 7% / pressed 16%, and checked 10% / 13% / 19%\n // (_buttons.scss:250-269 over _colors.scss:268-272). The same ladder the\n // tab bar and the sidebar rows already spell out.\n //\n // It used to spend the FILLED-button tokens here: `--button-active-color`\n // (.19 light / .22 dark) for the selected tab AND for its hover, and\n // `--button-hover-color` (.13 / .15) for an unselected hover. Two defects\n // in one rule. The selected tab sat at the shade upstream keeps for HELD\n // DOWN, so it read as permanently pressed; and pinning its hover to that\n // same value left the selected tab answering the pointer with nothing.\n // Those tokens are also a FIXED rgba, so unlike the ladder they do not\n // follow the foreground of whatever bar the switcher was dropped into.\n &:hover {\n background-color: color-mix(in srgb, currentColor 7%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 16%, transparent);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: -2px;\n }\n\n // The selected view: a neutral fill over the whole tab. libadwaita leaves\n // the foreground alone here, so no accent recolouring of icon or label.\n &.active {\n background-color: color-mix(in srgb, currentColor 10%, transparent);\n\n &:hover {\n background-color: color-mix(in srgb, currentColor 13%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 19%, transparent);\n }\n }\n }\n\n // Wide policy — icon and label side by side.\n &.wide .adw-view-switcher-button {\n flex-direction: row;\n gap: var(--spacing-xs);\n }\n\n // Narrow policy — icon stacked above a smaller label, the compact layout\n // libadwaita drops to in a header bar at narrow window widths.\n &.narrow {\n .adw-view-switcher-bar {\n min-height: 6px;\n }\n\n .adw-view-switcher-button {\n flex-direction: column;\n gap: 1px;\n // The narrow box carries NO horizontal padding upstream: only\n // `padding-top: 4px`, and the 3px per side plus the 2px below sit on\n // the LABEL (_view-switcher.scss:15-24). Aggregated onto the button\n // here because this port has no separate box node between button and\n // label, which is the same geometry for every label at least as wide\n // as the 16px icon. Overriding only the vertical halves left the wide\n // policy's `2px 12px` standing, so a narrow tab spent 24px on side\n // padding where libadwaita spends 6px.\n padding: 4px 3px 2px;\n font-size: 0.75rem;\n\n .adw-view-switcher-label {\n min-height: 18px;\n line-height: 18px;\n }\n }\n }\n\n // The paired content area showing the active page: the Adw.ViewStack half of\n // this composite, and it draws NOTHING. libadwaita's recommended arrangement\n // is an AdwToolbarView whose top bar holds the switcher and whose `content`\n // is the bare AdwViewStack (adw-view-switcher.c:41-73); no rule in\n // `_view-switcher.scss`, `_toolbars.scss` or `_views.scss` frames that stack,\n // and the standalone `adw-view-stack` element here says the same in its own\n // words.\n //\n // It used to be a card: a 1px separator outline, a 12px radius, a 9px gap\n // under the row and 12px of padding inside. On a page that gives the switcher\n // its full width, that outline runs down the container's own left and right\n // edges with its corners curling away from them, which reads as a broken\n // frame rather than as a view. libadwaita has no line between the row and the\n // content at all: a FLAT top bar (the default, adw-toolbar-view.c:731) has no\n // background and no shade, and the only shading that ever appears is the\n // scroller's undershoot, which `_scrolling.scss` owns per scroller for the\n // reason `_toolbar_view.scss` records.\n //\n // `display: flex` is load-bearing, not decoration: this box is the stack, and\n // `adw-view-stack` is a flex COLUMN for the same reason. Without it the box\n // stays block-level, its child's `flex: 1 1 auto` below has no flex container\n // to answer and is silently inert, and the visible page keeps stopping at its\n // own text in a pane many times its height.\n .adw-view-switcher-content {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n }\n\n // Mirrors `.adw-view-stack-child`: the visible page is handed the whole\n // content area, which is what lets a status page centre itself in it the way\n // AdwViewStack allocates to its visible child.\n .adw-view-switcher-page {\n display: none;\n\n &.active-view {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n }\n }\n}\n","// _inline_view_switcher.scss — adw-inline-view-switcher styling (a compact view\n// switcher: a toggle-group-style bar of one toggle per page over a single\n// stacked content area, with the active toggle drawn as the raised Adwaita\n// active-toggle chip). The bar's per-display-mode sizing (labels / icons / both)\n// mirrors libadwaita's `inline-view-switcher > toggle-group.{labels,icons,both}`.\n// Reference: refs/libadwaita/src/adw-inline-view-switcher.c (AdwInlineViewSwitcher)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_toggle-group.scss (inline-view-switcher > toggle-group)\n// Reference: refs/adwaita-web/adwaita-web/scss/_viewswitcher.scss\n// Copyright (c) 2023 Maximiliano Sandoval / 2024 GNOME Foundation Inc. (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// The active toggle uses a white-on-fg \"raised\" chip — the same tokens the\n// toggle-group uses (defined there; _theme.scss overrides them for dark).\n\nadw-inline-view-switcher {\n // libadwaita's ---group-padding: a small inset so the active chip floats\n // inside the group's pill, leaving a hairline of group background around it.\n --group-padding: 3px;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n\n // The switcher bar — a toggle-group pill, sized to its content.\n .adw-inline-view-switcher-group {\n display: inline-flex;\n box-sizing: border-box;\n align-items: stretch;\n gap: var(--group-padding);\n padding: var(--group-padding);\n border-radius: var(--button-radius);\n background-color: var(--button-bg-color);\n }\n\n // Each toggle is a button-shaped chip with the group's inner radius.\n .adw-inline-view-switcher-toggle {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-xs);\n min-width: 34px;\n min-height: 28px;\n margin: 0;\n padding: 4px 11px;\n border: none;\n border-radius: calc(var(--button-radius) - var(--group-padding));\n background-color: transparent;\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n transition:\n color 0.2s ease,\n background-color 0.2s ease,\n box-shadow 0.2s ease;\n user-select: none;\n -webkit-user-select: none;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n // The active toggle — a raised white chip, the way libadwaita draws it.\n &.active {\n background-color: var(--active-toggle-bg-color);\n color: var(--active-toggle-fg-color);\n box-shadow:\n 0 1px 3px 1px rgba(0, 0, 6, 0.07),\n 0 2px 6px 2px rgba(0, 0, 6, 0.03);\n\n &:hover {\n background-color: var(--active-toggle-bg-color);\n }\n }\n }\n\n // The switcher's symbolic icon — a currentColor mask, sized like a toolbar\n // icon (matches the .adw-icon base used across @gjsify/adwaita-web).\n .adw-inline-view-switcher-icon {\n display: inline-block;\n width: 16px;\n height: 16px;\n flex: none;\n background-color: currentColor;\n mask-size: contain;\n mask-repeat: no-repeat;\n mask-position: center;\n -webkit-mask-size: contain;\n -webkit-mask-repeat: no-repeat;\n -webkit-mask-position: center;\n }\n\n .adw-inline-view-switcher-label {\n white-space: nowrap;\n }\n\n // AdwIndicatorBin's badge — the unread count, or a bare dot when only\n // `needs-attention` is set.\n // Reference: refs/libadwaita/src/adw-indicator-bin.c\n .adw-inline-view-switcher-indicator {\n display: inline-flex;\n box-sizing: border-box;\n align-items: center;\n justify-content: center;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n border-radius: 8px;\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n font-size: 0.625rem;\n font-weight: 700;\n line-height: 1;\n\n // Author rule, not the UA one: the `display: inline-flex` above is also\n // an author rule and would otherwise keep an empty badge on screen\n // (cascade ORIGIN beats specificity — the same trap the bar hit).\n &[hidden] {\n display: none;\n }\n\n &.needs-attention {\n min-width: 6px;\n width: 6px;\n height: 6px;\n padding: 0;\n border-radius: 3px;\n }\n }\n\n // The stacked content area below the bar — exactly one page is visible.\n .adw-inline-view-switcher-pages {\n width: 100%;\n }\n\n .adw-inline-view-switcher-page {\n &:not(.active-view) {\n display: none;\n }\n }\n\n // Per-display-mode sizing, mirroring libadwaita's\n // inline-view-switcher > toggle-group.{icons,labels,both}.\n .adw-inline-view-switcher-group.icons .adw-inline-view-switcher-toggle {\n min-width: 34px;\n padding-left: 0;\n padding-right: 0;\n }\n\n .adw-inline-view-switcher-group.labels .adw-inline-view-switcher-toggle {\n min-width: calc(18px + var(--group-padding) * 2);\n }\n\n // Round — group + toggles become pill-shaped.\n &.round {\n .adw-inline-view-switcher-group {\n border-radius: 17px;\n }\n\n .adw-inline-view-switcher-toggle {\n border-radius: calc(17px - var(--group-padding));\n padding-left: calc(15px - var(--group-padding));\n padding-right: calc(15px - var(--group-padding));\n }\n }\n\n // Flat — no group background; the active toggle uses a subtle fill instead\n // of the raised white chip.\n &.flat {\n --group-padding: 0px;\n\n .adw-inline-view-switcher-group {\n padding: 0;\n background: none;\n }\n\n .adw-inline-view-switcher-toggle {\n border-radius: var(--button-radius);\n\n &.active {\n background-color: var(--button-active-color);\n color: inherit;\n box-shadow: none;\n\n &:hover {\n background-color: var(--button-active-color);\n }\n }\n }\n\n &.round .adw-inline-view-switcher-toggle {\n border-radius: 17px;\n }\n }\n}\n","// _view_stack.scss — adw-view-stack styling: a standalone named-page content\n// container that shows exactly one page at a time (the web counterpart of\n// Adw.ViewStack, decoupled from any switcher). It carries no chrome of its own —\n// a paired adw-view-switcher-bar (or a header-bar switcher) drives selection.\n// Reference: refs/libadwaita/src/adw-view-stack.c (AdwViewStack)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-view-stack {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n // vexpand-equivalent — fill the space a switcher shell allots to content.\n flex: 1 1 auto;\n min-height: 0;\n\n // Exactly one child is shown; the rest are laid out of flow. `hidden` is set\n // in JS too, but the class keeps the visible page a flex child that grows.\n .adw-view-stack-child {\n display: none;\n\n &.active-view {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n }\n }\n}\n","// _view_switcher_bar.scss — adw-view-switcher-bar styling: the narrow BOTTOM\n// bar of homogeneous icon-over-label buttons bound to an adw-view-stack (the web\n// counterpart of Adw.ViewSwitcherBar). It sits at the window bottom with a top\n// hairline over a headerbar-toned surface, mirroring libadwaita's `.narrow`\n// view-switcher inside an actionbar. The active button's label is accent-tinted.\n// Reference: refs/libadwaita/src/adw-view-switcher-bar.c (AdwViewSwitcherBar)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_view-switcher.scss (.narrow policy)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_toolbars.scss (actionbar top border)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-view-switcher-bar {\n display: block;\n\n // `revealed` drives visibility by toggling the `hidden` attribute\n // (_applyRevealed → this.hidden). Re-assert display:none for [hidden] as an\n // AUTHOR rule: the UA `[hidden] { display: none }` loses to this block's own\n // author `display: block` (cascade ORIGIN beats specificity), so without this\n // an unrevealed bar would stay visible. Author + higher specificity → wins.\n &[hidden] {\n display: none;\n }\n\n box-sizing: border-box;\n // The bottom bar over a headerbar-toned surface with a top hairline (the\n // libadwaita `actionbar` inset top border), NOT a bottom border.\n background-color: var(--headerbar-bg-color);\n border-top: 1px solid var(--separator-color);\n padding: 7px 0; // libadwaita `viewswitcherbar > box` vertical padding\n\n // The homogeneous button row — every button gets equal width.\n .adw-view-switcher-bar-box {\n display: flex;\n align-items: stretch;\n // The `.narrow` view-switcher drops to a 6px min-height (icon-over-label).\n min-height: 6px;\n }\n\n // Each button — icon stacked above a small label, a flat transparent toggle\n // that fills on hover/active and marks the selected page with an accent\n // label (the neutral fill stays the same across states, like libadwaita).\n .adw-view-switcher-bar-button {\n box-sizing: border-box;\n display: inline-flex;\n flex: 1 1 0; // homogeneous — equal width\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 1px;\n margin: 0;\n padding: 4px 3px 2px;\n border: none;\n border-radius: var(--button-radius);\n background-color: transparent;\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: 0.75rem;\n font-weight: 700;\n line-height: 1.2;\n cursor: pointer;\n transition:\n color 0.2s ease,\n background-color 0.2s ease;\n user-select: none;\n -webkit-user-select: none;\n\n // Same cascade trap as the bar itself: a page with neither title nor\n // icon has no button (adw-view-switcher.c:178), and the UA\n // `[hidden] { display: none }` loses to this block's author\n // `display: inline-flex` unless it is re-asserted here.\n &[hidden] {\n display: none;\n }\n\n .adw-view-switcher-bar-icon {\n width: 16px;\n height: 16px;\n flex: none;\n }\n\n .adw-view-switcher-bar-label {\n min-height: 18px;\n line-height: 18px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // AdwIndicatorBin's badge — see refs/libadwaita/src/adw-indicator-bin.c.\n .adw-view-switcher-bar-indicator {\n display: inline-flex;\n box-sizing: border-box;\n align-items: center;\n justify-content: center;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n border-radius: 8px;\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n font-size: 0.625rem;\n font-weight: 700;\n line-height: 1;\n\n &[hidden] {\n display: none;\n }\n\n &.needs-attention {\n min-width: 6px;\n width: 6px;\n height: 6px;\n padding: 0;\n border-radius: 3px;\n }\n }\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: -2px;\n }\n\n // The selected page — its label turns accent-coloured. (The icon stays\n // theme-fg, matching the NS twin's documented fidelity note.)\n &.active {\n color: var(--accent-color);\n\n .adw-view-switcher-bar-label {\n color: var(--accent-color);\n }\n }\n }\n}\n","// _navigation_view.scss — adw-navigation-view styling (a page-based navigation\n// container; one page visible at a time, controlled with push/pop). The visible\n// page fills the view on the window background; an automatic back button is\n// drawn flat at the start of the visible page's header bar.\n// Reference: refs/libadwaita/src/adw-navigation-view.c (css node \"navigation-view\")\n// Reference: refs/adwaita-web/adwaita-web/docs/widgets/navigationview.md\n// Copyright (c) 2022-2023 Purism SPC / GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-navigation-view {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n position: relative;\n overflow: hidden;\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n\n // The page stack — fills the view when it is given a height, and MEASURES the\n // visible page when it is not. A flex column rather than a positioning\n // context: the page is an in-flow item, so its content reaches the view.\n .adw-navigation-view-pages {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n position: relative;\n box-sizing: border-box;\n min-height: 0;\n overflow: hidden;\n }\n\n // A single navigation page — the visible one fills the view, the rest are\n // `display: none`.\n //\n // IN FLOW, not absolute. It was `position: absolute; inset: 0` under a comment\n // saying it had to be \"so a transition can overlap two pages\" — but two pages\n // never overlap here: `adw-navigation-view.ts` marks every page but the\n // visible one `[hidden]`, which is `display: none` below, and the push\n // animation runs on `.visible-page` alone. So the absolute positioning bought\n // an overlap that does not happen, and what it cost was the HEIGHT: an\n // absolutely-positioned child contributes nothing to its parent, so the page\n // stack measured 0, the view above it measured 0, and the page — `inset: 0` of\n // a zero-height parent — measured 0 in turn. A closed circle.\n //\n // Inside a window that never showed, because a definite height arrived from\n // outside. `<adw-about-dialog>` is the case where none does: its sheet is\n // `position: fixed` with a width and no height, exactly as\n // `adw-about-dialog.ui` declares it (`content-width` 360, no content-height —\n // libadwaita takes the height from the content). The whole dialog rendered\n // invisible, with a header bar inside it genuinely measuring 47px.\n //\n // `flex: 1 1 auto` keeps the fill: given a height the page still grows into\n // it; without one it reports its content.\n .adw-navigation-page {\n box-sizing: border-box;\n position: relative;\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n overflow: auto;\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n\n &[hidden] {\n display: none;\n }\n\n &.visible-page {\n display: flex;\n }\n\n // Let a page whose direct child fills (a toolbar-view / status-page)\n // stretch to the full height.\n > * {\n flex: 1 1 auto;\n min-height: 0;\n }\n }\n\n // The injected automatic back button — flat, sits at the start of the visible\n // page's header bar (mirrors AdwHeaderBar's grown-in back button).\n .adw-navigation-back-button {\n flex-shrink: 0;\n }\n\n // Slide transition for the visible page when transitions are animated. The\n // entering page fades up from a slight horizontal offset (LTR push), matching\n // libadwaita's spring-driven slide closely enough for the web target.\n &.animated .adw-navigation-page.visible-page {\n animation: adw-navigation-page-in 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);\n }\n}\n\n@keyframes adw-navigation-page-in {\n from {\n opacity: 0;\n transform: translateX(12px);\n }\n\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n","// _bottom_sheet.scss — adw-bottom-sheet styling (a content area with a sheet\n// that slides up from the bottom edge over the content, with an overlaid drag\n// handle). Mirrors libadwaita's AdwBottomSheet CSS node tree: a persistent\n// content layer, a dimming layer that fades in over it while open (modal), and\n// the sheet itself anchored to the bottom edge with rounded top corners + the\n// pill-shaped drag handle.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_bottom-sheet.scss\n// (dimming / sheet box-shadow / drag-handle pill / dialog top radius)\n// Reference: refs/libadwaita/src/adw-bottom-sheet.c (open / modal / can-close)\n// Copyright (c) 2023-2024 GNOME Foundation Inc. (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-bottom-sheet {\n display: block;\n position: relative;\n box-sizing: border-box;\n overflow: hidden;\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n\n // --- Persistent content layer ---\n // A grid rather than a block, as GTK's content bin allocates its child the whole area and\n // lets the child's `halign` / `valign` place it (`_widget.scss`); a block container\n // resolves a vertical auto margin to zero.\n .adw-bottom-sheet-content {\n display: grid;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n }\n\n // --- Dimming layer (modal scrim over the content) ---\n // libadwaita: > dimming { background: shade-color × 2 }. Non-interactive +\n // transparent when the sheet is closed.\n .adw-bottom-sheet-dimming {\n position: absolute;\n inset: 0;\n box-sizing: border-box;\n background-color: rgba(0, 0, 6, 0.32);\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n transition:\n opacity 200ms ease,\n visibility 0s linear 200ms;\n\n &.visible {\n opacity: 1;\n visibility: visible;\n pointer-events: auto;\n transition:\n opacity 200ms ease,\n visibility 0s;\n }\n }\n\n // --- The slide-up sheet ---\n // Anchored to the bottom edge, full-width, rounded top corners (dialog\n // radius), slid off-screen when closed. The spring-driven AdwBottomSheet uses\n // a translate; the web port uses an eased transform for the same effect.\n .adw-bottom-sheet-sheet {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n box-sizing: border-box;\n max-height: 100%;\n overflow: auto;\n background-color: var(--view-bg-color);\n color: var(--view-fg-color);\n border-top-left-radius: var(--window-radius);\n border-top-right-radius: var(--window-radius);\n box-shadow:\n 0 0 14px 2px rgba(0, 0, 6, 0.03),\n 0 0 5px 2px rgba(0, 0, 6, 0.1),\n 0 0 0 1px rgba(0, 0, 0, 0.05);\n transform: translateY(100%);\n transition:\n transform 250ms ease,\n box-shadow 250ms ease;\n will-change: transform;\n }\n\n // --- Drag handle (overlaid pill at the top of the sheet) ---\n // libadwaita: > drag-handle { min-width 54px; min-height 6px; margin 15px;\n // border-radius 99px; background currentColor @ 25% }.\n // It is built with can_focus = FALSE and can_target = FALSE\n // (adw-bottom-sheet.c:1197-1198) — a decorative pill, not a button;\n // `pointer-events: none` is can_target in CSS. The `cursor: pointer` + focus\n // ring that used to sit here belonged to a close button this widget never had.\n .adw-bottom-sheet-drag-handle {\n flex-shrink: 0;\n box-sizing: border-box;\n width: 54px;\n min-height: 6px;\n height: 6px;\n margin: 15px auto;\n border-radius: 99px;\n background-color: color-mix(in srgb, currentColor 25%, transparent);\n pointer-events: none;\n }\n\n .adw-bottom-sheet-sheet-body {\n box-sizing: border-box;\n }\n\n // --- Bottom bar (the collapsed form the sheet morphs out of) ---\n // libadwaita: > sheet > stack > button — a flat, radius-less button filling the bar,\n // with the sheet's top radius carried over, and `.inert` stripping only the feedback.\n // It is a real button because upstream's bin is one (adw-bottom-sheet.c:1203).\n .adw-bottom-sheet-bottom-bar {\n display: block;\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n min-height: 0;\n padding: 0;\n border: none;\n border-radius: 0;\n font: inherit;\n font-weight: inherit;\n color: inherit;\n background: none;\n box-shadow: none;\n cursor: pointer;\n\n &:hover {\n background-color: color-mix(in srgb, currentColor 5%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 10%, transparent);\n }\n\n // can-open off. The button stays enabled and focusable — only the feedback goes,\n // because upstream refuses the click in the handler, not in the widget\n // (adw-bottom-sheet.c:2033-2036).\n &.inert {\n cursor: default;\n\n &:hover,\n &:active {\n background: none;\n }\n }\n }\n\n // --- Open state ---\n &.open .adw-bottom-sheet-sheet {\n transform: translateY(0);\n }\n\n // --- Bottom-bar state ---\n // The sheet bin sits at rest with only the bar exposed. This transform is the port's\n // `gtk_widget_set_child_visible` for the bin, so it is what `reveal-bottom-bar` takes\n // away: no class here, and the bin slides off screen with the bar still inside it.\n &.showing-bottom-bar .adw-bottom-sheet-sheet {\n transform: translateY(0);\n box-shadow:\n 0 0 0 1px rgba(0, 0, 6, 0.06),\n 0 2px 8px 2px rgba(0, 0, 6, 0.06),\n 0 3px 20px 10px rgba(0, 0, 6, 0.05);\n }\n\n // A non-modal sheet must not block the content beneath it.\n &:not(.modal) .adw-bottom-sheet-dimming {\n display: none;\n }\n}\n","// _sidebar.scss — adw-sidebar styling (a selectable navigation sidebar built\n// from titled sections of icon + title + subtitle items). In sidebar mode it\n// renders as the flat AdwSidebar navigation list (`.navigation-sidebar`); in\n// page mode it renders as boxed lists with a trailing chevron on each row (the\n// AdwPreferencesPage look the native widget switches to when collapsed).\n// Reference: refs/libadwaita/src/stylesheet/widgets/_sidebars.scss (.navigation-sidebar, sidebar)\n// Reference: refs/libadwaita/src/adw-sidebar.c (row/header/section structure)\n// Copyright (c) 2025 GNOME Foundation Inc. (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-sidebar {\n display: block;\n box-sizing: border-box;\n overflow-y: auto;\n background-color: var(--sidebar-bg-color, var(--window-bg-color));\n color: var(--sidebar-fg-color, var(--window-fg-color));\n\n .adw-sidebar-list {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n // libadwaita's menu margins around the navigation list.\n padding: var(--spacing-xs) 0;\n }\n\n .adw-sidebar-section {\n display: flex;\n flex-direction: column;\n }\n\n // --- Section headers (heading or separator) ---\n .adw-sidebar-section-header {\n &[hidden] {\n display: none;\n }\n\n // Untitled section → a horizontal separator before its rows (the way the\n // AdwSidebar header stack shows its \"separator\" child).\n &.separator {\n height: 1px;\n margin: var(--spacing-xs) var(--spacing-s);\n background-color: var(--separator-color, var(--card-shade-color));\n }\n\n &.has-title {\n padding: var(--spacing-s) calc(var(--spacing-s) + 6px) var(--spacing-xs);\n\n // The first header sits flush with the top (mirrors `.header.first`).\n &.first {\n padding-top: 0;\n }\n }\n }\n\n .adw-sidebar-section-heading {\n font-size: var(--font-size-small);\n font-weight: 700;\n opacity: var(--dim-opacity);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // --- A single item row ---\n //\n // NO `width: 100%`. The list is a column flex container, so a row already\n // stretches to it — and stretching SUBTRACTS the row's own margins, which is\n // what puts the same 6px of air on both sides. `width: 100%` resolves against\n // the containing block INSTEAD, which does not know about the margins, so\n // every row came out 12px too wide: inset 6px on the left, hanging 6px past\n // the right edge with its rounded corners cut off by the pane. Visible on any\n // selected or hovered row, because only a filled row shows where it ends.\n .adw-sidebar-item {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--spacing-m);\n min-height: 36px;\n // The native row has a context menu, so padding lives on the inner box and\n // the row itself carries the menu margin + radius.\n margin: 0 var(--spacing-xs) 2px;\n padding: 3px 14px;\n border: none;\n border-radius: var(--button-radius, 6px);\n background-color: transparent;\n color: inherit;\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n text-align: start;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n transition:\n background-color 150ms ease-in-out,\n color 150ms ease-in-out;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color, var(--button-hover-color));\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: -2px;\n }\n\n // Selected row — a neutral filled highlight; libadwaita's AdwSidebar\n // selection is a subtle fill with the normal foreground, not accent.\n &.selected {\n background-color: var(--button-active-color);\n color: var(--window-fg-color);\n\n &:hover,\n &:active {\n background-color: var(--button-active-color);\n }\n }\n }\n\n .adw-sidebar-item-icon {\n flex-shrink: 0;\n\n &[hidden] {\n display: none;\n }\n }\n\n .adw-sidebar-item-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n flex: 1 1 auto;\n min-width: 0;\n }\n\n .adw-sidebar-item-title {\n font-size: var(--font-size-base);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &[hidden] {\n display: none;\n }\n }\n\n .adw-sidebar-item-subtitle {\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &[hidden] {\n display: none;\n }\n }\n\n // The trailing chevron is only drawn in page (boxed-list) mode.\n .adw-sidebar-item-arrow {\n flex-shrink: 0;\n opacity: var(--dim-opacity);\n display: none;\n }\n\n // --- Page mode (boxed lists) ---\n // Sections become bordered, rounded cards (the AdwPreferencesGroup look) and\n // each row gains its trailing chevron; selection no longer fills the row with\n // the accent color, matching how the native widget drops the list selection\n // in page mode.\n &.page {\n .adw-sidebar-list {\n padding: var(--spacing-m);\n gap: var(--spacing-xs);\n }\n\n .adw-sidebar-section {\n border: 1px solid var(--card-shade-color);\n border-radius: var(--card-radius, 12px);\n background-color: var(--card-bg-color);\n color: var(--card-fg-color);\n overflow: hidden;\n }\n\n .adw-sidebar-section-header.has-title {\n padding: var(--spacing-m) var(--spacing-xs) var(--spacing-xs);\n\n &.first {\n padding-top: var(--spacing-m);\n }\n }\n\n .adw-sidebar-item {\n margin: 0;\n padding: var(--spacing-s) var(--spacing-m);\n border-radius: 0;\n border-bottom: 1px solid var(--card-shade-color);\n\n &:last-child {\n border-bottom: none;\n }\n\n &.selected {\n background-color: transparent;\n color: var(--card-fg-color);\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n }\n }\n\n .adw-sidebar-item-arrow {\n display: inline-block;\n }\n }\n}\n\n// `.navigation-sidebar` — the documented class a consumer puts on its OWN list\n// to get the sidebar look without `<adw-sidebar>`: transparent background,\n// rounded and padded items, and a NEUTRAL selection instead of an accent one\n// (style-classes.md \"Sidebars\", `_sidebars.scss:113-205`).\n//\n// `<adw-sidebar>` renders the same look from its own structure classes above; it\n// is not rewritten in terms of this class, because its rows carry an icon,\n// title, subtitle and arrow that a bare list does not have. What IS shared is\n// the metric: `$menu_margin` (6px) around the list and on each row, and\n// `$button_radius` corners.\n.navigation-sidebar {\n &,\n &.view,\n &.view:disabled {\n background-color: transparent;\n color: inherit;\n }\n\n &.background {\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n }\n\n padding-top: var(--spacing-xs);\n // 6px minus the last row's own 2px margin, upstream's `$menu_margin - 2px`.\n padding-bottom: 4px;\n\n > * {\n margin: 0 var(--spacing-xs) 2px;\n padding: 3px 14px;\n border-radius: var(--button-radius);\n }\n\n > .activatable {\n &:hover {\n background-color: color-mix(in srgb, currentColor 7%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 16%, transparent);\n }\n }\n\n > [aria-selected='true'],\n > .selected {\n background-color: color-mix(in srgb, currentColor 10%, transparent);\n\n &:hover {\n background-color: color-mix(in srgb, currentColor 13%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 19%, transparent);\n }\n }\n}\n","// _about_dialog.scss — adw-about-dialog styling (a modal AdwDialog floating\n// sheet hosting the About navigation view: a full-cover scrim + a centred,\n// rounded, scrollable sheet box). Mirrors libadwaita's AdwDialog floating-sheet\n// node tree (dimming + rounded sheet with the outline + layered shadow) and the\n// AdwAboutDialog main page layout (large icon, title-1 name, dimmed developer\n// line, the version pill, then the navigation rows).\n// Reference: refs/libadwaita/src/stylesheet/widgets/_dialogs.scss\n// (floating-sheet > dimming / > sheet radius + box-shadow + outline)\n// Reference: refs/libadwaita/src/adw-about-dialog.ui (page tree, content-width 360)\n// Reference: refs/adwaita-web/adwaita-web/scss/_about_dialog.scss (web layout)\n// Copyright (c) 2022-2024 GNOME Foundation Inc. / Purism SPC (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-about-dialog {\n // The host is inert until presented; `.open` reveals the scrim + sheet.\n display: none;\n\n &.open {\n display: block;\n }\n\n // --- Full-cover modal scrim ---\n // libadwaita: floating-sheet > dimming { background shade-color × 2 }.\n .adw-about-dialog-scrim {\n position: fixed;\n inset: 0;\n z-index: 1000;\n background-color: rgba(0, 0, 6, 0.32);\n animation: adw-about-dialog-scrim-in 200ms ease;\n }\n\n // --- Centred floating sheet ---\n // libadwaita: floating-sheet > sheet { dialog radius; layered shadow; 1px\n // outline -1px offset }. content-width 360 → a comfortable ~360px sheet.\n .adw-about-dialog-sheet {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n width: 360px;\n max-width: calc(100vw - 48px);\n max-height: calc(100vh - 48px);\n overflow: hidden;\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n border-radius: var(--window-radius);\n outline: 1px solid var(--separator-color);\n outline-offset: -1px;\n box-shadow:\n 0 0 14px 2px rgba(0, 0, 6, 0.03),\n 0 0 5px 2px rgba(0, 0, 6, 0.1),\n 0 0 0 1px rgba(0, 0, 0, 0.05);\n animation: adw-about-dialog-sheet-in 200ms cubic-bezier(0, 0, 0.2, 1);\n\n &:focus {\n outline: 1px solid var(--separator-color);\n outline-offset: -1px;\n }\n }\n\n // The navigation view fills the sheet; each page is a column.\n adw-navigation-view,\n .adw-navigation-view-pages,\n .adw-navigation-page {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n }\n\n // --- Toolbar view (flat header bar over the window background + scroller) ---\n .adw-about-dialog-toolbar-view {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n }\n\n // The dialog header bar is flat: transparent over the window background, no\n // bottom separator (libadwaita: window.about headerbar.titlebar { flat }).\n adw-header-bar {\n background-color: transparent;\n box-shadow: none;\n min-height: 47px;\n }\n\n // The close button — a flat circular button drawing a \"×\" glyph: the generated\n // `.adw-icon--<name>` mask classes come from the ICONS map in scripts/build-scss.mjs,\n // which has no window-close entry (the SVG itself does exist in @gjsify/adwaita-icons).\n .adw-about-dialog-close {\n width: 34px;\n height: 34px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n line-height: 1;\n\n &::before {\n content: '\\00d7'; // ×\n }\n }\n\n // --- Scrolling content area ---\n .adw-about-dialog-scroll {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n .adw-about-dialog-clamp {\n width: 100%;\n max-width: 360px;\n margin-inline: auto;\n box-sizing: border-box;\n }\n\n .adw-about-dialog-page-body {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n padding: 0 var(--spacing-m) var(--spacing-l);\n }\n\n // --- Main page header title: hidden until the content scrolls ---\n // Mirrors AdwAboutDialog's update_headerbar_cb (show title once scrolled > 0).\n .main-page {\n adw-header-bar .adw-header-bar-title {\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n &.scrolled adw-header-bar .adw-header-bar-title {\n opacity: 1;\n }\n }\n\n // --- App icon (the large recessed glyph) ---\n .adw-about-dialog-icon {\n align-self: center;\n width: 96px;\n height: 96px;\n margin-top: var(--spacing-s);\n margin-bottom: var(--spacing-m);\n // Mask-driven .adw-icon skin scaled up to the about-dialog app-icon size.\n -webkit-mask-size: contain;\n mask-size: contain;\n background-color: currentColor;\n }\n\n // --- App name (title-1) ---\n .adw-about-dialog-name {\n align-self: center;\n text-align: center;\n font-size: 18pt;\n font-weight: 800;\n line-height: 1.2;\n margin-bottom: var(--spacing-xs);\n }\n\n // --- Developer / vendor line ---\n .adw-about-dialog-developer {\n align-self: center;\n text-align: center;\n font-size: var(--font-size-base);\n opacity: var(--dim-opacity);\n margin-bottom: var(--spacing-m);\n }\n\n // --- Version pill ---\n // libadwaita: .app-version { small accent chip }.\n .adw-about-dialog-version {\n align-self: center;\n padding: 2px 12px;\n margin-bottom: var(--spacing-l);\n border-radius: 99px;\n font-size: var(--font-size-small);\n line-height: 1.4;\n background-color: color-mix(in srgb, var(--accent-bg-color) 14%, transparent);\n color: var(--accent-color);\n }\n\n // --- Row groups (Details / Credits / Legal navigation, link rows) ---\n .adw-about-dialog-rows {\n width: 100%;\n margin-top: var(--spacing-m);\n\n & + .adw-about-dialog-rows {\n margin-top: var(--spacing-l);\n }\n }\n\n // The trailing chevron / link affordance on a navigation or link row.\n .adw-about-dialog-chevron {\n width: 16px;\n height: 16px;\n opacity: var(--dim-opacity);\n }\n\n // --- Subpage content (Details / Credits / Legal) ---\n .adw-about-dialog-comments {\n margin: var(--spacing-s) 0 0;\n font-size: var(--font-size-base);\n line-height: 1.5;\n text-align: start;\n white-space: pre-wrap;\n }\n\n .adw-about-dialog-copyright {\n margin: var(--spacing-s) 0 0;\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n text-align: center;\n }\n\n .adw-about-dialog-license {\n margin: var(--spacing-s) 0 0;\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n text-align: center;\n\n a {\n color: var(--accent-color);\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n }\n }\n}\n\n@keyframes adw-about-dialog-scrim-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes adw-about-dialog-sheet-in {\n from {\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n}\n","// _alert_dialog.scss — adw-alert-dialog: a modal scrim + centred dialog box with\n// a bold heading, body text and a row/column of response buttons.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_dialogs.scss (floating-sheet,\n// AdwDialog sheet shadow + radius)\n// Reference: refs/adwaita-web/adwaita-web/scss/_dialog.scss (alert layout)\n// Reference: refs/libadwaita/src/adw-alert-dialog.c (response button layout)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Implemented for @gjsify/adwaita-web Web Components.\n\n// Host: lay the scrim + box out as a full-cover overlay only while open.\nadw-alert-dialog {\n display: none;\n\n &.open {\n display: block;\n }\n}\n\n// The scrim — a fixed full-cover dimming layer behind the dialog box.\n.adw-alert-dialog-scrim {\n position: fixed;\n inset: 0;\n z-index: 1050;\n background-color: rgba(0, 0, 6, 0.32);\n // Centre the dialog box (the box is the scrim's flex child).\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--spacing-l);\n // Mirror the AdwDialog present transition (a quick fade + scale).\n animation: adw-alert-dialog-fade-in 0.2s cubic-bezier(0, 0, 0.2, 1);\n}\n\n// The dialog box — the AdwDialog \"sheet\": rounded window-colored surface with a\n// soft shadow + hairline outline, centred above the scrim.\n.adw-alert-dialog-box {\n position: fixed;\n top: 50%;\n left: 50%;\n z-index: 1051;\n transform: translate(-50%, -50%);\n\n display: flex;\n flex-direction: column;\n\n box-sizing: border-box;\n width: 100%;\n max-width: 300px;\n max-height: calc(100vh - 2 * var(--spacing-xl));\n overflow: hidden;\n\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n border-radius: var(--window-radius);\n outline: 1px solid var(--separator-color);\n outline-offset: -1px;\n box-shadow:\n 0 0 14px 2px rgba(0, 0, 6, 0.03),\n 0 0 5px 2px rgba(0, 0, 6, 0.1),\n 0 0 0 1px rgba(0, 0, 0, 0.05);\n\n font-family: var(--font-family);\n\n animation: adw-alert-dialog-pop-in 0.2s cubic-bezier(0, 0, 0.2, 1);\n}\n\n// Wider layout when responses are laid out horizontally (prefer-wide-layout).\n.adw-alert-dialog-box:has(.adw-alert-dialog-responses.horizontal) {\n max-width: 360px;\n}\n\n// The scrollable message area: heading + body + optional extra child.\n.adw-alert-dialog-message {\n display: flex;\n flex-direction: column;\n padding: var(--spacing-xl) var(--spacing-xl) var(--spacing-l);\n overflow-y: auto;\n}\n\n.adw-alert-dialog-heading {\n margin: 0;\n // Matches the GTK .title-2 typography style (bold heading).\n font-size: 15pt;\n font-weight: 800;\n line-height: 1.3;\n text-align: center;\n}\n\n.adw-alert-dialog-body {\n margin: var(--spacing-s) 0 0;\n font-size: var(--font-size-base);\n line-height: 1.4;\n text-align: center;\n}\n\n// Extra child slot, displayed below the body.\n.adw-alert-dialog-child {\n margin-top: var(--spacing-m);\n\n &:empty {\n display: none;\n }\n}\n\n// Response button area. Vertical (stacked) by default; horizontal when the\n// dialog opts into the wide layout.\n.adw-alert-dialog-responses {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-s);\n padding: var(--spacing-m) var(--spacing-l) var(--spacing-l);\n\n &.horizontal {\n flex-direction: row;\n justify-content: stretch;\n\n .adw-alert-dialog-response {\n flex: 1 1 0;\n }\n }\n}\n\n// The response buttons — full-width pills within the stacked layout. They reuse\n// the .adw-button skin (incl. .suggested-action / .destructive-action), so only\n// the full width needs adding here. The default response is NOT accent-tinted —\n// libadwaita only colours suggested/destructive responses; the default one is\n// just the Enter-activated button and keeps the neutral button style.\n.adw-alert-dialog-response.adw-button {\n width: 100%;\n justify-content: center;\n}\n\n@keyframes adw-alert-dialog-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes adw-alert-dialog-pop-in {\n from {\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n}\n","// _preferences_dialog.scss — adw-preferences-dialog styling (scrim + dialog box).\n// Reference: refs/libadwaita/src/stylesheet/widgets/_dialogs.scss (floating-sheet\n// scrim/dimming + sheet radius + box-shadow + outline)\n// Reference: refs/libadwaita/src/adw-preferences-dialog.ui (flat header + title)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-preferences-dialog {\n // Hidden until presented (the `open` class is toggled by the component). The\n // element itself contributes nothing to layout while closed.\n display: none;\n\n &.open {\n display: block;\n }\n\n // Full-cover scrim — a fixed dimming layer behind the dialog box. Adwaita\n // dims with `--shade-color` at double alpha (see _dialogs.scss `floating-sheet\n // > dimming`); --shade-color isn't in the adwaita-web token subset, so use the\n // equivalent neutral wash.\n .adw-preferences-dialog-scrim {\n position: fixed;\n inset: 0;\n z-index: 1000;\n background-color: rgba(0, 0, 6, 0.32);\n }\n\n // The centred floating dialog box. Mirrors `floating-sheet > sheet`: the\n // dialog radius (= --window-radius in Adwaita), the layered drop shadow and a\n // 1px window outline.\n .adw-preferences-dialog-box {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n width: min(var(--adw-dialog-content-width, 640px), calc(100vw - 48px));\n max-height: calc(100vh - 48px);\n overflow: hidden;\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n border-radius: var(--window-radius);\n outline: 1px solid var(--separator-color);\n outline-offset: -1px;\n box-shadow:\n 0 0 0 1px rgba(0, 0, 0, 0.05),\n 0 0 5px 2px rgba(0, 0, 6, 0.1),\n 0 0 14px 2px rgba(0, 0, 6, 0.03);\n }\n\n // Flat header bar — transparent over the window background (Adw's preferences\n // dialog header uses a flat AdwHeaderBar), title centred against the trailing\n // close button.\n .adw-preferences-dialog-header {\n display: flex;\n align-items: center;\n min-height: 47px;\n padding: 0 6px;\n flex-shrink: 0;\n }\n\n // Equal-width sides keep the title optically centred (strict centering).\n .adw-preferences-dialog-header-side {\n display: flex;\n align-items: center;\n flex: 1 1 0;\n min-width: 0;\n }\n\n .adw-preferences-dialog-header-side--end {\n justify-content: flex-end;\n }\n\n .adw-preferences-dialog-title {\n flex: 0 0 auto;\n font-weight: bold;\n font-size: var(--font-size-base);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0 6px;\n }\n\n // Round flat close button drawing a CSS \"×\" glyph — same approach as\n // <adw-tab-view>, and for the sizing reason recorded there. `windowCloseSymbolic`\n // does ship, and is compiled.\n .adw-preferences-dialog-close {\n appearance: none;\n border: none;\n margin: 0;\n width: 28px;\n height: 28px;\n padding: 0;\n border-radius: 50%;\n background-color: transparent;\n color: var(--window-fg-color);\n cursor: pointer;\n position: relative;\n transition: background-color 0.1s ease;\n\n &::before,\n &::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 12px;\n height: 1.5px;\n background-color: currentColor;\n border-radius: 1px;\n }\n\n &::before {\n transform: translate(-50%, -50%) rotate(45deg);\n }\n\n &::after {\n transform: translate(-50%, -50%) rotate(-45deg);\n }\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &.locked {\n opacity: var(--dim-opacity);\n cursor: default;\n }\n }\n\n // Scrolled body holding the stacked pages. Adwaita preferences pages sit on\n // the window background (the boxed-list groups carry their own card surface).\n .adw-preferences-dialog-body {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n }\n\n // Clamped column of preferences groups — Adw.PreferencesPage clamps content to\n // a comfortable reading width and stacks groups with generous spacing.\n .adw-preferences-dialog-pages {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-xl);\n max-width: 600px;\n margin: 0 auto;\n padding: var(--spacing-xl) var(--spacing-m);\n\n // The dialog keeps the <adw-preferences-page> ELEMENTS rather than hoisting\n // their children out — the page's title / name / icon-name are what a\n // search-result subtitle and a view switcher read. The page therefore has\n // to be layout-transparent so its groups stay flex items of this column;\n // a custom element's default `display: inline` would collapse it.\n > adw-preferences-page {\n display: contents;\n\n // `display: contents` above beats the UA `[hidden] { display: none }`, so\n // a page hidden through the DOM `hidden` property would keep rendering\n // its groups while the search (which reads the same flag) had already\n // dropped it from the corpus.\n &[hidden] {\n display: none;\n }\n }\n }\n}\n","// _dialog.scss — adw-dialog: a generic adaptive dialog. A full-cover scrim with\n// a floating window-coloured \"sheet\" centred on wide viewports, re-anchored as a\n// bottom sheet (full-width, rounded top corners) on narrow ones. Mirrors the\n// AdwDialog floating-sheet + bottom-sheet presentations.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_dialogs.scss (floating sheet)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_bottom-sheet.scss (bottom radius)\n// Copyright (c) 2023-2024 GNOME Foundation Inc. (libadwaita). LGPLv2.1+.\n// Modifications: Implemented for @gjsify/adwaita-web Web Components.\n\n// Bottom-sheet layout — shared by the explicit mode and the auto/narrow query.\n@mixin adw-dialog-bottom-sheet {\n .adw-dialog-scrim {\n align-items: flex-end;\n justify-content: stretch;\n padding: 0;\n }\n\n .adw-dialog-box {\n width: 100%;\n max-width: none;\n // Rounded only along the top edge — it hugs the bottom viewport edge.\n border-top-left-radius: var(--window-radius);\n border-top-right-radius: var(--window-radius);\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n animation: adw-dialog-slide-up 0.25s cubic-bezier(0, 0, 0.2, 1);\n }\n}\n\n// Host: contributes nothing to layout while closed; the `open` class reveals it.\nadw-dialog {\n display: none;\n\n &.open {\n display: block;\n }\n\n // The full-cover scrim — a flex container centring the box; a dimming wash\n // behind it. Clicking the scrim (outside the box) attempts to dismiss.\n .adw-dialog-scrim {\n position: fixed;\n inset: 0;\n z-index: 1050;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--spacing-l);\n background-color: var(--dialog-scrim-color, rgba(0, 0, 6, 0.32));\n animation: adw-dialog-fade-in 0.2s cubic-bezier(0, 0, 0.2, 1);\n }\n\n // The dialog box (\"sheet\"): a rounded window-coloured surface with a soft\n // layered shadow + hairline outline. Sized by the content-width/height props.\n .adw-dialog-box {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n width: min(var(--adw-dialog-content-width, 360px), calc(100vw - 2 * var(--spacing-l)));\n max-height: min(var(--adw-dialog-content-height, 100vh), calc(100vh - 2 * var(--spacing-l)));\n overflow: hidden;\n\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n border-radius: var(--window-radius);\n outline: 1px solid var(--separator-color);\n outline-offset: -1px;\n box-shadow:\n 0 0 0 1px rgba(0, 0, 0, 0.05),\n 0 0 5px 2px rgba(0, 0, 6, 0.1),\n 0 0 14px 2px rgba(0, 0, 6, 0.03);\n\n font-family: var(--font-family);\n animation: adw-dialog-pop-in 0.2s cubic-bezier(0, 0, 0.2, 1);\n\n &:focus {\n outline: 1px solid var(--separator-color);\n }\n }\n\n // Flat header bar — transparent over the window background, title strictly\n // centred against the trailing close button (the AdwHeaderBar idiom).\n .adw-dialog-header {\n display: flex;\n align-items: center;\n min-height: 47px;\n padding: 0 6px;\n flex-shrink: 0;\n }\n\n .adw-dialog-header-side {\n display: flex;\n align-items: center;\n flex: 1 1 0;\n min-width: 0;\n }\n\n .adw-dialog-header-side--end {\n justify-content: flex-end;\n }\n\n .adw-dialog-title {\n flex: 0 0 auto;\n font-weight: bold;\n font-size: var(--font-size-base);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0 6px;\n }\n\n // Round flat close button drawing a CSS \"×\" glyph: `windowCloseSymbolic` exists in\n // @gjsify/adwaita-icons, but the generated `.adw-icon--<name>` mask classes come from\n // the ICONS map in scripts/build-scss.mjs, which has no window-close entry.\n .adw-dialog-close {\n appearance: none;\n border: none;\n margin: 0;\n width: 28px;\n height: 28px;\n padding: 0;\n border-radius: 50%;\n background-color: transparent;\n color: var(--window-fg-color);\n cursor: pointer;\n position: relative;\n flex: none;\n transition: background-color 0.1s ease;\n\n &::before,\n &::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 12px;\n height: 1.5px;\n background-color: currentColor;\n border-radius: 1px;\n }\n\n &::before {\n transform: translate(-50%, -50%) rotate(45deg);\n }\n\n &::after {\n transform: translate(-50%, -50%) rotate(-45deg);\n }\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n &.locked {\n opacity: var(--dim-opacity);\n cursor: default;\n }\n }\n\n // Content area — the author's markup; scrolls when it exceeds the box height.\n .adw-dialog-content {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n padding: var(--spacing-m) var(--spacing-l) var(--spacing-l);\n }\n\n // A header-less dialog pads the content on all sides.\n .adw-dialog-header[hidden] + .adw-dialog-content {\n padding-top: var(--spacing-l);\n }\n\n // --- Explicit bottom-sheet presentation ---\n &[data-presentation='bottom-sheet'] {\n @include adw-dialog-bottom-sheet;\n }\n}\n\n// --- Adaptive (auto) presentation: bottom sheet on narrow viewports ---\n@media (max-width: 550px) {\n adw-dialog[data-presentation='auto'] {\n @include adw-dialog-bottom-sheet;\n }\n}\n\n@keyframes adw-dialog-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes adw-dialog-pop-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n@keyframes adw-dialog-slide-up {\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n}\n","// _widget.scss — the GtkWidget layout properties an element carries as attributes.\n//\n// Every GTK widget inherits `halign`, `valign`, `hexpand` and `vexpand` from GtkWidget, and a\n// projected `.blp` hands them to `buildSharedTree` as attributes (`halign=\"center\"`). Until\n// this partial nothing read them, so the gallery's bottom sheet stretched the button its\n// Blueprint centres. The margins are not here: an attribute cannot carry a length into CSS\n// portably, so `shared-tree-builder.ts` writes them as inline style.\n//\n// ALIGNMENT IS AN AUTO MARGIN, because that is the one CSS placement that means the same on\n// both axes of a flex container and of a grid: GTK allocates a non-FILL child its natural\n// size and places it inside the space its parent gave it, and an auto margin shrinks a flex\n// or grid item to its content and puts the leftover on the named side. It does NOT place a\n// child of a BLOCK container on the vertical axis, where CSS resolves an auto block margin to\n// zero — so a GTK bin that lays its child out by alignment is a grid or a flex box here\n// (`.adw-bottom-sheet-content`, `gtk-box`). And it takes the side it pushes from: a centred\n// child cannot also keep a `margin-start`, where GTK would centre it inside the remaining\n// space.\n//\n// EXPAND IS FLEX-GROW ALONG THE BOX'S OWN AXIS, which is why it lives with the box rules\n// below and not on the attribute alone: `vexpand` in a horizontal box asks for the cross\n// axis, which `align-items: stretch` already fills, and a `flex-grow` there would widen the\n// child instead.\n//\n// Reference: refs/gtk/gtk/gtkwidget.c (halign, valign, hexpand, vexpand)\n// Reference: refs/gtk/gtk/gtkboxlayout.c (spare space shared among expanding children)\n// Copyright (c) The GTK Team. LGPLv2.1+.\n\n[halign='start'] {\n margin-inline-end: auto;\n}\n\n[halign='end'] {\n margin-inline-start: auto;\n}\n\n[halign='center'] {\n margin-inline: auto;\n}\n\n[valign='start'] {\n margin-block-end: auto;\n}\n\n[valign='end'] {\n margin-block-start: auto;\n}\n\n[valign='center'] {\n margin-block: auto;\n}\n\ngtk-box:not([orientation='vertical']) > [hexpand],\ngtk-box[orientation='vertical'] > [vexpand] {\n flex-grow: 1;\n}\n","// adwaita-skin.scss — Main entry point for @gjsify/adwaita-web.\n// Mirrors refs/adwaita-web/adwaita-web/scss/adwaita-skin.scss organization.\n// Reference: refs/adwaita-web/adwaita-web/scss/adwaita-skin.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n@use 'icons.generated';\n@use 'variables';\n@use 'theme';\n@use 'root';\n// Style-isolation boundary — emitted before the components so their own rules\n// override this typographic/box-model floor (see _reset.scss).\n@use 'reset';\n// The ONE symbolic-icon box, behind <gtk-image>. Emitted before every widget that\n// draws one, so a context that sizes its own icons (the about dialog's 96px, the\n// split button's 14px arrows, the view switcher's 16px) still wins on ordinary\n// specificity.\n@use 'icon';\n// libadwaita's typography + semantic-colour UTILITY CLASSES (`.dimmed`,\n// `.numeric`, `.monospace`, `.title-1`…), and <gtk-label>, the element they are\n// written for — see _labels.scss. Emitted BEFORE every widget so a widget's\n// own rule wins on ordinary specificity, and because two partials @extend from\n// it (`_progress_bar.scss`'s text node, `_data_grid.scss`'s cells) exactly as\n// libadwaita's own `_progress-bar.scss` does.\n@use 'labels';\n// <gtk-box>. Before every widget, which may place its own children in one.\n@use 'box';\n// The REST of libadwaita's documented style-class surface — the widget-\n// independent half: the surfaces (`.background`, `.view`, `.frame`), `.card` and\n// the two boxed lists, `.toolbar`, `.spacer`, `.osd`, `.linked`, the app-icon\n// shadows and the undershoot indicators. Emitted here for the same two reasons\n// as `_labels.scss`: a widget's own rule then wins on ordinary specificity, and\n// `_card.scss` / `_preferences.scss` @extend `%card` from it.\n// `scripts/check-adwaita-style-classes.mjs` holds the ledger of the whole\n// documented surface and fails on a class with no rule behind it.\n@use 'style_classes';\n@use 'window';\n@use 'headerbar';\n@use 'action_bar';\n@use 'window_title';\n@use 'button';\n@use 'button_content';\n// The ONE popover surface. Emitted BEFORE the widgets that host one, so a\n// consumer's (or a widget's) own higher-specificity rule still wins over it.\n@use 'popover';\n@use 'split_button';\n@use 'menu_button';\n@use 'drop_down';\n@use 'toggle_group';\n// The ONE toggle, behind <gtk-switch>. Emitted before `switch_row` and\n// `expander_row`, the two widgets that host one — and which each carried their\n// own copy of it until it was lifted out of `adw-switch-row {}`.\n@use 'switch';\n@use 'entry';\n// The two form-control primitives, in ONE partial because upstream merges them\n// (there is no `_radio.scss` in libadwaita) — see _checks.scss.\n@use 'checks';\n@use 'progress_bar';\n@use 'preferences';\n@use 'card';\n@use 'data_grid';\n@use 'clamp';\n@use 'spinner';\n// <adw-shortcut-label>'s keycaps. After `labels`, because a separator inside it\n// is an ordinary `.dimmed`.\n@use 'shortcut_label';\n@use 'avatar';\n@use 'banner';\n@use 'status_page';\n@use 'row';\n@use 'action_row';\n@use 'entry_row';\n@use 'switch_row';\n@use 'combo_row';\n@use 'spin_row';\n@use 'button_row';\n@use 'expander_row';\n@use 'password_entry_row';\n@use 'toast';\n@use 'toolbar_view';\n@use 'scrolling';\n@use 'wrap_box';\n@use 'panes';\n@use 'overlay_split_view';\n@use 'navigation_split_view';\n@use 'carousel';\n@use 'tab_view';\n@use 'view_switcher';\n@use 'inline_view_switcher';\n@use 'view_stack';\n@use 'view_switcher_bar';\n@use 'navigation_view';\n@use 'bottom_sheet';\n@use 'sidebar';\n@use 'about_dialog';\n@use 'alert_dialog';\n@use 'preferences_dialog';\n@use 'dialog';\n// Last among the widgets: an authored `halign` / `valign` is placement the author asked\n// for, and an element rule that sets a margin must not win it back on source order.\n@use 'widget';\n\n// Ensure the `hidden` attribute always wins: components that toggle visibility\n// via `element.hidden = true` set the HTML attribute, but a custom `display`\n// from a layout class (e.g. `.adw-switch { display: inline-flex }`) has equal\n// specificity and would otherwise override the UA `[hidden] { display: none }`,\n// leaving the element laid out (and stealing width from its siblings).\n[hidden] {\n display: none !important;\n}\n"]}
1
+ {"version":3,"sourceRoot":"","sources":["file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_icons.generated.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_variables.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_theme.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_root.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_reset.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_icon.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_labels.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_box.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_style_classes.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_window.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_headerbar.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_action_bar.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_window_title.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_button.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_button_content.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_popover.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_split_button.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_menu_button.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_drop_down.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_toggle_group.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_switch.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_entry.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_checks.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_progress_bar.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_preferences.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_card.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_data_grid.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_clamp.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_spinner.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_shortcut_label.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_avatar.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_banner.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_status_page.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_action_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_entry_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_switch_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_combo_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_spin_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_button_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_expander_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_password_entry_row.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_toast.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_toolbar_view.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_scrolling.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_wrap_box.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_panes.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_overlay_split_view.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_navigation_split_view.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_carousel.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_tab_view.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_view_switcher.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_inline_view_switcher.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_view_stack.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_view_switcher_bar.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_navigation_view.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_bottom_sheet.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_sidebar.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_about_dialog.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_alert_dialog.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_preferences_dialog.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_dialog.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/_widget.scss","file:///__w/gjsify/gjsify/packages/web/adwaita-web/scss/adwaita-skin.scss"],"names":[],"mappings":";AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AC9BF;EAxNE;EACA;EAGA;EACA;EAGA;EACA;EACA;EAKA;EAOA;EAMA;EACA;EACA;EACA;EACA;EAMA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAIA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EASA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EAgCA;EACA;EACA;EACA;EACA;EAaA;EACA;EACA;EA8CA;EACA;EACA;EACA;;;AAaF;EACE;IACE;IACA;IACA;;;AClKJ;EACE;IA/DA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAKA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAUA;;;AAkBF;EA5EE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAKA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAUA;;;AAyBF;EDrFE;EACA;EAGA;EACA;EAGA;EACA;EACA;EAKA;EAOA;EAMA;EACA;EACA;EACA;EACA;EAMA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAIA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EASA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EAgCA;EACA;EACA;EACA;EACA;EAaA;EACA;EACA;EA8CA;EACA;EACA;EACA;;;AE3MF;EACE;EACA;EACA;EACA;EACA;;;ACmCF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAcF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAOA;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;AAHF;AAAA;AAAA;EAGE;;;ACjFJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAQA;;AAKA;EACE;;;AA+BJ;EACE;EACA;;;AAcF;EACE;;;ACzBF;EACE;EACA;EACA;EACA;EAEA;;AAEA;EAEE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AASF;EACE;EAGA;;AAWF;EACE;;AAGF;EACE;;AAiBF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AASJ;EACE;;;AAIF;EACE;;;AAOA;EACE;EAEA;EACA;EACA;;;AALF;EACE;EAEA;EACA;EACA;;;AALF;EACE;EAEA;EACA;EACA;;;AAIJ;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAIF;EACE;;;AAIF;EACE;EACA;;;AAIF;EACE;EACA;;;AAIF;EACE;EACA;EACA;;;AAIF;EACE;EACA;EACA;;;AAIF;EACE;EACA;;;AAIF;EACE;;;ACzOF;EACE;EACA;EACA;;;AAGF;EACE;;;ACaF;AAAA;AAAA;AAKA;EACE;EACA;;;AAOF;EACE;EACA;;AAEA;EAEE;EACA;;AAGF;EACE;EACA;;;AAMJ;EACE;;;AAGF;AAAA;AAAA;AAOA;AAAA;EACE;EACA;EACA;EACA,YACE;;AAIF;EATF;AAAA;IAUI,YACE;;;;AAcJ;EACE,YACE;;AAGF;EACE;;AAMF;EACE;;AASJ;EAEE;EACA;EACA;;AAEA;EANF;IAOI;;;;AAKN;AAAA;AAAA;AASA;EAGE;EACA;EAKA;;;AAKF;EACE;EACA;EACA;EACA;EACA;;AAEA;EAGE;EAGA;;;AAIJ;AAAA;AAAA;AAeA;EACE;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;EAIE;;AAEA;AAAA;AAAA;AAAA;EACE;;AAGF;AAAA;AAAA;AAAA;EACE;;AASF;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAON;EACE;EACA;;;AAMJ;EACE;EACA;EACA;;AAEA;EAEE;;AAGF;EACE;;;AAIJ;AAAA;AAAA;AAUA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAkBA;AAAA;EAEE;;AAII;AAAA;AAAA;EAEE;EACA;;AAGF;AAAA;AAAA;EAEE;EACA;;AATF;AAAA;AAAA;EAEE;EACA;;AAGF;AAAA;AAAA;EAEE;EACA;;AAKN;AAAA;EACE;;AAII;AAAA;AAAA;EAEE;EACA;;AAGF;AAAA;AAAA;EAEE;EACA;;AATF;AAAA;AAAA;EAEE;EACA;;AAGF;AAAA;AAAA;EAEE;EACA;;;AAOV;AAAA;AAAA;AAQA;EACE;;;AAIF;EACE;;;AAKF;AAAA;AAAA;AA+BA;EACE;;;AAGF;EACE;;;AAIA;EACE;;AAGF;EACE;;;AAKF;EACE;;AAGF;EACE;;;AC1ZJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAGF;EACA;EACA;;;ACAF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;;AAEA;EAgBE;EACA;EAIA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EAGA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;;AAiBN;AAAA;EAEE,kBACE;;;AC5GJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;AAAA;EAEI;EACA;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;;AC3CR;EACE;EACA;EACA;EACA;EACA;EACA;;AAKA;AAAA;EAEE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AChCJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAKF;EACE;;AAEA;EACE;;AAGF;EACE;;AAKJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AASJ;EACE;EACA;EACA;EAEA;EACA;;AAEA;EACE;;AAGF;EACE;;AAQJ;EACE;EACA;;AAIF;EACE;EACA;;AAIF;EACE;EACA;EACA;;AAQF;EACE;EACA;EACA;;AAOF;EACE;;AAEA;EACE;;AAGF;EACE;;AAUJ;EACE;EACA;EACA;EACA;;AAEA;EANF;IAOI;;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;;AClJN;EACE;EACA;;;AAKF;EACE;EACA;;;AAGF;EACE;EACA;EAEA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAGF;EAGE;EACA;EACA;;AAMA;EACE;;AAGF;EACE;EACA;EACA;EACA;;;ACrCN;EAIE;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA,YACE;;AAOF;EA3BF;IA4BI,YACE;;;AAYJ;EAEE;;AAKF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAOA;EACE;;AAGF;EACE;;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKA;EAGE;;AAGF;EACE;;AAIF;EACE;IAIE;;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;;;AAWJ;EACE;EACA;EACA;;;AAeF;EACE;EACA;EACA;;;AAMF;EACE;;;AAOF;EACE;EACA;EACA;EACA;;;AAYF;EACE;EACA;EACA;EACA;EACA;EACA;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKJ;EACE;EACA;EACA;EACA;EACA;;;AAKF;EACE;;;ACrRF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EAEE;;AAIF;EACE;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EAEE;;AAYJ;EACE;EACA;;AAEA;EACE;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;EACA;;AAKJ;EACE;EACA;;AAEA;EACE;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAKJ;EACE;;AAIF;EACE;EACA;;AAEA;AAAA;EAEE;EACA;;;ACtKN;EACI;EACA;EACA;EACA;;AAGA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAKR;EACI;;AAIJ;EACI;;AAIJ;EACI;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;;AAUR;EACI;EACA;EACA;;;AC7ER;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAWF;EACE;EACA;EACA;;AAKF;EACE;;AAIF;EACE;EACA;EACA;EACA;;AAMF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACjIJ;EACE;EACA;;;AAGF;EAGE;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAGF;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAIF;EACE;EACA;EACA,YACE;;AAGF;EACE;;AAMN;EACE;;AAEA;EACE;EACA;EACA;;AAMJ;EACE;EAEA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;;AAEA;EACE;;AAKN;EACE;;;AC5FN;EACE;EACA;EACA;EACA;EACA;;AAIA;EACE;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;;AAEA;EACE;;;AAIJ;EACE;EACA;;;AAOF;EACE;;AAEA;EACE;;;AClFJ;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAGF;EAEE;EACA;;AAIF;EACE;EACA;EACA;;;ACOJ;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;AAAA;EACE;EACA;EACA;EACA;EACA;;AAIF;AAAA;EAME;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;AAGF;EAhBF;AAAA;IAoBI;;;AAKF;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAQF;AAAA;EACE;;AAEA;EAHF;AAAA;IAII;;;AAIJ;AAAA;EACE;EACA;;AAEA;EAJF;AAAA;IAKI;;;AAON;AAAA;AAAA;EAEE;EACA;EACA;;AAQA;AAAA;AAAA;EACE;;AAMF;AAAA;AAAA;EACE;;AAKJ;AAAA;EACE;EACA;;AAKF;AAAA;EACE;EACA;;;AAKJ;EACE;;;AAIF;EACE;;;AAIF;EACE,YA/IY;EAgJZ,oBAhJY;;;AAmJd;EACE,YAlJa;EAmJb,oBAnJa;;;AA2Jf;AAAA;EAEE,YA3JW;EA4JX,oBA5JW;;;AAiKb;AAAA;EAEE;;AAEA;AAAA;EACE;EACA;;AAKF;AAAA;EACE;;;ACtLJ;EACE;EACA;EACA;EAGA;;AAEA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAVF;IAYI;;;AAIJ;EAEE;EACA;EACA;EACA;EACA,YACE;;AAOJ;EAIE;;AAIF;EACE;;AAKF;EACE;;AAKF;EACE;;AASF;EAEE;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAOJ;EACE;EACA;EACA;EACA;;AAIA;EARF;IASI;IACA;IACA;;;;AASN;EACE;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;ACxJJ;EACE;;AAMA;EACE;;AAKF;EACE;EACA;EACA;EACA;;AAKA;EACE;;AASF;EACE;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAMF;EAGE;;;ACrEJ;AAAA;EAIE;EACA;EACA;;;ACAF;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAKF;EACE;EACA;;AAMF;EACE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAgBF;EAGE;EACA;EACA;EACA;EACA;;AAMF;EACE;EACA;EACA;;AAKJ;EACE;;AAEA;EACE;;AAMJ;EACE;EACA;;AAEA;EACE;EACA;;AAOJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;;ACvIN;EACE;EACA;;;ACSF;EAIE;EACA;EACA;EACA;EACA;EACA;EAIA;;AAEA;EACE;EAGA;;;ACnBJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAXF;IAYI,YACE;;;AAQN;EACE;EACA;EACA;EAGA;EACA;;AAKF;EACE;;;ACvEJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAQF;EACE;EACA;EACA;EACA;;;AClCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;AAGA;EACE;;AAOF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAOF;EACE;EACA;;AAEA;EACE;;;AC/CR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAIF;EACE;;AAMF;EACE;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;;AC/DN;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;;;AAOJ;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;;ACnDF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAEA;EACE;;AAGF;EACE;;AAIJ;AAAA;EAEE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAaF;AAAA;EACE;EACA;;AAGF;AAAA;EACE;EACA;;AAMF;AAAA;EACE;EACA;;AAEA;AAAA;EACE;EACA;;;ACvFN;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIF;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACtCF;EACE;EACA;;;ACRJ;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAWA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAUJ;EACE;;AAGF;EACE;;;ACvFJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;ACtDN;EACE;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAKA;EACE;;AAGF;EACE;;AAKJ;EACE;EACA;EACA;;AAGE;EACE;EACA;;AAMF;EACE;EACA;;AAMN;EACE;EACA;EACA;;AAGE;EACE;EACA;;AAMF;EACE;EACA;;;AC3FR;EACE;EACA;EACA;;AAEA;EACE;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAKF;EACE;EACA;;AAIF;AAAA;EAEE;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAWF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAKF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;EACE;;;AC3FR;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIF;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAKJ;EACE;EACA;;;ACpDJ;EACE;EACA;;AAGA;EACE;EACA;;AAQF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EAEA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;;AChJN;EACE;EACA;EACA;EACA;EACA;EAEA;;AAEA;AAAA;EAEE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AA4BF;EACE;;AASF;EACE;;AAMF;AAAA;EAEE;EACA;;AAGF;EACE,YACE;;AAGF;EACE;;AAIJ;EACE,YACE;;AAGF;EACE;;AAgBF;AAAA;EACE;EACA;EACA;;;AAeN;AAAA;EAEE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;ACnHA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAOF;EACE,QAnCc;EAoCd;EACA;EACA;;AAGF;EACE,QA1Cc;EA2Cd;EACA;EACA;;AAQF;EAEE;EACA;EACA;EAGA;;AAGF;EACE;EACA,kBACE;EAEF;EACA;;AAGF;EACE;EACA,kBACE;EAEF;EACA;;AAGF;EACE;IAEE;;;;AC3FN;EACE;EACA;EACA;EACA;EAKA;EACA;;;AAQF;EACE;;;AAWF;EACE;;;AAQF;AAAA;EAEE;;;AAYF;EACE;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;;;ACnDF;EACE;EACA;;;AAUF;EACE;EACA;;;AAaF;EACE;EACA;;;AClCF;EACE;EACA;EACA;EACA;EACA;EACA;;AAUA;EACE;EACA;EACA;EACA;EACA;EACA;EAGA;;AAkBF;EACE;EACA;EACA;EACA;EACA;EACA;;AAKF;EACE;;AAOA;EACE;;AAGF;EACE;;AASF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAOJ;EACE;EACA;EACA;EACA;;AAmBA;EACE;EACA;;AAGF;EACE;EACA;;AAKA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAQN;EACE;EACA;EACA;EACA;EACA;;AAMF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAMJ;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACxMF;EACE;EACA;EACA;EACA;EACA;;AAOA;EACE;EACA;EACA;EACA;;AASF;EACE;EACA;EACA;EACA;EACA;EACA;;AAQF;AAAA;EAEE;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;;AAOF;EACE;;AAGF;EACE;;AASJ;EACE;;AAGF;EACE;;AAMA;EACE;;AAGF;EACE;EACA;EACA;EACA;;;ACtFN;EACE;EACA;EAMA;;AAEA;EACE;EACA;EACA;EACA;EACA;EAEA;EACA;;AAEA;EACE;;AAiBJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMJ;AAAA;EAEE;EACA;EACA;EACA;;AAIA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMJ;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAIA;EACE;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA,YACE;;AAMJ;EACE;;;AAON;EACE;;AAEA;EACE;EACA;EACA;EACA;EAEA;EACA,YACE;;AAGF;EACE;;;ACxIN;EACE;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAKF;EACE;;AAEA;EACE;;AAGF;EACE;;AAON;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;AAAA;AAAA;EAIE;;AAGF;EACE;EACA;EACA;EACA;;AAQF;AAAA;EAEE;EACA;EACA;;AAEA;AAAA;EACE;;AAWJ;EACE;;AAEA;EACE;;AAOJ;EACE;;AAEA;EACE;;AAMJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAKJ;EACE;EACA;;AAKF;EACE;;AAMA;EAGE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;;ACnRN;EACI;EACA;EACA;;AAIA;EACI;EACA;EACA;EACA;;AAKJ;EACI;EACA;EACA;EAOA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACI;EAEJ;EACA;;AAOA;EACI;;AAGJ;EACI;EACA;EACA;;AAGJ;EAII;EACA;EACA;EACA;;AAMJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAmBR;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAKJ;EACI;;AAEA;EACI;;AAGJ;EACI;;AAMZ;EACI;EACA;;AAMA;EACI;;AAGJ;EACI;EACA;EASA;EACA;;AAEA;EACI;EACA;;AA4BZ;EACI;EACA;EACA;EACA;;AAMJ;EACI;;AAEA;EACI;EACA;EACA;EACA;;;ACtNZ;EAGI;EAEA;EACA;EACA;;AAGA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACI;EAGJ;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAIJ;EACI;EACA;EACA,YACI;;AAGJ;EACI;;AAOZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAMJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAKR;EACI;;AAIA;EACI;;AAMR;EACI;EACA;EACA;;AAGJ;EACI;;AAKA;EACI;;AAGJ;EACI;EACA;EACA;;AAMR;EACI;;AAEA;EACI;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;EACA;;AAEA;EACI;;AAKZ;EACI;;;ACpMZ;EACI;EACA;EACA;EAEA;EACA;;AAIA;EACI;;AAEA;EACI;EACA;EACA;EACA;;;ACdZ;EACI;;AAOA;EACI;;AATR;EAYI;EAGA;EACA;EACA;;AAGA;EACI;EACA;EAEA;;AAMJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACI;EAEJ;EACA;;AAMA;EACI;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAKJ;EACI;;AAEA;EACI;;;AC/HhB;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAKA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAyBF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAKF;EACE;EACA;;AAMJ;EACE;;AAMF;EACE;;;AAIJ;EACE;IACE;IACA;;EAGF;IACE;IACA;;;ACzFJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAMA;EACE;EACA;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;AAGF;EACE;EACA;EACA;EACA,YACE;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAGF;EACA,YACE;EAEF;;AAUF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAMF;EACE;;AAEA;EAEE;;AAMN;EACE;;AAOF;EACE;EACA,YACE;;AAMJ;EACE;;;AC5JJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EAEA;;AAGF;EACE;EACA;;AAKA;EACE;;AAKF;EACE;EACA;EACA;;AAGF;EACE;;AAGA;EACE;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;;AAYF;EACE;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAKF;EACE;EACA;;AAEA;EAEE;;AAKN;EACE;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKJ;EACE;EACA;EACA;;AASA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAEA;EACE;;AAKN;EACE;;;AAgBJ;EAGE;EACA;;AAGF;EACE;EACA;;AAVJ;EAaE;EAEA;;AAEA;EACE;EACA;EACA;;AAIA;EACE;;AAGF;EACE;;AAIJ;AAAA;EAEE;;AAEA;AAAA;EACE;;AAGF;AAAA;EACE;;;ACnQN;EAEE;;AAEA;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAGF;;AAEA;EACE;EACA;;AAKJ;AAAA;AAAA;EAGE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAMA;EACE;EACA;;AAGF;EACE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;;AAEA;EACE;;AAKJ;EACE;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;;AAMR;EACE;IACE;;EAEF;IACE;;;AAIJ;EACE;IACE;IACA;;EAEF;IACE;IACA;;;ACrPJ;EACE;;AAEA;EACE;;;AAKJ;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;;;AAKF;EACE;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA,YACE;EAIF;EAEA;;;AAIF;EACE;;;AAIF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EAEA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAIF;EACE;;AAEA;EACE;;;AAMJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;;AAUN;EACE;EACA;;;AAGF;EACE;IACE;;EAEF;IACE;;;AAIJ;EACE;IACE;IACA;;EAEF;IACE;IACA;;;AC7IJ;EAGE;;AAEA;EACE;;AAOF;EACE;EACA;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;AAQJ;EACE;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAMJ;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;;AAMA;EACE;;;ACzIR;EACE;;AAEA;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA,YACE;EAIF;EACA;;AAEA;EACE;;AAMJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;;AAIF;EACE;;AAtKF;EACE;EACA;EACA;;AAGF;EACE;EACA;EAEA;EACA;EACA;EACA;EACA;;;AAkKJ;EAhLE;IACE;IACA;IACA;;EAGF;IACE;IACA;IAEA;IACA;IACA;IACA;IACA;;;AAwKJ;EACE;IACE;;EAEF;IACE;;;AAIJ;EACE;IACE;IACA;;EAEF;IACE;IACA;;;AAIJ;EACE;IACE;;EAEF;IACE;;;AC/LJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;EAEE;;;ACwDF;EACE","sourcesContent":["// _icons.generated.scss — auto-generated by scripts/build-scss.mjs\n// DO NOT EDIT — regenerated on every build from @gjsify/adwaita-icons.\n\n:root {\n --icon-go-down: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%201%205%20c%200%20-0.265625%200.105469%20-0.519531%200.292969%20-0.707031%20c%200.390625%20-0.390625%201.023437%20-0.390625%201.414062%200%20l%205.292969%205.292969%20l%205.292969%20-5.292969%20c%200.390625%20-0.390625%201.023437%20-0.390625%201.414062%200%20c%200.1875%200.1875%200.292969%200.441406%200.292969%200.707031%20s%20-0.105469%200.519531%20-0.292969%200.707031%20l%20-6%206%20c%20-0.390625%200.390625%20-1.023437%200.390625%20-1.414062%200%20l%20-6%20-6%20c%20-0.1875%20-0.1875%20-0.292969%20-0.441406%20-0.292969%20-0.707031%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-sidebar-show: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cg%20fill%3D'currentColor'%3E%20%3Cpath%20d%3D'm%206%2013%20v%20-10%20h%20-3%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%208%20c%200%200.550781%200.449219%201%201%201%20z%20m%200%200'%20fill-opacity%3D'0.34902'%2F%3E%20%3Cpath%20d%3D'm%203%201%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%208%20c%200%201.644531%201.355469%203%203%203%20h%2010%20c%201.644531%200%203%20-1.355469%203%20-3%20v%20-8%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%200%202%20h%203%20v%2010%20h%20-3%20c%20-0.570312%200%20-1%20-0.429688%20-1%20-1%20v%20-8%20c%200%20-0.570312%200.429688%20-1%201%20-1%20z%20m%204%200%20h%206%20c%200.570312%200%201%200.429688%201%201%20v%208%20c%200%200.570312%20-0.429688%201%20-1%201%20h%20-6%20z%20m%200%200'%2F%3E%20%3C%2Fg%3E%20%3C%2Fsvg%3E\");\n --icon-go-previous: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%2012%202%20c%200%20-0.265625%20-0.105469%20-0.519531%20-0.292969%20-0.707031%20c%20-0.390625%20-0.390625%20-1.023437%20-0.390625%20-1.414062%200%20l%20-6%206%20c%20-0.1875%200.1875%20-0.292969%200.441406%20-0.292969%200.707031%20s%200.105469%200.519531%200.292969%200.707031%20l%206%206%20c%200.390625%200.390625%201.023437%200.390625%201.414062%200%20c%200.1875%20-0.1875%200.292969%20-0.441406%200.292969%20-0.707031%20s%20-0.105469%20-0.519531%20-0.292969%20-0.707031%20l%20-5.292969%20-5.292969%20l%205.292969%20-5.292969%20c%200.1875%20-0.1875%200.292969%20-0.441406%200.292969%20-0.707031%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-go-next: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%204%202%20c%200%20-0.265625%200.105469%20-0.519531%200.292969%20-0.707031%20c%200.390625%20-0.390625%201.023437%20-0.390625%201.414062%200%20l%206%206%20c%200.1875%200.1875%200.292969%200.441406%200.292969%200.707031%20s%20-0.105469%200.519531%20-0.292969%200.707031%20l%20-6%206%20c%20-0.390625%200.390625%20-1.023437%200.390625%20-1.414062%200%20c%20-0.1875%20-0.1875%20-0.292969%20-0.441406%20-0.292969%20-0.707031%20s%200.105469%20-0.519531%200.292969%20-0.707031%20l%205.292969%20-5.292969%20l%20-5.292969%20-5.292969%20c%20-0.1875%20-0.1875%20-0.292969%20-0.441406%20-0.292969%20-0.707031%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-view-refresh: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%207.40625%201%20c%20-0.613281%200.007812%20-1.234375%200.089844%20-1.847656%200.253906%20c%20-3.273438%200.878906%20-5.558594%203.855469%20-5.558594%207.246094%20s%202.285156%206.367188%205.558594%207.242188%20c%203.273437%200.878906%206.742187%20-0.558594%208.4375%20-3.492188%20c%200.277344%20-0.480469%200.109375%20-1.089844%20-0.367188%20-1.367188%20c%20-0.476562%20-0.273437%20-1.089844%20-0.109374%20-1.367187%200.367188%20c%20-1.246094%202.160156%20-3.777344%203.207031%20-6.1875%202.5625%20c%20-2.40625%20-0.644531%20-4.074219%20-2.820312%20-4.074219%20-5.3125%20c%200%20-2.496094%201.667969%20-4.667969%204.074219%20-5.3125%20c%202.410156%20-0.644531%204.941406%200.402344%206.1875%202.5625%20c%200.058593%200.085938%200.125%200.164062%200.203125%200.226562%20l%20-0.019532%200.015626%20l%20-0.007812%200.007812%20h%20-1.4375%20c%20-0.550781%200%20-1%200.449219%20-1%201%20c%200%200%200%201%201%201%20h%205%20v%20-5%20s%200.003906%20-1%20-1%20-1%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%201.6875%20l%20-0.015625%200.011719%20l%20-0.011719%200.011719%20c%20-1.277344%20-2.179688%20-3.53125%20-3.519532%20-5.953125%20-3.691407%20c%20-0.203125%20-0.015625%20-0.40625%20-0.019531%20-0.613281%20-0.019531%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-open-menu: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cg%20fill%3D'currentColor'%3E%20%3Cpath%20d%3D'm%201%202%20h%2014%20v%202%20h%20-14%20z%20m%200%200'%2F%3E%20%3Cpath%20d%3D'm%201%207%20h%2014%20v%202%20h%20-14%20z%20m%200%200'%2F%3E%20%3Cpath%20d%3D'm%201%2012%20h%2014%20v%202%20h%20-14%20z%20m%200%200'%2F%3E%20%3C%2Fg%3E%20%3C%2Fsvg%3E\");\n --icon-go-home: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%200.363281%20c%20-0.5%200%20-1%200.167969%20-1.40625%200.507813%20l%20-4.464844%203.722656%20c%20-0.714844%200.59375%20-1.128906%201.476562%20-1.128906%202.40625%20v%206%20c%200%201.65625%201.34375%203%203%203%20h%208%20c%201.65625%200%203%20-1.34375%203%20-3%20v%20-6%20c%200%20-0.929688%20-0.414062%20-1.8125%20-1.128906%20-2.40625%20l%20-4.464844%20-3.722656%20c%20-0.40625%20-0.339844%20-0.90625%20-0.507813%20-1.40625%20-0.507813%20z%20m%20-0.015625%201.996094%20c%200.050781%20-0.003906%200.101563%200.011719%200.144531%200.046875%20l%204.464844%203.722656%20c%200.257812%200.214844%200.40625%200.535156%200.40625%200.871094%20v%206%20c%200%200.5625%20-0.4375%201%20-1%201%20h%20-2%20v%20-5%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20h%20-2%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%205%20h%20-2%20c%20-0.5625%200%20-1%20-0.4375%20-1%20-1%20v%20-6%20c%200%20-0.335938%200.148438%20-0.65625%200.40625%20-0.871094%20l%204.464844%20-3.722656%20c%200.035156%20-0.027344%200.074218%20-0.042969%200.113281%20-0.046875%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-list-add: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%207%201%20v%206%20h%20-6%20v%202%20h%206%20v%206%20h%202%20v%20-6%20h%206%20v%20-2%20h%20-6%20v%20-6%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-network-wireless: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%201.992188%20c%20-2.617188%200%20-5.238281%200.933593%20-7.195312%202.808593%20l%20-0.496094%200.480469%20c%20-0.3984378%200.378906%20-0.410156%201.011719%20-0.03125%201.410156%20c%200.382812%200.398438%201.015625%200.410156%201.414062%200.03125%20l%200.5%20-0.476562%20c%203.085938%20-2.957032%208.53125%20-2.957032%2011.617188%200%20l%200.5%200.476562%20c%200.398437%200.378906%201.03125%200.367188%201.414062%20-0.03125%20c%200.378906%20-0.398437%200.367188%20-1.03125%20-0.03125%20-1.410156%20l%20-0.496094%20-0.484375%20c%20-1.957031%20-1.871094%20-4.578124%20-2.804687%20-7.195312%20-2.804687%20z%20m%20-0.03125%204.007812%20c%20-1.570312%200.011719%20-3.128906%200.628906%20-4.207031%201.8125%20l%20-0.5%200.550781%20c%20-0.179688%200.195313%20-0.277344%200.453125%20-0.261719%200.71875%20c%200.011719%200.265625%200.128906%200.515625%200.328125%200.695313%20c%200.195313%200.179687%200.453125%200.273437%200.71875%200.257812%20c%200.265625%20-0.011718%200.515625%20-0.128906%200.695313%20-0.328125%20l%200.496093%20-0.546875%20c%201.277344%20-1.402344%204.160157%20-1.496094%205.523438%200.003906%20l%200.5%200.542969%20c%200.175781%200.199219%200.425781%200.316407%200.691406%200.328125%20c%200.265625%200.015625%200.523437%20-0.078125%200.722656%20-0.257812%20c%200.195313%20-0.179688%200.3125%20-0.429688%200.324219%20-0.695313%20c%200.011719%20-0.261719%20-0.082031%20-0.523437%20-0.261719%20-0.71875%20l%20-0.5%20-0.546875%20c%20-1.121093%20-1.234375%20-2.703125%20-1.828125%20-4.269531%20-1.816406%20z%20m%200.03125%204%20c%20-0.511719%200%20-1.023438%200.195312%20-1.414062%200.585938%20c%20-0.78125%200.78125%20-0.78125%202.046874%200%202.828124%20s%202.046874%200.78125%202.828124%200%20s%200.78125%20-2.046874%200%20-2.828124%20c%20-0.390624%20-0.390626%20-0.902343%20-0.585938%20-1.414062%20-0.585938%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-folder: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%202.96875%201.003906%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%208%20c%200%201.644532%201.355469%203%203%203%20h%2010%20c%201.644531%200%203%20-1.355468%203%20-3%20v%20-6%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20h%20-3.585938%20l%20-1.707031%20-1.707031%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20z%20m%200%202%20h%203.585938%20l%201%201%20h%20-5.585938%20c%200%20-0.5625%200.4375%20-1%201%20-1%20z%20m%20-1%202%20h%2011%20c%200.5625%200%201%200.4375%201%201%20v%206%20c%200%200.5625%20-0.4375%201%20-1%201%20h%20-10%20c%20-0.5625%200%20-1%20-0.4375%20-1%20-1%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-starred: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%200%20c%20-0.429688%200%20-0.8125%200.273438%20-0.949219%200.683594%20l%20-1.449219%204.339844%20l%20-4.589843%20-0.015626%20c%20-0.980469%20-0.003906%20-1.382813%201.257813%20-0.582031%201.820313%20l%203.625%202.554687%20l%20-1.5%204.285157%20c%20-0.316407%200.902343%200.6875%201.691406%201.492187%201.171875%20l%204.003906%20-2.59375%20l%203.894531%202.585937%20c%200.800782%200.53125%201.816407%20-0.257812%201.5%20-1.160156%20l%20-1.503906%20-4.289063%20l%203.644532%20-2.578124%20c%200.789062%20-0.5625%200.394531%20-1.808594%20-0.574219%20-1.8125%20l%20-4.660157%20-0.015626%20l%20-1.402343%20-4.285156%20c%20-0.132813%20-0.410156%20-0.515625%20-0.68749975%20-0.949219%20-0.691406%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-system-search: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%206.5%200%20c%20-3.578125%200%20-6.5%202.921875%20-6.5%206.5%20s%202.921875%206.496094%206.5%206.496094%20c%201.429688%200%202.753906%20-0.464844%203.828125%20-1.253906%20l%202.945313%202.945312%20c%200.957031%200.9375%202.363281%20-0.5%201.40625%20-1.4375%20l%20-2.929688%20-2.929688%20c%200.785156%20-1.074218%201.25%20-2.394531%201.25%20-3.820312%20c%200%20-3.578125%20-2.921875%20-6.5%20-6.5%20-6.5%20z%20m%200%202%20c%202.496094%200%204.5%202.003906%204.5%204.5%20s%20-2.003906%204.496094%20-4.5%204.496094%20s%20-4.5%20-2%20-4.5%20-4.496094%20s%202.003906%20-4.5%204.5%20-4.5%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-contact-new: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%201%20c%20-1.65625%200%20-3%201.34375%20-3%203%20s%201.34375%203%203%203%20s%203%20-1.34375%203%20-3%20s%20-1.34375%20-3%20-3%20-3%20z%20m%20-1.5%207%20c%20-2.492188%200%20-4.5%202.007812%20-4.5%204.5%20v%200.5%20c%200%201.109375%200.890625%202%202%202%20h%206%20v%20-1%20h%20-3%20v%20-4%20h%203%20v%20-1.972656%20c%20-0.164062%20-0.019532%20-0.332031%20-0.027344%20-0.5%20-0.027344%20z%20m%204.5%200%20v%203%20h%20-3%20v%202%20h%203%20v%203%20h%202%20v%20-3%20h%203%20v%20-2%20h%20-3%20v%20-3%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-mail-unread: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%203%202%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%206%20c%200%201.644531%201.355469%203%203%203%20h%2010%20c%201.644531%200%203%20-1.355469%203%20-3%20v%20-6%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%200.800781%202%20h%208.394531%20l%20-3.917968%202.613281%20c%20-0.171875%200.113281%20-0.382813%200.113281%20-0.554688%200%20z%20m%20-1.800781%201.203125%20l%204.613281%203.074219%20c%200.835938%200.558594%201.9375%200.558594%202.773438%200%20l%204.613281%20-3.074219%20v%205.796875%20c%200%200.570312%20-0.429688%201%20-1%201%20h%20-10%20c%20-0.570312%200%20-1%20-0.429688%20-1%20-1%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-avatar-default: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%201%20c%20-1.65625%200%20-3%201.34375%20-3%203%20s%201.34375%203%203%203%20s%203%20-1.34375%203%20-3%20s%20-1.34375%20-3%20-3%20-3%20z%20m%20-1.5%207%20c%20-2.492188%200%20-4.5%202.007812%20-4.5%204.5%20v%200.5%20c%200%201.109375%200.890625%202%202%202%20h%208%20c%201.109375%200%202%20-0.890625%202%20-2%20v%20-0.5%20c%200%20-2.492188%20-2.007812%20-4.5%20-4.5%20-4.5%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-camera-photo: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cg%20fill%3D'currentColor'%3E%20%3Cpath%20d%3D'm%206.5%200%20c%20-0.265625%200%20-0.519531%200.105469%20-0.707031%200.292969%20l%20-1.707031%201.707031%20h%20-1.085938%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%207%20c%200%201.644531%201.355469%203%203%203%20h%2010%20c%201.644531%200%203%20-1.355469%203%20-3%20v%20-7%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20h%20-1.085938%20l%20-1.707031%20-1.707031%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20z%20m%200.414062%202%20h%202.171876%20l%201.707031%201.707031%20c%200.1875%200.1875%200.441406%200.292969%200.707031%200.292969%20h%201.5%20c%200.570312%200%201%200.429688%201%201%20v%207%20c%200%200.570312%20-0.429688%201%20-1%201%20h%20-10%20c%20-0.570312%200%20-1%20-0.429688%20-1%20-1%20v%20-7%20c%200%20-0.570312%200.429688%20-1%201%20-1%20h%201.5%20c%200.265625%200%200.519531%20-0.105469%200.707031%20-0.292969%20z%20m%200%200'%2F%3E%20%3Cpath%20d%3D'm%208%204%20c%20-2.199219%200%20-4%201.800781%20-4%204%20s%201.800781%204%204%204%20s%204%20-1.800781%204%20-4%20s%20-1.800781%20-4%20-4%20-4%20z%20m%200%202%20c%201.117188%200%202%200.882812%202%202%20s%20-0.882812%202%20-2%202%20s%20-2%20-0.882812%20-2%20-2%20s%200.882812%20-2%202%20-2%20z%20m%200%200'%2F%3E%20%3C%2Fg%3E%20%3C%2Fsvg%3E\");\n --icon-user-trash: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cg%20fill%3D'currentColor'%3E%20%3Cpath%20d%3D'm%206.5%200%20c%20-1.378906%200%20-2.5%201.121094%20-2.5%202.5%20v%200.5%20h%20-3%20c%20-0.550781%200%20-1%200.449219%20-1%201%20s%200.449219%201%201%201%20h%201%20v%208%20c%200%201.65625%201.34375%203%203%203%20h%206%20c%201.65625%200%203%20-1.34375%203%20-3%20v%20-8%20h%201%20c%200.550781%200%201%20-0.449219%201%20-1%20s%20-0.449219%20-1%20-1%20-1%20h%20-3.023438%20v%20-0.5%20c%200%20-1.378906%20-1.117187%20-2.5%20-2.5%20-2.5%20z%20m%200%202%20h%202.976562%20c%200.289063%200%200.5%200.210938%200.5%200.5%20v%200.5%20h%20-3.976562%20v%20-0.5%20c%200%20-0.289062%200.210938%20-0.5%200.5%20-0.5%20z%20m%20-2.5%203%20h%208%20v%208%20c%200%200.5625%20-0.4375%201%20-1%201%20h%20-6%20c%20-0.5625%200%20-1%20-0.4375%20-1%20-1%20z%20m%200%200'%2F%3E%20%3Cpath%20d%3D'm%207%207%20v%205%20c%200%200.277344%20-0.222656%200.5%20-0.5%200.5%20s%20-0.5%20-0.222656%20-0.5%20-0.5%20v%20-5%20c%200%20-0.277344%200.222656%20-0.5%200.5%20-0.5%20s%200.5%200.222656%200.5%200.5%20z%20m%200%200'%2F%3E%20%3Cpath%20d%3D'm%2010%207%20v%205%20c%200%200.277344%20-0.222656%200.5%20-0.5%200.5%20s%20-0.5%20-0.222656%20-0.5%20-0.5%20v%20-5%20c%200%20-0.277344%200.222656%20-0.5%200.5%20-0.5%20s%200.5%200.222656%200.5%200.5%20z%20m%200%200'%2F%3E%20%3C%2Fg%3E%20%3C%2Fsvg%3E\");\n --icon-view-reveal: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%202%20c%20-3.648438%200.003906%20-6.832031%202.476562%20-7.738281%206.007812%20c%200.914062%203.527344%204.097656%205.988282%207.738281%205.992188%20c%203.648438%20-0.003906%206.832031%20-2.476562%207.738281%20-6.011719%20c%20-0.914062%20-3.523437%20-4.097656%20-5.984375%20-7.738281%20-5.988281%20z%20m%200%202%20c%202.210938%200%204%201.789062%204%204%20s%20-1.789062%204%20-4%204%20s%20-4%20-1.789062%20-4%20-4%20s%201.789062%20-4%204%20-4%20z%20m%200%202%20c%20-1.105469%200%20-2%200.894531%20-2%202%20s%200.894531%202%202%202%20s%202%20-0.894531%202%20-2%20s%20-0.894531%20-2%20-2%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-view-conceal: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%201.53125%200.46875%20l%20-1.0625%201.0625%20l%2014%2014%20l%201.0625%20-1.0625%20l%20-2.382812%20-2.382812%20c%201.265624%20-1.0625%202.171874%20-2.496094%202.589843%20-4.097657%20c%20-0.914062%20-3.523437%20-4.097656%20-5.984375%20-7.738281%20-5.988281%20c%20-1.367188%200.011719%20-2.707031%200.371094%20-3.894531%201.042969%20z%20m%206.46875%203.53125%20c%202.210938%200%204%201.789062%204%204%20c%20-0.003906%200.800781%20-0.246094%201.578125%20-0.699219%202.238281%20l%20-1.46875%20-1.46875%20c%200.105469%20-0.242187%200.164063%20-0.503906%200.167969%20-0.769531%20c%200%20-1.105469%20-0.894531%20-2%20-2%20-2%20c%20-0.265625%200.003906%20-0.527344%200.0625%20-0.769531%200.167969%20l%20-1.46875%20-1.46875%20c%200.660156%20-0.453125%201.4375%20-0.695313%202.238281%20-0.699219%20z%20m%20-6.144531%200.917969%20c%20-0.753907%200.898437%20-1.296875%201.957031%20-1.59375%203.09375%20c%200.914062%203.523437%204.097656%205.984375%207.738281%205.988281%20c%200.855469%20-0.007812%201.703125%20-0.152344%202.511719%20-0.425781%20l%20-1.667969%20-1.667969%20c%20-0.277344%200.058594%20-0.5625%200.089844%20-0.84375%200.09375%20c%20-2.210938%200%20-4%20-1.789062%20-4%20-4%20c%200.003906%20-0.28125%200.035156%20-0.566406%200.09375%20-0.84375%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-document-edit: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%2012.277344%200.832031%20c%20-0.578125%200.007813%20-1.167969%200.230469%20-1.691406%200.753907%20l%20-9%209%20c%20-0.375%200.375%20-0.585938%200.882812%20-0.585938%201.414062%20v%203%20h%203%20c%200.53125%200%201.039062%20-0.210938%201.414062%20-0.585938%20l%209%20-9%20c%201.789063%20-1.789062%200.082032%20-4.390624%20-1.890624%20-4.570312%20c%20-0.082032%20-0.011719%20-0.164063%20-0.011719%20-0.246094%20-0.011719%20z%20m%20-1.777344%203.605469%20l%201.0625%201.0625%20l%20-7.0625%207.0625%20l%20-1.0625%20-1.0625%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-document-open: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%203%201%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%208%20c%200%201.644531%201.355469%203%203%203%20h%208.882812%20c%200.832032%200%201.578126%20-0.402344%202.054688%20-0.9375%20c%200.472656%20-0.53125%200.738281%20-1.167969%200.910156%20-1.800781%20l%200.972656%20-2.609375%20c%200.390626%20-1.449219%20-0.09375%20-2.652344%20-0.820312%20-3.167969%20c%20-0.484375%20-0.34375%20-0.714844%20-0.292969%20-1%20-0.324219%20v%20-1.160156%20c%200%20-0.855469%20-0.558594%20-1.589844%20-1.09375%20-1.828125%20c%20-0.417969%20-0.1875%20-0.808594%20-0.183594%20-0.953125%20-0.171875%20h%20-3.539063%20l%20-1.707031%20-1.707031%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20z%20m%200%202%20h%202.585938%20l%201.707031%201.707031%20c%200.1875%200.1875%200.441406%200.292969%200.707031%200.292969%20h%204%20v%201%20h%20-5%20h%200.039062%20c%20-0.914062%20-0.039062%20-1.746093%200.394531%20-2.1875%200.96875%20c%20-0.714843%201.226562%20-1.160156%202.28125%20-1.800781%203.71875%20c%20-0.171875%200.527344%200.113281%201.09375%200.636719%201.265625%20c%200.527344%200.167969%201.09375%20-0.117187%201.261719%20-0.640625%20c%200.488281%20-1.011719%200.921875%20-1.816406%201.339843%20-2.808594%20c%200.210938%20-0.503906%200.703126%20-0.492187%200.898438%20-0.503906%20h%205.8125%20c%201%200%201.046875%200.703125%200.886719%201.128906%20l%20-0.96875%202.609375%20c%20-0.121094%200.4375%20-0.300781%200.800781%20-0.476563%200.996094%20c%20-0.175781%200.199219%20-0.285156%200.265625%20-0.558594%200.265625%20h%20-8.882812%20c%20-0.570312%200%20-1%20-0.429688%20-1%20-1%20v%20-8%20c%200%20-0.570312%200.46875%20-0.792969%201%20-1%20z%20m%209.105469%201.996094%20h%200.003906%20v%200.003906%20h%200.003906%20l%20-0.003906%200.003906%20h%20-0.003906%20v%20-0.003906%20c%20-0.003907%200%20-0.007813%200%20-0.011719%200%20h%20-0.003906%20l%20-0.003906%20-0.003906%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-document-save: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%200%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%208.585938%20l%20-1.292969%20-1.292969%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20s%20-0.519531%200.105469%20-0.707031%200.292969%20c%20-0.390625%200.390625%20-0.390625%201.023437%200%201.414062%20l%203%203%20c%200.390625%200.390625%201.023437%200.390625%201.414062%200%20l%203%20-3%20c%200.390625%20-0.390625%200.390625%20-1.023437%200%20-1.414062%20s%20-1.023437%20-0.390625%20-1.414062%200%20l%20-1.292969%201.292969%20v%20-8.585938%20c%200%20-0.550781%20-0.449219%20-1%20-1%20-1%20z%20m%20-7%2014%20v%202%20h%2014%20v%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-mail-send: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%200%20c%20-0.257812%200%20-0.511719%200.0976562%20-0.707031%200.292969%20l%20-1.25%201.25%20l%20-1.761719%201.730469%20c%20-0.191406%200.199218%20-0.28125%200.441406%20-0.28125%200.75%20c%200%200.976562%201%201%201%201%20c%200.257812%200%200.527344%20-0.128907%200.71875%20-0.3125%20l%201.28125%20-1.28125%20v%203.570312%20s%200%201%201%201%20s%201%20-1%201%20-1%20v%20-3.570312%20l%201.28125%201.28125%20c%200.191406%200.183593%200.410156%200.3125%200.71875%200.3125%20c%200%200%201%20-0.023438%201%20-1%20c%200%20-0.308594%20-0.089844%20-0.550782%20-0.28125%20-0.75%20l%20-1.761719%20-1.730469%20l%20-1.25%20-1.25%20c%20-0.195312%20-0.1953128%20-0.449219%20-0.292969%20-0.707031%20-0.292969%20z%20m%20-5%209%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%204%20h%202%20v%20-3.800781%20l%204.613281%203.078125%20c%200.835938%200.558594%201.9375%200.558594%202.773438%200%20l%204.613281%20-3.078125%20v%203.800781%20h%202%20v%20-4%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%200.800781%202%20h%208.398438%20l%20-3.921875%202.613281%20c%20-0.171875%200.113281%20-0.382813%200.113281%20-0.554688%200%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-mail-reply-sender: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%205%202%20c%20-0.265625%200%20-0.519531%200.105469%20-0.707031%200.292969%20l%20-4%204%20c%20-0.3906252%200.390625%20-0.3906252%201.023437%200%201.414062%20l%204%204%20c%200.390625%200.390625%201.023437%200.390625%201.414062%200%20s%200.390625%20-1.023437%200%20-1.414062%20l%20-2.292969%20-2.292969%20h%208.585938%20c%201.117188%200%202%200.882812%202%202%20v%203%20c%200%200.550781%200.449219%201%201%201%20s%201%20-0.449219%201%20-1%20v%20-3%20c%200%20-0.023438%200%20-0.046875%20-0.003906%20-0.070312%20c%20-0.035156%20-2.164063%20-1.820313%20-3.929688%20-3.996094%20-3.929688%20h%20-8.585938%20l%202.292969%20-2.292969%20c%200.390625%20-0.390625%200.390625%20-1.023437%200%20-1.414062%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-folder-documents: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%204.96875%201.003906%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%209%20c%200%201.644532%201.355469%203%203%203%20h%206%20c%201.644531%200%203%20-1.355468%203%20-3%20v%20-7.5%20c%200%20-0.265625%20-0.105469%20-0.519531%20-0.292969%20-0.707031%20l%20-3.5%20-3.5%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20z%20m%200%202%20h%204%20v%201.5%20c%200%201%200.5%201.5%201.5%201.5%20h%201.5%20v%207%20c%200%200.570313%20-0.429688%201%20-1%201%20h%20-6%20c%20-0.570312%200%20-1%20-0.429687%20-1%20-1%20v%20-9%20c%200%20-0.570312%200.429688%20-1%201%20-1%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-folder-download: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%207.984375%200%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%208.585938%20l%20-2.292969%20-2.292969%20c%20-0.1875%20-0.1875%20-0.441406%20-0.292969%20-0.707031%20-0.292969%20s%20-0.519531%200.105469%20-0.707031%200.292969%20c%20-0.390625%200.390625%20-0.390625%201.023437%200%201.414062%20l%204%204%20c%200.390625%200.390625%201.023437%200.390625%201.414062%200%20l%204%20-4%20c%200.390625%20-0.390625%200.390625%20-1.023437%200%20-1.414062%20s%20-1.023437%20-0.390625%20-1.414062%200%20l%20-2.292969%202.292969%20v%20-8.585938%20c%200%20-0.550781%20-0.449219%20-1%20-1%20-1%20z%20m%20-6%2014%20v%202%20h%2012%20v%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-view-grid: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%202%201%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%204%20c%200%200.554688%200.445312%201%201%201%20h%204%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-4%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%208%200%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%204%20c%200%200.554688%200.445312%201%201%201%20h%204%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-4%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%20-8%208%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%204%20c%200%200.554688%200.445312%201%201%201%20h%204%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-4%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%208%200%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%204%20c%200%200.554688%200.445312%201%201%201%20h%204%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-4%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-view-list: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%202%201%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%202%20c%200%200.554688%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-2%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%205%201%20v%202%20h%208%20v%20-2%20z%20m%20-5%204.015625%20c%20-0.554688%200%20-1%200.445313%20-1%201%20v%201.980469%20c%200%200.550781%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.449219%201%20-1%20v%20-1.980469%20c%200%20-0.554687%20-0.445312%20-1%20-1%20-1%20z%20m%205%200.984375%20v%202%20h%208%20v%20-2%20z%20m%20-5%204%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%201.980469%20c%200%200.550781%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.449219%201%20-1%20v%20-1.980469%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%205%200.984375%20v%202%20h%208%20v%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-view-more: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%207.996094%200%20c%20-1.105469%200%20-2%200.894531%20-2%202%20s%200.894531%202%202%202%20c%201.101562%200%202%20-0.894531%202%20-2%20s%20-0.898438%20-2%20-2%20-2%20z%20m%200%206%20c%20-1.105469%200%20-2%200.894531%20-2%202%20s%200.894531%202%202%202%20c%201.101562%200%202%20-0.894531%202%20-2%20s%20-0.898438%20-2%20-2%20-2%20z%20m%200%206%20c%20-1.105469%200%20-2%200.894531%20-2%202%20s%200.894531%202%202%202%20c%201.101562%200%202%20-0.894531%202%20-2%20s%20-0.898438%20-2%20-2%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-view-paged: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cg%20fill%3D'currentColor'%3E%20%3Cpath%20d%3D'm%209%205.5%20v%20-1%20c%200%20-0.277344%20-0.222656%20-0.5%20-0.5%20-0.5%20h%20-3%20c%20-0.277344%200%20-0.5%200.222656%20-0.5%200.5%20v%201%20c%200%200.277344%200.222656%200.5%200.5%200.5%20h%203%20c%200.277344%200%200.5%20-0.222656%200.5%20-0.5%20z%20m%200%200'%20fill-opacity%3D'0.34902'%2F%3E%20%3Cpath%20d%3D'm%204%200%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%207%20c%200%201.644531%201.355469%203%203%203%20h%206%20c%201.644531%200%203%20-1.355469%203%20-3%20v%20-7%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%200%202%20h%206%20c%200.570312%200%201%200.429688%201%201%20v%207%20c%200%200.570312%20-0.429688%201%20-1%201%20h%20-6%20c%20-0.570312%200%20-1%20-0.429688%20-1%20-1%20v%20-7%20c%200%20-0.570312%200.429688%20-1%201%20-1%20z%20m%2011%202%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%208%20c%200%200.550781%20-0.449219%201%20-1%201%20h%20-7%20c%20-0.550781%200%20-1%200.449219%20-1%201%20s%200.449219%201%201%201%20h%207%20c%201.65625%200%203%20-1.34375%203%20-3%20v%20-8%20c%200%20-0.550781%20-0.449219%20-1%20-1%20-1%20z%20m%200%200'%2F%3E%20%3Cpath%20d%3D'm%209%208.5%20v%20-1%20c%200%20-0.277344%20-0.222656%20-0.5%20-0.5%20-0.5%20h%20-3%20c%20-0.277344%200%20-0.5%200.222656%20-0.5%200.5%20v%201%20c%200%200.277344%200.222656%200.5%200.5%200.5%20h%203%20c%200.277344%200%200.5%20-0.222656%200.5%20-0.5%20z%20m%200%200'%20fill-opacity%3D'0.34902'%2F%3E%20%3C%2Fg%3E%20%3C%2Fsvg%3E\");\n --icon-view-columns: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%202%201%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%2012%20c%200%200.554688%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-12%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%205%200%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%2012%20c%200%200.554688%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-12%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%205%200%20c%20-0.554688%200%20-1%200.445312%20-1%201%20v%2012%20c%200%200.554688%200.445312%201%201%201%20h%202%20c%200.554688%200%201%20-0.445312%201%20-1%20v%20-12%20c%200%20-0.554688%20-0.445312%20-1%20-1%20-1%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-list-remove: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%201%207%20h%2014%20v%202%20h%20-14%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-send-to: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%200%20c%20-0.257812%200%20-0.511719%200.0976562%20-0.707031%200.292969%20l%20-1.246094%201.25%20l%20-1.765625%201.730469%20c%20-0.191406%200.199218%20-0.28125%200.441406%20-0.28125%200.75%20c%200%200.976562%201%201%201%201%20c%200.257812%200%200.527344%20-0.128907%200.71875%20-0.3125%20l%201.28125%20-1.28125%20v%207.570312%20s%200%201%201%201%20s%201%20-1%201%20-1%20v%20-7.570312%20l%201.28125%201.28125%20c%200.191406%200.183593%200.410156%200.3125%200.71875%200.3125%20c%200%200%201%20-0.023438%201%20-1%20c%200%20-0.308594%20-0.089844%20-0.550782%20-0.28125%20-0.75%20l%20-1.765625%20-1.730469%20l%20-1.246094%20-1.25%20c%20-0.195312%20-0.1953128%20-0.449219%20-0.292969%20-0.707031%20-0.292969%20z%20m%20-3.96875%206.964844%20c%20-1.660156%20-0.027344%20-3.03125%201.371094%20-3.03125%203.035156%20v%202.972656%20c%200%201.664063%201.371094%203.035156%203.03125%203.035156%20h%207.9375%20c%201.664062%200%203.03125%20-1.371093%203.03125%20-3.035156%20v%20-2.972656%20c%200%20-1.664062%20-1.367188%20-3.0625%20-3.03125%20-3.035156%20l%20-1.96875%200.035156%20v%202%20l%201.96875%20-0.035156%20c%200.589844%20-0.007813%201.03125%200.445312%201.03125%201.035156%20v%202.972656%20c%200%200.589844%20-0.441406%201.035156%20-1.03125%201.035156%20h%20-7.9375%20c%20-0.585938%200%20-1.03125%20-0.445312%20-1.03125%20-1.035156%20v%20-2.972656%20c%200%20-0.589844%200.445312%20-1.042969%201.03125%20-1.035156%20l%201.96875%200.035156%20v%20-2%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-folder-music: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%201%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%204.339844%20c%20-0.457031%20-0.214844%20-0.964844%20-0.339844%20-1.5%20-0.339844%20c%20-1.921875%200%20-3.5%201.578125%20-3.5%203.5%20s%201.578125%203.5%203.5%203.5%20c%201.914062%200%203.492188%20-1.570312%203.5%20-3.484375%20c%200%20-0.003906%200%20-0.011719%200%20-0.015625%20v%20-7.5%20c%200%20-0.5625%200.4375%20-1%201%20-1%20h%204%20c%200.5625%200%201%200.4375%201%201%20v%204.339844%20c%20-0.457031%20-0.214844%20-0.964844%20-0.339844%20-1.5%20-0.339844%20c%20-1.921875%200%20-3.5%201.578125%20-3.5%203.5%20s%201.578125%203.5%203.5%203.5%20s%203.5%20-1.578125%203.5%20-3.5%20v%20-7.5%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%20-4.5%209%20c%200.839844%200%201.5%200.660156%201.5%201.5%20v%200.015625%20c%20-0.007812%200.832031%20-0.664062%201.484375%20-1.5%201.484375%20c%20-0.839844%200%20-1.5%20-0.660156%20-1.5%20-1.5%20s%200.660156%20-1.5%201.5%20-1.5%20z%20m%208%200%20c%200.839844%200%201.5%200.660156%201.5%201.5%20s%20-0.660156%201.5%20-1.5%201.5%20s%20-1.5%20-0.660156%20-1.5%20-1.5%20s%200.660156%20-1.5%201.5%20-1.5%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-edit-copy: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%200%203%20c%200%20-1.644531%201.355469%20-3%203%20-3%20h%205%20c%201.644531%200%203%201.355469%203%203%20c%200%200.550781%20-0.449219%201%20-1%201%20s%20-1%20-0.449219%20-1%20-1%20c%200%20-0.570312%20-0.429688%20-1%20-1%20-1%20h%20-5%20c%20-0.570312%200%20-1%200.429688%20-1%201%20v%205%20c%200%200.570312%200.429688%201%201%201%20c%200.550781%200%201%200.449219%201%201%20s%20-0.449219%201%20-1%201%20c%20-1.644531%200%20-3%20-1.355469%20-3%20-3%20z%20m%205%205%20c%200%20-1.644531%201.355469%20-3%203%20-3%20h%205%20c%201.644531%200%203%201.355469%203%203%20v%205%20c%200%201.644531%20-1.355469%203%20-3%203%20h%20-5%20c%20-1.644531%200%20-3%20-1.355469%20-3%20-3%20z%20m%202%200%20v%205%20c%200%200.570312%200.429688%201%201%201%20h%205%20c%200.570312%200%201%20-0.429688%201%20-1%20v%20-5%20c%200%20-0.570312%20-0.429688%20-1%20-1%20-1%20h%20-5%20c%20-0.570312%200%20-1%200.429688%20-1%201%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-emblem-system: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208%200%20c%20-0.550781%200%20-1%200.449219%20-1%201%20v%200.238281%20c%200%200.464844%20-0.378906%200.902344%20-0.820312%201.046875%20c%20-0.023438%200.007813%20-0.042969%200.011719%20-0.0625%200.019532%20c%20-0.445313%200.148437%20-1.007813%200.015624%20-1.28125%20-0.359376%20l%20-0.140626%20-0.195312%20c%20-0.15625%20-0.214844%20-0.390624%20-0.359375%20-0.652343%20-0.398438%20c%20-0.261719%20-0.042968%20-0.53125%200.019532%20-0.742188%200.175782%20c%20-0.449219%200.324218%20-0.550781%200.949218%20-0.222656%201.398437%20l%200.140625%200.199219%20c%200.277344%200.375%200.226562%200.953125%20-0.050781%201.328125%20c%20-0.011719%200.015625%20-0.023438%200.035156%20-0.035157%200.050781%20c%20-0.273437%200.378906%20-0.804687%200.601563%20-1.25%200.457032%20l%20-0.230468%20-0.074219%20c%20-0.523438%20-0.171875%20-1.089844%200.117187%20-1.257813%200.640625%20c%20-0.171875%200.527344%200.113281%201.089844%200.640625%201.261718%20l%200.222656%200.074219%20c%200.445313%200.144531%200.738282%200.636719%200.75%201.101563%20v%200.070312%20c%200.015626%200.464844%20-0.304687%200.960938%20-0.746093%201.105469%20l%20-0.226563%200.070313%20c%20-0.527344%200.171874%20-0.8125%200.738281%20-0.640625%201.261718%20c%200.167969%200.523438%200.734375%200.8125%201.257813%200.640625%20l%200.230468%20-0.074219%20c%200.445313%20-0.144531%200.976563%200.078126%201.25%200.457032%20c%200.011719%200.015625%200.027344%200.035156%200.039063%200.050781%20c%200.277344%200.375%200.324219%200.953125%200.050781%201.328125%20l%20-0.144531%200.203125%20c%20-0.324219%200.445313%20-0.226563%201.070313%200.222656%201.394531%20c%200.445313%200.324219%201.070313%200.226563%201.394531%20-0.21875%20l%200.144532%20-0.199218%20c%200.273437%20-0.378907%200.835937%20-0.507813%201.277344%20-0.359376%20c%200.019531%200.007813%200.042968%200.011719%200.0625%200.019532%20c%200.445312%200.140625%200.820312%200.578125%200.820312%201.046875%20v%200.238281%20c%200%200.550781%200.449219%201%201%201%20s%201%20-0.449219%201%20-1%20v%20-0.238281%20c%200%20-0.46875%200.378906%20-0.90625%200.820312%20-1.046875%20c%200.023438%20-0.007813%200.042969%20-0.015625%200.066407%20-0.023438%20c%200.441406%20-0.144531%201.003906%20-0.015625%201.277343%200.363282%20l%200.144532%200.199218%20c%200.324218%200.445313%200.949218%200.542969%201.394531%200.21875%20c%200.445313%20-0.324218%200.546875%20-0.949218%200.222656%20-1.394531%20l%20-0.148437%20-0.203125%20c%20-0.273438%20-0.375%20-0.226563%20-0.953125%200.050781%20-1.328125%20c%200.015625%20-0.015625%200.027344%20-0.035156%200.039063%20-0.050781%20c%200.273437%20-0.378906%200.804687%20-0.601563%201.25%20-0.457032%20l%200.234374%200.078126%20c%200.523438%200.167968%201.085938%20-0.121094%201.257813%20-0.644532%20c%200.171875%20-0.523437%20-0.117187%20-1.089844%20-0.640625%20-1.257812%20l%20-0.230469%20-0.074219%20c%20-0.445312%20-0.144531%20-0.734375%20-0.640625%20-0.746093%20-1.105469%20c%200%20-0.023437%200%20-0.046875%200%20-0.070312%20c%20-0.015626%20-0.464844%200.300781%20-0.957032%200.746093%20-1.101563%20l%200.230469%20-0.074219%20c%200.523438%20-0.171874%200.8125%20-0.734374%200.640625%20-1.261718%20c%20-0.171875%20-0.523438%20-0.734375%20-0.8125%20-1.257813%20-0.640625%20l%20-0.230468%200.074219%20c%20-0.445313%200.144531%20-0.980469%20-0.078126%20-1.253906%20-0.457032%20c%20-0.011719%20-0.015625%20-0.023438%20-0.035156%20-0.035157%20-0.050781%20c%20-0.277343%20-0.375%20-0.324219%20-0.953125%20-0.050781%20-1.328125%20l%200.144531%20-0.199219%20c%200.324219%20-0.445312%200.226563%20-1.074219%20-0.222656%20-1.398437%20c%20-0.214844%20-0.15625%20-0.480469%20-0.21875%20-0.742187%20-0.179688%20c%20-0.265626%200.042969%20-0.5%200.1875%20-0.652344%200.402344%20l%20-0.144532%200.195312%20c%20-0.273437%200.378907%20-0.835937%200.507813%20-1.28125%200.363282%20c%20-0.019531%20-0.007813%20-0.039062%20-0.015625%20-0.0625%20-0.023438%20c%20-0.441406%20-0.140625%20-0.820312%20-0.578125%20-0.820312%20-1.046875%20v%20-0.238281%20c%200%20-0.550781%20-0.449219%20-1%20-1%20-1%20z%20m%200%204%20c%200.871094%200%201.675781%200.273438%202.332031%200.742188%20c%200.003907%200.007812%200.011719%200.015624%200.019531%200.023437%20c%200.011719%200.003906%200.019532%200.007813%200.03125%200.015625%20c%200.660157%200.484375%201.160157%201.171875%201.421876%201.976562%20v%200.007813%20s%200.003906%200.003906%200.003906%200.007813%20c%200.292968%200.851562%200.15625%201.65625%200%202.457031%20c%200%200%20-0.003906%200.003906%20-0.003906%200.007812%20v%200.003907%20c%20-0.261719%200.800781%20-0.757813%201.488281%20-1.414063%201.976562%20c%20-0.015625%200.003906%20-0.027344%200.011719%20-0.039063%200.019531%20c%20-0.007812%200.003907%20-0.015624%200.011719%20-0.019531%200.019531%20c%20-0.65625%200.46875%20-1.460937%200.742188%20-2.332031%200.742188%20c%20-0.855469%200%20-1.644531%20-0.265625%20-2.289062%20-0.714844%20c%20-0.019532%20-0.015625%20-0.042969%20-0.035156%20-0.0625%20-0.046875%20c%20-0.011719%20-0.007812%20-0.023438%20-0.015625%20-0.035157%20-0.019531%20c%20-0.652343%20-0.484375%20-1.148437%20-1.160156%20-1.40625%20-1.945312%20c%20-0.003906%20-0.015626%20-0.007812%20-0.023438%20-0.011719%20-0.035157%20c%20-0.003906%20-0.007812%20-0.007812%20-0.015625%20-0.011718%20-0.019531%20c%20-0.285156%20-0.847656%20-0.148438%20-1.644531%200%20-2.4375%20c%200.003906%20-0.007812%200.007812%20-0.011719%200.011718%20-0.019531%20c%200.003907%20-0.011719%200.007813%20-0.023438%200.011719%20-0.039063%20c%200.261719%20-0.785156%200.757813%20-1.460937%201.414063%20-1.945312%20c%200.007812%20-0.003906%200.019531%20-0.007813%200.027344%20-0.015625%20c%200.019531%20-0.011719%200.042968%20-0.03125%200.058593%20-0.046875%20c%200.648438%20-0.449219%201.4375%20-0.714844%202.292969%20-0.714844%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-preferences-system: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%2013.855469%200%20l%20-1.539063%201.4375%20c%20-0.453125%200.421875%20-0.53125%201.148438%20-0.269531%201.707031%20l%20-5.886719%205.996094%20c%20-0.011718%200%20-0.019531%200%20-0.03125%200%20c%20-0.257812%20-0.128906%20-0.550781%20-0.183594%20-0.839844%20-0.148437%20c%20-0.328124%200.046874%20-0.632812%200.199218%20-0.867187%200.441406%20l%20-3.945313%203.996094%20c%20-0.3906245%200.375%20-0.5468745%200.933593%20-0.4062495%201.457031%20c%200.1406255%200.523437%200.5546875%200.929687%201.0820315%201.058593%20c%200.527344%200.132813%201.082031%20-0.03125%201.453125%20-0.425781%20l%203.945312%20-3.996093%20c%200.472657%20-0.453126%200.59375%20-1.15625%200.296875%20-1.738282%20l%205.890625%20-5.964844%20c%200.558594%200.25%201.273438%200.148438%201.707031%20-0.289062%20l%201.414063%20-1.5625%20z%20m%20-10.308594%200.0898438%20c%20-0.398437%200%20-0.785156%200.0937502%20-1.140625%200.2187502%20l%201.882812%201.878906%20c%200.390626%200.382812%200.390626%201%200%201.386719%20l%20-0.710937%200.707031%20c%20-0.386719%200.386719%20-1%200.386719%20-1.390625%200%20l%20-1.882812%20-1.878906%20c%20-0.125%200.355468%20-0.2187505%200.742187%20-0.2187505%201.140625%20c%200%201.90625%201.5507815%203.453125%203.4609375%203.453125%20c%200.402344%200%200.789063%20-0.09375%201.144531%20-0.21875%20l%201.175782%201.171875%20h%200.058593%20l%202.070313%20-2.0625%20l%20-1.203125%20-1.203125%20c%200.125%20-0.359375%200.214843%20-0.742188%200.214843%20-1.140625%20c%200%20-1.90625%20-1.546874%20-3.4531252%20-3.460937%20-3.4531252%20z%20m%206.550781%207.8906252%20l%20-2.070312%202.066406%20c%200.011718%200.027344%200.023437%200.058594%200.03125%200.089844%20l%201.144531%201.140625%20c%20-0.125%200.355468%20-0.21875%200.742187%20-0.21875%201.140625%20c%200%201.902343%201.550781%203.449219%203.460937%203.449219%20c%200.433594%200%200.855469%20-0.101563%201.238282%20-0.246094%20l%20-2.007813%20-2%20c%20-0.386719%20-0.386719%20-0.386719%20-1.035156%200%20-1.417969%20l%200.679688%20-0.679687%20c%200.195312%20-0.191407%200.457031%20-0.308594%200.710937%20-0.308594%20s%200.515625%200.117187%200.710938%200.308594%20l%201.945312%201.941406%20c%200.105469%20-0.328125%200.183594%20-0.683594%200.183594%20-1.046875%20c%200%20-1.90625%20-1.546875%20-3.453125%20-3.460938%20-3.453125%20c%20-0.398437%200%20-0.785156%200.09375%20-1.140624%200.21875%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-application-x-executable: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%208.015625%200.015625%20c%20-0.769531%200%20-1.539063%200.292969%20-2.121094%200.875%20l%20-5.003906%205.003906%20c%20-1.164063%201.164063%20-1.164063%203.078125%200%204.242188%20l%205.003906%205.003906%20c%201.164063%201.164063%203.078125%201.164063%204.242188%200%20l%205.007812%20-5.003906%20c%201.164063%20-1.164063%201.164063%20-3.078125%200%20-4.242188%20l%20-5.007812%20-5.003906%20c%20-0.582031%20-0.582031%20-1.351563%20-0.875%20-2.121094%20-0.875%20z%20m%200.101563%201.988281%20c%200.210937%200.023438%200.414062%200.117188%200.585937%200.28125%20l%20-0.339844%200.113282%20c%20-0.074219%20-0.136719%20-0.15625%20-0.269532%20-0.246093%20-0.394532%20z%20m%20-1.570313%201.058594%20c%200.300781%200.421875%200.464844%200.929688%200.46875%201.453125%20c%200%201.378906%20-1.121094%202.5%20-2.5%202.5%20c%20-0.523437%20-0.003906%20-1.03125%20-0.171875%20-1.449219%20-0.472656%20z%20m%203.441406%200.503906%20l%203.742188%203.742188%20c%200.402343%200.402344%200.402343%201.011718%200%201.414062%20l%20-0.253907%200.25%20c%20-0.039062%20-0.046875%20-0.074218%20-0.09375%20-0.117187%20-0.140625%20l%200.621094%20-0.855469%20l%20-0.808594%20-0.585937%20l%20-0.621094%200.851563%20c%20-0.167969%20-0.078126%20-0.347656%20-0.136719%20-0.535156%20-0.175782%20v%20-1.050781%20h%20-1%20v%201.050781%20c%20-0.183594%200.039063%20-0.363281%200.097656%20-0.53125%200.175782%20l%20-0.621094%20-0.851563%20l%20-0.804687%200.585937%20l%200.617187%200.855469%20c%20-0.125%200.136719%20-0.238281%200.289063%20-0.332031%200.453125%20l%20-1%20-0.324218%20l%20-0.308594%200.949218%20l%201%200.324219%20c%20-0.011718%200.09375%20-0.019531%200.1875%20-0.019531%200.28125%20s%200.007813%200.1875%200.019531%200.28125%20l%20-1%200.324219%20l%200.308594%200.949218%20l%201%20-0.324218%20c%200.09375%200.164062%200.207031%200.316406%200.332031%200.453125%20l%20-0.617187%200.855469%20l%200.195312%200.140624%20l%20-0.53125%200.53125%20c%20-0.402344%200.40625%20-1.011718%200.40625%20-1.414062%200%20l%20-4.902344%20-4.902343%20l%200.027344%20-0.039063%20l%200.210937%20-0.289062%20c%200.328125%200.152344%200.679688%200.269531%201.046875%200.339844%20v%201.179687%20h%201.648438%20v%20-1.179687%20c%200.363281%20-0.070313%200.714844%20-0.1875%201.046875%20-0.339844%20l%200.207031%200.289062%20l%200.484375%200.667969%20l%201.335937%20-0.972656%20l%20-0.484374%20-0.667969%20l%20-0.210938%20-0.289062%20c%200.25%20-0.269532%200.46875%20-0.566407%200.648438%20-0.890626%20l%200.339843%200.113282%20l%200.785157%200.253906%20l%200.507812%20-1.566406%20l%20-0.785156%20-0.257813%20l%20-0.335938%20-0.109375%20c%200.019532%20-0.179687%200.035156%20-0.363281%200.035156%20-0.550781%20s%20-0.015624%20-0.371094%20-0.035156%20-0.550781%20l%200.335938%20-0.109375%20l%200.785156%20-0.257813%20z%20m%201.527344%205.449219%20c%200.527344%200%200.984375%200.265625%201.25%200.667969%20l%20-2.078125%202.082031%20c%20-0.40625%20-0.269531%20-0.671875%20-0.722656%20-0.671875%20-1.25%20c%200%20-0.835937%200.667969%20-1.5%201.5%20-1.5%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3Cpath%20d%3D'm%204.039062%20-18.988281%20c%20-1.449218%200%20-2.679687%201.046875%20-2.964843%202.421875%20c%20-0.019531%200.097656%20-0.035157%200.199218%20-0.046875%200.300781%20c%20-0.007813%200.101563%20-0.015625%200.203125%20-0.015625%200.304687%20v%207.910157%20c%200%201.660156%201.367187%203.027343%203.027343%203.027343%20h%207.949219%20c%201.660157%200%203.027344%20-1.367187%203.027344%20-3.027343%20v%20-7.910157%20c%200%20-0.105468%20-0.003906%20-0.207031%20-0.015625%20-0.304687%20c%20-0.011719%20-0.101563%20-0.027344%20-0.203125%20-0.046875%20-0.300781%20c%20-0.285156%20-1.375%20-1.511719%20-2.421875%20-2.964844%20-2.421875%20z%20m%200%202.003906%20h%202.976563%20v%203%20h%20-2.976563%20c%20-0.585937%200%20-1.027343%20-0.441406%20-1.027343%20-1.027344%20v%20-0.949219%20c%200.003906%20-0.035156%200.003906%20-0.070312%200.007812%20-0.105468%20c%200.003907%20-0.035156%200.007813%20-0.070313%200.011719%20-0.105469%20c%200.007812%20-0.035156%200.019531%20-0.066406%200.027344%20-0.097656%20c%200.125%20-0.421875%200.503906%20-0.714844%200.980468%20-0.714844%20z%20m%204.976563%200%20h%202.972656%20c%200.585938%200%201.023438%200.4375%201.027344%201.023437%20v%200.949219%20c%200%200.585938%20-0.441406%201.027344%20-1.027344%201.027344%20h%20-2.972656%20z%20m%204%203.71875%20v%205.214844%20c%200%200.585937%20-0.441406%201.027343%20-1.027344%201.027343%20h%20-7.949219%20c%20-0.585937%200%20-1.027343%20-0.441406%20-1.027343%20-1.027343%20v%20-5.175781%20c%200.324219%200.148437%200.671875%200.246093%201.027343%200.246093%20h%202.976563%20v%203.035157%20l%202%200.992187%20v%20-4.027344%20h%202.972656%20c%200.34375%200%200.695313%20-0.113281%201.027344%20-0.285156%20z%20m%20-5%2033.28125%20c%20-0.851563%200%20-1.699219%200.328125%20-2.351563%200.976563%20l%20-4.671874%204.671874%20c%20-1.300782%201.300782%20-1.300782%203.402344%200%204.703126%20l%204.671874%204.671874%20c%201.300782%201.300782%203.402344%201.300782%204.699219%200%20l%204.675781%20-4.671874%20c%201.300782%20-1.300782%201.300782%20-3.402344%200%20-4.703126%20l%20-4.675781%20-4.671874%20c%20-0.648437%20-0.648438%20-1.496093%20-0.976563%20-2.347656%20-0.976563%20z%20m%200%201.984375%20c%200.335937%200%200.675781%200.132812%200.941406%200.402344%20l%203.03125%203.027344%20c%20-0.066406%200.039062%20-0.136719%200.070312%20-0.210937%200.09375%20c%20-0.019532%200.003906%20-0.039063%200.011718%20-0.0625%200.015624%20c%20-0.441406%200.148438%20-1.003906%200.019532%20-1.277344%20-0.359374%20l%20-0.140625%20-0.195313%20c%20-0.15625%20-0.210937%20-0.390625%20-0.355469%20-0.652344%20-0.398437%20c%20-0.066406%20-0.011719%20-0.132812%20-0.015626%20-0.199219%20-0.011719%20c%20-0.195312%200.007812%20-0.382812%200.074219%20-0.542968%200.191406%20c%20-0.449219%200.324219%20-0.550782%200.949219%20-0.226563%201.394531%20l%200.144531%200.199219%20c%200.273438%200.378906%200.226563%200.953125%20-0.050781%201.332031%20c%20-0.011719%200.015625%20-0.023437%200.03125%20-0.035156%200.050782%20c%20-0.273437%200.378906%20-0.808594%200.597656%20-1.253906%200.453124%20l%20-0.226563%20-0.074218%20c%20-0.523437%20-0.167969%20-1.089844%200.117187%20-1.257812%200.644531%20c%20-0.171875%200.523437%200.113281%201.089844%200.636718%201.261719%20l%200.226563%200.070312%20c%200.445313%200.144532%200.738281%200.640625%200.746094%201.105469%20c%200.003906%200.023437%200.003906%200.042969%200.003906%200.066406%20c%200.015625%200.464844%20-0.304687%200.960938%20-0.75%201.105469%20l%20-0.226563%200.074219%20c%20-0.179687%200.058593%20-0.332031%200.164062%20-0.445312%200.296875%20l%20-3.785156%20-3.785156%20c%20-0.535156%20-0.535157%20-0.535156%20-1.355469%200%20-1.890626%20l%204.667968%20-4.667968%20c%200.269532%20-0.269532%200.609376%20-0.402344%200.945313%20-0.402344%20z%20m%205.585937%205.234375%20c%200.058594%200%200.117188%200.003906%200.175782%200.007813%20c%200.382812%200.523437%200.335937%201.234374%20-0.144532%201.71875%20l%20-3.753906%203.75%20c%20-0.027344%20-0.066407%20-0.050781%20-0.136719%20-0.070312%20-0.203126%20c%20-0.003906%20-0.011718%20-0.007813%20-0.023437%20-0.011719%20-0.035156%20c%20-0.003906%20-0.007812%20-0.007813%20-0.011718%20-0.011719%20-0.019531%20c%20-0.285156%20-0.84375%20-0.152344%20-1.644531%200%20-2.4375%20c%200.003906%20-0.003906%200.007813%20-0.007813%200.011719%20-0.015625%20c%200.003906%20-0.011719%200.007813%20-0.027344%200.011719%20-0.039062%20c%200.261718%20-0.789063%200.757812%20-1.464844%201.410156%20-1.945313%20c%200.011719%20-0.003906%200.023438%20-0.011719%200.03125%20-0.015625%20c%200.019531%20-0.015625%200.042969%20-0.03125%200.058594%20-0.046875%20c%200.648437%20-0.453125%201.4375%20-0.71875%202.292968%20-0.71875%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-window-close: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%204%204%20h%201%20h%200.03125%20c%200.253906%200.011719%200.511719%200.128906%200.6875%200.3125%20l%202.28125%202.28125%20l%202.3125%20-2.28125%20c%200.265625%20-0.230469%200.445312%20-0.304688%200.6875%20-0.3125%20h%201%20v%201%20c%200%200.285156%20-0.035156%200.550781%20-0.25%200.75%20l%20-2.28125%202.28125%20l%202.25%202.25%20c%200.1875%200.1875%200.28125%200.453125%200.28125%200.71875%20v%201%20h%20-1%20c%20-0.265625%200%20-0.53125%20-0.09375%20-0.71875%20-0.28125%20l%20-2.28125%20-2.28125%20l%20-2.28125%202.28125%20c%20-0.1875%200.1875%20-0.453125%200.28125%20-0.71875%200.28125%20h%20-1%20v%20-1%20c%200%20-0.265625%200.09375%20-0.53125%200.28125%20-0.71875%20l%202.28125%20-2.25%20l%20-2.28125%20-2.28125%20c%20-0.210938%20-0.195312%20-0.304688%20-0.46875%20-0.28125%20-0.75%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-window-minimize: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%204%2010.007812%20h%208%20v%201.988282%20h%20-8%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-window-maximize: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%203.988281%203.992188%20v%208.011718%20h%208.011719%20v%20-8.011718%20z%20m%202%202%20h%204.011719%20v%204.011718%20h%20-4.011719%20z%20m%200%200'%20fill%3D'currentColor'%2F%3E%20%3C%2Fsvg%3E\");\n --icon-image-missing: url(\"data:image/svg+xml,%3Csvg%20height%3D'16px'%20viewBox%3D'0%200%2016%2016'%20width%3D'16px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%20%3Cpath%20d%3D'm%204.015625%201.03125%20c%20-1.644531%200%20-3%201.355469%20-3%203%20v%201%20h%201%20v%20-1%20c%200%20-1.109375%200.890625%20-2%202%20-2%20h%201%20v%20-1%20z%20m%202%200%20v%201%20h%204%20v%20-1%20z%20m%205%200%20v%201%20h%201%20c%201.109375%200%202%200.890625%202%202%20v%201%20h%201%20v%20-1%20c%200%20-1.644531%20-1.355469%20-3%20-3%20-3%20z%20m%20-5%204%20c%20-0.550781%200%20-1%200.449219%20-1%201%20s%200.449219%201%201%201%20s%201%20-0.449219%201%20-1%20s%20-0.449219%20-1%20-1%20-1%20z%20m%20-5%201%20v%204%20h%201%20v%20-4%20z%20m%2013%200%20v%204%20h%201%20v%20-4%20z%20m%20-4.5%202%20l%20-2%202%20l%20-1.5%20-1%20l%20-2%202%20v%200.5%20c%200%200.5%200.5%200.5%200.5%200.5%20h%207%20s%200.472656%20-0.035156%200.5%20-0.5%20v%20-1%20z%20m%20-8.5%203%20v%201%20c%200%201.644531%201.355469%203%203%203%20h%201%20v%20-1%20h%20-1%20c%20-1.109375%200%20-2%20-0.890625%20-2%20-2%20v%20-1%20z%20m%2013%200%20v%201%20c%200%201.109375%20-0.890625%202%20-2%202%20h%20-1%20v%201%20h%201%20c%201.644531%200%203%20-1.355469%203%20-3%20v%20-1%20z%20m%20-8%203%20v%201%20h%204%20v%20-1%20z%20m%200%200'%20fill%3D'currentColor'%20fill-opacity%3D'0.34902'%2F%3E%20%3C%2Fsvg%3E\");\n}\n\n.adw-icon--go-down {\n mask-image: var(--icon-go-down);\n -webkit-mask-image: var(--icon-go-down);\n}\n\n.adw-icon--sidebar-show {\n mask-image: var(--icon-sidebar-show);\n -webkit-mask-image: var(--icon-sidebar-show);\n}\n\n.adw-icon--go-previous {\n mask-image: var(--icon-go-previous);\n -webkit-mask-image: var(--icon-go-previous);\n}\n\n.adw-icon--go-next {\n mask-image: var(--icon-go-next);\n -webkit-mask-image: var(--icon-go-next);\n}\n\n.adw-icon--view-refresh {\n mask-image: var(--icon-view-refresh);\n -webkit-mask-image: var(--icon-view-refresh);\n}\n\n.adw-icon--open-menu {\n mask-image: var(--icon-open-menu);\n -webkit-mask-image: var(--icon-open-menu);\n}\n\n.adw-icon--go-home {\n mask-image: var(--icon-go-home);\n -webkit-mask-image: var(--icon-go-home);\n}\n\n.adw-icon--list-add {\n mask-image: var(--icon-list-add);\n -webkit-mask-image: var(--icon-list-add);\n}\n\n.adw-icon--network-wireless {\n mask-image: var(--icon-network-wireless);\n -webkit-mask-image: var(--icon-network-wireless);\n}\n\n.adw-icon--folder {\n mask-image: var(--icon-folder);\n -webkit-mask-image: var(--icon-folder);\n}\n\n.adw-icon--starred {\n mask-image: var(--icon-starred);\n -webkit-mask-image: var(--icon-starred);\n}\n\n.adw-icon--system-search {\n mask-image: var(--icon-system-search);\n -webkit-mask-image: var(--icon-system-search);\n}\n\n.adw-icon--contact-new {\n mask-image: var(--icon-contact-new);\n -webkit-mask-image: var(--icon-contact-new);\n}\n\n.adw-icon--mail-unread {\n mask-image: var(--icon-mail-unread);\n -webkit-mask-image: var(--icon-mail-unread);\n}\n\n.adw-icon--avatar-default {\n mask-image: var(--icon-avatar-default);\n -webkit-mask-image: var(--icon-avatar-default);\n}\n\n.adw-icon--camera-photo {\n mask-image: var(--icon-camera-photo);\n -webkit-mask-image: var(--icon-camera-photo);\n}\n\n.adw-icon--user-trash {\n mask-image: var(--icon-user-trash);\n -webkit-mask-image: var(--icon-user-trash);\n}\n\n.adw-icon--view-reveal {\n mask-image: var(--icon-view-reveal);\n -webkit-mask-image: var(--icon-view-reveal);\n}\n\n.adw-icon--view-conceal {\n mask-image: var(--icon-view-conceal);\n -webkit-mask-image: var(--icon-view-conceal);\n}\n\n.adw-icon--document-edit {\n mask-image: var(--icon-document-edit);\n -webkit-mask-image: var(--icon-document-edit);\n}\n\n.adw-icon--document-open {\n mask-image: var(--icon-document-open);\n -webkit-mask-image: var(--icon-document-open);\n}\n\n.adw-icon--document-save {\n mask-image: var(--icon-document-save);\n -webkit-mask-image: var(--icon-document-save);\n}\n\n.adw-icon--mail-send {\n mask-image: var(--icon-mail-send);\n -webkit-mask-image: var(--icon-mail-send);\n}\n\n.adw-icon--mail-reply-sender {\n mask-image: var(--icon-mail-reply-sender);\n -webkit-mask-image: var(--icon-mail-reply-sender);\n}\n\n.adw-icon--folder-documents {\n mask-image: var(--icon-folder-documents);\n -webkit-mask-image: var(--icon-folder-documents);\n}\n\n.adw-icon--folder-download {\n mask-image: var(--icon-folder-download);\n -webkit-mask-image: var(--icon-folder-download);\n}\n\n.adw-icon--view-grid {\n mask-image: var(--icon-view-grid);\n -webkit-mask-image: var(--icon-view-grid);\n}\n\n.adw-icon--view-list {\n mask-image: var(--icon-view-list);\n -webkit-mask-image: var(--icon-view-list);\n}\n\n.adw-icon--view-more {\n mask-image: var(--icon-view-more);\n -webkit-mask-image: var(--icon-view-more);\n}\n\n.adw-icon--view-paged {\n mask-image: var(--icon-view-paged);\n -webkit-mask-image: var(--icon-view-paged);\n}\n\n.adw-icon--view-columns {\n mask-image: var(--icon-view-columns);\n -webkit-mask-image: var(--icon-view-columns);\n}\n\n.adw-icon--list-remove {\n mask-image: var(--icon-list-remove);\n -webkit-mask-image: var(--icon-list-remove);\n}\n\n.adw-icon--send-to {\n mask-image: var(--icon-send-to);\n -webkit-mask-image: var(--icon-send-to);\n}\n\n.adw-icon--folder-music {\n mask-image: var(--icon-folder-music);\n -webkit-mask-image: var(--icon-folder-music);\n}\n\n.adw-icon--edit-copy {\n mask-image: var(--icon-edit-copy);\n -webkit-mask-image: var(--icon-edit-copy);\n}\n\n.adw-icon--emblem-system {\n mask-image: var(--icon-emblem-system);\n -webkit-mask-image: var(--icon-emblem-system);\n}\n\n.adw-icon--preferences-system {\n mask-image: var(--icon-preferences-system);\n -webkit-mask-image: var(--icon-preferences-system);\n}\n\n.adw-icon--application-x-executable {\n mask-image: var(--icon-application-x-executable);\n -webkit-mask-image: var(--icon-application-x-executable);\n}\n\n.adw-icon--window-close {\n mask-image: var(--icon-window-close);\n -webkit-mask-image: var(--icon-window-close);\n}\n\n.adw-icon--window-minimize {\n mask-image: var(--icon-window-minimize);\n -webkit-mask-image: var(--icon-window-minimize);\n}\n\n.adw-icon--window-maximize {\n mask-image: var(--icon-window-maximize);\n -webkit-mask-image: var(--icon-window-maximize);\n}\n\n.adw-icon--image-missing {\n mask-image: var(--icon-image-missing);\n -webkit-mask-image: var(--icon-image-missing);\n}\n","// _variables.scss — Adwaita CSS custom properties (light theme defaults).\n// Reference: refs/libadwaita/src/stylesheet/_colors.scss (canonical color palette)\n// Reference: refs/adwaita-web/adwaita-web/scss/_variables.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Subset adapted for @gjsify/adwaita-web Web Components.\n\n@mixin light-theme {\n // Window\n --window-bg-color: #fafafb;\n --window-fg-color: rgba(0, 0, 6, 0.8);\n\n // Views\n --view-bg-color: #ffffff;\n --view-fg-color: rgba(0, 0, 6, 0.8);\n\n // Header bar\n --headerbar-bg-color: #ffffff;\n --headerbar-fg-color: rgba(0, 0, 6, 0.8);\n --headerbar-shade-color: rgba(0, 0, 6, 0.12);\n\n // Hairline separators (header underline, sidebar/pane dividers). Subtle in\n // BOTH themes — dark theme flips to a faint light line, the way libadwaita\n // draws separators, instead of a harsh near-black line on a dark surface.\n --separator-color: rgba(0, 0, 6, 0.1);\n\n // The GENERIC shade the whole `*-shade-color` family below specialises\n // (`_colors.scss:79,141`). Scroll undershoots are drawn from it, and it belongs\n // to the palette rather than to any one widget: a scroller can sit on a window,\n // a view, a sidebar or a card, and reading its neighbour's shade would make the\n // same indicator four different colours.\n --shade-color: rgba(0, 0, 6, 0.07);\n\n // Sidebar / split panes. libadwaita defines the whole family, not just the\n // background (_colors.scss:47-58), and only the background was here — so\n // `.sidebar-pane` had no foreground to name, and an app overriding\n // `--sidebar-fg-color` was overriding nothing.\n --sidebar-bg-color: #ebebed;\n --sidebar-fg-color: rgba(0, 0, 6, 0.8);\n --sidebar-backdrop-color: #f2f2f4;\n --sidebar-shade-color: rgba(0, 0, 6, 0.07);\n --sidebar-border-color: rgba(0, 0, 6, 0.07);\n\n // The MIDDLE pane of a three-pane setup. Nothing renders one yet; the tokens\n // are defined because they are public API an app may already reference, and a\n // half-present family reads as \"this one is unsupported\" rather than \"this\n // composition is not built yet\".\n --secondary-sidebar-bg-color: #f3f3f5;\n --secondary-sidebar-fg-color: rgba(0, 0, 6, 0.8);\n --secondary-sidebar-backdrop-color: #f6f6fa;\n --secondary-sidebar-shade-color: rgba(0, 0, 6, 0.07);\n --secondary-sidebar-border-color: rgba(0, 0, 6, 0.07);\n\n // Cards / boxed lists\n --card-bg-color: #ffffff;\n --card-fg-color: rgba(0, 0, 6, 0.8);\n --card-shade-color: rgba(0, 0, 6, 0.07);\n\n // Accent\n --accent-bg-color: #3584e4;\n --accent-fg-color: #ffffff;\n --accent-color: #1c71d8;\n\n // Popover (menus, dropdowns) — an elevated surface above the window.\n --popover-bg-color: #ffffff;\n --popover-fg-color: rgba(0, 0, 6, 0.8);\n --popover-shade-color: rgba(0, 0, 6, 0.07);\n\n // Dialog scrim — the dimming wash behind a presented dialog (Adw dims with\n // --shade-color at double alpha; this is the equivalent neutral wash).\n --dialog-scrim-color: rgba(0, 0, 6, 0.32);\n\n // Buttons\n --button-bg-color: rgba(0, 0, 6, 0.08);\n --button-hover-color: rgba(0, 0, 6, 0.13);\n --button-active-color: rgba(0, 0, 6, 0.19);\n\n // Entries\n --entry-bg-color: #ffffff;\n --entry-border-color: rgba(0, 0, 6, 0.18);\n --entry-border-hover-color: rgba(0, 0, 6, 0.28);\n\n // Destructive action\n --destructive-bg-color: #e01b24;\n --destructive-fg-color: #ffffff;\n --destructive-color: oklab(from var(--destructive-bg-color) min(l, 0.5) a b);\n\n // Semantic states. `.error` / `.warning` / `.success` (see _labels.scss) do\n // not just recolour text — they REBIND the three accent tokens to these, so\n // anything accent-coloured inside them follows. Values are libadwaita's\n // (_colors.scss:16-29): red_3 / yellow_5 / green_4 from _palette.scss:106-121.\n // The standalone `*-color` is upstream's own relative-colour derivation of the\n // background, kept as an expression rather than resolved to a hex so it tracks\n // a re-themed `*-bg-color`.\n --success-bg-color: #2ec27e;\n --success-fg-color: #ffffff;\n --success-color: oklab(from var(--success-bg-color) min(l, 0.5) a b);\n --warning-bg-color: #e5a50a;\n --warning-fg-color: rgba(0, 0, 0, 0.8);\n --warning-color: oklab(from var(--warning-bg-color) min(l, 0.5) a b);\n --error-bg-color: #e01b24;\n --error-fg-color: #ffffff;\n --error-color: oklab(from var(--error-bg-color) min(l, 0.5) a b);\n\n // Switch\n --switch-off-bg: rgba(0, 0, 0, 0.2);\n --switch-knob-bg: #ffffff;\n\n // Layout radii\n --window-radius: 15px;\n --card-radius: 12px;\n --button-radius: 9px;\n\n // Spacing scale\n --spacing-xs: 6px;\n --spacing-s: 9px;\n --spacing-m: 12px;\n --spacing-l: 18px;\n --spacing-xl: 24px;\n\n // Typography — GNOME default: Adwaita Sans 11. The stack is a PROGRESSION, and the\n // tail is what makes it one (#1817). 'Adwaita Sans' is installed on a GNOME desktop\n // and nowhere else; 'Cantarell' is GNOME's own earlier UI face and the right second\n // guess there; 'Inter' is the one cross-platform name an app usually has beside it.\n //\n // What was MISSING is macOS, and it was missing in the worst place. With no Apple face\n // named, `sans-serif` resolved to Helvetica — measured on a Mac carrying neither\n // Adwaita Sans nor Cantarell — which is the one typeface no libadwaita application is\n // meant to look like, and the stylesheet said nothing about it. `system-ui` and its\n // `-apple-system` alias are the two spellings every current engine resolves to the\n // platform's own UI face (SF on macOS, Segoe UI Variable on Windows, Cantarell on\n // GNOME), so they go after the named faces and BEFORE the generic: a generic asks the\n // host for its DEFAULT, which is the substitution this is about, while `system-ui` asks\n // for its UI face, which is what an Adwaita app wants.\n //\n // 'Segoe UI' stays ahead of them as the EXPLICIT Windows face: `system-ui` reached it\n // only from Windows 8 and Segoe UI Variable only from Windows 11, so the name is still\n // the portable spelling there. Held honest by the `stylesheet-font-families`\n // conformance rule, whose ledger carries the reason for 'Adwaita Sans' — never delete\n // one without the other.\n //\n // THE PERIOD ending this first sentence, and the absence of a comment block between\n // these declarations, are both load-bearing rather than stylistic.\n // `scripts/generate-adwaita-tokens.mjs` titles each token group by the first sentence\n // of the comment block touching its FIRST declaration, so a caption with no terminator\n // runs on into the next words — and a block sitting between two declarations starts a\n // NEW group, which is how a paragraph about this mechanism became a section title in\n // the website before it was moved in here. Everything past the first sentence is prose\n // for that one reader; `check-generated-website-data.mjs` holds both derived artifacts\n // against the run.\n --font-family: 'Adwaita Sans', 'Cantarell', 'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif;\n --font-size-base: 11pt;\n --font-size-small: 9pt;\n --font-size-heading: 12pt;\n --dim-opacity: 0.55;\n\n // Borders and disabled dimming, as libadwaita's own two-step (_colors.scss:263,\n // 317-329): an OPACITY token the high-contrast query moves, and a colour\n // DERIVED from it against `currentColor` — so a border follows the text colour\n // of the surface it is drawn on instead of being a fixed grey.\n //\n // `--disabled-opacity` had no home here, and three partials said so in a\n // comment and reached for `--dim-opacity` instead (`_switch.scss:81-83`,\n // `_checks.scss:164-166`, `_progress_bar.scss:87-89`). Those are different\n // numbers upstream — 50% disabled vs 55% dimmed — and under high contrast they\n // move in OPPOSITE directions (disabled 40%, dimmed 90%), so the stand-in was\n // most wrong exactly where it mattered most.\n --border-opacity: 15%;\n --border-color: color-mix(in srgb, currentColor var(--border-opacity), transparent);\n --disabled-opacity: 0.5;\n\n // Document + monospace families, behind `.document` / `.monospace`\n // (_labels.scss:75-84). In GTK these four are written into `:root` at RUNTIME\n // by AdwStyleManager from the desktop's font settings\n // (adw-style-manager.c:169-218), defaulting to `Sans 10` / `Monospace 10`\n // (:50-56). A browser has no style manager, so they are ordinary tokens here\n // — same names, so re-theming goes through the documented contract.\n //\n // The monospace stack has ONE home, and did not until recently: `_data_grid.scss`\n // used to inline it, and `source-view/theme.ts` carried a SECOND, longer copy in\n // a TS string literal (measured on one page, `.cm-scroller` resolved to\n // 'Adwaita Mono', 'Cascadia Code', 'JetBrains Mono', … while a `.monospace`\n // label beside it resolved to this token — two typefaces, same document).\n // A literal in TS is also outside the `stylesheet-font-families` rule, which\n // reads `.css`/`.scss`. Both now read this token; its consumers are\n // `.monospace` (_labels.scss:128), `_action_row.scss:94`, the data-grid mono\n // cell (via `@extend .monospace`) and `<adw-source-view>`.\n //\n // Adwaita Mono heads the stack as a PROGRESSIVE ENHANCEMENT, not because\n // anything here ships it: `@gjsify/adwaita-fonts` vendors two Sans TTFs and no\n // mono face at all (the upstream mono faces are 1.4-1.5 MB each). This comment\n // used to claim the package ships it — a claim the NativeScript theme, which\n // carries the same stack, already contradicted in prose\n // (`nativescript-bridge/adwaita/src/theme/adwaita.css:769`). So on a GNOME\n // desktop the system `adwaita-mono-fonts` resolves it; anywhere else the\n // generic tail is what renders, which is the correct outcome and the reason the\n // tail exists. Held honest by the `stylesheet-font-families` conformance rule,\n // whose ledger carries this reason — never delete one without the other.\n //\n // `'Cantarell'` is dropped from that stack on the way here: Cantarell is\n // GNOME's PROPORTIONAL UI font, so a monospace fallback chain that reaches it\n // second lands on a font whose figures do not line up — the exact property\n // `.monospace` exists for.\n //\n // The tail is the same PROGRESSION the sans stack is, for the same reason (#1817), and\n // it had the gap in the other direction: `ui-monospace` covers macOS and GNOME but\n // reaches Cascadia Mono only from Windows 10 1903, and no Windows face was named at\n // all, so a Windows 10 host without it landed on the `monospace` GENERIC — Times New\n // Roman, whose figures do not line up, which is the one thing this stack exists to\n // provide. 'Cascadia Code' ships with Windows Terminal and 'Consolas' is on every\n // Windows since Vista.\n //\n // ONE LINE, and not a style choice: the same generator reads this file with a line-based\n // reader that REFUSES a declaration it cannot read rather than dropping the token\n // without saying so, so a wrapped value makes it exit 1.\n --document-font-family: var(--font-family);\n --document-font-size: var(--font-size-base);\n --monospace-font-family: 'Adwaita Mono', ui-monospace, 'SF Mono', 'Cascadia Code', 'Consolas', 'Menlo', monospace;\n --monospace-font-size: var(--font-size-base);\n}\n\n// The tokens above are a MIXIN rather than a bare `:root` block so `.theme-light`\n// can include them too (see `_theme.scss`). A light opt-out that exists only as\n// `:not(.theme-light)` on the media query cannot serve a SUBTREE: on a dark system\n// the root stays dark, and a container asking for light matches no rule at all.\n:root {\n @include light-theme;\n}\n\n// High contrast moves the three opacity tokens, and only those — every colour\n// that reads them follows without its own query (_colors.scss:325-329).\n@media (prefers-contrast: more) {\n :root {\n --border-opacity: 50%;\n --dim-opacity: 0.9;\n --disabled-opacity: 0.4;\n }\n}\n","// _theme.scss — Light/dark theme switching.\n// Auto via prefers-color-scheme + manual .theme-dark / .theme-light overrides.\n// Reference: refs/libadwaita/src/stylesheet/_colors.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// `light-theme` lives in _variables.scss; @use makes it reachable (the skin uses\n// the module system, so a mixin there is namespaced rather than global).\n@use 'variables';\n\n@mixin dark-theme {\n --window-bg-color: #222226;\n --window-fg-color: #ffffff;\n --view-bg-color: #1d1d20;\n --view-fg-color: #ffffff;\n --headerbar-bg-color: #2e2e32;\n --headerbar-fg-color: #ffffff;\n --headerbar-shade-color: rgba(0, 0, 6, 0.36);\n --separator-color: rgba(255, 255, 255, 0.08);\n --shade-color: rgba(0, 0, 6, 0.25);\n --sidebar-bg-color: #2e2e32;\n --sidebar-fg-color: #ffffff;\n --sidebar-backdrop-color: #28282c;\n --sidebar-shade-color: rgba(0, 0, 6, 0.25);\n --sidebar-border-color: rgba(0, 0, 6, 0.36);\n --secondary-sidebar-bg-color: #28282c;\n --secondary-sidebar-fg-color: #ffffff;\n --secondary-sidebar-backdrop-color: #252529;\n --secondary-sidebar-shade-color: rgba(0, 0, 6, 0.25);\n --secondary-sidebar-border-color: rgba(0, 0, 6, 0.36);\n --card-bg-color: rgba(255, 255, 255, 0.08);\n --card-fg-color: #ffffff;\n --card-shade-color: rgba(0, 0, 6, 0.36);\n --accent-color: #78aeed;\n --popover-bg-color: #36363a;\n --popover-fg-color: #ffffff;\n --popover-shade-color: rgba(0, 0, 6, 0.36);\n // A deeper scrim in dark mode so the dimming reads against a dark window.\n --dialog-scrim-color: rgba(0, 0, 6, 0.55);\n --button-bg-color: rgba(255, 255, 255, 0.1);\n --button-hover-color: rgba(255, 255, 255, 0.15);\n --button-active-color: rgba(255, 255, 255, 0.22);\n --entry-bg-color: rgba(255, 255, 255, 0.06);\n --entry-border-color: rgba(255, 255, 255, 0.16);\n --entry-border-hover-color: rgba(255, 255, 255, 0.26);\n --destructive-bg-color: #c01c28;\n --destructive-fg-color: #ffffff;\n --destructive-color: oklab(from var(--destructive-bg-color) max(l, 0.85) a b);\n // Semantic states — libadwaita's dark overrides (_colors.scss:83-92): the\n // backgrounds darken (green_5 / a hand-picked amber / red_4) and the\n // standalone colour LIGHTENS instead of darkening, so it stays readable on a\n // dark surface. Upstream does not re-declare the `*-fg-color`s here either.\n --success-bg-color: #26a269;\n --success-color: oklab(from var(--success-bg-color) max(l, 0.85) a b);\n --warning-bg-color: #cd9309;\n --warning-color: oklab(from var(--warning-bg-color) max(l, 0.85) a b);\n --error-bg-color: #c01c28;\n --error-color: oklab(from var(--error-bg-color) max(l, 0.85) a b);\n --switch-off-bg: rgba(255, 255, 255, 0.2);\n --switch-knob-bg: #deddda;\n // The active toggle chip is NOT near-white in both themes — that premise was\n // wrong, and it is what made the selected toggle a solid white pill on a dark\n // window while GTK draws a grey one. libadwaita's own _colors.scss:247-248 says\n // dark takes a TRANSLUCENT white over the dark background, with white text:\n // --active-toggle-bg-color: rgb(255 255 255 / 20%);\n // --active-toggle-fg-color: #ffffff;\n // The foreground needs no entry at all — _toggle_group.scss defaults it to\n // var(--window-fg-color), which is already #ffffff here. Only the background\n // was ever missing; the old dark override forced dark text to compensate for it.\n --active-toggle-bg-color: rgb(255 255 255 / 20%);\n}\n\n// Auto dark theme via prefers-color-scheme — opt out with .theme-light\n@media (prefers-color-scheme: dark) {\n :root:not(.theme-light) {\n @include dark-theme;\n }\n}\n\n// Manual override, on ANY element rather than only on `:root`.\n//\n// It was `:root.theme-dark`, which silently does nothing unless the class lands on\n// `<html>` — so an EMBEDDED consumer could not give its own subtree a scheme without\n// re-theming the host page around it. The storybook is exactly that case: it scopes\n// to its own container, the class was present, the tokens never changed, and nothing\n// reported a problem. Custom properties resolve per element, so an element-level\n// selector overrides the inherited values for its subtree and for nothing else.\n.theme-dark {\n @include dark-theme;\n}\n\n// The light counterpart, for the same reason: on a dark system a subtree has to be\n// able to ask for light, which `:root:not(.theme-light)` on the media query above\n// cannot give it once the class sits anywhere but the root.\n.theme-light {\n @include variables.light-theme;\n}\n","// _root.scss — opt-in page surface for chrome-less layouts.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_window.scss (surface tokens)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: original opt-in helper for @gjsify/adwaita-web.\n//\n// The components theme via the `--window-*` CSS custom properties, but only\n// `adw-window` actually PAINTS the window surface (background + text colour).\n// A page laid out WITHOUT an `<adw-window>` (e.g. a plain browser view that\n// hosts rows/cards directly) therefore renders on the browser default (white)\n// and its native form controls / scrollbars don't follow the light/dark scheme.\n//\n// Applying `.adw-root` to `<body>` (or `<html>` / the `:root` element) binds the\n// Adwaita window surface + `color-scheme: light dark` to the document, so a\n// window-less layout is themed exactly like the components inside it. This is\n// OPT-IN and additive — it does not change any component's own styling.\n.adw-root {\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n color-scheme: light dark;\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n}\n","// _reset.scss — style-isolation boundary for embedding in arbitrary host pages.\n//\n// adwaita-web renders as LIGHT-DOM custom elements (by design: the widgets\n// compose with the page and stay overridable via the `--adw-*` / `--*` design\n// tokens). The trade-off of light DOM is that a host page's *inherited*\n// typography — `font-family`, `color`, `line-height`, `letter-spacing`, … — and\n// generic element resets can leak into the widgets.\n//\n// This partial establishes an Adwaita typographic + box-model context at EVERY\n// component boundary, so inheritance from the host stops at the widget. It sets\n// only a FLOOR: it is `@use`d before the component partials, so each component's\n// own rules override it, and consumers keep full control through the tokens and\n// ordinary higher-specificity rules (isolation without giving up overriding).\n//\n// The box battles (borders, backgrounds) are already won by the components'\n// class-scoped rules against realistic element-level host CSS; the real leak is\n// inherited typography + a host `* {}` box-sizing reset, which is what this\n// neutralises.\n\n// Every custom element adwaita-web defines — one entry per `customElements\n// .define(…)` call under `src/`, in BOTH namespaces: a tag carries the prefix of\n// the library that owns its GType (ADR 0034 clause 1), so `gtk-entry` is on this\n// list beside `adw-action-row`.\n//\n// DERIVED, NOT REMEMBERED: `scripts/check-adwaita-reset-components.mjs` walks\n// those calls and fails on any tag missing from this list (and on any entry with\n// no call behind it). A hand-kept list is a second copy of the registry, and it\n// had already drifted — `adw-source-view` was defined for its whole life and\n// never listed, so it silently ran without the isolation floor. Nothing noticed,\n// because the only spec touching this file instantiates `adw-switch-row`.\n$adw-components:\n adw-about-dialog, adw-action-row, gtk-action-bar, adw-alert-dialog, adw-alert-response,\n adw-avatar, adw-banner, adw-bottom-sheet, adw-bottom-sheet-bottom-bar,\n adw-bottom-sheet-content, adw-bottom-sheet-sheet, gtk-box, gtk-button, adw-button-content, adw-button-row,\n adw-card, adw-carousel, adw-carousel-indicator-dots,\n adw-carousel-indicator-lines, gtk-check-button, adw-clamp, adw-combo-row,\n adw-data-grid,\n adw-dialog, gtk-drop-down, gtk-entry, adw-entry-row, adw-expander-row,\n adw-header-bar, gtk-image, adw-inline-view-switcher, gtk-label, gtk-menu-button,\n adw-navigation-page,\n adw-navigation-split-view, adw-navigation-view, adw-overlay-split-view,\n adw-password-entry-row, gtk-popover, adw-preferences-dialog,\n adw-preferences-group, adw-preferences-page, gtk-progress-bar, adw-radio,\n adw-shortcut-label, adw-sidebar, adw-sidebar-item,\n adw-sidebar-section, adw-source-view, adw-spinner, adw-spin-row,\n adw-split-button, adw-status-page, gtk-switch, adw-switch-row,\n adw-tab-page, adw-tab-view, adw-toast-overlay, adw-toggle, adw-toggle-group,\n adw-toolbar-view, adw-view-stack, adw-view-stack-page, adw-view-switcher,\n adw-view-switcher-bar, adw-view-switcher-page, adw-window, adw-window-title,\n adw-wrap-box;\n\n// Roots: re-root the inherited typographic properties (and the box model) so a\n// host page's font / colour / spacing cannot flow into the widget. Every value\n// is the Adwaita default; a component that wants something else overrides it on\n// its own element (this rule is emitted first).\n#{$adw-components} {\n box-sizing: border-box;\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n font-weight: 400;\n font-style: normal;\n font-variant: normal;\n line-height: normal;\n letter-spacing: normal;\n word-spacing: normal;\n text-align: start;\n text-indent: 0;\n text-transform: none;\n text-shadow: none;\n}\n\n// A box and a label INHERIT inside another widget, as every GTK node does. They\n// are the two elements an authored tree puts INSIDE the others — a label in a\n// `.error` box, a box of labels in a header bar — and the floor above would\n// repaint every one of them in `--window-fg-color` at the base size, whatever\n// its parent says. Nested in any component the floor already stops the host\n// page, so only the OUTERMOST one keeps it. `:where()` adds no specificity, so a\n// class on the element itself (`.title-1`, `.dimmed`) still wins.\n//\n// A button's content inherits for the same reason: `<adw-button-content>` is the child\n// of a `<gtk-button>`, and the floor painted its icon and label in the window colour on\n// a `.suggested-action` button, where GTK draws them in the accent foreground.\n:where(#{$adw-components}) :is(gtk-box, gtk-label, adw-button-content) {\n color: inherit;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n font-style: inherit;\n font-variant: inherit;\n line-height: inherit;\n letter-spacing: inherit;\n word-spacing: inherit;\n text-transform: inherit;\n text-shadow: inherit;\n}\n\n// Descendants: `box-sizing` does not inherit, so a host `*, *::before {\n// box-sizing: content-box }` reset would still reach internal elements. Pin it\n// to `border-box` (adwaita's model throughout) inside every component.\n@each $c in $adw-components {\n #{$c} *,\n #{$c} *::before,\n #{$c} *::after {\n box-sizing: border-box;\n }\n}\n","// _icon.scss — the symbolic icon box behind <gtk-image>.\n//\n// A symbolic icon is rendered as a CSS mask rather than an <img> or inline SVG,\n// so `currentColor` drives the fill and the glyph re-themes with whatever\n// contains it. The per-name `.adw-icon--<name>` mask classes are GENERATED into\n// scss/_icons.generated.scss by scripts/build-scss.mjs (one entry per icon in\n// its ICONS map), so adding an icon is a single map edit.\n//\n// This block lived in `_button.scss` for as long as the button was the only\n// widget that drew one. It is emitted BEFORE the widget partials so a context\n// that sizes its own icons (`.adw-about-dialog-icon` at 96px, the split button's\n// 14px arrows, the view switcher's 16px) still wins on ordinary specificity.\n//\n// Reference: refs/libadwaita/src/stylesheet/_common.scss:34-41 — `.normal-icons`\n// / `.large-icons` set `-gtk-icon-size`. libadwaita has NO `_icon.scss`: there\n// the icon is a GtkImage and its size is a widget property, not a rule.\n// Reference: refs/adwaita-web/adwaita-web/scss/_icon.scss — the vendored web\n// port's `.adw-icon` is an inline-flex holder around a real <svg>; this\n// package masks instead, which is what keeps it colourable via currentColor.\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components (mask-based).\n\n.adw-icon {\n display: inline-block;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n background-color: currentColor;\n mask-size: 16px;\n mask-repeat: no-repeat;\n mask-position: center;\n -webkit-mask-size: 16px;\n -webkit-mask-repeat: no-repeat;\n -webkit-mask-position: center;\n\n // `currentColor` IS the icon: the mask is painted with the inherited colour,\n // so a suggested-action button's `--accent-fg-color` has to reach it. Since\n // <gtk-image> is a custom element it is also in `$adw-components`, and the\n // ADR-0010 boundary reset re-roots `color` on every entry there — which would\n // otherwise repaint every icon in `--window-fg-color` regardless of its host.\n // Class beats type selector, so this restores inheritance.\n color: inherit;\n\n // `display: inline-block` (author CSS) otherwise beats the UA `[hidden]`\n // rule, so a hidden icon (e.g. an avatar's fallback icon while initials\n // show) would still render as a solid maskless square. Honor `hidden`.\n &[hidden] {\n display: none;\n }\n}\n\n// THE FALLBACK GLYPH — what a name the stylesheet cannot draw resolves to.\n//\n// Until this rule existed there was no `mask-image` on `.adw-icon` at all, so an\n// icon whose name has no generated class kept `background-color: currentColor`\n// over an empty mask and painted a SOLID 16px square in the widget's text\n// colour. Measured in Firefox: `.adw-icon.adw-icon--dialog-error` reported\n// `mask-image: none`, `background-color: rgb(0, 128, 0)`, box 16x16 — visually a\n// deliberate colour swatch, which is why three renderer-comparison surfaces\n// carried substituted glyphs and nobody read it as a bug.\n//\n// `image-missing` is libadwaita's OWN answer to \"I have no icon to draw here\":\n// C substitutes exactly that name for a NULL icon-name in three widgets\n// (adw-button-content.c:294,356 · adw-view-switcher-button.c:286,347,405 ·\n// adw-inline-view-switcher.c:142), and GTK's icon theme returns the same\n// broken-image paintable for a name it cannot find. So the three renderers end\n// up on ONE glyph: GTK draws it from the system theme, the web draws it from\n// here, and NativeScript cannot reach the state at all — its GtkImage takes SVG\n// SOURCE, not a name, so a missing icon there is a missing import the compiler\n// rejects. Nothing THROWS, on any of the three: an icon is decorative and taking\n// an application down over a glyph is a failure mode none of them has.\n//\n// `:where()` and not `.adw-icon`, and that is the load-bearing detail:\n// `adwaita-skin.scss` @uses `icons.generated` BEFORE `icon`, so at equal\n// specificity this rule would come last and override every generated mask class\n// — every icon in the package would draw the broken glyph. `:where()` scores\n// 0,0,0, so ANY `.adw-icon--<name>` rule beats it wherever it sits in the\n// cascade, including one `registerIcon()` inserts at runtime.\n:where(.adw-icon) {\n mask-image: var(--icon-image-missing);\n -webkit-mask-image: var(--icon-image-missing);\n}\n\n// …and NO name at all draws nothing, rather than the broken glyph. `<gtk-image>`\n// leaves the node classless only when `icon-name` is ABSENT or EMPTY, which is the\n// state where the HOST decided against an icon — the tab strip's indicator slot,\n// the avatar's fallback while initials show. `Gtk.Image` with a NULL icon-name\n// draws nothing too.\n//\n// A name that was GIVEN never reaches this rule, even an unusable one: the element\n// puts `adw-icon--image-missing` on it, because `gtk_icon_theme_lookup_icon` has no\n// \"found nothing\" answer either. Until it did, `<adw-button-row start-icon-name=\"a b\">`\n// reserved a VISIBLE 16px slot and painted none of it — this rule turning the\n// pre-existing solid square into an invisible hole.\n.adw-icon:not([class*='adw-icon--']) {\n background-color: transparent;\n}\n","// _labels.scss — libadwaita's typography + semantic-colour UTILITY CLASSES, and\n// the `label {}` rules of the element they are written for.\n//\n// `refs/libadwaita/src/stylesheet/widgets/_labels.scss` is a widget partial in\n// name only: `label { … }` is four lines of GtkLabel plumbing and everything else\n// in it is a CLASS a consumer puts on whatever node it already has — a `<span>` on\n// a hand-written page, or <gtk-label>, which exists because an AUTHORED tree (a\n// Blueprint `Gtk.Label` mounted through `mountSharedTree`) arrives as a tag with a\n// `label` attribute and needs an element to read it. ADR 0010 makes the class\n// surface the public contract either way; the element adds the layout below and\n// nothing to the classes.\n//\n// This is also where the in-tree duplication ends: `_data_grid.scss` declared\n// `font-variant-numeric: tabular-nums` twice and inlined a whole monospace font\n// stack — i.e. `.numeric` and `.monospace` — and dimmed its header row with a\n// raw `opacity: var(--dim-opacity)` where `.dimmed` is the upstream spelling. It\n// composes these now.\n//\n// WHAT DIFFERS FROM UPSTREAM, AND WHY\n//\n// - `font-size` percentages are upstream's (181% / 136% / 118% / 82%), which\n// are relative to the INHERITED size. That is what libadwaita means by them\n// and it composes with `--font-size-base`, so they are kept verbatim rather\n// than resolved to pt values.\n// - `.document` / `.monospace` read `--document-font-*` / `--monospace-font-*`.\n// In GTK those four are written into `:root` at runtime by AdwStyleManager\n// from the desktop's font settings (adw-style-manager.c:169-218), defaulting\n// to `Sans 10` / `Monospace 10` (:50-56). There is no style manager in a\n// browser, so `_variables.scss` supplies them as ordinary tokens — same\n// names, so a consumer re-themes through the documented contract.\n// - `refs/adwaita-web/adwaita-web/scss/_utility_classes.scss` carries its own\n// version of this block (it puts these in `_utility_classes.scss`, NOT in\n// `_label.scss`) and it disagrees with libadwaita on two points: it adds a\n// `line-height` to every title/heading, and it dims `.caption` and\n// `.caption-heading` by folding `--dim-opacity` into them. Neither is in\n// libadwaita — a caption is small, not dim, and dimming is `.dimmed`'s job,\n// composable onto anything. libadwaita is followed here.\n//\n// Reference: refs/libadwaita/src/stylesheet/widgets/_labels.scss:13-88 (every class below)\n// Reference: refs/libadwaita/src/adw-style-manager.c:50-56,169-218 (the four font tokens)\n// Reference: refs/adwaita-web/adwaita-web/scss/_utility_classes.scss (the vendored port's variant, NOT followed — see above)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web; `label {}` is ported onto\n// <gtk-label> without `:disabled`, which the element has no state for.\n\n// <gtk-label>: `label {}` (_labels.scss:1-11) plus the layout GtkLabel does in C.\n//\n// THE TWO SPACERS ARE `xalign`. GTK places the text at `xalign * (width − text\n// width)` inside the label's allocation (gtklabel.c, gtk_label_get_layout_location); the\n// element's free space is split between `::before` and `::after` in the ratio\n// `xalign : 1 − xalign`, which is that formula, and flips in RTL as the C does.\n//\n// `YALIGN` HAS NO CONTINUUM ON THE CROSS AXIS. `xalign`'s spacer trick splits free space\n// along flexbox's MAIN axis, where a flex item's `flex-grow` ratio is a real number;\n// `align-items` is the CROSS-axis equivalent and CSS gives it three keywords, not a ratio\n// — there is no `align-items: 0.25` the way there is a `flex-grow: 0.25`. A second pair of\n// spacers would need a second axis, and a `<gtk-label>` cannot be both a row (for `xalign`)\n// and a column (for `yalign`) at once without an inner wrapper element, which would cost\n// every single-line label the \"one text node, no children\" DOM shape `gtk-label.spec.ts`\n// pins for the XSS answer. So `--gtk-label-align-items` is set by `labelYalignAlignItems`\n// (`@gjsify/adwaita-core`) from the NEAREST of three zones — `flex-start` below `0.25`,\n// `flex-end` above `0.75`, `center` between (the default, unchanged from before this\n// property existed) — exact at the three values GTK's own default and both edges take,\n// and a DECLARED divergence for anything else: nearest zone, not a silent half-split, and\n// `label.spec.ts`/`gtk-label.spec.ts` both say so where they test the intermediate values.\n//\n// `white-space: pre`: Pango keeps a newline and a run of spaces, and a label that\n// does not wrap is as wide as its text — which a flex item's `min-width: auto`\n// already makes its minimum. `wrap` breaks at word boundaries, WORD being the\n// default `wrap-mode` — so does `ellipsize` alone, see `.adw-label-clamp` below.\ngtk-label {\n display: flex;\n align-items: var(--gtk-label-align-items, center);\n white-space: pre;\n caret-color: currentColor;\n // GtkLabel is not selectable unless asked (`selectable` defaults to FALSE).\n user-select: none;\n\n &::before,\n &::after {\n content: '';\n flex-shrink: 1;\n flex-basis: 0;\n }\n\n &::before {\n flex-grow: var(--gtk-label-xalign, 0.5);\n }\n\n &::after {\n flex-grow: calc(1 - var(--gtk-label-xalign, 0.5));\n }\n\n &[wrap] {\n white-space: pre-wrap;\n }\n\n // `gtk-label.ts`'s span-render path: the text moves into this span so it can be pinned\n // to its measured wrap width (a flex item is blockified by spec, but `display: block` is\n // spelled out rather than relied on implicitly). Present whenever `wrap` is set OR\n // `ellipsize` is active — MEASURED (`@gjsify/adwaita-core`'s `label.ts` header): GTK's\n // own Pango layout wraps onto multiple lines from `ellipsize` ALONE, `wrap` or not, so\n // both cases need the same span and the same measurement pass.\n .adw-label-text {\n display: block;\n // A pinned width, or a shrink-to-fit one, may never push the label wider than its\n // container.\n max-width: 100%;\n }\n\n // `wrap-mode` — Pango's break-opportunity choice — is a real `word-break`/\n // `overflow-wrap` mapping, not a declared gap: CSS's `break-all` is Pango's CHAR (break\n // anywhere), and `overflow-wrap: anywhere` is Pango's WORD_CHAR (word boundaries, falling\n // back to a character break only when a single word will not fit) — the pspec's own\n // words for that member. WORD, the default, is the browser's un-overridden behaviour, so\n // it has no rule here. Scoped to `.adw-label-text` alone, not `[wrap]`: `wrap-mode` only\n // matters once the layout can span more than one line at all, which `ellipsize` alone\n // already grants (see above) — the span's mere existence is that condition.\n &[wrap-mode='char'] .adw-label-text {\n word-break: break-all;\n }\n\n &[wrap-mode='word-char'] .adw-label-text {\n overflow-wrap: anywhere;\n }\n\n // `ellipsize` — a JS-toggled CLASS, not an attribute selector: `.adw-label-clamp` is set\n // by `gtk-label.ts`'s `_renderSpan` from `ellipsize`'s NORMALIZED value, so a raw,\n // unrecognised `ellipsize` attribute (which `normalizeLabelEllipsize` already reads as\n // `none`) can never leave this rule half-applied the way an `[ellipsize]` PRESENCE\n // selector would. `lines`, gated by `labelEffectiveLines` (`@gjsify/adwaita-core`) to\n // \"ellipsize is active\", `wrap` or not — MEASURED, the same header — applies here\n // REGARDLESS of `wrap`: a real `Gtk.Label` allocated with `wrap=FALSE, ellipsize=END,\n // lines=2` lays out exactly two lines, ellipsized, not one. `-webkit-line-clamp` needs\n // its own box context (`display: -webkit-box` + `-webkit-box-orient: vertical`) and text\n // that can actually WRAP (`white-space: normal`, overriding the host's inherited `pre`/\n // `pre-wrap`) to have more than one line to clamp in the first place; the default of `1`\n // is Pango's own when `lines` is unset (`--gtk-label-lines` is still set then — see\n // `_render()` — so the fallback here is only a defensive belt for a span whose host\n // somehow reached this class without it).\n .adw-label-text.adw-label-clamp {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: var(--gtk-label-lines, 1);\n overflow: hidden;\n text-overflow: var(--gtk-label-ellipsize-overflow, ellipsis);\n white-space: normal;\n }\n\n &[selectable] {\n user-select: text;\n cursor: text;\n }\n\n &.separator {\n @extend .dimmed;\n }\n}\n\n// _labels.scss:13-15\n.dimmed {\n opacity: var(--dim-opacity);\n}\n\n// _labels.scss:17-19\n.accent {\n color: var(--accent-color);\n}\n\n// _labels.scss:21-29 — a semantic class does not just recolour the text, it\n// REBINDS the three accent tokens, so a button or switch inside it turns the\n// same colour without knowing which state it is in.\n@each $e_type in error, warning, success {\n .#{$e_type} {\n color: var(--accent-color);\n\n --accent-bg-color: var(--#{$e_type}-bg-color);\n --accent-fg-color: var(--#{$e_type}-fg-color);\n --accent-color: var(--#{$e_type}-color);\n }\n}\n\n/**********************\n * General Typography *\n **********************/\n\n// _labels.scss:35-53\n.title-1 {\n font-weight: 800;\n font-size: 181%;\n}\n\n.title-2 {\n font-weight: 800;\n font-size: 136%;\n}\n\n.title-3 {\n font-weight: 700;\n font-size: 136%;\n}\n\n.title-4 {\n font-weight: 700;\n font-size: 118%;\n}\n\n// _labels.scss:55-57\n.heading {\n font-weight: 700;\n}\n\n// _labels.scss:59-62\n.body {\n font-weight: 400;\n line-height: 140%;\n}\n\n// _labels.scss:64-67\n.caption-heading {\n font-weight: 700;\n font-size: 82%;\n}\n\n// _labels.scss:69-73\n.caption {\n font-weight: 400;\n font-size: 82%;\n line-height: 140%;\n}\n\n// _labels.scss:75-79\n.document {\n font-family: var(--document-font-family);\n font-size: var(--document-font-size);\n line-height: 140%;\n}\n\n// _labels.scss:81-84\n.monospace {\n font-family: var(--monospace-font-family);\n font-size: var(--monospace-font-size);\n}\n\n// _labels.scss:86-88\n.numeric {\n font-variant-numeric: tabular-nums;\n}\n","// _box.scss — <gtk-box>, GTK's one-axis container.\n//\n// libadwaita has no box partial: a box draws nothing, it only places children.\n// The element sets `flex-direction` and `gap` inline from its normalised\n// properties (gtk-box.ts); this is the rest of GtkBoxLayout's shape.\n//\n// `align-items: stretch`: a child's default `halign`/`valign` is FILL, so it takes\n// the whole cross axis. `min-width`/`min-height: 0` are deliberately NOT set on\n// the children: a GTK box never allocates a child less than its minimum, and a\n// flex item's `auto` minimum is that.\n//\n// Reference: refs/gtk/gtk/gtkboxlayout.c (homogeneous: every child the same size)\n// Copyright (c) The GTK Team. LGPLv2.1+.\n\ngtk-box {\n display: flex;\n flex-direction: row;\n align-items: stretch;\n}\n\ngtk-box[homogeneous] > * {\n flex: 1 1 0;\n}\n","// _style_classes.scss — libadwaita's documented, WIDGET-INDEPENDENT style classes.\n//\n// THE GAP THIS CLOSES\n//\n// `refs/libadwaita/doc/style-classes.md` is the public contract an app author\n// reads: put `.card` on a box, `.boxed-list` on a list, `.toolbar` on a bar,\n// `.linked` around a button group. Twenty-one of those classes had NO rule in\n// this package (#1049) — and two of them looked ported because their names\n// appear in comments (`.osd`, `.linked`) while the code spells its own\n// `.adw-linked`. A consumer following the upstream documentation got nothing,\n// silently, which is the worst failure mode for a styling contract.\n//\n// Widget-scoped classes are NOT here — they live with the widget whose markup\n// they modify (`.property` in `_action_row.scss`, `.compact` in\n// `_status_page.scss`, `.devel` in `_headerbar.scss`, `.osd`'s button and\n// progress-bar variants in theirs), because that is where their selector needs\n// to see the widget's inner nodes. `scripts/check-adwaita-style-classes.mjs`\n// holds the ledger of which class lives where and fails when one has no rule at\n// all.\n//\n// Reference: refs/libadwaita/doc/style-classes.md (the documented surface)\n// Reference: refs/libadwaita/src/stylesheet/_common.scss:25-28,43-60,90-104\n// Reference: refs/libadwaita/src/stylesheet/widgets/_misc.scss:4-7,21-32,197-236\n// Reference: refs/libadwaita/src/stylesheet/widgets/_views.scss:1-18\n// Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss:520-600\n// Reference: refs/libadwaita/src/stylesheet/widgets/_toolbars.scss:91-102\n// Reference: refs/libadwaita/src/stylesheet/widgets/_linked.scss:1-45\n// Reference: refs/libadwaita/src/stylesheet/widgets/_scrolling.scss:150-166\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web — GTK node names (`row`,\n// `list`, `button`) become the custom-element tags and `.adw-*` structure\n// classes this package renders, and GTK-only drawing (`image()`,\n// `-gtk-icon-shadow`, `border-spacing` on a box) becomes its CSS equivalent.\n\n/************\n * Surfaces *\n ************/\n\n// _common.scss:25-28 — an opaque window-coloured background on any node.\n.background {\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n}\n\n// _views.scss:1-18 — the content-area surface. `:disabled` and `:selected` are\n// GTK pseudo-classes with no DOM counterpart; `[disabled]`/`[aria-selected]`\n// are how the same states are spelled here, and both are what our own widgets\n// already set.\n.view {\n background-color: var(--view-bg-color);\n color: var(--view-fg-color);\n\n &:disabled,\n &[disabled] {\n color: color-mix(in srgb, var(--view-fg-color) var(--disabled-opacity), transparent);\n background-color: color-mix(in srgb, var(--window-bg-color) 60%, var(--view-bg-color));\n }\n\n &[aria-selected='true'] {\n background-color: color-mix(in srgb, var(--accent-bg-color) 25%, transparent);\n border-radius: var(--button-radius);\n }\n}\n\n// _misc.scss:4-7 — the default border. `--border-color` is derived from\n// `currentColor`, so this follows the foreground of whatever it is drawn on.\n.frame {\n border: 1px solid var(--border-color);\n}\n\n/*********\n * Cards *\n *********/\n\n// _misc.scss:197-236. The ONE card recipe: `adw-card` and the preferences\n// group's list box each carried their own copy of these five declarations\n// before this placeholder existed.\n%card {\n background-color: var(--card-bg-color);\n color: var(--card-fg-color);\n border-radius: var(--card-radius);\n box-shadow:\n 0 0 0 1px rgb(0 0 6 / 3%),\n 0 1px 3px 1px rgb(0 0 6 / 7%),\n 0 2px 6px 2px rgb(0 0 6 / 3%);\n\n @media (prefers-contrast: more) {\n box-shadow:\n 0 0 0 1px var(--border-color),\n 0 1px 3px 1px rgb(0 0 6 / 7%),\n 0 2px 6px 2px rgb(0 0 6 / 3%);\n }\n}\n\n.card {\n @extend %card;\n\n // `.card.activatable` gets the hover/active states of an activatable row\n // (:225-235). GTK's `background-image: image(…)` is a solid-colour layer over\n // the background; a one-stop gradient is its CSS equivalent, and it composes\n // with `background-color` the same way — so a re-themed card keeps its colour\n // and only gains the wash.\n &.activatable {\n transition:\n background-color 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94),\n box-shadow 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);\n\n &:hover {\n background-image: linear-gradient(\n color-mix(in srgb, currentColor 3%, transparent),\n color-mix(in srgb, currentColor 3%, transparent)\n );\n }\n\n &:active {\n background-image: linear-gradient(\n color-mix(in srgb, currentColor 8%, transparent),\n color-mix(in srgb, currentColor 8%, transparent)\n );\n }\n }\n\n // A card inside (or itself) an OSD surface loses its own elevation and reads\n // as a translucent inset instead (:212-220).\n .osd &,\n &.osd {\n background-color: color-mix(in srgb, currentColor 10%, transparent);\n color: rgb(255 255 255 / 90%);\n box-shadow: none;\n\n @media (prefers-contrast: more) {\n box-shadow: 0 0 0 1px var(--border-color);\n }\n }\n}\n\n/***************\n * Boxed lists *\n ***************/\n\n// _lists.scss:520-556. In GTK the row separators are drawn by the rows\n// themselves and the list only supplies the card box plus the rounding of its\n// two ends — which is exactly how this package's rows behave already\n// (`adw-action-row` and friends draw their own `border-bottom` and drop it on\n// `:last-child`), so the class is the box and the clip.\n.boxed-list {\n @extend %card;\n\n display: flex;\n flex-direction: column;\n // The rounding of the first and last row is a CLIP here rather than per-row\n // corner radii: a row is a custom element whose own background paints over\n // the list's corners, and every row type would otherwise need the same four\n // radii repeated.\n overflow: hidden;\n}\n\n// :556-600 — same content, each row its own card. The list drops its box, and\n// the rows carry it, spaced 12px apart.\n.boxed-list-separate {\n display: flex;\n flex-direction: column;\n gap: 12px;\n background: none;\n color: var(--card-fg-color);\n\n > * {\n @extend %card;\n\n overflow: hidden;\n // A row that draws a separator for its neighbours must not draw one when it\n // IS the card (:585-586: `border: none`).\n border-bottom: none;\n }\n}\n\n/************\n * Toolbars *\n ************/\n\n// _toolbars.scss:91-102 + doc \"Toolbars\". GTK's `border-spacing: 6px` on a box\n// is the gap between children; the flex row is what makes that expressible.\n//\n// The automatic flat appearance follows upstream's rule list exactly: icon-only\n// buttons, buttons with an `adw-button-content` (icon + label), menu buttons and\n// split buttons go flat — unless they are `.raised`, `.suggested-action`,\n// `.destructive-action`, `.opaque`, or sit inside a `.linked` group. Text-only\n// buttons keep their frame, which is why this cannot be a blanket\n// `.toolbar gtk-button { … }`.\n$_keeps-frame: ':not(.raised):not(.suggested-action):not(.destructive-action):not(.opaque)';\n\n.toolbar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px;\n\n gtk-button#{$_keeps-frame} .adw-button.icon-only,\n gtk-button#{$_keeps-frame}:has(adw-button-content) .adw-button,\n gtk-menu-button#{$_keeps-frame} .adw-button,\n adw-split-button#{$_keeps-frame} .adw-button {\n background-color: transparent;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n }\n\n // Inside a linked group the frames come BACK — upstream states this as its own\n // rule (`_toolbars.scss:20-26`) rather than as an exclusion, because a linked\n // group only reads as one control if its members are raised.\n .linked,\n .adw-linked {\n gtk-button#{$_keeps-frame} .adw-button,\n gtk-menu-button#{$_keeps-frame} .adw-button,\n adw-split-button#{$_keeps-frame} .adw-button {\n background-color: var(--button-bg-color);\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n }\n }\n\n // Stand-alone OSD toolbars — the floating video-player-controls shape\n // (:99-102).\n &.osd {\n padding: 12px;\n border-radius: calc(var(--button-radius) + 6px);\n }\n}\n\n// _misc.scss:21-32 — a separator that reserves whitespace instead of drawing a\n// line, for separating groups inside a toolbar.\n.spacer {\n background: none;\n border: none;\n flex-shrink: 0;\n\n &,\n &.horizontal {\n min-width: 12px;\n }\n\n &.vertical {\n min-height: 12px;\n }\n}\n\n/*******\n * OSD *\n *******/\n\n// _common.scss:43-60. The exclusions are upstream's: a progress bar, button,\n// menu button, split button and inline view switcher each define what `.osd`\n// means for them, and must not get the dark surface treatment on top.\n//\n// This is a token REBIND, not just a colour: everything accent-coloured inside\n// an OSD surface turns white without knowing it is inside one.\n.osd:not(gtk-progress-bar):not(gtk-button):not(gtk-menu-button):not(adw-split-button):not(\n adw-inline-view-switcher\n ) {\n --accent-bg-color: rgb(255 255 255 / 75%);\n --accent-fg-color: rgb(0 0 0 / 75%);\n --accent-color: oklab(from var(--accent-bg-color) max(l, 0.85) a b);\n --destructive-color: oklab(from var(--destructive-bg-color) max(l, 0.85) a b);\n --success-color: oklab(from var(--success-bg-color) max(l, 0.85) a b);\n --warning-color: oklab(from var(--warning-bg-color) max(l, 0.85) a b);\n --error-color: oklab(from var(--error-bg-color) max(l, 0.85) a b);\n\n color: rgb(255 255 255 / 90%);\n border: none;\n background-color: rgb(0 0 0 / 70%);\n background-clip: padding-box;\n}\n\n/*******************\n * Linked controls *\n *******************/\n\n// _linked.scss:1-45 + doc \"Linked Controls\": the children of a linked box share\n// their touching edges. Upstream squares the inner corners and overlaps the\n// borders by -1px; this package's controls have no border, so the overlap is\n// dropped and only the corner squaring remains.\n//\n// `.adw-linked` is this package's own earlier spelling, kept as an alias — and\n// it USED to add a 2px gap between children, which is a segmented look, not a\n// linked one. The gap is gone; a consumer who wanted it can say `gap`.\n// The styled node is either the child itself (a bare `.adw-button` /\n// `.adw-entry`) or one rendered inside the child host element (`<gtk-button>`,\n// `<gtk-menu-button>`, `<gtk-drop-down>`, …) — so both spellings are matched\n// rather than enumerating host tags the way GTK has to.\n$_linked-nodes: '.adw-button', '.adw-entry';\n\n.linked,\n.adw-linked {\n display: inline-flex;\n\n &:not(.vertical) > * {\n @each $node in $_linked-nodes {\n &:not(:first-child) #{$node},\n &:not(:first-child)#{$node} {\n border-start-start-radius: 0;\n border-end-start-radius: 0;\n }\n\n &:not(:last-child) #{$node},\n &:not(:last-child)#{$node} {\n border-start-end-radius: 0;\n border-end-end-radius: 0;\n }\n }\n }\n\n &.vertical {\n flex-direction: column;\n\n > * {\n @each $node in $_linked-nodes {\n &:not(:first-child) #{$node},\n &:not(:first-child)#{$node} {\n border-start-start-radius: 0;\n border-start-end-radius: 0;\n }\n\n &:not(:last-child) #{$node},\n &:not(:last-child)#{$node} {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n }\n }\n }\n }\n}\n\n/*************\n * App icons *\n *************/\n\n// _common.scss:90-104. `-gtk-icon-shadow` has no CSS counterpart; `filter:\n// drop-shadow()` is the equivalent that follows the icon's alpha rather than its\n// box, which is what makes these legible on a light background. Each upstream\n// shadow layer becomes one `drop-shadow()`.\n.lowres-icon {\n filter: drop-shadow(0 -1px rgb(0 0 6 / 5%)) drop-shadow(1px 0 rgb(0 0 6 / 10%))\n drop-shadow(0 1px rgb(0 0 6 / 30%)) drop-shadow(-1px 0 rgb(0 0 6 / 10%));\n}\n\n.icon-dropshadow {\n filter: drop-shadow(0 1px 12px rgb(0 0 6 / 5%)) drop-shadow(0 -1px rgb(0 0 6 / 5%))\n drop-shadow(1px 0 rgb(0 0 6 / 10%)) drop-shadow(0 1px rgb(0 0 6 / 30%))\n drop-shadow(-1px 0 rgb(0 0 6 / 10%));\n}\n\n/************************\n * Undershoot indicators *\n ************************/\n\n// _scrolling.scss:150-166 — a shadow on the given edge of a scrolling box,\n// telling the reader there is content past it. GTK draws them with an inset\n// background; an inset `box-shadow` on the scroll container is the CSS\n// equivalent and, unlike a `::before`, stays put while the content scrolls.\n//\n// `-start`/`-end` follow text direction, same as `margin-start`/`margin-end`,\n// which `:dir()` expresses directly.\n//\n// THESE FOUR NAMES HAVE TWO WRITERS, so both of them are excluded here and this\n// rule is left to the third: an author applying the documented style class by\n// hand to markup adwaita-web does not drive.\n//\n// - `adw-toolbar-view` carries `undershoot-top`/`-bottom` as its own STATE\n// (`update_undershoots`), and hands the two flags down to the scrollers.\n// - `src/scroll-shading.ts` stamps all four onto every scroller under a toolbar\n// view and marks it `.adw-scroll-shaded`; `_scrolling.scss` draws that one,\n// per scroller, as the 1px line + 4px fade GTK paints on a `scrolledwindow`.\n//\n// Without the second exclusion each shaded scroller drew BOTH — a 6px blurred\n// host shadow under the new gradient — and on the horizontal axis, which\n// `_scrolling.scss` deliberately leaves unpainted because neither AdwTabBox nor\n// AdwCarousel has a `scrolledwindow` node, this rule was the only thing drawing\n// at all: an overflowing tab strip lost its own `inset 0 -1px` bottom hairline to\n// this more specific `box-shadow` and gained an edge shadow libadwaita never\n// draws there.\n$undershoot-color: color-mix(in srgb, currentColor 6%, transparent);\n\n.undershoot-top:not(adw-toolbar-view):not(.adw-scroll-shaded) {\n box-shadow: inset 0 6px 6px -6px $undershoot-color;\n}\n\n.undershoot-bottom:not(adw-toolbar-view):not(.adw-scroll-shaded) {\n box-shadow: inset 0 -6px 6px -6px $undershoot-color;\n}\n\n.undershoot-start:not(.adw-scroll-shaded) {\n &:dir(ltr) {\n box-shadow: inset 6px 0 6px -6px $undershoot-color;\n }\n\n &:dir(rtl) {\n box-shadow: inset -6px 0 6px -6px $undershoot-color;\n }\n}\n\n.undershoot-end:not(.adw-scroll-shaded) {\n &:dir(ltr) {\n box-shadow: inset -6px 0 6px -6px $undershoot-color;\n }\n\n &:dir(rtl) {\n box-shadow: inset 6px 0 6px -6px $undershoot-color;\n }\n}\n","// _window.scss — adw-window styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_window.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_window.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-window {\n display: flex;\n flex-direction: column;\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n border-radius: var(--window-radius);\n box-shadow:\n 0 0 14px 5px rgb(0 0 0 / 15%),\n 0 0 5px 2px rgb(0 0 0 / 10%),\n 0 0 0 1px rgb(0 0 0 / 5%);\n overflow: hidden;\n outline: 1px solid rgb(255 255 255 / 7%);\n outline-offset: -1px;\n}\n","// _headerbar.scss — adw-header-bar styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_headerbar.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_header-bar.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// A GRID, not a flex row, because `Adw.HeaderBar` puts its three sections in a\n// `GtkCenterBox` (adw-header-bar.c:992) — and a center box centres its middle\n// child in the WHOLE box, not in whatever space the sides left over. As a flex\n// row with `flex: 1` on the centre, the title was centred between the buttons\n// instead: any bar whose two sides differ in width — which is most of them, e.g.\n// a storybook preview header with no start buttons and two end buttons — drew its\n// title visibly off-centre.\n//\n// `1fr` is `minmax(auto, 1fr)`, and that auto floor is what makes this the LOOSE\n// centering policy (the default) rather than STRICT: the side tracks share the\n// free space equally, so the title sits dead centre while both sides fit, but a\n// side whose content is wider than its share pushes the title off centre rather\n// than truncating itself. STRICT — `adw_header_bar_set_centering_policy`, which\n// size-groups the two sides — would instead keep the title centred at all cost.\nadw-header-bar {\n display: grid;\n grid-template-columns: 1fr minmax(0, auto) 1fr;\n align-items: center;\n min-height: 47px;\n padding: 0 6px;\n background-color: var(--headerbar-bg-color);\n color: var(--headerbar-fg-color);\n box-shadow: inset 0 -1px var(--separator-color);\n // flex-shrink: 0 ensures the headerbar never collapses inside a flex-column\n // adw-window, preventing a spurious spacing band between bar and content.\n flex-shrink: 0;\n\n .adw-header-bar-center {\n // STRETCHED into its track, never `justify-self: center`. A grid item that is\n // centred is sized `fit-content`, whose floor is the item's own MIN-CONTENT —\n // and a `nowrap` title's min-content is the whole string. Centred, a 260px bar\n // with a back button and two end buttons therefore drew a 277px centre section\n // starting 6.6px OUTSIDE the bar and running straight over all three buttons,\n // with the ellipsis never reached. Stretched, the item is exactly its track,\n // and the track is what is left once both sides have their natural width.\n //\n // That leftover is the rule `gtk_center_layout_distribute` applies while\n // `shrink-center-last` is FALSE (gtkcenterlayout.c:155-157): the centre is\n // CLAMPed to `size - spacing - (start.natural + end.natural)` and then pushed\n // in from either side, so it cannot overlap them. The centring above still\n // holds wherever the bar HAS room, because the two `1fr` side tracks split the\n // free space evenly and `justify-content: center` centres the title in the\n // middle track.\n display: flex;\n justify-content: center;\n // min-width: 0 prevents the title from pushing the end buttons off-screen.\n // `shrink-center-last` is FALSE on the center box, so the TITLE is what gives\n // way when the bar runs out of room, not the buttons.\n min-width: 0;\n }\n\n .adw-header-bar-title {\n font-weight: bold;\n font-size: var(--font-size-base);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .adw-header-bar-start {\n justify-self: start;\n display: flex;\n align-items: center;\n padding: 0 6px;\n gap: 4px;\n }\n\n .adw-header-bar-end {\n justify-self: end;\n display: flex;\n align-items: center;\n // justify-content: flex-end aligns end buttons to the right edge of the\n // end section, fixing the pause-button misposition bug.\n justify-content: flex-end;\n padding: 0 6px;\n gap: 4px;\n }\n\n .adw-header-btn {\n position: relative;\n width: 34px;\n height: 34px;\n border: none;\n border-radius: var(--button-radius);\n background: transparent;\n color: var(--headerbar-fg-color);\n cursor: pointer;\n padding: 0;\n margin: 0;\n flex-shrink: 0;\n\n &:hover {\n background: rgba(128, 128, 128, 0.12);\n }\n\n &:active {\n background: rgba(128, 128, 128, 0.22);\n }\n }\n}\n\n// `.devel` on the WINDOW gives every header bar inside it a striped background —\n// the marker for a nightly or unstable build (style-classes.md \"Development\n// Window\", `_toolbars.scss:345-354`).\n//\n// Upstream cross-fades a 5% recoloured SVG (`assets/devel-stripes.svg`) and\n// masks it so it fades out downwards. The stripe geometry is read off that\n// asset: a 64px tile, 32px of stripe per period, leaning left as it descends.\n//\n// The fade is the top LAYER here rather than a mask: `mask-image` on the bar\n// would fade its title and buttons with the stripes, and a masked pseudo-element\n// would paint over them. Washing the stripes out with the bar's own opaque\n// background colour renders identically and leaves the content alone.\n.devel adw-header-bar,\nadw-window.devel adw-header-bar {\n background-image:\n linear-gradient(to bottom, transparent 0%, var(--headerbar-bg-color) 100%),\n repeating-linear-gradient(\n 116.565deg,\n color-mix(in srgb, currentColor 5%, transparent) 0 32px,\n transparent 32px 64px\n );\n}\n","// _action_bar.scss — <gtk-action-bar>, GTK's bottom bar of packed widgets.\n//\n// libadwaita styles the bar's inner box (`actionbar > revealer > box`); this element has\n// no revealer, so the host carries that box's surface and the three sections are its\n// start box, centre and end box. `border-spacing: 6px` there is the gap between the\n// packed children here.\n//\n// `revealed` is applied by toggling the `hidden` attribute, and `[hidden]` is re-asserted\n// as an AUTHOR rule for the reason `_view_switcher_bar.scss` gives: the UA rule loses to\n// this block's own `display` by cascade origin.\n//\n// Reference: refs/libadwaita/src/stylesheet/widgets/_toolbars.scss (GtkActionBar)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\ngtk-action-bar {\n display: flex;\n align-items: center;\n gap: 6px;\n box-sizing: border-box;\n background-color: var(--headerbar-bg-color);\n color: var(--headerbar-fg-color);\n box-shadow: inset 0 1px var(--headerbar-shade-color);\n padding: 7px 6px 6px 6px;\n\n &[hidden] {\n display: none;\n }\n\n > .adw-action-bar-start,\n > .adw-action-bar-end {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n > .adw-action-bar-start {\n flex: 1 1 0;\n justify-content: flex-start;\n }\n\n > .adw-action-bar-center {\n display: flex;\n align-items: center;\n }\n\n > .adw-action-bar-end {\n flex: 1 1 0;\n justify-content: flex-end;\n }\n}\n","// _window_title.scss — adw-window-title styling (header-bar title widget).\n// Reference: refs/adwaita-web/adwaita-web/docs/widgets/windowtitle.md\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-window-title {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n line-height: 1.15;\n min-width: 0;\n\n // Both labels carry 12px sides upstream (_header-bar.scss:214-227). Without them the\n // gallery's window title measured 27px narrower than GTK's render of the same `.blp`,\n // and a header bar's title could run up against the buttons beside it.\n .adw-window-title-title,\n .adw-window-title-subtitle {\n padding-left: 12px;\n padding-right: 12px;\n }\n\n .adw-window-title-title {\n font-size: var(--font-size-base);\n font-weight: 700;\n color: var(--headerbar-fg-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n }\n\n .adw-window-title-subtitle {\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n color: var(--headerbar-fg-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n }\n}\n","// _button.scss — gtk-button + Adwaita button styles + symbolic icons + .linked.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_buttons.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// <gtk-button> is a thin host that renders an inner <button class=\"adw-button\">;\n// the class set is the real styling API and works on a plain <button> too.\ngtk-button {\n display: inline-flex;\n}\n\n.adw-button {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n min-height: 34px;\n min-width: 34px;\n margin: 0;\n padding: 4px 14px;\n border: none;\n border-radius: var(--button-radius);\n background-color: var(--button-bg-color);\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n font-weight: 700;\n line-height: 1;\n text-decoration: none;\n cursor: pointer;\n transition: background-color 0.1s ease;\n user-select: none;\n -webkit-user-select: none;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n &:disabled {\n opacity: 0.45;\n cursor: default;\n }\n\n // Flat — no resting background; only reacts on hover/active. The header bar's\n // navigation buttons use this.\n &.flat {\n background-color: transparent;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n }\n\n // Suggested action — accent-coloured primary button.\n &.suggested-action {\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n\n &:hover {\n background-color: var(--accent-color);\n }\n\n &:active {\n background-color: var(--accent-color);\n filter: brightness(0.92);\n }\n }\n\n // Destructive action — libadwaita's `%destructive_button` (_buttons.scss:183-210):\n // red TEXT on a 15% tint of it, not a filled red button. It was filled here, so the\n // gallery's \"Delete\" read as a second primary action beside the GTK render of the\n // same `.blp`. The accent tokens are rebound as upstream does, so anything accent-\n // coloured inside the button (a focus ring) turns red with it.\n &.destructive-action {\n --accent-bg-color: var(--destructive-bg-color);\n --accent-fg-color: var(--destructive-fg-color);\n --accent-color: var(--destructive-color);\n\n color: var(--destructive-color);\n background-color: color-mix(in srgb, currentColor 15%, transparent);\n\n &:hover {\n background-color: color-mix(in srgb, currentColor 20%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 35%, transparent);\n }\n }\n\n // A label-only button — GTK's `.text-button`, which `gtk_button_set_label` puts on the\n // button (_buttons.scss:72-75). 17px against the 14px every web button had, so each\n // text button in the gallery's button row was 6px narrower than GTK's. Before the pill,\n // circular and icon-only rules, which upstream also lets win.\n &.text-button {\n padding-left: 17px;\n padding-right: 17px;\n }\n\n // Icon-only square button (no label).\n &.icon-only {\n padding: 0;\n width: 34px;\n }\n\n // Circular — round icon button.\n &.circular {\n padding: 0;\n width: 34px;\n border-radius: 9999px;\n }\n\n // Pill — fully-rounded ends, and libadwaita's `%pill_button` padding\n // (_buttons.scss: `padding: 10px 32px`). It was 6px 20px, which drew every pill\n // 10px shorter and 24px narrower than GTK beside a GTK render of the same `.blp`.\n // GTK's height is `min-height: 24px` plus that padding, so 44; the floor is\n // restated because the base's 34 would otherwise hold the box at the text height.\n &.pill {\n min-height: 44px;\n padding: 10px 32px;\n border-radius: 9999px;\n }\n\n // Raised — the documented opt-OUT of the automatic flat appearance a button\n // gets inside a `.toolbar` or a header bar (style-classes.md \"Raised\"). It is\n // the default look, stated explicitly, so it must also beat `.flat` when both\n // are present, the way `_toolbars.scss` treats it.\n &.raised {\n background-color: var(--button-bg-color);\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n }\n\n // OSD — a standalone button overlapping content (style-classes.md \"OSD ›\n // Overlay Buttons\"). `_common.scss:44` excludes buttons from the generic OSD\n // surface precisely so this can define what `.osd` means for one:\n // `_buttons.scss:111-135` gives it a dark translucent background whose hover\n // and active states mix TOWARDS the foreground rather than changing alpha, so\n // it stays readable over any content. It composes with `.circular` / `.pill`.\n &.osd {\n min-height: 32px;\n min-width: 32px;\n color: rgb(255 255 255 / 90%);\n background-color: rgb(0 0 0 / 65%);\n\n @media (prefers-contrast: more) {\n box-shadow: 0 0 0 1px currentColor;\n }\n\n &:hover {\n color: #ffffff;\n background-color: color-mix(in srgb, black calc(0.85 * 65%), currentColor calc(0.15 * 65%));\n }\n\n &:active {\n color: #ffffff;\n background-color: color-mix(in srgb, black calc(0.75 * 65%), currentColor calc(0.25 * 65%));\n }\n }\n}\n\n// The symbolic icon (`.adw-icon`) used to be declared here, because the first\n// widget that needed one was the button. It is `scss/_icon.scss` now — every\n// other widget needs one too, and `<gtk-image>` is an element.\n\n// The linked group is `scss/_style_classes.scss` now, under libadwaita's own\n// `.linked` name (with `.adw-linked` kept as an alias): the documented class is\n// what a consumer reading style-classes.md reaches for, and it applies to\n// entries and drop-downs too, not only to buttons.\n","// _button_content.scss — adw-button-content styling (icon + label box used as a\n// button child). Mirrors libadwaita's `buttoncontent > box > {image, label}`\n// node: a horizontal box with 6px spacing between icon and label and a bold\n// label, plus optional ellipsizing when `.can-shrink` is set.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_buttons.scss (buttoncontent)\n// Reference: refs/libadwaita/src/adw-button-content.c (AdwButtonContent)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// The class <adw-button-content> stamps on the button hosting it\n// (adw-button-content.c:115), removed again on unroot (:126).\n//\n// libadwaita: `button.image-text-button { padding-left: 9px; padding-right: 9px }`\n// (_buttons.scss:77-80) — against the 17px a plain `.text-button` gets (:72-75).\n// This rule lived in NEITHER renderer, so every icon+label button was drawn with\n// the wrong horizontal padding.\n//\n// Only the PADDING half of that block applies here. The same selector also\n// declares `> box, > box > box { border-spacing: 4px }` (:82-84), and neither\n// matches: the node tree is `button > buttoncontent > box` (:47-52), so the\n// button's direct child is the `buttoncontent`, not a box. The icon↔label gap\n// stays the 6px `buttoncontent > box` gives it (:626-628), which is the `gap`\n// below. It lives in this file rather than in `_button.scss` because the class\n// belongs to this widget, and `.adw-button.image-text-button` beats `.adw-button`\n// on specificity regardless of order.\n//\n// `:not(.pill)` because upstream states `.pill` (:322-323) AFTER this block at the same\n// specificity, so a pill keeps its `10px 32px` whatever it holds. This file is emitted\n// after `_button.scss`, so without the exclusion the order flipped: a pill button with\n// button content was drawn 9px from its label, 47px narrower than GTK.\n.adw-button.image-text-button:not(.pill) {\n padding-left: 9px;\n padding-right: 9px;\n}\n\n// Inside a split button the class sits on the `splitbutton` node instead, and a\n// DIFFERENT block wins: `splitbutton.image-text-button > button` (:499-502).\n.adw-split-button.image-text-button > .adw-split-button-action {\n padding-left: 9px;\n padding-right: 9px;\n}\n\nadw-button-content {\n display: inline-flex;\n align-items: center;\n // Centered as a group, matching the box's halign:center in AdwButtonContent.\n justify-content: center;\n min-width: 0;\n\n // The inner box holds the image + label nodes (border-spacing 6px upstream).\n .adw-button-content-box {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n min-width: 0;\n }\n\n .adw-button-content-label {\n // libadwaita: `buttoncontent > box > label { font-weight: bold; }` with a\n // 2px trailing pad (LTR) so the label does not hug the button edge.\n font-weight: 700;\n line-height: 1;\n padding-right: 2px;\n }\n\n // can-shrink — the label ellipsizes instead of forcing the button wider\n // (Gtk.Label PANGO_ELLIPSIZE_END). The icon keeps its natural size.\n &.can-shrink {\n .adw-button-content-box {\n min-width: 0;\n }\n\n .adw-button-content-label {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n }\n }\n}\n","// _popover.scss — <gtk-popover>, the one popover surface in this package.\n//\n// It replaces three hand-rolled copies (`.adw-menu-button-popover`,\n// `.adw-drop-down-popover`, `.adw-split-button-menu`) that disagreed with\n// libadwaita AND with each other: 12px / 12px / 9px radius against libadwaita's\n// 15px, two correct three-layer shadows and one invented two-layer one. Nothing\n// compared any of them to the vendored stylesheet, so all three shipped.\n//\n// GROUND TRUTH, AND THE SELECTOR THAT WINS THE CASCADE\n//\n// `popover > contents` is `padding: 8px; border-radius: $popover_radius` plus a\n// three-layer shadow (_popovers.scss:13-21), with a `prefers-contrast: more`\n// variant that swaps the innermost layer for a hairline border (:23-27).\n// `$popover_radius` is `$menu_radius + 6` = 15px (_common.scss:10,13) — not\n// `$card_radius` (12px) and not `$button_radius` (9px), the two tokens the\n// copies reached for.\n//\n// The PADDING has a second, more specific rule: `popover.menu > contents`\n// re-declares `padding: 0` and moves the inset onto the item box as\n// `$menu_margin` (6px) at _menus.scss:58-66. Two element selectors plus a class\n// beats one element selector plus a child, so a MENU popover renders a 6px inset\n// and a plain one an 8px inset. The three copies all used 6px — they were right\n// about the inset for the menus they drew, and wrong only about the radius.\n//\n// We reproduce the menu inset with ONE node instead of GTK's contents+box pair:\n// `[menu]` puts the 6px directly on the surface. Same rendered geometry, and\n// there is no separate box element to hang it on in the DOM.\n//\n// Reference: refs/libadwaita/src/stylesheet/widgets/_popovers.scss:7-28\n// Reference: refs/libadwaita/src/stylesheet/widgets/_menus.scss:58-66, :134-156\n// Reference: refs/libadwaita/src/stylesheet/_common.scss:10-13 ($menu_radius, $menu_margin, $popover_radius)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for the @gjsify/adwaita-web light-DOM custom elements.\n\n// Distance between the anchor and the surface. GTK gets this gap from the\n// popover's arrow, which this port does not draw (`has-arrow` is not modelled —\n// GtkPopover's C is not vendored here). 6px is what the menu button and the\n// drop-down already used; the split button's 4px was the odd one out.\n$popover-gap: 6px;\n\ngtk-popover {\n // $popover_radius = $menu_radius + 6 (_common.scss:10,13). Exposed as a token\n // so consumers re-theme it the same way as the rest (ADR 0010), with the\n // libadwaita value as the fallback.\n --popover-radius: 15px;\n\n position: absolute;\n z-index: 10;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n min-width: 120px; // popover.menu > contents (_menus.scss:2-4)\n padding: 8px; // popover > contents (_popovers.scss:14)\n border-radius: var(--popover-radius);\n background-color: var(--popover-bg-color, var(--window-bg-color, #fff));\n color: var(--popover-fg-color, var(--window-fg-color));\n\n // The exact three layers of _popovers.scss:18-20. The COUNT is load-bearing:\n // the split button shipped two.\n box-shadow:\n 0 0 0 1px rgba(0, 0, 0, 0.05),\n 0 1px 5px 1px rgba(0, 0, 0, 0.09),\n 0 2px 14px 3px rgba(0, 0, 0, 0.05);\n\n // _popovers.scss:23-27 — the innermost layer becomes a real hairline so the\n // surface has a visible edge when the shadow alone is not enough. Missing\n // from all three copies.\n @media (prefers-contrast: more) {\n box-shadow:\n 0 0 0 1px var(--separator-color),\n 0 1px 5px 1px rgba(0, 0, 0, 0.09),\n 0 2px 14px 3px rgba(0, 0, 0, 0.05);\n }\n\n // `popover.menu > contents { padding: 0 }` + `$menu_margin` on the item box\n // (_menus.scss:58-66), flattened onto the single surface node.\n //\n // `[menu]` is the attribute the element sets; `.menu` is the name libadwaita\n // DOCUMENTS for the same thing (style-classes.md \"Menu Popovers\"). Both are\n // accepted, because a consumer following the upstream documentation reaches\n // for the class and would otherwise get an 8px inset and no explanation.\n &[menu],\n &.menu {\n padding: 6px;\n }\n\n // --- Placement. Pure CSS, as it always was: nothing measures a rect and\n // --- nothing flips on overflow, in either the element or the core.\n &[data-position='bottom'] {\n top: calc(100% + #{$popover-gap});\n }\n\n &[data-position='top'] {\n bottom: calc(100% + #{$popover-gap});\n }\n\n &[data-position='start'] {\n top: 0;\n right: calc(100% + #{$popover-gap});\n }\n\n &[data-position='end'] {\n top: 0;\n left: calc(100% + #{$popover-gap});\n }\n\n // `align` picks the edge the surface lines up with, and only applies on the\n // vertical axis — a start/end popover is already pinned horizontally.\n &[data-position='bottom'],\n &[data-position='top'] {\n &[data-align='start'] {\n left: 0;\n }\n\n &[data-align='end'] {\n right: 0;\n }\n }\n}\n\n// A popover row — libadwaita's `modelbutton` (_menus.scss:134-156).\n.adw-popover-item {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--spacing-xs);\n width: 100%;\n min-height: 32px; // :135\n min-width: 40px; // :136\n margin: 0;\n // `padding: 0 $menu_padding` (:137) — $menu_padding is 12px (_common.scss:12),\n // and the vertical inset comes from min-height, not from padding. No 12px\n // spacing token exists in this port, so the value is literal like the radius.\n padding: 0 12px;\n border: none;\n border-radius: 9px; // $menu_radius (:138) — NOT calc(--button-radius - 2px), which two copies invented\n background-color: transparent; // :139\n color: inherit;\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n text-align: start;\n cursor: pointer;\n transition: background-color 0.1s ease;\n\n // `&:hover, &:selected { background-color: $selected_color }` (:141-144).\n // `:selected` is GTK's keyboard-highlight pseudo-class; in the DOM that state\n // is focus, so `.selected` (the drop-down's chosen row) and `:focus` share it.\n &:hover,\n &:focus,\n &.selected {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color); // $selected_active_color (:146-148)\n }\n\n // :150-156 — a contrast-mode ring on the same three states.\n @media (prefers-contrast: more) {\n &:hover,\n &:focus,\n &.selected,\n &:active {\n box-shadow: inset 0 0 0 1px var(--separator-color);\n }\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: -2px;\n }\n\n &[disabled] {\n opacity: var(--disabled-opacity);\n pointer-events: none;\n }\n}\n\n// Optional heading atop a menu. libadwaita's `label.title` is `font-weight: bold`\n// + `padding: 4px ($menu_padding + 20px)` (_menus.scss:180-183) — 32px of\n// horizontal padding to centre the title over icon-indented rows, which\n// libadwaita's own comment calls out as fragile. This port keeps the tighter\n// inset `.adw-menu-button-title` already shipped rather than changing how the\n// existing menus look; only the class name moved here. A DELIBERATE deviation,\n// not a reading of :180-183.\n.adw-popover-title {\n padding: 4px var(--spacing-s) 6px;\n font-weight: 700;\n opacity: var(--dim-opacity);\n}\n\n// --- The menu INSIDE the popover (ADR 0042) -----------------------------------\n//\n// One rule set for both menu-bearing elements, because the split button's dropdown\n// half IS a GtkMenuButton and its popup is the same `popover.menu`. SIX nodes, none of\n// which has a counterpart in the port's previous menus — they drew a flat list of labels\n// and nothing else: the separator, the section title, the accelerator, the check/radio\n// mark (plus the two nested `[aria-checked='true']` rules that draw it), the submenu\n// chevron and the back row.\n\n// `popover.menu separator { margin: 6px 0 }` (_menus.scss:68-70). GTK's separator is\n// a real widget with its own background; in the DOM the hairline is the border, so\n// the 6px is split above and below it rather than being a margin on a 1px box.\n.adw-popover-separator {\n height: 1px;\n margin: 6px 0;\n background-color: var(--separator-color, rgba(0, 0, 0, 0.15));\n}\n\n// A section's heading. `.adw-popover-title` already carries the weight and the dim;\n// this is the tighter top inset a heading needs when it follows a separator rather\n// than opening the menu.\n.adw-popover-section-title {\n padding-top: 2px;\n}\n\n// `popover.menu accelerator { color: dim; margin-left: $menu_padding }`\n// (_menus.scss:78-82). `margin-inline-start` rather than `margin-left`, so it follows\n// the writing direction the way GTK's `:dir(ltr)`/`:dir(rtl)` pair does — the two\n// rules are one logical property here.\n.adw-popover-item-accel {\n margin-inline-start: auto;\n padding-inline-start: 12px;\n opacity: var(--dim-opacity);\n font-size: 0.9em;\n}\n\n// `popover.menu check, radio { min-width: 14px; min-height: 14px; padding: 2px }`\n// (_menus.scss:85-90). The slot is reserved whether or not the row is checked, so the\n// labels of a group line up — the reason it is a node and not a `::before`.\n//\n// A DELIBERATE SUBSTITUTION, the same kind `<adw-split-button>`'s pan-up arrow already\n// documents: GTK draws the tick with `object-select-symbolic`, and this port's icon set\n// ships no checkmark (`_icons.generated.scss` has 42 glyphs and none of them is one). A\n// two-sided rotated border is the tick, so nothing here depends on an asset that would\n// silently render as `image-missing`.\n.adw-popover-item-check {\n position: relative;\n box-sizing: border-box;\n flex: none;\n width: 14px;\n height: 14px;\n padding: 2px;\n\n // Drawn off `aria-checked`, never off a class of its own: the accessible state and\n // the visible state are then the same fact rather than two that can disagree.\n [aria-checked='true'] > &::after {\n content: '';\n position: absolute;\n inset-inline-start: 4px;\n top: 1px;\n width: 4px;\n height: 8px;\n border: solid currentcolor;\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n\n // A radio's mark is a filled dot, so the tick becomes a disc.\n &.radio {\n border-radius: 9999px;\n }\n\n [aria-checked='true'] > &.radio::after {\n inset-inline-start: 4px;\n top: 4px;\n width: 6px;\n height: 6px;\n border: none;\n border-radius: 9999px;\n background-color: currentcolor;\n transform: none;\n }\n}\n\n// The chevron on a row that opens a submenu.\n.adw-popover-item-arrow {\n margin-inline-start: auto;\n width: 16px;\n height: 16px;\n flex: none;\n opacity: var(--dim-opacity);\n}\n\n// The row that leaves a submenu. It carries the parent's own label, so it reads as\n// the heading of the page it returns to rather than as a bare \"Back\".\n.adw-popover-back {\n font-weight: 700;\n}\n","// _split_button.scss — adw-split-button styling: a primary action button fused\n// with a dropdown that opens a menu of related actions, split by a thin divider.\n// The suggested/destructive/flat style classes recolor the whole control like\n// the matching Adwaita button variants.\n// Reference: refs/libadwaita/src/adw-split-button.c (splitbutton CSS node)\n// Reference: refs/adwaita-web/adwaita-web/scss/_split_button.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n.adw-split-button {\n position: relative;\n box-sizing: border-box;\n display: inline-flex;\n align-items: stretch;\n vertical-align: middle;\n min-height: 34px;\n border-radius: var(--button-radius);\n background-color: var(--button-bg-color);\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n user-select: none;\n -webkit-user-select: none;\n\n &:focus-within {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n // Primary action half — fills the available width, rounded on the leading\n // side only so it meets the dropdown flush.\n .adw-split-button-action {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n flex-grow: 1;\n min-height: 34px;\n margin: 0;\n padding: 4px 14px;\n border: none;\n border-radius: var(--button-radius) 0 0 var(--button-radius);\n background-color: transparent;\n color: inherit;\n font: inherit;\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n transition: background-color 0.1s ease;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus,\n &:focus-visible {\n outline: none;\n }\n\n // Icon-only action half — square, no horizontal text padding.\n &.icon-only {\n padding: 0;\n width: 34px;\n flex-grow: 0;\n }\n }\n\n // Thin divider between the two halves (the splitbutton `separator` node).\n .adw-split-button-dropdown {\n position: relative;\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-height: 34px;\n // libadwaita: `splitbutton > menubutton > button { padding: 0 4px }` over the button's\n // 16px minimum (_buttons.scss:486-489), so the arrow half is 24px. It was 28, and the\n // gallery's split button measured 5px wider than GTK's render of the same `.blp`.\n width: 24px;\n margin: 0;\n padding: 0 4px;\n border: none;\n border-left: 1px solid var(--separator-color);\n border-radius: 0 var(--button-radius) var(--button-radius) 0;\n background-color: transparent;\n color: inherit;\n cursor: pointer;\n transition: background-color 0.1s ease;\n\n .adw-icon {\n width: 14px;\n height: 14px;\n mask-size: 14px;\n -webkit-mask-size: 14px;\n }\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus,\n &:focus-visible {\n outline: none;\n }\n }\n\n // The dropdown menu is `<gtk-popover>` (`_popover.scss`), and this was the\n // WORST of the three hand-rolled surfaces: `--button-radius` (9px) where\n // libadwaita's popover is 15px, under a two-layer shadow that exists nowhere\n // in the vendored stylesheet (`popover > contents` has three,\n // _popovers.scss:18-20), and a `calc(var(--button-radius) - 2px)` (7px) row\n // where `modelbutton` is 9px. Nothing element-specific was left to keep.\n\n // --- Suggested action — accent-coloured whole control ---\n &.suggested-action {\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n\n .adw-split-button-dropdown {\n border-left-color: rgba(255, 255, 255, 0.3);\n }\n\n .adw-split-button-action:hover,\n .adw-split-button-dropdown:hover {\n background-color: var(--accent-color);\n }\n\n .adw-split-button-action:active,\n .adw-split-button-dropdown:active {\n background-color: var(--accent-color);\n filter: brightness(0.92);\n }\n }\n\n // --- Destructive action — red whole control ---\n &.destructive-action {\n background-color: var(--destructive-bg-color);\n color: var(--destructive-fg-color);\n\n .adw-split-button-dropdown {\n border-left-color: rgba(255, 255, 255, 0.3);\n }\n\n .adw-split-button-action:hover,\n .adw-split-button-dropdown:hover {\n filter: brightness(1.06);\n }\n\n .adw-split-button-action:active,\n .adw-split-button-dropdown:active {\n filter: brightness(0.9);\n }\n }\n\n // --- Flat — no resting background; only reacts on hover/active ---\n &.flat {\n background-color: transparent;\n }\n\n // --- Disabled ---\n &.disabled {\n opacity: 0.45;\n cursor: default;\n\n .adw-split-button-action,\n .adw-split-button-dropdown {\n cursor: default;\n pointer-events: none;\n }\n }\n}\n","// _menu_button.scss — gtk-menu-button styling: a flat (or circular) icon button\n// that drops an Adwaita-styled popover menu (the web counterpart of\n// Adw.MenuButton / Gtk.MenuButton). The button mirrors libadwaita's flat/circular\n// `menubutton > button`; the popover reproduces `popover.menu > contents` with\n// its soft triple-shadow surface and `modelbutton`-style item rows.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_buttons.scss (menubutton flat/circular)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_popovers.scss (popover > contents)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_menus.scss (popover.menu modelbutton)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n.adw-menu-button {\n position: relative;\n box-sizing: border-box;\n display: inline-flex;\n vertical-align: middle;\n\n // The icon button — square with the button radius by default.\n .adw-menu-button-button {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 34px;\n min-height: 34px;\n margin: 0;\n padding: 0 8px;\n border: none;\n border-radius: var(--button-radius);\n background-color: var(--button-bg-color);\n color: var(--window-fg-color);\n cursor: pointer;\n transition: background-color 0.1s ease;\n\n .adw-menu-button-icon {\n width: 16px;\n height: 16px;\n flex: none;\n }\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n }\n\n // Flat — no resting fill (the header app-menu idiom).\n &.flat .adw-menu-button-button {\n background-color: transparent;\n }\n\n // The open state keeps a subtle fill so the button reads as \"checked\".\n &.active .adw-menu-button-button {\n background-color: var(--button-active-color);\n }\n\n // Circular — a round 34×34 button (window-control / FAB idiom).\n &.circular .adw-menu-button-button {\n padding: 0;\n border-radius: 9999px;\n }\n\n &.disabled {\n opacity: 0.45;\n\n .adw-menu-button-button {\n cursor: default;\n pointer-events: none;\n }\n }\n\n // The surface, the heading and the item row are `<gtk-popover>`'s —\n // `_popover.scss` (`gtk-popover`, `.adw-popover-title`, `.adw-popover-item`).\n // What used to be here was one of three hand-rolled copies: a\n // `--card-radius` (12px) surface where libadwaita's is 15px, and a\n // `calc(var(--button-radius) - 2px)` (7px) row where `modelbutton` is 9px.\n // Only the icon slot is a menu-button fact.\n .adw-menu-button-item-icon {\n width: 16px;\n height: 16px;\n flex: none;\n }\n}\n","// _drop_down.scss — gtk-drop-down: a standalone dropdown selector (the web\n// counterpart of Gtk.DropDown). A normal Adwaita button showing the current\n// selection + a `pan-down` chevron, dropping an elevated Adwaita popover list of\n// options. The popover reproduces libadwaita's popover.menu > contents surface\n// (soft triple shadow), the items its modelbutton rows, matching <gtk-menu-button>.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_popovers.scss (popover > contents)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_menus.scss (modelbutton rows)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_dropdowns.scss (dropdown button)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Implemented for @gjsify/adwaita-web Web Components.\n\n.adw-drop-down {\n position: relative;\n box-sizing: border-box;\n display: inline-flex;\n vertical-align: middle;\n\n // The selection button — a normal Adwaita button (label + dim chevron).\n .adw-drop-down-button {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-xs);\n min-width: 100px;\n min-height: 34px;\n margin: 0;\n padding: 0 8px 0 12px;\n border: none;\n border-radius: var(--button-radius);\n background-color: var(--button-bg-color);\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n cursor: pointer;\n transition: background-color 0.1s ease;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n &:disabled {\n cursor: default;\n pointer-events: none;\n }\n }\n\n .adw-drop-down-label {\n flex: 1 1 auto;\n min-width: 0;\n text-align: start;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // The chevron — a smaller, dimmed down-glyph after the label.\n .adw-drop-down-arrow {\n width: 12px;\n height: 12px;\n mask-size: 12px;\n -webkit-mask-size: 12px;\n flex: none;\n opacity: var(--dim-opacity);\n }\n\n &.disabled {\n opacity: 0.55;\n }\n\n // The popover SURFACE is `<gtk-popover>`'s (`_popover.scss`, the `[menu]`\n // variant — a dropdown's popover is a `popover.menu`, _dropdowns.scss:22).\n // What stays here is what libadwaita ALSO scopes to `dropdown`:\n // - the extra 6px above the contents (`popover.menu { padding-top: 6px }`,\n // _dropdowns.scss:23). GTK puts it on the popover node while the 6px inset\n // sits on `> contents`; flattened onto one node they add, which is what\n // the two-node original renders too.\n // - the width tracking the button rather than libadwaita's flat `min-width`.\n .adw-drop-down-popover {\n padding-top: 12px;\n min-width: 100%;\n max-width: 320px;\n }\n\n // Search entry atop the popover (enable-search). It reuses the .adw-entry skin\n // but needs its own bottom margin to separate it from the list.\n .adw-drop-down-search {\n margin-bottom: var(--spacing-xs);\n }\n\n // Scrollable column of option rows.\n .adw-drop-down-list {\n display: flex;\n flex-direction: column;\n max-height: 320px;\n overflow-y: auto;\n }\n\n // An option row is `.adw-popover-item` (`_popover.scss` — libadwaita's\n // `modelbutton`). Only the trailing-check layout is a drop-down fact: the\n // label and the check sit at opposite ends of the row.\n .adw-drop-down-item {\n justify-content: space-between;\n gap: var(--spacing-s);\n }\n\n .adw-drop-down-item-label {\n flex: 1 1 auto;\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // The selected-row check — a CSS checkmark, shown only on `.selected`.\n .adw-drop-down-item-check {\n position: relative;\n width: 16px;\n height: 16px;\n flex: none;\n }\n\n .adw-drop-down-item.selected .adw-drop-down-item-check::after {\n content: '';\n position: absolute;\n left: 5px;\n top: 2px;\n width: 4px;\n height: 8px;\n border: solid var(--accent-color);\n border-width: 0 2px 2px 0;\n transform: rotate(45deg);\n }\n}\n","// _toggle_group.scss — adw-toggle-group styling (a linked set of toggle buttons\n// with a single active item, recolored with the Adwaita active-toggle accent).\n// Reference: refs/libadwaita/src/stylesheet/widgets/_toggle-group.scss (AdwToggleGroup)\n// Reference: refs/adwaita-web/adwaita-web/scss/_toggle_group.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// The active toggle uses a white-on-fg \"raised\" chip. These tokens default to\n// libadwaita's light-theme values; _theme.scss overrides them for dark.\n:root {\n --active-toggle-bg-color: #ffffff;\n --active-toggle-fg-color: var(--window-fg-color);\n}\n\nadw-toggle-group {\n // libadwaita's ---group-padding: a small inset so the active chip floats\n // inside the group's pill, leaving a hairline of group background around it.\n --group-padding: 3px;\n\n display: inline-flex;\n box-sizing: border-box;\n padding: var(--group-padding);\n border-radius: var(--button-radius);\n background-color: var(--button-bg-color);\n\n .adw-toggle-group-inner {\n display: flex;\n align-items: stretch;\n gap: var(--group-padding);\n }\n\n // Each toggle is a button-shaped chip with the group's inner radius.\n .adw-toggle {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-xs);\n min-width: 34px;\n min-height: 28px;\n margin: 0;\n padding: 4px 11px;\n border: none;\n border-radius: calc(var(--button-radius) - var(--group-padding));\n background-color: transparent;\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n transition:\n color 0.2s ease,\n background-color 0.2s ease,\n box-shadow 0.2s ease;\n user-select: none;\n -webkit-user-select: none;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n // The active toggle — a raised white chip, the way libadwaita draws it.\n &.active {\n background-color: var(--active-toggle-bg-color);\n color: var(--active-toggle-fg-color);\n box-shadow:\n 0 1px 3px 1px rgba(0, 0, 6, 0.07),\n 0 2px 6px 2px rgba(0, 0, 6, 0.03);\n\n &:hover {\n background-color: var(--active-toggle-bg-color);\n }\n }\n }\n\n // Round — group + toggles become pill-shaped.\n &.round {\n border-radius: 17px;\n\n .adw-toggle {\n border-radius: calc(17px - var(--group-padding));\n padding-left: calc(15px - var(--group-padding));\n padding-right: calc(15px - var(--group-padding));\n }\n }\n\n // Flat — no group background; the active toggle uses a subtle fill instead of\n // the raised white chip.\n &.flat {\n --group-padding: 0px;\n\n padding: 0;\n background: none;\n\n .adw-toggle {\n border-radius: var(--button-radius);\n\n &.active {\n background-color: var(--button-active-color);\n color: inherit;\n box-shadow: none;\n\n &:hover {\n background-color: var(--button-active-color);\n }\n }\n }\n\n &.round .adw-toggle {\n border-radius: 17px;\n }\n }\n}\n","// _switch.scss — the <gtk-switch> control: a track, a hidden checkbox and a\n// sliding knob. UNSCOPED, which is the whole point of the partial.\n//\n// WHY IT IS ITS OWN FILE. These rules used to live inside `_switch_row.scss`,\n// nested under `adw-switch-row { … }` — so `.adw-switch` did not exist anywhere\n// else, and the moment a second widget needed a toggle it could not use it.\n// `_expander_row.scss` therefore carried a character-for-character copy of the\n// whole block (same 44×24 box, same hidden input, same 20px knob, same\n// `translateX(20px)`, same focus ring) under a different class name. Two copies\n// of a control is how a hover state gets fixed in one of them.\n//\n// FIDELITY, RECORDED RATHER THAN \"FIXED\": the 44×24 track with the 20px knob is\n// `refs/adwaita-web/adwaita-web/scss/_switch.scss`'s geometry, NOT libadwaita's.\n// libadwaita draws `switch` as a 3px-padded trough around a 20px slider with\n// `border-radius: 14px` (refs/libadwaita/src/stylesheet/widgets/_switch.scss:3-4,\n// :24-26) — about 26px tall, not 24, and correspondingly narrower. What ships\n// here is the vendored web port's box, unchanged by the extraction; changing the\n// geometry is a visual decision for a separate change, and citing libadwaita for\n// numbers that came from somewhere else would be the misreading the conformance\n// header warns about.\n//\n// Reference: refs/adwaita-web/adwaita-web/scss/_switch.scss (the geometry that ships)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_switch.scss:3-4,20-26 (the geometry that does not, + the disabled treatment)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components; lifted out of\n// `adw-switch-row {}` so <gtk-switch> is usable anywhere.\n\n.adw-switch {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n\n // The real control: focusable and keyboard-toggleable, but never painted —\n // the slider below is what the user sees and clicks.\n input {\n opacity: 0;\n width: 0;\n height: 0;\n position: absolute;\n }\n}\n\n.adw-switch-slider {\n position: absolute;\n cursor: pointer;\n inset: 0;\n background-color: var(--switch-off-bg);\n border-radius: 12px;\n transition: background-color 0.15s ease-out;\n\n &::before {\n content: \"\";\n position: absolute;\n height: 20px;\n width: 20px;\n left: 2px;\n bottom: 2px;\n background-color: var(--switch-knob-bg);\n border-radius: 50%;\n transition: transform 0.15s ease-out;\n box-shadow: 0 1px 2px rgb(0 0 0 / 20%);\n }\n}\n\n.adw-switch input:checked + .adw-switch-slider {\n background-color: var(--accent-bg-color);\n\n &::before {\n transform: translateX(20px);\n }\n}\n\n.adw-switch input:focus-visible + .adw-switch-slider {\n outline: 2px solid var(--accent-color);\n outline-offset: 2px;\n}\n\n// libadwaita dims the whole widget (`filter: Opacity(var(--disabled-opacity))`,\n// _switch.scss:20-22), and `--disabled-opacity` is a real token here now — it\n// used to be stood in for by `--dim-opacity`, which is a different number and\n// moves the OTHER way under high contrast.\n.adw-switch.disabled {\n opacity: var(--disabled-opacity);\n\n .adw-switch-slider {\n cursor: not-allowed;\n }\n}\n","// _entry.scss — gtk-entry / .adw-entry text input (e.g. a browser URL bar).\n// Reference: refs/libadwaita/src/stylesheet/widgets/_entries.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// <gtk-entry> hosts an inner <input class=\"adw-entry\">; it fills its flex slot.\ngtk-entry {\n display: flex;\n flex: 1;\n min-width: 0;\n}\n\n.adw-entry {\n box-sizing: border-box;\n width: 100%;\n min-height: 34px;\n margin: 0;\n padding: 5px 12px;\n border: none;\n border-radius: var(--button-radius);\n background-color: var(--entry-bg-color);\n color: var(--view-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n box-shadow: inset 0 0 0 1px var(--entry-border-color);\n transition: box-shadow 0.1s ease;\n\n &::placeholder {\n color: var(--view-fg-color);\n opacity: var(--dim-opacity);\n }\n\n &:hover {\n box-shadow: inset 0 0 0 1px var(--entry-border-hover-color);\n }\n\n &:focus,\n &:focus-visible {\n outline: none;\n box-shadow: inset 0 0 0 2px var(--accent-color);\n }\n\n // Dimmed disabled state, mirroring .adw-button:disabled.\n &:disabled {\n opacity: 0.45;\n cursor: default;\n box-shadow: inset 0 0 0 1px var(--entry-border-color);\n }\n}\n","// _checks.scss — <gtk-check-button> AND <adw-radio>, in ONE partial.\n//\n// WHY ONE FILE FOR TWO ELEMENTS. Upstream's\n// `refs/libadwaita/src/stylesheet/widgets/_checks.scss` merges them deliberately:\n// everything but the corner radius and the glyph is a shared `check, radio { … }`\n// block (:20-65), and the indeterminate dash is re-declared for BOTH at the end\n// (:79-81). There is no `_radio.scss` upstream to mirror. `refs/adwaita-web` does\n// split them into `_checkbox.scss` + `_radio.scss`, and the split is exactly where\n// it drifted: its two indicators grew different sizes, different border treatments\n// and different selection-mode rules, and only one of them has a hover state.\n//\n// TWO PLACES THE VENDORED WEB PORT DISAGREES WITH LIBADWAITA. libadwaita is\n// followed in both:\n//\n// 1. INDETERMINATE. `refs/adwaita-web/adwaita-web/scss/_checkbox.scss` has no\n// indeterminate state at all — no dash, no third glyph, nothing. libadwaita\n// paints it with the same accent fill as checked (:52-60) and its own dash\n// glyph (:79-81). Ported.\n// 2. THE CHECKED RADIO. `refs/adwaita-web/adwaita-web/scss/_radio.scss:22-33`\n// colours only the BORDER and the dot with `--accent-color`, leaving the\n// indicator's background as the view colour. libadwaita FILLS the whole\n// control with `--accent-bg-color` and draws the bullet in\n// `--accent-fg-color` (:54-55) — the same treatment the checkbox gets, which\n// is the point of the shared block. Ported.\n//\n// THE GLYPHS ARE LIBADWAITA'S OWN ASSETS. GTK draws them with\n// `-gtk-icon-source: -gtk-recolor(url(\"assets/check.svg\"))` (:70, :76, :80),\n// which has no CSS spelling. The path data below is copied from\n// `refs/libadwaita/src/stylesheet/assets/{check,bullet,dash}.svg` and painted as\n// a mask filled with `currentColor` — the same technique `_icon.scss` already\n// uses, and what makes `-gtk-recolor` work here: the shared block sets\n// `color: var(--accent-fg-color)` on a checked indicator, so the glyph follows.\n// `bullet.svg` carries a `transform=\"translate(-381 -339)\"` on a path whose\n// commands after the first are all relative, so the translation is folded into\n// the absolute `M` (388,342 → 7,3) and nothing else changes.\n//\n// Reference: refs/libadwaita/src/stylesheet/widgets/_checks.scss (all of it)\n// Reference: refs/libadwaita/src/stylesheet/assets/{check,bullet,dash}.svg (the three glyphs)\n// Reference: refs/libadwaita/src/stylesheet/_colors.scss:280-286 (the trough colours)\n// Reference: refs/adwaita-web/adwaita-web/scss/{_checkbox,_radio}.scss (the vendored port's split, NOT followed — see above)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Implemented as Web Components for @gjsify/adwaita-web; the GTK\n// icon sources are re-expressed as CSS masks.\n\n// assets/check.svg\n$check-glyph: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14'%3E%3Cpath fill='black' d='m 12.599609,2.1992188 a 1,1 0 0 0 -1.40039,0.2011718 L 5.890625,9.4765625 2.7070313,6.2929687 a 1,1 0 0 0 -1.4140626,0 1,1 0 0 0 0,1.4140625 l 4,3.9999998 A 1.0001,1.0001 0 0 0 6.8007812,11.599609 L 12.800781,3.5996094 A 1,1 0 0 0 12.599609,2.1992188 Z'/%3E%3C/svg%3E\");\n// assets/bullet.svg\n$bullet-glyph: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14'%3E%3Cpath fill='black' d='M 7 3 c -2.207 0 -4 1.793 -4 4 s 1.793 4 4 4 c 2.208 0 4 -1.793 4 -4 s -1.792 -4 -4 -4 z'/%3E%3C/svg%3E\");\n// assets/dash.svg\n$dash-glyph: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14'%3E%3Cpath fill='black' d='M 3 5 A 2 2 0 0 0 1 7 A 2 2 0 0 0 3 9 L 11 9 A 2 2 0 0 0 13 7 A 2 2 0 0 0 11 5 Z'/%3E%3C/svg%3E\");\n\n// `checkbutton { … }` (:3-18) — the host is the button, not the indicator.\ngtk-check-button,\nadw-radio {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 4px; // border-spacing: 4px (:4)\n padding: 3px; // (:6)\n border-radius: 9px; // $check_radius + 3px (:5)\n cursor: pointer;\n user-select: none;\n\n // The real control: focusable and keyboard-operable, never painted. The\n // indicator below is what the user sees; the host handles the pointer.\n .adw-check-input {\n position: absolute;\n width: 0;\n height: 0;\n margin: 0;\n opacity: 0;\n }\n\n // `check, radio { … }` (:20-31), shared by both elements.\n .adw-check-indicator {\n // GTK sizes the CONTENT box (`min-width`/`min-height: 14px`, :22-23) and\n // grows the drawn control with `padding: 3px` (:26), i.e. 20x20. Opting out\n // of the ADR-0010 descendant border-box pin keeps that arithmetic — and\n // keeps `checkbutton.selection-mode`'s one-line `padding: 7px` (:87)\n // working exactly as it does upstream instead of needing a second number.\n box-sizing: content-box;\n width: 14px;\n height: 14px;\n padding: 3px;\n flex-shrink: 0;\n box-shadow: inset 0 0 0 2px color-mix(in srgb, currentColor 15%, transparent); // $trough_color\n transition:\n background 200ms ease-out,\n box-shadow 200ms ease-out;\n\n @media (prefers-contrast: more) {\n // $trough_color_hc (_colors.scss:284) stands in for $border_color: this\n // package defines no `--border-opacity`, and the two are the same 30%\n // mix of currentColor in the light theme.\n box-shadow: inset 0 0 0 2px color-mix(in srgb, currentColor 30%, transparent);\n }\n\n // The glyph layer. No mask until a state supplies one, so an unchecked\n // control paints nothing here.\n &::after {\n content: '';\n display: block;\n width: 100%;\n height: 100%;\n background-color: currentColor;\n mask-repeat: no-repeat;\n mask-position: center;\n mask-size: 14px; // -gtk-icon-size: 14px (:25)\n -webkit-mask-repeat: no-repeat;\n -webkit-mask-position: center;\n -webkit-mask-size: 14px;\n }\n }\n\n // `&:not(:checked):not(:indeterminate) { &:hover / &:active }` (:33-50).\n // Hover and active live on the HOST here — the indicator is 20px inside a\n // control whose label is part of the target, exactly as `checkbutton` is.\n &:not([checked]):not([indeterminate]):not([disabled]) {\n &:hover .adw-check-indicator {\n box-shadow: inset 0 0 0 2px color-mix(in srgb, currentColor 20%, transparent); // $trough_hover_color\n\n @media (prefers-contrast: more) {\n box-shadow: inset 0 0 0 2px color-mix(in srgb, currentColor 60%, transparent);\n }\n }\n\n &:active .adw-check-indicator {\n background-color: color-mix(in srgb, currentColor 25%, transparent); // $trough_active_color\n box-shadow: none;\n\n @media (prefers-contrast: more) {\n background-color: color-mix(in srgb, currentColor 60%, transparent);\n }\n }\n }\n\n // `&:checked, &:indeterminate { … }` (:52-60) — ONE block for both states, so\n // they differ only in the glyph.\n &[checked] .adw-check-indicator,\n &[indeterminate] .adw-check-indicator {\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n box-shadow: none;\n }\n\n // GTK's `background-image: image(<colour>)` (:58-59) is a flat fill; a\n // two-stop gradient of one colour is its CSS spelling, as `_button_row.scss`\n // already does.\n &[checked]:not([disabled]),\n &[indeterminate]:not([disabled]) {\n &:hover .adw-check-indicator {\n background-image: linear-gradient(\n color-mix(in srgb, currentColor 10%, transparent),\n color-mix(in srgb, currentColor 10%, transparent)\n );\n }\n\n &:active .adw-check-indicator {\n background-image: linear-gradient(rgb(0 0 6 / 20%), rgb(0 0 6 / 20%));\n }\n }\n\n // `&:disabled { filter: Opacity(var(--disabled-opacity)) }` (:62-64).\n &[disabled] {\n cursor: not-allowed;\n opacity: var(--disabled-opacity);\n }\n\n // `@include focus-ring()` on `checkbutton` (:8). The ring follows the real\n // control's focus, not the host's, so keyboard focus is what shows it.\n .adw-check-input:focus-visible ~ .adw-check-indicator {\n outline: 2px solid var(--accent-color);\n outline-offset: 2px;\n }\n}\n\n// `check { border-radius: $check_radius }` (:67-68)\ngtk-check-button .adw-check-indicator {\n border-radius: 6px;\n}\n\n// `radio { border-radius: 100% }` (:73-74)\nadw-radio .adw-check-indicator {\n border-radius: 100%;\n}\n\n// `check:checked` → check.svg (:70) / `radio:checked` → bullet.svg (:76)\ngtk-check-button[checked] .adw-check-indicator::after {\n mask-image: $check-glyph;\n -webkit-mask-image: $check-glyph;\n}\n\nadw-radio[checked] .adw-check-indicator::after {\n mask-image: $bullet-glyph;\n -webkit-mask-image: $bullet-glyph;\n}\n\n// `check, radio { &:indeterminate { … dash.svg } }` (:79-81). Upstream this is a\n// SEPARATE rule after both `:checked` blocks at equal specificity, so the dash\n// wins over the check/bullet on a control that is both. Same order, same\n// specificity, same outcome here — and the same precedence `resolveCheckState`\n// in `@gjsify/adwaita-core` encodes for the a11y value.\ngtk-check-button[indeterminate] .adw-check-indicator::after,\nadw-radio[indeterminate] .adw-check-indicator::after {\n mask-image: $dash-glyph;\n -webkit-mask-image: $dash-glyph;\n}\n\n// `checkbutton.selection-mode { … }` (:83-95) — the big round check used in a\n// selection-mode header bar.\ngtk-check-button.selection-mode,\nadw-radio.selection-mode {\n border-radius: 100px;\n\n .adw-check-indicator {\n padding: 7px;\n border-radius: 100px;\n }\n\n // `label { &:dir(ltr) { margin-right: 6px } &:dir(rtl) { margin-left: 6px } }`\n // (:91-94) — one logical property covers both directions.\n .adw-check-label {\n margin-inline-end: 6px;\n }\n}\n","// _progress_bar.scss — <gtk-progress-bar>, the determinate partner to\n// <adw-spinner>.\n//\n// TWO SOURCES, AND WHICH HALF CAME FROM WHICH — the two disagree, so this is not\n// bookkeeping:\n//\n// GEOMETRY + COLOUR + THE OSD VARIANT come from\n// `refs/libadwaita/src/stylesheet/widgets/_progress-bar.scss`: an 8px trough\n// (:6), the 99px `$_progress-radius` (:33-35), the `%scale_trough` /\n// `%scale_highlight` placeholders it shares with the scale\n// (`_scale.scss:1-17`), the `> trough.empty > progress { all: unset }` rule\n// that makes a zero fraction draw NOTHING rather than a 0px sliver (:85), and\n// the `.osd` variant — a 2px bar with no trough, for under a header bar\n// (:59-83).\n//\n// THE INDETERMINATE ANIMATION comes from\n// `refs/adwaita-web/adwaita-web/scss/_progressbar.scss:25-66`, because\n// libadwaita has NO CSS equivalent: GTK animates a pulsing block from C\n// (`gtk_progress_bar_pulse`), so the stylesheet has nothing to copy. Its\n// keyframes and its `prefers-reduced-motion` fallback are the only parts taken\n// from there. Its GEOMETRY is NOT: it draws a 6px bar with a 3px radius and\n// has no trough placeholder, no OSD variant and no text node, so copying its\n// numbers would put a bar in this package that matches neither source.\n//\n// NOT PORTED, deliberately: `progressbar.vertical` (:10-15) and the four\n// `progress.{left,right,top,bottom}` corner-radius rules (:37-55). Both exist\n// for orientations and trough-splitting `<gtk-progress-bar>` does not expose —\n// there is no `orientation` attribute — and a rule nothing can ever select is a\n// rule that rots.\n//\n// Reference: refs/libadwaita/src/stylesheet/widgets/_progress-bar.scss:5-6,17-21,23-25,27-35,59-85\n// Reference: refs/libadwaita/src/stylesheet/widgets/_scale.scss:1-17 (%scale_trough, %scale_highlight)\n// Reference: refs/libadwaita/src/stylesheet/_colors.scss:280-286 (the trough colours)\n// Reference: refs/adwaita-web/adwaita-web/scss/_progressbar.scss:25-66 (indeterminate keyframes + reduced-motion fallback ONLY)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Implemented as a Web Component for @gjsify/adwaita-web.\n\n// `.dimmed` / `.numeric`, which the text node @extends exactly as upstream does.\n@use 'labels';\n\ngtk-progress-bar {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-xs);\n // `progressbar.horizontal > trough { min-width: 150px }` (:5) is a WIDGET\n // minimum in GTK, so it belongs on the element rather than on the trough.\n min-width: 150px;\n\n .adw-progress-bar-trough {\n // %scale_trough (_scale.scss:1-10)\n position: relative;\n display: flex;\n overflow: hidden;\n height: 8px; // :6 — `&, > progress { min-height: 8px }`\n border-radius: 99px;\n background-color: color-mix(in srgb, currentColor 15%, transparent);\n transition: background 200ms ease-out;\n\n @media (prefers-contrast: more) {\n // $trough_color_hc (_colors.scss:284)\n background-color: color-mix(in srgb, currentColor 30%, transparent);\n }\n }\n\n .adw-progress-bar-progress {\n // %scale_highlight (_scale.scss:12-17) + $_progress-radius (:33-35)\n height: 100%;\n border-radius: 99px;\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n transition:\n width 200ms ease-out,\n background 200ms ease-out;\n }\n\n // `> text { @extend .dimmed; @extend .numeric; font-size: smaller; }` (:17-21)\n // — literally upstream's three lines, now that `.dimmed` and `.numeric` exist\n // here as the same utility classes they are there.\n .adw-progress-bar-text {\n @extend .dimmed;\n @extend .numeric;\n\n font-size: smaller;\n }\n\n // `&:disabled { filter: Opacity(var(--disabled-opacity)) }` (:23-25).\n &[disabled] {\n opacity: var(--disabled-opacity);\n }\n\n // Fill from the far end. GTK spells this `:inverted`; flexbox handles the\n // writing direction, so nothing here needs an RTL branch.\n &[inverted] .adw-progress-bar-trough {\n justify-content: flex-end;\n }\n\n // `> trough.empty > progress { all: unset }` (:85) — at fraction 0 the\n // indicator DISAPPEARS instead of drawing a rounded 0px stub.\n .adw-progress-bar-trough.empty .adw-progress-bar-progress {\n all: unset;\n }\n\n // The `.osd` variant (:59-83): a hairline bar with no trough at all, the way\n // it is drawn under a header bar. `[osd]` is the attribute this element takes;\n // `.osd` is libadwaita's DOCUMENTED spelling for the same variant, and\n // `_style_classes.scss` excludes `gtk-progress-bar` from the generic OSD\n // surface exactly so the class lands here instead of turning the bar into a\n // dark translucent box.\n &[osd],\n &.osd {\n min-width: 2px;\n\n .adw-progress-bar-trough {\n height: 2px;\n border-radius: 0;\n background-color: transparent;\n box-shadow: none;\n }\n\n .adw-progress-bar-progress {\n border-radius: 0;\n }\n }\n\n // Indeterminate. The block leaves the flex flow and bounces across the trough;\n // this is the ONLY part of the widget taken from the vendored web port, since\n // GTK pulses from C and its stylesheet has no equivalent to copy.\n &[pulsing] .adw-progress-bar-progress {\n position: absolute;\n inset-block: 0;\n width: 30%;\n animation: adw-progress-bar-indeterminate 1.5s infinite ease-in-out;\n\n // `_progressbar.scss:42-49` — with motion suppressed the block stops moving\n // and fills the trough, so the bar still reads as \"busy\" and not as \"0%\".\n @media (prefers-reduced-motion: reduce) {\n left: 0;\n width: 100%;\n animation: none;\n }\n }\n}\n\n// refs/adwaita-web/adwaita-web/scss/_progressbar.scss:53-66, verbatim offsets.\n// `left` rather than `inset-inline-start`: the port animates a physical offset,\n// and a keyframe that flipped with the writing direction would no longer be the\n// animation being cited.\n@keyframes adw-progress-bar-indeterminate {\n 0% {\n left: -35%;\n width: 30%;\n }\n\n 50% {\n left: 50%;\n width: 40%;\n }\n\n 100% {\n left: 105%;\n width: 30%;\n }\n}\n","// _preferences.scss — adw-preferences-group styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_preferences.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_preferences.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n@use 'style_classes';\n\nadw-preferences-group {\n display: block;\n\n // An author `display` beats the UA `[hidden] { display: none }` regardless of\n // specificity, so without this a group hidden through the DOM `hidden`\n // property would keep rendering — the search treats it as invisible\n // (`is_visible_group`), and the two must agree.\n &[hidden] {\n display: none;\n }\n\n // The header is a flex row: a title/description label column on the left\n // (stretches to fill) and the optional header-suffix on the trailing edge.\n .adw-preferences-group-header {\n display: flex;\n align-items: center;\n gap: var(--spacing-s);\n padding: var(--spacing-xs) 2px;\n\n // An author `display` beats the UA `[hidden] { display: none }` no matter\n // the specificity, so `headerEl.hidden = true` did NOTHING here: an empty\n // group kept its header box and its padding.\n &[hidden] {\n display: none;\n }\n\n // libadwaita's own metrics, keyed off `is_single_line`:\n // `> box.header:not(.single-line) { margin-bottom: 6px }` and\n // `> box.single-line { min-height: 34px }`\n // (refs/libadwaita/src/stylesheet/widgets/_preferences.scss:6-13). A\n // title-only or suffix-only header is one line tall and needs the height\n // floor instead of the gap below it.\n &:not(.single-line) {\n margin-bottom: 6px;\n }\n\n &.single-line {\n min-height: 34px;\n }\n }\n\n .adw-preferences-group-labels {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n min-width: 0;\n }\n\n .adw-preferences-group-suffix {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n }\n\n .adw-preferences-group-title {\n font-size: var(--font-size-base);\n font-weight: 700;\n margin: 0;\n color: var(--window-fg-color);\n }\n\n // Dimmed description line below the title.\n .adw-preferences-group-description {\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n margin: 0;\n color: var(--window-fg-color);\n }\n\n // A preferences group's list IS a boxed list — same card surface, same clip\n // for the rounding of the first and last row. It used to carry its own copy of\n // the five card declarations.\n .adw-preferences-group-listbox {\n @extend %card;\n\n overflow: hidden;\n }\n}\n","// _card.scss — adw-card styling.\n//\n// The card SURFACE (colours, radius, elevation) is `%card` in\n// `_style_classes.scss`, shared with the documented `.card` class and with\n// `.boxed-list`; this element adds only what makes it an element: a block box\n// and the padding a bare `.card` deliberately does not have.\n//\n// Reference: refs/adwaita-web/adwaita-web/scss/_card.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_misc.scss:197-236\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n@use 'style_classes';\n\nadw-card,\n.adw-card {\n @extend %card;\n\n display: block;\n padding: var(--spacing-l);\n overflow: hidden;\n}\n","// _data_grid.scss — adw-data-grid: a slim, aligned numeric grid for genuinely\n// tabular data (an accounting BWA / P&L statement, invoice line-items). The web\n// mirror of the native Gtk.Grid the Buchhaltung app fills for its financial\n// statements — labels left, amounts right-aligned with tabular figures so\n// columns of numbers line up, plus the section / subtotal / total emphasis a\n// statement needs. NOT a Gtk.ColumnView (no sorting, no zebra striping); boxed\n// lists stay the default for record lists. Uses CSS subgrid so each row is a\n// real element (hover, hairline rules, activation) while columns stay aligned.\n// Reference: refs/libadwaita/src/stylesheet/_colors.scss (separator / card / dim tokens)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss (boxed-list density)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_labels.scss:13-15,81-88 (.dimmed / .monospace / .numeric)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Implemented for @gjsify/adwaita-web Web Components.\n\n// `.dimmed` / `.monospace` / `.numeric`. This file used to declare\n// `font-variant-numeric: tabular-nums` twice, inline a whole monospace font\n// stack, and dim its header row with a raw `opacity: var(--dim-opacity)` — i.e.\n// three private copies of utilities libadwaita publishes. It composes them now,\n// the way upstream's own `_progress-bar.scss:17-21` composes the same two.\n@use 'labels';\n\n.adw-data-grid {\n display: block;\n box-sizing: border-box;\n color: var(--card-fg-color);\n font-size: var(--font-size-base);\n\n // Optional title above the grid.\n .adw-data-grid-caption {\n font-size: var(--font-size-heading);\n font-weight: 700;\n color: var(--window-fg-color);\n margin: 0 0 var(--spacing-s);\n padding: 0 var(--spacing-xs);\n }\n\n // Horizontal scroll is CONTAINED here — a wide statement (many month columns)\n // scrolls sideways within the grid instead of overflowing the page.\n .adw-data-grid-scroll {\n overflow-x: auto;\n overflow-y: hidden;\n }\n\n // The grid owns the column tracks; each row is a subgrid spanning them, so\n // figures in the same column line up across every row. `min-width: max-content`\n // keeps columns from crushing — they overflow into the scroller instead.\n .adw-data-grid-table {\n display: grid;\n box-sizing: border-box;\n width: 100%;\n min-width: max-content;\n // grid-template-columns is set inline from the column descriptors.\n }\n\n .adw-data-grid-row {\n display: grid;\n grid-template-columns: subgrid;\n grid-column: 1 / -1;\n align-items: center;\n }\n\n // Airy Adwaita cell density (matching the boxed-list row rhythm), single-line.\n .adw-data-grid-cell {\n box-sizing: border-box;\n min-width: 0;\n padding: var(--spacing-s) var(--spacing-m);\n white-space: nowrap;\n text-align: left;\n\n &.align-end {\n text-align: right;\n }\n\n &.align-center {\n text-align: center;\n }\n\n // Tabular figures are the WHOLE POINT vs a boxed list — numbers line up.\n // `numeric` needs no rule at all: the cell carries the bare class, so\n // libadwaita's own `.numeric` (_labels.scss:86-88) already applies.\n // A mono cell is monospace AND tabular, so it composes both.\n &.mono {\n @extend .monospace;\n @extend .numeric;\n }\n }\n\n // Header row — dim, small, uppercase caps with a hairline underline (Adwaita\n // list-column headings), never sortable.\n .adw-data-grid-row.header {\n .adw-data-grid-cell {\n @extend .dimmed;\n\n font-size: var(--font-size-small);\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n border-bottom: 1px solid var(--separator-color);\n }\n }\n\n // A section header spans all columns as a bold group title (a BWA's sections).\n .adw-data-grid-row.variant-section {\n .section-cell {\n font-weight: 700;\n color: var(--window-fg-color);\n padding-top: var(--spacing-m);\n }\n }\n\n // A subtotal is bold with a hairline rule above it (Gesamtleistung, Rohertrag…).\n .adw-data-grid-row.variant-subtotal {\n border-top: 1px solid var(--separator-color);\n\n .adw-data-grid-cell {\n font-weight: 700;\n }\n }\n\n // The final total is bold with a STRONGER rule above (the accounting result —\n // Betriebsergebnis), plus a thin rule below to evoke the ruled grand-total line.\n .adw-data-grid-row.variant-total {\n border-top: 2px solid var(--separator-color);\n border-bottom: 1px solid var(--separator-color);\n\n .adw-data-grid-cell {\n font-weight: 800;\n color: var(--window-fg-color);\n }\n }\n\n // Optional interactive rows (master-detail). Hairline separators only where\n // Adwaita would — NOT zebra striping — so no default row borders; the hover /\n // focus affordance carries the interaction.\n .adw-data-grid-row.interactive {\n cursor: pointer;\n border-radius: var(--button-radius);\n\n &:hover {\n background-color: var(--button-bg-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: -2px;\n }\n }\n}\n","// _clamp.scss — adw-clamp styling.\n//\n// The element itself is deliberately UNCAPPED and full-width: it is the box the\n// tightening curve is evaluated against, so it has to keep reporting the\n// AVAILABLE width. The cap and the centring live on the children, written by the\n// element from `clampAllocate` (see src/elements/adw-clamp.ts) — an element that\n// capped itself would feed its own capped width back into its ResizeObserver.\n//\n// Reference: refs/libadwaita/src/adw-clamp-layout.c (adw_clamp_layout_allocate)\n// Reference: refs/adwaita-web/adwaita-web/scss/_clamp.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-clamp {\n display: block;\n width: 100%;\n}\n","// _spinner.scss — adw-spinner styling.\n//\n// Almost nothing is left here on purpose. The ring is an SVG the element draws\n// per frame from `@gjsify/adwaita-core`'s `spinnerArc`, because the arc BREATHES\n// (2.7 to 102.8 degrees) and CSS cannot express that: the `border-top-color`\n// chase this file used to carry was a fixed 90-degree quarter-circle at 0.8s\n// against libadwaita's 1.2s, with a hardcoded grey track and square-cut ends.\n//\n// What CSS still owns is the box: the element is `size × size` and the ring is\n// centred inside it, which is how a 200px spinner shows a 64px ring\n// (adw-spinner.c:95-99 hands the widget's real size to the paintable, which caps\n// only the radius).\n//\n// There is deliberately NO `prefers-reduced-motion` rule. The C opts out of the\n// animation setting explicitly (`adw_animation_set_follow_enable_animations_setting\n// (…, FALSE)`, adw-spinner-paintable.c:537) — a frozen busy indicator reads as a\n// hang. This file used to stop the animation there.\n//\n// Reference: refs/libadwaita/src/adw-spinner.c\n// Reference: refs/libadwaita/src/adw-spinner-paintable.c\n// Reference: refs/adwaita-web/adwaita-web/scss/_spinner.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-spinner {\n // The element writes the measured box onto `style` when it upgrades; these are\n // the values in force until then, which are Adwaita's own minimum\n // (adw-spinner.c:14, reported as both minimum and natural at :78-81).\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: 16px;\n height: 16px;\n // The arc strokes `currentColor` — `gtk_widget_get_color` (:432), the widget's\n // TEXT colour, never the accent. The track is the same colour at 15%, which\n // the SVG applies as `stroke-opacity`.\n color: inherit;\n\n svg {\n display: block;\n // The ring never grows past its own diameter, so an over-large box centres\n // it rather than stretching it.\n flex: none;\n }\n}\n","// _shortcut_label.scss — <adw-shortcut-label> and its keycaps.\n//\n// TWO SOURCES, AND WHY ONLY ONE IS FOLLOWED. libadwaita styles the widget in\n// `_shortcuts-dialog.scss:33-58`: a 6px `border-spacing` at both levels (between\n// the boxes AND between the keycaps inside one), keycaps filled with 10% of the\n// current colour, an inset bottom shadow that reads as a key's edge, a 6px\n// radius, 6px padding and a 20px minimum width — plus `> .dimmed { padding: 6px\n// 0 }` so a separator lines up with the caps beside it.\n//\n// `refs/adwaita-web/adwaita-web/scss/_shortcut_label.scss` styles ONE outlined\n// tag for the whole shortcut: monospace, a border, small text, and an empty\n// `kbd, .keycap {}` block with a comment saying the real thing has per-keycap\n// styling. It is a placeholder for this widget, not a port of it, so nothing is\n// taken from it — the geometry above is libadwaita's.\n//\n// The keycap fill is `currentColor`-relative, so a shortcut label inside a\n// dimmed or coloured context stays legible without a second token.\n//\n// Reference: refs/libadwaita/src/stylesheet/widgets/_shortcuts-dialog.scss:33-58\n// Reference: refs/adwaita-web/adwaita-web/scss/_shortcut_label.scss (NOT followed — see above)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components; GTK's\n// `border-spacing` on a box becomes flex `gap`.\n\nadw-shortcut-label {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n border-radius: 6px;\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n // One combination — the keycaps of a single accelerator. Its own 6px gap is\n // the second `border-spacing` in `&, > box { border-spacing: 6px }` (:37-39).\n .adw-shortcut-label-keys {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n }\n\n .keycap {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n min-width: 20px;\n padding: 6px;\n border-radius: 6px;\n background: color-mix(in srgb, currentColor 10%, transparent);\n box-shadow: inset 0 -2px var(--card-shade-color);\n\n @media (prefers-contrast: more) {\n box-shadow:\n inset 0 -2px var(--card-shade-color),\n 0 0 0 1px var(--border-color);\n }\n }\n\n // The `L` / `R` of a sided modifier key — `%s <small><b>%s</b></small>` in the\n // C (adw-shortcut-label.c:195), i.e. smaller and bold, riding along inside the\n // same keycap rather than being a cap of its own.\n .adw-shortcut-label-side {\n margin-inline-start: 2px;\n font-size: 82%;\n font-weight: 700;\n // `<sub>` lowers the baseline by default; the marker is part of the key's\n // label, not a subscript of a formula.\n vertical-align: baseline;\n bottom: 0;\n }\n\n // `> .dimmed { padding: 6px 0 }` (:55-57) — the separators and the\n // disabled-text placeholder, aligned with the keycaps' text.\n > .dimmed {\n padding: 6px 0;\n }\n}\n","// _avatar.scss — adw-avatar styling (round, initials or fallback icon).\n// Reference: refs/adwaita-web/adwaita-web/scss/_avatar.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_avatar.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n border-radius: 50%;\n overflow: hidden;\n box-sizing: border-box;\n font-weight: 700;\n user-select: none;\n background-color: rgba(127, 127, 127, 0.25);\n color: var(--window-fg-color);\n\n .adw-avatar-text {\n line-height: 1;\n text-align: center;\n }\n\n .adw-avatar-icon {\n background-color: currentColor;\n opacity: 0.7;\n -webkit-mask-size: contain;\n mask-size: contain;\n }\n\n // `custom-image`. The avatar's own `border-radius: 50%` + `overflow: hidden`\n // already clip it, so the image only has to FILL the box — `cover`, not\n // `contain`, because GTK scales the paintable to the widget and crops inside a\n // rounded clip, where `contain` would letterbox a non-square photo inside the\n // circle.\n .adw-avatar-custom-image {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n}\n","// _banner.scss — adw-banner styling (full-width accent message strip).\n// Reference: refs/adwaita-web/adwaita-web/scss/_banner.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_toolbars.scss (AdwBanner)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-banner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--spacing-m);\n padding: var(--spacing-xs) var(--spacing-m);\n width: 100%;\n box-sizing: border-box;\n // Adw.Banner uses a neutral elevated surface, not the accent colour.\n background-color: var(--sidebar-bg-color);\n color: var(--window-fg-color);\n\n // Adw.Banner stays hidden until revealed.\n &:not(.revealed) {\n display: none;\n }\n\n // The title is a `.heading` label and the button a plain GTK text button\n // (adw-banner.ui:25, :29), so the title is bold and the button 34px tall with the 17px\n // `.text-button` sides. Both were lighter here, and the banner stood 8px shorter than\n // GTK's render of the gallery's banner `.blp`.\n .adw-banner-title {\n flex: 1 1 auto;\n min-width: 0;\n font-size: var(--font-size-base);\n font-weight: 700;\n }\n\n .adw-banner-button {\n flex-shrink: 0;\n box-sizing: border-box;\n min-height: 34px;\n border: none;\n border-radius: var(--button-radius);\n padding: 5px 17px;\n background: var(--button-bg-color);\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n font-weight: 700;\n cursor: pointer;\n\n &:hover {\n background: var(--button-hover-color);\n }\n\n // `button-style` (Since 1.7). ADW_BANNER_BUTTON_SUGGESTED adds\n // `.suggested-action` to the banner button (adw-banner.c:769), which is the\n // shared accent appearance — the same declaration `.adw-button.suggested-action`\n // carries, restated here because the banner button is not an `.adw-button`.\n &.suggested-action {\n background: var(--accent-bg-color);\n color: var(--accent-fg-color);\n\n &:hover {\n background: var(--accent-color);\n }\n }\n }\n}\n","// _status_page.scss — adw-status-page styling (centered empty state).\n// Reference: refs/adwaita-web/adwaita-web/scss/_status_page.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_misc.scss (AdwStatusPage)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// THE METRICS ARE UPSTREAM'S, measured against a GTK render of the gallery's status page\n// `.blp`. They were the vendored web port's — a 96px icon, an 18pt title, the description\n// capped at 32ch and 12px gaps all round — and beside GTK the page was a different\n// composition: the description wrapped at 290px where GTK sets it on one line, and the child\n// sat 61px higher. `_misc.scss` (statuspage) has a 36px 12px margin, 12px between icon,\n// title and description, 24px more under the icon, `.title-1` for the title and 36px\n// between that column and the child; `adw-status-page.ui` clamps the column at AdwClamp's\n// default 600px.\nadw-status-page {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n gap: 12px;\n padding: 36px 12px;\n color: var(--window-fg-color);\n\n .adw-status-page-icon {\n width: 128px;\n height: 128px;\n margin-bottom: 24px;\n background-color: currentColor;\n opacity: 0.45;\n -webkit-mask-size: contain;\n mask-size: contain;\n }\n\n // `.title-1` (`_labels.scss`), restated: each partial compiles on its own, so an\n // `@extend` across them finds no target.\n .adw-status-page-title {\n font-weight: 800;\n font-size: 181%;\n max-width: 600px;\n }\n\n .adw-status-page-description {\n font-size: var(--font-size-base);\n opacity: var(--dim-opacity);\n max-width: 600px;\n }\n\n // 36px from the column, of which the flex gap already gives 12.\n .adw-status-page-child {\n margin-top: 24px;\n }\n\n // `.compact` — the documented smaller status page, for a sidebar or a popover\n // (style-classes.md \"Compact Status Page\"): margins 24px 12px, the icon 96px with 12px\n // under it, `.title-2`, and 24px to the child (`_misc.scss`, statuspage.compact).\n &.compact {\n padding: 24px 12px;\n\n .adw-status-page-icon {\n width: 96px;\n height: 96px;\n margin-bottom: 12px;\n }\n\n .adw-status-page-title {\n font-size: 136%;\n }\n\n .adw-status-page-child {\n margin-top: 12px;\n }\n }\n}\n","// _row.scss — Shared base styling for rows in preferences groups.\n// Reference: refs/adwaita-web/adwaita-web/scss/_row_types.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss (AdwActionRow)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-switch-row,\nadw-combo-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 50px;\n padding: var(--spacing-s) var(--spacing-m);\n gap: var(--spacing-m);\n border-bottom: 1px solid var(--card-shade-color);\n\n &:last-child {\n border-bottom: none;\n }\n}\n\n// Shared title/subtitle text column used by every row type (action/switch/\n// combo/spin). The title is the primary label; the subtitle is dimmed and\n// hidden when empty.\n.adw-row-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.adw-row-subtitle {\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n color: var(--card-fg-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n// Trailing edit pencil shared by editable rows (entry/password) — the\n// Adw.EntryRow edit affordance. Dimmed; clicking focuses the entry.\n.adw-row-edit {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n color: var(--card-fg-color);\n opacity: 0.55;\n cursor: pointer;\n}\n\n// Utility separator (used by content layouts)\n.adw-separator-vertical {\n width: 1px;\n align-self: stretch;\n background-color: var(--card-shade-color);\n flex-shrink: 0;\n}\n","// _action_row.scss — adw-action-row styling (title/subtitle + prefix/suffix).\n// Reference: refs/adwaita-web/adwaita-web/scss/_action_row.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-action-row {\n display: flex;\n align-items: center;\n gap: var(--spacing-m);\n min-height: 50px;\n padding: var(--spacing-s) var(--spacing-m);\n border-bottom: 1px solid var(--card-shade-color);\n color: var(--card-fg-color);\n\n &:last-child {\n border-bottom: none;\n }\n\n &.activatable {\n cursor: pointer;\n\n &:hover {\n background-color: var(--button-bg-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n }\n\n .adw-action-row-prefix,\n .adw-action-row-suffix {\n display: flex;\n align-items: center;\n gap: var(--spacing-xs);\n flex-shrink: 0;\n }\n\n .adw-action-row-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n flex: 1 1 auto;\n min-width: 0;\n }\n\n .adw-row-title {\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .adw-row-subtitle {\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n color: var(--card-fg-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n}\n\n// `.property` SWAPS the emphasis of a row: the title becomes the small dimmed\n// label and the subtitle carries the value at full weight — a read-only property\n// rather than an action (style-classes.md \"Property Rows\", `_lists.scss:426-455`).\n//\n// It is written against the shared `.adw-row-title` / `.adw-row-subtitle` nodes,\n// so it works on every row type that renders them (action, expander header,\n// entry, switch), which is the same reach upstream gives it.\nadw-action-row.property,\nadw-expander-row.property {\n .adw-row-title {\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n }\n\n .adw-row-subtitle {\n font-size: var(--font-size-base);\n opacity: 1;\n }\n\n // `.monospace` on a property row monospaces the VALUE only — the label and any\n // suffix widget stay in the UI font (`_lists.scss:445-455`). Put `.monospace`\n // on the list instead to get all of it.\n &.monospace {\n font-family: inherit;\n font-size: inherit;\n\n .adw-row-subtitle {\n font-family: var(--monospace-font-family);\n font-size: var(--monospace-font-size);\n }\n }\n}\n","// _entry_row.scss — adw-entry-row styling (inline editable boxed-list row).\n// Reference: refs/adwaita-web/adwaita-web/scss/_entry_row.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_entries.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-entry-row {\n display: flex;\n align-items: center;\n gap: var(--spacing-m);\n min-height: 50px;\n padding: var(--spacing-xs) var(--spacing-m);\n border-bottom: 1px solid var(--card-shade-color);\n\n &:last-child {\n border-bottom: none;\n }\n\n // Focus ring matching libadwaita's row focus (inset accent outline).\n &:focus-within {\n box-shadow: inset 0 0 0 2px var(--accent-color);\n }\n\n // Filled Adw.EntryRow layout: a small floating title above the value,\n // both left-aligned in a column.\n .adw-entry-row-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n flex: 1 1 auto;\n min-width: 0;\n gap: 1px;\n }\n\n .adw-row-title {\n font-size: var(--font-size-small);\n color: var(--card-fg-color);\n opacity: var(--dim-opacity);\n }\n\n .adw-entry-row-input {\n width: 100%;\n min-width: 0;\n border: none;\n background: transparent;\n color: var(--card-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n text-align: left;\n outline: none;\n padding: 0;\n }\n}\n","// _switch_row.scss — adw-switch-row styling.\n//\n// The TOGGLE is not here: it is `<gtk-switch>` and `scss/_switch.scss`. It used\n// to be, nested under `adw-switch-row {`, which is exactly why `.adw-switch` was\n// unreachable from anywhere else and `_expander_row.scss` grew a\n// character-for-character copy of it.\n//\n// Reference: refs/adwaita-web/adwaita-web/scss/_switch_row.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-switch-row {\n .adw-row-title {\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n }\n}\n","// _combo_row.scss — adw-combo-row styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_combo_row.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss (AdwComboRow)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-combo-row {\n position: relative;\n cursor: pointer;\n\n .adw-row-title {\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n pointer-events: none;\n }\n\n // Hidden <select> overlay — stretches across the row to capture clicks\n // anywhere. The visual dropdown arrow is rendered by .adw-row-value::after\n // below, so the select itself doesn't need a background image.\n select {\n appearance: none;\n -webkit-appearance: none;\n background-color: transparent;\n border: none;\n padding: 6px 24px 6px 8px;\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n cursor: pointer;\n text-align: right;\n position: absolute;\n inset: 0;\n opacity: 0;\n width: 100%;\n height: 100%;\n z-index: 1;\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: -1px;\n }\n\n option {\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n }\n }\n\n .adw-row-value {\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n opacity: var(--dim-opacity);\n display: flex;\n align-items: center;\n gap: 4px;\n\n // Dropdown arrow — rendered via CSS mask so `currentColor` drives the\n // fill, making the icon theme-aware (matches libadwaita's dark theme).\n // Using background-image with a data-URI SVG would NOT resolve\n // `currentColor` in most browsers.\n //\n // `model_changed` (adw-combo-row.c:187-195) hides the arrow box entirely on\n // a model of one item or none, so the row stops presenting itself as a\n // chooser. `[data-presents-chooser='false']` below is that rule; the element\n // publishes the attribute and disables the overlaid <select> alongside.\n &::after {\n content: \"\";\n display: inline-block;\n width: 12px;\n height: 12px;\n background-color: currentColor;\n -webkit-mask-image: var(--icon-go-down);\n mask-image: var(--icon-go-down);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: contain;\n mask-size: contain;\n -webkit-mask-position: center;\n mask-position: center;\n }\n }\n}\n\n// A model with one item or none: no arrow, and the row is not activatable\n// (`model_changed`, adw-combo-row.c:187-195). Written as its own block rather\n// than a modifier inside `.adw-row-value` so the two selectors that draw the\n// arrow and the one that removes it read at the same specificity depth.\nadw-combo-row[data-presents-chooser='false'] {\n .adw-row-value::after {\n display: none;\n }\n\n select {\n cursor: default;\n }\n}\n","// _spin_row.scss — adw-spin-row styling.\n// Reference: refs/adwaita-web/adwaita-web/scss/_spin_button.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_spin-button.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-spin-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n min-height: 50px;\n padding: var(--spacing-s) var(--spacing-m);\n gap: var(--spacing-m);\n border-bottom: 1px solid var(--card-shade-color);\n\n &:last-child {\n border-bottom: none;\n }\n\n .adw-row-title {\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n }\n}\n\n.adw-spin-control {\n display: flex;\n align-items: center;\n gap: 2px;\n\n button {\n width: 32px;\n height: 32px;\n border: none;\n border-radius: var(--button-radius);\n background: transparent;\n color: var(--card-fg-color);\n cursor: pointer;\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n\n &:hover {\n background: rgba(128, 128, 128, 0.15);\n }\n }\n\n input {\n width: 56px;\n text-align: center;\n border: none;\n border-radius: var(--button-radius);\n background: rgba(128, 128, 128, 0.1);\n color: var(--card-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n padding: 4px 2px;\n\n &:focus {\n outline: 2px solid var(--accent-color);\n outline-offset: -1px;\n }\n }\n}\n","// _button_row.scss — adw-button-row styling (a boxed-list row that acts as a\n// button: centered title + optional start icon, with suggested/destructive\n// recoloring).\n// Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss (row.button)\n// Reference: refs/adwaita-web/adwaita-web/scss/_button_row.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-button-row {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n // libadwaita: `row.button > box { min-height: 40px; margin: 0 12px }` (_lists.scss:458-462),\n // and the row around it measures 44 in a GTK render of the gallery's button-row `.blp`.\n // It was a plain row's 50 here, so the button row stood 6px taller than GTK's.\n min-height: 44px;\n padding: 0 var(--spacing-m);\n border-bottom: 1px solid var(--card-shade-color);\n color: var(--card-fg-color);\n cursor: pointer;\n transition: background-color 0.1s ease;\n\n &:last-child {\n border-bottom: none;\n }\n\n // Contents are centered as a group (libadwaita's GtkBox halign:center), with\n // the start icon hugging the title via a small gap (border-spacing 6px).\n .adw-button-row-contents {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-xs);\n min-width: 0;\n }\n\n .adw-button-row-title {\n font-size: var(--font-size-base);\n font-weight: 700;\n text-align: center;\n color: inherit;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // Default (no style class): button-like hover/active feedback.\n &.activatable {\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n }\n\n // Suggested action — accent-coloured, full-bleed (no separator line).\n &.suggested-action {\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n border-bottom: none;\n\n &.activatable {\n &:hover {\n background-color: var(--accent-bg-color);\n background-image: linear-gradient(\n color-mix(in srgb, currentColor 10%, transparent),\n color-mix(in srgb, currentColor 10%, transparent)\n );\n }\n\n &:active {\n background-color: var(--accent-bg-color);\n background-image: linear-gradient(rgba(0, 0, 6, 0.2), rgba(0, 0, 6, 0.2));\n }\n }\n }\n\n // Destructive action — red, same full-bleed treatment as suggested.\n &.destructive-action {\n background-color: var(--destructive-bg-color);\n color: var(--destructive-fg-color);\n border-bottom: none;\n\n &.activatable {\n &:hover {\n background-color: var(--destructive-bg-color);\n background-image: linear-gradient(\n color-mix(in srgb, currentColor 10%, transparent),\n color-mix(in srgb, currentColor 10%, transparent)\n );\n }\n\n &:active {\n background-color: var(--destructive-bg-color);\n background-image: linear-gradient(rgba(0, 0, 6, 0.2), rgba(0, 0, 6, 0.2));\n }\n }\n }\n}\n","// _expander_row.scss — adw-expander-row styling (disclosure header + nested rows).\n// Reference: refs/adwaita-web/adwaita-web/scss/_expander_row.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_lists.scss (AdwExpanderRow)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-expander-row {\n display: block;\n border-bottom: 1px solid var(--card-shade-color);\n color: var(--card-fg-color);\n\n &:last-child {\n border-bottom: none;\n }\n\n // Header — styled like an activatable action row.\n .adw-expander-row-header {\n display: flex;\n align-items: center;\n gap: var(--spacing-m);\n min-height: 50px;\n padding: var(--spacing-s) var(--spacing-m);\n cursor: pointer;\n\n &:hover {\n background-color: var(--button-bg-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n }\n\n .adw-row-title {\n font-size: var(--font-size-base);\n color: var(--card-fg-color);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // The text column takes the free space so prefix/suffix widgets, the enable\n // switch and the chevron sit at their respective edges.\n .adw-expander-row-header > .adw-row-text {\n flex: 1;\n min-width: 0;\n }\n\n // Header prefix / suffix widget slots (Adw.ExpanderRow add_prefix/add_suffix).\n .adw-expander-row-prefix,\n .adw-expander-row-suffix {\n display: flex;\n align-items: center;\n gap: var(--spacing-s);\n flex-shrink: 0;\n }\n\n // Disclosure chevron — points down when collapsed, flips up when expanded,\n // matching libadwaita's Adw.ExpanderRow arrow.\n .adw-expander-row-chevron {\n opacity: var(--dim-opacity);\n transform: rotate(0deg);\n transition: transform 0.2s ease-out;\n flex-shrink: 0;\n }\n\n &.expanded .adw-expander-row-chevron {\n transform: rotate(180deg);\n }\n\n // The optional enable switch is `<gtk-switch>` and needs no geometry of its\n // own — `.adw-expander-row-enable-switch` is a query/override hook only. This\n // block used to be a character-for-character copy of the switch row's toggle\n // (44×24 box, hidden input, 20px knob, translateX(20px), focus ring), because\n // `.adw-switch` was nested inside `adw-switch-row {` and unreachable from here.\n\n // Disclosed content — a nested listbox of rows, hidden until expanded. The\n // nested surface is slightly inset/recessed, the way libadwaita draws it.\n .adw-expander-row-content {\n display: none;\n flex-direction: column;\n background-color: var(--window-bg-color);\n border-top: 1px solid var(--card-shade-color);\n\n &.expanded {\n display: flex;\n }\n\n // Nested rows: indent the text column and keep the hairline separators,\n // dropping the last one (the content area's own edge closes it off).\n > adw-action-row,\n > adw-entry-row,\n > adw-switch-row,\n > adw-combo-row,\n > adw-spin-row {\n padding-left: var(--spacing-xl);\n border-bottom: 1px solid var(--card-shade-color);\n\n &:last-child {\n border-bottom: none;\n }\n }\n }\n}\n","// _password_entry_row.scss — adw-password-entry-row styling (masked entry row\n// with a trailing peek toggle). Mirrors _entry_row.scss (the password row is a\n// specialization of the entry row) and adds the flat peek button.\n// Reference: refs/adwaita-web/adwaita-web/scss/_entry_row.scss (no password variant upstream)\n// Reference: refs/libadwaita/src/adw-password-entry-row.c\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-password-entry-row {\n display: flex;\n align-items: center;\n gap: var(--spacing-m);\n min-height: 50px;\n padding: var(--spacing-xs) var(--spacing-m);\n border-bottom: 1px solid var(--card-shade-color);\n\n &:last-child {\n border-bottom: none;\n }\n\n // Focus ring matching libadwaita's row focus (inset accent outline).\n &:focus-within {\n box-shadow: inset 0 0 0 2px var(--accent-color);\n }\n\n // Filled Adw.EntryRow layout: a small floating title above the value,\n // both left-aligned in a column.\n .adw-password-entry-row-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n flex: 1 1 auto;\n min-width: 0;\n gap: 1px;\n }\n\n .adw-row-title {\n font-size: var(--font-size-small);\n color: var(--card-fg-color);\n opacity: var(--dim-opacity);\n }\n\n .adw-password-entry-row-input {\n width: 100%;\n min-width: 0;\n border: none;\n background: transparent;\n color: var(--card-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n text-align: left;\n outline: none;\n padding: 0;\n\n // Slightly wider tracking for the masked dots, like the native entry.\n &[type='password'] {\n letter-spacing: 0.125em;\n }\n }\n\n // Trailing peek toggle — flat circular icon button, vertically centred.\n .adw-password-entry-row-toggle {\n flex-shrink: 0;\n align-self: center;\n }\n}\n","// _toast.scss — adw-toast and adw-toast-overlay styling.\n// adw-toast-overlay wraps content and layers transient `.adw-toast` banners over\n// the bottom of its own bounds (the Adw.ToastOverlay model). Each banner carries\n// a title, an optional action button and a CSS-drawn \"×\" close button, and slides\n// up on show / down on dismiss (mirroring Adw.Toast).\n// Reference: refs/adwaita-web/adwaita-web/scss/_toast.scss\n// Reference: refs/adwaita-web/adwaita-web/scss/_toast_overlay.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_misc.scss (Toasts)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-toast-overlay {\n position: relative;\n display: block;\n\n // The wrapped content (Adw.ToastOverlay :child) occupies the overlay's box.\n .adw-toast-overlay-content {\n width: 100%;\n height: 100%;\n }\n\n // The toast slot: layered over the bottom edge of the overlay and centered,\n // the way AdwToastOverlay floats a toast above its child. Like\n // Adw.ToastOverlay only ONE toast is mounted at a time (the queue lives in\n // `@gjsify/adwaita-core`); the flex column keeps it centered and lets an\n // outgoing `.hiding` strip finish its exit transition in place.\n .adw-toast-overlay-toasts {\n position: absolute;\n bottom: var(--spacing-m);\n left: 50%;\n transform: translateX(-50%);\n z-index: 9999;\n display: flex;\n flex-direction: column-reverse;\n gap: var(--spacing-s);\n align-items: center;\n pointer-events: none;\n }\n}\n\n.adw-toast {\n background-color: #3d3846;\n color: #ffffff;\n padding: var(--spacing-s) var(--spacing-m);\n border-radius: var(--card-radius);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3), 0 1px 2px rgba(0, 0, 0, 0.25);\n display: flex;\n align-items: center;\n gap: var(--spacing-s);\n width: max-content;\n max-width: 400px;\n min-height: 36px;\n pointer-events: auto;\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n\n opacity: 0;\n transform: translateY(100%) scale(0.9);\n transition: opacity 0.2s cubic-bezier(0, 0, 0.2, 1),\n transform 0.2s cubic-bezier(0, 0, 0.2, 1);\n will-change: transform, opacity;\n\n &.visible {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n\n &.hiding {\n opacity: 0;\n transform: translateY(100%) scale(0.9);\n transition-duration: 0.15s;\n transition-timing-function: cubic-bezier(0.4, 0, 1, 1);\n }\n\n .adw-toast-content-wrapper {\n flex: 1 1 auto;\n min-width: 0;\n }\n\n .adw-toast-title {\n font-weight: normal;\n line-height: 1.3;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // Action button — a flat pill tinted with the accent color so it reads as\n // suggested against the dark toast surface (Adw.Toast:button-label).\n .adw-toast-action-button {\n flex-shrink: 0;\n box-sizing: border-box;\n margin: 0;\n padding: 4px var(--spacing-m);\n border: none;\n border-radius: var(--button-radius);\n background-color: rgba(255, 255, 255, 0.12);\n color: #ffffff;\n font-family: inherit;\n font-size: var(--font-size-base);\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n transition: background-color 150ms ease-in-out;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.2);\n }\n\n &:active {\n background-color: rgba(255, 255, 255, 0.26);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n }\n\n // Close affordance — `window-close-symbolic` in a 24px circle, as upstream builds it\n // (adw-toast-widget.ui:64). The element supplies the <gtk-image>; this only places it.\n .adw-toast-close-button {\n box-sizing: border-box;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n margin: 0;\n padding: 0;\n border: none;\n border-radius: 9999px;\n background-color: transparent;\n color: #ffffff;\n cursor: pointer;\n opacity: 0.7;\n transition:\n background-color 150ms ease-in-out,\n opacity 150ms ease-in-out;\n\n &:hover {\n opacity: 1;\n background-color: rgba(255, 255, 255, 0.12);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n }\n}\n","// _toolbar_view.scss — adw-toolbar-view styling (content framed by top/bottom bars).\n// Reference: refs/adwaita-web/adwaita-web/scss/_toolbar_view.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/_toolbars.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-toolbar-view {\n display: flex;\n flex-direction: column;\n min-height: 0;\n min-width: 0;\n flex: 1 1 auto;\n // Positioning context for the extend-content-to-*-edge overlays below.\n position: relative;\n\n .adw-toolbar-view-top,\n .adw-toolbar-view-bottom {\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n }\n\n .adw-toolbar-view-content {\n flex: 1 1 auto;\n min-height: 0;\n min-width: 0;\n overflow: auto;\n display: flex;\n flex-direction: column;\n background-color: var(--window-bg-color);\n }\n\n // THE CONTENT WIDGET FILLS THE CONTENT RECT. `adw_toolbar_view_size_allocate`\n // (adw-toolbar-view.c:390-397) hands `self->content` the whole rect between the\n // bars, and a GTK widget that wants less of it says so through its own\n // alignment. This port collects the content into a flex COLUMN, where an item\n // declaring no `flex-grow` is content-sized instead, so the child stopped\n // wherever its content did and the pane below it stayed empty. Measured on the\n // docs Navigation Split View preview: a 293px sidebar pane holding a 176px\n // `adw-sidebar`, i.e. 117px of window-coloured dead strip under the last row,\n // and beside it a status page top-aligned in a pane it was supposed to centre in.\n // The web storybook had been papering over it in its own sheet\n // (`.sb-sidebar-scroll { flex: 1 1 auto }`), deleted now that the widget carries\n // it: a per-consumer copy is what a missing widget rule looks like from the\n // outside, and it keeps the widget green while the next consumer hits the same\n // wall.\n //\n // `:only-child` because Adw.ToolbarView HAS one content widget. Several stacked\n // children are this port's own extension, and GTK defines no distribution for\n // them, so inventing one here would be a claim rather than a copy.\n //\n // NO `min-height: 0` alongside it, deliberately: the automatic minimum size is\n // already the right answer per child. A scroller (`adw-sidebar`, any\n // `overflow: auto` box) gets an automatic minimum of 0 and shrinks to scroll\n // itself, as its GtkScrolledWindow would; a status page keeps its content-based\n // minimum, so a pane too short to hold it scrolls THIS box instead of crushing a\n // centred column into overflow its reader cannot scroll back up to.\n .adw-toolbar-view-content > :only-child {\n flex: 1 1 auto;\n }\n\n // …UNLESS IT ASKED FOR LESS. A content widget with a `valign` other than fill is\n // allocated its natural height and placed by that alignment (`_widget.scss`'s auto\n // margin), which a growing flex item cannot be: the grow claims the free space before\n // an auto margin sees any. Measured on the gallery's navigation view, whose `.blp`\n // centres a pill button in a toolbar view: GTK drew it 44px tall mid-pane, this port\n // stretched it over the whole 293px content rect.\n .adw-toolbar-view-content > :only-child:is([valign='start'], [valign='end'], [valign='center']) {\n flex-grow: 0;\n }\n\n // top-bar-style / bottom-bar-style: an opaque background plus a persistent\n // shadow, which `.border` swaps for a hairline (adw-toolbar-view.c:1011-1024,\n // _toolbars.scss `> .top-bar.raised`).\n .adw-toolbar-view-top.raised,\n .adw-toolbar-view-bottom.raised {\n background-color: var(--headerbar-bg-color);\n color: var(--headerbar-fg-color);\n }\n\n .adw-toolbar-view-top.raised {\n box-shadow:\n 0 1px var(--headerbar-shade-color),\n 0 2px 4px var(--headerbar-shade-color);\n\n &.border {\n box-shadow: 0 1px var(--headerbar-shade-color);\n }\n }\n\n .adw-toolbar-view-bottom.raised {\n box-shadow:\n 0 -1px var(--headerbar-shade-color),\n 0 -2px 4px var(--headerbar-shade-color);\n\n &.border {\n box-shadow: 0 -1px var(--headerbar-shade-color);\n }\n }\n\n // A bar in a toolbar view is INLINE — `%headerbar-inline` → `%headerbar-flat`:\n // no background of its own, no separator, the content's foreground\n // (_toolbars.scss :313-317, _header-bar.scss :110-147). That is what makes a\n // flat-style view read as ONE surface with the bar sitting in it rather than as\n // a bar bolted on top of a pane, and it is why the shading below is the ONLY\n // thing that ever draws a line between them.\n //\n // Not folded into `%headerbar` itself: a header bar used as a WINDOW titlebar\n // keeps its own background and shade, which is what `adw-header-bar` outside a\n // toolbar view still renders.\n .adw-toolbar-view-top,\n .adw-toolbar-view-bottom {\n &:not(.raised) adw-header-bar {\n background: none;\n color: inherit;\n box-shadow: none;\n }\n }\n\n // The scroll shading under a FLAT bar belongs to the SCROLLER, not to the view:\n // upstream's selector is `toolbarview.undershoot-top scrolledwindow`, and GTK\n // draws that node only while the scroller is off the edge. Drawn from the view\n // instead — which is what this did — the fade is unconditional, so every flat\n // bar sat behind a permanent hairline that native shows only after scrolling.\n // `_scrolling.scss` + `src/scroll-shading.ts` now own it, per scroller.\n}\n\n// extend-content-to-*-edge: the content spans the full height and the bar is\n// drawn OVER it, which is `content_offset = 0` / `content_height = height` in\n// adw_toolbar_view_size_allocate (adw-toolbar-view.c:390-397).\nadw-toolbar-view[extend-content-to-top-edge] > .adw-toolbar-view-top,\nadw-toolbar-view[extend-content-to-bottom-edge] > .adw-toolbar-view-bottom {\n position: absolute;\n left: 0;\n right: 0;\n}\n\nadw-toolbar-view[extend-content-to-top-edge] > .adw-toolbar-view-top {\n top: 0;\n}\n\nadw-toolbar-view[extend-content-to-bottom-edge] > .adw-toolbar-view-bottom {\n bottom: 0;\n}\n","// _scrolling.scss — GtkScrolledWindow's edge indicators.\n//\n// The two states are drawn by ONE pseudo-element per edge, because they cannot be\n// live at once: an undershoot means content is hidden past the edge, an overshoot\n// means the position is past it. `src/scroll-shading.ts` decides which, and carries\n// the overshoot's size in `--adw-overshoot`.\n//\n// Both boxes are sticky with a negative margin of their own height, so they weld to\n// the scrollport edge and consume no layout — an absolutely positioned child of a\n// scroll container scrolls away with the content instead of staying at the edge.\n//\n// Reference: refs/libadwaita/src/stylesheet/_drawing.scss (undershoot/overshoot mixins)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_scrolling.scss\n// Reference: refs/gtk/gtk/gtkscrolledwindow.c (UNDERSHOOT_SIZE, MAX_OVERSHOOT_DISTANCE)\n// Copyright (c) GNOME contributors (GTK, libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web.\n\n// `UNDERSHOOT_SIZE` — the band the node is allocated. Mostly transparent: the\n// gradient over it is done after 4px.\n$undershoot_size: 40px;\n\n// The shade both gradients start from — `color-mix(… var(--shade-color) 75% …)`.\n$undershoot_shade: color-mix(in srgb, var(--shade-color) 75%, transparent);\n\n.adw-scroll-shaded {\n // The two indicator boxes exist for every shaded scroller and stay invisible\n // until a state class turns them on, so nothing has to be inserted or removed\n // while scrolling.\n &::before,\n &::after {\n content: '';\n display: block;\n position: sticky;\n z-index: 1;\n flex-shrink: 0;\n pointer-events: none;\n height: 0;\n background: none;\n box-shadow: none;\n }\n\n &::before {\n top: 0;\n }\n\n &::after {\n bottom: 0;\n }\n\n // --- Undershoot: \"there is content past this edge\" ---\n //\n // A 1px line at the very edge plus a 4px fade, both at 75% of the shade colour.\n // Constant size: it says THAT content is hidden, never how much.\n &.undershoot-top::before {\n height: $undershoot_size;\n margin-bottom: -$undershoot_size;\n box-shadow: inset 0 1px $undershoot_shade;\n background: linear-gradient(to bottom, $undershoot_shade, transparent 4px);\n }\n\n &.undershoot-bottom::after {\n height: $undershoot_size;\n margin-top: -$undershoot_size;\n box-shadow: inset 0 -1px $undershoot_shade;\n background: linear-gradient(to top, $undershoot_shade, transparent 4px);\n }\n\n // --- Overshoot: \"there is nothing past this edge\" ---\n //\n // Two stacked radial gradients in the CURRENT text colour — a tight 3% band at\n // the edge over a soft 50% wash — sized to how far past the edge the position\n // was pushed. `--adw-overshoot` is set per scroller by the shading controller.\n &.overshoot-top::before,\n &.overshoot-bottom::after {\n height: var(--adw-overshoot, 0px);\n background-repeat: no-repeat;\n box-shadow: none;\n // The spring-back: the size is driven from JS, the fade rides the transition\n // so releasing the wheel eases out instead of cutting.\n transition: height 200ms ease-out, opacity 200ms ease-out;\n }\n\n &.overshoot-top::before {\n margin-bottom: calc(var(--adw-overshoot, 0px) * -1);\n background-image:\n radial-gradient(farthest-side at top, color-mix(in srgb, currentColor 12%, transparent) 85%, transparent),\n radial-gradient(farthest-side at top, color-mix(in srgb, currentColor 5%, transparent), transparent);\n background-size: 100% 3%, 100% 50%;\n background-position: top;\n }\n\n &.overshoot-bottom::after {\n margin-top: calc(var(--adw-overshoot, 0px) * -1);\n background-image:\n radial-gradient(farthest-side at bottom, color-mix(in srgb, currentColor 12%, transparent) 85%, transparent),\n radial-gradient(farthest-side at bottom, color-mix(in srgb, currentColor 5%, transparent), transparent);\n background-size: 100% 3%, 100% 50%;\n background-position: bottom;\n }\n\n @media (prefers-reduced-motion: reduce) {\n &.overshoot-top::before,\n &.overshoot-bottom::after {\n transition: none;\n }\n }\n}\n","// _wrap_box.scss — adw-wrap-box styling (a box that wraps its children onto new\n// lines, the web analog of flexbox `flex-wrap: wrap`). Mirrors Adw.WrapBox.\n// Reference: refs/adwaita-web/adwaita-web/scss/_wrap_box.scss\n// Reference: refs/libadwaita/src/adw-wrap-box.c / adw-wrap-layout.c (Adw.WrapBox)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// Direction, gaps, `justify-content` and `align-content` are driven imperatively\n// by the component from its attributes — these are the libadwaita defaults\n// (horizontal, packed to the start of each line, lines wrapping downwards from\n// the top). A wrap box is a pure layout container, so it carries no background\n// of its own; children handle their own theming.\nadw-wrap-box {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n // Each child is allocated the FULL cross extent of its line — `h = line_size`\n // in adw-wrap-layout.c:746-751 — which is `stretch`, the flexbox default. The\n // port used to write `flex-start` here and drive it from `align`, which is a\n // MAIN-axis property in libadwaita and belongs on `justify-content`.\n align-items: stretch;\n align-content: flex-start;\n}\n\n// `wrap-policy`, published by the component as a custom property. The FALLBACK\n// is the load-bearing part: it is `ADW_WRAP_NATURAL`, libadwaita's default\n// (adw-wrap-box.c:491-495), where CSS defaults `flex-shrink` to 1 — so a wrap\n// box that has not upgraded yet, or one whose policy is unset, draws Adwaita's\n// choice rather than the cascade's.\nadw-wrap-box > * {\n flex-shrink: var(--adw-wrap-box-child-shrink, 0);\n}\n\n// FILL grows the children and keeps the spacing constant\n// (adw-wrap-layout.c:317-319, :326-341); SPREAD deliberately does NOT, so the\n// gaps take the leftover instead. `data-line-justify` is the mode the component\n// resolved for a COMPLETE line.\n//\n// A lone child is excluded because it is not on a complete line: a box with one\n// element child has exactly one line, and that line is the final one — see\n// below.\nadw-wrap-box[data-line-justify='fill'] > *:not(:only-child) {\n flex-grow: 1;\n}\n\n// `:only-child` is the one line-membership fact CSS knows without a layout pass,\n// and libadwaita treats that line as the LAST one. Both justified modes stretch\n// it: FILL by definition, SPREAD because its \"keep the children at their minimum\n// size\" branch is guarded by `n_children > 1` (adw-wrap-layout.c:338), so a lone\n// child is stretched regardless (adw-wrap-box.c:349-352).\nadw-wrap-box[data-last-line-justify='fill'] > :only-child,\nadw-wrap-box[data-last-line-justify='spread'] > :only-child {\n flex-grow: 1;\n}\n\n// The final line, when it is NOT justified (`justify-last-line` unset — the C\n// default, adw-wrap-box.c:379-381): a generated flex item absorbs that line's\n// leftover space, so it packs at the start of the main axis the way an\n// un-justified line does, while `justify-content: space-between` keeps spreading\n// the complete lines above it. `::after` is the only per-line hook flexbox\n// offers, and it lands on the final line by construction.\n//\n// The negative main-axis margin cancels exactly the one gap the filler would\n// otherwise add, so an exactly-full line can never be pushed into a new one.\nadw-wrap-box[data-line-justify='spread'][data-last-line-justify='none']::after {\n content: '';\n flex: 1 0 0;\n min-width: 0;\n min-height: 0;\n margin-left: calc(-1 * var(--adw-wrap-box-child-spacing, 0px));\n}\n\n// A vertical box packs along the block axis, so the gap to cancel is the one\n// before the filler in that direction.\nadw-wrap-box[orientation='vertical'][data-line-justify='spread'][data-last-line-justify='none']::after {\n margin-left: 0;\n margin-top: calc(-1 * var(--adw-wrap-box-child-spacing, 0px));\n}\n","// _panes.scss — `.sidebar-pane` / `.content-pane` / `.overlay-pane`.\n//\n// These are libadwaita STYLE CLASSES, not private markup of one widget. Both\n// split views document them as their CSS node tree\n// (adw-navigation-split-view.c:157-165, adw-overlay-split-view.c:136-152) and\n// both apply them to their pane bins, which makes them the supported hook an\n// app themes a pane through. They lived nowhere in this stylesheet, so each\n// split view hard-coded `--sidebar-bg-color` onto its own private pane div\n// instead — with two consequences.\n//\n// The first is that an app writing the documented selector styles nothing, and\n// gets no error saying so. Our own docs site is the evidence: every split-view\n// example carried `class=\"sidebar\"` on the sidebar toolbar view, hand-written\n// by someone reaching for exactly this, matching no rule in the build.\n//\n// The second is a rendering defect, because the class is not constant — it is\n// how the widget says which of its states a pane is in. A collapsed overlay\n// sidebar is an `.overlay-pane`, on the WINDOW background, not the sidebar one\n// (adw-overlay-split-view.c:718-741); a collapsed navigation split view has no\n// pane bins at all, its pages being ordinary navigation pages. Painting the\n// sidebar colour at every width, as the private rules did, got both wrong.\n//\n// Reference: refs/libadwaita/src/stylesheet/widgets/_sidebars.scss (.sidebar-pane, .overlay-pane)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n.sidebar-pane {\n background-color: var(--sidebar-bg-color);\n color: var(--sidebar-fg-color);\n}\n\n// A pane nested inside another sidebar pane defers to it rather than stacking a\n// second tint (`.sidebar-pane .sidebar-pane`, _sidebars.scss). libadwaita also\n// recolours the MIDDLE pane of a three-pane setup through\n// `--secondary-sidebar-*`; that needs a split view nested in a split view to\n// mean anything, and no such composition is rendered yet, so the tokens are\n// defined (they are public API an app may already reference) and the selector\n// is left for whoever builds the composition that can test it.\n.sidebar-pane .sidebar-pane {\n background-color: transparent;\n color: inherit;\n}\n\n// `.content-pane` deliberately has NO rule here. libadwaita gives it no colour\n// of its own — the window shows through — and writing `transparent` would be a\n// claim, not a copy: it would override the `--window-bg-color` the navigation\n// split view sets on its own content pane for the case where the view is not a\n// window's direct child. The class is still applied, because being able to\n// select it is the point.\n\n// Collapsed: the sidebar floats ABOVE the content as a temporary panel, and\n// libadwaita gives it the window colours rather than the sidebar ones — a panel\n// over the content is not the same surface as a pane beside it.\n.overlay-pane {\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n}\n","// _overlay_split_view.scss — adw-overlay-split-view styling.\n//\n// The GEOMETRY is no longer here. It used to be four `transform: translateX(±100%)`\n// rules keyed on `.collapsed` / `.show-sidebar` / `.sidebar-end`, which can only\n// express the two END STATES of a reveal — so `show-progress` was 0 or 1, the\n// five `OVERLAY_SWIPE_*` conformance tables shipped unexercised, and the docked\n// hide slid the wrong way for an `end` sidebar because the JS wrote `marginRight`\n// whichever edge the pane was on.\n//\n// The element now writes the pane rect per frame from\n// `layoutOverlaySplitView`, which is continuous and knows the edge (including\n// under RTL, where a `start` sidebar is drawn on the RIGHT —\n// `get_start_or_end`, adw-overlay-split-view.c:227-234). What is left here is\n// what CSS genuinely owns: the box model, the stacking, and the transition that\n// smooths a programmatic toggle.\n//\n// Reference: refs/libadwaita/src/adw-overlay-split-view.c\n// Reference: refs/libadwaita/src/stylesheet/widgets/_sidebars.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Implemented as Web Component for @gjsify/adwaita-web.\n\nadw-overlay-split-view {\n display: flex;\n flex-direction: row;\n flex: 1;\n min-height: 0;\n position: relative;\n overflow: hidden;\n\n // NO background here. The pane colour comes from the `.sidebar-pane` /\n // `.overlay-pane` class the element toggles (see _panes.scss), because which\n // of the two a pane is in is exactly what decides its colour — hard-coding\n // `--sidebar-bg-color` on this private class painted a collapsed overlay,\n // which libadwaita puts on the window background, as though it were docked.\n // A flex column, as the content pane is, so the pane's widget fills it: GTK allocates the\n // sidebar the whole pane. A block pane sized a toolbar view by its content, and the\n // gallery's `.blp` sidebar list stopped 130px above the pane's bottom edge.\n .adw-osv-sidebar {\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n flex-shrink: 0;\n z-index: 10;\n align-self: stretch;\n // Only `opacity` transitions. The offset is driven per frame, so animating\n // it here would fight the swipe: a gesture would lag its own finger.\n transition: opacity 0.2s ease;\n }\n\n // THE CONTAINER MINIMUM, as CSS spells it. `measure_uncollapsed`\n // (adw-overlay-split-view.c:558-563) is `trunc(sidebar_min * progress) +\n // content_min`, and a flex row reaches exactly that on its own PROVIDED the\n // content is allowed to claim its own minimum: the sidebar is `flex-shrink: 0`\n // with a `min-width` of `sidebar_min`, so the sum is the container's floor.\n //\n // `min-width: 0` was here instead — the flex idiom for \"let this be crushed so\n // an ellipsis can happen\" — which is precisely how the content pane could be\n // squeezed to nothing while the sidebar kept its whole width. A child that\n // needs to truncate can still ask for `min-width: 0` itself; the PANE may not.\n //\n // Not computed in JS: a measured number would need the content's min-content\n // size, which the DOM does not expose without a reflow, and the first attempt\n // used `scrollWidth` — the pane's CURRENT width — which pinned the view at\n // whatever it happened to be and stopped it responding to its breakpoint.\n .adw-osv-content {\n flex: 1;\n min-width: min-content;\n min-height: 0;\n display: flex;\n flex-direction: column;\n align-self: stretch;\n }\n\n // Docked — the sidebar sits in the flex row and the hidden part is taken off\n // its own edge by a negative margin the element computes.\n &:not(.collapsed) .adw-osv-sidebar {\n position: relative;\n }\n\n // Docked + sidebar-end — dock the sidebar to the far side of the content\n // (the Adw.OverlaySplitView { sidebar-position: end } layout). flex `order`\n // flips the visual order without changing the slotting DOM order.\n &:not(.collapsed).sidebar-end {\n .adw-osv-content {\n order: 1;\n }\n\n .adw-osv-sidebar {\n order: 2;\n }\n }\n\n // THE DIVIDER FOLLOWS THE VISUAL SIDE, not the logical one. `_sidebars.scss`\n // makes it `:dir()` × `.end` (:21-39), which is exactly the product\n // `.sidebar-at-visual-start` already carries: under RTL a `start` sidebar is\n // drawn on the right and its divider belongs on its left edge.\n &:not(.collapsed) {\n .adw-osv-sidebar {\n border-inline-end: none;\n border-inline-start: none;\n }\n\n &.sidebar-at-visual-start .adw-osv-sidebar {\n border-right: 1px solid var(--separator-color);\n }\n\n &:not(.sidebar-at-visual-start) .adw-osv-sidebar {\n border-left: 1px solid var(--separator-color);\n }\n }\n\n // Overlay (collapsed) — the sidebar floats above the content at the absolute\n // offset the element writes into `left`, which is the only property that can\n // carry a mid-swipe position.\n &.collapsed .adw-osv-sidebar {\n position: absolute;\n top: 0;\n bottom: 0;\n box-shadow: 0 0 12px rgb(0 0 0 / 25%);\n }\n\n // THE TWO RESTING STATES ARE CSS. Everything BETWEEN them is JS.\n //\n // Dropping these is what shipped the docs-site regression. The offset is\n // driven per frame from `layoutOverlaySplitView` — but a view that has never\n // been measured drives nothing, and an absolutely-positioned pane with no\n // `left` resolves to `left: 0` at full opacity. So a HIDDEN sidebar was\n // painted over the content at the wrong edge, on a page whose slideshow\n // builds each slide inside `display: none` and moves it in, so the first\n // measurement never arrived and this fallback was the whole rendering.\n //\n // Not a second copy of the arithmetic: 0% and 100% ARE the two ends the JS\n // interpolates between, and neither of them needs a pixel to say. The element\n // clears its inline placement whenever it has no measurement, which is what\n // hands control back to these rules instead of stranding a stale offset.\n &.collapsed {\n // Revealed: flush against the edge the pane is drawn on.\n &.sidebar-at-visual-start .adw-osv-sidebar {\n left: 0;\n right: auto;\n }\n\n &:not(.sidebar-at-visual-start) .adw-osv-sidebar {\n left: auto;\n right: 0;\n }\n\n // Hidden: entirely off that same edge, and untouchable while it is there.\n &:not(.show-sidebar) {\n .adw-osv-sidebar {\n opacity: 0;\n pointer-events: none;\n }\n\n &.sidebar-at-visual-start .adw-osv-sidebar {\n left: auto;\n right: 100%;\n }\n\n &:not(.sidebar-at-visual-start) .adw-osv-sidebar {\n left: 100%;\n right: auto;\n }\n }\n }\n\n // Docked and hidden — the pane takes no room in the row. The JS expresses\n // this as a negative margin so it can animate; unmeasured, the end state is\n // simply a pane of no width.\n &:not(.collapsed):not(.show-sidebar) .adw-osv-sidebar {\n width: 0;\n min-width: 0;\n overflow: hidden;\n opacity: 0;\n pointer-events: none;\n }\n\n // Backdrop — the click-outside shield. `hidden` is the element's, off\n // `shieldVisible`; the OPACITY is the shadow-helper progress, so it fades with\n // the reveal instead of appearing whole.\n .adw-osv-backdrop {\n display: none;\n }\n\n &.collapsed .adw-osv-backdrop:not([hidden]) {\n display: block;\n position: absolute;\n inset: 0;\n background: rgb(0 0 0 / 30%);\n z-index: 9;\n transition: opacity 0.2s ease;\n }\n}\n\n// Sidebar content layout helper — wraps the sidebar's children with the\n// standard Adwaita spacing scale (12px padding, 12px gap between groups).\n.adw-sidebar-content {\n padding: var(--spacing-m);\n display: flex;\n flex-direction: column;\n gap: var(--spacing-m);\n}\n\n// Sidebar toggle button — sidebar-show-symbolic icon via CSS mask\n.adw-sidebar-toggle-icon::after {\n content: '';\n position: absolute;\n inset: 0;\n background-color: currentColor;\n -webkit-mask-image: var(--icon-sidebar-show);\n mask-image: var(--icon-sidebar-show);\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 16px 16px;\n mask-size: 16px 16px;\n -webkit-mask-position: center;\n mask-position: center;\n pointer-events: none;\n}\n","// _navigation_split_view.scss — adw-navigation-split-view styling (docked sidebar).\n//\n// Visibility is `data-pane-visible`, written by the element from\n// `update_navigation_stack` (adw-navigation-split-view.c:342-405), not from the\n// two flags. Two of that table's rules are not expressible as\n// `.collapsed.show-content`: a LONE child stays visible whatever `show-content`\n// says (:389-401), and with `sidebar-position: end` the CONTENT is the root page\n// so the sidebar is pushed ON TOP of it rather than replacing it. This file used\n// to key off the flags and got both wrong — a collapsed view with only a sidebar\n// rendered blank.\n//\n// Reference: refs/adwaita-web/adwaita-web/docs/widgets/navigationsplitview.md\n// Reference: refs/libadwaita/src/adw-navigation-split-view.c\n// Reference: refs/libadwaita/src/stylesheet/widgets/_sidebars.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-navigation-split-view {\n display: flex;\n flex-direction: row;\n min-height: 0;\n min-width: 0;\n flex: 1 1 auto;\n\n // NO background here — it comes from the `.sidebar-pane` class the element\n // applies while DOCKED (see _panes.scss). Collapsed, libadwaita builds no\n // pane bins at all and the sidebar is an ordinary full-window navigation\n // page; a background nailed to this private class made it sidebar-coloured\n // at every width.\n .adw-nsv-sidebar {\n display: flex;\n flex-direction: column;\n min-height: 0;\n flex-shrink: 0;\n }\n\n // The container MINIMUM, as CSS spells it: `measure_uncollapsed`\n // (adw-navigation-split-view.c:264-267) is `sidebar_min + content_min`, which\n // a flex row reaches by itself once the content may claim its own minimum.\n // `min-width: 0` — the flex idiom for \"let this be crushed\" — was here, which\n // is how the content pane could be squeezed to nothing while the sidebar,\n // being `flex-shrink: 0`, kept its whole width.\n .adw-nsv-content {\n display: flex;\n flex-direction: column;\n min-width: min-content;\n min-height: 0;\n flex: 1 1 auto;\n background-color: var(--window-bg-color);\n }\n\n // A pane's page fills the pane, as GTK allocates it the whole pane. The two panes are\n // flex columns and an `<adw-navigation-page>` is a block, so a page in one — which is\n // what a `.blp` writes, `sidebar: Adw.NavigationPage { … }` — was sized by its content:\n // the gallery's sidebar list stopped 118px short of the pane it sat in. Its child fills\n // it in turn, the way `.adw-navigation-page > *` does inside a navigation view.\n .adw-nsv-sidebar > adw-navigation-page,\n .adw-nsv-content > adw-navigation-page {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n\n > * {\n flex: 1 1 auto;\n min-height: 0;\n }\n }\n\n // `sidebar-position: end` docks the sidebar past the content. flex `order`\n // flips the visual order without changing the slotting DOM order.\n &.sidebar-end {\n .adw-nsv-content {\n order: 1;\n }\n\n .adw-nsv-sidebar {\n order: 2;\n }\n }\n\n // THE DIVIDER FOLLOWS THE VISUAL SIDE. `_sidebars.scss:1293-1302` makes it\n // `:dir()` × `.end`, which is the product `.sidebar-at-visual-start` carries:\n // under RTL a `start` sidebar is drawn on the right and its divider belongs on\n // its left edge. A fixed `border-right` drew it on the wrong side for half the\n // four combinations.\n &.sidebar-at-visual-start .adw-nsv-sidebar {\n border-right: 1px solid var(--separator-color);\n }\n\n &:not(.sidebar-at-visual-start) .adw-nsv-sidebar {\n border-left: 1px solid var(--separator-color);\n }\n\n // Collapsed: whichever pane the STACK puts on top fills the view, and the\n // other is not rendered at all.\n &.collapsed {\n [data-pane-visible='false'] {\n display: none;\n }\n\n .adw-nsv-sidebar[data-pane-visible='true'] {\n flex: 1 1 auto;\n max-width: none;\n border-right: none;\n border-left: none;\n }\n }\n}\n","// _carousel.scss — adw-carousel + its dot/line page indicators.\n//\n// A horizontal scroll-snap pager (adw-carousel) plus two indicator widgets that\n// bind to it. The indicators reproduce libadwaita's snapshot drawing as CSS: a\n// per-marker `--adw-carousel-progress` (0 = inactive, 1 = focused) lerps between\n// the inactive and selected size/opacity exactly as AdwCarousel does.\n//\n// Dots: DOTS_RADIUS 3 → DOTS_RADIUS_SELECTED 4 (6px → 8px), DOTS_SPACING 7,\n// DOTS_OPACITY 0.3 → DOTS_OPACITY_SELECTED 0.9, active fill = accent.\n// Lines: LINE_LENGTH 35, LINE_WIDTH 3, LINE_SPACING 5, LINE_OPACITY 0.3 →\n// LINE_OPACITY_ACTIVE 0.9, active fill = accent.\n//\n// Reference: refs/libadwaita/src/adw-carousel.c\n// Reference: refs/libadwaita/src/adw-carousel-indicator-dots.c\n// Reference: refs/libadwaita/src/adw-carousel-indicator-lines.c\n// Reference: refs/adwaita-web/adwaita-web/scss/_carousel_indicators.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-carousel {\n display: block;\n overflow: hidden;\n // A carousel's own width is its parent's to give, never its pages laid end to end. The\n // track is a row of full-width pages, so its max-content width is their SUM, and a\n // carousel in a stretching box (the gallery's `.blp`) pushed that box 274px past its\n // window. GTK measures a carousel by its widest page; CSS has no \"max of the children\"\n // for a scrolling row, so the width comes from outside, as a filled GTK allocation does.\n contain: inline-size;\n\n .adw-carousel-track {\n display: flex;\n flex-direction: row;\n height: 100%;\n overflow-x: auto;\n scroll-snap-type: x mandatory;\n // Hide the scrollbar — the carousel is paged, not scrolled by chrome.\n scrollbar-width: none;\n -ms-overflow-style: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n // `100%` is the FALLBACK basis, used until the element has measured its pages:\n // libadwaita gives every page the largest natural size capped at the carousel\n // (adw-carousel.c:748-765), which is only 100% when a page asks for it all. The\n // element narrows `flex-basis` to the measured size and pads the track by the\n // half-gap that leaves, so the neighbours peek in as they do in GTK.\n //\n // `center` and not `start` for the same reason: the strip is drawn centred\n // (:801), and centre-snapping is what makes the track padding cancel out of the\n // scroll offset, leaving `scrollLeft = position * distance` exactly true.\n //\n // `min-width: 0` because a flex item floors at its own min-content size: without\n // it a page whose content is wider than the carousel keeps that width instead of\n // being capped at it, and GTK allocates the capped one (:754) and clips.\n .adw-carousel-page {\n flex: 0 0 100%;\n min-width: 0;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n scroll-snap-align: center;\n scroll-snap-stop: always;\n }\n}\n\n// Shared layout for both indicator kinds — a centered, horizontally-laid-out\n// row of markers (matching the AdwCarouselIndicator* widgets).\nadw-carousel-indicator-dots,\nadw-carousel-indicator-lines {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--spacing-xs);\n\n // The clickable marker resets the button chrome — the visible shape is drawn\n // by the per-kind rules below.\n button {\n appearance: none;\n -webkit-appearance: none;\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n cursor: pointer;\n flex: 0 0 auto;\n }\n}\n\n// Dots — DOTS_SPACING 7px between centers; base diameter 6px (radius 3) growing\n// to 8px (radius 4) on the focused dot, opacity ramping 0.3 → 0.9.\nadw-carousel-indicator-dots {\n gap: 7px;\n\n .adw-carousel-dot {\n width: 8px;\n height: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n // The painted disc lives in ::before so the 8px hit-target stays constant\n // while the visible dot grows from 6px → 8px with progress.\n &::before {\n content: '';\n display: block;\n // 6px + (8px - 6px) * progress\n width: calc(6px + 2px * var(--adw-carousel-progress, 0));\n height: calc(6px + 2px * var(--adw-carousel-progress, 0));\n border-radius: 50%;\n background-color: var(--window-fg-color);\n // 0.3 + (0.9 - 0.3) * progress\n opacity: calc(0.3 + 0.6 * var(--adw-carousel-progress, 0));\n transition:\n width 0.2s ease,\n height 0.2s ease,\n opacity 0.2s ease,\n background-color 0.2s ease;\n }\n\n &.active::before {\n background-color: var(--window-fg-color);\n }\n }\n}\n\n// Lines — LINE_LENGTH 35px, LINE_WIDTH 3px, LINE_SPACING 5px; opacity ramps\n// 0.3 → 0.9; the active line recolors to the accent.\nadw-carousel-indicator-lines {\n gap: 5px;\n\n .adw-carousel-line {\n width: 35px;\n height: 3px;\n border-radius: 1.5px;\n background-color: var(--window-fg-color);\n // 0.3 + (0.9 - 0.3) * progress\n opacity: calc(0.3 + 0.6 * var(--adw-carousel-progress, 0));\n transition:\n opacity 0.2s ease,\n background-color 0.2s ease;\n\n &.active {\n background-color: var(--window-fg-color);\n }\n }\n}\n","// _tab_view.scss — adw-tab-view styling (a dynamic tabbed container with a tab\n// bar header; one page visible at a time). The bar is a headerbar-colored strip\n// of rounded chips; the selected chip is raised onto the view background, the\n// way libadwaita draws AdwTabBar over an AdwTabView.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_tab-view.scss (tabbar/tabbox/tab)\n// Reference: refs/adwaita-web/adwaita-web/scss/_tabs.scss\n// Copyright (c) 2020-2022 Purism SPC / GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-tab-view {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n overflow: hidden;\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n\n // --- Tab bar (the AdwTabBar strip) ---\n // Faithful port of libadwaita's `tabbar` (refs/libadwaita _tab-view.scss +\n // _colors.scss): a headerbar-colored box with an inset bottom shade; tabs\n // FILL their slot as rounded rects and use the currentColor alpha fills —\n // selected 10% (hover 13%, active 19%), plain hover 7%, active 16%.\n .adw-tab-bar {\n display: flex;\n align-items: stretch;\n flex-shrink: 0;\n box-sizing: border-box;\n padding: 0 1px 1px;\n background-color: var(--headerbar-bg-color);\n color: var(--headerbar-fg-color);\n // libadwaita's inset bottom shade under the bar.\n box-shadow: inset 0 -1px var(--headerbar-shade-color);\n overflow-x: auto;\n scrollbar-width: none;\n\n &[hidden] {\n display: none;\n }\n }\n\n .adw-tab-box {\n display: flex;\n align-items: stretch;\n flex: 1 1 auto;\n padding: 4px 0;\n }\n\n // --- A single tab ---\n .adw-tab {\n position: relative;\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-xs);\n max-width: 200px;\n min-height: 30px;\n margin: 0;\n padding: 0 var(--spacing-m);\n border: none;\n border-radius: var(--button-radius);\n background-color: transparent;\n color: inherit;\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n line-height: 1;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n transition: background-color 150ms ease-in-out;\n\n &:hover {\n background-color: color-mix(in srgb, currentColor 7%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 16%, transparent);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: -2px;\n }\n\n // The selected tab — libadwaita's currentColor alpha fill covering the\n // whole tab slot (NOT a raised chip on the view background).\n &.active {\n background-color: color-mix(in srgb, currentColor 10%, transparent);\n\n &:hover {\n background-color: color-mix(in srgb, currentColor 13%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 19%, transparent);\n }\n }\n }\n\n // Thin separators between tabs, hidden next to the selected or hovered tab\n // (libadwaita tabbox > separator + its .hidden state).\n .adw-tab + .adw-tab::before {\n content: '';\n position: absolute;\n left: 0;\n top: 3px;\n bottom: 3px;\n width: 1px;\n background-color: currentColor;\n opacity: 0.2;\n transition: opacity 150ms ease-in-out;\n pointer-events: none;\n }\n\n .adw-tab.active + .adw-tab::before,\n .adw-tab + .adw-tab.active::before,\n .adw-tab:hover + .adw-tab::before,\n .adw-tab + .adw-tab:hover::before {\n opacity: 0;\n }\n\n .adw-tab-title {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n }\n\n // --- Icon + indicator slots (AdwTab update_icons) ---\n // Both are mask-image spans carrying `adw-icon adw-icon--<name>`; the element\n // toggles `hidden` from `tabIconState`, whose rules decide which of the two\n // shows — on a pinned tab the indicator REPLACES the icon.\n // Reference: refs/libadwaita/src/adw-tab.c (update_icons, :171-198)\n .adw-tab-icon,\n .adw-tab-indicator {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n\n &[hidden] {\n display: none;\n }\n }\n\n // `AdwTabPage:loading` swaps the icon image for an `AdwSpinnerPaintable`\n // (`update_icons`, adw-tab.c:172-190) — the SAME paintable `Adw.Spinner` uses.\n // So the tab mounts a real `<adw-spinner>` in the icon's slot and this block\n // only places it. It used to restate `border: 2px`,\n // `rgba(127, 127, 127, 0.25)` and `0.8s` under a comment claiming the geometry\n // and keyframes were adw-spinner's and \"not a second copy of them\" — which is\n // how it inherited every spinner defect independently.\n .adw-tab-spinner {\n flex: none;\n\n &[hidden] {\n display: none;\n }\n }\n\n // A pinned tab is a single-glyph chip: libadwaita hides both the title and the\n // close button at construction (refs/libadwaita/src/adw-tab.c:645-650). The\n // close button is gated in JS by `tabCloseVisible`, which carries the same rule.\n .adw-tab.pinned {\n padding: 0 var(--spacing-xs);\n\n .adw-tab-title {\n display: none;\n }\n }\n\n // `AdwTabPage:needs-attention` — the accent underline libadwaita animates in\n // (refs/libadwaita/src/adw-tab.c update_needs_attention).\n .adw-tab.needs-attention::after {\n content: '';\n position: absolute;\n bottom: 2px;\n left: 50%;\n width: 12px;\n height: 2px;\n transform: translateX(-50%);\n border-radius: 1px;\n background-color: var(--accent-bg-color);\n }\n\n // --- Close affordance (CSS-drawn \"×\"; `window-close` ships, see adw-tab-view.ts) ---\n // Presence is decided in JS by `tabCloseVisible` — `(hovering && fullyVisible)\n // || selected || dragging`, and never on a pinned tab (adw-tab.c:124, :645-650)\n // — which is why the `[hidden]` rule below is load-bearing rather than cosmetic.\n .adw-tab-close {\n box-sizing: border-box;\n flex-shrink: 0;\n position: relative;\n width: 18px;\n height: 18px;\n margin: 0;\n padding: 0;\n border: none;\n border-radius: 9999px;\n background-color: transparent;\n color: inherit;\n cursor: pointer;\n opacity: 0.7;\n transition:\n background-color 150ms ease-in-out,\n opacity 150ms ease-in-out;\n\n &[hidden] {\n display: none;\n }\n\n &:hover {\n opacity: 1;\n background-color: var(--button-hover-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n &::before,\n &::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 9px;\n height: 1.5px;\n background-color: currentColor;\n border-radius: 1px;\n }\n\n &::before {\n transform: translate(-50%, -50%) rotate(45deg);\n }\n\n &::after {\n transform: translate(-50%, -50%) rotate(-45deg);\n }\n }\n\n // Adw.TabBar `expand-tabs` — tabs stretch to fill the bar evenly.\n &[expand-tabs] .adw-tab {\n flex: 1 1 0;\n max-width: none;\n }\n\n // Web-specific escape hatch: static tab sets (e.g. documentation command\n // tabs) render no close affordance.\n &[no-close] .adw-tab-close {\n display: none;\n }\n\n // Single-tab bars draw no tab background (libadwaita keeps a lone tab\n // non-interactive-looking).\n .adw-tab-bar.single-tab .adw-tab {\n &,\n &:hover,\n &:active {\n background: none;\n }\n }\n\n // --- Pages (the AdwTabView content area) ---\n .adw-tab-view-pages {\n flex: 1 1 auto;\n position: relative;\n box-sizing: border-box;\n overflow: hidden;\n background-color: var(--view-bg-color);\n color: var(--view-fg-color);\n }\n\n .adw-tab-page {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n overflow: auto;\n\n &[hidden] {\n display: none;\n }\n\n &.active-page {\n display: block;\n }\n }\n}\n","// _view_switcher.scss — adw-view-switcher styling: an adaptive, tab-style\n// switcher (single `viewswitcher` node) above a content area showing one page\n// at a time. Buttons are always icon + label, laid out side by side (`.wide`)\n// or stacked (`.narrow`), matching libadwaita's policy style classes.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_view-switcher.scss (AdwViewSwitcher)\n// Reference: refs/adwaita-web/adwaita-web/scss/_viewswitcher.scss\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-view-switcher {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n\n // The segmented button bar — the single `viewswitcher` node in libadwaita.\n // Homogeneous tabs (equal width via flex:1) with a small gutter between them.\n .adw-view-switcher-bar {\n display: flex;\n align-items: stretch;\n gap: 3px; // libadwaita's `border-spacing: 3px`\n min-height: 34px;\n }\n\n // Each tab is a flat, transparent toggle that lights up with a subtle\n // neutral fill when hovered and a slightly stronger one while selected.\n .adw-view-switcher-button {\n box-sizing: border-box;\n display: inline-flex;\n flex: 1 1 0; // homogeneous — every tab gets equal width\n // `min-width: auto` is the flex-item default, and it floors every tab at\n // its own min-content width, so a long title made ITS tab wider than the\n // others and homogeneity silently stopped holding at exactly the widths\n // where it matters. GTK's homogeneous box has no such floor\n // (adw-view-switcher.c:475) and the labels ellipsize instead\n // (adw-view-switcher-button.ui:42), which is what the 0 restores.\n min-width: 0;\n align-items: center;\n justify-content: center;\n margin: 0;\n padding: 2px 12px;\n border: none;\n border-radius: var(--button-radius);\n background-color: transparent;\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n font-weight: 700;\n line-height: 1.2;\n cursor: pointer;\n transition:\n color 0.2s ease,\n background-color 0.2s ease;\n user-select: none;\n -webkit-user-select: none;\n\n // A page with neither title nor icon has NO button at all\n // (adw-view-switcher.c:178), spelled here as the `hidden` attribute.\n // Re-assert it as an AUTHOR rule: the UA `[hidden] { display: none }`\n // loses to this block's own author `display: inline-flex` (cascade ORIGIN\n // beats specificity), so without this a hidden button stays on screen.\n &[hidden] {\n display: none;\n }\n\n .adw-icon {\n width: 16px;\n height: 16px;\n flex: none;\n }\n\n .adw-view-switcher-label {\n // Same min-content floor as the button, one level down: without it the\n // `overflow: hidden` box never shrinks, so the ellipsis never appears\n // and the label pushes its tab wide instead.\n min-width: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // AdwIndicatorBin's badge — the unread count, or a bare dot when only\n // `needs-attention` is set.\n // Reference: refs/libadwaita/src/adw-indicator-bin.c\n .adw-view-switcher-indicator {\n display: inline-flex;\n box-sizing: border-box;\n align-items: center;\n justify-content: center;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n border-radius: 8px;\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n font-size: 0.625rem;\n font-weight: 700;\n line-height: 1;\n\n &[hidden] {\n display: none;\n }\n\n &.needs-attention {\n min-width: 6px;\n width: 6px;\n height: 6px;\n padding: 0;\n border-radius: 3px;\n }\n }\n\n // AdwViewSwitcherButton is a `.flat` GtkToggleButton\n // (adw-view-switcher-button.ui:5-7), so its five states are\n // `%button_basic_flat`'s currentColor alpha ladder, NOT the filled-button\n // tokens: hover 7% / pressed 16%, and checked 10% / 13% / 19%\n // (_buttons.scss:250-269 over _colors.scss:268-272). The same ladder the\n // tab bar and the sidebar rows already spell out.\n //\n // It used to spend the FILLED-button tokens here: `--button-active-color`\n // (.19 light / .22 dark) for the selected tab AND for its hover, and\n // `--button-hover-color` (.13 / .15) for an unselected hover. Two defects\n // in one rule. The selected tab sat at the shade upstream keeps for HELD\n // DOWN, so it read as permanently pressed; and pinning its hover to that\n // same value left the selected tab answering the pointer with nothing.\n // Those tokens are also a FIXED rgba, so unlike the ladder they do not\n // follow the foreground of whatever bar the switcher was dropped into.\n &:hover {\n background-color: color-mix(in srgb, currentColor 7%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 16%, transparent);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: -2px;\n }\n\n // The selected view: a neutral fill over the whole tab. libadwaita leaves\n // the foreground alone here, so no accent recolouring of icon or label.\n &.active {\n background-color: color-mix(in srgb, currentColor 10%, transparent);\n\n &:hover {\n background-color: color-mix(in srgb, currentColor 13%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 19%, transparent);\n }\n }\n }\n\n // Wide policy — icon and label side by side.\n &.wide .adw-view-switcher-button {\n flex-direction: row;\n gap: var(--spacing-xs);\n }\n\n // Narrow policy — icon stacked above a smaller label, the compact layout\n // libadwaita drops to in a header bar at narrow window widths.\n &.narrow {\n .adw-view-switcher-bar {\n min-height: 6px;\n }\n\n .adw-view-switcher-button {\n flex-direction: column;\n gap: 1px;\n // The narrow box carries NO horizontal padding upstream: only\n // `padding-top: 4px`, and the 3px per side plus the 2px below sit on\n // the LABEL (_view-switcher.scss:15-24). Aggregated onto the button\n // here because this port has no separate box node between button and\n // label, which is the same geometry for every label at least as wide\n // as the 16px icon. Overriding only the vertical halves left the wide\n // policy's `2px 12px` standing, so a narrow tab spent 24px on side\n // padding where libadwaita spends 6px.\n padding: 4px 3px 2px;\n font-size: 0.75rem;\n\n .adw-view-switcher-label {\n min-height: 18px;\n line-height: 18px;\n }\n }\n }\n\n // The paired content area showing the active page: the Adw.ViewStack half of\n // this composite, and it draws NOTHING. libadwaita's recommended arrangement\n // is an AdwToolbarView whose top bar holds the switcher and whose `content`\n // is the bare AdwViewStack (adw-view-switcher.c:41-73); no rule in\n // `_view-switcher.scss`, `_toolbars.scss` or `_views.scss` frames that stack,\n // and the standalone `adw-view-stack` element here says the same in its own\n // words.\n //\n // It used to be a card: a 1px separator outline, a 12px radius, a 9px gap\n // under the row and 12px of padding inside. On a page that gives the switcher\n // its full width, that outline runs down the container's own left and right\n // edges with its corners curling away from them, which reads as a broken\n // frame rather than as a view. libadwaita has no line between the row and the\n // content at all: a FLAT top bar (the default, adw-toolbar-view.c:731) has no\n // background and no shade, and the only shading that ever appears is the\n // scroller's undershoot, which `_scrolling.scss` owns per scroller for the\n // reason `_toolbar_view.scss` records.\n //\n // `display: flex` is load-bearing, not decoration: this box is the stack, and\n // `adw-view-stack` is a flex COLUMN for the same reason. Without it the box\n // stays block-level, its child's `flex: 1 1 auto` below has no flex container\n // to answer and is silently inert, and the visible page keeps stopping at its\n // own text in a pane many times its height.\n .adw-view-switcher-content {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n }\n\n // Mirrors `.adw-view-stack-child`: the visible page is handed the whole\n // content area, which is what lets a status page centre itself in it the way\n // AdwViewStack allocates to its visible child.\n .adw-view-switcher-page {\n display: none;\n\n &.active-view {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n }\n }\n}\n","// _inline_view_switcher.scss — adw-inline-view-switcher styling (a compact view\n// switcher: a toggle-group-style bar of one toggle per page over a single\n// stacked content area, with the active toggle drawn as the raised Adwaita\n// active-toggle chip). The bar's per-display-mode sizing (labels / icons / both)\n// mirrors libadwaita's `inline-view-switcher > toggle-group.{labels,icons,both}`.\n// Reference: refs/libadwaita/src/adw-inline-view-switcher.c (AdwInlineViewSwitcher)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_toggle-group.scss (inline-view-switcher > toggle-group)\n// Reference: refs/adwaita-web/adwaita-web/scss/_viewswitcher.scss\n// Copyright (c) 2023 Maximiliano Sandoval / 2024 GNOME Foundation Inc. (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n// The active toggle uses a white-on-fg \"raised\" chip — the same tokens the\n// toggle-group uses (defined there; _theme.scss overrides them for dark).\n\nadw-inline-view-switcher {\n // libadwaita's ---group-padding: a small inset so the active chip floats\n // inside the group's pill, leaving a hairline of group background around it.\n --group-padding: 3px;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n\n // The switcher bar — a toggle-group pill, sized to its content.\n .adw-inline-view-switcher-group {\n display: inline-flex;\n box-sizing: border-box;\n align-items: stretch;\n gap: var(--group-padding);\n padding: var(--group-padding);\n border-radius: var(--button-radius);\n background-color: var(--button-bg-color);\n }\n\n // Each toggle is a button-shaped chip with the group's inner radius.\n .adw-inline-view-switcher-toggle {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-xs);\n min-width: 34px;\n min-height: 28px;\n margin: 0;\n padding: 4px 11px;\n border: none;\n border-radius: calc(var(--button-radius) - var(--group-padding));\n background-color: transparent;\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n font-weight: 700;\n line-height: 1;\n cursor: pointer;\n transition:\n color 0.2s ease,\n background-color 0.2s ease,\n box-shadow 0.2s ease;\n user-select: none;\n -webkit-user-select: none;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n // The active toggle — a raised white chip, the way libadwaita draws it.\n &.active {\n background-color: var(--active-toggle-bg-color);\n color: var(--active-toggle-fg-color);\n box-shadow:\n 0 1px 3px 1px rgba(0, 0, 6, 0.07),\n 0 2px 6px 2px rgba(0, 0, 6, 0.03);\n\n &:hover {\n background-color: var(--active-toggle-bg-color);\n }\n }\n }\n\n // The switcher's symbolic icon — a currentColor mask, sized like a toolbar\n // icon (matches the .adw-icon base used across @gjsify/adwaita-web).\n .adw-inline-view-switcher-icon {\n display: inline-block;\n width: 16px;\n height: 16px;\n flex: none;\n background-color: currentColor;\n mask-size: contain;\n mask-repeat: no-repeat;\n mask-position: center;\n -webkit-mask-size: contain;\n -webkit-mask-repeat: no-repeat;\n -webkit-mask-position: center;\n }\n\n .adw-inline-view-switcher-label {\n white-space: nowrap;\n }\n\n // AdwIndicatorBin's badge — the unread count, or a bare dot when only\n // `needs-attention` is set.\n // Reference: refs/libadwaita/src/adw-indicator-bin.c\n .adw-inline-view-switcher-indicator {\n display: inline-flex;\n box-sizing: border-box;\n align-items: center;\n justify-content: center;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n border-radius: 8px;\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n font-size: 0.625rem;\n font-weight: 700;\n line-height: 1;\n\n // Author rule, not the UA one: the `display: inline-flex` above is also\n // an author rule and would otherwise keep an empty badge on screen\n // (cascade ORIGIN beats specificity — the same trap the bar hit).\n &[hidden] {\n display: none;\n }\n\n &.needs-attention {\n min-width: 6px;\n width: 6px;\n height: 6px;\n padding: 0;\n border-radius: 3px;\n }\n }\n\n // The stacked content area below the bar — exactly one page is visible.\n .adw-inline-view-switcher-pages {\n width: 100%;\n }\n\n .adw-inline-view-switcher-page {\n &:not(.active-view) {\n display: none;\n }\n }\n\n // Per-display-mode sizing, mirroring libadwaita's\n // inline-view-switcher > toggle-group.{icons,labels,both}.\n .adw-inline-view-switcher-group.icons .adw-inline-view-switcher-toggle {\n min-width: 34px;\n padding-left: 0;\n padding-right: 0;\n }\n\n .adw-inline-view-switcher-group.labels .adw-inline-view-switcher-toggle {\n min-width: calc(18px + var(--group-padding) * 2);\n }\n\n // Round — group + toggles become pill-shaped.\n &.round {\n .adw-inline-view-switcher-group {\n border-radius: 17px;\n }\n\n .adw-inline-view-switcher-toggle {\n border-radius: calc(17px - var(--group-padding));\n padding-left: calc(15px - var(--group-padding));\n padding-right: calc(15px - var(--group-padding));\n }\n }\n\n // Flat — no group background; the active toggle uses a subtle fill instead\n // of the raised white chip.\n &.flat {\n --group-padding: 0px;\n\n .adw-inline-view-switcher-group {\n padding: 0;\n background: none;\n }\n\n .adw-inline-view-switcher-toggle {\n border-radius: var(--button-radius);\n\n &.active {\n background-color: var(--button-active-color);\n color: inherit;\n box-shadow: none;\n\n &:hover {\n background-color: var(--button-active-color);\n }\n }\n }\n\n &.round .adw-inline-view-switcher-toggle {\n border-radius: 17px;\n }\n }\n}\n","// _view_stack.scss — adw-view-stack styling: a standalone named-page content\n// container that shows exactly one page at a time (the web counterpart of\n// Adw.ViewStack, decoupled from any switcher). It carries no chrome of its own —\n// a paired adw-view-switcher-bar (or a header-bar switcher) drives selection.\n// Reference: refs/libadwaita/src/adw-view-stack.c (AdwViewStack)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-view-stack {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n // vexpand-equivalent — fill the space a switcher shell allots to content.\n flex: 1 1 auto;\n min-height: 0;\n\n // Exactly one child is shown; the rest are laid out of flow. `hidden` is set\n // in JS too, but the class keeps the visible page a flex child that grows.\n .adw-view-stack-child {\n display: none;\n\n &.active-view {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n }\n }\n}\n","// _view_switcher_bar.scss — adw-view-switcher-bar styling: the narrow BOTTOM\n// bar of homogeneous icon-over-label buttons bound to an adw-view-stack (the web\n// counterpart of Adw.ViewSwitcherBar). It sits at the window bottom with a top\n// hairline over a headerbar-toned surface, mirroring libadwaita's `.narrow`\n// view-switcher inside an actionbar. The active button's label is accent-tinted.\n// Reference: refs/libadwaita/src/adw-view-switcher-bar.c (AdwViewSwitcherBar)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_view-switcher.scss (.narrow policy)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_toolbars.scss (actionbar top border)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-view-switcher-bar {\n display: block;\n\n // `revealed` drives visibility by toggling the `hidden` attribute\n // (_applyRevealed → this.hidden). Re-assert display:none for [hidden] as an\n // AUTHOR rule: the UA `[hidden] { display: none }` loses to this block's own\n // author `display: block` (cascade ORIGIN beats specificity), so without this\n // an unrevealed bar would stay visible. Author + higher specificity → wins.\n &[hidden] {\n display: none;\n }\n\n box-sizing: border-box;\n // The bottom bar over a headerbar-toned surface with a top hairline (the\n // libadwaita `actionbar` inset top border), NOT a bottom border.\n background-color: var(--headerbar-bg-color);\n border-top: 1px solid var(--separator-color);\n padding: 7px 0; // libadwaita `viewswitcherbar > box` vertical padding\n\n // The homogeneous button row — every button gets equal width.\n .adw-view-switcher-bar-box {\n display: flex;\n align-items: stretch;\n // The `.narrow` view-switcher drops to a 6px min-height (icon-over-label).\n min-height: 6px;\n }\n\n // Each button — icon stacked above a small label, a flat transparent toggle\n // that fills on hover/active and marks the selected page with an accent\n // label (the neutral fill stays the same across states, like libadwaita).\n .adw-view-switcher-bar-button {\n box-sizing: border-box;\n display: inline-flex;\n flex: 1 1 0; // homogeneous — equal width\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 1px;\n margin: 0;\n padding: 4px 3px 2px;\n border: none;\n border-radius: var(--button-radius);\n background-color: transparent;\n color: var(--window-fg-color);\n font-family: var(--font-family);\n font-size: 0.75rem;\n font-weight: 700;\n line-height: 1.2;\n cursor: pointer;\n transition:\n color 0.2s ease,\n background-color 0.2s ease;\n user-select: none;\n -webkit-user-select: none;\n\n // Same cascade trap as the bar itself: a page with neither title nor\n // icon has no button (adw-view-switcher.c:178), and the UA\n // `[hidden] { display: none }` loses to this block's author\n // `display: inline-flex` unless it is re-asserted here.\n &[hidden] {\n display: none;\n }\n\n .adw-view-switcher-bar-icon {\n width: 16px;\n height: 16px;\n flex: none;\n }\n\n .adw-view-switcher-bar-label {\n min-height: 18px;\n line-height: 18px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // AdwIndicatorBin's badge — see refs/libadwaita/src/adw-indicator-bin.c.\n .adw-view-switcher-bar-indicator {\n display: inline-flex;\n box-sizing: border-box;\n align-items: center;\n justify-content: center;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n border-radius: 8px;\n background-color: var(--accent-bg-color);\n color: var(--accent-fg-color);\n font-size: 0.625rem;\n font-weight: 700;\n line-height: 1;\n\n &[hidden] {\n display: none;\n }\n\n &.needs-attention {\n min-width: 6px;\n width: 6px;\n height: 6px;\n padding: 0;\n border-radius: 3px;\n }\n }\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: -2px;\n }\n\n // The selected page — its label turns accent-coloured. (The icon stays\n // theme-fg, matching the NS twin's documented fidelity note.)\n &.active {\n color: var(--accent-color);\n\n .adw-view-switcher-bar-label {\n color: var(--accent-color);\n }\n }\n }\n}\n","// _navigation_view.scss — adw-navigation-view styling (a page-based navigation\n// container; one page visible at a time, controlled with push/pop). The visible\n// page fills the view on the window background; an automatic back button is\n// drawn flat at the start of the visible page's header bar.\n// Reference: refs/libadwaita/src/adw-navigation-view.c (css node \"navigation-view\")\n// Reference: refs/adwaita-web/adwaita-web/docs/widgets/navigationview.md\n// Copyright (c) 2022-2023 Purism SPC / GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-navigation-view {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n position: relative;\n overflow: hidden;\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n\n // The page stack — fills the view when it is given a height, and MEASURES the\n // visible page when it is not. A flex column rather than a positioning\n // context: the page is an in-flow item, so its content reaches the view.\n .adw-navigation-view-pages {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n position: relative;\n box-sizing: border-box;\n min-height: 0;\n overflow: hidden;\n }\n\n // A single navigation page — the visible one fills the view, the rest are\n // `display: none`.\n //\n // IN FLOW, not absolute. It was `position: absolute; inset: 0` under a comment\n // saying it had to be \"so a transition can overlap two pages\" — but two pages\n // never overlap here: `adw-navigation-view.ts` marks every page but the\n // visible one `[hidden]`, which is `display: none` below, and the push\n // animation runs on `.visible-page` alone. So the absolute positioning bought\n // an overlap that does not happen, and what it cost was the HEIGHT: an\n // absolutely-positioned child contributes nothing to its parent, so the page\n // stack measured 0, the view above it measured 0, and the page — `inset: 0` of\n // a zero-height parent — measured 0 in turn. A closed circle.\n //\n // Inside a window that never showed, because a definite height arrived from\n // outside. `<adw-about-dialog>` is the case where none does: its sheet is\n // `position: fixed` with a width and no height, exactly as\n // `adw-about-dialog.ui` declares it (`content-width` 360, no content-height —\n // libadwaita takes the height from the content). The whole dialog rendered\n // invisible, with a header bar inside it genuinely measuring 47px.\n //\n // `flex: 1 1 auto` keeps the fill: given a height the page still grows into\n // it; without one it reports its content.\n .adw-navigation-page {\n box-sizing: border-box;\n position: relative;\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n overflow: auto;\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n\n &[hidden] {\n display: none;\n }\n\n &.visible-page {\n display: flex;\n }\n\n // Let a page whose direct child fills (a toolbar-view / status-page)\n // stretch to the full height.\n > * {\n flex: 1 1 auto;\n min-height: 0;\n }\n }\n\n // The injected automatic back button — flat, sits at the start of the visible\n // page's header bar (mirrors AdwHeaderBar's grown-in back button).\n .adw-navigation-back-button {\n flex-shrink: 0;\n }\n\n // Slide transition for the visible page when transitions are animated. The\n // entering page fades up from a slight horizontal offset (LTR push), matching\n // libadwaita's spring-driven slide closely enough for the web target.\n &.animated .adw-navigation-page.visible-page {\n animation: adw-navigation-page-in 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);\n }\n}\n\n@keyframes adw-navigation-page-in {\n from {\n opacity: 0;\n transform: translateX(12px);\n }\n\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n","// _bottom_sheet.scss — adw-bottom-sheet styling (a content area with a sheet\n// that slides up from the bottom edge over the content, with an overlaid drag\n// handle). Mirrors libadwaita's AdwBottomSheet CSS node tree: a persistent\n// content layer, a dimming layer that fades in over it while open (modal), and\n// the sheet itself anchored to the bottom edge with rounded top corners + the\n// pill-shaped drag handle.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_bottom-sheet.scss\n// (dimming / sheet box-shadow / drag-handle pill / dialog top radius)\n// Reference: refs/libadwaita/src/adw-bottom-sheet.c (open / modal / can-close)\n// Copyright (c) 2023-2024 GNOME Foundation Inc. (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-bottom-sheet {\n display: block;\n position: relative;\n box-sizing: border-box;\n overflow: hidden;\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n\n // --- Persistent content layer ---\n // A grid rather than a block, as GTK's content bin allocates its child the whole area and\n // lets the child's `halign` / `valign` place it (`_widget.scss`); a block container\n // resolves a vertical auto margin to zero.\n .adw-bottom-sheet-content {\n display: grid;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n }\n\n // --- Dimming layer (modal scrim over the content) ---\n // libadwaita: > dimming { background: shade-color × 2 }. Non-interactive +\n // transparent when the sheet is closed.\n .adw-bottom-sheet-dimming {\n position: absolute;\n inset: 0;\n box-sizing: border-box;\n background-color: rgba(0, 0, 6, 0.32);\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n transition:\n opacity 200ms ease,\n visibility 0s linear 200ms;\n\n &.visible {\n opacity: 1;\n visibility: visible;\n pointer-events: auto;\n transition:\n opacity 200ms ease,\n visibility 0s;\n }\n }\n\n // --- The slide-up sheet ---\n // Anchored to the bottom edge, full-width, rounded top corners (dialog\n // radius), slid off-screen when closed. The spring-driven AdwBottomSheet uses\n // a translate; the web port uses an eased transform for the same effect.\n .adw-bottom-sheet-sheet {\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n box-sizing: border-box;\n max-height: 100%;\n overflow: auto;\n background-color: var(--view-bg-color);\n color: var(--view-fg-color);\n border-top-left-radius: var(--window-radius);\n border-top-right-radius: var(--window-radius);\n box-shadow:\n 0 0 14px 2px rgba(0, 0, 6, 0.03),\n 0 0 5px 2px rgba(0, 0, 6, 0.1),\n 0 0 0 1px rgba(0, 0, 0, 0.05);\n transform: translateY(100%);\n transition:\n transform 250ms ease,\n box-shadow 250ms ease;\n will-change: transform;\n }\n\n // --- Drag handle (overlaid pill at the top of the sheet) ---\n // libadwaita: > drag-handle { min-width 54px; min-height 6px; margin 15px;\n // border-radius 99px; background currentColor @ 25% }.\n // It is built with can_focus = FALSE and can_target = FALSE\n // (adw-bottom-sheet.c:1197-1198) — a decorative pill, not a button;\n // `pointer-events: none` is can_target in CSS. The `cursor: pointer` + focus\n // ring that used to sit here belonged to a close button this widget never had.\n .adw-bottom-sheet-drag-handle {\n flex-shrink: 0;\n box-sizing: border-box;\n width: 54px;\n min-height: 6px;\n height: 6px;\n margin: 15px auto;\n border-radius: 99px;\n background-color: color-mix(in srgb, currentColor 25%, transparent);\n pointer-events: none;\n }\n\n .adw-bottom-sheet-sheet-body {\n box-sizing: border-box;\n }\n\n // --- Bottom bar (the collapsed form the sheet morphs out of) ---\n // libadwaita: > sheet > stack > button — a flat, radius-less button filling the bar,\n // with the sheet's top radius carried over, and `.inert` stripping only the feedback.\n // It is a real button because upstream's bin is one (adw-bottom-sheet.c:1203).\n .adw-bottom-sheet-bottom-bar {\n display: block;\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n min-height: 0;\n padding: 0;\n border: none;\n border-radius: 0;\n font: inherit;\n font-weight: inherit;\n color: inherit;\n background: none;\n box-shadow: none;\n cursor: pointer;\n\n &:hover {\n background-color: color-mix(in srgb, currentColor 5%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 10%, transparent);\n }\n\n // can-open off. The button stays enabled and focusable — only the feedback goes,\n // because upstream refuses the click in the handler, not in the widget\n // (adw-bottom-sheet.c:2033-2036).\n &.inert {\n cursor: default;\n\n &:hover,\n &:active {\n background: none;\n }\n }\n }\n\n // --- Open state ---\n &.open .adw-bottom-sheet-sheet {\n transform: translateY(0);\n }\n\n // --- Bottom-bar state ---\n // The sheet bin sits at rest with only the bar exposed. This transform is the port's\n // `gtk_widget_set_child_visible` for the bin, so it is what `reveal-bottom-bar` takes\n // away: no class here, and the bin slides off screen with the bar still inside it.\n &.showing-bottom-bar .adw-bottom-sheet-sheet {\n transform: translateY(0);\n box-shadow:\n 0 0 0 1px rgba(0, 0, 6, 0.06),\n 0 2px 8px 2px rgba(0, 0, 6, 0.06),\n 0 3px 20px 10px rgba(0, 0, 6, 0.05);\n }\n\n // A non-modal sheet must not block the content beneath it.\n &:not(.modal) .adw-bottom-sheet-dimming {\n display: none;\n }\n}\n","// _sidebar.scss — adw-sidebar styling (a selectable navigation sidebar built\n// from titled sections of icon + title + subtitle items). In sidebar mode it\n// renders as the flat AdwSidebar navigation list (`.navigation-sidebar`); in\n// page mode it renders as boxed lists with a trailing chevron on each row (the\n// AdwPreferencesPage look the native widget switches to when collapsed).\n// Reference: refs/libadwaita/src/stylesheet/widgets/_sidebars.scss (.navigation-sidebar, sidebar)\n// Reference: refs/libadwaita/src/adw-sidebar.c (row/header/section structure)\n// Copyright (c) 2025 GNOME Foundation Inc. (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-sidebar {\n display: block;\n box-sizing: border-box;\n overflow-y: auto;\n background-color: var(--sidebar-bg-color, var(--window-bg-color));\n color: var(--sidebar-fg-color, var(--window-fg-color));\n\n .adw-sidebar-list {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n // libadwaita's menu margins around the navigation list.\n padding: var(--spacing-xs) 0;\n }\n\n .adw-sidebar-section {\n display: flex;\n flex-direction: column;\n }\n\n // --- Section headers (heading or separator) ---\n .adw-sidebar-section-header {\n &[hidden] {\n display: none;\n }\n\n // Untitled section → a horizontal separator before its rows (the way the\n // AdwSidebar header stack shows its \"separator\" child).\n &.separator {\n height: 1px;\n margin: var(--spacing-xs) var(--spacing-s);\n background-color: var(--separator-color, var(--card-shade-color));\n }\n\n &.has-title {\n padding: var(--spacing-s) calc(var(--spacing-s) + 6px) var(--spacing-xs);\n\n // The first header sits flush with the top (mirrors `.header.first`).\n &.first {\n padding-top: 0;\n }\n }\n }\n\n .adw-sidebar-section-heading {\n font-size: var(--font-size-small);\n font-weight: 700;\n opacity: var(--dim-opacity);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n // --- A single item row ---\n //\n // NO `width: 100%`. The list is a column flex container, so a row already\n // stretches to it — and stretching SUBTRACTS the row's own margins, which is\n // what puts the same 6px of air on both sides. `width: 100%` resolves against\n // the containing block INSTEAD, which does not know about the margins, so\n // every row came out 12px too wide: inset 6px on the left, hanging 6px past\n // the right edge with its rounded corners cut off by the pane. Visible on any\n // selected or hovered row, because only a filled row shows where it ends.\n .adw-sidebar-item {\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: var(--spacing-m);\n min-height: 36px;\n // The native row has a context menu, so padding lives on the inner box and\n // the row itself carries the menu margin + radius.\n margin: 0 var(--spacing-xs) 2px;\n padding: 3px 14px;\n border: none;\n border-radius: var(--button-radius, 6px);\n background-color: transparent;\n color: inherit;\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n text-align: start;\n cursor: pointer;\n user-select: none;\n -webkit-user-select: none;\n transition:\n background-color 150ms ease-in-out,\n color 150ms ease-in-out;\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color, var(--button-hover-color));\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: -2px;\n }\n\n // Selected row — a neutral filled highlight; libadwaita's AdwSidebar\n // selection is a subtle fill with the normal foreground, not accent.\n &.selected {\n background-color: var(--button-active-color);\n color: var(--window-fg-color);\n\n &:hover,\n &:active {\n background-color: var(--button-active-color);\n }\n }\n }\n\n .adw-sidebar-item-icon {\n flex-shrink: 0;\n\n &[hidden] {\n display: none;\n }\n }\n\n .adw-sidebar-item-text {\n display: flex;\n flex-direction: column;\n justify-content: center;\n flex: 1 1 auto;\n min-width: 0;\n }\n\n .adw-sidebar-item-title {\n font-size: var(--font-size-base);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &[hidden] {\n display: none;\n }\n }\n\n .adw-sidebar-item-subtitle {\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n &[hidden] {\n display: none;\n }\n }\n\n // The trailing chevron is only drawn in page (boxed-list) mode.\n .adw-sidebar-item-arrow {\n flex-shrink: 0;\n opacity: var(--dim-opacity);\n display: none;\n }\n\n // --- Page mode (boxed lists) ---\n // Sections become bordered, rounded cards (the AdwPreferencesGroup look) and\n // each row gains its trailing chevron; selection no longer fills the row with\n // the accent color, matching how the native widget drops the list selection\n // in page mode.\n &.page {\n .adw-sidebar-list {\n padding: var(--spacing-m);\n gap: var(--spacing-xs);\n }\n\n .adw-sidebar-section {\n border: 1px solid var(--card-shade-color);\n border-radius: var(--card-radius, 12px);\n background-color: var(--card-bg-color);\n color: var(--card-fg-color);\n overflow: hidden;\n }\n\n .adw-sidebar-section-header.has-title {\n padding: var(--spacing-m) var(--spacing-xs) var(--spacing-xs);\n\n &.first {\n padding-top: var(--spacing-m);\n }\n }\n\n .adw-sidebar-item {\n margin: 0;\n padding: var(--spacing-s) var(--spacing-m);\n border-radius: 0;\n border-bottom: 1px solid var(--card-shade-color);\n\n &:last-child {\n border-bottom: none;\n }\n\n &.selected {\n background-color: transparent;\n color: var(--card-fg-color);\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n }\n }\n\n .adw-sidebar-item-arrow {\n display: inline-block;\n }\n }\n}\n\n// `.navigation-sidebar` — the documented class a consumer puts on its OWN list\n// to get the sidebar look without `<adw-sidebar>`: transparent background,\n// rounded and padded items, and a NEUTRAL selection instead of an accent one\n// (style-classes.md \"Sidebars\", `_sidebars.scss:113-205`).\n//\n// `<adw-sidebar>` renders the same look from its own structure classes above; it\n// is not rewritten in terms of this class, because its rows carry an icon,\n// title, subtitle and arrow that a bare list does not have. What IS shared is\n// the metric: `$menu_margin` (6px) around the list and on each row, and\n// `$button_radius` corners.\n.navigation-sidebar {\n &,\n &.view,\n &.view:disabled {\n background-color: transparent;\n color: inherit;\n }\n\n &.background {\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n }\n\n padding-top: var(--spacing-xs);\n // 6px minus the last row's own 2px margin, upstream's `$menu_margin - 2px`.\n padding-bottom: 4px;\n\n > * {\n margin: 0 var(--spacing-xs) 2px;\n padding: 3px 14px;\n border-radius: var(--button-radius);\n }\n\n > .activatable {\n &:hover {\n background-color: color-mix(in srgb, currentColor 7%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 16%, transparent);\n }\n }\n\n > [aria-selected='true'],\n > .selected {\n background-color: color-mix(in srgb, currentColor 10%, transparent);\n\n &:hover {\n background-color: color-mix(in srgb, currentColor 13%, transparent);\n }\n\n &:active {\n background-color: color-mix(in srgb, currentColor 19%, transparent);\n }\n }\n}\n","// _about_dialog.scss — adw-about-dialog styling (a modal AdwDialog floating\n// sheet hosting the About navigation view: a full-cover scrim + a centred,\n// rounded, scrollable sheet box). Mirrors libadwaita's AdwDialog floating-sheet\n// node tree (dimming + rounded sheet with the outline + layered shadow) and the\n// AdwAboutDialog main page layout (large icon, title-1 name, dimmed developer\n// line, the version pill, then the navigation rows).\n// Reference: refs/libadwaita/src/stylesheet/widgets/_dialogs.scss\n// (floating-sheet > dimming / > sheet radius + box-shadow + outline)\n// Reference: refs/libadwaita/src/adw-about-dialog.ui (page tree, content-width 360)\n// Reference: refs/adwaita-web/adwaita-web/scss/_about_dialog.scss (web layout)\n// Copyright (c) 2022-2024 GNOME Foundation Inc. / Purism SPC (libadwaita). LGPLv2.1+.\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-about-dialog {\n // The host is inert until presented; `.open` reveals the scrim + sheet.\n display: none;\n\n &.open {\n display: block;\n }\n\n // --- Full-cover modal scrim ---\n // libadwaita: floating-sheet > dimming { background shade-color × 2 }.\n .adw-about-dialog-scrim {\n position: fixed;\n inset: 0;\n z-index: 1000;\n background-color: rgba(0, 0, 6, 0.32);\n animation: adw-about-dialog-scrim-in 200ms ease;\n }\n\n // --- Centred floating sheet ---\n // libadwaita: floating-sheet > sheet { dialog radius; layered shadow; 1px\n // outline -1px offset }. content-width 360 → a comfortable ~360px sheet.\n .adw-about-dialog-sheet {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n width: 360px;\n max-width: calc(100vw - 48px);\n max-height: calc(100vh - 48px);\n overflow: hidden;\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n border-radius: var(--window-radius);\n outline: 1px solid var(--separator-color);\n outline-offset: -1px;\n box-shadow:\n 0 0 14px 2px rgba(0, 0, 6, 0.03),\n 0 0 5px 2px rgba(0, 0, 6, 0.1),\n 0 0 0 1px rgba(0, 0, 0, 0.05);\n animation: adw-about-dialog-sheet-in 200ms cubic-bezier(0, 0, 0.2, 1);\n\n &:focus {\n outline: 1px solid var(--separator-color);\n outline-offset: -1px;\n }\n }\n\n // The navigation view fills the sheet; each page is a column.\n adw-navigation-view,\n .adw-navigation-view-pages,\n .adw-navigation-page {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n }\n\n // --- Toolbar view (flat header bar over the window background + scroller) ---\n .adw-about-dialog-toolbar-view {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-height: 0;\n }\n\n // The dialog header bar is flat: transparent over the window background, no\n // bottom separator (libadwaita: window.about headerbar.titlebar { flat }).\n adw-header-bar {\n background-color: transparent;\n box-shadow: none;\n min-height: 47px;\n }\n\n // The close button — a flat circular button drawing a \"×\" glyph: the generated\n // `.adw-icon--<name>` mask classes come from the ICONS map in scripts/build-scss.mjs,\n // which has no window-close entry (the SVG itself does exist in @gjsify/adwaita-icons).\n .adw-about-dialog-close {\n width: 34px;\n height: 34px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n line-height: 1;\n\n &::before {\n content: '\\00d7'; // ×\n }\n }\n\n // --- Scrolling content area ---\n .adw-about-dialog-scroll {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n .adw-about-dialog-clamp {\n width: 100%;\n max-width: 360px;\n margin-inline: auto;\n box-sizing: border-box;\n }\n\n .adw-about-dialog-page-body {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n padding: 0 var(--spacing-m) var(--spacing-l);\n }\n\n // --- Main page header title: hidden until the content scrolls ---\n // Mirrors AdwAboutDialog's update_headerbar_cb (show title once scrolled > 0).\n .main-page {\n adw-header-bar .adw-header-bar-title {\n opacity: 0;\n transition: opacity 150ms ease;\n }\n\n &.scrolled adw-header-bar .adw-header-bar-title {\n opacity: 1;\n }\n }\n\n // --- App icon (the large recessed glyph) ---\n .adw-about-dialog-icon {\n align-self: center;\n width: 96px;\n height: 96px;\n margin-top: var(--spacing-s);\n margin-bottom: var(--spacing-m);\n // Mask-driven .adw-icon skin scaled up to the about-dialog app-icon size.\n -webkit-mask-size: contain;\n mask-size: contain;\n background-color: currentColor;\n }\n\n // --- App name (title-1) ---\n .adw-about-dialog-name {\n align-self: center;\n text-align: center;\n font-size: 18pt;\n font-weight: 800;\n line-height: 1.2;\n margin-bottom: var(--spacing-xs);\n }\n\n // --- Developer / vendor line ---\n .adw-about-dialog-developer {\n align-self: center;\n text-align: center;\n font-size: var(--font-size-base);\n opacity: var(--dim-opacity);\n margin-bottom: var(--spacing-m);\n }\n\n // --- Version pill ---\n // libadwaita: .app-version { small accent chip }.\n .adw-about-dialog-version {\n align-self: center;\n padding: 2px 12px;\n margin-bottom: var(--spacing-l);\n border-radius: 99px;\n font-size: var(--font-size-small);\n line-height: 1.4;\n background-color: color-mix(in srgb, var(--accent-bg-color) 14%, transparent);\n color: var(--accent-color);\n }\n\n // --- Row groups (Details / Credits / Legal navigation, link rows) ---\n .adw-about-dialog-rows {\n width: 100%;\n margin-top: var(--spacing-m);\n\n & + .adw-about-dialog-rows {\n margin-top: var(--spacing-l);\n }\n }\n\n // The trailing chevron / link affordance on a navigation or link row.\n .adw-about-dialog-chevron {\n width: 16px;\n height: 16px;\n opacity: var(--dim-opacity);\n }\n\n // --- Subpage content (Details / Credits / Legal) ---\n .adw-about-dialog-comments {\n margin: var(--spacing-s) 0 0;\n font-size: var(--font-size-base);\n line-height: 1.5;\n text-align: start;\n white-space: pre-wrap;\n }\n\n .adw-about-dialog-copyright {\n margin: var(--spacing-s) 0 0;\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n text-align: center;\n }\n\n .adw-about-dialog-license {\n margin: var(--spacing-s) 0 0;\n font-size: var(--font-size-small);\n opacity: var(--dim-opacity);\n text-align: center;\n\n a {\n color: var(--accent-color);\n text-decoration: none;\n\n &:hover {\n text-decoration: underline;\n }\n }\n }\n}\n\n@keyframes adw-about-dialog-scrim-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes adw-about-dialog-sheet-in {\n from {\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n}\n","// _alert_dialog.scss — adw-alert-dialog: a modal scrim + centred dialog box with\n// a bold heading, body text and a row/column of response buttons.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_dialogs.scss (floating-sheet,\n// AdwDialog sheet shadow + radius)\n// Reference: refs/adwaita-web/adwaita-web/scss/_dialog.scss (alert layout)\n// Reference: refs/libadwaita/src/adw-alert-dialog.c (response button layout)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Implemented for @gjsify/adwaita-web Web Components.\n\n// Host: lay the scrim + box out as a full-cover overlay only while open.\nadw-alert-dialog {\n display: none;\n\n &.open {\n display: block;\n }\n}\n\n// The scrim — a fixed full-cover dimming layer behind the dialog box.\n.adw-alert-dialog-scrim {\n position: fixed;\n inset: 0;\n z-index: 1050;\n background-color: rgba(0, 0, 6, 0.32);\n // Centre the dialog box (the box is the scrim's flex child).\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--spacing-l);\n // Mirror the AdwDialog present transition (a quick fade + scale).\n animation: adw-alert-dialog-fade-in 0.2s cubic-bezier(0, 0, 0.2, 1);\n}\n\n// The dialog box — the AdwDialog \"sheet\": rounded window-colored surface with a\n// soft shadow + hairline outline, centred above the scrim.\n.adw-alert-dialog-box {\n position: fixed;\n top: 50%;\n left: 50%;\n z-index: 1051;\n transform: translate(-50%, -50%);\n\n display: flex;\n flex-direction: column;\n\n box-sizing: border-box;\n width: 100%;\n max-width: 300px;\n max-height: calc(100vh - 2 * var(--spacing-xl));\n overflow: hidden;\n\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n border-radius: var(--window-radius);\n outline: 1px solid var(--separator-color);\n outline-offset: -1px;\n box-shadow:\n 0 0 14px 2px rgba(0, 0, 6, 0.03),\n 0 0 5px 2px rgba(0, 0, 6, 0.1),\n 0 0 0 1px rgba(0, 0, 0, 0.05);\n\n font-family: var(--font-family);\n\n animation: adw-alert-dialog-pop-in 0.2s cubic-bezier(0, 0, 0.2, 1);\n}\n\n// Wider layout when responses are laid out horizontally (prefer-wide-layout).\n.adw-alert-dialog-box:has(.adw-alert-dialog-responses.horizontal) {\n max-width: 360px;\n}\n\n// The scrollable message area: heading + body + optional extra child.\n.adw-alert-dialog-message {\n display: flex;\n flex-direction: column;\n padding: var(--spacing-xl) var(--spacing-xl) var(--spacing-l);\n overflow-y: auto;\n}\n\n.adw-alert-dialog-heading {\n margin: 0;\n // Matches the GTK .title-2 typography style (bold heading).\n font-size: 15pt;\n font-weight: 800;\n line-height: 1.3;\n text-align: center;\n}\n\n.adw-alert-dialog-body {\n margin: var(--spacing-s) 0 0;\n font-size: var(--font-size-base);\n line-height: 1.4;\n text-align: center;\n}\n\n// Extra child slot, displayed below the body.\n.adw-alert-dialog-child {\n margin-top: var(--spacing-m);\n\n &:empty {\n display: none;\n }\n}\n\n// Response button area. Vertical (stacked) by default; horizontal when the\n// dialog opts into the wide layout.\n.adw-alert-dialog-responses {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-s);\n padding: var(--spacing-m) var(--spacing-l) var(--spacing-l);\n\n &.horizontal {\n flex-direction: row;\n justify-content: stretch;\n\n .adw-alert-dialog-response {\n flex: 1 1 0;\n }\n }\n}\n\n// The response buttons — full-width pills within the stacked layout. They reuse\n// the .adw-button skin (incl. .suggested-action / .destructive-action), so only\n// the full width needs adding here. The default response is NOT accent-tinted —\n// libadwaita only colours suggested/destructive responses; the default one is\n// just the Enter-activated button and keeps the neutral button style.\n.adw-alert-dialog-response.adw-button {\n width: 100%;\n justify-content: center;\n}\n\n@keyframes adw-alert-dialog-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes adw-alert-dialog-pop-in {\n from {\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.95);\n }\n to {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n}\n","// _preferences_dialog.scss — adw-preferences-dialog styling (scrim + dialog box).\n// Reference: refs/libadwaita/src/stylesheet/widgets/_dialogs.scss (floating-sheet\n// scrim/dimming + sheet radius + box-shadow + outline)\n// Reference: refs/libadwaita/src/adw-preferences-dialog.ui (flat header + title)\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\nadw-preferences-dialog {\n // Hidden until presented (the `open` class is toggled by the component). The\n // element itself contributes nothing to layout while closed.\n display: none;\n\n &.open {\n display: block;\n }\n\n // Full-cover scrim — a fixed dimming layer behind the dialog box. Adwaita\n // dims with `--shade-color` at double alpha (see _dialogs.scss `floating-sheet\n // > dimming`); --shade-color isn't in the adwaita-web token subset, so use the\n // equivalent neutral wash.\n .adw-preferences-dialog-scrim {\n position: fixed;\n inset: 0;\n z-index: 1000;\n background-color: rgba(0, 0, 6, 0.32);\n }\n\n // The centred floating dialog box. Mirrors `floating-sheet > sheet`: the\n // dialog radius (= --window-radius in Adwaita), the layered drop shadow and a\n // 1px window outline.\n .adw-preferences-dialog-box {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n width: min(var(--adw-dialog-content-width, 640px), calc(100vw - 48px));\n max-height: calc(100vh - 48px);\n overflow: hidden;\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n border-radius: var(--window-radius);\n outline: 1px solid var(--separator-color);\n outline-offset: -1px;\n box-shadow:\n 0 0 0 1px rgba(0, 0, 0, 0.05),\n 0 0 5px 2px rgba(0, 0, 6, 0.1),\n 0 0 14px 2px rgba(0, 0, 6, 0.03);\n }\n\n // Flat header bar — transparent over the window background (Adw's preferences\n // dialog header uses a flat AdwHeaderBar), title centred against the trailing\n // close button.\n .adw-preferences-dialog-header {\n display: flex;\n align-items: center;\n min-height: 47px;\n padding: 0 6px;\n flex-shrink: 0;\n }\n\n // Equal-width sides keep the title optically centred (strict centering).\n .adw-preferences-dialog-header-side {\n display: flex;\n align-items: center;\n flex: 1 1 0;\n min-width: 0;\n }\n\n .adw-preferences-dialog-header-side--end {\n justify-content: flex-end;\n }\n\n .adw-preferences-dialog-title {\n flex: 0 0 auto;\n font-weight: bold;\n font-size: var(--font-size-base);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0 6px;\n }\n\n // Round flat close button drawing a CSS \"×\" glyph — same approach as\n // <adw-tab-view>, and for the sizing reason recorded there. `windowCloseSymbolic`\n // does ship, and is compiled.\n .adw-preferences-dialog-close {\n appearance: none;\n border: none;\n margin: 0;\n width: 28px;\n height: 28px;\n padding: 0;\n border-radius: 50%;\n background-color: transparent;\n color: var(--window-fg-color);\n cursor: pointer;\n position: relative;\n transition: background-color 0.1s ease;\n\n &::before,\n &::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 12px;\n height: 1.5px;\n background-color: currentColor;\n border-radius: 1px;\n }\n\n &::before {\n transform: translate(-50%, -50%) rotate(45deg);\n }\n\n &::after {\n transform: translate(-50%, -50%) rotate(-45deg);\n }\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &.locked {\n opacity: var(--dim-opacity);\n cursor: default;\n }\n }\n\n // Scrolled body holding the stacked pages. Adwaita preferences pages sit on\n // the window background (the boxed-list groups carry their own card surface).\n .adw-preferences-dialog-body {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n }\n\n // Clamped column of preferences groups — Adw.PreferencesPage clamps content to\n // a comfortable reading width and stacks groups with generous spacing.\n .adw-preferences-dialog-pages {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-xl);\n max-width: 600px;\n margin: 0 auto;\n padding: var(--spacing-xl) var(--spacing-m);\n\n // The dialog keeps the <adw-preferences-page> ELEMENTS rather than hoisting\n // their children out — the page's title / name / icon-name are what a\n // search-result subtitle and a view switcher read. The page therefore has\n // to be layout-transparent so its groups stay flex items of this column;\n // a custom element's default `display: inline` would collapse it.\n > adw-preferences-page {\n display: contents;\n\n // `display: contents` above beats the UA `[hidden] { display: none }`, so\n // a page hidden through the DOM `hidden` property would keep rendering\n // its groups while the search (which reads the same flag) had already\n // dropped it from the corpus.\n &[hidden] {\n display: none;\n }\n }\n }\n}\n","// _dialog.scss — adw-dialog: a generic adaptive dialog. A full-cover scrim with\n// a floating window-coloured \"sheet\" centred on wide viewports, re-anchored as a\n// bottom sheet (full-width, rounded top corners) on narrow ones. Mirrors the\n// AdwDialog floating-sheet + bottom-sheet presentations.\n// Reference: refs/libadwaita/src/stylesheet/widgets/_dialogs.scss (floating sheet)\n// Reference: refs/libadwaita/src/stylesheet/widgets/_bottom-sheet.scss (bottom radius)\n// Copyright (c) 2023-2024 GNOME Foundation Inc. (libadwaita). LGPLv2.1+.\n// Modifications: Implemented for @gjsify/adwaita-web Web Components.\n\n// Bottom-sheet layout — shared by the explicit mode and the auto/narrow query.\n@mixin adw-dialog-bottom-sheet {\n .adw-dialog-scrim {\n align-items: flex-end;\n justify-content: stretch;\n padding: 0;\n }\n\n .adw-dialog-box {\n width: 100%;\n max-width: none;\n // Rounded only along the top edge — it hugs the bottom viewport edge.\n border-top-left-radius: var(--window-radius);\n border-top-right-radius: var(--window-radius);\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n animation: adw-dialog-slide-up 0.25s cubic-bezier(0, 0, 0.2, 1);\n }\n}\n\n// Host: contributes nothing to layout while closed; the `open` class reveals it.\nadw-dialog {\n display: none;\n\n &.open {\n display: block;\n }\n\n // The full-cover scrim — a flex container centring the box; a dimming wash\n // behind it. Clicking the scrim (outside the box) attempts to dismiss.\n .adw-dialog-scrim {\n position: fixed;\n inset: 0;\n z-index: 1050;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--spacing-l);\n background-color: var(--dialog-scrim-color, rgba(0, 0, 6, 0.32));\n animation: adw-dialog-fade-in 0.2s cubic-bezier(0, 0, 0.2, 1);\n }\n\n // The dialog box (\"sheet\"): a rounded window-coloured surface with a soft\n // layered shadow + hairline outline. Sized by the content-width/height props.\n .adw-dialog-box {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n width: min(var(--adw-dialog-content-width, 360px), calc(100vw - 2 * var(--spacing-l)));\n max-height: min(var(--adw-dialog-content-height, 100vh), calc(100vh - 2 * var(--spacing-l)));\n overflow: hidden;\n\n background-color: var(--window-bg-color);\n color: var(--window-fg-color);\n border-radius: var(--window-radius);\n outline: 1px solid var(--separator-color);\n outline-offset: -1px;\n box-shadow:\n 0 0 0 1px rgba(0, 0, 0, 0.05),\n 0 0 5px 2px rgba(0, 0, 6, 0.1),\n 0 0 14px 2px rgba(0, 0, 6, 0.03);\n\n font-family: var(--font-family);\n animation: adw-dialog-pop-in 0.2s cubic-bezier(0, 0, 0.2, 1);\n\n &:focus {\n outline: 1px solid var(--separator-color);\n }\n }\n\n // Flat header bar — transparent over the window background, title strictly\n // centred against the trailing close button (the AdwHeaderBar idiom).\n .adw-dialog-header {\n display: flex;\n align-items: center;\n min-height: 47px;\n padding: 0 6px;\n flex-shrink: 0;\n }\n\n .adw-dialog-header-side {\n display: flex;\n align-items: center;\n flex: 1 1 0;\n min-width: 0;\n }\n\n .adw-dialog-header-side--end {\n justify-content: flex-end;\n }\n\n .adw-dialog-title {\n flex: 0 0 auto;\n font-weight: bold;\n font-size: var(--font-size-base);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 0 6px;\n }\n\n // Round flat close button drawing a CSS \"×\" glyph: `windowCloseSymbolic` exists in\n // @gjsify/adwaita-icons, but the generated `.adw-icon--<name>` mask classes come from\n // the ICONS map in scripts/build-scss.mjs, which has no window-close entry.\n .adw-dialog-close {\n appearance: none;\n border: none;\n margin: 0;\n width: 28px;\n height: 28px;\n padding: 0;\n border-radius: 50%;\n background-color: transparent;\n color: var(--window-fg-color);\n cursor: pointer;\n position: relative;\n flex: none;\n transition: background-color 0.1s ease;\n\n &::before,\n &::after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n width: 12px;\n height: 1.5px;\n background-color: currentColor;\n border-radius: 1px;\n }\n\n &::before {\n transform: translate(-50%, -50%) rotate(45deg);\n }\n\n &::after {\n transform: translate(-50%, -50%) rotate(-45deg);\n }\n\n &:hover {\n background-color: var(--button-hover-color);\n }\n\n &:active {\n background-color: var(--button-active-color);\n }\n\n &:focus-visible {\n outline: 2px solid var(--accent-color);\n outline-offset: 1px;\n }\n\n &.locked {\n opacity: var(--dim-opacity);\n cursor: default;\n }\n }\n\n // Content area — the author's markup; scrolls when it exceeds the box height.\n .adw-dialog-content {\n flex: 1 1 auto;\n min-height: 0;\n overflow-y: auto;\n padding: var(--spacing-m) var(--spacing-l) var(--spacing-l);\n }\n\n // A header-less dialog pads the content on all sides.\n .adw-dialog-header[hidden] + .adw-dialog-content {\n padding-top: var(--spacing-l);\n }\n\n // --- Explicit bottom-sheet presentation ---\n &[data-presentation='bottom-sheet'] {\n @include adw-dialog-bottom-sheet;\n }\n}\n\n// --- Adaptive (auto) presentation: bottom sheet on narrow viewports ---\n@media (max-width: 550px) {\n adw-dialog[data-presentation='auto'] {\n @include adw-dialog-bottom-sheet;\n }\n}\n\n@keyframes adw-dialog-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes adw-dialog-pop-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n@keyframes adw-dialog-slide-up {\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n}\n","// _widget.scss — the GtkWidget layout properties an element carries as attributes.\n//\n// Every GTK widget inherits `halign`, `valign`, `hexpand` and `vexpand` from GtkWidget, and a\n// projected `.blp` hands them to `buildSharedTree` as attributes (`halign=\"center\"`). Until\n// this partial nothing read them, so the gallery's bottom sheet stretched the button its\n// Blueprint centres. The margins are not here: an attribute cannot carry a length into CSS\n// portably, so `shared-tree-builder.ts` writes them as inline style.\n//\n// ALIGNMENT IS AN AUTO MARGIN, because that is the one CSS placement that means the same on\n// both axes of a flex container and of a grid: GTK allocates a non-FILL child its natural\n// size and places it inside the space its parent gave it, and an auto margin shrinks a flex\n// or grid item to its content and puts the leftover on the named side. It does NOT place a\n// child of a BLOCK container on the vertical axis, where CSS resolves an auto block margin to\n// zero — so a GTK bin that lays its child out by alignment is a grid or a flex box here\n// (`.adw-bottom-sheet-content`, `gtk-box`). And it takes the side it pushes from: a centred\n// child cannot also keep a `margin-start`, where GTK would centre it inside the remaining\n// space.\n//\n// EXPAND IS FLEX-GROW ALONG THE BOX'S OWN AXIS, which is why it lives with the box rules\n// below and not on the attribute alone: `vexpand` in a horizontal box asks for the cross\n// axis, which `align-items: stretch` already fills, and a `flex-grow` there would widen the\n// child instead.\n//\n// Reference: refs/gtk/gtk/gtkwidget.c (halign, valign, hexpand, vexpand)\n// Reference: refs/gtk/gtk/gtkboxlayout.c (spare space shared among expanding children)\n// Copyright (c) The GTK Team. LGPLv2.1+.\n\n[halign='start'] {\n margin-inline-end: auto;\n}\n\n[halign='end'] {\n margin-inline-start: auto;\n}\n\n[halign='center'] {\n margin-inline: auto;\n}\n\n[valign='start'] {\n margin-block-end: auto;\n}\n\n[valign='end'] {\n margin-block-start: auto;\n}\n\n[valign='center'] {\n margin-block: auto;\n}\n\ngtk-box:not([orientation='vertical']) > [hexpand],\ngtk-box[orientation='vertical'] > [vexpand] {\n flex-grow: 1;\n}\n","// adwaita-skin.scss — Main entry point for @gjsify/adwaita-web.\n// Mirrors refs/adwaita-web/adwaita-web/scss/adwaita-skin.scss organization.\n// Reference: refs/adwaita-web/adwaita-web/scss/adwaita-skin.scss\n// Reference: refs/libadwaita/src/stylesheet/widgets/\n// Copyright (c) 2025 csm (adwaita-web). MIT License.\n// Copyright (c) GNOME contributors (libadwaita). LGPLv2.1+.\n// Modifications: Adapted for @gjsify/adwaita-web Web Components.\n\n@use 'icons.generated';\n@use 'variables';\n@use 'theme';\n@use 'root';\n// Style-isolation boundary — emitted before the components so their own rules\n// override this typographic/box-model floor (see _reset.scss).\n@use 'reset';\n// The ONE symbolic-icon box, behind <gtk-image>. Emitted before every widget that\n// draws one, so a context that sizes its own icons (the about dialog's 96px, the\n// split button's 14px arrows, the view switcher's 16px) still wins on ordinary\n// specificity.\n@use 'icon';\n// libadwaita's typography + semantic-colour UTILITY CLASSES (`.dimmed`,\n// `.numeric`, `.monospace`, `.title-1`…), and <gtk-label>, the element they are\n// written for — see _labels.scss. Emitted BEFORE every widget so a widget's\n// own rule wins on ordinary specificity, and because two partials @extend from\n// it (`_progress_bar.scss`'s text node, `_data_grid.scss`'s cells) exactly as\n// libadwaita's own `_progress-bar.scss` does.\n@use 'labels';\n// <gtk-box>. Before every widget, which may place its own children in one.\n@use 'box';\n// The REST of libadwaita's documented style-class surface — the widget-\n// independent half: the surfaces (`.background`, `.view`, `.frame`), `.card` and\n// the two boxed lists, `.toolbar`, `.spacer`, `.osd`, `.linked`, the app-icon\n// shadows and the undershoot indicators. Emitted here for the same two reasons\n// as `_labels.scss`: a widget's own rule then wins on ordinary specificity, and\n// `_card.scss` / `_preferences.scss` @extend `%card` from it.\n// `scripts/check-adwaita-style-classes.mjs` holds the ledger of the whole\n// documented surface and fails on a class with no rule behind it.\n@use 'style_classes';\n@use 'window';\n@use 'headerbar';\n@use 'action_bar';\n@use 'window_title';\n@use 'button';\n@use 'button_content';\n// The ONE popover surface. Emitted BEFORE the widgets that host one, so a\n// consumer's (or a widget's) own higher-specificity rule still wins over it.\n@use 'popover';\n@use 'split_button';\n@use 'menu_button';\n@use 'drop_down';\n@use 'toggle_group';\n// The ONE toggle, behind <gtk-switch>. Emitted before `switch_row` and\n// `expander_row`, the two widgets that host one — and which each carried their\n// own copy of it until it was lifted out of `adw-switch-row {}`.\n@use 'switch';\n@use 'entry';\n// The two form-control primitives, in ONE partial because upstream merges them\n// (there is no `_radio.scss` in libadwaita) — see _checks.scss.\n@use 'checks';\n@use 'progress_bar';\n@use 'preferences';\n@use 'card';\n@use 'data_grid';\n@use 'clamp';\n@use 'spinner';\n// <adw-shortcut-label>'s keycaps. After `labels`, because a separator inside it\n// is an ordinary `.dimmed`.\n@use 'shortcut_label';\n@use 'avatar';\n@use 'banner';\n@use 'status_page';\n@use 'row';\n@use 'action_row';\n@use 'entry_row';\n@use 'switch_row';\n@use 'combo_row';\n@use 'spin_row';\n@use 'button_row';\n@use 'expander_row';\n@use 'password_entry_row';\n@use 'toast';\n@use 'toolbar_view';\n@use 'scrolling';\n@use 'wrap_box';\n@use 'panes';\n@use 'overlay_split_view';\n@use 'navigation_split_view';\n@use 'carousel';\n@use 'tab_view';\n@use 'view_switcher';\n@use 'inline_view_switcher';\n@use 'view_stack';\n@use 'view_switcher_bar';\n@use 'navigation_view';\n@use 'bottom_sheet';\n@use 'sidebar';\n@use 'about_dialog';\n@use 'alert_dialog';\n@use 'preferences_dialog';\n@use 'dialog';\n// Last among the widgets: an authored `halign` / `valign` is placement the author asked\n// for, and an element rule that sets a margin must not win it back on source order.\n@use 'widget';\n\n// Ensure the `hidden` attribute always wins: components that toggle visibility\n// via `element.hidden = true` set the HTML attribute, but a custom `display`\n// from a layout class (e.g. `.adw-switch { display: inline-flex }`) has equal\n// specificity and would otherwise override the UA `[hidden] { display: none }`,\n// leaving the element laid out (and stealing width from its siblings).\n[hidden] {\n display: none !important;\n}\n"]}