@rhizomatics/signalk-boat-tech-directory-plugin 1.2.4 → 1.2.6

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.
Files changed (95) hide show
  1. package/package.json +1 -1
  2. package/public/404.html +3 -3
  3. package/public/_astro/{MobileTableOfContents.astro_astro_type_script_index_0_lang.BcSo_yiZ.js → MobileTableOfContents.astro_astro_type_script_index_0_lang.C3fM4Kra.js} +1 -1
  4. package/public/_astro/Search.astro_astro_type_script_index_0_lang.DUk3asF9.js +11 -0
  5. package/public/_astro/TableOfContents.astro_astro_type_script_index_0_lang.BpJaGz7G.js +1 -0
  6. package/public/_astro/common.DpQ1cKKv.css +3 -0
  7. package/public/_astro/{page.LAbJoB63.js → page.Dwipeu-R.js} +1 -1
  8. package/public/_astro/starlight-toc.D4UDIxQL.js +1 -0
  9. package/public/charts/index.html +5 -5
  10. package/public/charts.md +21 -0
  11. package/public/checklists/index.html +86 -0
  12. package/public/checklists.md +18 -0
  13. package/public/contributing/index.html +6 -6
  14. package/public/contributing.md +44 -0
  15. package/public/directory.json +3367 -0
  16. package/public/downloads/example-after-sailing.pdf +0 -0
  17. package/public/downloads/example-arriving-on-boat.pdf +0 -0
  18. package/public/downloads/example-checklists/index.html +3190 -0
  19. package/public/downloads/example-checklists.md +424 -0
  20. package/public/downloads/example-checklists.pdf +0 -0
  21. package/public/downloads/example-checklists.xlsx +0 -0
  22. package/public/downloads/example-engine-service.pdf +0 -0
  23. package/public/downloads/example-hauled-out.pdf +0 -0
  24. package/public/downloads/example-heavy-weather-prep.pdf +0 -0
  25. package/public/downloads/example-laying-up.pdf +0 -0
  26. package/public/downloads/example-leaving-boat.pdf +0 -0
  27. package/public/downloads/example-pontoon-storm-prep.pdf +0 -0
  28. package/public/downloads/example-preparing-to-sail.pdf +0 -0
  29. package/public/downloads/example-splashing-prep.pdf +0 -0
  30. package/public/downloads/index.html +98 -0
  31. package/public/downloads/navigation-templates/index.html +95 -0
  32. package/public/downloads/navigation-templates.md +33 -0
  33. package/public/downloads/nmea-wifi-gateways/index.html +274 -0
  34. package/public/downloads/nmea-wifi-gateways.md +29 -0
  35. package/public/downloads/nmea-wifi-gateways.xlsx +0 -0
  36. package/public/downloads/tidal-planner.pdf +0 -0
  37. package/public/downloads/tidal-planner.xlsx +0 -0
  38. package/public/downloads.md +32 -0
  39. package/public/education/index.html +7 -6
  40. package/public/education.md +19 -0
  41. package/public/images/icons/excel.svg +7 -0
  42. package/public/images/icons/pdf.svg +7 -0
  43. package/public/index-of-terms/index.html +28 -11
  44. package/public/index-of-terms.md +422 -0
  45. package/public/index.html +16 -11
  46. package/public/index.md +33 -0
  47. package/public/llms-full.txt +653 -23
  48. package/public/llms-small.txt +42 -12
  49. package/public/llms.txt +21 -0
  50. package/public/news/index.html +5 -5
  51. package/public/news.md +11 -0
  52. package/public/open-source-projects/index.html +8 -5
  53. package/public/open-source-projects.md +112 -0
  54. package/public/pagefind/fragment/en_1adf671.pf_fragment +0 -0
  55. package/public/pagefind/fragment/en_24233ec.pf_fragment +0 -0
  56. package/public/pagefind/fragment/en_3e85359.pf_fragment +0 -0
  57. package/public/pagefind/fragment/en_4d5de4a.pf_fragment +0 -0
  58. package/public/pagefind/fragment/en_6d5d648.pf_fragment +0 -0
  59. package/public/pagefind/fragment/en_7c5df85.pf_fragment +0 -0
  60. package/public/pagefind/fragment/en_81ef5fd.pf_fragment +0 -0
  61. package/public/pagefind/fragment/en_867f328.pf_fragment +0 -0
  62. package/public/pagefind/fragment/en_947d132.pf_fragment +0 -0
  63. package/public/pagefind/fragment/en_ad26c34.pf_fragment +0 -0
  64. package/public/pagefind/fragment/en_c78718d.pf_fragment +0 -0
  65. package/public/pagefind/fragment/en_dcacf53.pf_fragment +0 -0
  66. package/public/pagefind/fragment/en_e28225d.pf_fragment +0 -0
  67. package/public/pagefind/index/en_96e54a6.pf_index +0 -0
  68. package/public/pagefind/pagefind-entry.json +1 -1
  69. package/public/pagefind/pagefind.en_8cc2cbd2fe.pf_meta +0 -0
  70. package/public/protocols/index.html +5 -5
  71. package/public/protocols.md +51 -0
  72. package/public/reference/index.html +6 -15
  73. package/public/reference.md +9 -0
  74. package/public/robots.txt +4 -0
  75. package/public/servicing/index.html +110 -0
  76. package/public/servicing.md +25 -0
  77. package/public/sitemap-0.xml +1 -1
  78. package/public/sitemap.xml +1 -1
  79. package/public/social/index.html +5 -6
  80. package/public/social.md +64 -0
  81. package/public/vendors/index.html +10 -7
  82. package/public/vendors.md +190 -0
  83. package/public/_astro/Search.astro_astro_type_script_index_0_lang.3ca-UBSH.js +0 -11
  84. package/public/_astro/TableOfContents.astro_astro_type_script_index_0_lang.Csloo1VZ.js +0 -1
  85. package/public/_astro/common.DWLYySiw.css +0 -3
  86. package/public/_astro/starlight-toc.CTCQXEge.js +0 -1
  87. package/public/pagefind/fragment/en_2875c6c.pf_fragment +0 -0
  88. package/public/pagefind/fragment/en_4363a6c.pf_fragment +0 -0
  89. package/public/pagefind/fragment/en_4639db7.pf_fragment +0 -0
  90. package/public/pagefind/fragment/en_5ab54c2.pf_fragment +0 -0
  91. package/public/pagefind/fragment/en_66f3f96.pf_fragment +0 -0
  92. package/public/pagefind/fragment/en_98947e1.pf_fragment +0 -0
  93. package/public/pagefind/fragment/en_a1b2b20.pf_fragment +0 -0
  94. package/public/pagefind/index/en_bd6823f.pf_index +0 -0
  95. package/public/pagefind/pagefind.en_a246882be9.pf_meta +0 -0
@@ -0,0 +1,190 @@
1
+ ---
2
+ title: "Vendors"
3
+ description: "Hardware and software vendors, and specialist consultants."
4
+ ---
5
+
6
+ <!-- Generated from ../../../../README.md by scripts/sync-readme.mjs — do not edit directly. -->
7
+ ### Hardware
8
+
9
+ #### Full Integration
10
+
11
+ Vendors offering full suite of products for modern boats, including plotters, instruments and sensors.
12
+
13
+ - [B&G](https://www.bandg.com) - Sensors, radars, plotters, displays for racing and cruising.
14
+ - [Furuno](https://www.furunousa.com/en) - Sensors, sonar, radar, plotters, autopilots.
15
+ - [Garmin](https://www.garmin.com/) - Sensors, plotters, radars, sonar, displays, auto-pilots, charts, cameras and integration.
16
+ - [Humminbird](https://humminbird.johnsonoutdoors.com/us) - Plotter, sonar, charts, apps, One-Boat network.
17
+ - [Lowrance](https://www.lowrance.com) - Plotters, transducers, charts, trolling motors.
18
+ - [NKE](https://nke-marine-electronics.com/instruments/) - Plotters, AIS, autopilot, sensors for cruising and ocean racing.
19
+ - [Pixel Sur Mer](https://www.pixelsurmer.com/en) - Racing oriented plotters, auto-pilot, data integration, voice, 3D sail scanning and safety management.
20
+ - [Raymarine](https://www.raymarine.com) - Sensors, radars, plotters, displays, VHF, AIS and Seatalk NG.
21
+ - [Simrad](https://www.simrad-yachting.com) - Plotters, auto-pilots, sonar, radar, AIS, VHF, transducers, charts, apps.
22
+ - [SI-TEX](https://www.si-tex.com) - Plotters, sonar, AIS, radar, autopilot, sensors.
23
+
24
+ #### NMEA Interfacing
25
+
26
+ See [NMEA Wi-Fi Gateways](https://boat-tech-directory.rhizomatics.org.uk/downloads/nmea-wifi-gateways/) for a comparison of available products.
27
+
28
+ - [Actisense](https://actisense.com) - NMEA bridges and gateways.
29
+ - [Chetco](http://www.chetcodigital.com) - NMEA bridges, marine PC, SeaGauge and SeaSmart.NET for Bluetooth, 4G and Wifi.
30
+ - [Comar](https://comarsystems.com) - AIS focused with NMEA bridge, multiplexer and sensors.
31
+ - [Copperhill](https://copperhilltech.com) - Raspberry PI and ESP32 NMEA2000 boards, simulators, HATs.
32
+ - [Digital Yacht](https://digitalyacht.co.uk) - NMEA multiplexers, sensors, gateways plus AIS and 4G/5G.
33
+ - [Gadget Pool](http://www.gadgetpool.de) - German vendor, with English info, of NMEA and Seatalk interfaces and displays.
34
+ - [gedad](https://www.gedad.de) - German vendor, *Marine Control Server* for NMEA0183, NMEA2000 and i2c, with SignalK support.
35
+ - [HAT Labs](https://hatlabs.fi) - Open Source NMEA2000, ESP32 and RasPi hardware, including the [Halos](https://github.com/halos-org/halos) containerized marine OS for Raspberry Pi and [HALPI2](https://shop.hatlabs.fi/products/halpi2-computer) marinized Raspberry Pi.
36
+ - [Luissa 351](https://www.ebay.co.uk/usr/luissa.351) - NMEA gateways, multiplexers and Wifi integration. Portugal selling internationally through eBay.
37
+ - [Marine Control Server](https://open-boat-projects.org/en/marine-control-server/) - Raspberry Pi based NMEA 0183 and NMEA 2000 interface with OpenPlotter and SignalK integration.
38
+ - [Matsutec](http://www.matsutec.cn) - Chinese supplier of NMEA hardware, testers, gateways plus AIS and auto-pilots.
39
+ - [MySmartBoat](https://mysmartboat.com/) - Monitoring and integration hardware, electrical components, MySmartApp unified dashboard.
40
+ - [Nauti-Control](https://nauti-control.com) - Seatalk and NMEA2000 wifi bridges and remote controls. Also on <img src="../images/icons/youtube.ico" width="16" height="16"> [YouTube](https://www.youtube.com/@Nauti-Control).
41
+ - [Oceanav](https://ocenav.com) - Spanish vendor, with English info, of NMEA wifi gateways and auto-pilot remote control.
42
+ - [Onwa](https://www.onwamarine.com/NMEA_Devices.html) - NMEA converters and multiplexers, and general marine electronics.
43
+ - [OpenMarine](https://openmarine.net) - NMEA [MacArthur HAT](https://macarthur-hat-documentation.readthedocs.io)for Raspberry PI with OpenPlotter.
44
+ - [Pitufino](https://pitufino.com) - Wifi gateway for NMEA0183 and NMEA2000 with optional Seatalk 1 and cloud access.
45
+ - [Quark](https://www.quark-elec.com) - NMEA devices, sensors, internet gateways, gauges and remote monitoring, including both J1939 and analogue integration for engines.
46
+ - [Rosuku](https://www.rusoku.com) - TouCAN Marine NMEA2000 USB adaptor.
47
+ - [SailorGuard](https://www.sailorguard.com) - Micro-controller minimal implementation of SignalK for performance and low power, and windlass integration with mobile app ([AnchorGuard](https://www.sailorguard.com/anchor-guard)).
48
+ - [SailServer](https://sailserver.com) - NMEA 2000 interfaced box for automatic logbook, anchor watch and remote tracking, including via NoForeignLand and racing performance. Danish vendor, with English info.
49
+ - [See Sailing](https://www.see-sailing.com) - NMEA data visualization for yacht race analysis and NMEA to Bluetooth hardware.
50
+ - [Shipmodul](https://shipmodul.com) - NMEA/Seatalk multiplexers and LAN gateways, macOS and Windows configuration client ([workaround for Linux](https://www.cricalix.net/2023/05/07/miniplex-and-linux/)).
51
+ - [SK Pang Electronics](https://www.skpang.co.uk) - Raspberry Pi boards and HATs for CAN-Bus integration, NMEA2000 simulators, GPS modules, LCD displays.
52
+ - [Tinley](https://www.tinleyelectronics.com/) - NMEA interfaces, sensors, multiplexers, converters.
53
+ - [Veinland](https://veinland.net) - German vendor, with English info, of commercial NMEA multiplexers, embedded PCs and instruments.
54
+ - [Vela Navgea](https://www.vela-navega.com) - Portuguese sailor who builds *NMEA4Wifi* range of multiplexers for NMEA0183, N2K and Seatalk.
55
+ - [Wegmatt](https://wegmatt.com) - *dAISy* AIS receivers and NMEA0183 interfacing.
56
+ - [Yacht Devices](https://www.yachtd.com) - NMEA bridges, gateways and sensors including engine gateways for J1939 or J1708 digital interfaces and spark plug sensors for older outboards.
57
+ - [Yakbitz](https://yakbitz.com) - Seatalk, NMEA, AIS and Autopilot interfaces.
58
+
59
+ #### Marine PCs and Components
60
+
61
+ - [Austral](https://austral-eng.com/) - Marinized Raspberry Pi, sensors, apps including racing auto-pilot.
62
+ - [Beetronics](https://www.beetronics.co.uk/c-marine?_gl=1*1f0b82j*_up*MQ..*_gs*MQ..&gbraid=0AAAAADm9gnpX9qEe0DYsgTxrXqGaGG_4d) - Marine monitors and touchscreens.
63
+ - [Bluestone](https://www.bluestonetechnology.co.uk/) - Marine LCD displays.
64
+ - [BVM](https://www.bvm.co.uk/industries-2/transport-solutions/marine-solutions/) - Marine displays and PCs.
65
+ - [Cybernet](https://www.cybernetman.com/) - Marine rackmount and mini PCs.
66
+ - [Impulse](https://www.impulse-embedded.co.uk/solutions/industrial-computing-solutions/marine-and-subsea) - Marine PCs and displays.
67
+ - [Marine Data Solutions](https://marinedatasolutions.com) - Satellite and mobile internet integration, *MDS Blender* marine router.
68
+ - [Poynting](https://poynting.tech/marine-coastal-antennas/) - Marine antennas for 4G/5G/Wifi.
69
+
70
+ #### Instruments and Autopilots
71
+
72
+ - [A+T](https://www.aandtinstruments.com) - Wind sensors, *Sailing Processor* boat server, displays, valves. South coast of England based. Repairs, and integration for superyachts and racing boats.
73
+ - [Airmar](https://www.airmar.com/) - Transducers, sensors, NMEA bridging, weather instruments and apps.
74
+ - [Cyclops Marine](https://www.cyclopsmarine.com) - Smart load sensors and displays.
75
+ - [Daniamant](https://daniamant.com) - Forward looking sonar (previously *EchoPilot*), alarms and other safety related products.
76
+ - [em-trak](https://em-trak.com) - VHF and AIS.
77
+ - [ICOM](https://www.icomamerica.com/lineup/marine/) - Marine VHF, SSB, GMDSS, AIS, radar.
78
+ - [LCJ Capteurs](https://lcjcapteurs.com/en/categorie-girouette-anemometres-capteur-vent/marine-en/) - Wind and weather instruments, StatMETEO wind data recording software.
79
+ - [MAPTATTOO](https://www.maptattoo.com) - eInk chart plotter.
80
+ - [NASA Marine](https://www.nasamarine.com) - Instruments, monitors, AIS, displays.
81
+ - [Nauticsense](https://nautic-sense.com) - ESP32 based deck instruments with NMEA 2000, SignalK and BLE integration. Open source projects at [Sail-Tech](https://github.com/Sail-Tech) on GitHub.
82
+ - [Nautinect](https://nautinect.com) - Open source hardware design and mobile app, controller with wheel or tiller drive.
83
+ - [Navinet](https://www.navinet-autopilot.com/) - SmartSail autopilot with OpenCPN and NMEA integration.
84
+ - [PCNautic](https://pcnautic.com) - Tiller auto-pilot with mobile apps, plus BoatController NMEA and Wifi interfacing and related instruments.
85
+ - [Safiery](https://safiery.com/marine-new/) - Digital switching, monitoring, Victron and NMEA integration.
86
+ - [Scadys](https://go.scadys.io) - MDD400 TFT display for NMEA 2000, NMEA 0183 and Seatalk data, usable as ST60 replacements. Kickstarter project by cruising sailor.
87
+ - [Vakaros](https://www.vakaros.com) - Racing oriented instruments. Instruction videos on <img src="../images/icons/youtube.ico" width="16" height="16"> [YouTube channel](https://www.youtube.com/@Safiery).
88
+ - [Veratron](https://veratron.com/pages/marine) - NMEA instruments, gateways and sensors, displays.
89
+ - [Wema](https://wema.co.uk) - NMEA instruments, gauges, bridges, analog to digital converters.
90
+
91
+ #### Boat Integration and Remote Monitoring
92
+
93
+ - [BoatCommand](https://boatcommand.com) - Vessel tracking and remote monitoring, aimed at commercial fishermen, also used by yacht sailors. US-based, part of [ViaTrax](https://www.viatrax.com).
94
+ - [BoatMonitor32](https://www.boatmonitor32.co.uk) - Mobile app and boat hardware hub with Victron integration.
95
+ - [EasyHub](https://dpnav.de/) - German vendor (DPNav) WiFi gateway with NMEA2000 integration and remote tracking, with cloud service.
96
+ - [Galvanic Works](https://galvanicworks.com) - Voice alert devices, crew pulse wristbands, mobile app for MOB, AIS collisions, anchor alarm, watch management, remote monitoring. Sailer owned company in Balearics, with English/French/Spanish/Italian/German language on-line shop.
97
+ - [Hello Sailor](https://hello-sailor.co.uk) - LTE/SMS based remote boat monitoring, subscription-free.
98
+ - [iNav4u](https://www.inav4u.com) - **Zora** integrated monitoring, navigation, dashboards.
99
+ - [Maretron](https://www.maretron.com) - Integrated monitoring and visualization, NMEA bridges and sensors.
100
+ - [Nautic Alert](https://nauticalert.com) - Remote GPS tracking, bilge and power monitoring.
101
+ - [Navigation Laptops](https://navigationlaptops.com) - Laptops setup for navigation with instrument packages.
102
+ - [Oceanic Systems](https://osukl.com) - Sensors, relays, probes, gateways, displays for remote monitoring and security, including J1939 engine interface.
103
+ - [Orca](https://getorca.com/orca-core/) - Data hub for NMEA, auto-pilot, radar with chart plotter and remote monitoring.
104
+ - [PAJ GPS](https://www.paj-gps.co.uk) - UK remote GPS tracking hardware and app.
105
+ - [Philippi](https://www.philippi-online.de/) - German supplier of monitoring, sensors and electrical power components, including refit panels for Bavaria yachts.
106
+ - [PredictWind DataHub](https://www.predictwind.com/datahub) - Data logging, remote monitoring, internet data, NMEA and auto-pilot interface.
107
+ - [Raspmarine](https://raspmarine.dk) - Danish. Raspberry Pi based integration.
108
+ - [Renogy](https://www.renogy.com/) - Power management and monitoring.
109
+ - [Sensar Marine](https://sensarmarine.com) - Subscription-based remote monitoring with app, SMS and NMEA integration.
110
+ - [Siren Marine](https://sirenmarine.com/) - Remote boat monitoring.
111
+ - [Smartboatia](https://smartboatia.com) - Smart boat hub with anchor alarm, remote monitoring, logging and AI-based trim suggestions.
112
+ - [Smart Boat Systems](https://www.smartboatsystem.com) - Dominican Republic based integrator, supplies package of ODroid based hubs running open source packages with 4G Hub and Zigbee sensors.
113
+ - [Sway](https://sway-sailing.com/) - Wifi integration for NMEA2000, data recording to local storage, remote tracking. Mobile app for iOS and Android, social voyage sharing.
114
+ - [Vesscomm](https://vesscomm.com) - Mobile data (2G/4G) based monitoring hubs and mobile apps.
115
+ - [Victron](https://www.victronenergy.com) - Power devices with associated monitoring, integration, power sensors, displays.
116
+ - [Vircru](https://www.vircru.com) - Remote boat monitoring with mobile app.
117
+ - [Zigboat](https://www.zigboat.com) - Zigbee based remote boat sensors and monitoring with SMS and mobile app notifications by Glomex.
118
+
119
+ #### Audio, Electrical, Safety, Accessories
120
+
121
+ - [Aquatic AV](https://www.aquaticav.com/pages/environments-marine) - Speakers, amplifiers, head units.
122
+ - [Avtex](https://avtex.co.uk) - 12V TVs popular on boats.
123
+ - [Blue Sea](https://www.bluesea.com) - Electrical components, meters, cable glands and enclosures, on-line and mobile calculators, monitoring.
124
+ - [Crimp](https://crimp.studio) - On-line DC diagram editor with simulation and validation.
125
+ - [Cruising Solutions](https://www.cruisingsolutions.com/collections/communication) - 'Marriage Savers' intercom headsets.
126
+ - [Kicker Audio](https://kickeruk.com/pages/boat-audio) - Speakers, amplifiers, cables.
127
+ - [MarineDCAC](https://marinedcac.com) - Cruising sailor run, builds [BankManager](https://marinedcac.com/pages/bankmanager) for controlling traditional/lithium battery banks, and DC aircon.
128
+ - [Peplink](https://www.peplink.com/) - Marine antennas and routers for 5G.
129
+ - [Sailor Hat for Raspberry Pi](https://docs.hatlabs.fi/sh-rpi/) - Power Pi from NMEA2000 bus, safe shutdown, glitch protection.
130
+ - [Simarine](https://simarine.net) - Slovenian company supplying battery monitors, control panels, switching, sensors and accessories.
131
+ - [SmartDock](https://www.smartdock.de/en) - Dock boat remotely via mobile app using engines and thrusters. German vendor with English info.
132
+ - [Topargee](https://www.topargee.com.au/) - Bluetooth enabled water and fuel flow meters, automated shut-off valves.
133
+ - [Yacht Controller](https://www.yachtcontroller.com) - Handheld engine & steering remote control for docking.
134
+ - [Weatherdock](https://www.easyais.com) - German supplier of AIS transceivers and splitters, personal trackers and beacons, boat monitoring.
135
+
136
+ ### Software
137
+
138
+ <!--lint disable double-link-->
139
+ See also [Open Source](#open-source-projects).
140
+ <!--lint enable double-link-->
141
+
142
+ - [Adrena](https://www.adrena-software.com) - Navigation and route optimization packages specialized for cruisers or racing.
143
+ - [AggSoft](https://www.aggsoft.com) - Windows based data loggers/aggregators for NMEA, ModBus, GPS, USB etc.
144
+ - [DeepBlue](https://deepblue.app/) - Yacht management app.
145
+ - [Expedition Marine](https://www.expeditionmarine.com) - Windows-based navigation, weather routing and racing app, official supplier to The Volvo Ocean Race, Americas Cup, Sail GP etc.
146
+ - [Go Pottie](https://gopottie.app) - Crowd-sourced lobster pot location sharing for British Isles, iOS and Android mobile apps.
147
+ - [Guardian Digital](https://www.guardiandigital.tech/) - Soft plotter / MFD for Apple devices.
148
+ - [LuckGRIB](https://luckgrib.com) - Weather data download, view and routing.
149
+ - [Meltemus](https://www.meltemus.com/index.php/en/) - Navigation, weather and charts for Android, iOS, Windows, macOS and Linux. **qtVLM** weather and chart viewer free on some platforms.
150
+ - [Maintenance ROS](https://maintenanceros.com) - Boat maintenance management.
151
+ - [Navigatrix](https://navigatrix.net/nx/) - Custom Linux distribution for navigation. Free.
152
+ - [Navimetrix](https://navimetrix.com) - Integrated navigation, weather, charting, routing for Android, Windows, iOS and macOS.
153
+ - [Navstation](https://navstation.net) - **MacENCx64Integrate** plotting, navigation, charts and NMEA integration for macOS.
154
+ - [NMEA 2000 Solutions](https://www.nmea2000solutions.com) - NMEA BridgeBuilder and NMEA Gateway packages, consultancy.
155
+ - [Ocean Signal](https://oceansignal.com) - PLBs, EPIRBs, AIS alarms, VHF and radar transponders.
156
+ - [OsmAnd](https://osmand.net/) - Offline mobile apps for OpenStreetMap, with nautical support in Pro and higher.
157
+ - [Rose Point](https://www.rosepoint.com) - Navigation software, North America gazatteer, NMEA gateway.
158
+ - [SailKick](https://www.sailkick.io) - Offline webapp and mobile app for boat metrics, with weather, climatology and basic routing, optional cloud sync for metrics, polars, public page. SignalK integration.
159
+ - [Sail Logger](https://saillogger.com) - Logbook for mobiles, with NMEA integration.
160
+ - [Sailing Performance](https://www.sailingperformance.com) - Racing performance analysis.
161
+ - [SailRouter](https://sailrouter.org) - AI based routing for onboard Raspberry Pi with NMEA and SignalK integration. Community Edition with planned commercial and SaaS versions.
162
+ - [SailSense](https://sailsense.xyz) - Local GenAI assisted analysis, advice and alarms. SignalK based.
163
+ - [SailTrack](https://www.angelnav.co.uk) - **AngelNav** plotter app for mobile and PC with charts and traditional charting techniques and NMEA integration.
164
+ - [SavvyNavvy](https://www.savvy-navvy.com) - Plotter app for mobile with integrated weather, AIS, charting and NMEA integration.
165
+ - [SeaIQ](https://seaiq.com) - Navigation for pilots, on Windows, macOS, iOS, iPadOS. Lower price version for recreational sailors.
166
+ - [SKipper](https://www.skipperapp.net) - SignalK instrumentation display app for iOS, Android, Linux, Windows, macOS and Raspberry Pi.
167
+ - [Skippo](https://www.skippo.se) - Swedish navigation app for iOS, Android and web.
168
+ - [The Boat App](https://theboatapp.com) - Boat management app, web, iOS and Android.
169
+ - [TimeZero](https://mytimezero.com) - Software based full-featured chart plotter.
170
+ - [Tremate](https://tremate.com) - Inventory and maintenance records. Mobile app for iOS and Android.
171
+ - [Vessel Vault](https://vesselvault.app) - Boat maintenance management.
172
+ - [WilhemSK](https://www.wilhelmsk.com) - SignalK dashboard app for iPhone, iPad, macOS, Apple Watch and Apple TV.
173
+ - [Yachtara](https://yachtara.com) - Weather routing and boat management app for cruising sailors: multi-model weather comparison, weather routing, anchor watch, maintenance logs and manuals, crew management. Builds offline regional forecast packs.
174
+ - [Zapfware](https://www.zapfware.de) - Mobile apps including *NMEARemote* dashboard, *NMEAConnect* bridging and ORC racing.
175
+
176
+ #### Social
177
+
178
+ - [Navily](https://www.navily.com) - Map with guidance and reviews for marinas, anchorages, mooring buoys.
179
+ - [NoForeignLand](https://www.noforeignland.com) - Social website and mobile apps, for boat tracking, forums, anchorage advice. Owned and run by a long-term cruising couple.
180
+ - [SailorsLog](https://www.sailorslog.io) - Social sailing journal for Apple devices.
181
+ - [SeaPeople](https://seapeopleapp.com) - Boat tracking and social networking website and mobile apps.
182
+
183
+ ### Consultants
184
+
185
+ - [Nautibus](https://nautibus.de) - NMEA2000 design, testing, installation. German and English.
186
+ - [Francis Fustier](https://francis-fustier.fr) - France. Training, advice and integration. News and articles, focused on Apple products onboard.
187
+ - [Pacific Yacht Systems](https://www.pysystems.com) - Electrical and electronics consultancy, retail and educational articles & videos.
188
+ - [Seatech Systems](https://seatech.systems) - Marine electronics consultancy, with free advice articles on marine internet.
189
+ - [Tweeds Marine](https://tweedsmarine.nz/) - New Zealand. Consultancy plus free articles, news and calculators online.
190
+ - [VesselSense](https://vesselsense.io) - California. Consultancy for navigation and monitoring systems integration, plus [YouTube videos](https://www.youtube.com/@VesselSense-io) on SignalK, Raspi, WaveShare.
@@ -1,11 +0,0 @@
1
- var e={ranking:{pageLength:.1,termFrequency:.1,termSaturation:2,termSimilarity:9,diacriticSimilarity:.8}};function t(e,t){if(e.length===0)return 0;let n=[];for(let t of e)n[t.location]=(n[t.location]||0)+t.balanced_score;if(n.length<=t)return 0;let r=n.slice(0,t).reduce((e,t)=>e+(t||0),0),i=r,a=[0];for(let e=0;e<n.length;e++){let o=e+t;i+=(n[o]??0)-(n[e]??0),i>r?(r=i,a=[e]):i===r&&a[a.length-1]===e-1&&a.push(e)}return a[Math.floor(a.length/2)]}function n(e,t,n,r,i,a){let o=e.includes(`​`),s=o?e.split(`​`):e.split(/[\r\n\s]+/g),c=a??s.length,l=i??0;c-l<n&&(n=c-l),t+n>c&&(t=c-n),t<l&&(t=l);let u=o?``:` `,d=s.slice(t,t+n).join(u).trim();for(let e of r)s[e]?.startsWith(`<mark>`)||(s[e]=`<mark>${s[e]}</mark>`);return{excerpt:s.slice(t,t+n).join(u).trim(),plain_excerpt:d}}function r(e,r=30){let i=e.meta?.url||e.url,a=(e.anchors??[]).filter(e=>e.text&&/\S/.test(e.text)).sort((e,t)=>e.location-t.location),o=[],s=0,c={title:e.meta?.title,url:i,weighted_locations:[],locations:[],excerpt:``,plain_excerpt:``},l=i=>{if(!c.locations.length)return;let a=t(c.weighted_locations.map(e=>({weight:e.weight,balanced_score:e.balanced_score,location:e.location-s})),r)+s,l=i?Math.min(i-a,r):r,u=n(e.content??``,a,l,c.locations,s,i);c.excerpt=u.excerpt,c.plain_excerpt=u.plain_excerpt,o.push(c)};for(let t of e.weighted_locations??[]){if(!a.length||t.location<a[0].location){c.weighted_locations.push(t),c.locations.push(t.location);continue}let e=a.shift();for(l(e.location);a.length&&t.location>=a[0].location;)e=a.shift();let n=i;try{if(/^((https?:)?\/\/)/.test(n)){let t=new URL(n);t.hash=e.id,n=t.toString()}else{let t=/^\//.test(n)?n:`/${n}`,r=new URL(`https://example.com${t}`);r.hash=e.id,n=r.toString().replace(/^https:\/\/example\.com/,``)}}catch{}s=e.location,c={title:e.text,url:n,anchor:e,weighted_locations:[t],locations:[t.location],excerpt:``,plain_excerpt:``}}return l(a[0]?.location),o}var i=(function(){let e=typeof document<`u`&&document.createElement(`link`).relList;return e&&e.supports&&e.supports(`modulepreload`)?`modulepreload`:`preload`})(),a=function(e){return`/@rhizomatics/signalk-boat-tech-directory-plugin/`+e},o={},s=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),s=document.querySelector(`meta[property=csp-nonce]`),c=s?.nonce||s?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function u(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=l(t.map(t=>{if(t=a(t,n),t=u(t),t in o)return;o[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let s=document.createElement(`link`);if(s.rel=r?`stylesheet`:i,r||(s.as=`script`),s.crossOrigin=``,s.href=t,c&&s.setAttribute(`nonce`,c),document.head.appendChild(s),r)return new Promise((e,n)=>{s.addEventListener(`load`,e),s.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function s(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&s(e.reason);return e().catch(s)})},c={clear_search:`Clear`,zero_results:`No results for [SEARCH_TERM]`,many_results:`[COUNT] results for [SEARCH_TERM]`,one_result:`[COUNT] result for [SEARCH_TERM]`,searching:`Searching for [SEARCH_TERM]...`},l={"&":`&amp;`,"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#39;`},u=e=>String(e??``).replace(/[&<>"']/g,e=>l[e]),d=300,f=30,p=class extends HTMLElement{constructor(){super();let t=this.querySelector(`button[data-open-modal]`),n=this.querySelector(`button[data-close-modal]`),i=this.querySelector(`dialog`),a=this.querySelector(`.dialog-frame`),o=e=>{(`href`in(e.target||{})||document.body.contains(e.target)&&!a.contains(e.target))&&p()},l=e=>{i.showModal(),document.body.toggleAttribute(`data-search-modal-open`,!0),this.querySelector(`input`)?.focus(),e?.stopPropagation(),window.addEventListener(`click`,o)},p=()=>i.close();t.addEventListener(`click`,l),t.disabled=!1,n.addEventListener(`click`,p),i.addEventListener(`close`,()=>{document.body.toggleAttribute(`data-search-modal-open`,!1),window.removeEventListener(`click`,o)}),window.addEventListener(`keydown`,e=>{(e.metaKey===!0||e.ctrlKey===!0)&&e.key===`k`&&(i.open?p():l(),e.preventDefault())});let m={};try{m=JSON.parse(this.dataset.translations||`{}`)}catch{}let h=e=>m[e]||c[e]||``,g=this.dataset.stripTrailingSlash===void 0?e=>e:e=>e.replace(/(.)\/(#.*)?$/,`$1$2`),_=this.querySelector(`#starlight__search-input`),v=this.querySelector(`#starlight__search-clear`),y=this.querySelector(`#starlight__search-results-area`),b=this.querySelector(`#starlight__search-message`),x=this.querySelector(`#starlight__search-results`),S=null,C=()=>(S||=(async()=>{let t=`/@rhizomatics/signalk-boat-tech-directory-plugin`.replace(/\/$/,``)+`/pagefind/`,n=await s(()=>import(`${t}pagefind.js`),[]);return await n.options({baseUrl:`/@rhizomatics/signalk-boat-tech-directory-plugin`,...e}),n})(),S);_.addEventListener(`focus`,C,{once:!0});let w=(e,t)=>`
2
- <li class="sl-search-result__entry sl-search-result__entry--nested">
3
- <a class="sl-search-result__link" href="${u(g(e))}">${t}</a>
4
- </li>
5
- `,T=e=>{e.url=g(e.url),e.meta?.url&&(e.meta.url=g(e.meta.url));let t=e.meta?.url||e.url,n=r(e,f),i=n[0]?.url===t||n[0]?.anchor?.id===`_top`,a=i?n.slice(1):n,o=i&&e.excerpt?`<p class="sl-search-result__excerpt">${e.excerpt}</p>`:``,s=a.length+ +!!o;return{html:`
6
- <li class="sl-search-result">
7
- <a class="sl-search-result__link sl-search-result__link--page" href="${u(t)}">${u(e.meta?.title??``)}</a>
8
- ${o}
9
- ${a.length?`<ol class="sl-search-result__entries">${a.map(e=>w(e.url,e.excerpt)).join(``)}</ol>`:``}
10
- </li>
11
- `,count:s}},E=0,D=async e=>{let t=++E,n=await C();if(t!==E)return;b.textContent=h(`searching`).replace(`[SEARCH_TERM]`,e);let r=await n.search(e);if(t!==E)return;let i=await Promise.all(r.results.map(e=>e.data()));if(t!==E)return;let a=i.map(T),o=a.reduce((e,t)=>e+t.count,0);b.textContent=o===0?h(`zero_results`).replace(`[SEARCH_TERM]`,e):h(o===1?`one_result`:`many_results`).replace(`[COUNT]`,String(o)).replace(`[SEARCH_TERM]`,e),x.innerHTML=a.map(e=>e.html).join(``)},O;_.addEventListener(`input`,()=>{let e=_.value.trim();if(v.hidden=!e,clearTimeout(O),!e){y.hidden=!0,x.innerHTML=``,b.textContent=``;return}y.hidden=!1,O=setTimeout(()=>D(e),d)}),_.addEventListener(`keydown`,e=>{e.key===`Escape`&&(_.value=``,_.dispatchEvent(new Event(`input`)),_.blur()),e.key===`Enter`&&e.preventDefault()}),v.addEventListener(`click`,()=>{_.value=``,_.dispatchEvent(new Event(`input`)),_.focus()}),v.textContent=h(`clear_search`)}};customElements.define(`site-search`,p);
@@ -1 +0,0 @@
1
- import"./starlight-toc.CTCQXEge.js";
@@ -1,3 +0,0 @@
1
- @layer starlight.base{:root,::backdrop{--sl-color-white:#fff;--sl-color-gray-1:#edeef3;--sl-color-gray-2:#c1c3c8;--sl-color-gray-3:#888c96;--sl-color-gray-4:#555962;--sl-color-gray-5:#353841;--sl-color-gray-6:#23262f;--sl-color-black:#17181c;--sl-hue-orange:41;--sl-color-orange-low:hsl(var(--sl-hue-orange), 39%, 22%);--sl-color-orange:hsl(var(--sl-hue-orange), 82%, 63%);--sl-color-orange-high:hsl(var(--sl-hue-orange), 82%, 87%);--sl-hue-green:101;--sl-color-green-low:hsl(var(--sl-hue-green), 39%, 22%);--sl-color-green:hsl(var(--sl-hue-green), 82%, 63%);--sl-color-green-high:hsl(var(--sl-hue-green), 82%, 80%);--sl-hue-blue:234;--sl-color-blue-low:hsl(var(--sl-hue-blue), 54%, 20%);--sl-color-blue:hsl(var(--sl-hue-blue), 100%, 60%);--sl-color-blue-high:hsl(var(--sl-hue-blue), 100%, 87%);--sl-hue-purple:281;--sl-color-purple-low:hsl(var(--sl-hue-purple), 39%, 22%);--sl-color-purple:hsl(var(--sl-hue-purple), 82%, 63%);--sl-color-purple-high:hsl(var(--sl-hue-purple), 82%, 89%);--sl-hue-red:339;--sl-color-red-low:hsl(var(--sl-hue-red), 39%, 22%);--sl-color-red:hsl(var(--sl-hue-red), 82%, 63%);--sl-color-red-high:hsl(var(--sl-hue-red), 82%, 87%);--sl-color-accent-low:#17264f;--sl-color-accent:#3369ff;--sl-color-accent-high:#b3c7ff;--sl-color-text:var(--sl-color-gray-2);--sl-color-text-accent:var(--sl-color-accent-high);--sl-color-text-invert:var(--sl-color-accent-low);--sl-color-bg:var(--sl-color-black);--sl-color-bg-nav:var(--sl-color-gray-6);--sl-color-bg-sidebar:var(--sl-color-gray-6);--sl-color-bg-inline-code:var(--sl-color-gray-5);--sl-color-bg-accent:var(--sl-color-accent-high);--sl-color-hairline-light:var(--sl-color-gray-5);--sl-color-hairline:var(--sl-color-gray-6);--sl-color-hairline-shade:var(--sl-color-black);--sl-color-backdrop-overlay:#16181da8;--sl-shadow-sm:0px 1px 1px #0000001f, 0px 2px 1px #0000003d;--sl-shadow-md:0px 8px 4px #00000014, 0px 5px 2px #00000014, 0px 3px 2px #0000001f, 0px 1px 1px #00000026;--sl-shadow-lg:0px 25px 7px #00000008, 0px 16px 6px #0000001a, 0px 9px 5px #16181d54, 0px 4px 4px #000000bf, 0px 4px 2px #00000040;--sl-text-2xs:.75rem;--sl-text-xs:.8125rem;--sl-text-sm:.875rem;--sl-text-base:1rem;--sl-text-lg:1.125rem;--sl-text-xl:1.25rem;--sl-text-2xl:1.5rem;--sl-text-3xl:1.8125rem;--sl-text-4xl:2.1875rem;--sl-text-5xl:2.625rem;--sl-text-6xl:4rem;--sl-text-body:var(--sl-text-base);--sl-text-body-sm:var(--sl-text-xs);--sl-text-code:var(--sl-text-sm);--sl-text-code-sm:var(--sl-text-xs);--sl-text-h1:var(--sl-text-4xl);--sl-text-h2:var(--sl-text-3xl);--sl-text-h3:var(--sl-text-2xl);--sl-text-h4:var(--sl-text-xl);--sl-text-h5:var(--sl-text-lg);--sl-line-height:1.75;--sl-line-height-headings:1.2;--sl-font-system:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--sl-font-system-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--__sl-font:var(--sl-font,var(--sl-font-system)), var(--sl-font-system);--__sl-font-mono:var(--sl-font-mono,var(--sl-font-system-mono)), var(--sl-font-system-mono);--sl-nav-height:3.5rem;--sl-nav-pad-x:1rem;--sl-nav-pad-y:.75rem;--sl-mobile-toc-height:3rem;--sl-sidebar-width:18.75rem;--sl-sidebar-pad-x:1rem;--sl-content-width:45rem;--sl-content-pad-x:1rem;--sl-content-gap-y:1rem;--sl-main-pad:0 0 3vh 0;--sl-menu-button-size:2rem;--sl-nav-gap:var(--sl-content-pad-x);--sl-outline-offset-inside:-.1875rem;--sl-z-index-toc:4;--sl-z-index-menu:5;--sl-z-index-navbar:10;--sl-z-index-skiplink:20}:root[data-theme=light],[data-theme=light] ::backdrop{--sl-color-white:#17181c;--sl-color-gray-1:#23262f;--sl-color-gray-2:#353841;--sl-color-gray-3:#555962;--sl-color-gray-4:#888c96;--sl-color-gray-5:#c1c3c8;--sl-color-gray-6:#edeef3;--sl-color-gray-7:#f6f7f9;--sl-color-black:#fff;--sl-color-orange-high:hsl(var(--sl-hue-orange), 80%, 25%);--sl-color-orange:hsl(var(--sl-hue-orange), 90%, 60%);--sl-color-orange-low:hsl(var(--sl-hue-orange), 90%, 88%);--sl-color-green-high:hsl(var(--sl-hue-green), 80%, 22%);--sl-color-green:hsl(var(--sl-hue-green), 90%, 46%);--sl-color-green-low:hsl(var(--sl-hue-green), 85%, 90%);--sl-color-blue-high:hsl(var(--sl-hue-blue), 80%, 30%);--sl-color-blue:hsl(var(--sl-hue-blue), 90%, 60%);--sl-color-blue-low:hsl(var(--sl-hue-blue), 88%, 90%);--sl-color-purple-high:hsl(var(--sl-hue-purple), 90%, 30%);--sl-color-purple:hsl(var(--sl-hue-purple), 90%, 60%);--sl-color-purple-low:hsl(var(--sl-hue-purple), 80%, 90%);--sl-color-red-high:hsl(var(--sl-hue-red), 80%, 30%);--sl-color-red:hsl(var(--sl-hue-red), 90%, 60%);--sl-color-red-low:hsl(var(--sl-hue-red), 80%, 90%);--sl-color-accent-high:#0f1c8a;--sl-color-accent:#3d50f5;--sl-color-accent-low:#cfd4fc;--sl-color-text-accent:var(--sl-color-accent);--sl-color-text-invert:var(--sl-color-black);--sl-color-bg-nav:var(--sl-color-gray-7);--sl-color-bg-sidebar:var(--sl-color-bg);--sl-color-bg-inline-code:var(--sl-color-gray-6);--sl-color-bg-accent:var(--sl-color-accent);--sl-color-hairline-light:var(--sl-color-gray-6);--sl-color-hairline-shade:var(--sl-color-gray-6);--sl-color-backdrop-overlay:#545864a8;--sl-shadow-sm:0px 1px 1px #0000000f, 0px 2px 1px #0000000f;--sl-shadow-md:0px 8px 4px #00000008, 0px 5px 2px #00000008, 0px 3px 2px #0000000f, 0px 1px 1px #0000000f;--sl-shadow-lg:0px 25px 7px #00000003, 0px 16px 6px #00000008, 0px 9px 5px #16181d14, 0px 4px 4px #00000029, 0px 4px 2px #0000000a}@media (width>=50em){:root{--sl-nav-height:4rem;--sl-nav-pad-x:1.5rem;--sl-text-h1:var(--sl-text-5xl);--sl-text-h2:var(--sl-text-4xl);--sl-text-h3:var(--sl-text-3xl);--sl-text-h4:var(--sl-text-2xl)}}@media (width>=72rem){:root{--sl-content-pad-x:1.5rem;--sl-mobile-toc-height:0rem}}}@layer starlight.reset{*,:before,:after{box-sizing:border-box}*{margin:0}html{color-scheme:dark;accent-color:var(--sl-color-accent);text-size-adjust:100%}html[data-theme=light]{color-scheme:light}body{font-family:var(--__sl-font);line-height:var(--sl-line-height);-webkit-font-smoothing:antialiased;color:var(--sl-color-text);background-color:var(--sl-color-bg)}[lang]:where(:lang(zh),:lang(ja)){text-autospace:normal}[lang]:where(:not(:lang(zh),:lang(ja))){text-autospace:initial}pre,code,samp,kbd{text-autospace:no-autospace}input,button,textarea,select{font:inherit}p,h1,h2,h3,h4,h5,h6,code{overflow-wrap:break-word}code{font-family:var(--__sl-font-mono)}}@layer starlight.core{.sl-banner:where(.astro-ofbg3qve){--__sl-banner-text:var(--sl-color-banner-text,var(--sl-color-text-invert));padding:var(--sl-nav-pad-y) var(--sl-nav-pad-x);background-color:var(--sl-color-banner-bg,var(--sl-color-bg-accent));color:var(--__sl-banner-text);line-height:var(--sl-line-height-headings);text-align:center;text-wrap:balance;box-shadow:var(--sl-shadow-sm)}.sl-banner:where(.astro-ofbg3qve) a{color:var(--__sl-banner-text)}.content-panel:where(.astro-a7po4psb){padding:1.5rem var(--sl-content-pad-x)}.content-panel:where(.astro-a7po4psb)+.content-panel:where(.astro-a7po4psb){border-top:1px solid var(--sl-color-hairline)}.sl-container:where(.astro-a7po4psb){max-width:var(--sl-content-width)}.sl-container:where(.astro-a7po4psb)>*+*{margin-top:1.5rem}@media (width>=72rem){.sl-container:where(.astro-a7po4psb){margin-inline:var(--sl-content-margin-inline,auto)}}p:where(.astro-gsljcgkv){border:1px solid var(--sl-color-orange);background-color:var(--sl-color-orange-low);color:var(--sl-color-orange-high);width:max-content;max-width:100%;font-size:var(--sl-text-body-sm);line-height:var(--sl-line-height-headings);text-align:start;align-items:center;gap:.75em;padding:.75em 1em}a:where(.astro-qlekgd3o){color:var(--sl-color-gray-3);align-items:center;gap:.5rem;text-decoration:none}a:where(.astro-qlekgd3o):hover{color:var(--sl-color-white)}.pagination-links:where(.astro-b5raizh3){grid-template-columns:repeat(auto-fit,minmax(min(18rem,100%),1fr));gap:1rem;display:grid}a:where(.astro-b5raizh3){border:1px solid var(--sl-color-gray-5);width:100%;color:var(--sl-color-gray-2);box-shadow:var(--sl-shadow-md);overflow-wrap:anywhere;border-radius:.5rem;flex-grow:1;flex-basis:calc(50% - .5rem);justify-content:flex-start;align-items:center;gap:.5rem;padding:1rem;text-decoration:none;display:flex}:where(.astro-b5raizh3)[rel=next]{text-align:end;flex-direction:row-reverse;justify-content:end}a:where(.astro-b5raizh3):hover{border-color:var(--sl-color-gray-2)}.link-title:where(.astro-b5raizh3){color:var(--sl-color-white);font-size:var(--sl-text-2xl);line-height:var(--sl-line-height-headings)}svg:where(.astro-b5raizh3){flex-shrink:0}footer:where(.astro-ddtxxk7k){flex-direction:column;gap:1.5rem}.meta:where(.astro-ddtxxk7k){font-size:var(--sl-text-sm);color:var(--sl-color-gray-3);flex-wrap:wrap;justify-content:space-between;gap:.75rem 3rem;margin-top:3rem}.meta:where(.astro-ddtxxk7k)>p:only-child{margin-inline-start:auto}.kudos:where(.astro-ddtxxk7k){font-size:var(--sl-text-xs);color:var(--sl-color-gray-3);align-items:center;gap:.5em;margin:1.5rem auto;text-decoration:none}.kudos:where(.astro-ddtxxk7k):hover{color:var(--sl-color-white)}label:where(.astro-2z5xp7gb){--sl-label-icon-size:.875rem;--sl-caret-size:1.25rem;--sl-inline-padding:.5rem;color:var(--sl-color-gray-2);align-items:center;gap:.25rem;display:flex;position:relative}label:where(.astro-2z5xp7gb):hover{color:var(--sl-color-white)}.icon:where(.astro-2z5xp7gb){pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}select:where(.astro-2z5xp7gb){padding-block:.625rem;padding-inline:calc(var(--sl-label-icon-size) + var(--sl-inline-padding) + .25rem) calc(var(--sl-caret-size) + var(--sl-inline-padding) + .25rem);margin-inline:calc(var(--sl-inline-padding) * -1);width:calc(var(--sl-select-width) + var(--sl-inline-padding) * 2);text-overflow:ellipsis;color:inherit;cursor:pointer;appearance:none;background-color:#0000;border:0}option:where(.astro-2z5xp7gb){background-color:var(--sl-color-bg-nav);color:var(--sl-color-gray-1)}@media (width>=50rem){select:where(.astro-2z5xp7gb){font-size:var(--sl-text-sm)}}site-search:where(.astro-ac66eqjo){display:contents}button:where(.astro-ac66eqjo)[data-open-modal]{color:var(--sl-color-gray-1);cursor:pointer;height:2.5rem;font-size:var(--sl-text-xl);background-color:#0000;border:0;align-items:center;gap:.5rem;display:flex}@media (width>=50rem){button:where(.astro-ac66eqjo)[data-open-modal]{border:1px solid var(--sl-color-gray-5);background-color:var(--sl-color-black);color:var(--sl-color-gray-2);font-size:var(--sl-text-sm);border-radius:.5rem;width:100%;max-width:22rem;padding-inline:.75rem .5rem}button:where(.astro-ac66eqjo)[data-open-modal]:hover{border-color:var(--sl-color-gray-2);color:var(--sl-color-white)}button:where(.astro-ac66eqjo)[data-open-modal]>:where(.astro-ac66eqjo):last-child{margin-inline-start:auto}}button:where(.astro-ac66eqjo)>kbd:where(.astro-ac66eqjo){font-size:var(--sl-text-2xs);background-color:var(--sl-color-gray-6);border-radius:.25rem;gap:.25em;padding-inline:.375rem}kbd:where(.astro-ac66eqjo){font-family:var(--__sl-font)}dialog:where(.astro-ac66eqjo){background-color:var(--sl-color-gray-6);border:1px solid var(--sl-color-gray-5);width:100%;max-width:100%;height:100%;max-height:100%;box-shadow:var(--sl-shadow-lg);margin:0}dialog:where(.astro-ac66eqjo)[open]{display:flex}dialog:where(.astro-ac66eqjo)::backdrop{background-color:var(--sl-color-backdrop-overlay);backdrop-filter:blur(.25rem)}.dialog-frame:where(.astro-ac66eqjo){flex-direction:column;flex-grow:1;gap:1rem;padding:1rem;position:relative;overflow:auto}button:where(.astro-ac66eqjo)[data-close-modal]{z-index:1;cursor:pointer;height:3.25rem;color:var(--sl-color-text-accent);background:0 0;border:0;align-self:flex-end;align-items:center;padding:.25rem;position:absolute}@media (width>=50rem){dialog:where(.astro-ac66eqjo){border-radius:.5rem;width:90%;max-width:40rem;height:max-content;min-height:15rem;max-height:calc(100% - 8rem);margin:4rem auto auto}.dialog-frame:where(.astro-ac66eqjo){padding:1.5rem}}[data-search-modal-open]{overflow:hidden}#starlight__search-form{align-items:center;display:flex;position:relative}#starlight__search-input{width:100%;font-family:var(--__sl-font);font-size:var(--sl-text-base);color:var(--sl-color-white);background-color:var(--sl-color-black);border:1px solid var(--sl-color-gray-5);border-radius:.5rem;padding:.75rem 1rem}#starlight__search-input:focus{border-color:var(--sl-color-accent);outline:none}#starlight__search-clear{font-size:var(--sl-text-xs);color:var(--sl-color-gray-2);cursor:pointer;background:0 0;border:0;padding:.25rem .5rem;position:absolute;inset-inline-end:.5rem}#starlight__search-clear:hover{color:var(--sl-color-white)}#starlight__search-results-area{margin-top:1rem}#starlight__search-message{font-size:var(--sl-text-sm);color:var(--sl-color-gray-2);margin:0 0 .75rem}#starlight__search-results{flex-direction:column;gap:1.25rem;margin:0;padding:0;list-style:none;display:flex}.sl-search-result{border-top:1px solid var(--sl-color-gray-5);padding-top:1rem}.sl-search-result:first-child{border-top:0;padding-top:0}.sl-search-result__link{color:var(--sl-color-white);font-weight:600;text-decoration:none}.sl-search-result__link:hover{text-decoration:underline}.sl-search-result__link--page{font-size:var(--sl-text-lg)}.sl-search-result__excerpt{font-size:var(--sl-text-sm);color:var(--sl-color-gray-2);overflow-wrap:anywhere;margin:.25rem 0 0}.sl-search-result__entries{flex-direction:column;gap:.75rem;margin:.75rem 0 0;padding:0;list-style:none;display:flex}.sl-search-result__entry--nested{border-inline-start:2px solid var(--sl-color-gray-5);padding-inline-start:1rem}.sl-search-result__entry--nested .sl-search-result__link{font-size:var(--sl-text-sm);font-weight:500}mark{color:inherit;text-decoration:underline;text-decoration-color:var(--sl-color-accent);background-color:#0000;font-weight:700}.site-title:where(.astro-6rvad3va){align-items:center;gap:var(--sl-nav-gap);font-size:var(--sl-text-h4);color:var(--sl-color-text-accent);white-space:nowrap;min-width:0;font-weight:600;text-decoration:none}span:where(.astro-6rvad3va){overflow:hidden}img:where(.astro-6rvad3va){height:calc(var(--sl-nav-height) - 2 * var(--sl-nav-pad-y));object-fit:contain;object-position:0 50%;width:auto;max-width:100%}a:where(.astro-n2mnl6yq){color:var(--sl-color-text-accent);margin:-.5em;padding:.5em}a:where(.astro-n2mnl6yq):hover{color:var(--sl-color-white)}.header:where(.astro-by6fddyj){gap:var(--sl-nav-gap);justify-content:space-between;align-items:center;height:100%;display:flex}.title-wrapper:where(.astro-by6fddyj){min-width:0;margin:-.25rem;padding:.25rem;overflow:clip}.right-group:where(.astro-by6fddyj),.social-icons:where(.astro-by6fddyj){align-items:center;gap:1rem}.social-icons:where(.astro-by6fddyj):after{content:"";border-inline-end:1px solid var(--sl-color-gray-5);height:2rem}@media (width>=50rem){:root[data-has-sidebar]{--__sidebar-pad:calc(2 * var(--sl-nav-pad-x))}:root:not([data-has-toc]){--__toc-width:0rem}.header:where(.astro-by6fddyj){--__sidebar-width:max(0rem, var(--sl-content-inline-start,0rem) - var(--sl-nav-pad-x));--__main-column-fr:calc(( 100% + var(--__sidebar-pad,0rem) - var(--__toc-width,var(--sl-sidebar-width)) - (2 * var(--__toc-width,var(--sl-nav-pad-x))) - var(--sl-content-inline-start,0rem) - var(--sl-content-width) ) / 2);grid-template-columns: minmax(calc(var(--__sidebar-width) + max(0rem, var(--__main-column-fr) - var(--sl-nav-gap))), auto) 1fr auto;align-content:center;display:grid}}.hero:where(.astro-2qjbuh7f){grid-template-columns:100%;align-items:center;gap:1rem;padding-bottom:1rem;display:grid}.hero:where(.astro-2qjbuh7f)>img:where(.astro-2qjbuh7f),.hero:where(.astro-2qjbuh7f)>.hero-html:where(.astro-2qjbuh7f){object-fit:contain;width:min(70%,20rem);height:auto;margin-inline:auto}.stack:where(.astro-2qjbuh7f){text-align:center;flex-direction:column;gap:clamp(1.5rem,1.5rem + 1vw,2rem)}.copy:where(.astro-2qjbuh7f){flex-direction:column;align-items:center;gap:1rem}.copy:where(.astro-2qjbuh7f)>:where(.astro-2qjbuh7f){max-width:50ch}h1:where(.astro-2qjbuh7f){font-size:clamp(var(--sl-text-3xl), calc(.25rem + 5vw), var(--sl-text-6xl));line-height:var(--sl-line-height-headings);color:var(--sl-color-white);font-weight:600}.tagline:where(.astro-2qjbuh7f){font-size:clamp(var(--sl-text-base), calc(.0625rem + 2vw), var(--sl-text-xl));color:var(--sl-color-gray-2)}.actions:where(.astro-2qjbuh7f){flex-wrap:wrap;justify-content:center;gap:1rem 2rem}@media (width>=50rem){.hero:where(.astro-2qjbuh7f){grid-template-columns:7fr 4fr;gap:3%;padding-block:clamp(2.5rem,1rem + 10vmin,10rem)}.hero:where(.astro-2qjbuh7f)>img:where(.astro-2qjbuh7f),.hero:where(.astro-2qjbuh7f)>.hero-html:where(.astro-2qjbuh7f){order:2;width:min(100%,25rem)}.stack:where(.astro-2qjbuh7f){text-align:start}.copy:where(.astro-2qjbuh7f){align-items:flex-start}.actions:where(.astro-2qjbuh7f){justify-content:flex-start}}button:where(.astro-r2osgdlg){top:calc((var(--sl-nav-height) - var(--sl-menu-button-size)) / 2);z-index:var(--sl-z-index-navbar);width:var(--sl-menu-button-size);height:var(--sl-menu-button-size);background-color:var(--sl-color-white);color:var(--sl-color-black);box-shadow:var(--sl-shadow-md);cursor:pointer;border:0;border-radius:50%;padding:.5rem;position:fixed;inset-inline-end:var(--sl-nav-pad-x)}button:where(.astro-r2osgdlg):has(~:popover-open){background-color:var(--sl-color-gray-2);box-shadow:none}button:where(.astro-r2osgdlg):has(~:popover-open) .open-menu:where(.astro-r2osgdlg){display:none}button:where(.astro-r2osgdlg):not(:has(~:popover-open)) .close-menu:where(.astro-r2osgdlg){display:none}[data-theme=light] button:where(.astro-r2osgdlg){background-color:var(--sl-color-black);color:var(--sl-color-white)}[data-theme=light] button:where(.astro-r2osgdlg):has(~:popover-open){background-color:var(--sl-color-gray-5)}body:has(#starlight__sidebar:popover-open){overflow:hidden}@media (width>=50rem){body:has(#starlight__sidebar:popover-open){overflow:auto}}.page:where(.astro-yntsjkba){flex-direction:column;min-height:100vh}.header:where(.astro-yntsjkba){z-index:var(--sl-z-index-navbar);width:100%;height:var(--sl-nav-height);border-bottom:1px solid var(--sl-color-hairline-shade);padding:var(--sl-nav-pad-y) var(--sl-nav-pad-x);background-color:var(--sl-color-bg-nav);padding-inline-end:var(--sl-nav-pad-x);position:fixed;inset-block-start:0;inset-inline-start:0}[data-has-sidebar] .header:where(.astro-yntsjkba){padding-inline-end:calc(var(--sl-nav-gap) + var(--sl-nav-pad-x) + var(--sl-menu-button-size))}.sidebar-pane:where(.astro-yntsjkba){border:unset;padding:unset;height:unset;color:unset;z-index:var(--sl-z-index-menu);inset-block:var(--sl-nav-height) 0;background-color:var(--sl-color-black);scrollbar-gutter:stable;width:100%;position:fixed;inset-inline-start:0;overflow-y:auto}.sidebar-content:where(.astro-yntsjkba){height:100%;min-height:max-content;padding:1rem var(--sl-sidebar-pad-x) 0;flex-direction:column;gap:1rem}@media (width>=50rem){.sidebar-content:where(.astro-yntsjkba):after{content:"";padding-bottom:1px}}.main-frame:where(.astro-yntsjkba){padding-top:calc(var(--sl-nav-height) + var(--sl-mobile-toc-height));padding-inline-start:var(--sl-content-inline-start)}@media (width>=50rem){[data-has-sidebar] .header:where(.astro-yntsjkba){padding-inline-end:var(--sl-nav-pad-x)}.sidebar-pane:where(.astro-yntsjkba){width:var(--sl-sidebar-width);background-color:var(--sl-color-bg-sidebar);border-inline-end:1px solid var(--sl-color-hairline-shade);display:block}}ul:where(.astro-jugkfwgx){padding:0;list-style:none}a:where(.astro-jugkfwgx){--pad-inline:.5rem;padding-block:.25rem;padding-inline:calc(1rem * var(--depth) + var(--pad-inline)) var(--pad-inline);border-radius:.25rem;line-height:1.25;display:block}a:where(.astro-jugkfwgx)[aria-current=true]{color:var(--sl-color-text-accent)}.isMobile:where(.astro-jugkfwgx) a:where(.astro-jugkfwgx){--pad-inline:1rem;justify-content:space-between;gap:var(--pad-inline);border-top:1px solid var(--sl-color-gray-6);color:var(--sl-color-text);font-size:var(--sl-text-sm);outline-offset:var(--sl-outline-offset-inside);border-radius:0;padding-block:.5rem;text-decoration:none;display:flex}.isMobile:where(.astro-jugkfwgx):first-child>li:where(.astro-jugkfwgx):first-child>a:where(.astro-jugkfwgx){border-top:0}.isMobile:where(.astro-jugkfwgx) a:where(.astro-jugkfwgx)[aria-current=true],.isMobile:where(.astro-jugkfwgx) a:where(.astro-jugkfwgx)[aria-current=true]:hover,.isMobile:where(.astro-jugkfwgx) a:where(.astro-jugkfwgx)[aria-current=true]:focus{color:var(--sl-color-white);background-color:unset}.isMobile:where(.astro-jugkfwgx) a:where(.astro-jugkfwgx)[aria-current=true]:after{content:"";background-color:var(--sl-color-text-accent);flex-shrink:0;width:1rem;mask-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxNCAxNCc+PHBhdGggZD0nTTEwLjkxNCA0LjIwNmEuNTgzLjU4MyAwIDAgMC0uODI4IDBMNS43NCA4LjU1NyAzLjkxNCA2LjcyNmEuNTk2LjU5NiAwIDAgMC0uODI4Ljg1N2wyLjI0IDIuMjRhLjU4My41ODMgMCAwIDAgLjgyOCAwbDQuNzYtNC43NmEuNTgzLjU4MyAwIDAgMCAwLS44NTdaJy8+PC9zdmc+Cg==);mask-repeat:no-repeat}nav:where(.astro-66cqc7ze){z-index:var(--sl-z-index-toc);top:calc(var(--sl-nav-height) - 1px);border-top:1px solid var(--sl-color-gray-5);background-color:var(--sl-color-bg-nav);position:fixed;inset-inline:0}@media (width>=50rem){nav:where(.astro-66cqc7ze){inset-inline-start:var(--sl-content-inline-start,0)}}summary:where(.astro-66cqc7ze){height:var(--sl-mobile-toc-height);border-bottom:1px solid var(--sl-color-hairline-shade);font-size:var(--sl-text-xs);outline-offset:var(--sl-outline-offset-inside);align-items:center;gap:.5rem;padding:.5rem 1rem}summary:where(.astro-66cqc7ze)::marker{display:none}summary:where(.astro-66cqc7ze)::-webkit-details-marker{display:none}.toggle:where(.astro-66cqc7ze){border:1px solid var(--sl-color-gray-5);background-color:var(--sl-color-black);user-select:none;cursor:pointer;border-radius:.5rem;flex-shrink:0;justify-content:space-between;align-items:center;gap:1rem;padding-block:.5rem;padding-inline:.75rem .5rem;line-height:1}details:where(.astro-66cqc7ze)[open] .toggle:where(.astro-66cqc7ze){color:var(--sl-color-white);border-color:var(--sl-color-accent)}details:where(.astro-66cqc7ze) .toggle:where(.astro-66cqc7ze):hover{color:var(--sl-color-white);border-color:var(--sl-color-gray-2)}[dir=rtl] .caret:where(.astro-66cqc7ze){transform:rotate(180deg)}details:where(.astro-66cqc7ze)[open] .caret:where(.astro-66cqc7ze){transform:rotate(90deg)}.display-current:where(.astro-66cqc7ze){white-space:nowrap;text-overflow:ellipsis;color:var(--sl-color-white);overflow:hidden}.dropdown:where(.astro-66cqc7ze){--border-top:1px;margin-top:calc(-1 * var(--border-top));border:var(--border-top) solid var(--sl-color-gray-6);border-top-color:var(--sl-color-hairline-shade);max-height:calc(85vh - var(--sl-nav-height) - var(--sl-mobile-toc-height));background-color:var(--sl-color-black);box-shadow:var(--sl-shadow-md);overscroll-behavior:contain;overflow-y:auto}.right-sidebar-panel:where(.astro-qok35upx){padding:1rem var(--sl-sidebar-pad-x)}.sl-container:where(.astro-qok35upx){width:calc(var(--sl-sidebar-width) - 2 * var(--sl-sidebar-pad-x))}.right-sidebar-panel:where(.astro-qok35upx) h2{color:var(--sl-color-white);font-size:var(--sl-text-h5);font-weight:600;line-height:var(--sl-line-height-headings);margin-bottom:.5rem}.right-sidebar-panel:where(.astro-qok35upx) :where(a){font-size:var(--sl-text-xs);color:var(--sl-color-gray-3);overflow-wrap:anywhere;text-decoration:none;display:block}.right-sidebar-panel:where(.astro-qok35upx) :where(a):hover{color:var(--sl-color-white)}@media (width>=72rem){.sl-container:where(.astro-qok35upx){max-width:calc(( ( 100vw - var(--sl-sidebar-width) - 2 * var(--sl-content-pad-x) - 2 * var(--sl-sidebar-pad-x) ) * .25 ))}}h1:where(.astro-bebwqqxs){font-size:var(--sl-text-h1);line-height:var(--sl-line-height-headings);color:var(--sl-color-white);margin-top:1rem;font-weight:600}sl-sidebar-state-persist:where(.astro-ipdry5cl){display:contents}.social-icons:where(.astro-p4azlveh){align-items:center;gap:1rem;margin-inline-end:auto;padding-block:1rem;display:flex}.social-icons:where(.astro-p4azlveh):empty{display:none}.mobile-preferences:where(.astro-p4azlveh){border-top:1px solid var(--sl-color-gray-6);flex-wrap:wrap;justify-content:space-between;column-gap:1rem;padding:.5rem 0}ul:where(.astro-wv7whodv){--sl-sidebar-item-padding-inline:.5rem;padding:0;list-style:none}li:where(.astro-wv7whodv){overflow-wrap:anywhere}.top-level:where(.astro-wv7whodv)>li:where(.astro-wv7whodv)+li:where(.astro-wv7whodv){margin-top:.75rem}.large:where(.astro-wv7whodv){font-size:var(--sl-text-lg);color:var(--sl-color-white);font-weight:600}a:where(.astro-wv7whodv){color:var(--sl-color-gray-2);padding:.3em var(--sl-sidebar-item-padding-inline);border-radius:.25rem;line-height:1.4;text-decoration:none;display:block}a:where(.astro-wv7whodv):hover,a:where(.astro-wv7whodv):focus{color:var(--sl-color-white)}:where(.astro-wv7whodv)[aria-current=page],:where(.astro-wv7whodv)[aria-current=page]:hover,:where(.astro-wv7whodv)[aria-current=page]:focus{color:var(--sl-color-text-invert);background-color:var(--sl-color-text-accent);font-weight:600}.page-toc:where(.astro-wv7whodv){border-inline-start:1px solid var(--sl-color-hairline-light);margin-inline-start:var(--sl-sidebar-item-padding-inline);margin-top:.25rem;padding-inline-start:var(--sl-sidebar-item-padding-inline)}.page-toc:where(.astro-wv7whodv) a:where(.astro-wv7whodv){font-size:var(--sl-text-xs);color:var(--sl-color-gray-3)}.page-toc:where(.astro-wv7whodv) .depth-3:where(.astro-wv7whodv) a:where(.astro-wv7whodv){padding-inline-start:1rem}@media (width>=50rem){.top-level:where(.astro-wv7whodv)>li:where(.astro-wv7whodv)+li:where(.astro-wv7whodv){margin-top:.5rem}.large:where(.astro-wv7whodv){font-size:var(--sl-text-base)}}a:where(.astro-qb7clj6f){clip:rect(0, 0, 0, 0);top:.75rem;position:fixed;inset-inline-start:.75rem}a:where(.astro-qb7clj6f):focus{clip:unset;z-index:var(--sl-z-index-skiplink);color:var(--sl-color-text-invert);background-color:var(--sl-color-text-accent);box-shadow:var(--sl-shadow-lg);padding:.5rem 1rem;text-decoration:none;display:block}.main-pane:where(.astro-lrzkfocr){isolation:isolate}@media (width>=72rem){.right-sidebar-container:where(.astro-lrzkfocr){width:max(var(--sl-sidebar-width), calc(var(--sl-sidebar-width) + (100% - var(--sl-content-width) - var(--sl-sidebar-width)) / 2));order:2;position:relative}.right-sidebar:where(.astro-lrzkfocr){border-inline-start:1px solid var(--sl-color-hairline);padding-top:var(--sl-nav-height);scrollbar-width:none;width:100%;height:100vh;position:fixed;top:0;overflow-y:auto}.main-pane:where(.astro-lrzkfocr){width:100%}[data-has-sidebar][data-has-toc] .main-pane:where(.astro-lrzkfocr){--sl-content-margin-inline:auto 0;width:min(calc(100% - var(--sl-sidebar-width)), calc(var(--sl-content-width) + (100% - var(--sl-content-width) - var(--sl-sidebar-width)) / 2));order:1}}}@layer starlight.content{.sl-markdown-content .sl-heading-wrapper{--sl-anchor-icon-size:.8275em;--sl-anchor-icon-gap:.25em;--sl-anchor-icon-space:calc(var(--sl-anchor-icon-size) + var(--sl-anchor-icon-gap));line-height:var(--sl-line-height-headings)}.sl-markdown-content .sl-heading-wrapper:has(>:first-child:is(.sr-only,[hidden])){display:contents}.sl-markdown-content :not(h1,h2,h3,h4,h5,h6,.sl-heading-wrapper)+.sl-heading-wrapper{margin-top:1.5em}.sl-markdown-content .sl-heading-wrapper.level-h1{font-size:var(--sl-text-h1)}.sl-markdown-content .sl-heading-wrapper.level-h2{font-size:var(--sl-text-h2)}.sl-markdown-content .sl-heading-wrapper.level-h3{font-size:var(--sl-text-h3)}.sl-markdown-content .sl-heading-wrapper.level-h4{font-size:var(--sl-text-h4)}.sl-markdown-content .sl-heading-wrapper.level-h5{font-size:var(--sl-text-h5)}.sl-markdown-content .sl-heading-wrapper.level-h6{font-size:var(--sl-text-h6)}.sl-markdown-content .sl-heading-wrapper>:first-child:not([hidden]){padding-inline-end:var(--sl-anchor-icon-space);display:inline}.sl-markdown-content .sl-anchor-link{user-select:none;margin-inline-start:calc(-1 * var(--sl-anchor-icon-size));display:inline-flex;position:relative}.sl-markdown-content .sl-heading-wrapper:has(>:first-child:is(.sr-only,[hidden]))>.sl-anchor-link{display:none}.sl-markdown-content .sl-anchor-link:after{content:"";position:absolute;inset:-.25rem -.5rem}.sl-markdown-content .sl-anchor-icon>svg{width:var(--sl-anchor-icon-size);vertical-align:top;transform:translateY(calc((var(--sl-line-height-headings) * 1em - var(--sl-anchor-icon-size)) / 2));display:inline}@media (hover:hover){.sl-markdown-content .sl-anchor-link{opacity:0}.sl-markdown-content .sl-anchor-link:focus,.sl-markdown-content .sl-heading-wrapper:hover .sl-anchor-link{opacity:1}}.sl-markdown-content :not(a,strong,em,del,span,input,code,br)+:not(a,strong,em,del,span,input,code,br,:where(.not-content *)),.sl-markdown-content :not(a,strong,em,del,span,input,code,br)+:is(astro-island,astro-slot)>:not(a,strong,em,del,span,input,code,br,:where(.not-content *)):first-child{margin-top:var(--sl-content-gap-y)}.sl-markdown-content :not(h1,h2,h3,h4,h5,h6)+:is(h1,h2,h3,h4,h5,h6):not(:where(.not-content *)){margin-top:1.5em}.sl-markdown-content li+li:not(:where(.not-content *)),.sl-markdown-content dt+dt:not(:where(.not-content *)),.sl-markdown-content dt+dd:not(:where(.not-content *)),.sl-markdown-content dd+dd:not(:where(.not-content *)){margin-top:.25rem}.sl-markdown-content li:not(:where(.not-content *)){overflow-wrap:anywhere}.sl-markdown-content :is(ol,ul):has(>li>:not(a,strong,em,del,span,input,code,br,script,ol,ul))>li>:is(:last-child:not(a,strong,em,del,span,input,code,br,script,:where(.not-content *)),:not(script):has(~script:last-child):not(:has(~:not(script)))){margin-bottom:1.25rem}.sl-markdown-content dt:not(:where(.not-content *)){font-weight:700}.sl-markdown-content dd:not(:where(.not-content *)){padding-inline-start:1rem}.sl-markdown-content :is(h1,h2,h3,h4,h5,h6):not(:where(.not-content *)){color:var(--sl-color-white);line-height:var(--sl-line-height-headings);font-weight:600}.sl-markdown-content :is(img,picture,video,canvas,svg,iframe):not(:where(.not-content *)){max-width:100%;height:auto;display:block}.sl-markdown-content h1:not(:where(.not-content *)){font-size:var(--sl-text-h1)}.sl-markdown-content h2:not(:where(.not-content *)){font-size:var(--sl-text-h2)}.sl-markdown-content h3:not(:where(.not-content *)){font-size:var(--sl-text-h3)}.sl-markdown-content h4:not(:where(.not-content *)){font-size:var(--sl-text-h4)}.sl-markdown-content h5:not(:where(.not-content *)){font-size:var(--sl-text-h5)}.sl-markdown-content h6:not(:where(.not-content *)){font-size:var(--sl-text-h6)}.sl-markdown-content a:not(:where(.not-content *)){color:var(--sl-color-text-accent)}.sl-markdown-content a:hover:not(:where(.not-content *)){color:var(--sl-color-white)}.sl-markdown-content code:not(:where(.not-content *)){background-color:var(--sl-color-bg-inline-code);font-size:var(--sl-text-code-sm);margin-block:-.125rem;padding:.125rem .375rem}.sl-markdown-content :is(h1,h2,h3,h4,h5,h6) code{font-size:inherit}.sl-markdown-content pre:not(:where(.not-content *)){border:1px solid var(--sl-color-gray-5);font-size:var(--sl-text-code);tab-size:2;padding:.75rem 1rem}.sl-markdown-content pre code:not(:where(.not-content *)){all:unset;font-family:var(--__sl-font-mono)}.sl-markdown-content blockquote:not(:where(.not-content *)){border-inline-start:1px solid var(--sl-color-gray-5);padding-inline-start:1rem}.sl-markdown-content table:not(:where(.not-content *)){border-spacing:0;display:block;overflow:auto}.sl-markdown-content :is(th,td):not(:where(.not-content *)){border-bottom:1px solid var(--sl-color-gray-5);vertical-align:baseline;padding:.5rem 1rem}.sl-markdown-content :is(th:first-child,td:first-child):not(:where(.not-content *)){padding-inline-start:0}.sl-markdown-content :is(th:last-child,td:last-child):not(:where(.not-content *)){padding-inline-end:0}.sl-markdown-content th:not(:where(.not-content *)){color:var(--sl-color-white);font-weight:600}.sl-markdown-content th:not([align]):not(:where(.not-content *)){text-align:start}.sl-markdown-content .starlight-aside :is(th,td,hr,blockquote):not(:where(.not-content *)){border-color:var(--sl-color-gray-4)}@supports (border-color:color-mix(in srgb, var(--sl-color-asides-text-accent) 30%, transparent)
2
- ){.sl-markdown-content .starlight-aside :is(th,td,hr,blockquote):not(:where(.not-content *)){border-color:color-mix(in srgb, var(--sl-color-asides-text-accent) 30%, transparent)}}@supports (border-color:color-mix(in srgb, var(--sl-color-asides-text-accent) 12%, transparent)
3
- ){.sl-markdown-content .starlight-aside code:not(:where(.not-content *)){background-color:color-mix(in srgb, var(--sl-color-asides-text-accent) 12%, transparent)}}.sl-markdown-content hr:not(:where(.not-content *)){border:0;border-bottom:1px solid var(--sl-color-hairline)}.sl-markdown-content details:not(:where(.not-content *)){--sl-details-border-color:var(--sl-color-gray-5);--sl-details-border-color--hover:var(--sl-color-text-accent);border-inline-start:2px solid var(--sl-details-border-color);padding-inline-start:1rem}.sl-markdown-content details:not([open]):hover:not(:where(.not-content *)),.sl-markdown-content details:has(>summary:hover):not(:where(.not-content *)){border-color:var(--sl-details-border-color--hover)}.sl-markdown-content summary:not(:where(.not-content *)){color:var(--sl-color-white);cursor:pointer;margin-inline-start:-.5rem;padding-inline-start:.5rem;font-weight:600;display:block}.sl-markdown-content details[open]>summary:not(:where(.not-content *)){margin-bottom:1rem}.sl-markdown-content summary:not(:where(.not-content *))::marker{display:none}.sl-markdown-content summary:not(:where(.not-content *))::-webkit-details-marker{display:none}.sl-markdown-content summary:not(:where(.not-content *)):before{--sl-details-marker-size:1.25rem;content:"";height:var(--sl-details-marker-size);width:var(--sl-details-marker-size);margin-inline:calc((var(--sl-details-marker-size) / 4) * -1) .25rem;vertical-align:middle;background-color:currentColor;display:inline-block;mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M14.8 11.3 10.6 7a1 1 0 1 0-1.4 1.5l3.5 3.5-3.5 3.5a1 1 0 0 0 0 1.4 1 1 0 0 0 .7.3 1 1 0 0 0 .7-.3l4.2-4.2a1 1 0 0 0 0-1.4Z'/%3E%3C/svg%3E%0A");mask-repeat:no-repeat}@media (prefers-reduced-motion:no-preference){.sl-markdown-content summary:not(:where(.not-content *)):before{transition:transform .2s ease-in-out}}.sl-markdown-content details[open]>summary:not(:where(.not-content *)):before{transform:rotate(90deg)}[dir=rtl] .sl-markdown-content summary:not(:where(.not-content *)):before,.sl-markdown-content [dir=rtl] summary:not(:where(.not-content *)):before{transform:rotate(180deg)}.sl-markdown-content summary:not(:where(.not-content *)) p:only-child{display:inline}.sl-markdown-content .starlight-aside details:not(:where(.not-content *)){--sl-details-border-color:var(--sl-color-asides-border);--sl-details-border-color--hover:var(--sl-color-asides-text-accent)}}@layer starlight.components{.starlight-aside{border-inline-start:.25rem solid var(--sl-color-asides-border);color:var(--sl-color-white);padding:1rem}.starlight-aside--note{--sl-color-asides-text-accent:var(--sl-color-blue-high);--sl-color-asides-border:var(--sl-color-blue);background-color:var(--sl-color-blue-low)}.starlight-aside--tip{--sl-color-asides-text-accent:var(--sl-color-purple-high);--sl-color-asides-border:var(--sl-color-purple);background-color:var(--sl-color-purple-low)}.starlight-aside--caution{--sl-color-asides-text-accent:var(--sl-color-orange-high);--sl-color-asides-border:var(--sl-color-orange);background-color:var(--sl-color-orange-low)}.starlight-aside--danger{--sl-color-asides-text-accent:var(--sl-color-red-high);--sl-color-asides-border:var(--sl-color-red);background-color:var(--sl-color-red-low)}.starlight-aside__title{font-size:var(--sl-text-h5);font-weight:600;line-height:var(--sl-line-height-headings);color:var(--sl-color-asides-text-accent);align-items:center;gap:.5rem;display:flex}.starlight-aside__icon{width:1em;height:1em;font-size:1.333em}.starlight-aside__title+.starlight-aside__content{margin-top:.5rem}.starlight-aside__content:empty{display:none}.starlight-aside__content a{color:var(--sl-color-asides-text-accent)}svg:where(.astro-hkc32dio){color:var(--sl-icon-color);font-size:var(--sl-icon-size,1em);width:1em;height:1em}.sl-link-button:where(.astro-dcqstdaq){font-size:var(--sl-text-sm);outline-offset:.25rem;border:1px solid #0000;border-radius:999rem;align-items:center;gap:.5em;padding:.4375rem 1.125rem;line-height:1.1875;text-decoration:none;display:inline-flex}.sl-link-button:where(.astro-dcqstdaq).primary{background:var(--sl-color-text-accent);border-color:var(--sl-color-text-accent);color:var(--sl-color-black)}.sl-link-button:where(.astro-dcqstdaq).primary:hover{color:var(--sl-color-black)}.sl-link-button:where(.astro-dcqstdaq).secondary{border-color:inherit;color:var(--sl-color-white)}.sl-link-button:where(.astro-dcqstdaq).minimal{color:var(--sl-color-white);padding-inline:0}.sl-link-button:where(.astro-dcqstdaq) svg{flex-shrink:0}@media (width>=50rem){.sl-link-button:where(.astro-dcqstdaq){font-size:var(--sl-text-base);padding:.9375rem 1.25rem}}.sl-markdown-content .sl-link-button:where(.astro-dcqstdaq){margin-inline-end:1rem}.sl-markdown-content .sl-link-button:where(.astro-dcqstdaq):not(:where(p *)){margin-block:1rem}.kudos:where(.astro-ddtxxk7k) svg{color:var(--sl-color-orange)}.label-icon:where(.astro-2z5xp7gb){font-size:var(--sl-label-icon-size);inset-inline-start:0}.caret:where(.astro-2z5xp7gb){font-size:var(--sl-caret-size);inset-inline-end:0}}@layer starlight.utils{.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.sl-hidden{display:none}.sl-flex{display:flex}.sl-block{display:block}@media (width>=50rem){.md\:sl-hidden{display:none}.md\:sl-flex{display:flex}.md\:sl-block{display:block}}@media (width>=72rem){.lg\:sl-hidden{display:none}.lg\:sl-flex{display:flex}.lg\:sl-block{display:block}}[data-theme=light] .light\:sl-hidden,[data-theme=dark] .dark\:sl-hidden{display:none}[dir=rtl] .rtl\:flip:not(:where([dir=rtl] [dir=ltr] *)){transform:matrix(-1,0,0,1,0,0)}}html:not([data-has-toc]){--sl-mobile-toc-height:0rem}html:not([data-has-sidebar]){--sl-content-width:67.5rem}html{scroll-padding-top:calc(1.5rem + var(--sl-nav-height) + var(--sl-mobile-toc-height))}main:where(.astro-g5ptsecz){padding:var(--sl-main-pad)}@media (width>=50em){:where(.astro-g5ptsecz)[data-has-sidebar]{--sl-content-inline-start:var(--sl-sidebar-width)}}@media (width>=72em){html{scroll-padding-top:calc(1.5rem + var(--sl-nav-height))}}
@@ -1 +0,0 @@
1
- var e=`_top`,t=class extends HTMLElement{_current=this.querySelector(`a[aria-current="true"]`);minH=parseInt(this.dataset.minH||`2`,10);maxH=parseInt(this.dataset.maxH||`3`,10);tocHeadingSelector=`h1#${e},:where(${[...Array.from({length:1+this.maxH-this.minH}).map((e,t)=>`h${this.minH+t}`)].join()})[id]`;set current(e){e!==this._current&&(this._current&&this._current.removeAttribute(`aria-current`),e.setAttribute(`aria-current`,`true`),this._current=e)}onIdle=e=>(window.requestIdleCallback||(e=>setTimeout(e,1)))(e);constructor(){super(),this.onIdle(()=>this.init())}init=()=>{let t=[...this.querySelectorAll(`a`)],n=e=>e.matches(this.tocHeadingSelector),r=t=>{if(!t)return null;let i=t;for(;t;){if(t.matches(`.sl-markdown-content, main > *`))return document.getElementById(e);if(n(t))return t;let i=t.querySelector(this.tocHeadingSelector);if(i)return i;for(t=t.previousElementSibling;t?.lastElementChild;)t=t.lastElementChild;let a=r(t);if(a)return a}return r(i.parentElement)},i=e=>{for(let{isIntersecting:n,target:i}of e){if(!n)continue;let e=r(i);if(!e)continue;let a=t.find(t=>t.hash===`#`+encodeURIComponent(e.id));if(a){this.current=a;break}}},a=document.querySelectorAll([`main :where(${this.tocHeadingSelector})`,`main :where(${this.tocHeadingSelector}, .sl-heading-wrapper) ~ *:not(:has(${this.tocHeadingSelector}))`,`main .sl-markdown-content > *:not(:has(${this.tocHeadingSelector}))`,`main > *:not(:has(${this.tocHeadingSelector}))`].join()),o,s=()=>{o||(o=new IntersectionObserver(i,{rootMargin:this.getRootMargin()}),a.forEach(e=>o.observe(e)))};s();let c;window.addEventListener(`resize`,()=>{o&&=(o.disconnect(),void 0),clearTimeout(c),c=setTimeout(()=>this.onIdle(s),200)})};getRootMargin(){let e=(document.querySelector(`header`)?.getBoundingClientRect().height||0)+(this.querySelector(`summary`)?.getBoundingClientRect().height||0)+32;return`-${e}px 0% ${e+53-document.documentElement.clientHeight}px`}};customElements.define(`starlight-toc`,t);export{t};