diff --git a/api/core/testing/org.meshtastic.core.testing/-robolectric-ble-bonding/index.html b/api/core/testing/org.meshtastic.core.testing/-robolectric-ble-bonding/index.html index 465f6f34cd..05a39fafc3 100644 --- a/api/core/testing/org.meshtastic.core.testing/-robolectric-ble-bonding/index.html +++ b/api/core/testing/org.meshtastic.core.testing/-robolectric-ble-bonding/index.html @@ -95,7 +95,7 @@

RobolectricBleBonding

-

Reusable Robolectric helpers for driving Android Bluetooth bonding logic in androidHostTest source sets.

These let a unit test exercise the real AndroidBluetoothRepository.bond() (and any future BLE bonding code) without an emulator and without a production seam. They rely on two Robolectric behaviors (verified against Robolectric 4.16.x):

Isolation note: because the device cache is static and survives across tests in the same JVM, give each test a distinct MAC so bond-state cannot bleed between tests.

+
object RobolectricBleBonding(source)

Reusable Robolectric helpers for driving Android Bluetooth bonding logic in androidHostTest source sets.

These let a unit test exercise the real AndroidBluetoothRepository.bond() (and any future BLE bonding code) without an emulator and without a production seam. They rely on two Robolectric behaviors (verified against Robolectric 4.16.x):

Isolation note: because the device cache is static and survives across tests in the same JVM, give each test a distinct MAC so bond-state cannot bleed between tests.

diff --git a/main/ar-rSA/user/nodes.html b/main/ar-rSA/user/nodes.html index de94beef5d..d083dfe16f 100644 --- a/main/ar-rSA/user/nodes.html +++ b/main/ar-rSA/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 العربية
Meshtastic Docs ↗

🌐 العربية — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role الوصف
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Remove

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

عربي الوصف
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort الوصف
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
آخر ظهور Last heard
المسافة Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 العربية
Meshtastic Docs ↗

🌐 العربية — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role الوصف
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Remove

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

عربي الوصف
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort الوصف
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
آخر ظهور Last heard
المسافة Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/assets/css/just-the-docs-dark.css.map b/main/assets/css/just-the-docs-dark.css.map index 5b55960133..b5a909513b 100644 --- a/main/assets/css/just-the-docs-dark.css.map +++ b/main/assets/css/just-the-docs-dark.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/vendor/accessible-pygments/github-light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/vendor/accessible-pygments/github-dark.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/base.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/color_schemes/dark.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/mixins/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/mixins/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/_variables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/content.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/navigation.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/labels.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/mixins/_buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/search.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/tables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/code.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_colors.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_lists.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_spacing.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/print.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/skiptomain.scss","just-the-docs-dark.scss"],"names":[],"mappings":"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;EACA;EACA,kBD4BY;;ADpBV;EEZJ;IAOI;IACA;IACA,ODwFW;ICvFX;IACA;IACA;;;AFAA;EEZJ;IAgBI;IACA,WD+EQ;;;ADpFR;EEQF;IAEI,aD2ES;;;ADrFX;EEQF;IAQI;;;AAOF;EACE;EACA,kBDLQ;;ADpBV;EEuBA;IAKI;IACA,kBDTM;;;ACYR;EACE;;AFjCJ;EEgCE;IAII;;;;AAOV;EACE;;AF5CE;EE2CJ;IAII;IACA,WDyCY;;;;ACrChB;EACE,aDaK;ECZL,gBDYK;EDvDL,eCuDK;EDtDL,cCsDK;;ADlEH;EEoDJ;IFrCI,eCqDG;IDpDH,cCoDG;;;ADpEH;EEoDJ;IAOI,aDSG;ICRH,gBDQG;;;;ACJP;EACE;EACA;;AFlEE;EEgEJ;IAKI;IACA;IACA,QDmBY;;;;ACfhB;AAAA;AAAA;EAGE;;AF9EE;EE2EJ;AAAA;AAAA;IAMI,ODGQ;;;;ACCZ;EACE;;AAEA;EACE;;AFzFA;EEqFJ;IAQI;IACA,aDxBG;ICyBH,gBD7BG;IC8BH;IACA;;;;AAIJ;EACE;EACA,YDbc;ECcd;;AFxGE;EEqGJ;IAMI,QDjBY;ICkBZ,YDlBY;ICmBZ;;;;AAIJ;EACE;EACA;EACA;EACA;EACA,aDrDK;ECsDL,gBDtDK;ECuDL,ODnGY;EDVZ,eCuDK;EDtDL,cCsDK;;ADlEH;EEiHJ;IFlGI,eCqDG;IDpDH,cCoDG;;;AF/BL;EACE;;ACtCA;EEiHJ;IHvEI;IACA,aEhDuB;;;ADKvB;EEiHJ;IAcI,aD/DG;ICgEH,gBDhEG;;;;AC+EP;EACE;EACA;EACA,SDhFK;ECiFL;;;AFnJE;EEuJF;IACE;;;AAIJ;EACE;;;AAQF;EACE;;;AAOF;EACE;EACA;EACA;EACA,aD/GK;ECgHL,gBDhHK;EDvDL,eCuDK;EDtDL,cCsDK;;ADlEH;EE6KJ;IF9JI,eCqDG;IDpDH,cCoDG;;;AFvEL;EACE;;ACEA;EE6KJ;IH3KI;;;ACFA;EE6KJ;IAYI;IACA;;;;AAIJ;EACE,OD5HK;EC6HL,QD7HK;EC8HL,OJ3MW;;;AKCb;EACE,aFEoB;;AEApB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;AAGF;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;IACA;IACA;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,ORTY;EQUZ,kBRfY;EQgBZ;EACA;EACA;EACA;EACA;;ATvCE;ES2BJ;IAeI;IACA;IACA,kBRxBU;IQyBV;;;AAGF;EACE;EACA;;AAEA;EACE,OX/DO;;;AWoEb;EACE;EACA;EACA;EACA,cRIK;;ADlEH;ES0DJ;IAOI,cRGG;IQFH;;;AAGF;EACE;EACA;EACA;EACA,ORzDU;;;AQ6Dd;EACE;EACA;EACA;EACA;EACA;EACA;EACA,kBRjEY;EQkEZ,4BRRc;EQSd,2BRTc;EQUd,YACE;;ATxFA;ES6EJ;IAeI;IACA,ORFmB;IQGnB;;;;AAIJ;EACE;EACA,eRrCK;EQsCL;;AVpFA;EACE;;AClBA;ESkGJ;IV5EI;;;ACtBA;EDOF;IACE;;;ACRA;ESkGJ;IVtFI;;;;AUiGJ;EACE;EACA;;;AAGF;EACE;EACA;;AAEA;EAEE,kBX3Ha;;;AW+HjB;EACE;EACA,aR9DK;EQ+DL,gBR/DK;;ADhEH;ES4HJ;IAMI;IACA;IACA,eRpEG;IQqEH;;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;;AVxIF;EACE;;ACRA;ES8IF;IVlIE;;;ACZA;EDHF;IACE;;;ACEA;ES8IF;IV5IE;;;AUqJF;EACE,ORtFG;EQuFH,QRvFG;EQwFH,cR1FG;EQ2FH,OXrKS;EWsKT;;AAGF;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,ORrJY;EQsJZ;EACA;;AV5LA;EACE;;ACYA;ESyKJ;IVjLI;;;;AU2LJ;EACE;EACA,aRrHK;EQsHL,gBRtHK;EQuHL,cRrHK;EQsHL,aRxHK;EQyHL,ORjKY;EQkKZ;EACA,aR/GO;EQgHP,mBR1KY;;AFrBZ;EACE;;ACEA;ESmLJ;IVjLI;;;ACFA;ESmLJ;IAaI;IACA;IACA,cRlIG;IQmIH;IACA;;;;AAIJ;EACE,YR1IK;;;AQ6IP;EACE;;;AAGF;EACE;;AV1MA;EACE;;ACRA;ESgNJ;IVpMI;;;;AUyMJ;EACE;EACA,ORrJK;EQsJL,QRtJK;EQuJL;EACA,ORnJK;EQoJL,QRpJK;EQqJL,kBRz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BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AdhHA;EACE;;ACYA;EcZJ;IfII;;;;AAKF;EACE;;ACEA;EcRJ;IfUI;;;;AAKF;EACE;;ACRA;EcJJ;IfgBI;;;;AAKF;EACE;;AClBA;EcAJ;IfsBI;;;;AAKF;EACE;;AC5BA;EcIJ;If4BI;;;;AAKF;EACE;;ACtCA;EcQJ;IfkCI;IACA,aEhDuB;;;;AFqDzB;EACE;EACA,aEvDuB;;ADKvB;EcYJ;If0CI;;;;AAKF;EACE;EACA,aElEuB;;ADKvB;EcgBJ;IfiDI;;;;AAKF;EACE;EACA,aE7EuB;;ADKvB;EcoBJ;IfwDI;;;;AAKF;EACE;EACA,aExFuB;;ADKvB;EcwBJ;If+DI;;;;Ae3DJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,abxDiB;;;Aa2DnB;EACE,ab1DyB;;;Aa6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AhBlCA;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AhB7GA;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;ACvCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OpBXW;EoBYX,kBjBkBY;EiBjBZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACpBF;EACE,kBlByBY;;;AkBtBd;EACI;EACA;EACA,elB4EY;EkB3EZ;EACA;;AAEA;EACI,OlB8BI;EkB7BJ;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBoBM;EkBnBN;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBiDY;EkBhDZ;EACA;;AACA;EACE;EACA;EACA,OlBEM;EkBDN;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,elBGY;EkBFZ;EACA;;AAEA;EACI,OlB/CG;EkBgDH;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBzDK;EkB0DL;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBxBY;EkByBZ;EACA;;AACA;EACE;EACA;EACA,OlB3EK;EkB4EL;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,elBtEY;EkBuEZ;EACA;;AAEA;EACI,OlBhHK;EkBiHL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlB1HO;EkB2HP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBjGY;EkBkGZ;EACA;;AACA;EACE;EACA;EACA,OlB5IO;EkB6IP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["/*\ngenerated by accessible-pygments \nCopyright (c) 2022, Quansight Labs\nLicensed under the BSD license, see LICENSE for details.\n--\ngenerated by Pygments \nCopyright 2006-2025 by the Pygments team.\nLicensed under the BSD license, see LICENSE for details.\n*/\n\n.highlight .hll { background-color: #0969da4a }\n.highlight .c { color: #6E7781 } /* Comment */\n.highlight .err { color: #CF222E } /* Error */\n.highlight .k { color: #CF222E } /* Keyword */\n.highlight .l { color: #953800 } /* Literal */\n.highlight .n { color: #8250DF } /* Name */\n.highlight .o { color: #116329 } /* Operator */\n.highlight .p { color: #24292F } /* Punctuation */\n.highlight .ch { color: #6E7781 } /* Comment.Hashbang */\n.highlight .cm { color: #6E7781 } /* Comment.Multiline */\n.highlight .cp { color: #6E7781 } /* Comment.Preproc */\n.highlight .cpf { color: #6E7781 } /* Comment.PreprocFile */\n.highlight .c1 { color: #6E7781 } /* Comment.Single */\n.highlight .cs { color: #6E7781 } /* Comment.Special */\n.highlight .gd { color: #0550AE } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #CF222E } /* Generic.Error */\n.highlight .gh { color: #0550AE } /* Generic.Heading */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #0550AE } /* Generic.Subheading */\n.highlight .kc { color: #0550AE } /* Keyword.Constant */\n.highlight .kd { color: #CF222E } /* Keyword.Declaration */\n.highlight .kn { color: #CF222E } /* Keyword.Namespace */\n.highlight .kp { color: #CF222E } /* Keyword.Pseudo */\n.highlight .kr { color: #CF222E } /* Keyword.Reserved */\n.highlight .kt { color: #CF222E } /* Keyword.Type */\n.highlight .ld { color: #953800 } /* Literal.Date */\n.highlight .m { color: #953800 } /* Literal.Number */\n.highlight .s { color: #0550AE } /* Literal.String */\n.highlight .na { color: #953800 } /* Name.Attribute */\n.highlight .nb { color: #953800 } /* Name.Builtin */\n.highlight .nc { color: #0550AE } /* Name.Class */\n.highlight .no { color: #0550AE } /* Name.Constant */\n.highlight .nd { color: #953800 } /* Name.Decorator */\n.highlight .ni { color: #116329 } /* Name.Entity */\n.highlight .ne { color: #8250DF } /* Name.Exception */\n.highlight .nf { color: #0550AE } /* Name.Function */\n.highlight .nl { color: #953800 } /* Name.Label */\n.highlight .nn { color: #24292F } /* Name.Namespace */\n.highlight .nx { color: #8250DF } /* Name.Other */\n.highlight .py { color: #0550AE } /* Name.Property */\n.highlight .nt { color: #116329 } /* Name.Tag */\n.highlight .nv { color: #953800 } /* Name.Variable */\n.highlight .ow { color: #8250DF } /* Operator.Word */\n.highlight .pm { color: #24292F } /* Punctuation.Marker */\n.highlight .w { color: #24292F } /* Text.Whitespace */\n.highlight .mb { color: #953800 } /* Literal.Number.Bin */\n.highlight .mf { color: #953800 } /* Literal.Number.Float */\n.highlight .mh { color: #953800 } /* Literal.Number.Hex */\n.highlight .mi { color: #953800 } /* Literal.Number.Integer */\n.highlight .mo { color: #953800 } /* Literal.Number.Oct */\n.highlight .sa { color: #0550AE } /* Literal.String.Affix */\n.highlight .sb { color: #0550AE } /* Literal.String.Backtick */\n.highlight .sc { color: #0550AE } /* Literal.String.Char */\n.highlight .dl { color: #0550AE } /* Literal.String.Delimiter */\n.highlight .sd { color: #0550AE } /* Literal.String.Doc */\n.highlight .s2 { color: #0550AE } /* Literal.String.Double */\n.highlight .se { color: #0550AE } /* Literal.String.Escape */\n.highlight .sh { color: #0550AE } /* Literal.String.Heredoc */\n.highlight .si { color: #0550AE } /* Literal.String.Interpol */\n.highlight .sx { color: #0550AE } /* Literal.String.Other */\n.highlight .sr { color: #0550AE } /* Literal.String.Regex */\n.highlight .s1 { color: #0550AE } /* Literal.String.Single */\n.highlight .ss { color: #0550AE } /* Literal.String.Symbol */\n.highlight .bp { color: #953800 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #0550AE } /* Name.Function.Magic */\n.highlight .vc { color: #953800 } /* Name.Variable.Class */\n.highlight .vg { color: #953800 } /* Name.Variable.Global */\n.highlight .vi { color: #953800 } /* Name.Variable.Instance */\n.highlight .vm { color: #953800 } /* Name.Variable.Magic */\n.highlight .il { color: #953800 } /* Literal.Number.Integer.Long */\n","/*\ngenerated by accessible-pygments \nCopyright (c) 2022, Quansight Labs\nLicensed under the BSD license, see LICENSE for details.\n--\ngenerated by Pygments \nCopyright 2006-2025 by the Pygments team.\nLicensed under the BSD license, see LICENSE for details.\n*/\n\n.highlight .hll { background-color: #6e7681 }\n.highlight { background: #0d1117; color: #E6EDF3 }\n.highlight .c { color: #8B949E; font-style: italic } /* Comment */\n.highlight .err { color: #F85149 } /* Error */\n.highlight .esc { color: #E6EDF3 } /* Escape */\n.highlight .g { color: #E6EDF3 } /* Generic */\n.highlight .k { color: #FF7B72 } /* Keyword */\n.highlight .l { color: #A5D6FF } /* Literal */\n.highlight .n { color: #E6EDF3 } /* Name */\n.highlight .o { color: #FF7B72; font-weight: bold } /* Operator */\n.highlight .x { color: #E6EDF3 } /* Other */\n.highlight .p { color: #E6EDF3 } /* Punctuation */\n.highlight .ch { color: #8B949E; font-style: italic } /* Comment.Hashbang */\n.highlight .cm { color: #8B949E; font-style: italic } /* Comment.Multiline */\n.highlight .cp { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Preproc */\n.highlight .cpf { color: #8B949E; font-style: italic } /* Comment.PreprocFile */\n.highlight .c1 { color: #8B949E; font-style: italic } /* Comment.Single */\n.highlight .cs { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Special */\n.highlight .gd { color: #FFA198; background-color: #490202 } /* Generic.Deleted */\n.highlight .ge { color: #E6EDF3; font-style: italic } /* Generic.Emph */\n.highlight .ges { color: #E6EDF3; font-weight: bold; font-style: italic } /* Generic.EmphStrong */\n.highlight .gr { color: #FFA198 } /* Generic.Error */\n.highlight .gh { color: #79C0FF; font-weight: bold } /* Generic.Heading */\n.highlight .gi { color: #56D364; background-color: #0F5323 } /* Generic.Inserted */\n.highlight .go { color: #8B949E } /* Generic.Output */\n.highlight .gp { color: #8B949E } /* Generic.Prompt */\n.highlight .gs { color: #E6EDF3; font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #79C0FF } /* Generic.Subheading */\n.highlight .gt { color: #FF7B72 } /* Generic.Traceback */\n.highlight .g-Underline { color: #E6EDF3; text-decoration: underline } /* Generic.Underline */\n.highlight .kc { color: #79C0FF } /* Keyword.Constant */\n.highlight .kd { color: #FF7B72 } /* Keyword.Declaration */\n.highlight .kn { color: #FF7B72 } /* Keyword.Namespace */\n.highlight .kp { color: #79C0FF } /* Keyword.Pseudo */\n.highlight .kr { color: #FF7B72 } /* Keyword.Reserved */\n.highlight .kt { color: #FF7B72 } /* Keyword.Type */\n.highlight .ld { color: #79C0FF } /* Literal.Date */\n.highlight .m { color: #A5D6FF } /* Literal.Number */\n.highlight .s { color: #A5D6FF } /* Literal.String */\n.highlight .na { color: #E6EDF3 } /* Name.Attribute */\n.highlight .nb { color: #E6EDF3 } /* Name.Builtin */\n.highlight .nc { color: #F0883E; font-weight: bold } /* Name.Class */\n.highlight .no { color: #79C0FF; font-weight: bold } /* Name.Constant */\n.highlight .nd { color: #D2A8FF; font-weight: bold } /* Name.Decorator */\n.highlight .ni { color: #FFA657 } /* Name.Entity */\n.highlight .ne { color: #F0883E; font-weight: bold } /* Name.Exception */\n.highlight .nf { color: #D2A8FF; font-weight: bold } /* Name.Function */\n.highlight .nl { color: #79C0FF; font-weight: bold } /* Name.Label */\n.highlight .nn { color: #FF7B72 } /* Name.Namespace */\n.highlight .nx { color: #E6EDF3 } /* Name.Other */\n.highlight .py { color: #79C0FF } /* Name.Property */\n.highlight .nt { color: #7EE787 } /* Name.Tag */\n.highlight .nv { color: #79C0FF } /* Name.Variable */\n.highlight .ow { color: #FF7B72; font-weight: bold } /* Operator.Word */\n.highlight .pm { color: #E6EDF3 } /* Punctuation.Marker */\n.highlight .w { color: #6E7681 } /* Text.Whitespace */\n.highlight .mb { color: #A5D6FF } /* Literal.Number.Bin */\n.highlight .mf { color: #A5D6FF } /* Literal.Number.Float */\n.highlight .mh { color: #A5D6FF } /* Literal.Number.Hex */\n.highlight .mi { color: #A5D6FF } /* Literal.Number.Integer */\n.highlight .mo { color: #A5D6FF } /* Literal.Number.Oct */\n.highlight .sa { color: #79C0FF } /* Literal.String.Affix */\n.highlight .sb { color: #A5D6FF } /* Literal.String.Backtick */\n.highlight .sc { color: #A5D6FF } /* Literal.String.Char */\n.highlight .dl { color: #79C0FF } /* Literal.String.Delimiter */\n.highlight .sd { color: #A5D6FF } /* Literal.String.Doc */\n.highlight .s2 { color: #A5D6FF } /* Literal.String.Double */\n.highlight .se { color: #79C0FF } /* Literal.String.Escape */\n.highlight .sh { color: #79C0FF } /* Literal.String.Heredoc */\n.highlight .si { color: #A5D6FF } /* Literal.String.Interpol */\n.highlight .sx { color: #A5D6FF } /* Literal.String.Other */\n.highlight .sr { color: #79C0FF } /* Literal.String.Regex */\n.highlight .s1 { color: #A5D6FF } /* Literal.String.Single */\n.highlight .ss { color: #A5D6FF } /* Literal.String.Symbol */\n.highlight .bp { color: #E6EDF3 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #D2A8FF; font-weight: bold } /* Name.Function.Magic */\n.highlight .vc { color: #79C0FF } /* Name.Variable.Class */\n.highlight .vg { color: #79C0FF } /* Name.Variable.Global */\n.highlight .vi { color: #79C0FF } /* Name.Variable.Instance */\n.highlight .vm { color: #79C0FF } /* Name.Variable.Magic */\n.highlight .il { color: #A5D6FF } /* Literal.Number.Integer.Long */\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n scroll-behavior: smooth;\n\n @include fs-4;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","$color-scheme: dark;\n$body-background-color: $grey-dk-300;\n$body-heading-color: $grey-lt-000;\n$body-text-color: $grey-lt-300;\n$link-color: lighten($blue-000, 10%);\n$nav-child-link-color: $grey-dk-000;\n$sidebar-color: $grey-dk-300;\n$base-button-color: $grey-dk-250;\n$btn-primary-color: $blue-200;\n$code-background-color: #0d1117; // github-dark bg color\n$code-linenumber-color: #e6edf3; // github-dark line number color\n$feedback-color: darken($sidebar-color, 3%);\n$table-background-color: $grey-dk-250;\n$search-background-color: $grey-dk-250;\n$search-result-preview-color: $grey-lt-300;\n$border-color: $grey-dk-200;\n\n@import \"./vendor/accessible-pygments/github-dark\";\n","@mixin fs-1 {\n & {\n font-size: $font-size-1 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n & {\n font-size: $font-size-2 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n & {\n font-size: $font-size-3 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n & {\n font-size: $font-size-4 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n & {\n font-size: $font-size-5 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n & {\n font-size: $font-size-6 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n & {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n & {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n & {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n & {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n\n & + .main {\n @include mq(md) {\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n\n .main-header {\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n background-color: $body-background-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n }\n }\n}\n\n.main {\n margin: auto;\n\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n }\n}\n\n.main-content-wrap {\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include container;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n border-bottom: $border $border-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n\n @include container;\n\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n.site-footer {\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n\n @include container;\n\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n margin: 0;\n\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n color: darken($link-color, 5%);\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n font-weight: 300;\n\n @include fs-8;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n\n @include fs-2;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n border-radius: 12px;\n\n @include fs-2;\n}\n\n.label-green:not(g) {\n background-color: $green-300;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-300;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-200);\n}\n\n.btn-green {\n @include btn-color($white, $green-300);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 2px solid $link-color;\n outline-offset: -2px;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n @include fs-3;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n padding: $sp-3;\n border: none;\n background: none;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n outline: 2px solid $link-color;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n margin-top: 0;\n margin-bottom: $sp-3;\n\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n\n @include fs-2;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n// Screenreader-only\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n hr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./color_schemes/dark\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}\n\np.tip, blockquote.tip {\n border: 1px $green-300 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $green-300;\n content: \"Tip\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .tip-title {\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.tip-title, blockquote.tip-title {\n border: 1px $green-300 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.tip {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.tip-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.note, blockquote.note {\n border: 1px $blue-300 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $blue-300;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n border: 1px $blue-300 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.warning, blockquote.warning {\n border: 1px $yellow-300 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-300;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n border: 1px $yellow-300 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n"],"file":"just-the-docs-dark.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/vendor/accessible-pygments/github-light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/vendor/accessible-pygments/github-dark.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/base.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/color_schemes/dark.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/mixins/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/mixins/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/_variables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/content.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/navigation.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/labels.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/mixins/_buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/search.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/tables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/code.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_colors.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_lists.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_spacing.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/print.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/skiptomain.scss","just-the-docs-dark.scss"],"names":[],"mappings":"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;EACA;EACA,kBD4BY;;ADpBV;EEZJ;IAOI;IACA;IACA,ODwFW;ICvFX;IACA;IACA;;;AFAA;EEZJ;IAgBI;IACA,WD+EQ;;;ADpFR;EEQF;IAEI,aD2ES;;;ADrFX;EEQF;IAQI;;;AAOF;EACE;EACA,kBDLQ;;ADpBV;EEuBA;IAKI;IACA,kBDTM;;;ACYR;EACE;;AFjCJ;EEgCE;IAII;;;;AAOV;EACE;;AF5CE;EE2CJ;IAII;IACA,WDyCY;;;;ACrChB;EACE,aDaK;ECZL,gBDYK;EDvDL,eCuDK;EDtDL,cCsDK;;ADlEH;EEoDJ;IFrCI,eCqDG;IDpDH,cCoDG;;;ADpEH;EEoDJ;IAOI,aDSG;ICRH,gBDQG;;;;ACJP;EACE;EACA;;AFlEE;EEgEJ;IAKI;IACA;IACA,QDmBY;;;;ACfhB;AAAA;AAAA;EAGE;;AF9EE;EE2EJ;AAAA;AAAA;IAMI,ODGQ;;;;ACCZ;EACE;;AAEA;EACE;;AFzFA;EEqFJ;IAQI;IACA,aDxBG;ICyBH,gBD7BG;IC8BH;IACA;;;;AAIJ;EACE;EACA,YDbc;ECcd;;AFxGE;EEqGJ;IAMI,QDjBY;ICkBZ,YDlBY;ICmBZ;;;;AAIJ;EACE;EACA;EACA;EACA;EACA,aDrDK;ECsDL,gBDtDK;ECuDL,ODnGY;EDVZ,eCuDK;EDtDL,cCsDK;;ADlEH;EEiHJ;IFlGI,eCqDG;IDpDH,cCoDG;;;AF/BL;EACE;;ACtCA;EEiHJ;IHvEI;IACA,aEhDuB;;;ADKvB;EEiHJ;IAcI,aD/DG;ICgEH,gBDhEG;;;;AC+EP;EACE;EACA;EACA,SDhFK;ECiFL;;;AFnJE;EEuJF;IACE;;;AAIJ;EACE;;;AAQF;EACE;;;AAOF;EACE;EACA;EACA;EACA,aD/GK;ECgHL,gBDhHK;EDvDL,eCuDK;EDtDL,cCsDK;;ADlEH;EE6KJ;IF9JI,eCqDG;IDpDH,cCoDG;;;AFvEL;EACE;;ACEA;EE6KJ;IH3KI;;;ACFA;EE6KJ;IAYI;IACA;;;;AAIJ;EACE,OD5HK;EC6HL,QD7HK;EC8HL,OJ3MW;;;AKCb;EACE,aFEoB;;AEApB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;AAGF;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;IACA;IACA;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,ORTY;EQUZ,kBRfY;EQgBZ;EACA;EACA;EACA;EACA;;ATvCE;ES2BJ;IAeI;IACA;IACA,kBRxBU;IQyBV;;;AAGF;EACE;EACA;;AAEA;EACE,OX/DO;;;AWoEb;EACE;EACA;EACA;EACA,cRIK;;ADlEH;ES0DJ;IAOI,cRGG;IQFH;;;AAGF;EACE;EACA;EACA;EACA,ORzDU;;;AQ6Dd;EACE;EACA;EACA;EACA;EACA;EACA;EACA,kBRjEY;EQkEZ,4BRRc;EQSd,2BRTc;EQUd,YACE;;ATxFA;ES6EJ;IAeI;IACA,ORFmB;IQGnB;;;;AAIJ;EACE;EACA,eRrCK;EQsCL;;AVpFA;EACE;;AClBA;ESkGJ;IV5EI;;;ACtBA;EDOF;IACE;;;ACRA;ESkGJ;IVtFI;;;;AUiGJ;EACE;EACA;;;AAGF;EACE;EACA;;AAEA;EAEE,kBX3Ha;;;AW+HjB;EACE;EACA,aR9DK;EQ+DL,gBR/DK;;ADhEH;ES4HJ;IAMI;IACA;IACA,eRpEG;IQqEH;;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;;AVxIF;EACE;;ACRA;ES8IF;IVlIE;;;ACZA;EDHF;IACE;;;ACEA;ES8IF;IV5IE;;;AUqJF;EACE,ORtFG;EQuFH,QRvFG;EQwFH,cR1FG;EQ2FH,OXrKS;EWsKT;;AAGF;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,ORrJY;EQsJZ;EACA;;AV5LA;EACE;;ACYA;ESyKJ;IVjLI;;;;AU2LJ;EACE;EACA,aRrHK;EQsHL,gBRtHK;EQuHL,cRrHK;EQsHL,aRxHK;EQyHL,ORjKY;EQkKZ;EACA,aR/GO;EQgHP,mBR1KY;;AFrBZ;EACE;;ACEA;ESmLJ;IVjLI;;;ACFA;ESmLJ;IAaI;IACA;IACA,cRlIG;IQmIH;IACA;;;;AAIJ;EACE,YR1IK;;;AQ6IP;EACE;;;AAGF;EACE;;AV1MA;EACE;;ACRA;ESgNJ;IVpMI;;;;AUyMJ;EACE;EACA,ORrJK;EQsJL,QRtJK;EQuJL;EACA,ORnJK;EQoJL,QRpJK;EQqJL,kBRz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BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AdhHA;EACE;;ACYA;EcZJ;IfII;;;;AAKF;EACE;;ACEA;EcRJ;IfUI;;;;AAKF;EACE;;ACRA;EcJJ;IfgBI;;;;AAKF;EACE;;AClBA;EcAJ;IfsBI;;;;AAKF;EACE;;AC5BA;EcIJ;If4BI;;;;AAKF;EACE;;ACtCA;EcQJ;IfkCI;IACA,aEhDuB;;;;AFqDzB;EACE;EACA,aEvDuB;;ADKvB;EcYJ;If0CI;;;;AAKF;EACE;EACA,aElEuB;;ADKvB;EcgBJ;IfiDI;;;;AAKF;EACE;EACA,aE7EuB;;ADKvB;EcoBJ;IfwDI;;;;AAKF;EACE;EACA,aExFuB;;ADKvB;EcwBJ;If+DI;;;;Ae3DJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,abxDiB;;;Aa2DnB;EACE,ab1DyB;;;Aa6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AhBlCA;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AhB7GA;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;ACvCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OpBXW;EoBYX,kBjBkBY;EiBjBZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACpBF;EACE,kBlByBY;;;AkBtBd;EACI;EACA;EACA,elB4EY;EkB3EZ;EACA;;AAEA;EACI,OlB8BI;EkB7BJ;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBoBM;EkBnBN;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBiDY;EkBhDZ;EACA;;AACA;EACE;EACA;EACA,OlBEM;EkBDN;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,elBGY;EkBFZ;EACA;;AAEA;EACI,OlB/CG;EkBgDH;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBzDK;EkB0DL;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBxBY;EkByBZ;EACA;;AACA;EACE;EACA;EACA,OlB3EK;EkB4EL;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,elBtEY;EkBuEZ;EACA;;AAEA;EACI,OlBhHK;EkBiHL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlB1HO;EkB2HP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBjGY;EkBkGZ;EACA;;AACA;EACE;EACA;EACA,OlB5IO;EkB6IP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["/*\ngenerated by accessible-pygments \nCopyright (c) 2022, Quansight Labs\nLicensed under the BSD license, see LICENSE for details.\n--\ngenerated by Pygments \nCopyright 2006-2025 by the Pygments team.\nLicensed under the BSD license, see LICENSE for details.\n*/\n\n.highlight .hll { background-color: #0969da4a }\n.highlight .c { color: #6E7781 } /* Comment */\n.highlight .err { color: #CF222E } /* Error */\n.highlight .k { color: #CF222E } /* Keyword */\n.highlight .l { color: #953800 } /* Literal */\n.highlight .n { color: #8250DF } /* Name */\n.highlight .o { color: #116329 } /* Operator */\n.highlight .p { color: #24292F } /* Punctuation */\n.highlight .ch { color: #6E7781 } /* Comment.Hashbang */\n.highlight .cm { color: #6E7781 } /* Comment.Multiline */\n.highlight .cp { color: #6E7781 } /* Comment.Preproc */\n.highlight .cpf { color: #6E7781 } /* Comment.PreprocFile */\n.highlight .c1 { color: #6E7781 } /* Comment.Single */\n.highlight .cs { color: #6E7781 } /* Comment.Special */\n.highlight .gd { color: #0550AE } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #CF222E } /* Generic.Error */\n.highlight .gh { color: #0550AE } /* Generic.Heading */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #0550AE } /* Generic.Subheading */\n.highlight .kc { color: #0550AE } /* Keyword.Constant */\n.highlight .kd { color: #CF222E } /* Keyword.Declaration */\n.highlight .kn { color: #CF222E } /* Keyword.Namespace */\n.highlight .kp { color: #CF222E } /* Keyword.Pseudo */\n.highlight .kr { color: #CF222E } /* Keyword.Reserved */\n.highlight .kt { color: #CF222E } /* Keyword.Type */\n.highlight .ld { color: #953800 } /* Literal.Date */\n.highlight .m { color: #953800 } /* Literal.Number */\n.highlight .s { color: #0550AE } /* Literal.String */\n.highlight .na { color: #953800 } /* Name.Attribute */\n.highlight .nb { color: #953800 } /* Name.Builtin */\n.highlight .nc { color: #0550AE } /* Name.Class */\n.highlight .no { color: #0550AE } /* Name.Constant */\n.highlight .nd { color: #953800 } /* Name.Decorator */\n.highlight .ni { color: #116329 } /* Name.Entity */\n.highlight .ne { color: #8250DF } /* Name.Exception */\n.highlight .nf { color: #0550AE } /* Name.Function */\n.highlight .nl { color: #953800 } /* Name.Label */\n.highlight .nn { color: #24292F } /* Name.Namespace */\n.highlight .nx { color: #8250DF } /* Name.Other */\n.highlight .py { color: #0550AE } /* Name.Property */\n.highlight .nt { color: #116329 } /* Name.Tag */\n.highlight .nv { color: #953800 } /* Name.Variable */\n.highlight .ow { color: #8250DF } /* Operator.Word */\n.highlight .pm { color: #24292F } /* Punctuation.Marker */\n.highlight .w { color: #24292F } /* Text.Whitespace */\n.highlight .mb { color: #953800 } /* Literal.Number.Bin */\n.highlight .mf { color: #953800 } /* Literal.Number.Float */\n.highlight .mh { color: #953800 } /* Literal.Number.Hex */\n.highlight .mi { color: #953800 } /* Literal.Number.Integer */\n.highlight .mo { color: #953800 } /* Literal.Number.Oct */\n.highlight .sa { color: #0550AE } /* Literal.String.Affix */\n.highlight .sb { color: #0550AE } /* Literal.String.Backtick */\n.highlight .sc { color: #0550AE } /* Literal.String.Char */\n.highlight .dl { color: #0550AE } /* Literal.String.Delimiter */\n.highlight .sd { color: #0550AE } /* Literal.String.Doc */\n.highlight .s2 { color: #0550AE } /* Literal.String.Double */\n.highlight .se { color: #0550AE } /* Literal.String.Escape */\n.highlight .sh { color: #0550AE } /* Literal.String.Heredoc */\n.highlight .si { color: #0550AE } /* Literal.String.Interpol */\n.highlight .sx { color: #0550AE } /* Literal.String.Other */\n.highlight .sr { color: #0550AE } /* Literal.String.Regex */\n.highlight .s1 { color: #0550AE } /* Literal.String.Single */\n.highlight .ss { color: #0550AE } /* Literal.String.Symbol */\n.highlight .bp { color: #953800 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #0550AE } /* Name.Function.Magic */\n.highlight .vc { color: #953800 } /* Name.Variable.Class */\n.highlight .vg { color: #953800 } /* Name.Variable.Global */\n.highlight .vi { color: #953800 } /* Name.Variable.Instance */\n.highlight .vm { color: #953800 } /* Name.Variable.Magic */\n.highlight .il { color: #953800 } /* Literal.Number.Integer.Long */\n","/*\ngenerated by accessible-pygments \nCopyright (c) 2022, Quansight Labs\nLicensed under the BSD license, see LICENSE for details.\n--\ngenerated by Pygments \nCopyright 2006-2025 by the Pygments team.\nLicensed under the BSD license, see LICENSE for details.\n*/\n\n.highlight .hll { background-color: #6e7681 }\n.highlight { background: #0d1117; color: #E6EDF3 }\n.highlight .c { color: #8B949E; font-style: italic } /* Comment */\n.highlight .err { color: #F85149 } /* Error */\n.highlight .esc { color: #E6EDF3 } /* Escape */\n.highlight .g { color: #E6EDF3 } /* Generic */\n.highlight .k { color: #FF7B72 } /* Keyword */\n.highlight .l { color: #A5D6FF } /* Literal */\n.highlight .n { color: #E6EDF3 } /* Name */\n.highlight .o { color: #FF7B72; font-weight: bold } /* Operator */\n.highlight .x { color: #E6EDF3 } /* Other */\n.highlight .p { color: #E6EDF3 } /* Punctuation */\n.highlight .ch { color: #8B949E; font-style: italic } /* Comment.Hashbang */\n.highlight .cm { color: #8B949E; font-style: italic } /* Comment.Multiline */\n.highlight .cp { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Preproc */\n.highlight .cpf { color: #8B949E; font-style: italic } /* Comment.PreprocFile */\n.highlight .c1 { color: #8B949E; font-style: italic } /* Comment.Single */\n.highlight .cs { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Special */\n.highlight .gd { color: #FFA198; background-color: #490202 } /* Generic.Deleted */\n.highlight .ge { color: #E6EDF3; font-style: italic } /* Generic.Emph */\n.highlight .ges { color: #E6EDF3; font-weight: bold; font-style: italic } /* Generic.EmphStrong */\n.highlight .gr { color: #FFA198 } /* Generic.Error */\n.highlight .gh { color: #79C0FF; font-weight: bold } /* Generic.Heading */\n.highlight .gi { color: #56D364; background-color: #0F5323 } /* Generic.Inserted */\n.highlight .go { color: #8B949E } /* Generic.Output */\n.highlight .gp { color: #8B949E } /* Generic.Prompt */\n.highlight .gs { color: #E6EDF3; font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #79C0FF } /* Generic.Subheading */\n.highlight .gt { color: #FF7B72 } /* Generic.Traceback */\n.highlight .g-Underline { color: #E6EDF3; text-decoration: underline } /* Generic.Underline */\n.highlight .kc { color: #79C0FF } /* Keyword.Constant */\n.highlight .kd { color: #FF7B72 } /* Keyword.Declaration */\n.highlight .kn { color: #FF7B72 } /* Keyword.Namespace */\n.highlight .kp { color: #79C0FF } /* Keyword.Pseudo */\n.highlight .kr { color: #FF7B72 } /* Keyword.Reserved */\n.highlight .kt { color: #FF7B72 } /* Keyword.Type */\n.highlight .ld { color: #79C0FF } /* Literal.Date */\n.highlight .m { color: #A5D6FF } /* Literal.Number */\n.highlight .s { color: #A5D6FF } /* Literal.String */\n.highlight .na { color: #E6EDF3 } /* Name.Attribute */\n.highlight .nb { color: #E6EDF3 } /* Name.Builtin */\n.highlight .nc { color: #F0883E; font-weight: bold } /* Name.Class */\n.highlight .no { color: #79C0FF; font-weight: bold } /* Name.Constant */\n.highlight .nd { color: #D2A8FF; font-weight: bold } /* Name.Decorator */\n.highlight .ni { color: #FFA657 } /* Name.Entity */\n.highlight .ne { color: #F0883E; font-weight: bold } /* Name.Exception */\n.highlight .nf { color: #D2A8FF; font-weight: bold } /* Name.Function */\n.highlight .nl { color: #79C0FF; font-weight: bold } /* Name.Label */\n.highlight .nn { color: #FF7B72 } /* Name.Namespace */\n.highlight .nx { color: #E6EDF3 } /* Name.Other */\n.highlight .py { color: #79C0FF } /* Name.Property */\n.highlight .nt { color: #7EE787 } /* Name.Tag */\n.highlight .nv { color: #79C0FF } /* Name.Variable */\n.highlight .ow { color: #FF7B72; font-weight: bold } /* Operator.Word */\n.highlight .pm { color: #E6EDF3 } /* Punctuation.Marker */\n.highlight .w { color: #6E7681 } /* Text.Whitespace */\n.highlight .mb { color: #A5D6FF } /* Literal.Number.Bin */\n.highlight .mf { color: #A5D6FF } /* Literal.Number.Float */\n.highlight .mh { color: #A5D6FF } /* Literal.Number.Hex */\n.highlight .mi { color: #A5D6FF } /* Literal.Number.Integer */\n.highlight .mo { color: #A5D6FF } /* Literal.Number.Oct */\n.highlight .sa { color: #79C0FF } /* Literal.String.Affix */\n.highlight .sb { color: #A5D6FF } /* Literal.String.Backtick */\n.highlight .sc { color: #A5D6FF } /* Literal.String.Char */\n.highlight .dl { color: #79C0FF } /* Literal.String.Delimiter */\n.highlight .sd { color: #A5D6FF } /* Literal.String.Doc */\n.highlight .s2 { color: #A5D6FF } /* Literal.String.Double */\n.highlight .se { color: #79C0FF } /* Literal.String.Escape */\n.highlight .sh { color: #79C0FF } /* Literal.String.Heredoc */\n.highlight .si { color: #A5D6FF } /* Literal.String.Interpol */\n.highlight .sx { color: #A5D6FF } /* Literal.String.Other */\n.highlight .sr { color: #79C0FF } /* Literal.String.Regex */\n.highlight .s1 { color: #A5D6FF } /* Literal.String.Single */\n.highlight .ss { color: #A5D6FF } /* Literal.String.Symbol */\n.highlight .bp { color: #E6EDF3 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #D2A8FF; font-weight: bold } /* Name.Function.Magic */\n.highlight .vc { color: #79C0FF } /* Name.Variable.Class */\n.highlight .vg { color: #79C0FF } /* Name.Variable.Global */\n.highlight .vi { color: #79C0FF } /* Name.Variable.Instance */\n.highlight .vm { color: #79C0FF } /* Name.Variable.Magic */\n.highlight .il { color: #A5D6FF } /* Literal.Number.Integer.Long */\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n scroll-behavior: smooth;\n\n @include fs-4;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","$color-scheme: dark;\n$body-background-color: $grey-dk-300;\n$body-heading-color: $grey-lt-000;\n$body-text-color: $grey-lt-300;\n$link-color: lighten($blue-000, 10%);\n$nav-child-link-color: $grey-dk-000;\n$sidebar-color: $grey-dk-300;\n$base-button-color: $grey-dk-250;\n$btn-primary-color: $blue-200;\n$code-background-color: #0d1117; // github-dark bg color\n$code-linenumber-color: #e6edf3; // github-dark line number color\n$feedback-color: darken($sidebar-color, 3%);\n$table-background-color: $grey-dk-250;\n$search-background-color: $grey-dk-250;\n$search-result-preview-color: $grey-lt-300;\n$border-color: $grey-dk-200;\n\n@import \"./vendor/accessible-pygments/github-dark\";\n","@mixin fs-1 {\n & {\n font-size: $font-size-1 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n & {\n font-size: $font-size-2 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n & {\n font-size: $font-size-3 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n & {\n font-size: $font-size-4 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n & {\n font-size: $font-size-5 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n & {\n font-size: $font-size-6 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n & {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n & {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n & {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n & {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n\n & + .main {\n @include mq(md) {\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n\n .main-header {\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n background-color: $body-background-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n }\n }\n}\n\n.main {\n margin: auto;\n\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n }\n}\n\n.main-content-wrap {\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include container;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n border-bottom: $border $border-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n\n @include container;\n\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n.site-footer {\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n\n @include container;\n\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n margin: 0;\n\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n color: darken($link-color, 5%);\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n font-weight: 300;\n\n @include fs-8;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n\n @include fs-2;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n border-radius: 12px;\n\n @include fs-2;\n}\n\n.label-green:not(g) {\n background-color: $green-300;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-300;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-200);\n}\n\n.btn-green {\n @include btn-color($white, $green-300);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 2px solid $link-color;\n outline-offset: -2px;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n @include fs-3;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n padding: $sp-3;\n border: none;\n background: none;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n outline: 2px solid $link-color;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n margin-top: 0;\n margin-bottom: $sp-3;\n\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n\n @include fs-2;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n// Screenreader-only\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n hr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./color_schemes/dark\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}\n\np.tip, blockquote.tip {\n border: 1px $green-300 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $green-300;\n content: \"Tip\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .tip-title {\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.tip-title, blockquote.tip-title {\n border: 1px $green-300 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.tip {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.tip-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.note, blockquote.note {\n border: 1px $blue-300 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $blue-300;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n border: 1px $blue-300 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.warning, blockquote.warning {\n border: 1px $yellow-300 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-300;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n border: 1px $yellow-300 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n"],"file":"just-the-docs-dark.css"} \ No newline at end of file diff --git a/main/assets/css/just-the-docs-default.css.map b/main/assets/css/just-the-docs-default.css.map index 9a070b1c2a..4c32b309c9 100644 --- a/main/assets/css/just-the-docs-default.css.map +++ b/main/assets/css/just-the-docs-default.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/vendor/accessible-pygments/github-light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/base.scss","../../_sass/color_schemes/meshtastic.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/mixins/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/mixins/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/_variables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/content.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/navigation.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/labels.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/color_schemes/light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/mixins/_buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/search.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/tables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/code.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_colors.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_lists.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_spacing.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/print.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/skiptomain.scss","just-the-docs-default.scss"],"names":[],"mappings":"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AGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACvOF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AdrBE;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AfhHA;EACE;;ACYA;EeZJ;IhBII;;;;AAKF;EACE;;ACEA;EeRJ;IhBUI;;;;AAKF;EACE;;ACRA;EeJJ;IhBgBI;;;;AAKF;EACE;;AClBA;EeAJ;IhBsBI;;;;AAKF;EACE;;AC5BA;EeIJ;IhB4BI;;;;AAKF;EACE;;ACtCA;EeQJ;IhBkCI;IACA,aEhDuB;;;;AFqDzB;EACE;EACA,aEvDuB;;ADKvB;EeYJ;IhB0CI;;;;AAKF;EACE;EACA,aElEuB;;ADKvB;EegBJ;IhBiDI;;;;AAKF;EACE;EACA,aE7EuB;;ADKvB;EeoBJ;IhBwDI;;;;AAKF;EACE;EACA,aExFuB;;ADKvB;EewBJ;IhB+DI;;;;AgB3DJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,adxDiB;;;Ac2DnB;EACE,ad1DyB;;;Ac6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AjBlCA;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AjB7GA;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;ACvCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OrBCW;EqBAX,kBrBNsB;EqBOtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACnBF;EACE;;;AAGF;EACI;EACA;EACA,enB2EY;EmB1EZ;EACA;;AAEA;EACI,OnB6BI;EmB5BJ;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnBmBM;EmBlBN;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBgDY;EmB/CZ;EACA;;AACA;EACE;EACA;EACA,OnBCM;EmBAN;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,enBEY;EmBDZ;EACA;;AAEA;EACI,OnBhDG;EmBiDH;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnB1DK;EmB2DL;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBzBY;EmB0BZ;EACA;;AACA;EACE;EACA;EACA,OnB5EK;EmB6EL;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,enBvEY;EmBwEZ;EACA;;AAEA;EACI,OnBjHK;EmBkHL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnB3HO;EmB4HP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBlGY;EmBmGZ;EACA;;AACA;EACE;EACA;EACA,OnB7IO;EmB8IP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["/*\ngenerated by accessible-pygments \nCopyright (c) 2022, Quansight Labs\nLicensed under the BSD license, see LICENSE for details.\n--\ngenerated by Pygments \nCopyright 2006-2025 by the Pygments team.\nLicensed under the BSD license, see LICENSE for details.\n*/\n\n.highlight .hll { background-color: #0969da4a }\n.highlight .c { color: #6E7781 } /* Comment */\n.highlight .err { color: #CF222E } /* Error */\n.highlight .k { color: #CF222E } /* Keyword */\n.highlight .l { color: #953800 } /* Literal */\n.highlight .n { color: #8250DF } /* Name */\n.highlight .o { color: #116329 } /* Operator */\n.highlight .p { color: #24292F } /* Punctuation */\n.highlight .ch { color: #6E7781 } /* Comment.Hashbang */\n.highlight .cm { color: #6E7781 } /* Comment.Multiline */\n.highlight .cp { color: #6E7781 } /* Comment.Preproc */\n.highlight .cpf { color: #6E7781 } /* Comment.PreprocFile */\n.highlight .c1 { color: #6E7781 } /* Comment.Single */\n.highlight .cs { color: #6E7781 } /* Comment.Special */\n.highlight .gd { color: #0550AE } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #CF222E } /* Generic.Error */\n.highlight .gh { color: #0550AE } /* Generic.Heading */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #0550AE } /* Generic.Subheading */\n.highlight .kc { color: #0550AE } /* Keyword.Constant */\n.highlight .kd { color: #CF222E } /* Keyword.Declaration */\n.highlight .kn { color: #CF222E } /* Keyword.Namespace */\n.highlight .kp { color: #CF222E } /* Keyword.Pseudo */\n.highlight .kr { color: #CF222E } /* Keyword.Reserved */\n.highlight .kt { color: #CF222E } /* Keyword.Type */\n.highlight .ld { color: #953800 } /* Literal.Date */\n.highlight .m { color: #953800 } /* Literal.Number */\n.highlight .s { color: #0550AE } /* Literal.String */\n.highlight .na { color: #953800 } /* Name.Attribute */\n.highlight .nb { color: #953800 } /* Name.Builtin */\n.highlight .nc { color: #0550AE } /* Name.Class */\n.highlight .no { color: #0550AE } /* Name.Constant */\n.highlight .nd { color: #953800 } /* Name.Decorator */\n.highlight .ni { color: #116329 } /* Name.Entity */\n.highlight .ne { color: #8250DF } /* Name.Exception */\n.highlight .nf { color: #0550AE } /* Name.Function */\n.highlight .nl { color: #953800 } /* Name.Label */\n.highlight .nn { color: #24292F } /* Name.Namespace */\n.highlight .nx { color: #8250DF } /* Name.Other */\n.highlight .py { color: #0550AE } /* Name.Property */\n.highlight .nt { color: #116329 } /* Name.Tag */\n.highlight .nv { color: #953800 } /* Name.Variable */\n.highlight .ow { color: #8250DF } /* Operator.Word */\n.highlight .pm { color: #24292F } /* Punctuation.Marker */\n.highlight .w { color: #24292F } /* Text.Whitespace */\n.highlight .mb { color: #953800 } /* Literal.Number.Bin */\n.highlight .mf { color: #953800 } /* Literal.Number.Float */\n.highlight .mh { color: #953800 } /* Literal.Number.Hex */\n.highlight .mi { color: #953800 } /* Literal.Number.Integer */\n.highlight .mo { color: #953800 } /* Literal.Number.Oct */\n.highlight .sa { color: #0550AE } /* Literal.String.Affix */\n.highlight .sb { color: #0550AE } /* Literal.String.Backtick */\n.highlight .sc { color: #0550AE } /* Literal.String.Char */\n.highlight .dl { color: #0550AE } /* Literal.String.Delimiter */\n.highlight .sd { color: #0550AE } /* Literal.String.Doc */\n.highlight .s2 { color: #0550AE } /* Literal.String.Double */\n.highlight .se { color: #0550AE } /* Literal.String.Escape */\n.highlight .sh { color: #0550AE } /* Literal.String.Heredoc */\n.highlight .si { color: #0550AE } /* Literal.String.Interpol */\n.highlight .sx { color: #0550AE } /* Literal.String.Other */\n.highlight .sr { color: #0550AE } /* Literal.String.Regex */\n.highlight .s1 { color: #0550AE } /* Literal.String.Single */\n.highlight .ss { color: #0550AE } /* Literal.String.Symbol */\n.highlight .bp { color: #953800 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #0550AE } /* Name.Function.Magic */\n.highlight .vc { color: #953800 } /* Name.Variable.Class */\n.highlight .vg { color: #953800 } /* Name.Variable.Global */\n.highlight .vi { color: #953800 } /* Name.Variable.Instance */\n.highlight .vm { color: #953800 } /* Name.Variable.Magic */\n.highlight .il { color: #953800 } /* Literal.Number.Integer.Long */\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n scroll-behavior: smooth;\n\n @include fs-4;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","// Meshtastic Material 3 — Light color scheme for just-the-docs\n// Source: core/ui/.../Color.kt §8.2 (Light Scheme)\n//\n// Brand colors:\n// Primary (Light): #2D8F52 (Green 700)\n// Surface (Light): #F5F6FA (Neutral 50)\n\n$color-scheme: light;\n\n// Body / page background\n$body-background-color: #F5F6FA; // Neutral 50 — surfaceLight\n$sidebar-color: #ECEDF3; // Neutral 100 — surfaceContainerLight\n$body-text-color: #2C2D3C; // Neutral 800 — onSurfaceLight\n$body-heading-color: #2C2D3C; // Neutral 800\n\n// Links\n$link-color: #2D8F52; // Green 700 — primaryLight\n$nav-link-color: #2D8F52; // Green 700\n\n// Navigation\n$nav-child-link-color: #555668; // Neutral 600 — secondaryLight\n$search-result-preview-color: #555668;\n\n// Code\n$code-background-color: #ECEDF3; // Neutral 100\n$code-linenumber-color: #9496A6; // Neutral 400\n\n// Borders\n$border-color: #D5D6E0; // Neutral 200 — outlineVariantLight\n$table-background-color: #F5F6FA; // Neutral 50\n\n// Buttons\n$btn-primary-color: #2D8F52; // Green 700\n\n// Feedback / callouts\n$feedback-color: #E0E1EB; // surfaceContainerHighLight\n\n// Search\n$search-background-color: #FFFFFF; // surfaceContainerLowestLight\n","@mixin fs-1 {\n & {\n font-size: $font-size-1 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n & {\n font-size: $font-size-2 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n & {\n font-size: $font-size-3 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n & {\n font-size: $font-size-4 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n & {\n font-size: $font-size-5 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n & {\n font-size: $font-size-6 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n & {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n & {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n & {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n & {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n\n & + .main {\n @include mq(md) {\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n\n .main-header {\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n background-color: $body-background-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n }\n }\n}\n\n.main {\n margin: auto;\n\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n }\n}\n\n.main-content-wrap {\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include container;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n border-bottom: $border $border-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n\n @include container;\n\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n.site-footer {\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n\n @include container;\n\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n margin: 0;\n\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n color: darken($link-color, 5%);\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n font-weight: 300;\n\n @include fs-8;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n\n @include fs-2;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n border-radius: 12px;\n\n @include fs-2;\n}\n\n.label-green:not(g) {\n background-color: $green-300;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-300;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-200);\n}\n\n.btn-green {\n @include btn-color($white, $green-300);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","$color-scheme: light !default;\n$body-background-color: $white !default;\n$body-heading-color: $grey-dk-300 !default;\n$body-text-color: $grey-dk-100 !default;\n$link-color: $purple-000 !default;\n$nav-child-link-color: $grey-dk-100 !default;\n$sidebar-color: $grey-lt-000 !default;\n$base-button-color: #f7f7f7 !default;\n$btn-primary-color: $purple-100 !default;\n$code-background-color: $white !default;\n$feedback-color: darken($sidebar-color, 3%) !default;\n$table-background-color: $white !default;\n$search-background-color: $white !default;\n$search-result-preview-color: $grey-dk-100 !default;\n\n@import \"./vendor/accessible-pygments/github-light\";\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 2px solid $link-color;\n outline-offset: -2px;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n @include fs-3;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n padding: $sp-3;\n border: none;\n background: none;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n outline: 2px solid $link-color;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n margin-top: 0;\n margin-bottom: $sp-3;\n\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n\n @include fs-2;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n// Screenreader-only\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n hr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./color_schemes/meshtastic\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}\n\np.tip, blockquote.tip {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $green-300;\n content: \"Tip\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .tip-title {\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.tip-title, blockquote.tip-title {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.tip {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.tip-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.note, blockquote.note {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $blue-300;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.warning, blockquote.warning {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-300;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n"],"file":"just-the-docs-default.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/vendor/accessible-pygments/github-light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/base.scss","../../_sass/color_schemes/meshtastic.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/mixins/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/mixins/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/_variables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/content.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/navigation.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/labels.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/color_schemes/light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/mixins/_buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/search.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/tables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/code.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_colors.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_lists.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_spacing.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/print.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/skiptomain.scss","just-the-docs-default.scss"],"names":[],"mappings":"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AGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACvOF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AdrBE;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AfhHA;EACE;;ACYA;EeZJ;IhBII;;;;AAKF;EACE;;ACEA;EeRJ;IhBUI;;;;AAKF;EACE;;ACRA;EeJJ;IhBgBI;;;;AAKF;EACE;;AClBA;EeAJ;IhBsBI;;;;AAKF;EACE;;AC5BA;EeIJ;IhB4BI;;;;AAKF;EACE;;ACtCA;EeQJ;IhBkCI;IACA,aEhDuB;;;;AFqDzB;EACE;EACA,aEvDuB;;ADKvB;EeYJ;IhB0CI;;;;AAKF;EACE;EACA,aElEuB;;ADKvB;EegBJ;IhBiDI;;;;AAKF;EACE;EACA,aE7EuB;;ADKvB;EeoBJ;IhBwDI;;;;AAKF;EACE;EACA,aExFuB;;ADKvB;EewBJ;IhB+DI;;;;AgB3DJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,adxDiB;;;Ac2DnB;EACE,ad1DyB;;;Ac6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AjBlCA;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AjB7GA;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;ACvCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OrBCW;EqBAX,kBrBNsB;EqBOtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACnBF;EACE;;;AAGF;EACI;EACA;EACA,enB2EY;EmB1EZ;EACA;;AAEA;EACI,OnB6BI;EmB5BJ;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnBmBM;EmBlBN;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBgDY;EmB/CZ;EACA;;AACA;EACE;EACA;EACA,OnBCM;EmBAN;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,enBEY;EmBDZ;EACA;;AAEA;EACI,OnBhDG;EmBiDH;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnB1DK;EmB2DL;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBzBY;EmB0BZ;EACA;;AACA;EACE;EACA;EACA,OnB5EK;EmB6EL;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,enBvEY;EmBwEZ;EACA;;AAEA;EACI,OnBjHK;EmBkHL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnB3HO;EmB4HP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBlGY;EmBmGZ;EACA;;AACA;EACE;EACA;EACA,OnB7IO;EmB8IP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["/*\ngenerated by accessible-pygments \nCopyright (c) 2022, Quansight Labs\nLicensed under the BSD license, see LICENSE for details.\n--\ngenerated by Pygments \nCopyright 2006-2025 by the Pygments team.\nLicensed under the BSD license, see LICENSE for details.\n*/\n\n.highlight .hll { background-color: #0969da4a }\n.highlight .c { color: #6E7781 } /* Comment */\n.highlight .err { color: #CF222E } /* Error */\n.highlight .k { color: #CF222E } /* Keyword */\n.highlight .l { color: #953800 } /* Literal */\n.highlight .n { color: #8250DF } /* Name */\n.highlight .o { color: #116329 } /* Operator */\n.highlight .p { color: #24292F } /* Punctuation */\n.highlight .ch { color: #6E7781 } /* Comment.Hashbang */\n.highlight .cm { color: #6E7781 } /* Comment.Multiline */\n.highlight .cp { color: #6E7781 } /* Comment.Preproc */\n.highlight .cpf { color: #6E7781 } /* Comment.PreprocFile */\n.highlight .c1 { color: #6E7781 } /* Comment.Single */\n.highlight .cs { color: #6E7781 } /* Comment.Special */\n.highlight .gd { color: #0550AE } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #CF222E } /* Generic.Error */\n.highlight .gh { color: #0550AE } /* Generic.Heading */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #0550AE } /* Generic.Subheading */\n.highlight .kc { color: #0550AE } /* Keyword.Constant */\n.highlight .kd { color: #CF222E } /* Keyword.Declaration */\n.highlight .kn { color: #CF222E } /* Keyword.Namespace */\n.highlight .kp { color: #CF222E } /* Keyword.Pseudo */\n.highlight .kr { color: #CF222E } /* Keyword.Reserved */\n.highlight .kt { color: #CF222E } /* Keyword.Type */\n.highlight .ld { color: #953800 } /* Literal.Date */\n.highlight .m { color: #953800 } /* Literal.Number */\n.highlight .s { color: #0550AE } /* Literal.String */\n.highlight .na { color: #953800 } /* Name.Attribute */\n.highlight .nb { color: #953800 } /* Name.Builtin */\n.highlight .nc { color: #0550AE } /* Name.Class */\n.highlight .no { color: #0550AE } /* Name.Constant */\n.highlight .nd { color: #953800 } /* Name.Decorator */\n.highlight .ni { color: #116329 } /* Name.Entity */\n.highlight .ne { color: #8250DF } /* Name.Exception */\n.highlight .nf { color: #0550AE } /* Name.Function */\n.highlight .nl { color: #953800 } /* Name.Label */\n.highlight .nn { color: #24292F } /* Name.Namespace */\n.highlight .nx { color: #8250DF } /* Name.Other */\n.highlight .py { color: #0550AE } /* Name.Property */\n.highlight .nt { color: #116329 } /* Name.Tag */\n.highlight .nv { color: #953800 } /* Name.Variable */\n.highlight .ow { color: #8250DF } /* Operator.Word */\n.highlight .pm { color: #24292F } /* Punctuation.Marker */\n.highlight .w { color: #24292F } /* Text.Whitespace */\n.highlight .mb { color: #953800 } /* Literal.Number.Bin */\n.highlight .mf { color: #953800 } /* Literal.Number.Float */\n.highlight .mh { color: #953800 } /* Literal.Number.Hex */\n.highlight .mi { color: #953800 } /* Literal.Number.Integer */\n.highlight .mo { color: #953800 } /* Literal.Number.Oct */\n.highlight .sa { color: #0550AE } /* Literal.String.Affix */\n.highlight .sb { color: #0550AE } /* Literal.String.Backtick */\n.highlight .sc { color: #0550AE } /* Literal.String.Char */\n.highlight .dl { color: #0550AE } /* Literal.String.Delimiter */\n.highlight .sd { color: #0550AE } /* Literal.String.Doc */\n.highlight .s2 { color: #0550AE } /* Literal.String.Double */\n.highlight .se { color: #0550AE } /* Literal.String.Escape */\n.highlight .sh { color: #0550AE } /* Literal.String.Heredoc */\n.highlight .si { color: #0550AE } /* Literal.String.Interpol */\n.highlight .sx { color: #0550AE } /* Literal.String.Other */\n.highlight .sr { color: #0550AE } /* Literal.String.Regex */\n.highlight .s1 { color: #0550AE } /* Literal.String.Single */\n.highlight .ss { color: #0550AE } /* Literal.String.Symbol */\n.highlight .bp { color: #953800 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #0550AE } /* Name.Function.Magic */\n.highlight .vc { color: #953800 } /* Name.Variable.Class */\n.highlight .vg { color: #953800 } /* Name.Variable.Global */\n.highlight .vi { color: #953800 } /* Name.Variable.Instance */\n.highlight .vm { color: #953800 } /* Name.Variable.Magic */\n.highlight .il { color: #953800 } /* Literal.Number.Integer.Long */\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n scroll-behavior: smooth;\n\n @include fs-4;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","// Meshtastic Material 3 — Light color scheme for just-the-docs\n// Source: core/ui/.../Color.kt §8.2 (Light Scheme)\n//\n// Brand colors:\n// Primary (Light): #2D8F52 (Green 700)\n// Surface (Light): #F5F6FA (Neutral 50)\n\n$color-scheme: light;\n\n// Body / page background\n$body-background-color: #F5F6FA; // Neutral 50 — surfaceLight\n$sidebar-color: #ECEDF3; // Neutral 100 — surfaceContainerLight\n$body-text-color: #2C2D3C; // Neutral 800 — onSurfaceLight\n$body-heading-color: #2C2D3C; // Neutral 800\n\n// Links\n$link-color: #2D8F52; // Green 700 — primaryLight\n$nav-link-color: #2D8F52; // Green 700\n\n// Navigation\n$nav-child-link-color: #555668; // Neutral 600 — secondaryLight\n$search-result-preview-color: #555668;\n\n// Code\n$code-background-color: #ECEDF3; // Neutral 100\n$code-linenumber-color: #9496A6; // Neutral 400\n\n// Borders\n$border-color: #D5D6E0; // Neutral 200 — outlineVariantLight\n$table-background-color: #F5F6FA; // Neutral 50\n\n// Buttons\n$btn-primary-color: #2D8F52; // Green 700\n\n// Feedback / callouts\n$feedback-color: #E0E1EB; // surfaceContainerHighLight\n\n// Search\n$search-background-color: #FFFFFF; // surfaceContainerLowestLight\n","@mixin fs-1 {\n & {\n font-size: $font-size-1 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n & {\n font-size: $font-size-2 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n & {\n font-size: $font-size-3 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n & {\n font-size: $font-size-4 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n & {\n font-size: $font-size-5 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n & {\n font-size: $font-size-6 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n & {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n & {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n & {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n & {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n\n & + .main {\n @include mq(md) {\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n\n .main-header {\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n background-color: $body-background-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n }\n }\n}\n\n.main {\n margin: auto;\n\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n }\n}\n\n.main-content-wrap {\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include container;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n border-bottom: $border $border-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n\n @include container;\n\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n.site-footer {\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n\n @include container;\n\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n margin: 0;\n\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n color: darken($link-color, 5%);\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n font-weight: 300;\n\n @include fs-8;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n\n @include fs-2;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n border-radius: 12px;\n\n @include fs-2;\n}\n\n.label-green:not(g) {\n background-color: $green-300;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-300;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-200);\n}\n\n.btn-green {\n @include btn-color($white, $green-300);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","$color-scheme: light !default;\n$body-background-color: $white !default;\n$body-heading-color: $grey-dk-300 !default;\n$body-text-color: $grey-dk-100 !default;\n$link-color: $purple-000 !default;\n$nav-child-link-color: $grey-dk-100 !default;\n$sidebar-color: $grey-lt-000 !default;\n$base-button-color: #f7f7f7 !default;\n$btn-primary-color: $purple-100 !default;\n$code-background-color: $white !default;\n$feedback-color: darken($sidebar-color, 3%) !default;\n$table-background-color: $white !default;\n$search-background-color: $white !default;\n$search-result-preview-color: $grey-dk-100 !default;\n\n@import \"./vendor/accessible-pygments/github-light\";\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 2px solid $link-color;\n outline-offset: -2px;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n @include fs-3;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n padding: $sp-3;\n border: none;\n background: none;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n outline: 2px solid $link-color;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n margin-top: 0;\n margin-bottom: $sp-3;\n\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n\n @include fs-2;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n// Screenreader-only\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n hr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./color_schemes/meshtastic\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}\n\np.tip, blockquote.tip {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $green-300;\n content: \"Tip\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .tip-title {\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.tip-title, blockquote.tip-title {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.tip {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.tip-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.note, blockquote.note {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $blue-300;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.warning, blockquote.warning {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-300;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n"],"file":"just-the-docs-default.css"} \ No newline at end of file diff --git a/main/assets/css/just-the-docs-light.css.map b/main/assets/css/just-the-docs-light.css.map index 8601c54e0b..1f3456be81 100644 --- a/main/assets/css/just-the-docs-light.css.map +++ b/main/assets/css/just-the-docs-light.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/vendor/accessible-pygments/github-light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/base.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/color_schemes/light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/mixins/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/mixins/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/_variables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/content.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/navigation.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/labels.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/mixins/_buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/search.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/tables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/code.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_colors.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_lists.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_spacing.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/print.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/skiptomain.scss","just-the-docs-light.scss"],"names":[],"mappings":"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;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACvOF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AbrBE;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AdhHA;EACE;;ACYA;EcZJ;IfII;;;;AAKF;EACE;;ACEA;EcRJ;IfUI;;;;AAKF;EACE;;ACRA;EcJJ;IfgBI;;;;AAKF;EACE;;AClBA;EcAJ;IfsBI;;;;AAKF;EACE;;AC5BA;EcIJ;If4BI;;;;AAKF;EACE;;ACtCA;EcQJ;IfkCI;IACA,aEhDuB;;;;AFqDzB;EACE;EACA,aEvDuB;;ADKvB;EcYJ;If0CI;;;;AAKF;EACE;EACA,aElEuB;;ADKvB;EcgBJ;IfiDI;;;;AAKF;EACE;EACA,aE7EuB;;ADKvB;EcoBJ;IfwDI;;;;AAKF;EACE;EACA,aExFuB;;ADKvB;EcwBJ;If+DI;;;;Ae3DJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,abxDiB;;;Aa2DnB;EACE,ab1DyB;;;Aa6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AhBlCA;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AhB7GA;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;ACvCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OjBwBW;EiBvBX,kBjBaM;EiBZN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACtBF;EACE,kBlBsBM;;;AkBnBR;EACI;EACA;EACA,elB8EY;EkB7EZ;EACA;;AAEA;EACI,OlBgCI;EkB/BJ;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBsBM;EkBrBN;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBmDY;EkBlDZ;EACA;;AACA;EACE;EACA;EACA,OlBIM;EkBHN;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,elBKY;EkBJZ;EACA;;AAEA;EACI,OlB7CG;EkB8CH;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBvDK;EkBwDL;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBtBY;EkBuBZ;EACA;;AACA;EACE;EACA;EACA,OlBzEK;EkB0EL;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,elBpEY;EkBqEZ;EACA;;AAEA;EACI,OlB9GK;EkB+GL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBxHO;EkByHP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elB/FY;EkBgGZ;EACA;;AACA;EACE;EACA;EACA,OlB1IO;EkB2IP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["/*\ngenerated by accessible-pygments \nCopyright (c) 2022, Quansight Labs\nLicensed under the BSD license, see LICENSE for details.\n--\ngenerated by Pygments \nCopyright 2006-2025 by the Pygments team.\nLicensed under the BSD license, see LICENSE for details.\n*/\n\n.highlight .hll { background-color: #0969da4a }\n.highlight .c { color: #6E7781 } /* Comment */\n.highlight .err { color: #CF222E } /* Error */\n.highlight .k { color: #CF222E } /* Keyword */\n.highlight .l { color: #953800 } /* Literal */\n.highlight .n { color: #8250DF } /* Name */\n.highlight .o { color: #116329 } /* Operator */\n.highlight .p { color: #24292F } /* Punctuation */\n.highlight .ch { color: #6E7781 } /* Comment.Hashbang */\n.highlight .cm { color: #6E7781 } /* Comment.Multiline */\n.highlight .cp { color: #6E7781 } /* Comment.Preproc */\n.highlight .cpf { color: #6E7781 } /* Comment.PreprocFile */\n.highlight .c1 { color: #6E7781 } /* Comment.Single */\n.highlight .cs { color: #6E7781 } /* Comment.Special */\n.highlight .gd { color: #0550AE } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #CF222E } /* Generic.Error */\n.highlight .gh { color: #0550AE } /* Generic.Heading */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #0550AE } /* Generic.Subheading */\n.highlight .kc { color: #0550AE } /* Keyword.Constant */\n.highlight .kd { color: #CF222E } /* Keyword.Declaration */\n.highlight .kn { color: #CF222E } /* Keyword.Namespace */\n.highlight .kp { color: #CF222E } /* Keyword.Pseudo */\n.highlight .kr { color: #CF222E } /* Keyword.Reserved */\n.highlight .kt { color: #CF222E } /* Keyword.Type */\n.highlight .ld { color: #953800 } /* Literal.Date */\n.highlight .m { color: #953800 } /* Literal.Number */\n.highlight .s { color: #0550AE } /* Literal.String */\n.highlight .na { color: #953800 } /* Name.Attribute */\n.highlight .nb { color: #953800 } /* Name.Builtin */\n.highlight .nc { color: #0550AE } /* Name.Class */\n.highlight .no { color: #0550AE } /* Name.Constant */\n.highlight .nd { color: #953800 } /* Name.Decorator */\n.highlight .ni { color: #116329 } /* Name.Entity */\n.highlight .ne { color: #8250DF } /* Name.Exception */\n.highlight .nf { color: #0550AE } /* Name.Function */\n.highlight .nl { color: #953800 } /* Name.Label */\n.highlight .nn { color: #24292F } /* Name.Namespace */\n.highlight .nx { color: #8250DF } /* Name.Other */\n.highlight .py { color: #0550AE } /* Name.Property */\n.highlight .nt { color: #116329 } /* Name.Tag */\n.highlight .nv { color: #953800 } /* Name.Variable */\n.highlight .ow { color: #8250DF } /* Operator.Word */\n.highlight .pm { color: #24292F } /* Punctuation.Marker */\n.highlight .w { color: #24292F } /* Text.Whitespace */\n.highlight .mb { color: #953800 } /* Literal.Number.Bin */\n.highlight .mf { color: #953800 } /* Literal.Number.Float */\n.highlight .mh { color: #953800 } /* Literal.Number.Hex */\n.highlight .mi { color: #953800 } /* Literal.Number.Integer */\n.highlight .mo { color: #953800 } /* Literal.Number.Oct */\n.highlight .sa { color: #0550AE } /* Literal.String.Affix */\n.highlight .sb { color: #0550AE } /* Literal.String.Backtick */\n.highlight .sc { color: #0550AE } /* Literal.String.Char */\n.highlight .dl { color: #0550AE } /* Literal.String.Delimiter */\n.highlight .sd { color: #0550AE } /* Literal.String.Doc */\n.highlight .s2 { color: #0550AE } /* Literal.String.Double */\n.highlight .se { color: #0550AE } /* Literal.String.Escape */\n.highlight .sh { color: #0550AE } /* Literal.String.Heredoc */\n.highlight .si { color: #0550AE } /* Literal.String.Interpol */\n.highlight .sx { color: #0550AE } /* Literal.String.Other */\n.highlight .sr { color: #0550AE } /* Literal.String.Regex */\n.highlight .s1 { color: #0550AE } /* Literal.String.Single */\n.highlight .ss { color: #0550AE } /* Literal.String.Symbol */\n.highlight .bp { color: #953800 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #0550AE } /* Name.Function.Magic */\n.highlight .vc { color: #953800 } /* Name.Variable.Class */\n.highlight .vg { color: #953800 } /* Name.Variable.Global */\n.highlight .vi { color: #953800 } /* Name.Variable.Instance */\n.highlight .vm { color: #953800 } /* Name.Variable.Magic */\n.highlight .il { color: #953800 } /* Literal.Number.Integer.Long */\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n scroll-behavior: smooth;\n\n @include fs-4;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","$color-scheme: light !default;\n$body-background-color: $white !default;\n$body-heading-color: $grey-dk-300 !default;\n$body-text-color: $grey-dk-100 !default;\n$link-color: $purple-000 !default;\n$nav-child-link-color: $grey-dk-100 !default;\n$sidebar-color: $grey-lt-000 !default;\n$base-button-color: #f7f7f7 !default;\n$btn-primary-color: $purple-100 !default;\n$code-background-color: $white !default;\n$feedback-color: darken($sidebar-color, 3%) !default;\n$table-background-color: $white !default;\n$search-background-color: $white !default;\n$search-result-preview-color: $grey-dk-100 !default;\n\n@import \"./vendor/accessible-pygments/github-light\";\n","@mixin fs-1 {\n & {\n font-size: $font-size-1 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n & {\n font-size: $font-size-2 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n & {\n font-size: $font-size-3 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n & {\n font-size: $font-size-4 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n & {\n font-size: $font-size-5 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n & {\n font-size: $font-size-6 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n & {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n & {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n & {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n & {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n\n & + .main {\n @include mq(md) {\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n\n .main-header {\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n background-color: $body-background-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n }\n }\n}\n\n.main {\n margin: auto;\n\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n }\n}\n\n.main-content-wrap {\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include container;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n border-bottom: $border $border-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n\n @include container;\n\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n.site-footer {\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n\n @include container;\n\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n margin: 0;\n\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n color: darken($link-color, 5%);\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n font-weight: 300;\n\n @include fs-8;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n\n @include fs-2;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n border-radius: 12px;\n\n @include fs-2;\n}\n\n.label-green:not(g) {\n background-color: $green-300;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-300;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-200);\n}\n\n.btn-green {\n @include btn-color($white, $green-300);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 2px solid $link-color;\n outline-offset: -2px;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n @include fs-3;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n padding: $sp-3;\n border: none;\n background: none;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n outline: 2px solid $link-color;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n margin-top: 0;\n margin-bottom: $sp-3;\n\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n\n @include fs-2;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n// Screenreader-only\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n hr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}\n\np.tip, blockquote.tip {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $green-300;\n content: \"Tip\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .tip-title {\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.tip-title, blockquote.tip-title {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.tip {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.tip-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.note, blockquote.note {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $blue-300;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.warning, blockquote.warning {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-300;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n"],"file":"just-the-docs-light.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/vendor/accessible-pygments/github-light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/base.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/color_schemes/light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/mixins/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/mixins/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/_variables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/content.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/navigation.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/labels.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/mixins/_buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/search.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/tables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/code.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_colors.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_lists.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_spacing.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/print.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/skiptomain.scss","just-the-docs-light.scss"],"names":[],"mappings":"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;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACvOF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AbrBE;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AdhHA;EACE;;ACYA;EcZJ;IfII;;;;AAKF;EACE;;ACEA;EcRJ;IfUI;;;;AAKF;EACE;;ACRA;EcJJ;IfgBI;;;;AAKF;EACE;;AClBA;EcAJ;IfsBI;;;;AAKF;EACE;;AC5BA;EcIJ;If4BI;;;;AAKF;EACE;;ACtCA;EcQJ;IfkCI;IACA,aEhDuB;;;;AFqDzB;EACE;EACA,aEvDuB;;ADKvB;EcYJ;If0CI;;;;AAKF;EACE;EACA,aElEuB;;ADKvB;EcgBJ;IfiDI;;;;AAKF;EACE;EACA,aE7EuB;;ADKvB;EcoBJ;IfwDI;;;;AAKF;EACE;EACA,aExFuB;;ADKvB;EcwBJ;If+DI;;;;Ae3DJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,abxDiB;;;Aa2DnB;EACE,ab1DyB;;;Aa6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AhBlCA;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AhB7GA;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;ACvCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OjBwBW;EiBvBX,kBjBaM;EiBZN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACtBF;EACE,kBlBsBM;;;AkBnBR;EACI;EACA;EACA,elB8EY;EkB7EZ;EACA;;AAEA;EACI,OlBgCI;EkB/BJ;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBsBM;EkBrBN;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBmDY;EkBlDZ;EACA;;AACA;EACE;EACA;EACA,OlBIM;EkBHN;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,elBKY;EkBJZ;EACA;;AAEA;EACI,OlB7CG;EkB8CH;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBvDK;EkBwDL;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBtBY;EkBuBZ;EACA;;AACA;EACE;EACA;EACA,OlBzEK;EkB0EL;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,elBpEY;EkBqEZ;EACA;;AAEA;EACI,OlB9GK;EkB+GL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBxHO;EkByHP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elB/FY;EkBgGZ;EACA;;AACA;EACE;EACA;EACA,OlB1IO;EkB2IP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["/*\ngenerated by accessible-pygments \nCopyright (c) 2022, Quansight Labs\nLicensed under the BSD license, see LICENSE for details.\n--\ngenerated by Pygments \nCopyright 2006-2025 by the Pygments team.\nLicensed under the BSD license, see LICENSE for details.\n*/\n\n.highlight .hll { background-color: #0969da4a }\n.highlight .c { color: #6E7781 } /* Comment */\n.highlight .err { color: #CF222E } /* Error */\n.highlight .k { color: #CF222E } /* Keyword */\n.highlight .l { color: #953800 } /* Literal */\n.highlight .n { color: #8250DF } /* Name */\n.highlight .o { color: #116329 } /* Operator */\n.highlight .p { color: #24292F } /* Punctuation */\n.highlight .ch { color: #6E7781 } /* Comment.Hashbang */\n.highlight .cm { color: #6E7781 } /* Comment.Multiline */\n.highlight .cp { color: #6E7781 } /* Comment.Preproc */\n.highlight .cpf { color: #6E7781 } /* Comment.PreprocFile */\n.highlight .c1 { color: #6E7781 } /* Comment.Single */\n.highlight .cs { color: #6E7781 } /* Comment.Special */\n.highlight .gd { color: #0550AE } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #CF222E } /* Generic.Error */\n.highlight .gh { color: #0550AE } /* Generic.Heading */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #0550AE } /* Generic.Subheading */\n.highlight .kc { color: #0550AE } /* Keyword.Constant */\n.highlight .kd { color: #CF222E } /* Keyword.Declaration */\n.highlight .kn { color: #CF222E } /* Keyword.Namespace */\n.highlight .kp { color: #CF222E } /* Keyword.Pseudo */\n.highlight .kr { color: #CF222E } /* Keyword.Reserved */\n.highlight .kt { color: #CF222E } /* Keyword.Type */\n.highlight .ld { color: #953800 } /* Literal.Date */\n.highlight .m { color: #953800 } /* Literal.Number */\n.highlight .s { color: #0550AE } /* Literal.String */\n.highlight .na { color: #953800 } /* Name.Attribute */\n.highlight .nb { color: #953800 } /* Name.Builtin */\n.highlight .nc { color: #0550AE } /* Name.Class */\n.highlight .no { color: #0550AE } /* Name.Constant */\n.highlight .nd { color: #953800 } /* Name.Decorator */\n.highlight .ni { color: #116329 } /* Name.Entity */\n.highlight .ne { color: #8250DF } /* Name.Exception */\n.highlight .nf { color: #0550AE } /* Name.Function */\n.highlight .nl { color: #953800 } /* Name.Label */\n.highlight .nn { color: #24292F } /* Name.Namespace */\n.highlight .nx { color: #8250DF } /* Name.Other */\n.highlight .py { color: #0550AE } /* Name.Property */\n.highlight .nt { color: #116329 } /* Name.Tag */\n.highlight .nv { color: #953800 } /* Name.Variable */\n.highlight .ow { color: #8250DF } /* Operator.Word */\n.highlight .pm { color: #24292F } /* Punctuation.Marker */\n.highlight .w { color: #24292F } /* Text.Whitespace */\n.highlight .mb { color: #953800 } /* Literal.Number.Bin */\n.highlight .mf { color: #953800 } /* Literal.Number.Float */\n.highlight .mh { color: #953800 } /* Literal.Number.Hex */\n.highlight .mi { color: #953800 } /* Literal.Number.Integer */\n.highlight .mo { color: #953800 } /* Literal.Number.Oct */\n.highlight .sa { color: #0550AE } /* Literal.String.Affix */\n.highlight .sb { color: #0550AE } /* Literal.String.Backtick */\n.highlight .sc { color: #0550AE } /* Literal.String.Char */\n.highlight .dl { color: #0550AE } /* Literal.String.Delimiter */\n.highlight .sd { color: #0550AE } /* Literal.String.Doc */\n.highlight .s2 { color: #0550AE } /* Literal.String.Double */\n.highlight .se { color: #0550AE } /* Literal.String.Escape */\n.highlight .sh { color: #0550AE } /* Literal.String.Heredoc */\n.highlight .si { color: #0550AE } /* Literal.String.Interpol */\n.highlight .sx { color: #0550AE } /* Literal.String.Other */\n.highlight .sr { color: #0550AE } /* Literal.String.Regex */\n.highlight .s1 { color: #0550AE } /* Literal.String.Single */\n.highlight .ss { color: #0550AE } /* Literal.String.Symbol */\n.highlight .bp { color: #953800 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #0550AE } /* Name.Function.Magic */\n.highlight .vc { color: #953800 } /* Name.Variable.Class */\n.highlight .vg { color: #953800 } /* Name.Variable.Global */\n.highlight .vi { color: #953800 } /* Name.Variable.Instance */\n.highlight .vm { color: #953800 } /* Name.Variable.Magic */\n.highlight .il { color: #953800 } /* Literal.Number.Integer.Long */\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n scroll-behavior: smooth;\n\n @include fs-4;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","$color-scheme: light !default;\n$body-background-color: $white !default;\n$body-heading-color: $grey-dk-300 !default;\n$body-text-color: $grey-dk-100 !default;\n$link-color: $purple-000 !default;\n$nav-child-link-color: $grey-dk-100 !default;\n$sidebar-color: $grey-lt-000 !default;\n$base-button-color: #f7f7f7 !default;\n$btn-primary-color: $purple-100 !default;\n$code-background-color: $white !default;\n$feedback-color: darken($sidebar-color, 3%) !default;\n$table-background-color: $white !default;\n$search-background-color: $white !default;\n$search-result-preview-color: $grey-dk-100 !default;\n\n@import \"./vendor/accessible-pygments/github-light\";\n","@mixin fs-1 {\n & {\n font-size: $font-size-1 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n & {\n font-size: $font-size-2 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n & {\n font-size: $font-size-3 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n & {\n font-size: $font-size-4 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n & {\n font-size: $font-size-5 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n & {\n font-size: $font-size-6 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n & {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n & {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n & {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n & {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n\n & + .main {\n @include mq(md) {\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n\n .main-header {\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n background-color: $body-background-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n }\n }\n}\n\n.main {\n margin: auto;\n\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n }\n}\n\n.main-content-wrap {\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include container;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n border-bottom: $border $border-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n\n @include container;\n\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n.site-footer {\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n\n @include container;\n\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n margin: 0;\n\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n color: darken($link-color, 5%);\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n font-weight: 300;\n\n @include fs-8;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n\n @include fs-2;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n border-radius: 12px;\n\n @include fs-2;\n}\n\n.label-green:not(g) {\n background-color: $green-300;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-300;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-200);\n}\n\n.btn-green {\n @include btn-color($white, $green-300);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 2px solid $link-color;\n outline-offset: -2px;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n @include fs-3;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n padding: $sp-3;\n border: none;\n background: none;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n outline: 2px solid $link-color;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n margin-top: 0;\n margin-bottom: $sp-3;\n\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n\n @include fs-2;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n// Screenreader-only\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n hr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}\n\np.tip, blockquote.tip {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $green-300;\n content: \"Tip\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .tip-title {\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.tip-title, blockquote.tip-title {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.tip {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.tip-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.note, blockquote.note {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $blue-300;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.warning, blockquote.warning {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-300;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n"],"file":"just-the-docs-light.css"} \ No newline at end of file diff --git a/main/assets/css/just-the-docs-meshtastic-dark.css.map b/main/assets/css/just-the-docs-meshtastic-dark.css.map index 971394281c..9d2fcfd929 100644 --- a/main/assets/css/just-the-docs-meshtastic-dark.css.map +++ b/main/assets/css/just-the-docs-meshtastic-dark.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/vendor/accessible-pygments/github-light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/base.scss","../../_sass/color_schemes/meshtastic-dark.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/mixins/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/mixins/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/_variables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/content.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/navigation.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/labels.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/mixins/_buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/search.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/tables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/code.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_colors.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_lists.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_spacing.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/print.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/skiptomain.scss","just-the-docs-meshtastic-dark.scss"],"names":[],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;EAAkB;;;AAClB;EAAgB;EAAiB;AACjC;EAAkB;EAAiB;AACnC;EAAgB;EAAiB;AACjC;EAAgB;EAAiB;AACjC;EAAgB;EAAiB;AACjC;EAAgB;EAAiB;AACjC;EAAgB;EAAiB;AACjC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAkB;EAAiB;AACnC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAqB;AACtC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAoB;AACrC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAgB;EAAiB;AACjC;EAAgB;EAAiB;AACjC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAgB;EAAiB;AACjC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AAClC;EAAiB;EAAiB;AChFlC;AAEA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;EAEE;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;EAGE;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;AAEE;EACA;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;AAEE;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;;;AAGF;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;EAEE;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;EAEE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AC1VF;EACE,cCGa;;;ADAf;EACE;;;AAGF;EACE;;AEmBA;EACE;;AClBA;EHHJ;IEyBI;;;;AFnBJ;EACE,aIfiB;EJgBjB;EACA,aIbiB;EJcjB,OCTgB;EDUhB,kBCZsB;EDatB;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAYE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;EACA;EACA;EACA,aI1CyB;EJ2CzB,OCvCmB;;;AD0CrB;EACE;EACA;;;AAGF;EACE,OC7CW;ED8CX;;;AAGF;EACE;EACA,uBCvCa;EDwCb;;AAEA;EACE;;;AAIJ;EACE,aIvEiB;EJwEjB;EACA,aIvEiB;;;AJ0EnB;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,kBCvEa;EDwEb;;;AAIF;EACE;EAGA;EACA;EACA;EACA;;;AK7GF;EACE;EACA;EACA;EACA,kBJKc;;AEGZ;EEZJ;IAOI;IACA;IACA,ODwFW;ICvFX;IACA;IACA;;;AFAA;EEZJ;IAgBI;IACA,WD+EQ;;;ADpFR;EEQF;IAEI,aD2ES;;;ADrFX;EEQF;IAQI;;;AAOF;EACE;EACA,kBJ5BU;;AEGZ;EEuBA;IAKI;IACA,kBJjCgB;;;AIoClB;EACE;;AFjCJ;EEgCE;IAII;;;;AAOV;EACE;;AF5CE;EE2CJ;IAII;IACA,WDyCY;;;;ACrChB;EACE,aDaK;ECZL,gBDYK;EDvDL,eCuDK;EDtDL,cCsDK;;ADlEH;EEoDJ;IFrCI,eCqDG;IDpDH,cCoDG;;;ADpEH;EEoDJ;IAOI,aDSG;ICRH,gBDQG;;;;ACJP;EACE;EACA;;AFlEE;EEgEJ;IAKI;IACA;IACA,QDmBY;;;;ACfhB;AAAA;AAAA;EAGE;;AF9EE;EE2EJ;AAAA;AAAA;IAMI,ODGQ;;;;ACCZ;EACE;;AAEA;EACE;;AFzFA;EEqFJ;IAQI;IACA,aDxBG;ICyBH,gBD7BG;IC8BH;IACA;;;;AAIJ;EACE;EACA,YDbc;ECcd;;AFxGE;EEqGJ;IAMI,QDjBY;ICkBZ,YDlBY;ICmBZ;;;;AAIJ;EACE;EACA;EACA;EACA;EACA,aDrDK;ECsDL,gBDtDK;ECuDL,OJzHmB;EEYnB,eCuDK;EDtDL,cCsDK;;ADlEH;EEiHJ;IFlGI,eCqDG;IDpDH,cCoDG;;;AF/BL;EACE;;ACtCA;EEiHJ;IHvEI;IACA,aEhDuB;;;ADKvB;EEiHJ;IAcI,aD/DG;ICgEH,gBDhEG;;;;AC+EP;EACE;EACA;EACA,SDhFK;ECiFL;;;AFnJE;EEuJF;IACE;;;AAIJ;EACE;;;AAQF;EACE;;;AAOF;EACE;EACA;EACA;EACA,aD/GK;ECgHL,gBDhHK;EDvDL,eCuDK;EDtDL,cCsDK;;ADlEH;EE6KJ;IF9JI,eCqDG;IDpDH,cCoDG;;;AFvEL;EACE;;ACEA;EE6KJ;IH3KI;;;ACFA;EE6KJ;IAYI;IACA;;;;AAIJ;EACE,OD5HK;EC6HL,QD7HK;EC8HL,OJ/LW;;;AKXb;EACE,aFEoB;;AEApB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;AAGF;EACE;EACA;;AAGF;AAAA;EAEE;;AAIA;EACE,YF+CC;;AE3CL;EACE;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA,OFfM;EEgBN;EACA;;AJ1BN;EACE;;ACRA;EG2BE;IJfF;;;ACZA;EG2BE;IAUI;;;AAIJ;EACE;;AAGE;EACE;EACA;;AAOV;EACE;;AAGE;EACE;EACA;EACA,OF7CM;EE8CN;;AAMJ;EACE;;AAIJ;EACE;EACA;;AAKF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;AAAA;EAEE;;AAGF;EACE;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;;AAmBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AASF;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;AAKN;EACE;EACA;EACA,OFnFG;EEoFH;EACA,eFzFG;EE0FH,cF1FG;EE2FH;;AH1JA;EGmJF;IAUI;IACA;;;AAGF;EACE;EACA;EACA;EACA,OLnKO;EKoKP;;AAYF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAIJ;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAWE,YF9JG;;;AG3EP;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;ALoBF;EACE;;AClBA;EILF;IL2BE;;;ACtBA;EDOF;IACE;;;ACRA;EILF;ILiBE;;;AKPA;EACE;EACA,YH+DC;EG9DD,aHuDC;EGtDD,gBHsDC;EGrDD;EAEE,eH0DD;EGzDC,cHqDD;;ADlEH;EIKA;IAeI,YHgDD;IG/CC;IAEE,eH6CH;IG5CG,cH4CH;;;AGrCD;EACE,OHkCD;EGjCC,QHiCD;EGhCC;;AAGF;EACE;EACA;;AAGF;EAEE;EACA;;AASJ;EACE;EAEE;EAGF,OHUC;EGTD,QHSC;EGRD;EACA,ON7DO;;AEFT;EIsDA;IAYI,OHED;IGDC,QHCD;IGAC;;;AAGF;EACE;;AAQA;EACE;;AAKN;EACE;EACA,cHvBC;EGwBD;;AAEA;EACE;;AAEA;EACE,ONzFa;;AM4Ff;EACE,ON7Fa;;AMmGjB;EAEI;;AAMJ;EACE;;;AAMR;EACE;EACA;EACA;EACA;EACA;;ALhIA;EACE;;ACEA;EIwHJ;ILtHI;;;ACFA;EIwHJ;IASI;IACA,YHhEG;IGiEH;;EAEA;IACE;;;;AAMJ;EACE;;AAEA;EACE;;AAGE;EACE,ONlJG;;AMqJL;EACE,ONtJG;;;AM+Jb;EACE;EACA;;ALtKA;EACE;;ACEA;EIiKJ;IL/JI;;;AKoKF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AJlLA;EIiKJ;IAqBI,eHpHG;;;;ADlEH;EI4LJ;IAEI;;;;AAIJ;EACE;EACA,eHnIK;EGoIL;;;AAGF;EACE;;AL5MA;EACE;;ACEA;EIwMJ;ILtMI;;;AK0MF;EACE;;AAGF;EACE;EACA,cHlJG;EGmJH,aHnJG;EGoJH,OHpMU;EGqMV;;AAIA;EACE;;;ACrON;AAAA;EAEE;;ANoEA;AAAA;EACE;EACA,aElEuB;;ADKvB;EKXJ;AAAA;IN4EI;;;;AA5BF;AAAA;AAAA;EACE;;ACtCA;EKJJ;AAAA;AAAA;IN8CI;IACA,aEhDuB;;;;AFgCzB;AAAA;EACE;;AC5BA;EKEJ;AAAA;IN8BI;;;;AMzBJ;AAAA;EAEE;EACA;EACA;;ANdA;AAAA;EACE;;ACEA;EKOJ;AAAA;INLI;;;;AMcJ;EACE;;;ANVA;AAAA;EACE;;ACRA;EKoBJ;AAAA;INRI;;;;AAfF;AAAA;EACE;;ACEA;EKyBJ;AAAA;INvBI;;;;AALF;EACE;;ACEA;EK8BJ;IN5BI;;;;AMgCJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACvDF;AAAA;EAEE;EACA;EACA,cLoEK;EKnEL,aLmEK;EKlEL,OLiBM;EKhBN;EACA;EACA,kBL6BS;EK5BT;;APLA;AAAA;EACE;;ACEA;EMRJ;AAAA;IPUI;;;;AOKJ;EACE,kBL4BU;;;AKzBZ;EACE,kBLcW;;;AKXb;EACE,kBL4BQ;;;AKzBV;EACE,OLFY;EKGZ,kBLkBW;;;AMlDb;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OTIW;ESHX;EACA;EACA;EACA,kBTiBkB;EShBlB;EACA,eNyEc;EMxEd,YACE;EAEF;;AAEA;EACE;EACA;EACA;;AAGF;EAEE;;AAGF;EAEE;;AAGF;EAIE;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;AAKA;EAEE;EACA;EACA;EACA;EACA;;;AAKN;EACE,OT1DW;ES2DX;EACA;;AAEA;EAIE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA,YACE;;AAIJ;EAEE;;;AAIJ;ECnGE,OP0BM;EOzBN;EACA;EACA,YACE;;AAGF;EAEE,OPiBI;EOhBJ;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;;ADgFJ;ECvGE,OP0BM;EOzBN;EACA;EACA,YACE;;AAGF;EAEE,OPiBI;EOhBJ;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;;ADoFJ;EC3GE,OP0BM;EOzBN;EACA;EACA,YACE;;AAGF;EAEE,OPiBI;EOhBJ;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;;ADwFJ;EC/GE,OP0BM;EOzBN;EACA;EACA,YACE;;AAGF;EAEE,OPiBI;EOhBJ;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;;AD4FJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AE3HF;EACE;EACA;EACA;EACA,QRgFM;EQ/EN,SRuEK;EQtEL;;ATME;ESZJ;IASI;IACA;IACA;IACA;IACA;;;;AAIJ;EACE;EACA;EACA,QR8DK;EQ7DL;EACA,eRmEc;EQlEd,YACE;EAEF;;ATdE;ESKJ;IAYI;IACA;IACA,WRwEmB;IQvEnB;IACA;IACA;IACA;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,OXnCgB;EWoChB,kBXTwB;EWUxB;EACA;EACA;EACA;EACA;;ATvCE;ES2BJ;IAeI;IACA;IACA,kBXhDoB;IWiDpB;;;AAGF;EACE;EACA;;AAEA;EACE,OXnDO;;;AWwDb;EACE;EACA;EACA;EACA,cRIK;;ADlEH;ES0DJ;IAOI,cRGG;IQFH;;;AAGF;EACE;EACA;EACA;EACA,ORzDU;;;AQ6Dd;EACE;EACA;EACA;EACA;EACA;EACA;EACA,kBX3DwB;EW4DxB,4BRRc;EQSd,2BRTc;EQUd,YACE;;ATxFA;ES6EJ;IAeI;IACA,ORFmB;IQGnB;;;;AAIJ;EACE;EACA,eRrCK;EQsCL;;AVpFA;EACE;;AClBA;ESkGJ;IV5EI;;;ACtBA;EDOF;IACE;;;ACRA;ESkGJ;IVtFI;;;;AUiGJ;EACE;EACA;;;AAGF;EACE;EACA;;AAEA;EAEE,kBXlGa;;;AWsGjB;EACE;EACA,aR9DK;EQ+DL,gBR/DK;;ADhEH;ES4HJ;IAMI;IACA;IACA,eRpEG;IQqEH;;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;;AVxIF;EACE;;ACRA;ES8IF;IVlIE;;;ACZA;EDHF;IACE;;;ACEA;ES8IF;IV5IE;;;AUqJF;EACE,ORtFG;EQuFH,QRvFG;EQwFH,cR1FG;EQ2FH,OXzJS;EW0JT;;AAGF;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,OXtK4B;EWuK5B;EACA;;AV5LA;EACE;;ACYA;ESyKJ;IVjLI;;;;AU2LJ;EACE;EACA,aRrHK;EQsHL,gBRtHK;EQuHL,cRrHK;EQsHL,aRxHK;EQyHL,OXlL4B;EWmL5B;EACA,aR/GO;EQgHP,mBX9Ka;;ACjBb;EACE;;ACEA;ESmLJ;IVjLI;;;ACFA;ESmLJ;IAaI;IACA;IACA,cRlIG;IQmIH;IACA;;;;AAIJ;EACE,YR1IK;;;AQ6IP;EACE;;;AAGF;EACE;;AV1MA;EACE;;ACRA;ESgNJ;IVpMI;;;;AUyMJ;EACE;EACA,ORrJK;EQsJL,QRtJK;EQuJL;EACA,ORnJK;EQoJL,QRpJK;EQqJL,kBXnMwB;EWoMxB;EACA;EACA,YACE;EAEF;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE,QRxLI;EQyLJ;;ATjQA;ES+PF;IAKI,ORzKiB;IQ0KjB,YACE;;;AAKN;EACE,kBXnPsB;;AEzBtB;ES2QF;IAII;;;AT/QF;ESmRF;IAEI;;;AAIJ;EACE;;AAGF;EACE;EACA;EACA;EACA,YACE;;ATlSF;ESwSA;IACE;IACA;IACA;;;AAIJ;EACE,aRxOI;;ADxEJ;ES+SF;IAII;;;;AC9TN;EACE;EACA;EACA;EACA,eT0EK;ESzEL;EACA,eTkFc;ESjFd,YACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA,kBZIuB;EYHvB;EACA;;AXNA;AAAA;EACE;;ACRA;EUOJ;AAAA;IXKI;;;AWKF;AAAA;EACE;;;AAOE;AAAA;EAEE;;AAGF;EACE,gBTkCD;;;AS3BL;EACE;;;AC9CF;EACE;EACA;EACA,kBbcoB;EabpB;EACA,eV+EY;;;AU1EhB;EACE,cbUa;;;AayCf;AAAA;AAAA;EAGE;EACA,eVMK;EULL,kBblDsB;EamDtB,eVgBc;EUfd;EACA;EACA;EACA;;AAIA;AAAA;AAAA;EACE,OVLG;EUMH;EACA;EACA;EACA;EACA,SVVG;EUWH;EACA;EACA,ObhFc;EaiFd;;AAEA;AAAA;AAAA;EACE,MbpFY;;AauFd;AAAA;AAAA;EACE;EACA;EACA;;AAGF;AAAA;AAAA;EACE;EACA;;AAMF;AAAA;AAAA;EACE;EACA;;;AASJ;EACE;EACA,SV/CG;EUgDH;EACA;EACA,eVtCY;;AUyCd;AAAA;EAEE;EACA;EACA;;;AAUJ;EACE;EACA,eVrEK;;AU6CL;EACE;EACA,SV/CG;EUgDH;EACA;EACA,eVtCY;;AUyCd;AAAA;EAEE;EACA;EACA;;;AAwBF;AAAA;EAEE;EACA,SVpFG;EUqFH;EACA;EACA,eV3EY;;;AUmFhB;EACE;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA,kBbhKoB;EaiKpB;;AZ9KF;AAAA;EACE;;ACEA;EWsKF;AAAA;IZpKE;;;AY8KF;EACE;EACA,eVjHG;EUkHH,cVlHG;;AUqHL;EACE;EACA;;;AAKJ;AAAA;EAEE,SV9HK;EU+HL,eV/HK;EUgIL;EACA;EACA,eVtHc;;AUwHd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKJ;EACE;EACA;EACA;;;AAIF;AAAA;EAEE,YbnNsB;EasNpB,ObrNoB;;;Aa4NxB;EACE,Yb9NsB;;;AcpBxB;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACvOF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AbrBE;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AdhHA;EACE;;ACYA;EcZJ;IfII;;;;AAKF;EACE;;ACEA;EcRJ;IfUI;;;;AAKF;EACE;;ACRA;EcJJ;IfgBI;;;;AAKF;EACE;;AClBA;EcAJ;IfsBI;;;;AAKF;EACE;;AC5BA;EcIJ;If4BI;;;;AAKF;EACE;;ACtCA;EcQJ;IfkCI;IACA,aEhDuB;;;;AFqDzB;EACE;EACA,aEvDuB;;ADKvB;EcYJ;If0CI;;;;AAKF;EACE;EACA,aElEuB;;ADKvB;EcgBJ;IfiDI;;;;AAKF;EACE;EACA,aE7EuB;;ADKvB;EcoBJ;IfwDI;;;;AAKF;EACE;EACA,aExFuB;;ADKvB;EcwBJ;If+DI;;;;Ae3DJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,abxDiB;;;Aa2DnB;EACE,ab1DyB;;;Aa6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AhBlCA;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AhB7GA;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;ACvCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OpBCW;EoBAX,kBpBNsB;EoBOtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACpBF;EACE,kBrBCsB;;;AqBExB;EACI;EACA;EACA,elB4EY;EkB3EZ;EACA;;AAEA;EACI,OlB8BI;EkB7BJ;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBoBM;EkBnBN;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBiDY;EkBhDZ;EACA;;AACA;EACE;EACA;EACA,OlBEM;EkBDN;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,elBGY;EkBFZ;EACA;;AAEA;EACI,OlB/CG;EkBgDH;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBzDK;EkB0DL;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBxBY;EkByBZ;EACA;;AACA;EACE;EACA;EACA,OlB3EK;EkB4EL;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,elBtEY;EkBuEZ;EACA;;AAEA;EACI,OlBhHK;EkBiHL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlB1HO;EkB2HP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBjGY;EkBkGZ;EACA;;AACA;EACE;EACA;EACA,OlB5IO;EkB6IP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["/*\ngenerated by accessible-pygments \nCopyright (c) 2022, Quansight Labs\nLicensed under the BSD license, see LICENSE for details.\n--\ngenerated by Pygments \nCopyright 2006-2025 by the Pygments team.\nLicensed under the BSD license, see LICENSE for details.\n*/\n\n.highlight .hll { background-color: #0969da4a }\n.highlight .c { color: #6E7781 } /* Comment */\n.highlight .err { color: #CF222E } /* Error */\n.highlight .k { color: #CF222E } /* Keyword */\n.highlight .l { color: #953800 } /* Literal */\n.highlight .n { color: #8250DF } /* Name */\n.highlight .o { color: #116329 } /* Operator */\n.highlight .p { color: #24292F } /* Punctuation */\n.highlight .ch { color: #6E7781 } /* Comment.Hashbang */\n.highlight .cm { color: #6E7781 } /* Comment.Multiline */\n.highlight .cp { color: #6E7781 } /* Comment.Preproc */\n.highlight .cpf { color: #6E7781 } /* Comment.PreprocFile */\n.highlight .c1 { color: #6E7781 } /* Comment.Single */\n.highlight .cs { color: #6E7781 } /* Comment.Special */\n.highlight .gd { color: #0550AE } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #CF222E } /* Generic.Error */\n.highlight .gh { color: #0550AE } /* Generic.Heading */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #0550AE } /* Generic.Subheading */\n.highlight .kc { color: #0550AE } /* Keyword.Constant */\n.highlight .kd { color: #CF222E } /* Keyword.Declaration */\n.highlight .kn { color: #CF222E } /* Keyword.Namespace */\n.highlight .kp { color: #CF222E } /* Keyword.Pseudo */\n.highlight .kr { color: #CF222E } /* Keyword.Reserved */\n.highlight .kt { color: #CF222E } /* Keyword.Type */\n.highlight .ld { color: #953800 } /* Literal.Date */\n.highlight .m { color: #953800 } /* Literal.Number */\n.highlight .s { color: #0550AE } /* Literal.String */\n.highlight .na { color: #953800 } /* Name.Attribute */\n.highlight .nb { color: #953800 } /* Name.Builtin */\n.highlight .nc { color: #0550AE } /* Name.Class */\n.highlight .no { color: #0550AE } /* Name.Constant */\n.highlight .nd { color: #953800 } /* Name.Decorator */\n.highlight .ni { color: #116329 } /* Name.Entity */\n.highlight .ne { color: #8250DF } /* Name.Exception */\n.highlight .nf { color: #0550AE } /* Name.Function */\n.highlight .nl { color: #953800 } /* Name.Label */\n.highlight .nn { color: #24292F } /* Name.Namespace */\n.highlight .nx { color: #8250DF } /* Name.Other */\n.highlight .py { color: #0550AE } /* Name.Property */\n.highlight .nt { color: #116329 } /* Name.Tag */\n.highlight .nv { color: #953800 } /* Name.Variable */\n.highlight .ow { color: #8250DF } /* Operator.Word */\n.highlight .pm { color: #24292F } /* Punctuation.Marker */\n.highlight .w { color: #24292F } /* Text.Whitespace */\n.highlight .mb { color: #953800 } /* Literal.Number.Bin */\n.highlight .mf { color: #953800 } /* Literal.Number.Float */\n.highlight .mh { color: #953800 } /* Literal.Number.Hex */\n.highlight .mi { color: #953800 } /* Literal.Number.Integer */\n.highlight .mo { color: #953800 } /* Literal.Number.Oct */\n.highlight .sa { color: #0550AE } /* Literal.String.Affix */\n.highlight .sb { color: #0550AE } /* Literal.String.Backtick */\n.highlight .sc { color: #0550AE } /* Literal.String.Char */\n.highlight .dl { color: #0550AE } /* Literal.String.Delimiter */\n.highlight .sd { color: #0550AE } /* Literal.String.Doc */\n.highlight .s2 { color: #0550AE } /* Literal.String.Double */\n.highlight .se { color: #0550AE } /* Literal.String.Escape */\n.highlight .sh { color: #0550AE } /* Literal.String.Heredoc */\n.highlight .si { color: #0550AE } /* Literal.String.Interpol */\n.highlight .sx { color: #0550AE } /* Literal.String.Other */\n.highlight .sr { color: #0550AE } /* Literal.String.Regex */\n.highlight .s1 { color: #0550AE } /* Literal.String.Single */\n.highlight .ss { color: #0550AE } /* Literal.String.Symbol */\n.highlight .bp { color: #953800 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #0550AE } /* Name.Function.Magic */\n.highlight .vc { color: #953800 } /* Name.Variable.Class */\n.highlight .vg { color: #953800 } /* Name.Variable.Global */\n.highlight .vi { color: #953800 } /* Name.Variable.Instance */\n.highlight .vm { color: #953800 } /* Name.Variable.Magic */\n.highlight .il { color: #953800 } /* Literal.Number.Integer.Long */\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n scroll-behavior: smooth;\n\n @include fs-4;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","// Meshtastic Material 3 — Dark color scheme for just-the-docs\n// Source: core/ui/.../Color.kt §8.3 (Dark Scheme)\n//\n// Brand colors:\n// Primary (Dark): #67EA94 (Green 500)\n// Surface (Dark): #1A1B26 (Neutral 900)\n\n$color-scheme: dark;\n\n// Body / page background\n$body-background-color: #1A1B26; // Neutral 900 — surfaceDark\n$sidebar-color: #1A1B26; // Neutral 900\n$body-text-color: #ECEDF3; // Neutral 100 — onSurfaceDark\n$body-heading-color: #ECEDF3; // Neutral 100\n\n// Links\n$link-color: #67EA94; // Green 500 — primaryDark\n$nav-link-color: #67EA94; // Green 500\n\n// Navigation\n$nav-child-link-color: #B8BAC8; // Neutral 300 — secondaryDark\n$search-result-preview-color: #B8BAC8;\n\n// Code\n$code-background-color: #0F1017; // Neutral 950 — surfaceContainerLowestDark\n$code-linenumber-color: #9496A6; // Neutral 400\n\n// Borders\n$border-color: #3D3E50; // Neutral 700 — outlineVariantDark\n$table-background-color: #242533; // Interpolated — surfaceContainerDark\n\n// Buttons\n$btn-primary-color: #67EA94; // Green 500\n$base-button-color: #2C2D3C; // Neutral 800\n\n// Feedback / callouts\n$feedback-color: #242533; // surfaceContainerDark\n\n// Search\n$search-background-color: #242533; // surfaceContainerDark\n","@mixin fs-1 {\n & {\n font-size: $font-size-1 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n & {\n font-size: $font-size-2 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n & {\n font-size: $font-size-3 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n & {\n font-size: $font-size-4 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n & {\n font-size: $font-size-5 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n & {\n font-size: $font-size-6 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n & {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n & {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n & {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n & {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n\n & + .main {\n @include mq(md) {\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n\n .main-header {\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n background-color: $body-background-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n }\n }\n}\n\n.main {\n margin: auto;\n\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n }\n}\n\n.main-content-wrap {\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include container;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n border-bottom: $border $border-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n\n @include container;\n\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n.site-footer {\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n\n @include container;\n\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n margin: 0;\n\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n color: darken($link-color, 5%);\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n font-weight: 300;\n\n @include fs-8;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n\n @include fs-2;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n border-radius: 12px;\n\n @include fs-2;\n}\n\n.label-green:not(g) {\n background-color: $green-300;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-300;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-200);\n}\n\n.btn-green {\n @include btn-color($white, $green-300);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 2px solid $link-color;\n outline-offset: -2px;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n @include fs-3;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n padding: $sp-3;\n border: none;\n background: none;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n outline: 2px solid $link-color;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n margin-top: 0;\n margin-bottom: $sp-3;\n\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n\n @include fs-2;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n// Screenreader-only\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n hr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./color_schemes/meshtastic-dark\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}\n\np.tip, blockquote.tip {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $green-300;\n content: \"Tip\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .tip-title {\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.tip-title, blockquote.tip-title {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.tip {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.tip-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.note, blockquote.note {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $blue-300;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.warning, blockquote.warning {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-300;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n"],"file":"just-the-docs-meshtastic-dark.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/vendor/accessible-pygments/github-light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/base.scss","../../_sass/color_schemes/meshtastic-dark.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/mixins/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/mixins/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/_variables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/content.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/navigation.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/labels.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/mixins/_buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/search.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/tables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/code.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_colors.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_lists.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_spacing.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/print.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/skiptomain.scss","just-the-docs-meshtastic-dark.scss"],"names":[],"mappings":"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;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACvOF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AbrBE;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab5CJ;Ea+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AdhHA;EACE;;ACYA;EcZJ;IfII;;;;AAKF;EACE;;ACEA;EcRJ;IfUI;;;;AAKF;EACE;;ACRA;EcJJ;IfgBI;;;;AAKF;EACE;;AClBA;EcAJ;IfsBI;;;;AAKF;EACE;;AC5BA;EcIJ;If4BI;;;;AAKF;EACE;;ACtCA;EcQJ;IfkCI;IACA,aEhDuB;;;;AFqDzB;EACE;EACA,aEvDuB;;ADKvB;EcYJ;If0CI;;;;AAKF;EACE;EACA,aElEuB;;ADKvB;EcgBJ;IfiDI;;;;AAKF;EACE;EACA,aE7EuB;;ADKvB;EcoBJ;IfwDI;;;;AAKF;EACE;EACA,aExFuB;;ADKvB;EcwBJ;If+DI;;;;Ae3DJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,abxDiB;;;Aa2DnB;EACE,ab1DyB;;;Aa6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AhBlCA;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AhB7GA;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;ACvCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OpBCW;EoBAX,kBpBNsB;EoBOtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACpBF;EACE,kBrBCsB;;;AqBExB;EACI;EACA;EACA,elB4EY;EkB3EZ;EACA;;AAEA;EACI,OlB8BI;EkB7BJ;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBoBM;EkBnBN;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBiDY;EkBhDZ;EACA;;AACA;EACE;EACA;EACA,OlBEM;EkBDN;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,elBGY;EkBFZ;EACA;;AAEA;EACI,OlB/CG;EkBgDH;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBzDK;EkB0DL;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBxBY;EkByBZ;EACA;;AACA;EACE;EACA;EACA,OlB3EK;EkB4EL;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,elBtEY;EkBuEZ;EACA;;AAEA;EACI,OlBhHK;EkBiHL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlB1HO;EkB2HP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBjGY;EkBkGZ;EACA;;AACA;EACE;EACA;EACA,OlB5IO;EkB6IP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["/*\ngenerated by accessible-pygments \nCopyright (c) 2022, Quansight Labs\nLicensed under the BSD license, see LICENSE for details.\n--\ngenerated by Pygments \nCopyright 2006-2025 by the Pygments team.\nLicensed under the BSD license, see LICENSE for details.\n*/\n\n.highlight .hll { background-color: #0969da4a }\n.highlight .c { color: #6E7781 } /* Comment */\n.highlight .err { color: #CF222E } /* Error */\n.highlight .k { color: #CF222E } /* Keyword */\n.highlight .l { color: #953800 } /* Literal */\n.highlight .n { color: #8250DF } /* Name */\n.highlight .o { color: #116329 } /* Operator */\n.highlight .p { color: #24292F } /* Punctuation */\n.highlight .ch { color: #6E7781 } /* Comment.Hashbang */\n.highlight .cm { color: #6E7781 } /* Comment.Multiline */\n.highlight .cp { color: #6E7781 } /* Comment.Preproc */\n.highlight .cpf { color: #6E7781 } /* Comment.PreprocFile */\n.highlight .c1 { color: #6E7781 } /* Comment.Single */\n.highlight .cs { color: #6E7781 } /* Comment.Special */\n.highlight .gd { color: #0550AE } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #CF222E } /* Generic.Error */\n.highlight .gh { color: #0550AE } /* Generic.Heading */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #0550AE } /* Generic.Subheading */\n.highlight .kc { color: #0550AE } /* Keyword.Constant */\n.highlight .kd { color: #CF222E } /* Keyword.Declaration */\n.highlight .kn { color: #CF222E } /* Keyword.Namespace */\n.highlight .kp { color: #CF222E } /* Keyword.Pseudo */\n.highlight .kr { color: #CF222E } /* Keyword.Reserved */\n.highlight .kt { color: #CF222E } /* Keyword.Type */\n.highlight .ld { color: #953800 } /* Literal.Date */\n.highlight .m { color: #953800 } /* Literal.Number */\n.highlight .s { color: #0550AE } /* Literal.String */\n.highlight .na { color: #953800 } /* Name.Attribute */\n.highlight .nb { color: #953800 } /* Name.Builtin */\n.highlight .nc { color: #0550AE } /* Name.Class */\n.highlight .no { color: #0550AE } /* Name.Constant */\n.highlight .nd { color: #953800 } /* Name.Decorator */\n.highlight .ni { color: #116329 } /* Name.Entity */\n.highlight .ne { color: #8250DF } /* Name.Exception */\n.highlight .nf { color: #0550AE } /* Name.Function */\n.highlight .nl { color: #953800 } /* Name.Label */\n.highlight .nn { color: #24292F } /* Name.Namespace */\n.highlight .nx { color: #8250DF } /* Name.Other */\n.highlight .py { color: #0550AE } /* Name.Property */\n.highlight .nt { color: #116329 } /* Name.Tag */\n.highlight .nv { color: #953800 } /* Name.Variable */\n.highlight .ow { color: #8250DF } /* Operator.Word */\n.highlight .pm { color: #24292F } /* Punctuation.Marker */\n.highlight .w { color: #24292F } /* Text.Whitespace */\n.highlight .mb { color: #953800 } /* Literal.Number.Bin */\n.highlight .mf { color: #953800 } /* Literal.Number.Float */\n.highlight .mh { color: #953800 } /* Literal.Number.Hex */\n.highlight .mi { color: #953800 } /* Literal.Number.Integer */\n.highlight .mo { color: #953800 } /* Literal.Number.Oct */\n.highlight .sa { color: #0550AE } /* Literal.String.Affix */\n.highlight .sb { color: #0550AE } /* Literal.String.Backtick */\n.highlight .sc { color: #0550AE } /* Literal.String.Char */\n.highlight .dl { color: #0550AE } /* Literal.String.Delimiter */\n.highlight .sd { color: #0550AE } /* Literal.String.Doc */\n.highlight .s2 { color: #0550AE } /* Literal.String.Double */\n.highlight .se { color: #0550AE } /* Literal.String.Escape */\n.highlight .sh { color: #0550AE } /* Literal.String.Heredoc */\n.highlight .si { color: #0550AE } /* Literal.String.Interpol */\n.highlight .sx { color: #0550AE } /* Literal.String.Other */\n.highlight .sr { color: #0550AE } /* Literal.String.Regex */\n.highlight .s1 { color: #0550AE } /* Literal.String.Single */\n.highlight .ss { color: #0550AE } /* Literal.String.Symbol */\n.highlight .bp { color: #953800 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #0550AE } /* Name.Function.Magic */\n.highlight .vc { color: #953800 } /* Name.Variable.Class */\n.highlight .vg { color: #953800 } /* Name.Variable.Global */\n.highlight .vi { color: #953800 } /* Name.Variable.Instance */\n.highlight .vm { color: #953800 } /* Name.Variable.Magic */\n.highlight .il { color: #953800 } /* Literal.Number.Integer.Long */\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n scroll-behavior: smooth;\n\n @include fs-4;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","// Meshtastic Material 3 — Dark color scheme for just-the-docs\n// Source: core/ui/.../Color.kt §8.3 (Dark Scheme)\n//\n// Brand colors:\n// Primary (Dark): #67EA94 (Green 500)\n// Surface (Dark): #1A1B26 (Neutral 900)\n\n$color-scheme: dark;\n\n// Body / page background\n$body-background-color: #1A1B26; // Neutral 900 — surfaceDark\n$sidebar-color: #1A1B26; // Neutral 900\n$body-text-color: #ECEDF3; // Neutral 100 — onSurfaceDark\n$body-heading-color: #ECEDF3; // Neutral 100\n\n// Links\n$link-color: #67EA94; // Green 500 — primaryDark\n$nav-link-color: #67EA94; // Green 500\n\n// Navigation\n$nav-child-link-color: #B8BAC8; // Neutral 300 — secondaryDark\n$search-result-preview-color: #B8BAC8;\n\n// Code\n$code-background-color: #0F1017; // Neutral 950 — surfaceContainerLowestDark\n$code-linenumber-color: #9496A6; // Neutral 400\n\n// Borders\n$border-color: #3D3E50; // Neutral 700 — outlineVariantDark\n$table-background-color: #242533; // Interpolated — surfaceContainerDark\n\n// Buttons\n$btn-primary-color: #67EA94; // Green 500\n$base-button-color: #2C2D3C; // Neutral 800\n\n// Feedback / callouts\n$feedback-color: #242533; // surfaceContainerDark\n\n// Search\n$search-background-color: #242533; // surfaceContainerDark\n","@mixin fs-1 {\n & {\n font-size: $font-size-1 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n & {\n font-size: $font-size-2 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n & {\n font-size: $font-size-3 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n & {\n font-size: $font-size-4 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n & {\n font-size: $font-size-5 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n & {\n font-size: $font-size-6 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n & {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n & {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n & {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n & {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n\n & + .main {\n @include mq(md) {\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n\n .main-header {\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n background-color: $body-background-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n }\n }\n}\n\n.main {\n margin: auto;\n\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n }\n}\n\n.main-content-wrap {\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include container;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n border-bottom: $border $border-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n\n @include container;\n\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n.site-footer {\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n\n @include container;\n\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n margin: 0;\n\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n color: darken($link-color, 5%);\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n font-weight: 300;\n\n @include fs-8;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n\n @include fs-2;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n border-radius: 12px;\n\n @include fs-2;\n}\n\n.label-green:not(g) {\n background-color: $green-300;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-300;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-200);\n}\n\n.btn-green {\n @include btn-color($white, $green-300);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 2px solid $link-color;\n outline-offset: -2px;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n @include fs-3;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n padding: $sp-3;\n border: none;\n background: none;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n outline: 2px solid $link-color;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n margin-top: 0;\n margin-bottom: $sp-3;\n\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n\n @include fs-2;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n// Screenreader-only\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n hr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./color_schemes/meshtastic-dark\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}\n\np.tip, blockquote.tip {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $green-300;\n content: \"Tip\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .tip-title {\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.tip-title, blockquote.tip-title {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.tip {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.tip-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.note, blockquote.note {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $blue-300;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.warning, blockquote.warning {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-300;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n"],"file":"just-the-docs-meshtastic-dark.css"} \ No newline at end of file diff --git a/main/assets/css/just-the-docs-meshtastic.css.map b/main/assets/css/just-the-docs-meshtastic.css.map index 20380f8545..c4762f21e6 100644 --- a/main/assets/css/just-the-docs-meshtastic.css.map +++ b/main/assets/css/just-the-docs-meshtastic.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/vendor/accessible-pygments/github-light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/base.scss","../../_sass/color_schemes/meshtastic.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/mixins/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/mixins/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/_variables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/content.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/navigation.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/labels.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/color_schemes/light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/support/mixins/_buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/search.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/tables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/code.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_colors.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_lists.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/utilities/_spacing.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/print.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260905-3069-v688xg/_sass/skiptomain.scss","just-the-docs-meshtastic.scss"],"names":[],"mappings":"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AGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACvOF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AdrBE;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AfhHA;EACE;;ACYA;EeZJ;IhBII;;;;AAKF;EACE;;ACEA;EeRJ;IhBUI;;;;AAKF;EACE;;ACRA;EeJJ;IhBgBI;;;;AAKF;EACE;;AClBA;EeAJ;IhBsBI;;;;AAKF;EACE;;AC5BA;EeIJ;IhB4BI;;;;AAKF;EACE;;ACtCA;EeQJ;IhBkCI;IACA,aEhDuB;;;;AFqDzB;EACE;EACA,aEvDuB;;ADKvB;EeYJ;IhB0CI;;;;AAKF;EACE;EACA,aElEuB;;ADKvB;EegBJ;IhBiDI;;;;AAKF;EACE;EACA,aE7EuB;;ADKvB;EeoBJ;IhBwDI;;;;AAKF;EACE;EACA,aExFuB;;ADKvB;EewBJ;IhB+DI;;;;AgB3DJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,adxDiB;;;Ac2DnB;EACE,ad1DyB;;;Ac6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AjBlCA;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AjB7GA;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;ACvCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OrBCW;EqBAX,kBrBNsB;EqBOtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACpBF;EACE,kBtBCsB;;;AsBExB;EACI;EACA;EACA,enB4EY;EmB3EZ;EACA;;AAEA;EACI,OnB8BI;EmB7BJ;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnBoBM;EmBnBN;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBiDY;EmBhDZ;EACA;;AACA;EACE;EACA;EACA,OnBEM;EmBDN;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,enBGY;EmBFZ;EACA;;AAEA;EACI,OnB/CG;EmBgDH;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnBzDK;EmB0DL;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBxBY;EmByBZ;EACA;;AACA;EACE;EACA;EACA,OnB3EK;EmB4EL;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,enBtEY;EmBuEZ;EACA;;AAEA;EACI,OnBhHK;EmBiHL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnB1HO;EmB2HP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBjGY;EmBkGZ;EACA;;AACA;EACE;EACA;EACA,OnB5IO;EmB6IP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["/*\ngenerated by accessible-pygments \nCopyright (c) 2022, Quansight Labs\nLicensed under the BSD license, see LICENSE for details.\n--\ngenerated by Pygments \nCopyright 2006-2025 by the Pygments team.\nLicensed under the BSD license, see LICENSE for details.\n*/\n\n.highlight .hll { background-color: #0969da4a }\n.highlight .c { color: #6E7781 } /* Comment */\n.highlight .err { color: #CF222E } /* Error */\n.highlight .k { color: #CF222E } /* Keyword */\n.highlight .l { color: #953800 } /* Literal */\n.highlight .n { color: #8250DF } /* Name */\n.highlight .o { color: #116329 } /* Operator */\n.highlight .p { color: #24292F } /* Punctuation */\n.highlight .ch { color: #6E7781 } /* Comment.Hashbang */\n.highlight .cm { color: #6E7781 } /* Comment.Multiline */\n.highlight .cp { color: #6E7781 } /* Comment.Preproc */\n.highlight .cpf { color: #6E7781 } /* Comment.PreprocFile */\n.highlight .c1 { color: #6E7781 } /* Comment.Single */\n.highlight .cs { color: #6E7781 } /* Comment.Special */\n.highlight .gd { color: #0550AE } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #CF222E } /* Generic.Error */\n.highlight .gh { color: #0550AE } /* Generic.Heading */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #0550AE } /* Generic.Subheading */\n.highlight .kc { color: #0550AE } /* Keyword.Constant */\n.highlight .kd { color: #CF222E } /* Keyword.Declaration */\n.highlight .kn { color: #CF222E } /* Keyword.Namespace */\n.highlight .kp { color: #CF222E } /* Keyword.Pseudo */\n.highlight .kr { color: #CF222E } /* Keyword.Reserved */\n.highlight .kt { color: #CF222E } /* Keyword.Type */\n.highlight .ld { color: #953800 } /* Literal.Date */\n.highlight .m { color: #953800 } /* Literal.Number */\n.highlight .s { color: #0550AE } /* Literal.String */\n.highlight .na { color: #953800 } /* Name.Attribute */\n.highlight .nb { color: #953800 } /* Name.Builtin */\n.highlight .nc { color: #0550AE } /* Name.Class */\n.highlight .no { color: #0550AE } /* Name.Constant */\n.highlight .nd { color: #953800 } /* Name.Decorator */\n.highlight .ni { color: #116329 } /* Name.Entity */\n.highlight .ne { color: #8250DF } /* Name.Exception */\n.highlight .nf { color: #0550AE } /* Name.Function */\n.highlight .nl { color: #953800 } /* Name.Label */\n.highlight .nn { color: #24292F } /* Name.Namespace */\n.highlight .nx { color: #8250DF } /* Name.Other */\n.highlight .py { color: #0550AE } /* Name.Property */\n.highlight .nt { color: #116329 } /* Name.Tag */\n.highlight .nv { color: #953800 } /* Name.Variable */\n.highlight .ow { color: #8250DF } /* Operator.Word */\n.highlight .pm { color: #24292F } /* Punctuation.Marker */\n.highlight .w { color: #24292F } /* Text.Whitespace */\n.highlight .mb { color: #953800 } /* Literal.Number.Bin */\n.highlight .mf { color: #953800 } /* Literal.Number.Float */\n.highlight .mh { color: #953800 } /* Literal.Number.Hex */\n.highlight .mi { color: #953800 } /* Literal.Number.Integer */\n.highlight .mo { color: #953800 } /* Literal.Number.Oct */\n.highlight .sa { color: #0550AE } /* Literal.String.Affix */\n.highlight .sb { color: #0550AE } /* Literal.String.Backtick */\n.highlight .sc { color: #0550AE } /* Literal.String.Char */\n.highlight .dl { color: #0550AE } /* Literal.String.Delimiter */\n.highlight .sd { color: #0550AE } /* Literal.String.Doc */\n.highlight .s2 { color: #0550AE } /* Literal.String.Double */\n.highlight .se { color: #0550AE } /* Literal.String.Escape */\n.highlight .sh { color: #0550AE } /* Literal.String.Heredoc */\n.highlight .si { color: #0550AE } /* Literal.String.Interpol */\n.highlight .sx { color: #0550AE } /* Literal.String.Other */\n.highlight .sr { color: #0550AE } /* Literal.String.Regex */\n.highlight .s1 { color: #0550AE } /* Literal.String.Single */\n.highlight .ss { color: #0550AE } /* Literal.String.Symbol */\n.highlight .bp { color: #953800 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #0550AE } /* Name.Function.Magic */\n.highlight .vc { color: #953800 } /* Name.Variable.Class */\n.highlight .vg { color: #953800 } /* Name.Variable.Global */\n.highlight .vi { color: #953800 } /* Name.Variable.Instance */\n.highlight .vm { color: #953800 } /* Name.Variable.Magic */\n.highlight .il { color: #953800 } /* Literal.Number.Integer.Long */\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n scroll-behavior: smooth;\n\n @include fs-4;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","// Meshtastic Material 3 — Light color scheme for just-the-docs\n// Source: core/ui/.../Color.kt §8.2 (Light Scheme)\n//\n// Brand colors:\n// Primary (Light): #2D8F52 (Green 700)\n// Surface (Light): #F5F6FA (Neutral 50)\n\n$color-scheme: light;\n\n// Body / page background\n$body-background-color: #F5F6FA; // Neutral 50 — surfaceLight\n$sidebar-color: #ECEDF3; // Neutral 100 — surfaceContainerLight\n$body-text-color: #2C2D3C; // Neutral 800 — onSurfaceLight\n$body-heading-color: #2C2D3C; // Neutral 800\n\n// Links\n$link-color: #2D8F52; // Green 700 — primaryLight\n$nav-link-color: #2D8F52; // Green 700\n\n// Navigation\n$nav-child-link-color: #555668; // Neutral 600 — secondaryLight\n$search-result-preview-color: #555668;\n\n// Code\n$code-background-color: #ECEDF3; // Neutral 100\n$code-linenumber-color: #9496A6; // Neutral 400\n\n// Borders\n$border-color: #D5D6E0; // Neutral 200 — outlineVariantLight\n$table-background-color: #F5F6FA; // Neutral 50\n\n// Buttons\n$btn-primary-color: #2D8F52; // Green 700\n\n// Feedback / callouts\n$feedback-color: #E0E1EB; // surfaceContainerHighLight\n\n// Search\n$search-background-color: #FFFFFF; // surfaceContainerLowestLight\n","@mixin fs-1 {\n & {\n font-size: $font-size-1 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n & {\n font-size: $font-size-2 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n & {\n font-size: $font-size-3 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n & {\n font-size: $font-size-4 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n & {\n font-size: $font-size-5 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n & {\n font-size: $font-size-6 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n & {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n & {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n & {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n & {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n\n & + .main {\n @include mq(md) {\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n\n .main-header {\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n background-color: $body-background-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n }\n }\n}\n\n.main {\n margin: auto;\n\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n }\n}\n\n.main-content-wrap {\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include container;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n border-bottom: $border $border-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n\n @include container;\n\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n.site-footer {\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n\n @include container;\n\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n margin: 0;\n\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n color: darken($link-color, 5%);\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n font-weight: 300;\n\n @include fs-8;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n\n @include fs-2;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n border-radius: 12px;\n\n @include fs-2;\n}\n\n.label-green:not(g) {\n background-color: $green-300;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-300;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-200);\n}\n\n.btn-green {\n @include btn-color($white, $green-300);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","$color-scheme: light !default;\n$body-background-color: $white !default;\n$body-heading-color: $grey-dk-300 !default;\n$body-text-color: $grey-dk-100 !default;\n$link-color: $purple-000 !default;\n$nav-child-link-color: $grey-dk-100 !default;\n$sidebar-color: $grey-lt-000 !default;\n$base-button-color: #f7f7f7 !default;\n$btn-primary-color: $purple-100 !default;\n$code-background-color: $white !default;\n$feedback-color: darken($sidebar-color, 3%) !default;\n$table-background-color: $white !default;\n$search-background-color: $white !default;\n$search-result-preview-color: $grey-dk-100 !default;\n\n@import \"./vendor/accessible-pygments/github-light\";\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 2px solid $link-color;\n outline-offset: -2px;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n @include fs-3;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n padding: $sp-3;\n border: none;\n background: none;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n outline: 2px solid $link-color;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n margin-top: 0;\n margin-bottom: $sp-3;\n\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n\n @include fs-2;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n// Screenreader-only\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n hr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./color_schemes/meshtastic\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}\n\np.tip, blockquote.tip {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $green-300;\n content: \"Tip\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .tip-title {\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.tip-title, blockquote.tip-title {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.tip {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.tip-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.note, blockquote.note {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $blue-300;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.warning, blockquote.warning {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-300;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n"],"file":"just-the-docs-meshtastic.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/vendor/accessible-pygments/github-light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/base.scss","../../_sass/color_schemes/meshtastic.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/mixins/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/mixins/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/_variables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/content.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/navigation.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/labels.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/color_schemes/light.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/support/mixins/_buttons.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/search.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/tables.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/code.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_colors.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_layout.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_typography.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_lists.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/utilities/_spacing.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/print.scss","../../../../../../../../../../tmp/jekyll-remote-theme-20260906-3993-9e487a/_sass/skiptomain.scss","just-the-docs-meshtastic.scss"],"names":[],"mappings":"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AGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACvOF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AdrBE;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad5CJ;Ec+BE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AfhHA;EACE;;ACYA;EeZJ;IhBII;;;;AAKF;EACE;;ACEA;EeRJ;IhBUI;;;;AAKF;EACE;;ACRA;EeJJ;IhBgBI;;;;AAKF;EACE;;AClBA;EeAJ;IhBsBI;;;;AAKF;EACE;;AC5BA;EeIJ;IhB4BI;;;;AAKF;EACE;;ACtCA;EeQJ;IhBkCI;IACA,aEhDuB;;;;AFqDzB;EACE;EACA,aEvDuB;;ADKvB;EeYJ;IhB0CI;;;;AAKF;EACE;EACA,aElEuB;;ADKvB;EegBJ;IhBiDI;;;;AAKF;EACE;EACA,aE7EuB;;ADKvB;EeoBJ;IhBwDI;;;;AAKF;EACE;EACA,aExFuB;;ADKvB;EewBJ;IhB+DI;;;;AgB3DJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,adxDiB;;;Ac2DnB;EACE,ad1DyB;;;Ac6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AjBlCA;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AjB7GA;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;ACvCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OrBCW;EqBAX,kBrBNsB;EqBOtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACpBF;EACE,kBtBCsB;;;AsBExB;EACI;EACA;EACA,enB4EY;EmB3EZ;EACA;;AAEA;EACI,OnB8BI;EmB7BJ;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnBoBM;EmBnBN;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBiDY;EmBhDZ;EACA;;AACA;EACE;EACA;EACA,OnBEM;EmBDN;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,enBGY;EmBFZ;EACA;;AAEA;EACI,OnB/CG;EmBgDH;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnBzDK;EmB0DL;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBxBY;EmByBZ;EACA;;AACA;EACE;EACA;EACA,OnB3EK;EmB4EL;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAMJ;EACI;EACA;EACA,enBtEY;EmBuEZ;EACA;;AAEA;EACI,OnBhHK;EmBiHL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnB1HO;EmB2HP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBjGY;EmBkGZ;EACA;;AACA;EACE;EACA;EACA,OnB5IO;EmB6IP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["/*\ngenerated by accessible-pygments \nCopyright (c) 2022, Quansight Labs\nLicensed under the BSD license, see LICENSE for details.\n--\ngenerated by Pygments \nCopyright 2006-2025 by the Pygments team.\nLicensed under the BSD license, see LICENSE for details.\n*/\n\n.highlight .hll { background-color: #0969da4a }\n.highlight .c { color: #6E7781 } /* Comment */\n.highlight .err { color: #CF222E } /* Error */\n.highlight .k { color: #CF222E } /* Keyword */\n.highlight .l { color: #953800 } /* Literal */\n.highlight .n { color: #8250DF } /* Name */\n.highlight .o { color: #116329 } /* Operator */\n.highlight .p { color: #24292F } /* Punctuation */\n.highlight .ch { color: #6E7781 } /* Comment.Hashbang */\n.highlight .cm { color: #6E7781 } /* Comment.Multiline */\n.highlight .cp { color: #6E7781 } /* Comment.Preproc */\n.highlight .cpf { color: #6E7781 } /* Comment.PreprocFile */\n.highlight .c1 { color: #6E7781 } /* Comment.Single */\n.highlight .cs { color: #6E7781 } /* Comment.Special */\n.highlight .gd { color: #0550AE } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .gr { color: #CF222E } /* Generic.Error */\n.highlight .gh { color: #0550AE } /* Generic.Heading */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #0550AE } /* Generic.Subheading */\n.highlight .kc { color: #0550AE } /* Keyword.Constant */\n.highlight .kd { color: #CF222E } /* Keyword.Declaration */\n.highlight .kn { color: #CF222E } /* Keyword.Namespace */\n.highlight .kp { color: #CF222E } /* Keyword.Pseudo */\n.highlight .kr { color: #CF222E } /* Keyword.Reserved */\n.highlight .kt { color: #CF222E } /* Keyword.Type */\n.highlight .ld { color: #953800 } /* Literal.Date */\n.highlight .m { color: #953800 } /* Literal.Number */\n.highlight .s { color: #0550AE } /* Literal.String */\n.highlight .na { color: #953800 } /* Name.Attribute */\n.highlight .nb { color: #953800 } /* Name.Builtin */\n.highlight .nc { color: #0550AE } /* Name.Class */\n.highlight .no { color: #0550AE } /* Name.Constant */\n.highlight .nd { color: #953800 } /* Name.Decorator */\n.highlight .ni { color: #116329 } /* Name.Entity */\n.highlight .ne { color: #8250DF } /* Name.Exception */\n.highlight .nf { color: #0550AE } /* Name.Function */\n.highlight .nl { color: #953800 } /* Name.Label */\n.highlight .nn { color: #24292F } /* Name.Namespace */\n.highlight .nx { color: #8250DF } /* Name.Other */\n.highlight .py { color: #0550AE } /* Name.Property */\n.highlight .nt { color: #116329 } /* Name.Tag */\n.highlight .nv { color: #953800 } /* Name.Variable */\n.highlight .ow { color: #8250DF } /* Operator.Word */\n.highlight .pm { color: #24292F } /* Punctuation.Marker */\n.highlight .w { color: #24292F } /* Text.Whitespace */\n.highlight .mb { color: #953800 } /* Literal.Number.Bin */\n.highlight .mf { color: #953800 } /* Literal.Number.Float */\n.highlight .mh { color: #953800 } /* Literal.Number.Hex */\n.highlight .mi { color: #953800 } /* Literal.Number.Integer */\n.highlight .mo { color: #953800 } /* Literal.Number.Oct */\n.highlight .sa { color: #0550AE } /* Literal.String.Affix */\n.highlight .sb { color: #0550AE } /* Literal.String.Backtick */\n.highlight .sc { color: #0550AE } /* Literal.String.Char */\n.highlight .dl { color: #0550AE } /* Literal.String.Delimiter */\n.highlight .sd { color: #0550AE } /* Literal.String.Doc */\n.highlight .s2 { color: #0550AE } /* Literal.String.Double */\n.highlight .se { color: #0550AE } /* Literal.String.Escape */\n.highlight .sh { color: #0550AE } /* Literal.String.Heredoc */\n.highlight .si { color: #0550AE } /* Literal.String.Interpol */\n.highlight .sx { color: #0550AE } /* Literal.String.Other */\n.highlight .sr { color: #0550AE } /* Literal.String.Regex */\n.highlight .s1 { color: #0550AE } /* Literal.String.Single */\n.highlight .ss { color: #0550AE } /* Literal.String.Symbol */\n.highlight .bp { color: #953800 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #0550AE } /* Name.Function.Magic */\n.highlight .vc { color: #953800 } /* Name.Variable.Class */\n.highlight .vg { color: #953800 } /* Name.Variable.Global */\n.highlight .vi { color: #953800 } /* Name.Variable.Instance */\n.highlight .vm { color: #953800 } /* Name.Variable.Magic */\n.highlight .il { color: #953800 } /* Literal.Number.Integer.Long */\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n scroll-behavior: smooth;\n\n @include fs-4;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","// Meshtastic Material 3 — Light color scheme for just-the-docs\n// Source: core/ui/.../Color.kt §8.2 (Light Scheme)\n//\n// Brand colors:\n// Primary (Light): #2D8F52 (Green 700)\n// Surface (Light): #F5F6FA (Neutral 50)\n\n$color-scheme: light;\n\n// Body / page background\n$body-background-color: #F5F6FA; // Neutral 50 — surfaceLight\n$sidebar-color: #ECEDF3; // Neutral 100 — surfaceContainerLight\n$body-text-color: #2C2D3C; // Neutral 800 — onSurfaceLight\n$body-heading-color: #2C2D3C; // Neutral 800\n\n// Links\n$link-color: #2D8F52; // Green 700 — primaryLight\n$nav-link-color: #2D8F52; // Green 700\n\n// Navigation\n$nav-child-link-color: #555668; // Neutral 600 — secondaryLight\n$search-result-preview-color: #555668;\n\n// Code\n$code-background-color: #ECEDF3; // Neutral 100\n$code-linenumber-color: #9496A6; // Neutral 400\n\n// Borders\n$border-color: #D5D6E0; // Neutral 200 — outlineVariantLight\n$table-background-color: #F5F6FA; // Neutral 50\n\n// Buttons\n$btn-primary-color: #2D8F52; // Green 700\n\n// Feedback / callouts\n$feedback-color: #E0E1EB; // surfaceContainerHighLight\n\n// Search\n$search-background-color: #FFFFFF; // surfaceContainerLowestLight\n","@mixin fs-1 {\n & {\n font-size: $font-size-1 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n & {\n font-size: $font-size-2 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n & {\n font-size: $font-size-3 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n & {\n font-size: $font-size-4 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n & {\n font-size: $font-size-5 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n & {\n font-size: $font-size-6 !important;\n }\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n & {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n & {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n & {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n & {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n }\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n\n & + .main {\n @include mq(md) {\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n\n .main-header {\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n background-color: $body-background-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n }\n }\n}\n\n.main {\n margin: auto;\n\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n }\n}\n\n.main-content-wrap {\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include container;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n border-bottom: $border $border-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n\n @include container;\n\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n.site-footer {\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n\n @include container;\n\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n margin: 0;\n\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n color: darken($link-color, 5%);\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n font-weight: 300;\n\n @include fs-8;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n\n @include fs-2;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n border-radius: 12px;\n\n @include fs-2;\n}\n\n.label-green:not(g) {\n background-color: $green-300;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-300;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-200);\n}\n\n.btn-green {\n @include btn-color($white, $green-300);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","$color-scheme: light !default;\n$body-background-color: $white !default;\n$body-heading-color: $grey-dk-300 !default;\n$body-text-color: $grey-dk-100 !default;\n$link-color: $purple-000 !default;\n$nav-child-link-color: $grey-dk-100 !default;\n$sidebar-color: $grey-lt-000 !default;\n$base-button-color: #f7f7f7 !default;\n$btn-primary-color: $purple-100 !default;\n$code-background-color: $white !default;\n$feedback-color: darken($sidebar-color, 3%) !default;\n$table-background-color: $white !default;\n$search-background-color: $white !default;\n$search-result-preview-color: $grey-dk-100 !default;\n\n@import \"./vendor/accessible-pygments/github-light\";\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 2px solid $link-color;\n outline-offset: -2px;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n @include fs-3;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n padding: $sp-3;\n border: none;\n background: none;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n outline: 2px solid $link-color;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n margin-top: 0;\n margin-bottom: $sp-3;\n\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 1px solid $body-text-color;\n border-radius: $border-radius;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n\n @include fs-2;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n// Screenreader-only\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n hr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./color_schemes/meshtastic\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}\n\np.tip, blockquote.tip {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $green-300;\n content: \"Tip\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .tip-title {\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.tip-title, blockquote.tip-title {\n border: 1px $green-000 solid;\n border-left: $border-radius solid $green-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $green-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.tip {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.tip-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.note, blockquote.note {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $blue-300;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n border: 1px $blue-000 solid;\n border-left: $border-radius solid $blue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $blue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n\np.warning, blockquote.warning {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-300;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n border: 1px $yellow-000 solid;\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n\n > p:first-child {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n\n > p:nth-child(2) {\n margin-top: 0;\n }\n\n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n"],"file":"just-the-docs-meshtastic.css"} \ No newline at end of file diff --git a/main/assets/js/search-data.json b/main/assets/js/search-data.json index d4e75a5efd..1a5af70a1e 100644 --- a/main/assets/js/search-data.json +++ b/main/assets/js/search-data.json @@ -25719,7 +25719,7 @@ },"3674": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Descripció | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Descripció | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/ca-rES/user/nodes.html#node-list", "relUrl": "/ca-rES/user/nodes.html#node-list" @@ -25782,7 +25782,7 @@ },"3683": { "doc": "Noder", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Roll | Beskrivning | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Hittegods | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Roll | Beskrivning | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Hittegods | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/sv-rSE/user/nodes.html#node-list", "relUrl": "/sv-rSE/user/nodes.html#node-list" @@ -25845,7 +25845,7 @@ },"3692": { "doc": "Knoten", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Rolle | Beschreibung | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client - Versteckt | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router mit Verzögerung | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Tracker | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Behandelt Datenverkehr von/zu Ihren bevorzugten Knoten mit der Priorität „Router Late“ (wodurch sichergestellt wird, dass diese Nachrichten eine zusätzliche Relaisabdeckung erhalten), während der übrige Verkehr wie bei einem normalen Client gehandhabt wird. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Symbol | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Rolle | Beschreibung | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client - Versteckt | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router mit Verzögerung | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Tracker | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Behandelt Datenverkehr von/zu Ihren bevorzugten Knoten mit der Priorität „Router Late“ (wodurch sichergestellt wird, dass diese Nachrichten eine zusätzliche Relaisabdeckung erhalten), während der übrige Verkehr wie bei einem normalen Client gehandhabt wird. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Symbol | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/de-rDE/user/nodes.html#node-list", "relUrl": "/de-rDE/user/nodes.html#node-list" @@ -25908,7 +25908,7 @@ },"3701": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Functie | Beschrijving | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Functie | Beschrijving | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/nl-rNL/user/nodes.html#node-list", "relUrl": "/nl-rNL/user/nodes.html#node-list" @@ -25971,7 +25971,7 @@ },"3710": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Cur síos | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Cur síos | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/ga-rIE/user/nodes.html#node-list", "relUrl": "/ga-rIE/user/nodes.html#node-list" @@ -26034,7 +26034,7 @@ },"3719": { "doc": "Węzły", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Rola | Opis | . | Klient | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Klient pasywny | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Czujnik | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Rola | Opis | . | Klient | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Klient pasywny | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Czujnik | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/pl-rPL/user/nodes.html#node-list", "relUrl": "/pl-rPL/user/nodes.html#node-list" @@ -26097,7 +26097,7 @@ },"3728": { "doc": "Чворови", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Улога | Опис | . | Клијент | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Клијент мутиран | Receives but doesn’t retransmit | . | Скривени клијент | Like Client Mute, plus hides from node list | . | Рутер | Prioritizes message forwarding; stays awake to relay | . | Рутер са кашњењем | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Трекер | Optimized for position reporting at regular intervals | . | Сензор | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | ТАК Трекер | TAK position reporting only | . | Изгубљено и нађено | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Иконица | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Улога | Опис | . | Клијент | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Клијент мутиран | Receives but doesn’t retransmit | . | Скривени клијент | Like Client Mute, plus hides from node list | . | Рутер | Prioritizes message forwarding; stays awake to relay | . | Рутер са кашњењем | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Трекер | Optimized for position reporting at regular intervals | . | Сензор | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | ТАК Трекер | TAK position reporting only | . | Изгубљено и нађено | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Иконица | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/sr-rLatn/user/nodes.html#node-list", "relUrl": "/sr-rLatn/user/nodes.html#node-list" @@ -26160,7 +26160,7 @@ },"3737": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Aprašymas | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Aprašymas | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/lt-rLT/user/nodes.html#node-list", "relUrl": "/lt-rLT/user/nodes.html#node-list" @@ -26223,7 +26223,7 @@ },"3746": { "doc": "节点", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | 角色 | 说明 | . | 客户端 | Standard end-user node | . | 客户群 | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | 客户端静默 | Receives but doesn’t retransmit | . | 客户端隐藏 | Like Client Mute, plus hides from node list | . | 路由 | Prioritizes message forwarding; stays awake to relay | . | 延迟时间 | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | 追踪器 | Optimized for position reporting at regular intervals | . | 传感器 | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK 追踪器 | TAK position reporting only | . | 失物招领 | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | 图标 | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | 角色 | 说明 | . | 客户端 | Standard end-user node | . | 客户群 | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | 客户端静默 | Receives but doesn’t retransmit | . | 客户端隐藏 | Like Client Mute, plus hides from node list | . | 路由 | Prioritizes message forwarding; stays awake to relay | . | 延迟时间 | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | 追踪器 | Optimized for position reporting at regular intervals | . | 传感器 | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK 追踪器 | TAK position reporting only | . | 失物招领 | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | 图标 | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/zh-rCN/user/nodes.html#node-list", "relUrl": "/zh-rCN/user/nodes.html#node-list" @@ -26286,7 +26286,7 @@ },"3755": { "doc": "Чворови", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Улога | Опис | . | Клијент | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Клијент мутиран | Receives but doesn’t retransmit | . | Скривени клијент | Like Client Mute, plus hides from node list | . | Рутер | Prioritizes message forwarding; stays awake to relay | . | Рутер са кашњењем | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Трекер | Optimized for position reporting at regular intervals | . | Сензор | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | ТАК Трекер | TAK position reporting only | . | Изгубљено и нађено | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Иконица | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Улога | Опис | . | Клијент | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Клијент мутиран | Receives but doesn’t retransmit | . | Скривени клијент | Like Client Mute, plus hides from node list | . | Рутер | Prioritizes message forwarding; stays awake to relay | . | Рутер са кашњењем | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Трекер | Optimized for position reporting at regular intervals | . | Сензор | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | ТАК Трекер | TAK position reporting only | . | Изгубљено и нађено | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Иконица | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/srp/user/nodes.html#node-list", "relUrl": "/srp/user/nodes.html#node-list" @@ -26349,7 +26349,7 @@ },"3764": { "doc": "ノード", "title": "ノードリスト", - "content": "ノードリストには、無線機が受信したすべてのノードが、次の情報とともに表示されます: . | ノード名: ユーザーが設定した正式名称 | 短縮名: 4 文字の識別子 | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | 最後の通信: 最後に通信してからの経過時間 | 距離: 推定距離(位置情報が共有されている場合) | バッテリー: リモートノードのバッテリー残量(テレメトリが有効な場合) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. ノードのステータス表示 . | 指標 | 意味 | . | Green last-heard time | 過去 2 時間以内に受信したノード | . | Plain last-heard time | 2 時間を超えて受信していないノード | . | ⭐ お気に入り | Node you marked as a favorite. | . There is no separate “away” tier. ノードの役割 . ノードには、メッシュ上での動作に影響するさまざまな役割を設定できます: . | 役割 | 説明 | . | クライアント | Standard end-user node | . | クライアント・ベース | お気に入りノードの通信をルーター・レイトの優先度で扱い、それ以外の通信はクライアントとして扱います | . | クライアント・ミュート | 受信しますが、再送信はしません | . | クライアント・非表示 | クライアント・ミュートと同様で、さらにノードリストから隠れます | . | ルーター | メッセージの転送を優先し、中継のために起動し続けます | . | ルーター・レイト | 1 回だけ再送信するインフラノードですが、他のすべてのモードの後にのみ行います(補助的なカバレッジを提供します) | . | ルーター・クライアント | ⚠️ 非推奨(ファームウェア 2.3.15 で削除)。選択できなくなりました。代わりにルーターまたはクライアントを使用してください | . | リピーター | ⚠️ 非推奨(ファームウェア 2.7.11 で削除)。選択できなくなりました。代わりにルーターを使用してください | . | トラッカー | 一定間隔での位置報告に最適化されています | . | センサー | テレメトリ報告に最適化されています | . | TAK | TAK システムと相互運用します(CoT を送受信) | . | TAK Tracker | TAK の位置報告のみ | . | 紛失モード | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . 役割を選ぶ . ほとんどのユーザーは、デフォルトのクライアント役割のままにしてください。 次のような場合は、別の役割を検討してください: . | ルーター: 電源が安定した、固定された高所(屋上、丘の上など)にノードを設置している場合。 ルーターは他のノードのメッセージを中継するために常に起動し続け、メッシュのカバレッジ拡大に不可欠です。 Don’t use Router on battery-powered handheld radios. | ルーター・レイト: パケットを常に 1 回だけ再送信するインフラノードですが、他のすべてのルーティングモードの番が終わった後にのみ行います。 主要なルーターと競合することなく、ローカルのクラスターに補助的なカバレッジを提供します。 | クライアント・ベース: お気に入りノードとの間の通信をルーター・レイトの優先度で扱い(それらのメッセージが追加の中継カバレッジを得られるようにします)、それ以外はすべて通常のクライアントとして処理します。 | クライアント・ミュート: メッシュの通信を受信したいが、中継には貢献したくない場合。 Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). 発信の合間はスリープしてバッテリーを節約します。 | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). 電力プロファイルはトラッカーと同様です。 | TAK/TAK Tracker: ATAK/WinTAK システムと相互運用する場合にのみ必要です。 詳しくは TAK 連携 を参照してください。 | . 💡 ヒント: メッシュは、ほとんどのノードがクライアントまたはルーターのときに最も良く機能します。 Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. 目安としては、地域内のクライアント 5〜10 台につきルーター 1 台です。 . 暗号化の表示 . ノードは、名前の横に暗号化ステータスのアイコンを表示します: . | アイコン | 意味 | . | 🔒 ロック | 通信は PKI(公開鍵基盤)を使用します。本人性が検証された、エンドツーエンドの暗号化です | . | 🔓 ロック解除 | 通信は共有チャンネルの PSK を使用します。暗号化されていますが、本人性は個別には検証されていません | . | ⚠️ 不一致 | 公開鍵の不一致。前回確認時からノードの鍵が変わっています(信頼する前に調べてください) | . 💡 ヒント: PKI 暗号化(ファームウェア 2.5 以降)は、各ノードが固有の鍵ペアを持つため、チャンネル PSK より強力なセキュリティを提供します。 鍵の不一致の警告が表示された場合、そのノードはリセットされたか、侵害された可能性があります。 . To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "ノードリストには、無線機が受信したすべてのノードが、次の情報とともに表示されます: . | ノード名: ユーザーが設定した正式名称 | 短縮名: 4 文字の識別子 | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | 最後の通信: 最後に通信してからの経過時間 | 距離: 推定距離(位置情報が共有されている場合) | バッテリー: リモートノードのバッテリー残量(テレメトリが有効な場合) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. ノードのステータス表示 . | 指標 | 意味 | . | Green last-heard time | 過去 2 時間以内に受信したノード | . | Plain last-heard time | 2 時間を超えて受信していないノード | . | ⭐ お気に入り | Node you marked as a favorite. | . There is no separate “away” tier. ノードの役割 . ノードには、メッシュ上での動作に影響するさまざまな役割を設定できます: . | 役割 | 説明 | . | クライアント | Standard end-user node | . | クライアント・ベース | お気に入りノードの通信をルーター・レイトの優先度で扱い、それ以外の通信はクライアントとして扱います | . | クライアント・ミュート | 受信しますが、再送信はしません | . | クライアント・非表示 | クライアント・ミュートと同様で、さらにノードリストから隠れます | . | ルーター | メッセージの転送を優先し、中継のために起動し続けます | . | ルーター・レイト | 1 回だけ再送信するインフラノードですが、他のすべてのモードの後にのみ行います(補助的なカバレッジを提供します) | . | ルーター・クライアント | ⚠️ 非推奨(ファームウェア 2.3.15 で削除)。選択できなくなりました。代わりにルーターまたはクライアントを使用してください | . | リピーター | ⚠️ 非推奨(ファームウェア 2.7.11 で削除)。選択できなくなりました。代わりにルーターを使用してください | . | トラッカー | 一定間隔での位置報告に最適化されています | . | センサー | テレメトリ報告に最適化されています | . | TAK | TAK システムと相互運用します(CoT を送受信) | . | TAK Tracker | TAK の位置報告のみ | . | 紛失モード | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . 役割を選ぶ . ほとんどのユーザーは、デフォルトのクライアント役割のままにしてください。 次のような場合は、別の役割を検討してください: . | ルーター: 電源が安定した、固定された高所(屋上、丘の上など)にノードを設置している場合。 ルーターは他のノードのメッセージを中継するために常に起動し続け、メッシュのカバレッジ拡大に不可欠です。 Don’t use Router on battery-powered handheld radios. | ルーター・レイト: パケットを常に 1 回だけ再送信するインフラノードですが、他のすべてのルーティングモードの番が終わった後にのみ行います。 主要なルーターと競合することなく、ローカルのクラスターに補助的なカバレッジを提供します。 | クライアント・ベース: お気に入りノードとの間の通信をルーター・レイトの優先度で扱い(それらのメッセージが追加の中継カバレッジを得られるようにします)、それ以外はすべて通常のクライアントとして処理します。 | クライアント・ミュート: メッシュの通信を受信したいが、中継には貢献したくない場合。 Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). 発信の合間はスリープしてバッテリーを節約します。 | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). 電力プロファイルはトラッカーと同様です。 | TAK/TAK Tracker: ATAK/WinTAK システムと相互運用する場合にのみ必要です。 詳しくは TAK 連携 を参照してください。 | . 💡 ヒント: メッシュは、ほとんどのノードがクライアントまたはルーターのときに最も良く機能します。 Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. 目安としては、地域内のクライアント 5〜10 台につきルーター 1 台です。 . 暗号化の表示 . ノードは、名前の横に暗号化ステータスのアイコンを表示します: . | アイコン | 意味 | . | 🔒 ロック | 通信は PKI(公開鍵基盤)を使用します。本人性が検証された、エンドツーエンドの暗号化です | . | 🔓 ロック解除 | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ 不一致 | 公開鍵の不一致。前回確認時からノードの鍵が変わっています(信頼する前に調べてください) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. 鍵の不一致の警告が表示された場合、そのノードはリセットされたか、侵害された可能性があります。 . To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/ja-rJP/user/nodes.html#%E3%83%8E%E3%83%BC%E3%83%89%E3%83%AA%E3%82%B9%E3%83%88", "relUrl": "/ja-rJP/user/nodes.html#ノードリスト" @@ -26412,7 +26412,7 @@ },"3773": { "doc": "節點", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | 角色 | 描述說明 | . | 用戶端 | Standard end-user node | . | 客戶端基礎模式 | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Repeater | Optimized for position reporting at regular intervals | . | 感測器 | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | 角色 | 描述說明 | . | 用戶端 | Standard end-user node | . | 客戶端基礎模式 | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Repeater | Optimized for position reporting at regular intervals | . | 感測器 | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/zh-rTW/user/nodes.html#node-list", "relUrl": "/zh-rTW/user/nodes.html#node-list" @@ -26475,7 +26475,7 @@ },"3782": { "doc": "Uzly", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Popis | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Senzor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Popis | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Senzor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/cs-rCZ/user/nodes.html#node-list", "relUrl": "/cs-rCZ/user/nodes.html#node-list" @@ -26538,7 +26538,7 @@ },"3791": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Rola | Popis | . | Klient | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Stlmený Klient | Receives but doesn’t retransmit | . | Skrytý Klient | Like Client Mute, plus hides from node list | . | Smerovač | Prioritizes message forwarding; stays awake to relay | . | Smerovač s Oneskorením | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Sledovač | Optimized for position reporting at regular intervals | . | Senzor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Sledovač | TAK position reporting only | . | Straty a nálezy | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Rola | Popis | . | Klient | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Stlmený Klient | Receives but doesn’t retransmit | . | Skrytý Klient | Like Client Mute, plus hides from node list | . | Smerovač | Prioritizes message forwarding; stays awake to relay | . | Smerovač s Oneskorením | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Sledovač | Optimized for position reporting at regular intervals | . | Senzor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Sledovač | TAK position reporting only | . | Straty a nálezy | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/sk-rSK/user/nodes.html#node-list", "relUrl": "/sk-rSK/user/nodes.html#node-list" @@ -26601,7 +26601,7 @@ },"3800": { "doc": "Ноды", "title": "Список узлов", - "content": "Список нод показывает все ноды, которые услышало твоё радиоустройство, включая: . | Имя ноды — длинное имя, настроенное пользователем | Короткое имя — 4-символьный идентификатор | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Последнее услышанное — время с последнего общения | Расстояние — предполагаемое расстояние (если позиции общие) | Батарея — уровень заряда батареи удалённой ноды (если включена телеметрия) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Индикаторы состояния ноды . | Индикатор | Значение | . | Green last-heard time | Нода слышна за последние 2 часа | . | Plain last-heard time | Нода не отвечала больше 2 часов | . | ⭐ Избранный | Node you marked as a favorite. | . There is no separate “away” tier. Роли ноды . У нод можно настраивать разные роли, которые влияют на их поведение в сети: . | Роль | Описание | . | Client | Standard end-user node | . | Client Base | Обрабатывает трафик избранных нод как приоритет Router Late; весь остальной трафик как Client | . | Client Mute | Принимает, но не ретранслирует | . | Client Hidden | Как Client Mute, плюс скрыт из списка нод | . | Router | Ставит в приоритет пересылку сообщений; не засыпает чтобы передавать их | . | Router Late | Инфраструктурная нода, которая ретранслирует один раз, но только после всех остальных режимов (обеспечивает дополнительное покрытие) | . | Router Client | ⚠️ Устарело (удалено в прошивке 2.3.15) — больше не выбирается; используй вместо этого Router или Client | . | Repeater | ⚠️ Устарело (удалено в прошивке 2.7.11) — больше не выбирается; используй вместо этого Router | . | Tracker | Оптимизировано для передачи данных о местоположении через регулярные промежутки времени | . | Sensor | Оптимизировано для данных телеметрии | . | Тактический | Взаимодействует с системами TAK (отправляет/принимает CoT) | . | TAK Tracker | Только отчет о позиции TAK | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Выбор роли . Большинству пользователей стоит оставить роль Client по умолчанию. Рассмотри другую роль, когда: . | Router — У тебя есть узел в фиксированном, высоком месте с надежным источником питания (крыша, вершина холма). Router постоянно бодрствуют, чтобы пересылать сообщения для других, и они необходимы для расширения покрытия сети. Don’t use Router on battery-powered handheld radios. | Router Late — инфраструктурная нода, которая всегда пересылает пакеты только один раз, но только после того, как все другие режимы маршрутизации выполнили свои ходы. Обеспечивает дополнительное покрытие для локальных кластеров, не конкурируя с основными роутерами. | Client Base — обрабатывает трафик от/к вашим избранным нодам с приоритетом Router Late (обеспечивая этим сообщениям дополнительное ретранслирование), а всё остальное обрабатывает как обычный Client. | Client Mute — хочешь принимать трафик сети, но не участвовать в его ретрансляции. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Спит между передачами для экономии батареи. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Похожий профиль мощности на Tracker. | TAK / TAK Tracker — нужно только если работать с системами ATAK/WinTAK. Смотри Интеграция TAK для подробностей. | . 💡 Совет: Сеть работает лучше, когда большинство нод Client или Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. Хорошее практическое правило: один роутер на 5–10 клиентов в вашей зоне. Индикаторы шифрования . У нод рядом с именем отображаются значки статуса шифрования: . | Значок | Значение | . | 🔒 Заблокировано | Связь использует PKI (инфраструктуру публичных ключей) — сквозное шифрование с проверкой идентичности | . | 🔓 Разблокировано | Связь использует общий канал PSK — зашифровано, но личность не проверяется индивидуально | . | ⚠️ Несовпадение | Несовпадение открытого ключа — ключ ноды изменился с последнего раза (разберитесь, прежде чем доверять) | . 💡 Совет: Шифрование PKI (прошивка 2.5+) обеспечивает более надёжную защиту, чем общий PSK для канала, потому что у каждой ноды есть уникальная пара ключей. Если видишь предупреждение о несоответствии ключа, нода могла быть сброшена или скомпрометирована. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "Список нод показывает все ноды, которые услышало твоё радиоустройство, включая: . | Имя ноды — длинное имя, настроенное пользователем | Короткое имя — 4-символьный идентификатор | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Последнее услышанное — время с последнего общения | Расстояние — предполагаемое расстояние (если позиции общие) | Батарея — уровень заряда батареи удалённой ноды (если включена телеметрия) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Индикаторы состояния ноды . | Индикатор | Значение | . | Green last-heard time | Нода слышна за последние 2 часа | . | Plain last-heard time | Нода не отвечала больше 2 часов | . | ⭐ Избранный | Node you marked as a favorite. | . There is no separate “away” tier. Роли ноды . У нод можно настраивать разные роли, которые влияют на их поведение в сети: . | Роль | Описание | . | Client | Standard end-user node | . | Client Base | Обрабатывает трафик избранных нод как приоритет Router Late; весь остальной трафик как Client | . | Client Mute | Принимает, но не ретранслирует | . | Client Hidden | Как Client Mute, плюс скрыт из списка нод | . | Router | Ставит в приоритет пересылку сообщений; не засыпает чтобы передавать их | . | Router Late | Инфраструктурная нода, которая ретранслирует один раз, но только после всех остальных режимов (обеспечивает дополнительное покрытие) | . | Router Client | ⚠️ Устарело (удалено в прошивке 2.3.15) — больше не выбирается; используй вместо этого Router или Client | . | Repeater | ⚠️ Устарело (удалено в прошивке 2.7.11) — больше не выбирается; используй вместо этого Router | . | Tracker | Оптимизировано для передачи данных о местоположении через регулярные промежутки времени | . | Sensor | Оптимизировано для данных телеметрии | . | Тактический | Взаимодействует с системами TAK (отправляет/принимает CoT) | . | TAK Tracker | Только отчет о позиции TAK | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Выбор роли . Большинству пользователей стоит оставить роль Client по умолчанию. Рассмотри другую роль, когда: . | Router — У тебя есть узел в фиксированном, высоком месте с надежным источником питания (крыша, вершина холма). Router постоянно бодрствуют, чтобы пересылать сообщения для других, и они необходимы для расширения покрытия сети. Don’t use Router on battery-powered handheld radios. | Router Late — инфраструктурная нода, которая всегда пересылает пакеты только один раз, но только после того, как все другие режимы маршрутизации выполнили свои ходы. Обеспечивает дополнительное покрытие для локальных кластеров, не конкурируя с основными роутерами. | Client Base — обрабатывает трафик от/к вашим избранным нодам с приоритетом Router Late (обеспечивая этим сообщениям дополнительное ретранслирование), а всё остальное обрабатывает как обычный Client. | Client Mute — хочешь принимать трафик сети, но не участвовать в его ретрансляции. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Спит между передачами для экономии батареи. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Похожий профиль мощности на Tracker. | TAK / TAK Tracker — нужно только если работать с системами ATAK/WinTAK. Смотри Интеграция TAK для подробностей. | . 💡 Совет: Сеть работает лучше, когда большинство нод Client или Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. Хорошее практическое правило: один роутер на 5–10 клиентов в вашей зоне. Индикаторы шифрования . У нод рядом с именем отображаются значки статуса шифрования: . | Значок | Значение | . | 🔒 Заблокировано | Связь использует PKI (инфраструктуру публичных ключей) — сквозное шифрование с проверкой идентичности | . | 🔓 Разблокировано | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Несовпадение | Несовпадение открытого ключа — ключ ноды изменился с последнего раза (разберитесь, прежде чем доверять) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. Если видишь предупреждение о несоответствии ключа, нода могла быть сброшена или скомпрометирована. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/ru-rRU/user/nodes.html#%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA-%D1%83%D0%B7%D0%BB%D0%BE%D0%B2", "relUrl": "/ru-rRU/user/nodes.html#список-узлов" @@ -26664,7 +26664,7 @@ },"3809": { "doc": "Laitteet", "title": "Radiolista", - "content": "Radioluettelo näyttää kaikki radiot, joista radiosi on vastaanottanut tietoja, mukaan lukien: . | Radion nimi — käyttäjän määrittämä pitkä nimi | Lyhyt nimi — 4-merkkinen tunniste | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Viimeksi kuultu — aika viimeisimmästä yhteydestä | Etäisyys — arvioitu etäisyys (jos sijaintitiedot jaetaan) | Akku — etäradion akun varaustaso (jos telemetria on käytössä) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Radion tilailmaisimet . | Ilmaisin | Tarkoitus | . | Green last-heard time | Radio kuultu viimeisen 2 tunnin aikana | . | Plain last-heard time | Radiosta ei ole kuultu yli 2 tuntiin | . | ⭐ Suosikki | Radio, jonka olet merkinnyt suosikiksi. | . Erillistä “poissa”-tilaa ei ole. Radion roolit . Radioille voidaan määrittää erilaisia rooleja, jotka vaikuttavat niiden toimintaan verkossa: . | Rooli | Kuvaus | . | Client | Tavallinen käyttäjäradio | . | Client Base | Käsittelee suosikkiradioiden liikenteen Router Late -prioriteetilla, kaiken muun liikenteen Client -prioriteetilla | . | Client Mute | Vastaanottaa viestejä, mutta ei lähetä niitä edelleen | . | Client Hidden | Kuten Client Mute, mutta piilotetaan myös radioluettelosta | . | Router | Priorisoi viestien välittämistä; pysyy hereillä välittääkseen viestejä | . | Router Late | Infrastruktuuriradio, joka lähettää viestin uudelleen kerran, mutta vasta kaikkien muiden tilojen jälkeen (tarjoaa lisäpeittoa) | . | Router Client | ⚠️ Vanhentunut (poistettu laiteohjelmistossa 2.3.15) — ei enää valittavissa; käytä sen sijaan Router- tai Client-roolia | . | Repeater | ⚠️ Vanhentunut (poistettu laiteohjelmistossa 2.7.11) — ei enää valittavissa; käytä sen sijaan Router-roolia | . | Tracker | Optimoitu sijainnin raportointiin säännöllisin väliajoin | . | Sensor | Optimoitu telemetrian raportointiin | . | TAK | Yhteensopiva TAK-järjestelmien kanssa (lähettää ja vastaanottaa CoT-viestejä) | . | TAK Tracker | Vain TAK-sijainnin raportointi | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Roolin valitseminen . Useimpien käyttäjien kannattaa käyttää oletusarvoista Client-roolia. Harkitse muuta roolia seuraavissa tilanteissa: . | Router — Sinulla on radio kiinteässä, korkealla sijaitsevassa paikassa, jossa on luotettava virransyöttö (katto, mäki). Routerit pysyvät jatkuvasti hereillä välittääkseen muiden viestejä ja ovat tärkeitä verkon peittoalueen laajentamisessa. Älä käytä Reititin-roolia akkukäyttöisissä käsiradioissa. | Router Late — Infrastruktuuriradio, joka lähettää paketit uudelleen kerran, mutta vasta kaikkien muiden reititystilojen jälkeen. Tarjoaa lisäpeittoa paikallisille ryhmille kilpailematta ensisijaisten Routerien kanssa. | Client Base — Käsittelee suosikkiradioihisi menevän tai niistä tulevan liikenteen Router Late -prioriteetilla (varmistaen näille viesteille ylimääräisen välityspeiton), samalla kun kaikki muu käsitellään tavallisen Client-roolin tavoin. | Client Mute — Voit vastaanottaa verkkoliikennettä, mutta et osallistu viestien välittämiseen. Hyödyllinen vain kuunteluun tarkoitetuissa radioissa tai ruuhkan vähentämiseen tiheillä alueilla. | Tracker “seurantalaite” — miehittämätön radio, jonka ainoa tehtävä on lähettää GPS-sijaintiaan (esimerkiksi ajoneuvo, henkilö tai muu kohde). Nukkuu lähetysten välillä akun säästämiseksi. | Anturi — miehittämätön radio, joka lähettää ympäristötelemetriaa (lämpötila, ilmankosteus, ilmanlaatu). Samanlainen virrankulutusprofiili kuin Tracker-roolissa. | TAK / TAK Tracker — Tarvitaan vain yhteensopivuuteen ATAK-/WinTAK-järjestelmien kanssa. Katso TAK-integraatio lisätietoja varten. | . 💡 Vinkki: Verkko toimii parhaiten, kun suurin osa radioista käyttää Client- tai Router-roolia. Liian suuri määrä Client Mute (mykistetty) -radioita heikentää mesh-verkon vikasietoisuutta. Liian useat Router -roolin radiot tiheällä alueella voivat aiheuttaa ruuhkaa. Hyvä nyrkkisääntö on yksi Router jokaista 5–10 Client-roolia kohden alueellasi. Salausilmaisimet . Radiot näyttävät nimensä vieressä salauksen tilaa kuvaavat kuvakkeet: . | Kuvake | Merkitys | . | 🔒 Lukittu | Yhteys käyttää PKI:tä (julkisen avaimen infrastruktuuria) — päästä päähän salattu ja varmennetulla identiteetillä suojattu. | . | 🔓 Lukitsematon | Yhteys käyttää PKI:tä (julkisen avaimen infrastruktuuria) — päästä päähän salattu ja varmennetulla identiteetillä suojattu. | . | ⚠️ Ei täsmää | Julkinen avain ei täsmää — radion avain on muuttunut viime näkemän jälkeen (tutki ennen luottamista). | . 💡 Vinkki: PKI-salaus (laiteohjelmisto 2.5+) tarjoaa vahvemman suojauksen kuin kanavan PSK-avain, koska jokaisella radiolla on oma yksilöllinen avainparinsa. Jos näet avaimen täsmäämättömyysvaroituksen, radio on voitu nollata tai sen tietoturva on voinut vaarantua. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "Radioluettelo näyttää kaikki radiot, joista radiosi on vastaanottanut tietoja, mukaan lukien: . | Radion nimi — käyttäjän määrittämä pitkä nimi | Lyhyt nimi — 4-merkkinen tunniste | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Viimeksi kuultu — aika viimeisimmästä yhteydestä | Etäisyys — arvioitu etäisyys (jos sijaintitiedot jaetaan) | Akku — etäradion akun varaustaso (jos telemetria on käytössä) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Radion tilailmaisimet . | Ilmaisin | Tarkoitus | . | Green last-heard time | Radio kuultu viimeisen 2 tunnin aikana | . | Plain last-heard time | Radiosta ei ole kuultu yli 2 tuntiin | . | ⭐ Suosikki | Radio, jonka olet merkinnyt suosikiksi. | . Erillistä “poissa”-tilaa ei ole. Radion roolit . Radioille voidaan määrittää erilaisia rooleja, jotka vaikuttavat niiden toimintaan verkossa: . | Rooli | Kuvaus | . | Client | Tavallinen käyttäjäradio | . | Client Base | Käsittelee suosikkiradioiden liikenteen Router Late -prioriteetilla, kaiken muun liikenteen Client -prioriteetilla | . | Client Mute | Vastaanottaa viestejä, mutta ei lähetä niitä edelleen | . | Client Hidden | Kuten Client Mute, mutta piilotetaan myös radioluettelosta | . | Router | Priorisoi viestien välittämistä; pysyy hereillä välittääkseen viestejä | . | Router Late | Infrastruktuuriradio, joka lähettää viestin uudelleen kerran, mutta vasta kaikkien muiden tilojen jälkeen (tarjoaa lisäpeittoa) | . | Router Client | ⚠️ Vanhentunut (poistettu laiteohjelmistossa 2.3.15) — ei enää valittavissa; käytä sen sijaan Router- tai Client-roolia | . | Repeater | ⚠️ Vanhentunut (poistettu laiteohjelmistossa 2.7.11) — ei enää valittavissa; käytä sen sijaan Router-roolia | . | Tracker | Optimoitu sijainnin raportointiin säännöllisin väliajoin | . | Sensor | Optimoitu telemetrian raportointiin | . | TAK | Yhteensopiva TAK-järjestelmien kanssa (lähettää ja vastaanottaa CoT-viestejä) | . | TAK Tracker | Vain TAK-sijainnin raportointi | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Roolin valitseminen . Useimpien käyttäjien kannattaa käyttää oletusarvoista Client-roolia. Harkitse muuta roolia seuraavissa tilanteissa: . | Router — Sinulla on radio kiinteässä, korkealla sijaitsevassa paikassa, jossa on luotettava virransyöttö (katto, mäki). Routerit pysyvät jatkuvasti hereillä välittääkseen muiden viestejä ja ovat tärkeitä verkon peittoalueen laajentamisessa. Älä käytä Reititin-roolia akkukäyttöisissä käsiradioissa. | Router Late — Infrastruktuuriradio, joka lähettää paketit uudelleen kerran, mutta vasta kaikkien muiden reititystilojen jälkeen. Tarjoaa lisäpeittoa paikallisille ryhmille kilpailematta ensisijaisten Routerien kanssa. | Client Base — Käsittelee suosikkiradioihisi menevän tai niistä tulevan liikenteen Router Late -prioriteetilla (varmistaen näille viesteille ylimääräisen välityspeiton), samalla kun kaikki muu käsitellään tavallisen Client-roolin tavoin. | Client Mute — Voit vastaanottaa verkkoliikennettä, mutta et osallistu viestien välittämiseen. Hyödyllinen vain kuunteluun tarkoitetuissa radioissa tai ruuhkan vähentämiseen tiheillä alueilla. | Tracker “seurantalaite” — miehittämätön radio, jonka ainoa tehtävä on lähettää GPS-sijaintiaan (esimerkiksi ajoneuvo, henkilö tai muu kohde). Nukkuu lähetysten välillä akun säästämiseksi. | Anturi — miehittämätön radio, joka lähettää ympäristötelemetriaa (lämpötila, ilmankosteus, ilmanlaatu). Samanlainen virrankulutusprofiili kuin Tracker-roolissa. | TAK / TAK Tracker — Tarvitaan vain yhteensopivuuteen ATAK-/WinTAK-järjestelmien kanssa. Katso TAK-integraatio lisätietoja varten. | . 💡 Vinkki: Verkko toimii parhaiten, kun suurin osa radioista käyttää Client- tai Router-roolia. Liian suuri määrä Client Mute (mykistetty) -radioita heikentää mesh-verkon vikasietoisuutta. Liian useat Router -roolin radiot tiheällä alueella voivat aiheuttaa ruuhkaa. Hyvä nyrkkisääntö on yksi Router jokaista 5–10 Client-roolia kohden alueellasi. Salausilmaisimet . Radiot näyttävät nimensä vieressä salauksen tilaa kuvaavat kuvakkeet: . | Kuvake | Merkitys | . | 🔒 Lukittu | Yhteys käyttää PKI:tä (julkisen avaimen infrastruktuuria) — päästä päähän salattu ja varmennetulla identiteetillä suojattu. | . | 🔓 Lukitsematon | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Ei täsmää | Julkinen avain ei täsmää — radion avain on muuttunut viime näkemän jälkeen (tutki ennen luottamista). | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. Jos näet avaimen täsmäämättömyysvaroituksen, radio on voitu nollata tai sen tietoturva on voinut vaarantua. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/fi-rFI/user/nodes.html#radiolista", "relUrl": "/fi-rFI/user/nodes.html#radiolista" @@ -26727,7 +26727,7 @@ },"3818": { "doc": "Nodelar", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Rol | Açıklaması | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Rol | Açıklaması | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/tr-rTR/user/nodes.html#node-list", "relUrl": "/tr-rTR/user/nodes.html#node-list" @@ -26790,7 +26790,7 @@ },"3827": { "doc": "Noduri", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Descriere | . | Client | Standard end-user node | . | Client bază | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client mut | Receives but doesn’t retransmit | . | Client ascuns | Like Client Mute, plus hides from node list | . | Ruter | Prioritizes message forwarding; stays awake to relay | . | Ruter cu întârziere | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Senzor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | Tracker TAK | TAK position reporting only | . | Pierdut și găsit | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Descriere | . | Client | Standard end-user node | . | Client bază | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client mut | Receives but doesn’t retransmit | . | Client ascuns | Like Client Mute, plus hides from node list | . | Ruter | Prioritizes message forwarding; stays awake to relay | . | Ruter cu întârziere | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Senzor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | Tracker TAK | TAK position reporting only | . | Pierdut și găsit | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/ro-rRO/user/nodes.html#node-list", "relUrl": "/ro-rRO/user/nodes.html#node-list" @@ -26853,7 +26853,7 @@ },"3836": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Opis | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Opis | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/sl-rSI/user/nodes.html#node-list", "relUrl": "/sl-rSI/user/nodes.html#node-list" @@ -26916,7 +26916,7 @@ },"3845": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Papel | Descrição | . | Cliente | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Cliente silenciado | Receives but doesn’t retransmit | . | Cliente oculto | Like Client Mute, plus hides from node list | . | Roteador | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Monitor | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK — ‘Kit’ de Consciencialização da Equipa | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Perdidos e Achados | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Papel | Descrição | . | Cliente | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Cliente silenciado | Receives but doesn’t retransmit | . | Cliente oculto | Like Client Mute, plus hides from node list | . | Roteador | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Monitor | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK — ‘Kit’ de Consciencialização da Equipa | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Perdidos e Achados | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/pt-rPT/user/nodes.html#node-list", "relUrl": "/pt-rPT/user/nodes.html#node-list" @@ -26979,7 +26979,7 @@ },"3854": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Beskrivelse | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Beskrivelse | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/no-rNO/user/nodes.html#node-list", "relUrl": "/no-rNO/user/nodes.html#node-list" @@ -27042,7 +27042,7 @@ },"3863": { "doc": "Sõlmed", "title": "Sõlmede loend", - "content": "Sõlmede loend näitab kõiki sõlmi, mida raadio on kuulnud, sealhulgas: . | Sõlme nimi — kasutaja pandud pikk nimi | Lühinimi — 4-tähemärgiline identifikaator | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Vahemaa — hinnanguline vahemaa (kui asukohta jagatakse) | Aku — kaugsõlme aku tase (kui telemeetria on lubatud) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Sõlme oleku indikaatorid . | Indicator | Tähendus | . | Green last-heard time | Viimase 2 tunni jooksul kuuldud sõlm | . | Plain last-heard time | Viimase 2 tunni jooksul kuuldud sõlm | . | ⭐ Lemmik | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Sõlmedele saab määrata erinevaid rolle, mis mõjutavad nende kärgvõrgus käitumist: . | Roll | Kirjeldus | . | Klient | Standard end-user node | . | Klient-baas | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Vaikne klient | Receives but doesn’t retransmit | . | Peidetud klient | Like Client Mute, plus hides from node list | . | Ruuter | Prioriseerib sõnumi edastamist; jääb edastamiseks ärkvele | . | Hiline ruuter | Infrastruktuurisõlm, mis levitab signaali ühe korra, kuid alles pärast kõiki teisi režiime (pakub täiendavat leviala) | . | Ruuteri klient | ⚠️ Vananenud (eemaldatud püsivara versioonis 2.3.15) — enam mitte valitav; kasuta hoopis ruuterint või kliendina | . | Repiiter | ⚠️ Vananenud (eemaldatud püsivara versioonis 2.7.11) — enam mitte valitav; kasuta hoopis ruuterina | . | Jälgitav | Optimized for position reporting at regular intervals | . | Andur | Optimized for telemetry reporting | . | TAK | Ühildub TAK süsteemidega (saadab/võtab vastu CoT) | . | Jälgitav TAK | Ainult TAK asukoha aruandlus | . | Kaotud ja leitud | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Ruuter — Teil on sõlm fikseeritud, kõrgemal asuvas asukohas, millel on usaldusväärne toide (katusel, mäetipul). Ruuterid püsivad pidevalt ärkvel, et vahendada teistele sõnumeid ja on võrguühenduse laiendamiseks hädavajalikud. Don’t use Router on battery-powered handheld radios. | Ruuter hiline – infrastruktuurisõlm, mis levitab pakette alati üks kord uuesti, aga alles pärast seda, kui kõik teised marsruutimisrežiimid on oma käigu teinud. Provides supplemental coverage for local clusters without competing with primary routers. | Baas klient – käsitleb lemmiksõlmedesse suunduvat ja sealt tulevaid liiklusi ruuteri hilinemise prioriteediga (tagades, et need sõnumid saavad täiendava edastuskatte), samal ajal kui kõike muud käsitletakse tavalise kliendina. | Kliendi vaigistatud — Soovid vastu võtta võrguliiklust, aga mitte edastamisse panustada. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Aku säästmiseks magab saadete vahel. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Sarnane võimsusprofiil jälgimisseadmele. | TAK / TAK jälgimisseade — Vajalik ainult ATAK/WinTAK süsteemidega koostööl. Üksikasjade saamiseks vaata TAK integratsioon. | . 💡 Vihje: Kärgvõrk töötab kõige paremini, kui enamik sõlmi on klient või ruuter. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Sõlmed kuvavad oma nime kõrval krüpteerimisoleku ikoone: . | Ikoon | Tähendus | . | 🔒 Lukustatud | Suhtlus kasutab PKI-d (avaliku võtme infrastruktuuri) – otsast lõpuni krüpteeritud kontrollitud identiteediga | . | 🔓 Lukust lahti | Suhtlus kasutab jagatud kanali PSK – krüpteeritud, kuid isikut pole individuaalselt kontrollitud | . | ⚠️ Ebakõla | Avaliku võtme mittevastavus — sõlme võti on viimasest nägemisest saadik muutunud (enne usaldamist uuri) | . 💡 Vihje: PKI krüpteering (püsivara 2,5+) pakub tugevamat turvalisust kui kanali PSK, kuna igal sõlmel on unikaalne võtmepaar. Kui näed võtme mittevastavuse hoiatust, võib sõlm olla lähtestatud või ohustatud. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "Sõlmede loend näitab kõiki sõlmi, mida raadio on kuulnud, sealhulgas: . | Sõlme nimi — kasutaja pandud pikk nimi | Lühinimi — 4-tähemärgiline identifikaator | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Vahemaa — hinnanguline vahemaa (kui asukohta jagatakse) | Aku — kaugsõlme aku tase (kui telemeetria on lubatud) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Sõlme oleku indikaatorid . | Indicator | Tähendus | . | Green last-heard time | Viimase 2 tunni jooksul kuuldud sõlm | . | Plain last-heard time | Viimase 2 tunni jooksul kuuldud sõlm | . | ⭐ Lemmik | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Sõlmedele saab määrata erinevaid rolle, mis mõjutavad nende kärgvõrgus käitumist: . | Roll | Kirjeldus | . | Klient | Standard end-user node | . | Klient-baas | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Vaikne klient | Receives but doesn’t retransmit | . | Peidetud klient | Like Client Mute, plus hides from node list | . | Ruuter | Prioriseerib sõnumi edastamist; jääb edastamiseks ärkvele | . | Hiline ruuter | Infrastruktuurisõlm, mis levitab signaali ühe korra, kuid alles pärast kõiki teisi režiime (pakub täiendavat leviala) | . | Ruuteri klient | ⚠️ Vananenud (eemaldatud püsivara versioonis 2.3.15) — enam mitte valitav; kasuta hoopis ruuterint või kliendina | . | Repiiter | ⚠️ Vananenud (eemaldatud püsivara versioonis 2.7.11) — enam mitte valitav; kasuta hoopis ruuterina | . | Jälgitav | Optimized for position reporting at regular intervals | . | Andur | Optimized for telemetry reporting | . | TAK | Ühildub TAK süsteemidega (saadab/võtab vastu CoT) | . | Jälgitav TAK | Ainult TAK asukoha aruandlus | . | Kaotud ja leitud | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Ruuter — Teil on sõlm fikseeritud, kõrgemal asuvas asukohas, millel on usaldusväärne toide (katusel, mäetipul). Ruuterid püsivad pidevalt ärkvel, et vahendada teistele sõnumeid ja on võrguühenduse laiendamiseks hädavajalikud. Don’t use Router on battery-powered handheld radios. | Ruuter hiline – infrastruktuurisõlm, mis levitab pakette alati üks kord uuesti, aga alles pärast seda, kui kõik teised marsruutimisrežiimid on oma käigu teinud. Provides supplemental coverage for local clusters without competing with primary routers. | Baas klient – käsitleb lemmiksõlmedesse suunduvat ja sealt tulevaid liiklusi ruuteri hilinemise prioriteediga (tagades, et need sõnumid saavad täiendava edastuskatte), samal ajal kui kõike muud käsitletakse tavalise kliendina. | Kliendi vaigistatud — Soovid vastu võtta võrguliiklust, aga mitte edastamisse panustada. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Aku säästmiseks magab saadete vahel. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Sarnane võimsusprofiil jälgimisseadmele. | TAK / TAK jälgimisseade — Vajalik ainult ATAK/WinTAK süsteemidega koostööl. Üksikasjade saamiseks vaata TAK integratsioon. | . 💡 Vihje: Kärgvõrk töötab kõige paremini, kui enamik sõlmi on klient või ruuter. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Sõlmed kuvavad oma nime kõrval krüpteerimisoleku ikoone: . | Ikoon | Tähendus | . | 🔒 Lukustatud | Suhtlus kasutab PKI-d (avaliku võtme infrastruktuuri) – otsast lõpuni krüpteeritud kontrollitud identiteediga | . | 🔓 Lukust lahti | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Ebakõla | Avaliku võtme mittevastavus — sõlme võti on viimasest nägemisest saadik muutunud (enne usaldamist uuri) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. Kui näed võtme mittevastavuse hoiatust, võib sõlm olla lähtestatud või ohustatud. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/et-rEE/user/nodes.html#s%C3%B5lmede-loend", "relUrl": "/et-rEE/user/nodes.html#sõlmede-loend" @@ -27105,7 +27105,7 @@ },"3872": { "doc": "노드", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | 역할 | 설명 | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | 역할 | 설명 | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/ko-rKR/user/nodes.html#node-list", "relUrl": "/ko-rKR/user/nodes.html#node-list" @@ -27168,7 +27168,7 @@ },"3881": { "doc": "Nœuds", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Rôle | Description | . | Client | Standard end-user node | . | Base Client | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client muet | Receives but doesn’t retransmit | . | Client masqué | Like Client Mute, plus hides from node list | . | Routeur | Prioritizes message forwarding; stays awake to relay | . | Routeur avec retard | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Traqueur | Optimized for position reporting at regular intervals | . | Capteur | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | Traqueur TAK | TAK position reporting only | . | Objets trouvés | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Rôle | Description | . | Client | Standard end-user node | . | Base Client | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client muet | Receives but doesn’t retransmit | . | Client masqué | Like Client Mute, plus hides from node list | . | Routeur | Prioritizes message forwarding; stays awake to relay | . | Routeur avec retard | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Traqueur | Optimized for position reporting at regular intervals | . | Capteur | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | Traqueur TAK | TAK position reporting only | . | Objets trouvés | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/fr-rFR/user/nodes.html#node-list", "relUrl": "/fr-rFR/user/nodes.html#node-list" @@ -27231,7 +27231,7 @@ },"3890": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Descrición | . | Cliente | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Descrición | . | Cliente | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/gl-rES/user/nodes.html#node-list", "relUrl": "/gl-rES/user/nodes.html#node-list" @@ -27294,7 +27294,7 @@ },"3899": { "doc": "Nodi", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Ruolo | Descrizione | . | Client | Standard end-user node | . | Base Client | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Nascosto | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensore | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Oggetti Smarriti | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Ruolo | Descrizione | . | Client | Standard end-user node | . | Base Client | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Nascosto | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensore | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Oggetti Smarriti | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/it-rIT/user/nodes.html#node-list", "relUrl": "/it-rIT/user/nodes.html#node-list" @@ -27357,7 +27357,7 @@ },"3908": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Апісанне | . | CLIENT | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | CLIENT MUTE | Receives but doesn’t retransmit | . | CLIENT HIDDEN | Like Client Mute, plus hides from node list | . | ROUTER | Prioritizes message forwarding; stays awake to relay | . | ROUTER LATE | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | TRACKER | Optimized for position reporting at regular intervals | . | SENSOR | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK TRACKER | TAK position reporting only | . | LOST AND FOUND | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Апісанне | . | CLIENT | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | CLIENT MUTE | Receives but doesn’t retransmit | . | CLIENT HIDDEN | Like Client Mute, plus hides from node list | . | ROUTER | Prioritizes message forwarding; stays awake to relay | . | ROUTER LATE | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | TRACKER | Optimized for position reporting at regular intervals | . | SENSOR | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK TRACKER | TAK position reporting only | . | LOST AND FOUND | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/be-rBY/user/nodes.html#node-list", "relUrl": "/be-rBY/user/nodes.html#node-list" @@ -27420,7 +27420,7 @@ },"3917": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Përshkrimi | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Përshkrimi | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/sq-rAL/user/nodes.html#node-list", "relUrl": "/sq-rAL/user/nodes.html#node-list" @@ -27483,7 +27483,7 @@ },"3926": { "doc": "Nodos", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Rol | Descripción | . | Cliente | Standard end-user node | . | Base cliente | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Cliente silenciado | Receives but doesn’t retransmit | . | Cliente oculto | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Rastreador | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | Rastreador TAK | TAK position reporting only | . | Perdido y encontrado | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Rol | Descripción | . | Cliente | Standard end-user node | . | Base cliente | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Cliente silenciado | Receives but doesn’t retransmit | . | Cliente oculto | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Rastreador | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | Rastreador TAK | TAK position reporting only | . | Perdido y encontrado | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/es-rES/user/nodes.html#node-list", "relUrl": "/es-rES/user/nodes.html#node-list" @@ -27546,7 +27546,7 @@ },"3935": { "doc": "Csomópontok", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Szerepkör | Leírás | . | Kliens | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Néma Kliens | Receives but doesn’t retransmit | . | Rejtett Kliens | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Késő Router | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Szenzor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Elveszett és Megkerült | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Szerepkör | Leírás | . | Kliens | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Néma Kliens | Receives but doesn’t retransmit | . | Rejtett Kliens | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Késő Router | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Szenzor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Elveszett és Megkerült | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/hu-rHU/user/nodes.html#node-list", "relUrl": "/hu-rHU/user/nodes.html#node-list" @@ -27609,7 +27609,7 @@ },"3944": { "doc": "Възли", "title": "Списък с възли", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Роля | Описание | . | Клиент | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Скрит клиент | Like Client Mute, plus hides from node list | . | Рутер | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Тракер | Optimized for position reporting at regular intervals | . | Сензор | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Загубено и намерено | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Роля | Описание | . | Клиент | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Скрит клиент | Like Client Mute, plus hides from node list | . | Рутер | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Тракер | Optimized for position reporting at regular intervals | . | Сензор | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Загубено и намерено | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/bg-rBG/user/nodes.html#%D1%81%D0%BF%D0%B8%D1%81%D1%8A%D0%BA-%D1%81-%D0%B2%D1%8A%D0%B7%D0%BB%D0%B8", "relUrl": "/bg-rBG/user/nodes.html#списък-с-възли" @@ -27672,7 +27672,7 @@ },"3953": { "doc": "Nœuds", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Rôle | Description | . | Client | Standard end-user node | . | Base Client | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client muet | Receives but doesn’t retransmit | . | Client masqué | Like Client Mute, plus hides from node list | . | Routeur | Prioritizes message forwarding; stays awake to relay | . | Routeur avec retard | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Traqueur | Optimized for position reporting at regular intervals | . | Capteur | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | Traqueur TAK | TAK position reporting only | . | Objets trouvés | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Rôle | Description | . | Client | Standard end-user node | . | Base Client | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client muet | Receives but doesn’t retransmit | . | Client masqué | Like Client Mute, plus hides from node list | . | Routeur | Prioritizes message forwarding; stays awake to relay | . | Routeur avec retard | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Traqueur | Optimized for position reporting at regular intervals | . | Capteur | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | Traqueur TAK | TAK position reporting only | . | Objets trouvés | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/fr-rCA/user/nodes.html#node-list", "relUrl": "/fr-rCA/user/nodes.html#node-list" @@ -27735,7 +27735,7 @@ },"3962": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Opis | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Opis | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/hr-rHR/user/nodes.html#node-list", "relUrl": "/hr-rHR/user/nodes.html#node-list" @@ -27798,7 +27798,7 @@ },"3971": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Περιγραφή | . | Client | Standard end-user node | . | Πελάτης Βάση | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Περιγραφή | . | Client | Standard end-user node | . | Πελάτης Βάση | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/el-rGR/user/nodes.html#node-list", "relUrl": "/el-rGR/user/nodes.html#node-list" @@ -27861,7 +27861,7 @@ },"3980": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | الوصف | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | الوصف | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/ar-rSA/user/nodes.html#node-list", "relUrl": "/ar-rSA/user/nodes.html#node-list" @@ -27924,7 +27924,7 @@ },"3989": { "doc": "Nós", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Função | Descrição | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Função | Descrição | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/pt-rBR/user/nodes.html#node-list", "relUrl": "/pt-rBR/user/nodes.html#node-list" @@ -27987,7 +27987,7 @@ },"3998": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Deskripsyon | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Deskripsyon | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/ht-rHT/user/nodes.html#node-list", "relUrl": "/ht-rHT/user/nodes.html#node-list" @@ -28050,7 +28050,7 @@ },"4007": { "doc": "Вузли", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Роль | Опис | . | Клієнт | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Трекер | Optimized for position reporting at regular intervals | . | Датчик | Optimized for telemetry reporting | . | ТАК | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Loast and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Роль | Опис | . | Клієнт | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Трекер | Optimized for position reporting at regular intervals | . | Датчик | Optimized for telemetry reporting | . | ТАК | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Loast and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/uk-rUA/user/nodes.html#node-list", "relUrl": "/uk-rUA/user/nodes.html#node-list" @@ -28113,7 +28113,7 @@ },"4016": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Lýsing | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | Lýsing | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/is-rIS/user/nodes.html#node-list", "relUrl": "/is-rIS/user/nodes.html#node-list" @@ -28176,7 +28176,7 @@ },"4025": { "doc": "Nodes", "title": "Node List", - "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | תיאור | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", + "content": "The node list shows every node your radio has heard, including: . | Node name — user-configured long name | Short name — 4-character identifier | Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither | Last heard — time since last communication | Distance — estimated distance (if positions are shared) | Battery — remote node battery level (if telemetry is enabled) | . Choosing What the List Shows . The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen. Node Status Indicators . | Indicator | Meaning | . | Green last-heard time | Node heard within the last 2 hours | . | Plain last-heard time | Node not heard for over 2 hours | . | ⭐ Favorite | Node you marked as a favorite. | . There is no separate “away” tier. Node Roles . Nodes can be configured with different roles that affect their mesh behavior: . | Role | תיאור | . | Client | Standard end-user node | . | Client Base | Treats favorited-node traffic as Router Late priority; all other traffic as Client | . | Client Mute | Receives but doesn’t retransmit | . | Client Hidden | Like Client Mute, plus hides from node list | . | Router | Prioritizes message forwarding; stays awake to relay | . | Router Late | Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage) | . | Router Client | ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead | . | Repeater | ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead | . | Tracker | Optimized for position reporting at regular intervals | . | Sensor | Optimized for telemetry reporting | . | TAK | Interoperates with TAK systems (sends/receives CoT) | . | TAK Tracker | TAK position reporting only | . | Lost and Found | Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio | . Choosing a Role . Most users should keep the default Client role. Consider a different role when: . | Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios. | Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers. | Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client. | Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas. | Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery. | Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker. | TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details. | . 💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area. Encryption Indicators . Nodes display encryption status icons next to their name: . | Icon | Meaning | . | 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | . | 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one | . | ⚠️ Mismatch | Public key mismatch — the node’s key has changed since last seen (investigate before trusting) | . 💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it. ", "url": "/Meshtastic-Android/main/iw-rIL/user/nodes.html#node-list", "relUrl": "/iw-rIL/user/nodes.html#node-list" diff --git a/main/be-rBY/user/nodes.html b/main/be-rBY/user/nodes.html index c2b79b365a..e21231f232 100644 --- a/main/be-rBY/user/nodes.html +++ b/main/be-rBY/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Беларуская
Meshtastic Docs ↗

🌐 Беларуская — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Апісанне
CLIENT Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
CLIENT MUTE Receives but doesn’t retransmit
CLIENT HIDDEN Like Client Mute, plus hides from node list
ROUTER Prioritizes message forwarding; stays awake to relay
ROUTER LATE Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
TRACKER Optimized for position reporting at regular intervals
SENSOR Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK TRACKER TAK position reporting only
LOST AND FOUND Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Прыбраць

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Фільтраваць Апісанне
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Апісанне
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Апошні раз пачуты Last heard
Адлегласць Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Беларуская
Meshtastic Docs ↗

🌐 Беларуская — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Апісанне
CLIENT Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
CLIENT MUTE Receives but doesn’t retransmit
CLIENT HIDDEN Like Client Mute, plus hides from node list
ROUTER Prioritizes message forwarding; stays awake to relay
ROUTER LATE Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
TRACKER Optimized for position reporting at regular intervals
SENSOR Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK TRACKER TAK position reporting only
LOST AND FOUND Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Прыбраць

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Фільтраваць Апісанне
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Апісанне
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Апошні раз пачуты Last heard
Адлегласць Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/bg-rBG/user/nodes.html b/main/bg-rBG/user/nodes.html index ced42f4017..e12a7576f4 100644 --- a/main/bg-rBG/user/nodes.html +++ b/main/bg-rBG/user/nodes.html @@ -1 +1 @@ - Възли | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Български
Meshtastic Docs ↗

🌐 Български — Community translation View in English

Възли

The Nodes screen lists every node visible on your mesh.

Списък с възли

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Роля Описание
Клиент Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Скрит клиент Like Client Mute, plus hides from node list
Рутер Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Тракер Optimized for position reporting at regular intervals
Сензор Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Загубено и намерено Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Изтрий

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Филтър Описание
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Описание
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Екранна снимка
Signal quality Signal
Ниво на батерията Battery
Hop count Hops
Последно чут Last heard
Разстояние Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Възли | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Български
Meshtastic Docs ↗

🌐 Български — Community translation View in English

Възли

The Nodes screen lists every node visible on your mesh.

Списък с възли

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Роля Описание
Клиент Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Скрит клиент Like Client Mute, plus hides from node list
Рутер Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Тракер Optimized for position reporting at regular intervals
Сензор Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Загубено и намерено Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Изтрий

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Филтър Описание
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Описание
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Екранна снимка
Signal quality Signal
Ниво на батерията Battery
Hop count Hops
Последно чут Last heard
Разстояние Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/ca-rES/user/nodes.html b/main/ca-rES/user/nodes.html index aca0fb568e..ea65045835 100644 --- a/main/ca-rES/user/nodes.html +++ b/main/ca-rES/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Català
Meshtastic Docs ↗

🌐 Català — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Descripció
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Eliminar

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtre Descripció
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Descripció
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Última notícia Last heard
Distància Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Català
Meshtastic Docs ↗

🌐 Català — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Descripció
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Eliminar

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtre Descripció
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Descripció
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Última notícia Last heard
Distància Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/cs-rCZ/user/nodes.html b/main/cs-rCZ/user/nodes.html index 3d4f201b01..29f555c1c0 100644 --- a/main/cs-rCZ/user/nodes.html +++ b/main/cs-rCZ/user/nodes.html @@ -1 +1 @@ - Uzly | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Čeština
Meshtastic Docs ↗

🌐 Čeština — Community translation View in English

Uzly

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Popis
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Senzor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Odstranit

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtr Popis
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Popis
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Naposledy slyšen Last heard
Vzdálenost Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Uzly | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Čeština
Meshtastic Docs ↗

🌐 Čeština — Community translation View in English

Uzly

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Popis
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Senzor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Odstranit

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtr Popis
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Popis
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Naposledy slyšen Last heard
Vzdálenost Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/de-rDE/user/nodes.html b/main/de-rDE/user/nodes.html index 4d2796f666..9d29289849 100644 --- a/main/de-rDE/user/nodes.html +++ b/main/de-rDE/user/nodes.html @@ -1 +1 @@ - Knoten | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Deutsch
Meshtastic Docs ↗

🌐 Deutsch — Community translation View in English

Knoten

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Rolle Beschreibung
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client - Versteckt Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router mit Verzögerung Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Tracker Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Behandelt Datenverkehr von/zu Ihren bevorzugten Knoten mit der Priorität „Router Late“ (wodurch sichergestellt wird, dass diese Nachrichten eine zusätzliche Relaisabdeckung erhalten), während der übrige Verkehr wie bei einem normalen Client gehandhabt wird.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Symbol Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Entfernen

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Beschreibung
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sortieren Beschreibung
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Bildschirmfoto
Signal quality Signal
Akkustand Battery
Hop count Hops
Zuletzt gehört Last heard
Distanz Distance

Sobald die Hardware eines Knotens erkannt wird, zeigt die Detailansicht einen ausklappbaren Bereich mit der Bezeichnung „Ich möchte eins“ an. Dieser enthält Links zu Bezugsquellen oder weiterführenden Informationen zu dem jeweiligen Gerät – etwa zur Produktseite des Herstellers, zu Produktvarianten sowie zu Angeboten auf regionalen Marktplätzen (wie AliExpress, Amazon und unterstützten Händlern), gefiltert nach Ihrem Land. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Knoten | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Deutsch
Meshtastic Docs ↗

🌐 Deutsch — Community translation View in English

Knoten

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Rolle Beschreibung
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client - Versteckt Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router mit Verzögerung Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Tracker Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Behandelt Datenverkehr von/zu Ihren bevorzugten Knoten mit der Priorität „Router Late“ (wodurch sichergestellt wird, dass diese Nachrichten eine zusätzliche Relaisabdeckung erhalten), während der übrige Verkehr wie bei einem normalen Client gehandhabt wird.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Symbol Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Entfernen

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Beschreibung
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sortieren Beschreibung
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Bildschirmfoto
Signal quality Signal
Akkustand Battery
Hop count Hops
Zuletzt gehört Last heard
Distanz Distance

Sobald die Hardware eines Knotens erkannt wird, zeigt die Detailansicht einen ausklappbaren Bereich mit der Bezeichnung „Ich möchte eins“ an. Dieser enthält Links zu Bezugsquellen oder weiterführenden Informationen zu dem jeweiligen Gerät – etwa zur Produktseite des Herstellers, zu Produktvarianten sowie zu Angeboten auf regionalen Marktplätzen (wie AliExpress, Amazon und unterstützten Händlern), gefiltert nach Ihrem Land. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/docs/ar-rSA/user/nodes.html b/main/docs/ar-rSA/user/nodes.html index 1c57f2c516..9fe372df25 100644 --- a/main/docs/ar-rSA/user/nodes.html +++ b/main/docs/ar-rSA/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/be-rBY/user/nodes.html b/main/docs/be-rBY/user/nodes.html index 0d3029d6f9..27bf036849 100644 --- a/main/docs/be-rBY/user/nodes.html +++ b/main/docs/be-rBY/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/bg-rBG/user/nodes.html b/main/docs/bg-rBG/user/nodes.html index ba262b5a46..a874787c4d 100644 --- a/main/docs/bg-rBG/user/nodes.html +++ b/main/docs/bg-rBG/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/ca-rES/user/nodes.html b/main/docs/ca-rES/user/nodes.html index b78c66c4f9..c9c9d5cc41 100644 --- a/main/docs/ca-rES/user/nodes.html +++ b/main/docs/ca-rES/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/cs-rCZ/user/nodes.html b/main/docs/cs-rCZ/user/nodes.html index b8979188a5..3438988ff2 100644 --- a/main/docs/cs-rCZ/user/nodes.html +++ b/main/docs/cs-rCZ/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/de-rDE/user/nodes.html b/main/docs/de-rDE/user/nodes.html index 0222f6fbe9..3ef5a85224 100644 --- a/main/docs/de-rDE/user/nodes.html +++ b/main/docs/de-rDE/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Symbol | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Symbol | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/el-rGR/user/nodes.html b/main/docs/el-rGR/user/nodes.html index f2435dad71..7155c8935f 100644 --- a/main/docs/el-rGR/user/nodes.html +++ b/main/docs/el-rGR/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/es-rES/user/nodes.html b/main/docs/es-rES/user/nodes.html index 9f2219e022..8d61d815af 100644 --- a/main/docs/es-rES/user/nodes.html +++ b/main/docs/es-rES/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/et-rEE/user/nodes.html b/main/docs/et-rEE/user/nodes.html index a093606c21..e7888992bd 100644 --- a/main/docs/et-rEE/user/nodes.html +++ b/main/docs/et-rEE/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Sõlmed kuvavad oma nime kõrval krüpteerimisoleku ikoone: - Ikoon | Tähendus | - --------------- | -------------------------------------------------------------------------------------------------------------------------------- | - 🔒 Lukustatud | Suhtlus kasutab PKI-d (avaliku võtme infrastruktuuri) – otsast lõpuni krüpteeritud kontrollitud identiteediga | - 🔓 Lukust lahti | Suhtlus kasutab jagatud kanali PSK – krüpteeritud, kuid isikut pole individuaalselt kontrollitud | - ⚠️ Ebakõla | Avaliku võtme mittevastavus — sõlme võti on viimasest nägemisest saadik muutunud (enne usaldamist uuri) | + Ikoon | Tähendus | + --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Lukustatud | Suhtlus kasutab PKI-d (avaliku võtme infrastruktuuri) – otsast lõpuni krüpteeritud kontrollitud identiteediga | + 🔓 Lukust lahti | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Ebakõla | Avaliku võtme mittevastavus — sõlme võti on viimasest nägemisest saadik muutunud (enne usaldamist uuri) | -> 💡 **Vihje:** PKI krüpteering (püsivara 2,5+) pakub tugevamat turvalisust kui kanali PSK, kuna igal sõlmel on unikaalne võtmepaar. Kui näed võtme mittevastavuse hoiatust, võib sõlm olla lähtestatud või ohustatud. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. Kui näed võtme mittevastavuse hoiatust, võib sõlm olla lähtestatud või ohustatud. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/fi-rFI/user/nodes.html b/main/docs/fi-rFI/user/nodes.html index ee7f657ad5..a1727673ef 100644 --- a/main/docs/fi-rFI/user/nodes.html +++ b/main/docs/fi-rFI/user/nodes.html @@ -77,10 +77,10 @@ Radiot näyttävät nimensä vieressä salauksen tilaa kuvaavat kuvakkeet: Kuvake | Merkitys | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | 🔒 Lukittu | Yhteys käyttää PKI:tä (julkisen avaimen infrastruktuuria) — päästä päähän salattu ja varmennetulla identiteetillä suojattu. | - 🔓 Lukitsematon | Yhteys käyttää PKI:tä (julkisen avaimen infrastruktuuria) — päästä päähän salattu ja varmennetulla identiteetillä suojattu. | + 🔓 Lukitsematon | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | ⚠️ Ei täsmää | Julkinen avain ei täsmää — radion avain on muuttunut viime näkemän jälkeen (tutki ennen luottamista). | -> 💡 **Vinkki:** PKI-salaus (laiteohjelmisto 2.5+) tarjoaa vahvemman suojauksen kuin kanavan PSK-avain, koska jokaisella radiolla on oma yksilöllinen avainparinsa. Jos näet avaimen täsmäämättömyysvaroituksen, radio on voitu nollata tai sen tietoturva on voinut vaarantua. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. Jos näet avaimen täsmäämättömyysvaroituksen, radio on voitu nollata tai sen tietoturva on voinut vaarantua. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/fr-rCA/user/nodes.html b/main/docs/fr-rCA/user/nodes.html index 9f5b89c5a4..30ec16db55 100644 --- a/main/docs/fr-rCA/user/nodes.html +++ b/main/docs/fr-rCA/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/fr-rFR/user/nodes.html b/main/docs/fr-rFR/user/nodes.html index fbd2de5496..fac020dad7 100644 --- a/main/docs/fr-rFR/user/nodes.html +++ b/main/docs/fr-rFR/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/ga-rIE/user/nodes.html b/main/docs/ga-rIE/user/nodes.html index a8a826abb5..e6ddd6ecbc 100644 --- a/main/docs/ga-rIE/user/nodes.html +++ b/main/docs/ga-rIE/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/gl-rES/user/nodes.html b/main/docs/gl-rES/user/nodes.html index 5089907d1e..c6cd759962 100644 --- a/main/docs/gl-rES/user/nodes.html +++ b/main/docs/gl-rES/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/hr-rHR/user/nodes.html b/main/docs/hr-rHR/user/nodes.html index 378959a8b6..18920894a2 100644 --- a/main/docs/hr-rHR/user/nodes.html +++ b/main/docs/hr-rHR/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/ht-rHT/user/nodes.html b/main/docs/ht-rHT/user/nodes.html index c699fdfe2e..9618c44f1b 100644 --- a/main/docs/ht-rHT/user/nodes.html +++ b/main/docs/ht-rHT/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/hu-rHU/user/nodes.html b/main/docs/hu-rHU/user/nodes.html index 2c7e4f808b..3c69a16167 100644 --- a/main/docs/hu-rHU/user/nodes.html +++ b/main/docs/hu-rHU/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/is-rIS/user/nodes.html b/main/docs/is-rIS/user/nodes.html index 51a4893155..b2da0826c2 100644 --- a/main/docs/is-rIS/user/nodes.html +++ b/main/docs/is-rIS/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/it-rIT/user/nodes.html b/main/docs/it-rIT/user/nodes.html index b52bee0103..fe04cf1430 100644 --- a/main/docs/it-rIT/user/nodes.html +++ b/main/docs/it-rIT/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/iw-rIL/user/nodes.html b/main/docs/iw-rIL/user/nodes.html index 19592abd6e..6a3e59c3bf 100644 --- a/main/docs/iw-rIL/user/nodes.html +++ b/main/docs/iw-rIL/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/ja-rJP/user/nodes.html b/main/docs/ja-rJP/user/nodes.html index f83cc2b75f..64e0d66caa 100644 --- a/main/docs/ja-rJP/user/nodes.html +++ b/main/docs/ja-rJP/user/nodes.html @@ -74,13 +74,13 @@ There is no separate "away" tier. ノードは、名前の横に暗号化ステータスのアイコンを表示します: - アイコン | 意味 | - -------- | --------------------------------------------------- | - 🔒 ロック | 通信は PKI(公開鍵基盤)を使用します。本人性が検証された、エンドツーエンドの暗号化です | - 🔓 ロック解除 | 通信は共有チャンネルの PSK を使用します。暗号化されていますが、本人性は個別には検証されていません | - ⚠️ 不一致 | 公開鍵の不一致。前回確認時からノードの鍵が変わっています(信頼する前に調べてください) | + アイコン | 意味 | + -------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 ロック | 通信は PKI(公開鍵基盤)を使用します。本人性が検証された、エンドツーエンドの暗号化です | + 🔓 ロック解除 | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ 不一致 | 公開鍵の不一致。前回確認時からノードの鍵が変わっています(信頼する前に調べてください) | -> 💡 **ヒント:** PKI 暗号化(ファームウェア 2.5 以降)は、各ノードが固有の鍵ペアを持つため、チャンネル PSK より強力なセキュリティを提供します。 鍵の不一致の警告が表示された場合、そのノードはリセットされたか、侵害された可能性があります。 +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. 鍵の不一致の警告が表示された場合、そのノードはリセットされたか、侵害された可能性があります。 To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/ko-rKR/user/nodes.html b/main/docs/ko-rKR/user/nodes.html index d5d695b038..7014348022 100644 --- a/main/docs/ko-rKR/user/nodes.html +++ b/main/docs/ko-rKR/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/lt-rLT/user/nodes.html b/main/docs/lt-rLT/user/nodes.html index cf5d7d1739..6d21b27637 100644 --- a/main/docs/lt-rLT/user/nodes.html +++ b/main/docs/lt-rLT/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/nl-rNL/user/nodes.html b/main/docs/nl-rNL/user/nodes.html index 0ddf7083e6..85afdad03b 100644 --- a/main/docs/nl-rNL/user/nodes.html +++ b/main/docs/nl-rNL/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/no-rNO/user/nodes.html b/main/docs/no-rNO/user/nodes.html index 78f5b7b1b5..211120e52b 100644 --- a/main/docs/no-rNO/user/nodes.html +++ b/main/docs/no-rNO/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/pl-rPL/user/nodes.html b/main/docs/pl-rPL/user/nodes.html index 07addddf30..de0f562240 100644 --- a/main/docs/pl-rPL/user/nodes.html +++ b/main/docs/pl-rPL/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/pt-rBR/user/nodes.html b/main/docs/pt-rBR/user/nodes.html index df2b842ba5..4c6805b84e 100644 --- a/main/docs/pt-rBR/user/nodes.html +++ b/main/docs/pt-rBR/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/pt-rPT/user/nodes.html b/main/docs/pt-rPT/user/nodes.html index 8a4d0b5f4f..c45887c077 100644 --- a/main/docs/pt-rPT/user/nodes.html +++ b/main/docs/pt-rPT/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/ro-rRO/user/nodes.html b/main/docs/ro-rRO/user/nodes.html index 9d74e8f6bd..c446668d1d 100644 --- a/main/docs/ro-rRO/user/nodes.html +++ b/main/docs/ro-rRO/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/ru-rRU/user/nodes.html b/main/docs/ru-rRU/user/nodes.html index 37b41b1763..4ec0216e16 100644 --- a/main/docs/ru-rRU/user/nodes.html +++ b/main/docs/ru-rRU/user/nodes.html @@ -74,13 +74,13 @@ There is no separate "away" tier. У нод рядом с именем отображаются значки статуса шифрования: - Значок | Значение | - ----------------- | -------------------------------------------------------------------------------------------------------------------------- | - 🔒 Заблокировано | Связь использует PKI (инфраструктуру публичных ключей) — сквозное шифрование с проверкой идентичности | - 🔓 Разблокировано | Связь использует общий канал PSK — зашифровано, но личность не проверяется индивидуально | - ⚠️ Несовпадение | Несовпадение открытого ключа — ключ ноды изменился с последнего раза (разберитесь, прежде чем доверять) | + Значок | Значение | + ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Заблокировано | Связь использует PKI (инфраструктуру публичных ключей) — сквозное шифрование с проверкой идентичности | + 🔓 Разблокировано | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Несовпадение | Несовпадение открытого ключа — ключ ноды изменился с последнего раза (разберитесь, прежде чем доверять) | -> 💡 **Совет:** Шифрование PKI (прошивка 2.5+) обеспечивает более надёжную защиту, чем общий PSK для канала, потому что у каждой ноды есть уникальная пара ключей. Если видишь предупреждение о несоответствии ключа, нода могла быть сброшена или скомпрометирована. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. Если видишь предупреждение о несоответствии ключа, нода могла быть сброшена или скомпрометирована. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/sk-rSK/user/nodes.html b/main/docs/sk-rSK/user/nodes.html index cfbed8cba2..93b911a7f4 100644 --- a/main/docs/sk-rSK/user/nodes.html +++ b/main/docs/sk-rSK/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/sl-rSI/user/nodes.html b/main/docs/sl-rSI/user/nodes.html index d9de31ba88..bc970f227a 100644 --- a/main/docs/sl-rSI/user/nodes.html +++ b/main/docs/sl-rSI/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/sq-rAL/user/nodes.html b/main/docs/sq-rAL/user/nodes.html index 6219630813..20dbd29f89 100644 --- a/main/docs/sq-rAL/user/nodes.html +++ b/main/docs/sq-rAL/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/srp/user/nodes.html b/main/docs/srp/user/nodes.html index d650e3c4c1..40300e48b7 100644 --- a/main/docs/srp/user/nodes.html +++ b/main/docs/srp/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Иконица | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Иконица | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/sv-rSE/user/nodes.html b/main/docs/sv-rSE/user/nodes.html index b52ae7e785..32278b3316 100644 --- a/main/docs/sv-rSE/user/nodes.html +++ b/main/docs/sv-rSE/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/tr-rTR/user/nodes.html b/main/docs/tr-rTR/user/nodes.html index bf1678eeef..12c4d52a54 100644 --- a/main/docs/tr-rTR/user/nodes.html +++ b/main/docs/tr-rTR/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/uk-rUA/user/nodes.html b/main/docs/uk-rUA/user/nodes.html index 6b74a6e97f..97d0295d2b 100644 --- a/main/docs/uk-rUA/user/nodes.html +++ b/main/docs/uk-rUA/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/zh-rCN/user/nodes.html b/main/docs/zh-rCN/user/nodes.html index 17f2a4beca..fb38b7ee17 100644 --- a/main/docs/zh-rCN/user/nodes.html +++ b/main/docs/zh-rCN/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - 图标 | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + 图标 | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/docs/zh-rTW/user/nodes.html b/main/docs/zh-rTW/user/nodes.html index 44a4747374..e3bb901fad 100644 --- a/main/docs/zh-rTW/user/nodes.html +++ b/main/docs/zh-rTW/user/nodes.html @@ -74,13 +74,13 @@ Most users should keep the default **Client** role. Consider a different role wh Nodes display encryption status icons next to their name: - Icon | Meaning | - ----------- | ------------------------------------------------------------------------------------------------------------------- | - 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | - 🔓 Unlocked | Communication uses shared channel PSK — encrypted but identity not individually verified | - ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | + Icon | Meaning | + ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | + 🔒 Locked | Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity | + 🔓 Unlocked | No public key has been received for this node, so it cannot be direct messaged — use **Request User Info** on the node detail page to ask for one | + ⚠️ Mismatch | Public key mismatch — the node's key has changed since last seen (investigate before trusting) | -> 💡 **Tip:** PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised. +> 💡 **Tip:** Direct messages always use PKI, so the radio needs the other node's public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised. To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose **Remove**, and let the two radios exchange keys again the next time yours hears it. diff --git a/main/el-rGR/user/nodes.html b/main/el-rGR/user/nodes.html index bca23783e1..7d63582eba 100644 --- a/main/el-rGR/user/nodes.html +++ b/main/el-rGR/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Ελληνικά
Meshtastic Docs ↗

🌐 Ελληνικά — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Περιγραφή
Client Standard end-user node
Πελάτης Βάση Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Διαγραφή

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Φίλτρο Περιγραφή
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Περιγραφή
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Last heard Last heard
Απόσταση Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Ελληνικά
Meshtastic Docs ↗

🌐 Ελληνικά — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Περιγραφή
Client Standard end-user node
Πελάτης Βάση Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Διαγραφή

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Φίλτρο Περιγραφή
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Περιγραφή
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Last heard Last heard
Απόσταση Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/es-rES/user/nodes.html b/main/es-rES/user/nodes.html index 6cc366741b..d6ec13d160 100644 --- a/main/es-rES/user/nodes.html +++ b/main/es-rES/user/nodes.html @@ -1 +1 @@ - Nodos | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Español
Meshtastic Docs ↗

🌐 Español — Community translation View in English

Nodos

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Rol Descripción
Cliente Standard end-user node
Base cliente Treats favorited-node traffic as Router Late priority; all other traffic as Client
Cliente silenciado Receives but doesn’t retransmit
Cliente oculto Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Rastreador Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
Rastreador TAK TAK position reporting only
Perdido y encontrado Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Quitar

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtro Descripción
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Descripción
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Última escucha Last heard
Distancia Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodos | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Español
Meshtastic Docs ↗

🌐 Español — Community translation View in English

Nodos

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Rol Descripción
Cliente Standard end-user node
Base cliente Treats favorited-node traffic as Router Late priority; all other traffic as Client
Cliente silenciado Receives but doesn’t retransmit
Cliente oculto Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Rastreador Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
Rastreador TAK TAK position reporting only
Perdido y encontrado Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Quitar

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtro Descripción
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Descripción
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Última escucha Last heard
Distancia Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/et-rEE/user/nodes.html b/main/et-rEE/user/nodes.html index d82cd0c0fa..2632f93fbc 100644 --- a/main/et-rEE/user/nodes.html +++ b/main/et-rEE/user/nodes.html @@ -1 +1 @@ - Sõlmed | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Eesti
Meshtastic Docs ↗

🌐 Eesti — Community translation View in English

Sõlmed

The Nodes screen lists every node visible on your mesh.

Sõlmede loend

Sõlmede loend näitab kõiki sõlmi, mida raadio on kuulnud, sealhulgas:

  • Sõlme nimi — kasutaja pandud pikk nimi
  • Lühinimi — 4-tähemärgiline identifikaator
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Vahemaa — hinnanguline vahemaa (kui asukohta jagatakse)
  • Aku — kaugsõlme aku tase (kui telemeetria on lubatud)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Sõlme oleku indikaatorid

Indicator Tähendus
Green last-heard time Viimase 2 tunni jooksul kuuldud sõlm
Plain last-heard time Viimase 2 tunni jooksul kuuldud sõlm
⭐ Lemmik Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Sõlmedele saab määrata erinevaid rolle, mis mõjutavad nende kärgvõrgus käitumist:

Roll Kirjeldus
Klient Standard end-user node
Klient-baas Treats favorited-node traffic as Router Late priority; all other traffic as Client
Vaikne klient Receives but doesn’t retransmit
Peidetud klient Like Client Mute, plus hides from node list
Ruuter Prioriseerib sõnumi edastamist; jääb edastamiseks ärkvele
Hiline ruuter Infrastruktuurisõlm, mis levitab signaali ühe korra, kuid alles pärast kõiki teisi režiime (pakub täiendavat leviala)
Ruuteri klient ⚠️ Vananenud (eemaldatud püsivara versioonis 2.3.15) — enam mitte valitav; kasuta hoopis ruuterint või kliendina
Repiiter ⚠️ Vananenud (eemaldatud püsivara versioonis 2.7.11) — enam mitte valitav; kasuta hoopis ruuterina
Jälgitav Optimized for position reporting at regular intervals
Andur Optimized for telemetry reporting
TAK Ühildub TAK süsteemidega (saadab/võtab vastu CoT)
Jälgitav TAK Ainult TAK asukoha aruandlus
Kaotud ja leitud Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Ruuter — Teil on sõlm fikseeritud, kõrgemal asuvas asukohas, millel on usaldusväärne toide (katusel, mäetipul). Ruuterid püsivad pidevalt ärkvel, et vahendada teistele sõnumeid ja on võrguühenduse laiendamiseks hädavajalikud. Don’t use Router on battery-powered handheld radios.
  • Ruuter hiline – infrastruktuurisõlm, mis levitab pakette alati üks kord uuesti, aga alles pärast seda, kui kõik teised marsruutimisrežiimid on oma käigu teinud. Provides supplemental coverage for local clusters without competing with primary routers.
  • Baas klient – käsitleb lemmiksõlmedesse suunduvat ja sealt tulevaid liiklusi ruuteri hilinemise prioriteediga (tagades, et need sõnumid saavad täiendava edastuskatte), samal ajal kui kõike muud käsitletakse tavalise kliendina.
  • Kliendi vaigistatud — Soovid vastu võtta võrguliiklust, aga mitte edastamisse panustada. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Aku säästmiseks magab saadete vahel.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Sarnane võimsusprofiil jälgimisseadmele.
  • TAK / TAK jälgimisseade — Vajalik ainult ATAK/WinTAK süsteemidega koostööl. Üksikasjade saamiseks vaata TAK integratsioon.

💡 Vihje: Kärgvõrk töötab kõige paremini, kui enamik sõlmi on klient või ruuter. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Sõlmed kuvavad oma nime kõrval krüpteerimisoleku ikoone:

Ikoon Tähendus
🔒 Lukustatud Suhtlus kasutab PKI-d (avaliku võtme infrastruktuuri) – otsast lõpuni krüpteeritud kontrollitud identiteediga
🔓 Lukust lahti Suhtlus kasutab jagatud kanali PSK – krüpteeritud, kuid isikut pole individuaalselt kontrollitud
⚠️ Ebakõla Avaliku võtme mittevastavus — sõlme võti on viimasest nägemisest saadik muutunud (enne usaldamist uuri)

💡 Vihje: PKI krüpteering (püsivara 2,5+) pakub tugevamat turvalisust kui kanali PSK, kuna igal sõlmel on unikaalne võtmepaar. Kui näed võtme mittevastavuse hoiatust, võib sõlm olla lähtestatud või ohustatud.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Puuduta sõlmel, et vaadata üksikasjade lehte
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Teavituste vaigistamine/vaigistuse tühistamine
    • Saada otsesõnum
    • Trace route
    • Ignore/unignore
    • Eemalda

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Teksti otsing

Sõlmede filtreerimiseks nime või lühinime järgi tipi otsinguväljal. Filter uueneb reaalajas kirjutamise ajal.

Filter Toggles

Filtreeri Kirjeldus
Hide offline nodes Näita ainult viimase 2 tunni jooksul kuuldud sõlmi
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Välista MQTT Peida ainult MQTT internetisilla kaudu kuuldavad sõlmed
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sorteerimisvalikud

Sorteeri Kirjeldus
Last heard Viimati kuuldud sõlmed esimesena
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hüppe kaugusel Vähim vahendatud hüppeid esimesena
Kanal Rühmitatud kanali loendi alusel
via MQTT Rühmitatud MQTT ver raadiost kuuldud järgi
via Favorite (default) Favorited nodes first, then the rest

Sõlme hüppe kohta

Puuduta sõlmede loendi rakenduse ribal hüppehistogrammi ikooni, et avada tulpdiagramm, mis näitab, mitu sõlme asub igal hüppekaugusel (0 = otse, 1 = ühe relee kaugusel jne). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Sõlmel klõpsamine avab detailvaate koos põhjaliku teabega. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Sõlme üksikasjade jaotis

Tekstisisesed olekuindikaatorid näitavad peamisi mõõdikuid lühidalt:

Indikaator Screenshot
Signal quality Signaal
Aku tase Aku
Hüppete loendur Hüpet
Viimati kuuldud Viimati kuuldud
Kaugus Kaugus

Seadme lingid (“Soovin ühte”)

Kui sõlme riistvara tuvastatakse, kuvatakse detailvaates kokkupandav jaotis „Soovin ühte”, mis lingib kohtadele, kust seadet osta või selle kohta lisateavet saada: müüja tooteleht, tootevariandid ja piirkondlike marketplace loendid (nt AliExpress, Amazon ja toetatud jaemüüjad), mis on filtreeritud sinu riigi järgi. Iga link avaneb ümbersuunamisteenuse msh.to kaudu. Seadmed, millel pole vastavaid linke, seda jaotist ei kuva.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

Seotud teemad


+ Sõlmed | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Eesti
Meshtastic Docs ↗

🌐 Eesti — Community translation View in English

Sõlmed

The Nodes screen lists every node visible on your mesh.

Sõlmede loend

Sõlmede loend näitab kõiki sõlmi, mida raadio on kuulnud, sealhulgas:

  • Sõlme nimi — kasutaja pandud pikk nimi
  • Lühinimi — 4-tähemärgiline identifikaator
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Vahemaa — hinnanguline vahemaa (kui asukohta jagatakse)
  • Aku — kaugsõlme aku tase (kui telemeetria on lubatud)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Sõlme oleku indikaatorid

Indicator Tähendus
Green last-heard time Viimase 2 tunni jooksul kuuldud sõlm
Plain last-heard time Viimase 2 tunni jooksul kuuldud sõlm
⭐ Lemmik Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Sõlmedele saab määrata erinevaid rolle, mis mõjutavad nende kärgvõrgus käitumist:

Roll Kirjeldus
Klient Standard end-user node
Klient-baas Treats favorited-node traffic as Router Late priority; all other traffic as Client
Vaikne klient Receives but doesn’t retransmit
Peidetud klient Like Client Mute, plus hides from node list
Ruuter Prioriseerib sõnumi edastamist; jääb edastamiseks ärkvele
Hiline ruuter Infrastruktuurisõlm, mis levitab signaali ühe korra, kuid alles pärast kõiki teisi režiime (pakub täiendavat leviala)
Ruuteri klient ⚠️ Vananenud (eemaldatud püsivara versioonis 2.3.15) — enam mitte valitav; kasuta hoopis ruuterint või kliendina
Repiiter ⚠️ Vananenud (eemaldatud püsivara versioonis 2.7.11) — enam mitte valitav; kasuta hoopis ruuterina
Jälgitav Optimized for position reporting at regular intervals
Andur Optimized for telemetry reporting
TAK Ühildub TAK süsteemidega (saadab/võtab vastu CoT)
Jälgitav TAK Ainult TAK asukoha aruandlus
Kaotud ja leitud Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Ruuter — Teil on sõlm fikseeritud, kõrgemal asuvas asukohas, millel on usaldusväärne toide (katusel, mäetipul). Ruuterid püsivad pidevalt ärkvel, et vahendada teistele sõnumeid ja on võrguühenduse laiendamiseks hädavajalikud. Don’t use Router on battery-powered handheld radios.
  • Ruuter hiline – infrastruktuurisõlm, mis levitab pakette alati üks kord uuesti, aga alles pärast seda, kui kõik teised marsruutimisrežiimid on oma käigu teinud. Provides supplemental coverage for local clusters without competing with primary routers.
  • Baas klient – käsitleb lemmiksõlmedesse suunduvat ja sealt tulevaid liiklusi ruuteri hilinemise prioriteediga (tagades, et need sõnumid saavad täiendava edastuskatte), samal ajal kui kõike muud käsitletakse tavalise kliendina.
  • Kliendi vaigistatud — Soovid vastu võtta võrguliiklust, aga mitte edastamisse panustada. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Aku säästmiseks magab saadete vahel.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Sarnane võimsusprofiil jälgimisseadmele.
  • TAK / TAK jälgimisseade — Vajalik ainult ATAK/WinTAK süsteemidega koostööl. Üksikasjade saamiseks vaata TAK integratsioon.

💡 Vihje: Kärgvõrk töötab kõige paremini, kui enamik sõlmi on klient või ruuter. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Sõlmed kuvavad oma nime kõrval krüpteerimisoleku ikoone:

Ikoon Tähendus
🔒 Lukustatud Suhtlus kasutab PKI-d (avaliku võtme infrastruktuuri) – otsast lõpuni krüpteeritud kontrollitud identiteediga
🔓 Lukust lahti No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Ebakõla Avaliku võtme mittevastavus — sõlme võti on viimasest nägemisest saadik muutunud (enne usaldamist uuri)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. Kui näed võtme mittevastavuse hoiatust, võib sõlm olla lähtestatud või ohustatud.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Puuduta sõlmel, et vaadata üksikasjade lehte
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Teavituste vaigistamine/vaigistuse tühistamine
    • Saada otsesõnum
    • Trace route
    • Ignore/unignore
    • Eemalda

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Teksti otsing

Sõlmede filtreerimiseks nime või lühinime järgi tipi otsinguväljal. Filter uueneb reaalajas kirjutamise ajal.

Filter Toggles

Filtreeri Kirjeldus
Hide offline nodes Näita ainult viimase 2 tunni jooksul kuuldud sõlmi
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Välista MQTT Peida ainult MQTT internetisilla kaudu kuuldavad sõlmed
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sorteerimisvalikud

Sorteeri Kirjeldus
Last heard Viimati kuuldud sõlmed esimesena
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hüppe kaugusel Vähim vahendatud hüppeid esimesena
Kanal Rühmitatud kanali loendi alusel
via MQTT Rühmitatud MQTT ver raadiost kuuldud järgi
via Favorite (default) Favorited nodes first, then the rest

Sõlme hüppe kohta

Puuduta sõlmede loendi rakenduse ribal hüppehistogrammi ikooni, et avada tulpdiagramm, mis näitab, mitu sõlme asub igal hüppekaugusel (0 = otse, 1 = ühe relee kaugusel jne). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Sõlmel klõpsamine avab detailvaate koos põhjaliku teabega. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Sõlme üksikasjade jaotis

Tekstisisesed olekuindikaatorid näitavad peamisi mõõdikuid lühidalt:

Indikaator Screenshot
Signal quality Signaal
Aku tase Aku
Hüppete loendur Hüpet
Viimati kuuldud Viimati kuuldud
Kaugus Kaugus

Seadme lingid (“Soovin ühte”)

Kui sõlme riistvara tuvastatakse, kuvatakse detailvaates kokkupandav jaotis „Soovin ühte”, mis lingib kohtadele, kust seadet osta või selle kohta lisateavet saada: müüja tooteleht, tootevariandid ja piirkondlike marketplace loendid (nt AliExpress, Amazon ja toetatud jaemüüjad), mis on filtreeritud sinu riigi järgi. Iga link avaneb ümbersuunamisteenuse msh.to kaudu. Seadmed, millel pole vastavaid linke, seda jaotist ei kuva.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

Seotud teemad


diff --git a/main/fi-rFI/user/nodes.html b/main/fi-rFI/user/nodes.html index 4350337548..9752c9db26 100644 --- a/main/fi-rFI/user/nodes.html +++ b/main/fi-rFI/user/nodes.html @@ -1 +1 @@ - Laitteet | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Suomi
Meshtastic Docs ↗

🌐 Suomi — Community translation View in English

Laitteet

Radionäkymässä luetellaan kaikki mesh-verkossasi näkyvät radiot.

Radiolista

Radioluettelo näyttää kaikki radiot, joista radiosi on vastaanottanut tietoja, mukaan lukien:

  • Radion nimi — käyttäjän määrittämä pitkä nimi
  • Lyhyt nimi — 4-merkkinen tunniste
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Viimeksi kuultu — aika viimeisimmästä yhteydestä
  • Etäisyys — arvioitu etäisyys (jos sijaintitiedot jaetaan)
  • Akku — etäradion akun varaustaso (jos telemetria on käytössä)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Radion tilailmaisimet

Ilmaisin Tarkoitus
Green last-heard time Radio kuultu viimeisen 2 tunnin aikana
Plain last-heard time Radiosta ei ole kuultu yli 2 tuntiin
⭐ Suosikki Radio, jonka olet merkinnyt suosikiksi.

Erillistä “poissa”-tilaa ei ole.

Radion roolit

Radioille voidaan määrittää erilaisia rooleja, jotka vaikuttavat niiden toimintaan verkossa:

Rooli Kuvaus
Client Tavallinen käyttäjäradio
Client Base Käsittelee suosikkiradioiden liikenteen Router Late -prioriteetilla, kaiken muun liikenteen Client -prioriteetilla
Client Mute Vastaanottaa viestejä, mutta ei lähetä niitä edelleen
Client Hidden Kuten Client Mute, mutta piilotetaan myös radioluettelosta
Router Priorisoi viestien välittämistä; pysyy hereillä välittääkseen viestejä
Router Late Infrastruktuuriradio, joka lähettää viestin uudelleen kerran, mutta vasta kaikkien muiden tilojen jälkeen (tarjoaa lisäpeittoa)
Router Client ⚠️ Vanhentunut (poistettu laiteohjelmistossa 2.3.15) — ei enää valittavissa; käytä sen sijaan Router- tai Client-roolia
Repeater ⚠️ Vanhentunut (poistettu laiteohjelmistossa 2.7.11) — ei enää valittavissa; käytä sen sijaan Router-roolia
Tracker Optimoitu sijainnin raportointiin säännöllisin väliajoin
Sensor Optimoitu telemetrian raportointiin
TAK Yhteensopiva TAK-järjestelmien kanssa (lähettää ja vastaanottaa CoT-viestejä)
TAK Tracker Vain TAK-sijainnin raportointi
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Roolin valitseminen

Useimpien käyttäjien kannattaa käyttää oletusarvoista Client-roolia. Harkitse muuta roolia seuraavissa tilanteissa:

  • Router — Sinulla on radio kiinteässä, korkealla sijaitsevassa paikassa, jossa on luotettava virransyöttö (katto, mäki). Routerit pysyvät jatkuvasti hereillä välittääkseen muiden viestejä ja ovat tärkeitä verkon peittoalueen laajentamisessa. Älä käytä Reititin-roolia akkukäyttöisissä käsiradioissa.
  • Router Late — Infrastruktuuriradio, joka lähettää paketit uudelleen kerran, mutta vasta kaikkien muiden reititystilojen jälkeen. Tarjoaa lisäpeittoa paikallisille ryhmille kilpailematta ensisijaisten Routerien kanssa.
  • Client Base — Käsittelee suosikkiradioihisi menevän tai niistä tulevan liikenteen Router Late -prioriteetilla (varmistaen näille viesteille ylimääräisen välityspeiton), samalla kun kaikki muu käsitellään tavallisen Client-roolin tavoin.
  • Client Mute — Voit vastaanottaa verkkoliikennettä, mutta et osallistu viestien välittämiseen. Hyödyllinen vain kuunteluun tarkoitetuissa radioissa tai ruuhkan vähentämiseen tiheillä alueilla.
  • Tracker “seurantalaite” — miehittämätön radio, jonka ainoa tehtävä on lähettää GPS-sijaintiaan (esimerkiksi ajoneuvo, henkilö tai muu kohde). Nukkuu lähetysten välillä akun säästämiseksi.
  • Anturi — miehittämätön radio, joka lähettää ympäristötelemetriaa (lämpötila, ilmankosteus, ilmanlaatu). Samanlainen virrankulutusprofiili kuin Tracker-roolissa.
  • TAK / TAK Tracker — Tarvitaan vain yhteensopivuuteen ATAK-/WinTAK-järjestelmien kanssa. Katso TAK-integraatio lisätietoja varten.

💡 Vinkki: Verkko toimii parhaiten, kun suurin osa radioista käyttää Client- tai Router-roolia. Liian suuri määrä Client Mute (mykistetty) -radioita heikentää mesh-verkon vikasietoisuutta. Liian useat Router -roolin radiot tiheällä alueella voivat aiheuttaa ruuhkaa. Hyvä nyrkkisääntö on yksi Router jokaista 5–10 Client-roolia kohden alueellasi.

Salausilmaisimet

Radiot näyttävät nimensä vieressä salauksen tilaa kuvaavat kuvakkeet:

Kuvake Merkitys
🔒 Lukittu Yhteys käyttää PKI:tä (julkisen avaimen infrastruktuuria) — päästä päähän salattu ja varmennetulla identiteetillä suojattu.
🔓 Lukitsematon Yhteys käyttää PKI:tä (julkisen avaimen infrastruktuuria) — päästä päähän salattu ja varmennetulla identiteetillä suojattu.
⚠️ Ei täsmää Julkinen avain ei täsmää — radion avain on muuttunut viime näkemän jälkeen (tutki ennen luottamista).

💡 Vinkki: PKI-salaus (laiteohjelmisto 2.5+) tarjoaa vahvemman suojauksen kuin kanavan PSK-avain, koska jokaisella radiolla on oma yksilöllinen avainparinsa. Jos näet avaimen täsmäämättömyysvaroituksen, radio on voitu nollata tai sen tietoturva on voinut vaarantua.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Pikatoiminnot

Radioluettelosta voit:

  • Napauttaa radiota avataksesi sen tietosivun
  • Kosketa ja pidä painettuna nähdäksesi pikatoiminnot:
    • Merkitse tai poista suosikki
    • Mykistä tai poista mykistys ilmoituksista
    • Lähetä yksityisviesti
    • Reitinselvitys
    • Ohita tai poista ohitus
    • Poista

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Suodatus ja lajittelu

Tekstihaku

Kirjoita hakukenttään suodattaaksesi radioita nimen tai lyhyen nimen perusteella. Suodatus päivittyy reaaliajassa kirjoittaessasi.

Suodatusvalinnat

Suodatus Kuvaus
Hide offline nodes Näytä vain radiot, joista on kuultu viimeisten 2 tunnin aikana
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Näytä tuntemattomat Näytä radiot, jotka eivät ole vielä lähettäneet käyttäjätietoja. Oletuksena käytössä, joten radio, joka on kuultu ennen käyttäjätietojensa saapumista, pysyy näkyvissä ja sille voi lähettää viestejä. Tällaiset radiot merkitään keskeneräisiksi
Ohita infrastruktuurilaitteet Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Rajaa MQTT pois Piilottaa radiot, joista on kuultu vain MQTT-internetsillan kautta
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Lajitteluvaihtoehdot

Lajittelu Kuvaus
Last heard Näytä viimeksi kuullut radiot ensin
A-Z Lajiteltu radion pitkän nimen mukaan
Etäisyys Lähimpänä olevat radiot ensin (edellyttää sijainnin jakamista)
Hyppyjä Vähiten välityshyppyjä vaativat radiot ensin
Kanava Ryhmitelty kanavaindeksin mukaan
via MQTT Ryhmitelty MQTT:n kautta kuultuihin ja radiolla kuultuihin
via Favorite (default) Favorited nodes first, then the rest

Radiot hyppymäärän mukaan

Avaa pylväskaavio, joka näyttää radioiden määrän kullakin hyppyetäisyydellä, napauttamalla radioluettelon sovelluspalkissa olevaa hyppyhistogrammikuvaketta (0 = suora yhteys, 1 = yksi välityshyppy ja niin edelleen). Suodata kaavio Viimeksi kuultu -ajanjakson mukaan — Kaikki ajat, 1 tunti, 8 tuntia tai 24 tuntia — nähdäksesi, miltä mesh-verkko näyttää juuri nyt verrattuna pidempään ajanjaksoon. Tämä on nopea tapa arvioida, kuinka laaja ja kuormittunut paikallinen mesh-verkkosi on.

Radion tiedot

Radion napauttaminen avaa tietonäkymän, jossa on kattavat tiedot. Katso Radion mittarit saadaksesi täydelliset tiedot mittareista ja telemetriasta.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Radion tietonäkymän osio

Rivinsisäiset tilailmaisimet näyttävät tärkeimmät tiedot yhdellä silmäyksellä:

Ilmaisin Kuvakaappaus
Signaalin laatu Signaali
Akun varaus Akku
Hyppymäärä Hypyt
Viimeksi kuultu Viimeksi kuultu
Etäisyys Etäisyys

Laite-linkit (“Haluan sellaisen”)

Kun radion laitteisto tunnistetaan, tietonäkymä näyttää avattavan “Haluan sellaisen” -osion, jossa on linkkejä laitteen ostamiseen tai lisätietojen hankkimiseen: valmistajan tuotesivu, tuoteversiot sekä alueelliset kauppapaikkalistaukset (esim. AliExpress, Amazon ja tuetut jälleenmyyjät), suodatettuna maasi mukaan. Jokainen linkki avautuu mesh.to -uudelleenohjauspalvelun kautta. Laitteet, joille ei löydy vastaavia linkkejä, eivät näytä tätä osiota.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

Aiheeseen liittyvät aiheet


+ Laitteet | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Suomi
Meshtastic Docs ↗

🌐 Suomi — Community translation View in English

Laitteet

Radionäkymässä luetellaan kaikki mesh-verkossasi näkyvät radiot.

Radiolista

Radioluettelo näyttää kaikki radiot, joista radiosi on vastaanottanut tietoja, mukaan lukien:

  • Radion nimi — käyttäjän määrittämä pitkä nimi
  • Lyhyt nimi — 4-merkkinen tunniste
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Viimeksi kuultu — aika viimeisimmästä yhteydestä
  • Etäisyys — arvioitu etäisyys (jos sijaintitiedot jaetaan)
  • Akku — etäradion akun varaustaso (jos telemetria on käytössä)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Radion tilailmaisimet

Ilmaisin Tarkoitus
Green last-heard time Radio kuultu viimeisen 2 tunnin aikana
Plain last-heard time Radiosta ei ole kuultu yli 2 tuntiin
⭐ Suosikki Radio, jonka olet merkinnyt suosikiksi.

Erillistä “poissa”-tilaa ei ole.

Radion roolit

Radioille voidaan määrittää erilaisia rooleja, jotka vaikuttavat niiden toimintaan verkossa:

Rooli Kuvaus
Client Tavallinen käyttäjäradio
Client Base Käsittelee suosikkiradioiden liikenteen Router Late -prioriteetilla, kaiken muun liikenteen Client -prioriteetilla
Client Mute Vastaanottaa viestejä, mutta ei lähetä niitä edelleen
Client Hidden Kuten Client Mute, mutta piilotetaan myös radioluettelosta
Router Priorisoi viestien välittämistä; pysyy hereillä välittääkseen viestejä
Router Late Infrastruktuuriradio, joka lähettää viestin uudelleen kerran, mutta vasta kaikkien muiden tilojen jälkeen (tarjoaa lisäpeittoa)
Router Client ⚠️ Vanhentunut (poistettu laiteohjelmistossa 2.3.15) — ei enää valittavissa; käytä sen sijaan Router- tai Client-roolia
Repeater ⚠️ Vanhentunut (poistettu laiteohjelmistossa 2.7.11) — ei enää valittavissa; käytä sen sijaan Router-roolia
Tracker Optimoitu sijainnin raportointiin säännöllisin väliajoin
Sensor Optimoitu telemetrian raportointiin
TAK Yhteensopiva TAK-järjestelmien kanssa (lähettää ja vastaanottaa CoT-viestejä)
TAK Tracker Vain TAK-sijainnin raportointi
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Roolin valitseminen

Useimpien käyttäjien kannattaa käyttää oletusarvoista Client-roolia. Harkitse muuta roolia seuraavissa tilanteissa:

  • Router — Sinulla on radio kiinteässä, korkealla sijaitsevassa paikassa, jossa on luotettava virransyöttö (katto, mäki). Routerit pysyvät jatkuvasti hereillä välittääkseen muiden viestejä ja ovat tärkeitä verkon peittoalueen laajentamisessa. Älä käytä Reititin-roolia akkukäyttöisissä käsiradioissa.
  • Router Late — Infrastruktuuriradio, joka lähettää paketit uudelleen kerran, mutta vasta kaikkien muiden reititystilojen jälkeen. Tarjoaa lisäpeittoa paikallisille ryhmille kilpailematta ensisijaisten Routerien kanssa.
  • Client Base — Käsittelee suosikkiradioihisi menevän tai niistä tulevan liikenteen Router Late -prioriteetilla (varmistaen näille viesteille ylimääräisen välityspeiton), samalla kun kaikki muu käsitellään tavallisen Client-roolin tavoin.
  • Client Mute — Voit vastaanottaa verkkoliikennettä, mutta et osallistu viestien välittämiseen. Hyödyllinen vain kuunteluun tarkoitetuissa radioissa tai ruuhkan vähentämiseen tiheillä alueilla.
  • Tracker “seurantalaite” — miehittämätön radio, jonka ainoa tehtävä on lähettää GPS-sijaintiaan (esimerkiksi ajoneuvo, henkilö tai muu kohde). Nukkuu lähetysten välillä akun säästämiseksi.
  • Anturi — miehittämätön radio, joka lähettää ympäristötelemetriaa (lämpötila, ilmankosteus, ilmanlaatu). Samanlainen virrankulutusprofiili kuin Tracker-roolissa.
  • TAK / TAK Tracker — Tarvitaan vain yhteensopivuuteen ATAK-/WinTAK-järjestelmien kanssa. Katso TAK-integraatio lisätietoja varten.

💡 Vinkki: Verkko toimii parhaiten, kun suurin osa radioista käyttää Client- tai Router-roolia. Liian suuri määrä Client Mute (mykistetty) -radioita heikentää mesh-verkon vikasietoisuutta. Liian useat Router -roolin radiot tiheällä alueella voivat aiheuttaa ruuhkaa. Hyvä nyrkkisääntö on yksi Router jokaista 5–10 Client-roolia kohden alueellasi.

Salausilmaisimet

Radiot näyttävät nimensä vieressä salauksen tilaa kuvaavat kuvakkeet:

Kuvake Merkitys
🔒 Lukittu Yhteys käyttää PKI:tä (julkisen avaimen infrastruktuuria) — päästä päähän salattu ja varmennetulla identiteetillä suojattu.
🔓 Lukitsematon No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Ei täsmää Julkinen avain ei täsmää — radion avain on muuttunut viime näkemän jälkeen (tutki ennen luottamista).

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. Jos näet avaimen täsmäämättömyysvaroituksen, radio on voitu nollata tai sen tietoturva on voinut vaarantua.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Pikatoiminnot

Radioluettelosta voit:

  • Napauttaa radiota avataksesi sen tietosivun
  • Kosketa ja pidä painettuna nähdäksesi pikatoiminnot:
    • Merkitse tai poista suosikki
    • Mykistä tai poista mykistys ilmoituksista
    • Lähetä yksityisviesti
    • Reitinselvitys
    • Ohita tai poista ohitus
    • Poista

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Suodatus ja lajittelu

Tekstihaku

Kirjoita hakukenttään suodattaaksesi radioita nimen tai lyhyen nimen perusteella. Suodatus päivittyy reaaliajassa kirjoittaessasi.

Suodatusvalinnat

Suodatus Kuvaus
Hide offline nodes Näytä vain radiot, joista on kuultu viimeisten 2 tunnin aikana
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Näytä tuntemattomat Näytä radiot, jotka eivät ole vielä lähettäneet käyttäjätietoja. Oletuksena käytössä, joten radio, joka on kuultu ennen käyttäjätietojensa saapumista, pysyy näkyvissä ja sille voi lähettää viestejä. Tällaiset radiot merkitään keskeneräisiksi
Ohita infrastruktuurilaitteet Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Rajaa MQTT pois Piilottaa radiot, joista on kuultu vain MQTT-internetsillan kautta
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Lajitteluvaihtoehdot

Lajittelu Kuvaus
Last heard Näytä viimeksi kuullut radiot ensin
A-Z Lajiteltu radion pitkän nimen mukaan
Etäisyys Lähimpänä olevat radiot ensin (edellyttää sijainnin jakamista)
Hyppyjä Vähiten välityshyppyjä vaativat radiot ensin
Kanava Ryhmitelty kanavaindeksin mukaan
via MQTT Ryhmitelty MQTT:n kautta kuultuihin ja radiolla kuultuihin
via Favorite (default) Favorited nodes first, then the rest

Radiot hyppymäärän mukaan

Avaa pylväskaavio, joka näyttää radioiden määrän kullakin hyppyetäisyydellä, napauttamalla radioluettelon sovelluspalkissa olevaa hyppyhistogrammikuvaketta (0 = suora yhteys, 1 = yksi välityshyppy ja niin edelleen). Suodata kaavio Viimeksi kuultu -ajanjakson mukaan — Kaikki ajat, 1 tunti, 8 tuntia tai 24 tuntia — nähdäksesi, miltä mesh-verkko näyttää juuri nyt verrattuna pidempään ajanjaksoon. Tämä on nopea tapa arvioida, kuinka laaja ja kuormittunut paikallinen mesh-verkkosi on.

Radion tiedot

Radion napauttaminen avaa tietonäkymän, jossa on kattavat tiedot. Katso Radion mittarit saadaksesi täydelliset tiedot mittareista ja telemetriasta.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Radion tietonäkymän osio

Rivinsisäiset tilailmaisimet näyttävät tärkeimmät tiedot yhdellä silmäyksellä:

Ilmaisin Kuvakaappaus
Signaalin laatu Signaali
Akun varaus Akku
Hyppymäärä Hypyt
Viimeksi kuultu Viimeksi kuultu
Etäisyys Etäisyys

Laite-linkit (“Haluan sellaisen”)

Kun radion laitteisto tunnistetaan, tietonäkymä näyttää avattavan “Haluan sellaisen” -osion, jossa on linkkejä laitteen ostamiseen tai lisätietojen hankkimiseen: valmistajan tuotesivu, tuoteversiot sekä alueelliset kauppapaikkalistaukset (esim. AliExpress, Amazon ja tuetut jälleenmyyjät), suodatettuna maasi mukaan. Jokainen linkki avautuu mesh.to -uudelleenohjauspalvelun kautta. Laitteet, joille ei löydy vastaavia linkkejä, eivät näytä tätä osiota.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

Aiheeseen liittyvät aiheet


diff --git a/main/fr-rCA/user/nodes.html b/main/fr-rCA/user/nodes.html index bc08042485..0fd332daed 100644 --- a/main/fr-rCA/user/nodes.html +++ b/main/fr-rCA/user/nodes.html @@ -149,7 +149,7 @@ 🔓 Unlocked - Communication uses shared channel PSK — encrypted but identity not individually verified + No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one ⚠️ Mismatch @@ -159,7 +159,7 @@
-

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

+

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

diff --git a/main/fr-rFR/user/nodes.html b/main/fr-rFR/user/nodes.html index f482d446cf..f0f8043a30 100644 --- a/main/fr-rFR/user/nodes.html +++ b/main/fr-rFR/user/nodes.html @@ -1 +1 @@ - Nœuds | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Français
Meshtastic Docs ↗

🌐 Français — Community translation View in English

Nœuds

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Rôle Description
Client Standard end-user node
Base Client Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client muet Receives but doesn’t retransmit
Client masqué Like Client Mute, plus hides from node list
Routeur Prioritizes message forwarding; stays awake to relay
Routeur avec retard Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Traqueur Optimized for position reporting at regular intervals
Capteur Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
Traqueur TAK TAK position reporting only
Objets trouvés Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Supprimer

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtre Description
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Description
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Niveau de batterie Battery
Hop count Hops
Dernière écoute Last heard
Distance Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nœuds | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Français
Meshtastic Docs ↗

🌐 Français — Community translation View in English

Nœuds

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Rôle Description
Client Standard end-user node
Base Client Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client muet Receives but doesn’t retransmit
Client masqué Like Client Mute, plus hides from node list
Routeur Prioritizes message forwarding; stays awake to relay
Routeur avec retard Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Traqueur Optimized for position reporting at regular intervals
Capteur Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
Traqueur TAK TAK position reporting only
Objets trouvés Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Supprimer

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtre Description
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Description
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Niveau de batterie Battery
Hop count Hops
Dernière écoute Last heard
Distance Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/ga-rIE/user/nodes.html b/main/ga-rIE/user/nodes.html index 12d06abc78..55c657cb83 100644 --- a/main/ga-rIE/user/nodes.html +++ b/main/ga-rIE/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Gaeilge
Meshtastic Docs ↗

🌐 Gaeilge — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Cur síos
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Bain

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Scagaire Cur síos
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Cur síos
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Deiridh chluinmhu Last heard
Sáth Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Gaeilge
Meshtastic Docs ↗

🌐 Gaeilge — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Cur síos
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Bain

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Scagaire Cur síos
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Cur síos
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Deiridh chluinmhu Last heard
Sáth Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/gl-rES/user/nodes.html b/main/gl-rES/user/nodes.html index 897806df3c..a9e1e4c0e4 100644 --- a/main/gl-rES/user/nodes.html +++ b/main/gl-rES/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Galego
Meshtastic Docs ↗

🌐 Galego — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Descrición
Cliente Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Eliminar

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtro Descrición
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Descrición
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Última escoita Last heard
Distancia Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Galego
Meshtastic Docs ↗

🌐 Galego — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Descrición
Cliente Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Eliminar

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtro Descrición
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Descrición
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Última escoita Last heard
Distancia Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/hr-rHR/user/nodes.html b/main/hr-rHR/user/nodes.html index 77d88637b0..6fdac33931 100644 --- a/main/hr-rHR/user/nodes.html +++ b/main/hr-rHR/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Hrvatski
Meshtastic Docs ↗

🌐 Hrvatski — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Opis
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Ukloni

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtriraj Opis
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Opis
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Posljednje čuo Last heard
Udaljenost Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Hrvatski
Meshtastic Docs ↗

🌐 Hrvatski — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Opis
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Ukloni

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtriraj Opis
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Opis
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Posljednje čuo Last heard
Udaljenost Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/ht-rHT/user/nodes.html b/main/ht-rHT/user/nodes.html index 491904e67e..2873cf1403 100644 --- a/main/ht-rHT/user/nodes.html +++ b/main/ht-rHT/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Kreyòl Ayisyen
Meshtastic Docs ↗

🌐 Kreyòl Ayisyen — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Deskripsyon
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Retire

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtre Deskripsyon
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Deskripsyon
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Dènye fwa li tande Last heard
Distans Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Kreyòl Ayisyen
Meshtastic Docs ↗

🌐 Kreyòl Ayisyen — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Deskripsyon
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Retire

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtre Deskripsyon
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Deskripsyon
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Dènye fwa li tande Last heard
Distans Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/hu-rHU/user/nodes.html b/main/hu-rHU/user/nodes.html index 034b15e504..78cc465554 100644 --- a/main/hu-rHU/user/nodes.html +++ b/main/hu-rHU/user/nodes.html @@ -1 +1 @@ - Csomópontok | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Magyar
Meshtastic Docs ↗

🌐 Magyar — Community translation View in English

Csomópontok

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Szerepkör Leírás
Kliens Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Néma Kliens Receives but doesn’t retransmit
Rejtett Kliens Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Késő Router Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Szenzor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Elveszett és Megkerült Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Törlés

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Leírás
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Leírás
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Utoljára hallott Last heard
Távolság Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Csomópontok | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Magyar
Meshtastic Docs ↗

🌐 Magyar — Community translation View in English

Csomópontok

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Szerepkör Leírás
Kliens Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Néma Kliens Receives but doesn’t retransmit
Rejtett Kliens Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Késő Router Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Szenzor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Elveszett és Megkerült Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Törlés

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Leírás
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Leírás
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Utoljára hallott Last heard
Távolság Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/index.json b/main/index.json index c47267d792..e4b9d338c2 100644 --- a/main/index.json +++ b/main/index.json @@ -42,7 +42,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"ar-rSA","resourcePath":"docs/ar-rSA/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22696}, {"id":"mqtt","title":"MQTT","section":"user","locale":"ar-rSA","resourcePath":"docs/ar-rSA/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"ar-rSA","resourcePath":"docs/ar-rSA/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "signal", "reference", "power", "traceroute", "reading", "results", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12460}, - {"id":"nodes","title":"Nodes","section":"user","locale":"ar-rSA","resourcePath":"docs/ar-rSA/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14452}, + {"id":"nodes","title":"Nodes","section":"user","locale":"ar-rSA","resourcePath":"docs/ar-rSA/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14774}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"ar-rSA","resourcePath":"docs/ar-rSA/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"ar-rSA","resourcePath":"docs/ar-rSA/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32238}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"ar-rSA","resourcePath":"docs/ar-rSA/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "device", "config", "lora", "modem", "presets", "display", "position", "power", "network", "bluetooth", "security", "related", "topics"],"aliases":["الإعدادات", "radio-config", "user-config", "lora"],"charCount":41242}, @@ -63,7 +63,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"be-rBY","resourcePath":"docs/be-rBY/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22695}, {"id":"mqtt","title":"MQTT","section":"user","locale":"be-rBY","resourcePath":"docs/be-rBY/user/mqtt.html","navOrder":11,"keywords":["mqtt", "how", "works", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting", "messages", "bridging"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12368}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"be-rBY","resourcePath":"docs/be-rBY/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "signal", "reference", "power", "traceroute", "reading", "results", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12471}, - {"id":"nodes","title":"Nodes","section":"user","locale":"be-rBY","resourcePath":"docs/be-rBY/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14475}, + {"id":"nodes","title":"Nodes","section":"user","locale":"be-rBY","resourcePath":"docs/be-rBY/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14797}, {"id":"onboarding","title":"Начало работы","section":"user","locale":"be-rBY","resourcePath":"docs/be-rBY/user/onboarding.html","navOrder":1,"keywords":["first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8457}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"be-rBY","resourcePath":"docs/be-rBY/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32250}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"be-rBY","resourcePath":"docs/be-rBY/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "device", "config", "lora", "modem", "presets", "display", "position", "power", "network", "bluetooth", "security", "related", "topics"],"aliases":["settings", "radio-config", "user-config", "lora"],"charCount":41240}, @@ -84,7 +84,7 @@ {"id":"messages-and-channels","title":"Съобщения & Канали","section":"user","locale":"bg-rBG","resourcePath":"docs/bg-rBG/user/messages-and-channels.html","navOrder":3,"keywords":["default", "channel", "adding", "sending", "direct", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "messages", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest", "actions", "priority"],"aliases":["канали", "direct-messages", "messaging", "conversations"],"charCount":22887}, {"id":"mqtt","title":"MQTT","section":"user","locale":"bg-rBG","resourcePath":"docs/bg-rBG/user/mqtt.html","navOrder":11,"keywords":["mqtt", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "not", "connecting", "messages", "bridging"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12421}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"bg-rBG","resourcePath":"docs/bg-rBG/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "air", "quality", "signal", "reference", "reading", "traceroute", "results", "neighbor", "info", "host", "pax"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12638}, - {"id":"nodes","title":"Възли","section":"user","locale":"bg-rBG","resourcePath":"docs/bg-rBG/user/nodes.html","navOrder":4,"keywords":["choosing", "what", "the", "list", "shows", "node", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14524}, + {"id":"nodes","title":"Възли","section":"user","locale":"bg-rBG","resourcePath":"docs/bg-rBG/user/nodes.html","navOrder":4,"keywords":["choosing", "what", "the", "list", "shows", "node", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14846}, {"id":"onboarding","title":"Първи стъпки","section":"user","locale":"bg-rBG","resourcePath":"docs/bg-rBG/user/onboarding.html","navOrder":1,"keywords":["first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup"],"aliases":["first-launch", "setup", "intro"],"charCount":8480}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"bg-rBG","resourcePath":"docs/bg-rBG/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "mqtt", "module", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak", "device"],"aliases":["modules", "module-config", "administration"],"charCount":33271}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"bg-rBG","resourcePath":"docs/bg-rBG/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "lora", "modem", "presets", "bluetooth", "related", "topics"],"aliases":["настройки", "radio-config", "user-config", "lora"],"charCount":42258}, @@ -105,7 +105,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"ca-rES","resourcePath":"docs/ca-rES/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22697}, {"id":"mqtt","title":"MQTT","section":"user","locale":"ca-rES","resourcePath":"docs/ca-rES/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"ca-rES","resourcePath":"docs/ca-rES/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "signal", "reference", "power", "tra", "ruta", "reading", "traceroute", "results", "position", "log", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12411}, - {"id":"nodes","title":"Nodes","section":"user","locale":"ca-rES","resourcePath":"docs/ca-rES/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14454}, + {"id":"nodes","title":"Nodes","section":"user","locale":"ca-rES","resourcePath":"docs/ca-rES/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14776}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"ca-rES","resourcePath":"docs/ca-rES/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"ca-rES","resourcePath":"docs/ca-rES/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32430}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"ca-rES","resourcePath":"docs/ca-rES/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "device", "config", "lora", "modem", "presets", "display", "position", "power", "network", "bluetooth", "security", "related", "topics"],"aliases":["settings", "radio-config", "user-config", "lora"],"charCount":41241}, @@ -126,7 +126,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"cs-rCZ","resourcePath":"docs/cs-rCZ/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "kan", "default", "channel", "zabezpe", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22816}, {"id":"mqtt","title":"MQTT","section":"user","locale":"cs-rCZ","resourcePath":"docs/cs-rCZ/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "nastaven", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12368}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"cs-rCZ","resourcePath":"docs/cs-rCZ/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "metriky", "zen", "prost", "air", "quality", "kvalita", "sign", "signal", "reference", "nap", "jen", "traceroute", "reading", "results", "protokol", "pozic", "informace", "sousedech", "hostitele", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12436}, - {"id":"nodes","title":"Uzly","section":"user","locale":"cs-rCZ","resourcePath":"docs/cs-rCZ/user/nodes.html","navOrder":4,"keywords":["uzly", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14467}, + {"id":"nodes","title":"Uzly","section":"user","locale":"cs-rCZ","resourcePath":"docs/cs-rCZ/user/nodes.html","navOrder":4,"keywords":["uzly", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14789}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"cs-rCZ","resourcePath":"docs/cs-rCZ/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8511}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"cs-rCZ","resourcePath":"docs/cs-rCZ/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32804}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"cs-rCZ","resourcePath":"docs/cs-rCZ/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "nastaven", "zen", "lora", "modem", "presets", "zobrazen", "pozice", "nap", "jen", "bluetooth", "zabezpe", "related", "topics"],"aliases":["nastavení", "radio-config", "user-config", "lora"],"charCount":42155}, @@ -147,7 +147,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"de-rDE","resourcePath":"docs/de-rDE/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "kan", "default", "channel", "kanalsicherheit", "adding", "direktnachrichten", "sending", "direct", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22944}, {"id":"mqtt","title":"MQTT","section":"user","locale":"de-rDE","resourcePath":"docs/de-rDE/user/mqtt.html","navOrder":11,"keywords":["mqtt", "bersicht", "funktioniert", "einstellungen", "aktivieren", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "bew", "hrte", "praktiken", "fehlerbehebung", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12383}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"de-rDE","resourcePath":"docs/de-rDE/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "ger", "tedaten", "umweltdaten", "air", "quality", "signalqualit", "signal", "reference", "energiedaten", "traceroute", "reading", "results", "standortprotokoll", "nachbarinformation", "host", "kennzahlen", "benutzerz", "hlerdaten", "verwandte", "themen"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12844}, - {"id":"nodes","title":"Knoten","section":"user","locale":"de-rDE","resourcePath":"docs/de-rDE/user/nodes.html","navOrder":4,"keywords":["knoten", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14732}, + {"id":"nodes","title":"Knoten","section":"user","locale":"de-rDE","resourcePath":"docs/de-rDE/user/nodes.html","navOrder":4,"keywords":["knoten", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":15054}, {"id":"onboarding","title":"Erste Schritte","section":"user","locale":"de-rDE","resourcePath":"docs/de-rDE/user/onboarding.html","navOrder":1,"keywords":["erste", "schritte", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "verwandte", "themen"],"aliases":["first-launch", "setup", "intro"],"charCount":8565}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"de-rDE","resourcePath":"docs/de-rDE/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "moduleinstellungen", "mqtt", "module", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":33041}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"de-rDE","resourcePath":"docs/de-rDE/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "benutzereinstellungen", "profile", "applying", "changes", "einstellungen", "ger", "teeinstellungen", "lora", "modem", "presets", "anzeigeeinstellungen", "standorteinstellungen", "energie", "netzwerkeinstellungen", "bluetooth", "sicherheitseinstellungen", "related", "topics"],"aliases":["Einstellungen", "radio-config", "user-config", "lora"],"charCount":41985}, @@ -168,7 +168,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"el-rGR","resourcePath":"docs/el-rGR/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22696}, {"id":"mqtt","title":"MQTT","section":"user","locale":"el-rGR","resourcePath":"docs/el-rGR/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"el-rGR","resourcePath":"docs/el-rGR/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "signal", "reference", "power", "traceroute", "reading", "results", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12426}, - {"id":"nodes","title":"Nodes","section":"user","locale":"el-rGR","resourcePath":"docs/el-rGR/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14454}, + {"id":"nodes","title":"Nodes","section":"user","locale":"el-rGR","resourcePath":"docs/el-rGR/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14776}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"el-rGR","resourcePath":"docs/el-rGR/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"el-rGR","resourcePath":"docs/el-rGR/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32399}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"el-rGR","resourcePath":"docs/el-rGR/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "device", "config", "lora", "modem", "presets", "display", "position", "power", "network", "bluetooth", "security", "related", "topics"],"aliases":["ρυθμίσεις", "radio-config", "user-config", "lora"],"charCount":41245}, @@ -189,7 +189,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"es-rES","resourcePath":"docs/es-rES/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "canales", "default", "channel", "seguridad", "del", "canal", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22699}, {"id":"mqtt","title":"MQTT","section":"user","locale":"es-rES","resourcePath":"docs/es-rES/user/mqtt.html","navOrder":11,"keywords":["mqtt", "visi", "general", "how", "works", "configuraci", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12378}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"es-rES","resourcePath":"docs/es-rES/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "tricas", "dispositivo", "entorno", "air", "quality", "calidad", "signal", "reference", "energ", "traceroute", "reading", "results", "registro", "posiciones", "informaci", "vecinos", "del", "anfitri", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12484}, - {"id":"nodes","title":"Nodos","section":"user","locale":"es-rES","resourcePath":"docs/es-rES/user/nodes.html","navOrder":4,"keywords":["nodos", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14497}, + {"id":"nodes","title":"Nodos","section":"user","locale":"es-rES","resourcePath":"docs/es-rES/user/nodes.html","navOrder":4,"keywords":["nodos", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14819}, {"id":"onboarding","title":"Primeros Pasos","section":"user","locale":"es-rES","resourcePath":"docs/es-rES/user/onboarding.html","navOrder":1,"keywords":["primeros", "pasos", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8534}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"es-rES","resourcePath":"docs/es-rES/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":33468}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"es-rES","resourcePath":"docs/es-rES/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuraci", "del", "dispositivo", "lora", "modem", "presets", "pantalla", "posici", "elecenerg", "red", "bluetooth", "seguridad", "related", "topics"],"aliases":["ajustes", "radio-config", "user-config", "lora"],"charCount":42531}, @@ -210,7 +210,7 @@ {"id":"messages-and-channels","title":"Sõnumid ja kanalid","section":"user","locale":"et-rEE","resourcePath":"docs/et-rEE/user/messages-and-channels.html","navOrder":3,"keywords":["numid", "kanalid", "kanal", "vaikekanal", "kanali", "turvalisus", "lisa", "otses", "sending", "direct", "message", "managing", "the", "conversation", "list", "bubbles", "numi", "olek", "delivery", "errors", "omadused", "kiirvestlus", "otsin", "numeid", "numimullid", "teksti", "vormindamine", "mainimine", "reaktsioonid", "replying"],"aliases":["kanalid", "otsesõnumid", "messaging", "conversations"],"charCount":22872}, {"id":"mqtt","title":"MQTT","section":"user","locale":"et-rEE","resourcePath":"docs/et-rEE/user/mqtt.html","navOrder":11,"keywords":["mqtt", "levaade", "kuidas", "see", "toimib", "tted", "luba", "connection", "status", "and", "test", "puhverserver", "sellel", "telefonil", "meshtastic", "vaikemaakler", "private", "broker", "kaardiaruannete", "koostamine", "leslink", "allalink", "numivormingud", "encryption", "privacy", "parimad", "tavad", "veaotsing", "hendu", "messages"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12403}, {"id":"node-metrics","title":"Sõlme mõõdikud","section":"user","locale":"et-rEE","resourcePath":"docs/et-rEE/user/node-metrics.html","navOrder":5,"keywords":["lme", "dikud", "viewing", "metrics", "seadme", "keskkonnam", "air", "quality", "levi", "kvaliteet", "signal", "reference", "imsusn", "itajad", "marsruudi", "traceroute", "tulemuste", "lugemine", "asukoha", "logi", "naabruse", "teave", "hosti", "dik", "pax", "diku", "seotud", "teemad"],"aliases":["meetriline", "telemeetria", "sõlme-mõõdikud", "signaal"],"charCount":12669}, - {"id":"nodes","title":"Sõlmed","section":"user","locale":"et-rEE","resourcePath":"docs/et-rEE/user/nodes.html","navOrder":4,"keywords":["lmed", "lmede", "loend", "choosing", "what", "the", "list", "shows", "lme", "oleku", "indikaatorid", "node", "roles", "role", "encryption", "indicators", "quick", "actions", "sharing", "contact", "filtering", "sorting", "teksti", "otsing", "filter", "toggles", "sorteerimisvalikud", "ppe", "kohta", "detail"],"aliases":["sõlmede loend", "mesh-nodes", "eakaaslased", "hop-histogram"],"charCount":15088}, + {"id":"nodes","title":"Sõlmed","section":"user","locale":"et-rEE","resourcePath":"docs/et-rEE/user/nodes.html","navOrder":4,"keywords":["lmed", "lmede", "loend", "choosing", "what", "the", "list", "shows", "lme", "oleku", "indikaatorid", "node", "roles", "role", "encryption", "indicators", "quick", "actions", "sharing", "contact", "filtering", "sorting", "teksti", "otsing", "filter", "toggles", "sorteerimisvalikud", "ppe", "kohta", "detail"],"aliases":["sõlmede loend", "mesh-nodes", "eakaaslased", "hop-histogram"],"charCount":15342}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"et-rEE","resourcePath":"docs/et-rEE/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "tervituskuva", "permissions", "sinihamba", "load", "asukoha", "luba", "rguannete", "critical", "alerts", "permission", "reviewing", "later", "peale", "seadistamist", "seotud", "teemad"],"aliases":["first-launch", "seadistamine", "sissejuhatus"],"charCount":8529}, {"id":"settings-module-admin","title":"Sätted - moodulid & admin","section":"user","locale":"et-rEE","resourcePath":"docs/et-rEE/user/settings-module-admin.html","navOrder":8,"keywords":["tted", "moodulid", "admin", "mooduli", "konf", "mqtt", "moodul", "jadapordi", "lise", "teavitusmoodul", "salvesta", "edasta", "kaugustesti", "telemeetria", "eelsalvestatud", "numi", "audio", "kaugriistvara", "naabriinfo", "ambientvalguse", "tuvastusanduri", "paxloenduri", "status", "message", "module", "mesh", "beacon", "tak", "haldus", "kaughaldus"],"aliases":["moodul", "mooduli sätted", "administratsioon"],"charCount":33029}, {"id":"settings-radio-user","title":"Seaded — raadio ja kasutaja","section":"user","locale":"et-rEE","resourcePath":"docs/et-rEE/user/settings-radio-user.html","navOrder":7,"keywords":["seaded", "raadio", "kasutaja", "how", "these", "screens", "work", "kasutajaprofiil", "applying", "changes", "tted", "seadme", "lora", "modem", "presets", "ekraani", "asukoha", "toite", "rgu", "sinihamba", "turva", "seotud", "teemad"],"aliases":["sätted", "raadio-sätted", "kasutaja-sätted", "lora"],"charCount":41625}, @@ -231,7 +231,7 @@ {"id":"messages-and-channels","title":"Viestit ja kanavat","section":"user","locale":"fi-rFI","resourcePath":"docs/fi-rFI/user/messages-and-channels.html","navOrder":3,"keywords":["viestit", "kanavat", "oletuskanava", "kanavan", "turvallisuus", "lis", "minen", "yksityisviestit", "yksityisviestin", "hett", "keskusteluluettelon", "hallinta", "keskustelukuplat", "viestin", "tilat", "toimitusvirheet", "viestiominaisuudet", "pikachatti", "viestien", "haku", "viestikuplat", "tekstin", "muotoilu", "maininnat", "reaktiot", "vastaaminen", "erottimet", "siirry", "viimeisimpiin", "viestitoiminnot"],"aliases":["kanavat", "yksityisviestit", "viestit", "keskustelut"],"charCount":24669}, {"id":"mqtt","title":"MQTT","section":"user","locale":"fi-rFI","resourcePath":"docs/fi-rFI/user/mqtt.html","navOrder":11,"keywords":["mqtt", "yleiskatsaus", "kuinka", "toimii", "asetukset", "ytt", "notto", "yhteyden", "tila", "testaa", "yhteys", "lityspalvelin", "puhelimessa", "oletus", "meshtastic", "oma", "karttaraportointi", "hetys", "vastaanotto", "viestiformaatit", "salaus", "yksityisyys", "parhaat", "vianetsint", "yhdist", "viestit", "eiv", "lity", "aiheeseen", "liittyv"],"aliases":["mqtt", "internet-silta", "välityspalvelin"],"charCount":13491}, {"id":"node-metrics","title":"Radion mittarit","section":"user","locale":"fi-rFI","resourcePath":"docs/fi-rFI/user/node-metrics.html","navOrder":5,"keywords":["radion", "mittarit", "mittareiden", "tarkastelu", "laitteen", "mittausloki", "ymp", "rist", "arvot", "ilmanlaatumittarit", "signaalin", "laatu", "laadun", "viitearvot", "virranhallinnan", "reitinselvitys", "reitinselvityksen", "tulosten", "lukeminen", "sijainnin", "loki", "naapuritieto", "mittausarvot", "pax", "aiheeseen", "liittyv", "aiheet"],"aliases":["mittarit", "telemetria", "laitteen mittarit", "signaali"],"charCount":13967}, - {"id":"nodes","title":"Laitteet","section":"user","locale":"fi-rFI","resourcePath":"docs/fi-rFI/user/nodes.html","navOrder":4,"keywords":["laitteet", "radiolista", "choosing", "what", "the", "list", "shows", "radion", "tilailmaisimet", "roolit", "roolin", "valitseminen", "salausilmaisimet", "pikatoiminnot", "sharing", "contact", "suodatus", "lajittelu", "tekstihaku", "suodatusvalinnat", "lajitteluvaihtoehdot", "radiot", "hyppym", "mukaan", "tiedot", "laite", "linkit", "haluan", "sellaisen", "when"],"aliases":["radiolista", "mesh-radiot", "vertaisradiot", "Hyppymääräjakauma"],"charCount":16839}, + {"id":"nodes","title":"Laitteet","section":"user","locale":"fi-rFI","resourcePath":"docs/fi-rFI/user/nodes.html","navOrder":4,"keywords":["laitteet", "radiolista", "choosing", "what", "the", "list", "shows", "radion", "tilailmaisimet", "roolit", "roolin", "valitseminen", "salausilmaisimet", "pikatoiminnot", "sharing", "contact", "suodatus", "lajittelu", "tekstihaku", "suodatusvalinnat", "lajitteluvaihtoehdot", "radiot", "hyppym", "mukaan", "tiedot", "laite", "linkit", "haluan", "sellaisen", "when"],"aliases":["radiolista", "mesh-radiot", "vertaisradiot", "Hyppymääräjakauma"],"charCount":17028}, {"id":"onboarding","title":"Aloittaminen","section":"user","locale":"fi-rFI","resourcePath":"docs/fi-rFI/user/onboarding.html","navOrder":1,"keywords":["aloittaminen", "ensimm", "inen", "ynnistys", "aloitusn", "kym", "ytt", "oikeudet", "bluetooth", "oikeus", "sijaintik", "ilmoitusk", "kriittisten", "lytysten", "oikeuksien", "tarkistaminen", "hemmin", "rityksen", "lkeen", "aiheeseen", "liittyv", "aiheet"],"aliases":["ensimmäinen käynnistys", "asetukset", "esittely"],"charCount":9481}, {"id":"settings-module-admin","title":"Asetukset — Moduulit ja ylläpito","section":"user","locale":"fi-rFI","resourcePath":"docs/fi-rFI/user/settings-module-admin.html","navOrder":8,"keywords":["asetukset", "moduulit", "yll", "pito", "moduulin", "ritys", "mqtt", "moduuli", "sarjaporttimoduuli", "ulkoisten", "ilmoitusten", "varastoi", "lit", "kuuluvuustesti", "telemetriamoduuli", "valmiiden", "viestien", "nimoduuli", "laitteiston", "naapuritieto", "ymp", "rist", "valaistusmoduuli", "tunnistusanturimoduuli", "pax", "laskurimoduuli", "tilaviestimoduuli", "mesh", "beacon", "tak"],"aliases":["moduulit", "moduulin asetukset", "ylläpito"],"charCount":35065}, {"id":"settings-radio-user","title":"Asetukset — Radio ja käyttäjä","section":"user","locale":"fi-rFI","resourcePath":"docs/fi-rFI/user/settings-radio-user.html","navOrder":7,"keywords":["asetukset", "radio", "ytt", "how", "these", "screens", "work", "profiili", "muutosten", "notto", "laitteen", "lora", "esiasetukset", "sijainnin", "virran", "verkon", "bluetooth", "turvallisuusasetukset", "aiheeseen", "liittyv", "aiheet"],"aliases":["asetukset", "radion asetukset", "käyttäjän asetukset", "lora"],"charCount":44198}, @@ -252,7 +252,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"fr-rCA","resourcePath":"docs/fr-rCA/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "canaux", "default", "channel", "curit", "canal", "adding", "directs", "sending", "direct", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22697}, {"id":"mqtt","title":"MQTT","section":"user","locale":"fr-rCA","resourcePath":"docs/fr-rCA/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"fr-rCA","resourcePath":"docs/fr-rCA/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "triques", "appareil", "environnement", "air", "quality", "qualit", "signal", "reference", "alimentation", "traceroute", "reading", "results", "journal", "des", "positions", "informations", "sur", "les", "voisins", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12551}, - {"id":"nodes","title":"Nœuds","section":"user","locale":"fr-rCA","resourcePath":"docs/fr-rCA/user/nodes.html","navOrder":4,"keywords":["uds", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14513}, + {"id":"nodes","title":"Nœuds","section":"user","locale":"fr-rCA","resourcePath":"docs/fr-rCA/user/nodes.html","navOrder":4,"keywords":["uds", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14835}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"fr-rCA","resourcePath":"docs/fr-rCA/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8571}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"fr-rCA","resourcePath":"docs/fr-rCA/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "configuration", "module", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":33427}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"fr-rCA","resourcePath":"docs/fr-rCA/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "param", "tres", "utilisateur", "profile", "applying", "changes", "configuration", "appareil", "lora", "modem", "presets", "cran", "position", "alimentation", "seau", "bluetooth", "curit", "related", "topics"],"aliases":["paramètres", "radio-config", "user-config", "lora"],"charCount":42971}, @@ -273,7 +273,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"fr-rFR","resourcePath":"docs/fr-rFR/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "canaux", "default", "channel", "curit", "canal", "adding", "directs", "sending", "direct", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22697}, {"id":"mqtt","title":"MQTT","section":"user","locale":"fr-rFR","resourcePath":"docs/fr-rFR/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"fr-rFR","resourcePath":"docs/fr-rFR/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "triques", "appareil", "environnement", "air", "quality", "qualit", "signal", "reference", "alimentation", "traceroute", "reading", "results", "journal", "des", "positions", "informations", "sur", "les", "voisins", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12551}, - {"id":"nodes","title":"Nœuds","section":"user","locale":"fr-rFR","resourcePath":"docs/fr-rFR/user/nodes.html","navOrder":4,"keywords":["uds", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14513}, + {"id":"nodes","title":"Nœuds","section":"user","locale":"fr-rFR","resourcePath":"docs/fr-rFR/user/nodes.html","navOrder":4,"keywords":["uds", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14835}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"fr-rFR","resourcePath":"docs/fr-rFR/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8571}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"fr-rFR","resourcePath":"docs/fr-rFR/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "configuration", "module", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":33427}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"fr-rFR","resourcePath":"docs/fr-rFR/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "param", "tres", "utilisateur", "profile", "applying", "changes", "configuration", "appareil", "lora", "modem", "presets", "cran", "position", "alimentation", "seau", "bluetooth", "curit", "related", "topics"],"aliases":["paramètres", "radio-config", "user-config", "lora"],"charCount":42971}, @@ -294,7 +294,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"ga-rIE","resourcePath":"docs/ga-rIE/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22697}, {"id":"mqtt","title":"MQTT","section":"user","locale":"ga-rIE","resourcePath":"docs/ga-rIE/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"ga-rIE","resourcePath":"docs/ga-rIE/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "ocht", "gneal", "signal", "reference", "power", "rianad", "ireachta", "reading", "traceroute", "results", "seirbh", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12483}, - {"id":"nodes","title":"Nodes","section":"user","locale":"ga-rIE","resourcePath":"docs/ga-rIE/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14471}, + {"id":"nodes","title":"Nodes","section":"user","locale":"ga-rIE","resourcePath":"docs/ga-rIE/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14793}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"ga-rIE","resourcePath":"docs/ga-rIE/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"ga-rIE","resourcePath":"docs/ga-rIE/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32325}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"ga-rIE","resourcePath":"docs/ga-rIE/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "device", "config", "lora", "modem", "presets", "display", "position", "power", "network", "bluetooth", "security", "related", "topics"],"aliases":["settings", "radio-config", "user-config", "lora"],"charCount":41241}, @@ -315,7 +315,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"gl-rES","resourcePath":"docs/gl-rES/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22697}, {"id":"mqtt","title":"MQTT","section":"user","locale":"gl-rES","resourcePath":"docs/gl-rES/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"gl-rES","resourcePath":"docs/gl-rES/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "signal", "reference", "power", "traza", "ruta", "reading", "traceroute", "results", "position", "log", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12410}, - {"id":"nodes","title":"Nodes","section":"user","locale":"gl-rES","resourcePath":"docs/gl-rES/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14454}, + {"id":"nodes","title":"Nodes","section":"user","locale":"gl-rES","resourcePath":"docs/gl-rES/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14776}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"gl-rES","resourcePath":"docs/gl-rES/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"gl-rES","resourcePath":"docs/gl-rES/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32350}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"gl-rES","resourcePath":"docs/gl-rES/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "device", "config", "lora", "modem", "presets", "display", "position", "power", "network", "bluetooth", "security", "related", "topics"],"aliases":["settings", "radio-config", "user-config", "lora"],"charCount":41241}, @@ -336,7 +336,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"hr-rHR","resourcePath":"docs/hr-rHR/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22697}, {"id":"mqtt","title":"MQTT","section":"user","locale":"hr-rHR","resourcePath":"docs/hr-rHR/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"hr-rHR","resourcePath":"docs/hr-rHR/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "signal", "reference", "power", "traceroute", "reading", "results", "position", "log", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12410}, - {"id":"nodes","title":"Nodes","section":"user","locale":"hr-rHR","resourcePath":"docs/hr-rHR/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14452}, + {"id":"nodes","title":"Nodes","section":"user","locale":"hr-rHR","resourcePath":"docs/hr-rHR/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14774}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"hr-rHR","resourcePath":"docs/hr-rHR/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"hr-rHR","resourcePath":"docs/hr-rHR/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32381}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"hr-rHR","resourcePath":"docs/hr-rHR/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "device", "config", "lora", "modem", "presets", "display", "position", "power", "network", "postavke", "bluetootha", "security", "related", "topics"],"aliases":["settings", "radio-config", "user-config", "lora"],"charCount":41244}, @@ -357,7 +357,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"ht-rHT","resourcePath":"docs/ht-rHT/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22697}, {"id":"mqtt","title":"MQTT","section":"user","locale":"ht-rHT","resourcePath":"docs/ht-rHT/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"ht-rHT","resourcePath":"docs/ht-rHT/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "kalite", "siynal", "signal", "reference", "power", "traceroute", "reading", "results", "jounal", "pozisyon", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12412}, - {"id":"nodes","title":"Nodes","section":"user","locale":"ht-rHT","resourcePath":"docs/ht-rHT/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14480}, + {"id":"nodes","title":"Nodes","section":"user","locale":"ht-rHT","resourcePath":"docs/ht-rHT/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14802}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"ht-rHT","resourcePath":"docs/ht-rHT/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"ht-rHT","resourcePath":"docs/ht-rHT/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32301}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"ht-rHT","resourcePath":"docs/ht-rHT/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "device", "config", "lora", "modem", "presets", "display", "position", "power", "network", "bluetooth", "security", "related", "topics"],"aliases":["settings", "radio-config", "user-config", "lora"],"charCount":41241}, @@ -378,7 +378,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"hu-rHU","resourcePath":"docs/hu-rHU/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "csatorn", "default", "channel", "csatorna", "biztons", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22700}, {"id":"mqtt","title":"MQTT","section":"user","locale":"hu-rHU","resourcePath":"docs/hu-rHU/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"hu-rHU","resourcePath":"docs/hu-rHU/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "eszk", "zmetrik", "rnyezeti", "metrik", "air", "quality", "jelmin", "signal", "reference", "pell", "traceroute", "reading", "results", "poz", "napl", "szomsz", "inform", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12447}, - {"id":"nodes","title":"Csomópontok","section":"user","locale":"hu-rHU","resourcePath":"docs/hu-rHU/user/nodes.html","navOrder":4,"keywords":["csom", "pontok", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14553}, + {"id":"nodes","title":"Csomópontok","section":"user","locale":"hu-rHU","resourcePath":"docs/hu-rHU/user/nodes.html","navOrder":4,"keywords":["csom", "pontok", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14875}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"hu-rHU","resourcePath":"docs/hu-rHU/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8566}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"hu-rHU","resourcePath":"docs/hu-rHU/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":33222}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"hu-rHU","resourcePath":"docs/hu-rHU/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "eszk", "zbe", "sok", "lora", "modem", "presets", "kijelz", "poz", "energia", "zati", "bluetooth", "biztons", "related", "topics"],"aliases":["beállítások", "radio-config", "user-config", "lora"],"charCount":41888}, @@ -399,7 +399,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"is-rIS","resourcePath":"docs/is-rIS/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22697}, {"id":"mqtt","title":"MQTT","section":"user","locale":"is-rIS","resourcePath":"docs/is-rIS/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"is-rIS","resourcePath":"docs/is-rIS/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "signal", "reference", "power", "ferilk", "nnun", "reading", "traceroute", "results", "position", "log", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12411}, - {"id":"nodes","title":"Nodes","section":"user","locale":"is-rIS","resourcePath":"docs/is-rIS/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14452}, + {"id":"nodes","title":"Nodes","section":"user","locale":"is-rIS","resourcePath":"docs/is-rIS/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14774}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"is-rIS","resourcePath":"docs/is-rIS/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"is-rIS","resourcePath":"docs/is-rIS/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32279}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"is-rIS","resourcePath":"docs/is-rIS/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "device", "config", "lora", "modem", "presets", "display", "position", "power", "network", "bluetooth", "security", "related", "topics"],"aliases":["settings", "radio-config", "user-config", "lora"],"charCount":41241}, @@ -420,7 +420,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"it-rIT","resourcePath":"docs/it-rIT/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "canali", "default", "channel", "sicurezza", "del", "canale", "adding", "messaggi", "diretti", "sending", "direct", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22955}, {"id":"mqtt","title":"MQTT","section":"user","locale":"it-rIT","resourcePath":"docs/it-rIT/user/mqtt.html","navOrder":11,"keywords":["mqtt", "panoramica", "come", "funziona", "configurazione", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "buone", "pratiche", "risoluzione", "problemi", "not"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12381}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"it-rIT","resourcePath":"docs/it-rIT/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "metriche", "dispositivo", "ambientali", "air", "quality", "qualit", "segnale", "signal", "reference", "alimentazione", "traceroute", "reading", "results", "registro", "posizione", "informazioni", "vicinato", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12494}, - {"id":"nodes","title":"Nodi","section":"user","locale":"it-rIT","resourcePath":"docs/it-rIT/user/nodes.html","navOrder":4,"keywords":["nodi", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14514}, + {"id":"nodes","title":"Nodi","section":"user","locale":"it-rIT","resourcePath":"docs/it-rIT/user/nodes.html","navOrder":4,"keywords":["nodi", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14836}, {"id":"onboarding","title":"Come iniziare","section":"user","locale":"it-rIT","resourcePath":"docs/it-rIT/user/onboarding.html","navOrder":1,"keywords":["come", "iniziare", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8547}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"it-rIT","resourcePath":"docs/it-rIT/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "configurazione", "modulo", "mqtt", "module", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon"],"aliases":["modules", "module-config", "administration"],"charCount":33207}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"it-rIT","resourcePath":"docs/it-rIT/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "impostazioni", "utente", "profile", "applying", "changes", "configurazione", "dispositivo", "lora", "modem", "presets", "schermo", "posizione", "alimentazione", "della", "rete", "bluetooth", "sicurezza", "related", "topics"],"aliases":["impostazioni", "radio-config", "user-config", "lora"],"charCount":42166}, @@ -441,7 +441,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"iw-rIL","resourcePath":"docs/iw-rIL/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22697}, {"id":"mqtt","title":"MQTT","section":"user","locale":"iw-rIL","resourcePath":"docs/iw-rIL/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"iw-rIL","resourcePath":"docs/iw-rIL/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "signal", "reference", "power", "reading", "traceroute", "results", "position", "log", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12411}, - {"id":"nodes","title":"Nodes","section":"user","locale":"iw-rIL","resourcePath":"docs/iw-rIL/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14452}, + {"id":"nodes","title":"Nodes","section":"user","locale":"iw-rIL","resourcePath":"docs/iw-rIL/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14774}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"iw-rIL","resourcePath":"docs/iw-rIL/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"iw-rIL","resourcePath":"docs/iw-rIL/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32288}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"iw-rIL","resourcePath":"docs/iw-rIL/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "device", "config", "lora", "modem", "presets", "display", "position", "power", "network", "bluetooth", "security", "related", "topics"],"aliases":["הגדרות", "radio-config", "user-config", "lora"],"charCount":41239}, @@ -462,7 +462,7 @@ {"id":"messages-and-channels","title":"メッセージとチャンネル","section":"user","locale":"ja-rJP","resourcePath":"docs/ja-rJP/user/messages-and-channels.html","navOrder":3,"keywords":["managing", "the", "conversation", "list", "bubbles", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":20550}, {"id":"mqtt","title":"MQTT","section":"user","locale":"ja-rJP","resourcePath":"docs/ja-rJP/user/mqtt.html","navOrder":11,"keywords":["mqtt", "connection", "status", "and", "test", "meshtastic"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":11198}, {"id":"node-metrics","title":"ノードメトリクス","section":"user","locale":"ja-rJP","resourcePath":"docs/ja-rJP/user/node-metrics.html","navOrder":5,"keywords":["pax"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":9858}, - {"id":"nodes","title":"ノード","section":"user","locale":"ja-rJP","resourcePath":"docs/ja-rJP/user/nodes.html","navOrder":4,"keywords":["choosing", "what", "the", "list", "shows", "sharing", "contact", "when", "nodes", "appear"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":11714}, + {"id":"nodes","title":"ノード","section":"user","locale":"ja-rJP","resourcePath":"docs/ja-rJP/user/nodes.html","navOrder":4,"keywords":["choosing", "what", "the", "list", "shows", "sharing", "contact", "when", "nodes", "appear"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":12401}, {"id":"onboarding","title":"はじめに","section":"user","locale":"ja-rJP","resourcePath":"docs/ja-rJP/user/onboarding.html","navOrder":1,"keywords":["bluetooth", "reviewing", "permissions", "later"],"aliases":["初回起動", "セットアップ", "概要"],"charCount":7547}, {"id":"settings-module-admin","title":"設定:モジュールと管理","section":"user","locale":"ja-rJP","resourcePath":"docs/ja-rJP/user/settings-module-admin.html","navOrder":8,"keywords":["mqtt", "store", "forward", "paxcounter", "status", "message", "module", "mesh", "beacon", "tak", "device", "actions", "app", "settings"],"aliases":["modules", "module-config", "administration"],"charCount":26660}, {"id":"settings-radio-user","title":"設定:無線機とユーザー","section":"user","locale":"ja-rJP","resourcePath":"docs/ja-rJP/user/settings-radio-user.html","navOrder":7,"keywords":["how", "these", "screens", "work", "lora", "bluetooth"],"aliases":["設定", "radio-config", "user-config", "lora"],"charCount":39550}, @@ -483,7 +483,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"ko-rKR","resourcePath":"docs/ko-rKR/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22691}, {"id":"mqtt","title":"MQTT","section":"user","locale":"ko-rKR","resourcePath":"docs/ko-rKR/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting", "messages"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12361}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"ko-rKR","resourcePath":"docs/ko-rKR/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "signal", "reference", "power", "reading", "traceroute", "results", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12377}, - {"id":"nodes","title":"노드","section":"user","locale":"ko-rKR","resourcePath":"docs/ko-rKR/user/nodes.html","navOrder":4,"keywords":["node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14443}, + {"id":"nodes","title":"노드","section":"user","locale":"ko-rKR","resourcePath":"docs/ko-rKR/user/nodes.html","navOrder":4,"keywords":["node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14765}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"ko-rKR","resourcePath":"docs/ko-rKR/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"ko-rKR","resourcePath":"docs/ko-rKR/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":31344}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"ko-rKR","resourcePath":"docs/ko-rKR/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "lora", "modem", "presets", "related", "topics"],"aliases":["설정", "radio-config", "user-config", "lora"],"charCount":41057}, @@ -504,7 +504,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"lt-rLT","resourcePath":"docs/lt-rLT/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22697}, {"id":"mqtt","title":"MQTT","section":"user","locale":"lt-rLT","resourcePath":"docs/lt-rLT/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"lt-rLT","resourcePath":"docs/lt-rLT/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "signalo", "kokyb", "signal", "reference", "power", "inut", "kelias", "reading", "traceroute", "results", "pozicijos", "duomen", "urnalas", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12447}, - {"id":"nodes","title":"Nodes","section":"user","locale":"lt-rLT","resourcePath":"docs/lt-rLT/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14490}, + {"id":"nodes","title":"Nodes","section":"user","locale":"lt-rLT","resourcePath":"docs/lt-rLT/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14812}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"lt-rLT","resourcePath":"docs/lt-rLT/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"lt-rLT","resourcePath":"docs/lt-rLT/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32314}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"lt-rLT","resourcePath":"docs/lt-rLT/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "device", "config", "lora", "modem", "presets", "display", "position", "power", "network", "bluetooth", "security", "related", "topics"],"aliases":["settings", "radio-config", "user-config", "lora"],"charCount":41241}, @@ -525,7 +525,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"nl-rNL","resourcePath":"docs/nl-rNL/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "kanalen", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22696}, {"id":"mqtt","title":"MQTT","section":"user","locale":"nl-rNL","resourcePath":"docs/nl-rNL/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"nl-rNL","resourcePath":"docs/nl-rNL/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "signaalkwaliteit", "signal", "reference", "power", "traceroute", "reading", "results", "positie", "logboek", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12419}, - {"id":"nodes","title":"Nodes","section":"user","locale":"nl-rNL","resourcePath":"docs/nl-rNL/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14455}, + {"id":"nodes","title":"Nodes","section":"user","locale":"nl-rNL","resourcePath":"docs/nl-rNL/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14777}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"nl-rNL","resourcePath":"docs/nl-rNL/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"nl-rNL","resourcePath":"docs/nl-rNL/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32435}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"nl-rNL","resourcePath":"docs/nl-rNL/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "apparaat", "configuratie", "lora", "modem", "presets", "weergave", "positie", "energie", "netwerkconfiguratie", "bluetooth", "beveiligings", "related", "topics"],"aliases":["instellingen", "radio-config", "user-config", "lora"],"charCount":41389}, @@ -546,7 +546,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"no-rNO","resourcePath":"docs/no-rNO/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22697}, {"id":"mqtt","title":"MQTT","section":"user","locale":"no-rNO","resourcePath":"docs/no-rNO/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"no-rNO","resourcePath":"docs/no-rNO/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "signalstyrke", "signal", "reference", "power", "traceroute", "reading", "results", "posisjonslogg", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12433}, - {"id":"nodes","title":"Nodes","section":"user","locale":"no-rNO","resourcePath":"docs/no-rNO/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14451}, + {"id":"nodes","title":"Nodes","section":"user","locale":"no-rNO","resourcePath":"docs/no-rNO/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14773}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"no-rNO","resourcePath":"docs/no-rNO/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"no-rNO","resourcePath":"docs/no-rNO/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32381}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"no-rNO","resourcePath":"docs/no-rNO/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "device", "config", "lora", "modem", "presets", "display", "position", "power", "network", "bluetooth", "security", "related", "topics"],"aliases":["settings", "radio-config", "user-config", "lora"],"charCount":41241}, @@ -567,7 +567,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"pl-rPL","resourcePath":"docs/pl-rPL/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "kana", "default", "channel", "bezpiecze", "stwo", "adding", "bezpo", "rednie", "wiadomo", "sending", "direct", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22708}, {"id":"mqtt","title":"MQTT","section":"user","locale":"pl-rPL","resourcePath":"docs/pl-rPL/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "konfiguracja", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12371}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"pl-rPL","resourcePath":"docs/pl-rPL/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "metryka", "urz", "dzenia", "metryki", "rodowiskowe", "air", "quality", "jako", "sygna", "signal", "reference", "zasilania", "poka", "tras", "reading", "traceroute", "results", "historia", "pozycji", "informacje", "siadze", "statystyki", "hosta", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12599}, - {"id":"nodes","title":"Węzły","section":"user","locale":"pl-rPL","resourcePath":"docs/pl-rPL/user/nodes.html","navOrder":4,"keywords":["node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14534}, + {"id":"nodes","title":"Węzły","section":"user","locale":"pl-rPL","resourcePath":"docs/pl-rPL/user/nodes.html","navOrder":4,"keywords":["node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14856}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"pl-rPL","resourcePath":"docs/pl-rPL/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8596}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"pl-rPL","resourcePath":"docs/pl-rPL/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "konfiguracja", "modu", "mqtt", "module", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon"],"aliases":["modules", "module-config", "administration"],"charCount":32898}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"pl-rPL","resourcePath":"docs/pl-rPL/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "konfiguracja", "urz", "dzenia", "lora", "modem", "presets", "wietlacza", "pozycjonowania", "zarz", "dzania", "energi", "sieci", "bluetooth", "zabezpiecze", "related", "topics"],"aliases":["ustawienia", "radio-config", "user-config", "lora"],"charCount":41857}, @@ -588,7 +588,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"pt-rBR","resourcePath":"docs/pt-rBR/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "canais", "default", "channel", "seguran", "canal", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22697}, {"id":"mqtt","title":"MQTT","section":"user","locale":"pt-rBR","resourcePath":"docs/pt-rBR/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"pt-rBR","resourcePath":"docs/pt-rBR/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "qualidade", "sinal", "signal", "reference", "power", "tra", "rota", "reading", "traceroute", "results", "log", "posi", "informa", "vizinho", "tricas", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12434}, - {"id":"nodes","title":"Nós","section":"user","locale":"pt-rBR","resourcePath":"docs/pt-rBR/user/nodes.html","navOrder":4,"keywords":["node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14498}, + {"id":"nodes","title":"Nós","section":"user","locale":"pt-rBR","resourcePath":"docs/pt-rBR/user/nodes.html","navOrder":4,"keywords":["node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14820}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"pt-rBR","resourcePath":"docs/pt-rBR/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8516}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"pt-rBR","resourcePath":"docs/pt-rBR/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32840}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"pt-rBR","resourcePath":"docs/pt-rBR/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "configura", "dispositivo", "lora", "modem", "presets", "tela", "posi", "energia", "rede", "bluetooth", "seguran", "related", "topics"],"aliases":["configurações", "radio-config", "user-config", "lora"],"charCount":41695}, @@ -609,7 +609,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"pt-rPT","resourcePath":"docs/pt-rPT/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "canal", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22694}, {"id":"mqtt","title":"MQTT","section":"user","locale":"pt-rPT","resourcePath":"docs/pt-rPT/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configura", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12371}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"pt-rPT","resourcePath":"docs/pt-rPT/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "qualidade", "sinal", "signal", "reference", "power", "tra", "rota", "reading", "traceroute", "results", "hist", "rico", "posi", "informa", "vizinhan", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12445}, - {"id":"nodes","title":"Nodes","section":"user","locale":"pt-rPT","resourcePath":"docs/pt-rPT/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14850}, + {"id":"nodes","title":"Nodes","section":"user","locale":"pt-rPT","resourcePath":"docs/pt-rPT/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":15172}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"pt-rPT","resourcePath":"docs/pt-rPT/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"pt-rPT","resourcePath":"docs/pt-rPT/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32871}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"pt-rPT","resourcePath":"docs/pt-rPT/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configura", "dispositivo", "lora", "modem", "presets", "ecr", "posi", "energia", "rede", "bluetooth", "seguran", "related", "topics"],"aliases":["definições", "radio-config", "user-config", "lora"],"charCount":41774}, @@ -630,7 +630,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"ro-rRO","resourcePath":"docs/ro-rRO/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "canale", "default", "channel", "securitate", "canal", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22695}, {"id":"mqtt","title":"MQTT","section":"user","locale":"ro-rRO","resourcePath":"docs/ro-rRO/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"ro-rRO","resourcePath":"docs/ro-rRO/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "valori", "dispozitiv", "indicatori", "mediu", "air", "quality", "calitatea", "semnalului", "signal", "reference", "putere", "trasare", "traseu", "reading", "traceroute", "results", "position", "log", "informa", "vecin", "gazd", "sur", "tori", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12509}, - {"id":"nodes","title":"Noduri","section":"user","locale":"ro-rRO","resourcePath":"docs/ro-rRO/user/nodes.html","navOrder":4,"keywords":["noduri", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14494}, + {"id":"nodes","title":"Noduri","section":"user","locale":"ro-rRO","resourcePath":"docs/ro-rRO/user/nodes.html","navOrder":4,"keywords":["noduri", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14816}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"ro-rRO","resourcePath":"docs/ro-rRO/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8481}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"ro-rRO","resourcePath":"docs/ro-rRO/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32974}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"ro-rRO","resourcePath":"docs/ro-rRO/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "device", "config", "lora", "modem", "presets", "display", "position", "configurare", "putere", "network", "bluetooth", "security", "related", "topics"],"aliases":["setari", "radio-config", "user-config", "lora"],"charCount":41625}, @@ -651,7 +651,7 @@ {"id":"messages-and-channels","title":"Сообщения и каналы","section":"user","locale":"ru-rRU","resourcePath":"docs/ru-rRU/user/messages-and-channels.html","navOrder":3,"keywords":["managing", "the", "conversation", "list", "bubbles", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":23855}, {"id":"mqtt","title":"MQTT","section":"user","locale":"ru-rRU","resourcePath":"docs/ru-rRU/user/mqtt.html","navOrder":11,"keywords":["mqtt", "connection", "status", "and", "test", "meshtastic", "uplink", "downlink"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12856}, {"id":"node-metrics","title":"Метрики ноды","section":"user","locale":"ru-rRU","resourcePath":"docs/ru-rRU/user/node-metrics.html","navOrder":5,"keywords":[],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":13524}, - {"id":"nodes","title":"Ноды","section":"user","locale":"ru-rRU","resourcePath":"docs/ru-rRU/user/nodes.html","navOrder":4,"keywords":["choosing", "what", "the", "list", "shows", "sharing", "contact", "when", "nodes", "appear"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":15345}, + {"id":"nodes","title":"Ноды","section":"user","locale":"ru-rRU","resourcePath":"docs/ru-rRU/user/nodes.html","navOrder":4,"keywords":["choosing", "what", "the", "list", "shows", "sharing", "contact", "when", "nodes", "appear"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":15599}, {"id":"onboarding","title":"Начало работы","section":"user","locale":"ru-rRU","resourcePath":"docs/ru-rRU/user/onboarding.html","navOrder":1,"keywords":["bluetooth", "reviewing", "permissions", "later"],"aliases":["first-launch", "setup", "intro"],"charCount":8762}, {"id":"settings-module-admin","title":"Настройки — Модули и администрирование","section":"user","locale":"ru-rRU","resourcePath":"docs/ru-rRU/user/settings-module-admin.html","navOrder":8,"keywords":["mqtt", "store", "forward", "paxcounter", "status", "message", "module", "mesh", "beacon", "tak", "device", "actions", "app", "settings"],"aliases":["modules", "module-config", "administration"],"charCount":34423}, {"id":"settings-radio-user","title":"Настройки - Радио и пользователь","section":"user","locale":"ru-rRU","resourcePath":"docs/ru-rRU/user/settings-radio-user.html","navOrder":7,"keywords":["how", "these", "screens", "work", "lora", "bluetooth"],"aliases":["настройки", "radio-config", "user-config", "lora"],"charCount":42861}, @@ -672,7 +672,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"sk-rSK","resourcePath":"docs/sk-rSK/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "kan", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22695}, {"id":"mqtt","title":"MQTT","section":"user","locale":"sk-rSK","resourcePath":"docs/sk-rSK/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"sk-rSK","resourcePath":"docs/sk-rSK/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "kvalita", "sign", "signal", "reference", "power", "trasovanie", "reading", "traceroute", "results", "log", "poz", "cie", "inform", "cia", "susedoch", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12444}, - {"id":"nodes","title":"Nodes","section":"user","locale":"sk-rSK","resourcePath":"docs/sk-rSK/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14537}, + {"id":"nodes","title":"Nodes","section":"user","locale":"sk-rSK","resourcePath":"docs/sk-rSK/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14859}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"sk-rSK","resourcePath":"docs/sk-rSK/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"sk-rSK","resourcePath":"docs/sk-rSK/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32471}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"sk-rSK","resourcePath":"docs/sk-rSK/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "konfigur", "cia", "zariadenia", "lora", "modem", "presets", "displeju", "position", "config", "power", "siete", "bluetooth", "security", "related", "topics"],"aliases":["nastavenia", "radio-config", "user-config", "lora"],"charCount":41296}, @@ -693,7 +693,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"sl-rSI","resourcePath":"docs/sl-rSI/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22697}, {"id":"mqtt","title":"MQTT","section":"user","locale":"sl-rSI","resourcePath":"docs/sl-rSI/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"sl-rSI","resourcePath":"docs/sl-rSI/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "kakovost", "signala", "signal", "reference", "power", "pot", "reading", "traceroute", "results", "dnevnik", "lokacije", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12421}, - {"id":"nodes","title":"Nodes","section":"user","locale":"sl-rSI","resourcePath":"docs/sl-rSI/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14468}, + {"id":"nodes","title":"Nodes","section":"user","locale":"sl-rSI","resourcePath":"docs/sl-rSI/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14790}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"sl-rSI","resourcePath":"docs/sl-rSI/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"sl-rSI","resourcePath":"docs/sl-rSI/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32406}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"sl-rSI","resourcePath":"docs/sl-rSI/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "device", "config", "lora", "modem", "presets", "display", "position", "power", "network", "bluetooth", "security", "related", "topics"],"aliases":["settings", "radio-config", "user-config", "lora"],"charCount":41241}, @@ -714,7 +714,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"sq-rAL","resourcePath":"docs/sq-rAL/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22697}, {"id":"mqtt","title":"MQTT","section":"user","locale":"sq-rAL","resourcePath":"docs/sq-rAL/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"sq-rAL","resourcePath":"docs/sq-rAL/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "cil", "sia", "sinjalit", "signal", "reference", "power", "traceroute", "reading", "results", "regjistri", "pozit", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12421}, - {"id":"nodes","title":"Nodes","section":"user","locale":"sq-rAL","resourcePath":"docs/sq-rAL/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14491}, + {"id":"nodes","title":"Nodes","section":"user","locale":"sq-rAL","resourcePath":"docs/sq-rAL/user/nodes.html","navOrder":4,"keywords":["nodes", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14813}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"sq-rAL","resourcePath":"docs/sq-rAL/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"sq-rAL","resourcePath":"docs/sq-rAL/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32307}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"sq-rAL","resourcePath":"docs/sq-rAL/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "device", "config", "lora", "modem", "presets", "display", "position", "power", "network", "bluetooth", "security", "related", "topics"],"aliases":["settings", "radio-config", "user-config", "lora"],"charCount":41241}, @@ -735,7 +735,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"srp","resourcePath":"docs/srp/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "security", "adding", "sending", "direct", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22695}, {"id":"mqtt","title":"MQTT","section":"user","locale":"srp","resourcePath":"docs/srp/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12372}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"srp","resourcePath":"docs/srp/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "air", "quality", "signal", "reference", "reading", "traceroute", "results", "neighbor", "info", "host", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12437}, - {"id":"nodes","title":"Чворови","section":"user","locale":"srp","resourcePath":"docs/srp/user/nodes.html","navOrder":4,"keywords":["node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14499}, + {"id":"nodes","title":"Чворови","section":"user","locale":"srp","resourcePath":"docs/srp/user/nodes.html","navOrder":4,"keywords":["node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14821}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"srp","resourcePath":"docs/srp/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"srp","resourcePath":"docs/srp/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "mqtt", "module", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak", "device"],"aliases":["modules", "module-config", "administration"],"charCount":32422}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"srp","resourcePath":"docs/srp/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "lora", "modem", "presets", "related", "topics"],"aliases":["подешавања", "radio-config", "user-config", "lora"],"charCount":41714}, @@ -756,7 +756,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"sv-rSE","resourcePath":"docs/sv-rSE/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "kanaler", "default", "channel", "kanals", "kerhet", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22693}, {"id":"mqtt","title":"MQTT","section":"user","locale":"sv-rSE","resourcePath":"docs/sv-rSE/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "konfiguration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "fels", "kning", "not"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12367}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"sv-rSE","resourcePath":"docs/sv-rSE/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "enhetens", "rden", "milj", "air", "quality", "signalkvalit", "signal", "reference", "str", "mdata", "traceroute", "rutt", "reading", "results", "position", "loggbok", "granninformation", "beg", "rdens", "pax", "nyckeltal", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12434}, - {"id":"nodes","title":"Noder","section":"user","locale":"sv-rSE","resourcePath":"docs/sv-rSE/user/nodes.html","navOrder":4,"keywords":["noder", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14453}, + {"id":"nodes","title":"Noder","section":"user","locale":"sv-rSE","resourcePath":"docs/sv-rSE/user/nodes.html","navOrder":4,"keywords":["noder", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14775}, {"id":"onboarding","title":"Kom igång","section":"user","locale":"sv-rSE","resourcePath":"docs/sv-rSE/user/onboarding.html","navOrder":1,"keywords":["kom", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8459}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"sv-rSE","resourcePath":"docs/sv-rSE/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":33111}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"sv-rSE","resourcePath":"docs/sv-rSE/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "anv", "ndarinst", "llningar", "profile", "applying", "changes", "konfiguration", "enhetskonfiguration", "lora", "config", "modem", "presets", "display", "position", "str", "minst", "network", "bluetooth", "inst", "security", "related", "topics"],"aliases":["inställningar", "radio-config", "user-config", "lora"],"charCount":41630}, @@ -777,7 +777,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"tr-rTR","resourcePath":"docs/tr-rTR/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "kanallar", "default", "channel", "security", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22697}, {"id":"mqtt","title":"MQTT","section":"user","locale":"tr-rTR","resourcePath":"docs/tr-rTR/user/mqtt.html","navOrder":11,"keywords":["mqtt", "genel", "bak", "how", "works", "yap", "land", "rma", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12374}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"tr-rTR","resourcePath":"docs/tr-rTR/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "device", "environment", "air", "quality", "sinyal", "kalitesi", "signal", "reference", "power", "yol", "izle", "reading", "traceroute", "results", "konum", "kay", "tlar", "kom", "bilgisi", "sunucu", "mleri", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12434}, - {"id":"nodes","title":"Nodelar","section":"user","locale":"tr-rTR","resourcePath":"docs/tr-rTR/user/nodes.html","navOrder":4,"keywords":["nodelar", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14456}, + {"id":"nodes","title":"Nodelar","section":"user","locale":"tr-rTR","resourcePath":"docs/tr-rTR/user/nodes.html","navOrder":4,"keywords":["nodelar", "node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14778}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"tr-rTR","resourcePath":"docs/tr-rTR/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8461}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"tr-rTR","resourcePath":"docs/tr-rTR/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":32396}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"tr-rTR","resourcePath":"docs/tr-rTR/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "yap", "land", "rma", "cihaz", "ayar", "lora", "modem", "presets", "akran", "konum", "bluetooth", "venlik", "related", "topics"],"aliases":["ayarlar", "radio-config", "user-config", "lora"],"charCount":41490}, @@ -798,7 +798,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"uk-rUA","resourcePath":"docs/uk-rUA/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "adding", "direct", "sending", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest", "actions"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22693}, {"id":"mqtt","title":"MQTT","section":"user","locale":"uk-rUA","resourcePath":"docs/uk-rUA/user/mqtt.html","navOrder":11,"keywords":["mqtt", "overview", "how", "works", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "troubleshooting", "not", "connecting", "messages"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12371}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"uk-rUA","resourcePath":"docs/uk-rUA/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "air", "quality", "signal", "reference", "reading", "traceroute", "results", "position", "log", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12539}, - {"id":"nodes","title":"Вузли","section":"user","locale":"uk-rUA","resourcePath":"docs/uk-rUA/user/nodes.html","navOrder":4,"keywords":["node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14503}, + {"id":"nodes","title":"Вузли","section":"user","locale":"uk-rUA","resourcePath":"docs/uk-rUA/user/nodes.html","navOrder":4,"keywords":["node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14825}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"uk-rUA","resourcePath":"docs/uk-rUA/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8506}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"uk-rUA","resourcePath":"docs/uk-rUA/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "module", "configuration", "mqtt", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak"],"aliases":["modules", "module-config", "administration"],"charCount":33010}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"uk-rUA","resourcePath":"docs/uk-rUA/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "lora", "modem", "presets", "position", "config", "bluetooth", "related", "topics"],"aliases":["налаштування", "radio-config", "user-config", "lora"],"charCount":42190}, @@ -819,7 +819,7 @@ {"id":"messages-and-channels","title":"Messages & Channels","section":"user","locale":"zh-rCN","resourcePath":"docs/zh-rCN/user/messages-and-channels.html","navOrder":3,"keywords":["messages", "channels", "default", "channel", "adding", "sending", "direct", "message", "managing", "the", "conversation", "list", "bubbles", "states", "delivery", "errors", "features", "quick", "chat", "searching", "text", "formatting", "mentions", "reactions", "replying", "day", "separators", "jump", "latest", "actions"],"aliases":["channels", "direct-messages", "messaging", "conversations"],"charCount":22530}, {"id":"mqtt","title":"MQTT","section":"user","locale":"zh-rCN","resourcePath":"docs/zh-rCN/user/mqtt.html","navOrder":11,"keywords":["mqtt", "how", "works", "configuration", "enabling", "connection", "status", "and", "test", "proxy", "this", "phone", "default", "meshtastic", "broker", "private", "map", "reporting", "uplink", "downlink", "message", "formats", "encryption", "privacy", "best", "practices", "not", "connecting", "messages", "bridging"],"aliases":["mqtt", "internet-bridge", "broker"],"charCount":12355}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"zh-rCN","resourcePath":"docs/zh-rCN/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "air", "quality", "signal", "reference", "reading", "traceroute", "results", "pax", "related", "topics"],"aliases":["metrics", "telemetry", "device-metrics", "signal"],"charCount":12264}, - {"id":"nodes","title":"节点","section":"user","locale":"zh-rCN","resourcePath":"docs/zh-rCN/user/nodes.html","navOrder":4,"keywords":["node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14442}, + {"id":"nodes","title":"节点","section":"user","locale":"zh-rCN","resourcePath":"docs/zh-rCN/user/nodes.html","navOrder":4,"keywords":["node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14764}, {"id":"onboarding","title":"Getting Started","section":"user","locale":"zh-rCN","resourcePath":"docs/zh-rCN/user/onboarding.html","navOrder":1,"keywords":["getting", "started", "first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup", "related", "topics"],"aliases":["first-launch", "setup", "intro"],"charCount":8109}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"zh-rCN","resourcePath":"docs/zh-rCN/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "mqtt", "module", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak", "device"],"aliases":["modules", "module-config", "administration"],"charCount":30186}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"zh-rCN","resourcePath":"docs/zh-rCN/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "configuration", "lora", "modem", "presets", "related", "topics"],"aliases":["设置", "radio-config", "user-config", "lora"],"charCount":40114}, @@ -840,7 +840,7 @@ {"id":"messages-and-channels","title":"訊息與頻道","section":"user","locale":"zh-rTW","resourcePath":"docs/zh-rTW/user/messages-and-channels.html","navOrder":3,"keywords":["managing", "the", "conversation", "list", "bubbles", "searching", "messages", "text", "formatting", "mentions", "replying", "day", "separators", "jump", "latest"],"aliases":["頻道", "direct-messages", "messaging", "conversations"],"charCount":21382}, {"id":"mqtt","title":"MQTT","section":"user","locale":"zh-rTW","resourcePath":"docs/zh-rTW/user/mqtt.html","navOrder":11,"keywords":["mqtt", "connection", "status", "and", "test", "proxy", "this", "phone", "meshtastic"],"aliases":["MQTT", "internet-bridge", "broker"],"charCount":10623}, {"id":"node-metrics","title":"Node Metrics","section":"user","locale":"zh-rTW","resourcePath":"docs/zh-rTW/user/node-metrics.html","navOrder":5,"keywords":["node", "metrics", "viewing", "air", "quality", "signal", "reference", "reading", "traceroute", "results", "pax"],"aliases":["metrics", "遙測", "device-metrics", "signal"],"charCount":12332}, - {"id":"nodes","title":"節點","section":"user","locale":"zh-rTW","resourcePath":"docs/zh-rTW/user/nodes.html","navOrder":4,"keywords":["node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14442}, + {"id":"nodes","title":"節點","section":"user","locale":"zh-rTW","resourcePath":"docs/zh-rTW/user/nodes.html","navOrder":4,"keywords":["node", "list", "choosing", "what", "the", "shows", "status", "indicators", "roles", "role", "encryption", "quick", "actions", "sharing", "contact", "filtering", "sorting", "text", "search", "filter", "toggles", "sort", "options", "nodes", "per", "hop", "detail", "device", "links", "want"],"aliases":["node-list", "mesh-nodes", "peers", "hop-histogram"],"charCount":14764}, {"id":"onboarding","title":"新手入門","section":"user","locale":"zh-rTW","resourcePath":"docs/zh-rTW/user/onboarding.html","navOrder":999,"keywords":["first", "launch", "welcome", "screen", "permissions", "bluetooth", "permission", "location", "notifications", "critical", "alerts", "reviewing", "later", "after", "setup"],"aliases":["first-launch", "setup", "intro"],"charCount":15168}, {"id":"settings-module-admin","title":"Settings — Modules & Admin","section":"user","locale":"zh-rTW","resourcePath":"docs/zh-rTW/user/settings-module-admin.html","navOrder":8,"keywords":["settings", "modules", "admin", "mqtt", "module", "serial", "external", "notification", "store", "forward", "range", "test", "telemetry", "canned", "message", "audio", "remote", "hardware", "neighbor", "info", "ambient", "lighting", "detection", "sensor", "paxcounter", "status", "mesh", "beacon", "tak", "device"],"aliases":["modules", "模組設定", "administration"],"charCount":30526}, {"id":"settings-radio-user","title":"Settings — Radio & User","section":"user","locale":"zh-rTW","resourcePath":"docs/zh-rTW/user/settings-radio-user.html","navOrder":7,"keywords":["settings", "radio", "user", "how", "these", "screens", "work", "profile", "applying", "changes", "lora", "modem", "presets", "related", "topics"],"aliases":["設定", "radio-config", "user-config", "LoRa"],"charCount":40402}, diff --git a/main/is-rIS/user/nodes.html b/main/is-rIS/user/nodes.html index 6e03bb9612..fcbfc8947b 100644 --- a/main/is-rIS/user/nodes.html +++ b/main/is-rIS/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Íslenska
Meshtastic Docs ↗

🌐 Íslenska — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Lýsing
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Remove

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Lýsing
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Lýsing
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Last heard Last heard
Distance Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Íslenska
Meshtastic Docs ↗

🌐 Íslenska — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Lýsing
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Remove

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Lýsing
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Lýsing
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Last heard Last heard
Distance Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/it-rIT/user/nodes.html b/main/it-rIT/user/nodes.html index 43840c2e24..de20cc7ca5 100644 --- a/main/it-rIT/user/nodes.html +++ b/main/it-rIT/user/nodes.html @@ -1 +1 @@ - Nodi | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Italiano
Meshtastic Docs ↗

🌐 Italiano — Community translation View in English

Nodi

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Ruolo Descrizione
Client Standard end-user node
Base Client Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Nascosto Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensore Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Oggetti Smarriti Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Elimina

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtro Descrizione
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Descrizione
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Livello batteria Battery
Hop count Hops
Ricevuto più di recente Last heard
Distanza Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodi | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Italiano
Meshtastic Docs ↗

🌐 Italiano — Community translation View in English

Nodi

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Ruolo Descrizione
Client Standard end-user node
Base Client Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Nascosto Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensore Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Oggetti Smarriti Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Elimina

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtro Descrizione
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Descrizione
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Livello batteria Battery
Hop count Hops
Ricevuto più di recente Last heard
Distanza Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/iw-rIL/user/nodes.html b/main/iw-rIL/user/nodes.html index 5a802e20ea..8a385a0545 100644 --- a/main/iw-rIL/user/nodes.html +++ b/main/iw-rIL/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 עברית
Meshtastic Docs ↗

🌐 עברית — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role תיאור
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Remove

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

פילטר תיאור
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort תיאור
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Last heard Last heard
מרחק Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 עברית
Meshtastic Docs ↗

🌐 עברית — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role תיאור
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Remove

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

פילטר תיאור
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort תיאור
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Last heard Last heard
מרחק Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/ja-rJP/user/nodes.html b/main/ja-rJP/user/nodes.html index 75bf010294..c8b50a0b79 100644 --- a/main/ja-rJP/user/nodes.html +++ b/main/ja-rJP/user/nodes.html @@ -1 +1 @@ - ノード | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 日本語
Meshtastic Docs ↗

🌐 日本語 — Community translation View in English

ノード

The Nodes screen lists every node visible on your mesh.

ノードリスト

ノードリストには、無線機が受信したすべてのノードが、次の情報とともに表示されます:

  • ノード名: ユーザーが設定した正式名称
  • 短縮名: 4 文字の識別子
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • 最後の通信: 最後に通信してからの経過時間
  • 距離: 推定距離(位置情報が共有されている場合)
  • バッテリー: リモートノードのバッテリー残量(テレメトリが有効な場合)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

ノードのステータス表示

指標 意味
Green last-heard time 過去 2 時間以内に受信したノード
Plain last-heard time 2 時間を超えて受信していないノード
⭐ お気に入り Node you marked as a favorite.

There is no separate “away” tier.

ノードの役割

ノードには、メッシュ上での動作に影響するさまざまな役割を設定できます:

役割 説明
クライアント Standard end-user node
クライアント・ベース お気に入りノードの通信をルーター・レイトの優先度で扱い、それ以外の通信はクライアントとして扱います
クライアント・ミュート 受信しますが、再送信はしません
クライアント・非表示 クライアント・ミュートと同様で、さらにノードリストから隠れます
ルーター メッセージの転送を優先し、中継のために起動し続けます
ルーター・レイト 1 回だけ再送信するインフラノードですが、他のすべてのモードの後にのみ行います(補助的なカバレッジを提供します)
ルーター・クライアント ⚠️ 非推奨(ファームウェア 2.3.15 で削除)。選択できなくなりました。代わりにルーターまたはクライアントを使用してください
リピーター ⚠️ 非推奨(ファームウェア 2.7.11 で削除)。選択できなくなりました。代わりにルーターを使用してください
トラッカー 一定間隔での位置報告に最適化されています
センサー テレメトリ報告に最適化されています
TAK TAK システムと相互運用します(CoT を送受信)
TAK Tracker TAK の位置報告のみ
紛失モード Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

役割を選ぶ

ほとんどのユーザーは、デフォルトのクライアント役割のままにしてください。 次のような場合は、別の役割を検討してください:

  • ルーター: 電源が安定した、固定された高所(屋上、丘の上など)にノードを設置している場合。 ルーターは他のノードのメッセージを中継するために常に起動し続け、メッシュのカバレッジ拡大に不可欠です。 Don’t use Router on battery-powered handheld radios.
  • ルーター・レイト: パケットを常に 1 回だけ再送信するインフラノードですが、他のすべてのルーティングモードの番が終わった後にのみ行います。 主要なルーターと競合することなく、ローカルのクラスターに補助的なカバレッジを提供します。
  • クライアント・ベース: お気に入りノードとの間の通信をルーター・レイトの優先度で扱い(それらのメッセージが追加の中継カバレッジを得られるようにします)、それ以外はすべて通常のクライアントとして処理します。
  • クライアント・ミュート: メッシュの通信を受信したいが、中継には貢献したくない場合。 Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). 発信の合間はスリープしてバッテリーを節約します。
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). 電力プロファイルはトラッカーと同様です。
  • TAK/TAK Tracker: ATAK/WinTAK システムと相互運用する場合にのみ必要です。 詳しくは TAK 連携 を参照してください。

💡 ヒント: メッシュは、ほとんどのノードがクライアントまたはルーターのときに最も良く機能します。 Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. 目安としては、地域内のクライアント 5〜10 台につきルーター 1 台です。

暗号化の表示

ノードは、名前の横に暗号化ステータスのアイコンを表示します:

アイコン 意味
🔒 ロック 通信は PKI(公開鍵基盤)を使用します。本人性が検証された、エンドツーエンドの暗号化です
🔓 ロック解除 通信は共有チャンネルの PSK を使用します。暗号化されていますが、本人性は個別には検証されていません
⚠️ 不一致 公開鍵の不一致。前回確認時からノードの鍵が変わっています(信頼する前に調べてください)

💡 ヒント: PKI 暗号化(ファームウェア 2.5 以降)は、各ノードが固有の鍵ペアを持つため、チャンネル PSK より強力なセキュリティを提供します。 鍵の不一致の警告が表示された場合、そのノードはリセットされたか、侵害された可能性があります。

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

クイック操作

ノードリストから、次のことができます:

  • ノードをタップすると詳細ページを表示します
  • Touch & hold for quick actions:
    • お気に入りに追加/解除
    • 通知のミュート/解除
    • ダイレクトメッセージを送信
    • 経路をトレース
    • 無視/無視の解除
    • 削除

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

絞り込みと並べ替え

テキスト検索

検索欄に入力すると、名前または短縮名でノードを絞り込めます。 絞り込みは、入力に応じてリアルタイムで更新されます。

絞り込みトグル

絞り込み 説明
Hide offline nodes 過去 2 時間以内に受信したノードのみを表示します
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
不明なノードを含む Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
インフラを除外 Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
MQTT を除外 MQTT のインターネットブリッジ経由でのみ受信したノードを非表示にします
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

並べ替えオプション

並べ替え 説明
Last heard 最近受信したノードを先頭に表示します
A-Z ノードの正式名称で並べ替えます
距離 近いノードを先頭に表示します(位置情報の共有が必要)
ホップ数 中継ホップ数が少ないノードを先頭に表示します
チャンネル チャンネルインデックスごとにグループ化します
via MQTT MQTT 経由と無線受信でグループ化します
via Favorite (default) Favorited nodes first, then the rest

ホップごとのノード数

ノードリストのアプリバーにあるホップヒストグラムのアイコンをタップすると、各ホップ距離にいくつのノードがあるかを示す棒グラフが開きます(0 = 直接、1 = 中継 1 回、以下同様)。 グラフを最後の通信の期間(すべての期間、1 時間、8 時間、24 時間)で絞り込むと、現在のメッシュの様子と、より長い期間での様子を比較できます。 ローカルメッシュがどれだけ混雑し、どれだけ広がっているかを手早く把握できます。

ノードの詳細

ノードをタップすると、詳しい情報を含む詳細ビューが開きます。 メトリクスとテレメトリの詳細については、ノードメトリクス を参照してください。

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

ノードの詳細セクション

インラインのステータス表示で、主要なメトリクスをひと目で確認できます:

指標 スクリーンショット
信号品質 信号
バッテリー残量 バッテリー
ホップ数 ホップ
最後の通信 最後の通信
距離 距離

デバイスのリンク(「購入はこちら」)

ノードのハードウェアが認識されると、詳細ビューに折りたたみ式の**「購入はこちら」**セクションが表示され、そのデバイスを購入したり詳しく知ったりできる場所(ベンダーの製品ページ、製品バリエーション、AliExpress・Amazon・対応小売店などの地域のマーケットプレイスの掲載)が、あなたの国に合わせて絞り込まれて表示されます。 各リンクは msh.to のリダイレクトサービスを通じて開きます。 一致するリンクがないデバイスでは、このセクションは表示されません。

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

関連トピック


+ ノード | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 日本語
Meshtastic Docs ↗

🌐 日本語 — Community translation View in English

ノード

The Nodes screen lists every node visible on your mesh.

ノードリスト

ノードリストには、無線機が受信したすべてのノードが、次の情報とともに表示されます:

  • ノード名: ユーザーが設定した正式名称
  • 短縮名: 4 文字の識別子
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • 最後の通信: 最後に通信してからの経過時間
  • 距離: 推定距離(位置情報が共有されている場合)
  • バッテリー: リモートノードのバッテリー残量(テレメトリが有効な場合)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

ノードのステータス表示

指標 意味
Green last-heard time 過去 2 時間以内に受信したノード
Plain last-heard time 2 時間を超えて受信していないノード
⭐ お気に入り Node you marked as a favorite.

There is no separate “away” tier.

ノードの役割

ノードには、メッシュ上での動作に影響するさまざまな役割を設定できます:

役割 説明
クライアント Standard end-user node
クライアント・ベース お気に入りノードの通信をルーター・レイトの優先度で扱い、それ以外の通信はクライアントとして扱います
クライアント・ミュート 受信しますが、再送信はしません
クライアント・非表示 クライアント・ミュートと同様で、さらにノードリストから隠れます
ルーター メッセージの転送を優先し、中継のために起動し続けます
ルーター・レイト 1 回だけ再送信するインフラノードですが、他のすべてのモードの後にのみ行います(補助的なカバレッジを提供します)
ルーター・クライアント ⚠️ 非推奨(ファームウェア 2.3.15 で削除)。選択できなくなりました。代わりにルーターまたはクライアントを使用してください
リピーター ⚠️ 非推奨(ファームウェア 2.7.11 で削除)。選択できなくなりました。代わりにルーターを使用してください
トラッカー 一定間隔での位置報告に最適化されています
センサー テレメトリ報告に最適化されています
TAK TAK システムと相互運用します(CoT を送受信)
TAK Tracker TAK の位置報告のみ
紛失モード Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

役割を選ぶ

ほとんどのユーザーは、デフォルトのクライアント役割のままにしてください。 次のような場合は、別の役割を検討してください:

  • ルーター: 電源が安定した、固定された高所(屋上、丘の上など)にノードを設置している場合。 ルーターは他のノードのメッセージを中継するために常に起動し続け、メッシュのカバレッジ拡大に不可欠です。 Don’t use Router on battery-powered handheld radios.
  • ルーター・レイト: パケットを常に 1 回だけ再送信するインフラノードですが、他のすべてのルーティングモードの番が終わった後にのみ行います。 主要なルーターと競合することなく、ローカルのクラスターに補助的なカバレッジを提供します。
  • クライアント・ベース: お気に入りノードとの間の通信をルーター・レイトの優先度で扱い(それらのメッセージが追加の中継カバレッジを得られるようにします)、それ以外はすべて通常のクライアントとして処理します。
  • クライアント・ミュート: メッシュの通信を受信したいが、中継には貢献したくない場合。 Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). 発信の合間はスリープしてバッテリーを節約します。
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). 電力プロファイルはトラッカーと同様です。
  • TAK/TAK Tracker: ATAK/WinTAK システムと相互運用する場合にのみ必要です。 詳しくは TAK 連携 を参照してください。

💡 ヒント: メッシュは、ほとんどのノードがクライアントまたはルーターのときに最も良く機能します。 Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. 目安としては、地域内のクライアント 5〜10 台につきルーター 1 台です。

暗号化の表示

ノードは、名前の横に暗号化ステータスのアイコンを表示します:

アイコン 意味
🔒 ロック 通信は PKI(公開鍵基盤)を使用します。本人性が検証された、エンドツーエンドの暗号化です
🔓 ロック解除 No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ 不一致 公開鍵の不一致。前回確認時からノードの鍵が変わっています(信頼する前に調べてください)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. 鍵の不一致の警告が表示された場合、そのノードはリセットされたか、侵害された可能性があります。

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

クイック操作

ノードリストから、次のことができます:

  • ノードをタップすると詳細ページを表示します
  • Touch & hold for quick actions:
    • お気に入りに追加/解除
    • 通知のミュート/解除
    • ダイレクトメッセージを送信
    • 経路をトレース
    • 無視/無視の解除
    • 削除

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

絞り込みと並べ替え

テキスト検索

検索欄に入力すると、名前または短縮名でノードを絞り込めます。 絞り込みは、入力に応じてリアルタイムで更新されます。

絞り込みトグル

絞り込み 説明
Hide offline nodes 過去 2 時間以内に受信したノードのみを表示します
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
不明なノードを含む Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
インフラを除外 Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
MQTT を除外 MQTT のインターネットブリッジ経由でのみ受信したノードを非表示にします
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

並べ替えオプション

並べ替え 説明
Last heard 最近受信したノードを先頭に表示します
A-Z ノードの正式名称で並べ替えます
距離 近いノードを先頭に表示します(位置情報の共有が必要)
ホップ数 中継ホップ数が少ないノードを先頭に表示します
チャンネル チャンネルインデックスごとにグループ化します
via MQTT MQTT 経由と無線受信でグループ化します
via Favorite (default) Favorited nodes first, then the rest

ホップごとのノード数

ノードリストのアプリバーにあるホップヒストグラムのアイコンをタップすると、各ホップ距離にいくつのノードがあるかを示す棒グラフが開きます(0 = 直接、1 = 中継 1 回、以下同様)。 グラフを最後の通信の期間(すべての期間、1 時間、8 時間、24 時間)で絞り込むと、現在のメッシュの様子と、より長い期間での様子を比較できます。 ローカルメッシュがどれだけ混雑し、どれだけ広がっているかを手早く把握できます。

ノードの詳細

ノードをタップすると、詳しい情報を含む詳細ビューが開きます。 メトリクスとテレメトリの詳細については、ノードメトリクス を参照してください。

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

ノードの詳細セクション

インラインのステータス表示で、主要なメトリクスをひと目で確認できます:

指標 スクリーンショット
信号品質 信号
バッテリー残量 バッテリー
ホップ数 ホップ
最後の通信 最後の通信
距離 距離

デバイスのリンク(「購入はこちら」)

ノードのハードウェアが認識されると、詳細ビューに折りたたみ式の**「購入はこちら」**セクションが表示され、そのデバイスを購入したり詳しく知ったりできる場所(ベンダーの製品ページ、製品バリエーション、AliExpress・Amazon・対応小売店などの地域のマーケットプレイスの掲載)が、あなたの国に合わせて絞り込まれて表示されます。 各リンクは msh.to のリダイレクトサービスを通じて開きます。 一致するリンクがないデバイスでは、このセクションは表示されません。

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

関連トピック


diff --git a/main/ko-rKR/user/nodes.html b/main/ko-rKR/user/nodes.html index e134eb6656..6230a27adc 100644 --- a/main/ko-rKR/user/nodes.html +++ b/main/ko-rKR/user/nodes.html @@ -1 +1 @@ - 노드 | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 한국어
Meshtastic Docs ↗

🌐 한국어 — Community translation View in English

노드

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

역할 설명
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • 지우기

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

필터 설명
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort 설명
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
최근 수신 Last heard
거리 Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ 노드 | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 한국어
Meshtastic Docs ↗

🌐 한국어 — Community translation View in English

노드

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

역할 설명
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • 지우기

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

필터 설명
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort 설명
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
최근 수신 Last heard
거리 Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/lt-rLT/user/nodes.html b/main/lt-rLT/user/nodes.html index 8bfea56f02..d1ea2762ff 100644 --- a/main/lt-rLT/user/nodes.html +++ b/main/lt-rLT/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Lietuvių
Meshtastic Docs ↗

🌐 Lietuvių — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Aprašymas
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Pašalinti

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtras Aprašymas
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Aprašymas
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Seniausiai girdėtas Last heard
Atstumas Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Lietuvių
Meshtastic Docs ↗

🌐 Lietuvių — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Aprašymas
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Pašalinti

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtras Aprašymas
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Aprašymas
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Seniausiai girdėtas Last heard
Atstumas Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/nl-rNL/user/nodes.html b/main/nl-rNL/user/nodes.html index 71ba2c5b5e..7197d22175 100644 --- a/main/nl-rNL/user/nodes.html +++ b/main/nl-rNL/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Nederlands
Meshtastic Docs ↗

🌐 Nederlands — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Functie Beschrijving
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Verwijder

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Beschrijving
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Beschrijving
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Laatst gehoord Last heard
Afstand Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Nederlands
Meshtastic Docs ↗

🌐 Nederlands — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Functie Beschrijving
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Verwijder

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Beschrijving
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Beschrijving
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Laatst gehoord Last heard
Afstand Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/no-rNO/user/nodes.html b/main/no-rNO/user/nodes.html index 94693f7a00..59db221d8d 100644 --- a/main/no-rNO/user/nodes.html +++ b/main/no-rNO/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Norsk
Meshtastic Docs ↗

🌐 Norsk — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Beskrivelse
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Fjern

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Beskrivelse
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Beskrivelse
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Sist hørt Last heard
Distanse Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Norsk
Meshtastic Docs ↗

🌐 Norsk — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Beskrivelse
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Fjern

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Beskrivelse
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Beskrivelse
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Sist hørt Last heard
Distanse Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/pl-rPL/user/nodes.html b/main/pl-rPL/user/nodes.html index 031cf1307b..fdb6af41c1 100644 --- a/main/pl-rPL/user/nodes.html +++ b/main/pl-rPL/user/nodes.html @@ -1 +1 @@ - Węzły | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Polski
Meshtastic Docs ↗

🌐 Polski — Community translation View in English

Węzły

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Rola Opis
Klient Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Klient pasywny Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Czujnik Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Usuń

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtr Opis
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Opis
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Poziom naładowania baterii Battery
Hop count Hops
Aktywność Last heard
Odległość Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Węzły | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Polski
Meshtastic Docs ↗

🌐 Polski — Community translation View in English

Węzły

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Rola Opis
Klient Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Klient pasywny Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Czujnik Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Usuń

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtr Opis
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Opis
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Poziom naładowania baterii Battery
Hop count Hops
Aktywność Last heard
Odległość Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/pt-rBR/user/nodes.html b/main/pt-rBR/user/nodes.html index efb47fba0f..4a3b9e596d 100644 --- a/main/pt-rBR/user/nodes.html +++ b/main/pt-rBR/user/nodes.html @@ -1 +1 @@ - Nós | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Português (Brasil)
Meshtastic Docs ↗

🌐 Português (Brasil) — Community translation View in English

Nós

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Função Descrição
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Excluir

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtro Descrição
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Descrição
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Visto pela última vez Last heard
Distância Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nós | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Português (Brasil)
Meshtastic Docs ↗

🌐 Português (Brasil) — Community translation View in English

Nós

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Função Descrição
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Excluir

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtro Descrição
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Descrição
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Visto pela última vez Last heard
Distância Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/pt-rPT/user/nodes.html b/main/pt-rPT/user/nodes.html index 08a1c77a1c..0a0166b2b1 100644 --- a/main/pt-rPT/user/nodes.html +++ b/main/pt-rPT/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Português
Meshtastic Docs ↗

🌐 Português — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Papel Descrição
Cliente Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Cliente silenciado Receives but doesn’t retransmit
Cliente oculto Like Client Mute, plus hides from node list
Roteador Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Monitor Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK — ‘Kit’ de Consciencialização da Equipa Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Perdidos e Achados Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Remover

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtrar Descrição
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Descrição
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Último recebido Last heard
Distância Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Português
Meshtastic Docs ↗

🌐 Português — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Papel Descrição
Cliente Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Cliente silenciado Receives but doesn’t retransmit
Cliente oculto Like Client Mute, plus hides from node list
Roteador Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Monitor Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK — ‘Kit’ de Consciencialização da Equipa Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Perdidos e Achados Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Remover

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtrar Descrição
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Descrição
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Último recebido Last heard
Distância Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/ro-rRO/user/nodes.html b/main/ro-rRO/user/nodes.html index 644655fed0..9bdf7ad5a5 100644 --- a/main/ro-rRO/user/nodes.html +++ b/main/ro-rRO/user/nodes.html @@ -1 +1 @@ - Noduri | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Română
Meshtastic Docs ↗

🌐 Română — Community translation View in English

Noduri

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Descriere
Client Standard end-user node
Client bază Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client mut Receives but doesn’t retransmit
Client ascuns Like Client Mute, plus hides from node list
Ruter Prioritizes message forwarding; stays awake to relay
Ruter cu întârziere Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Senzor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
Tracker TAK TAK position reporting only
Pierdut și găsit Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Eliminare

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtru Descriere
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Descriere
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Ultima recepție Last heard
Distanță Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Noduri | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Română
Meshtastic Docs ↗

🌐 Română — Community translation View in English

Noduri

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Descriere
Client Standard end-user node
Client bază Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client mut Receives but doesn’t retransmit
Client ascuns Like Client Mute, plus hides from node list
Ruter Prioritizes message forwarding; stays awake to relay
Ruter cu întârziere Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Senzor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
Tracker TAK TAK position reporting only
Pierdut și găsit Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Eliminare

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtru Descriere
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Descriere
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Ultima recepție Last heard
Distanță Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/ru-rRU/user/nodes.html b/main/ru-rRU/user/nodes.html index 1034b96fd5..0f368a3a35 100644 --- a/main/ru-rRU/user/nodes.html +++ b/main/ru-rRU/user/nodes.html @@ -1 +1 @@ - Ноды | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Русский
Meshtastic Docs ↗

🌐 Русский — Community translation View in English

Ноды

The Nodes screen lists every node visible on your mesh.

Список узлов

Список нод показывает все ноды, которые услышало твоё радиоустройство, включая:

  • Имя ноды — длинное имя, настроенное пользователем
  • Короткое имя — 4-символьный идентификатор
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Последнее услышанное — время с последнего общения
  • Расстояние — предполагаемое расстояние (если позиции общие)
  • Батарея — уровень заряда батареи удалённой ноды (если включена телеметрия)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Индикаторы состояния ноды

Индикатор Значение
Green last-heard time Нода слышна за последние 2 часа
Plain last-heard time Нода не отвечала больше 2 часов
⭐ Избранный Node you marked as a favorite.

There is no separate “away” tier.

Роли ноды

У нод можно настраивать разные роли, которые влияют на их поведение в сети:

Роль Описание
Client Standard end-user node
Client Base Обрабатывает трафик избранных нод как приоритет Router Late; весь остальной трафик как Client
Client Mute Принимает, но не ретранслирует
Client Hidden Как Client Mute, плюс скрыт из списка нод
Router Ставит в приоритет пересылку сообщений; не засыпает чтобы передавать их
Router Late Инфраструктурная нода, которая ретранслирует один раз, но только после всех остальных режимов (обеспечивает дополнительное покрытие)
Router Client ⚠️ Устарело (удалено в прошивке 2.3.15) — больше не выбирается; используй вместо этого Router или Client
Repeater ⚠️ Устарело (удалено в прошивке 2.7.11) — больше не выбирается; используй вместо этого Router
Tracker Оптимизировано для передачи данных о местоположении через регулярные промежутки времени
Sensor Оптимизировано для данных телеметрии
Тактический Взаимодействует с системами TAK (отправляет/принимает CoT)
TAK Tracker Только отчет о позиции TAK
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Выбор роли

Большинству пользователей стоит оставить роль Client по умолчанию. Рассмотри другую роль, когда:

  • Router — У тебя есть узел в фиксированном, высоком месте с надежным источником питания (крыша, вершина холма). Router постоянно бодрствуют, чтобы пересылать сообщения для других, и они необходимы для расширения покрытия сети. Don’t use Router on battery-powered handheld radios.
  • Router Late — инфраструктурная нода, которая всегда пересылает пакеты только один раз, но только после того, как все другие режимы маршрутизации выполнили свои ходы. Обеспечивает дополнительное покрытие для локальных кластеров, не конкурируя с основными роутерами.
  • Client Base — обрабатывает трафик от/к вашим избранным нодам с приоритетом Router Late (обеспечивая этим сообщениям дополнительное ретранслирование), а всё остальное обрабатывает как обычный Client.
  • Client Mute — хочешь принимать трафик сети, но не участвовать в его ретрансляции. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Спит между передачами для экономии батареи.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Похожий профиль мощности на Tracker.
  • TAK / TAK Tracker — нужно только если работать с системами ATAK/WinTAK. Смотри Интеграция TAK для подробностей.

💡 Совет: Сеть работает лучше, когда большинство нод Client или Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. Хорошее практическое правило: один роутер на 5–10 клиентов в вашей зоне.

Индикаторы шифрования

У нод рядом с именем отображаются значки статуса шифрования:

Значок Значение
🔒 Заблокировано Связь использует PKI (инфраструктуру публичных ключей) — сквозное шифрование с проверкой идентичности
🔓 Разблокировано Связь использует общий канал PSK — зашифровано, но личность не проверяется индивидуально
⚠️ Несовпадение Несовпадение открытого ключа — ключ ноды изменился с последнего раза (разберитесь, прежде чем доверять)

💡 Совет: Шифрование PKI (прошивка 2.5+) обеспечивает более надёжную защиту, чем общий PSK для канала, потому что у каждой ноды есть уникальная пара ключей. Если видишь предупреждение о несоответствии ключа, нода могла быть сброшена или скомпрометирована.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Быстрые действия

Из списка нод ты можешь:

  • Нажмите на ноду, чтобы увидеть её страницу с деталями
  • Touch & hold for quick actions:
    • Отметить/убрать из избранного
    • Отключить/включить уведомления
    • Отправить личное сообщение
    • Трассировка
    • Игнорировать/разблокировать
    • Удалить

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Фильтрация и сортировка

Поиск текста

Введи в поле поиска, чтобы отфильтровать ноды по имени или короткому имени. Фильтр обновляется в реальном времени по мере набора текста.

Переключатели фильтра

Фильтр Описание
Hide offline nodes Показывать только ноды, услышанные за последние 2 часа
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Включить неизвестные Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Исключить инфраструктуру Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Исключить MQTT Скрыть ноды, слышимые только через интернет-мост MQTT
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Параметры сортировки

Сортировка Описание
Last heard Сначала недавно слышимые ноды
A-Z Сортировать по полному имени ноды
Расстояние Сначала ближайшие ноды (требуется обмен позициями)
Меньше хопов Сначала с наименьшим количеством ретрансляций
Канал Группировать по индексу канала
via MQTT Сгруппировать по MQTT и радиоприему
via Favorite (default) Favorited nodes first, then the rest

Нод на хоп

Нажми на значок гистограммы хопов в панели приложений списка нод, чтобы открыть столбчатую диаграмму того, сколько нод находится на каждом расстоянии хопа (0 = напрямую, 1 = через один ретранслятор и так далее). Отфильтруй график по окну последнего услышанного — за всё время, 1 час, 8 часов или 24 часа — чтобы посмотреть, как сейчас выглядит сеть по сравнению с более длительным периодом. Это быстрый способ понять, насколько занята и разветвлена твоя местная сеть.

Детали ноды

Нажатие на ноду открывает подробный вид с полной информацией. Смотри Метрики ноды для полной информации о метриках и телеметрии.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Раздел деталей ноды

Встроенные индикаторы статуса показывают ключевые показатели с первого взгляда:

Индикатор Снимок экрана
Качество сигнала Сигнал
Уровень заряда батареи Батарея
Количество хопов Хопы
Последний раз слышен Last heard
Расстояние Расстояние

Ссылки на устройства (“Хочу такое”)

Когда оборудование ноды распознано, в детальном просмотре появляется сворачиваемый раздел “Хочу такой”, содержащий ссылки на места, где можно купить или узнать больше об этом устройстве: страницу продукта у производителя, варианты продукта и объявления на региональных торговых площадках (например, AliExpress, Amazon и у поддерживаемых продавцов), отфильтрованные по твоей стране. Каждая ссылка открывается через сервис перенаправления msh.to. Устройства без подходящих ссылок не показывают этот раздел.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

Связанные темы


+ Ноды | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Русский
Meshtastic Docs ↗

🌐 Русский — Community translation View in English

Ноды

The Nodes screen lists every node visible on your mesh.

Список узлов

Список нод показывает все ноды, которые услышало твоё радиоустройство, включая:

  • Имя ноды — длинное имя, настроенное пользователем
  • Короткое имя — 4-символьный идентификатор
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Последнее услышанное — время с последнего общения
  • Расстояние — предполагаемое расстояние (если позиции общие)
  • Батарея — уровень заряда батареи удалённой ноды (если включена телеметрия)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Индикаторы состояния ноды

Индикатор Значение
Green last-heard time Нода слышна за последние 2 часа
Plain last-heard time Нода не отвечала больше 2 часов
⭐ Избранный Node you marked as a favorite.

There is no separate “away” tier.

Роли ноды

У нод можно настраивать разные роли, которые влияют на их поведение в сети:

Роль Описание
Client Standard end-user node
Client Base Обрабатывает трафик избранных нод как приоритет Router Late; весь остальной трафик как Client
Client Mute Принимает, но не ретранслирует
Client Hidden Как Client Mute, плюс скрыт из списка нод
Router Ставит в приоритет пересылку сообщений; не засыпает чтобы передавать их
Router Late Инфраструктурная нода, которая ретранслирует один раз, но только после всех остальных режимов (обеспечивает дополнительное покрытие)
Router Client ⚠️ Устарело (удалено в прошивке 2.3.15) — больше не выбирается; используй вместо этого Router или Client
Repeater ⚠️ Устарело (удалено в прошивке 2.7.11) — больше не выбирается; используй вместо этого Router
Tracker Оптимизировано для передачи данных о местоположении через регулярные промежутки времени
Sensor Оптимизировано для данных телеметрии
Тактический Взаимодействует с системами TAK (отправляет/принимает CoT)
TAK Tracker Только отчет о позиции TAK
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Выбор роли

Большинству пользователей стоит оставить роль Client по умолчанию. Рассмотри другую роль, когда:

  • Router — У тебя есть узел в фиксированном, высоком месте с надежным источником питания (крыша, вершина холма). Router постоянно бодрствуют, чтобы пересылать сообщения для других, и они необходимы для расширения покрытия сети. Don’t use Router on battery-powered handheld radios.
  • Router Late — инфраструктурная нода, которая всегда пересылает пакеты только один раз, но только после того, как все другие режимы маршрутизации выполнили свои ходы. Обеспечивает дополнительное покрытие для локальных кластеров, не конкурируя с основными роутерами.
  • Client Base — обрабатывает трафик от/к вашим избранным нодам с приоритетом Router Late (обеспечивая этим сообщениям дополнительное ретранслирование), а всё остальное обрабатывает как обычный Client.
  • Client Mute — хочешь принимать трафик сети, но не участвовать в его ретрансляции. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Спит между передачами для экономии батареи.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Похожий профиль мощности на Tracker.
  • TAK / TAK Tracker — нужно только если работать с системами ATAK/WinTAK. Смотри Интеграция TAK для подробностей.

💡 Совет: Сеть работает лучше, когда большинство нод Client или Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. Хорошее практическое правило: один роутер на 5–10 клиентов в вашей зоне.

Индикаторы шифрования

У нод рядом с именем отображаются значки статуса шифрования:

Значок Значение
🔒 Заблокировано Связь использует PKI (инфраструктуру публичных ключей) — сквозное шифрование с проверкой идентичности
🔓 Разблокировано No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Несовпадение Несовпадение открытого ключа — ключ ноды изменился с последнего раза (разберитесь, прежде чем доверять)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. Если видишь предупреждение о несоответствии ключа, нода могла быть сброшена или скомпрометирована.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Быстрые действия

Из списка нод ты можешь:

  • Нажмите на ноду, чтобы увидеть её страницу с деталями
  • Touch & hold for quick actions:
    • Отметить/убрать из избранного
    • Отключить/включить уведомления
    • Отправить личное сообщение
    • Трассировка
    • Игнорировать/разблокировать
    • Удалить

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Фильтрация и сортировка

Поиск текста

Введи в поле поиска, чтобы отфильтровать ноды по имени или короткому имени. Фильтр обновляется в реальном времени по мере набора текста.

Переключатели фильтра

Фильтр Описание
Hide offline nodes Показывать только ноды, услышанные за последние 2 часа
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Включить неизвестные Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Исключить инфраструктуру Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Исключить MQTT Скрыть ноды, слышимые только через интернет-мост MQTT
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Параметры сортировки

Сортировка Описание
Last heard Сначала недавно слышимые ноды
A-Z Сортировать по полному имени ноды
Расстояние Сначала ближайшие ноды (требуется обмен позициями)
Меньше хопов Сначала с наименьшим количеством ретрансляций
Канал Группировать по индексу канала
via MQTT Сгруппировать по MQTT и радиоприему
via Favorite (default) Favorited nodes first, then the rest

Нод на хоп

Нажми на значок гистограммы хопов в панели приложений списка нод, чтобы открыть столбчатую диаграмму того, сколько нод находится на каждом расстоянии хопа (0 = напрямую, 1 = через один ретранслятор и так далее). Отфильтруй график по окну последнего услышанного — за всё время, 1 час, 8 часов или 24 часа — чтобы посмотреть, как сейчас выглядит сеть по сравнению с более длительным периодом. Это быстрый способ понять, насколько занята и разветвлена твоя местная сеть.

Детали ноды

Нажатие на ноду открывает подробный вид с полной информацией. Смотри Метрики ноды для полной информации о метриках и телеметрии.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Раздел деталей ноды

Встроенные индикаторы статуса показывают ключевые показатели с первого взгляда:

Индикатор Снимок экрана
Качество сигнала Сигнал
Уровень заряда батареи Батарея
Количество хопов Хопы
Последний раз слышен Last heard
Расстояние Расстояние

Ссылки на устройства (“Хочу такое”)

Когда оборудование ноды распознано, в детальном просмотре появляется сворачиваемый раздел “Хочу такой”, содержащий ссылки на места, где можно купить или узнать больше об этом устройстве: страницу продукта у производителя, варианты продукта и объявления на региональных торговых площадках (например, AliExpress, Amazon и у поддерживаемых продавцов), отфильтрованные по твоей стране. Каждая ссылка открывается через сервис перенаправления msh.to. Устройства без подходящих ссылок не показывают этот раздел.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

Связанные темы


diff --git a/main/sk-rSK/user/nodes.html b/main/sk-rSK/user/nodes.html index 2a36868112..4287e478e0 100644 --- a/main/sk-rSK/user/nodes.html +++ b/main/sk-rSK/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Slovenčina
Meshtastic Docs ↗

🌐 Slovenčina — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Rola Popis
Klient Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Stlmený Klient Receives but doesn’t retransmit
Skrytý Klient Like Client Mute, plus hides from node list
Smerovač Prioritizes message forwarding; stays awake to relay
Smerovač s Oneskorením Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Sledovač Optimized for position reporting at regular intervals
Senzor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Sledovač TAK position reporting only
Straty a nálezy Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Odstrániť

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Popis
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Popis
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Posledný príjem Last heard
Vzdialenosť Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Slovenčina
Meshtastic Docs ↗

🌐 Slovenčina — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Rola Popis
Klient Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Stlmený Klient Receives but doesn’t retransmit
Skrytý Klient Like Client Mute, plus hides from node list
Smerovač Prioritizes message forwarding; stays awake to relay
Smerovač s Oneskorením Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Sledovač Optimized for position reporting at regular intervals
Senzor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Sledovač TAK position reporting only
Straty a nálezy Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Odstrániť

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Popis
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Popis
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Posledný príjem Last heard
Vzdialenosť Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/sl-rSI/user/nodes.html b/main/sl-rSI/user/nodes.html index d70b1a1b4b..8df32039fe 100644 --- a/main/sl-rSI/user/nodes.html +++ b/main/sl-rSI/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Slovenščina
Meshtastic Docs ↗

🌐 Slovenščina — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Opis
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Odstrani

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Opis
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Opis
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Nazadnje slišano Last heard
Razdalja Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Slovenščina
Meshtastic Docs ↗

🌐 Slovenščina — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Opis
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Odstrani

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Opis
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Opis
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Nazadnje slišano Last heard
Razdalja Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/sq-rAL/user/nodes.html b/main/sq-rAL/user/nodes.html index fb55790fd4..7d39815e70 100644 --- a/main/sq-rAL/user/nodes.html +++ b/main/sq-rAL/user/nodes.html @@ -1 +1 @@ - Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Shqip
Meshtastic Docs ↗

🌐 Shqip — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Përshkrimi
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Hiq

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtrimi Përshkrimi
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Përshkrimi
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
I fundit që u dëgjua Last heard
Distanca Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodes | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Shqip
Meshtastic Docs ↗

🌐 Shqip — Community translation View in English

Nodes

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Role Përshkrimi
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Hiq

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtrimi Përshkrimi
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Përshkrimi
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
I fundit që u dëgjua Last heard
Distanca Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/sr-rLatn/user/nodes.html b/main/sr-rLatn/user/nodes.html index b3183e2f15..25ceee6513 100644 --- a/main/sr-rLatn/user/nodes.html +++ b/main/sr-rLatn/user/nodes.html @@ -1 +1 @@ - Чворови | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Српски (Latinica)
Meshtastic Docs ↗

🌐 Српски (Latinica) — Community translation View in English

Чворови

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Улога Опис
Клијент Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Клијент мутиран Receives but doesn’t retransmit
Скривени клијент Like Client Mute, plus hides from node list
Рутер Prioritizes message forwarding; stays awake to relay
Рутер са кашњењем Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Трекер Optimized for position reporting at regular intervals
Сензор Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
ТАК Трекер TAK position reporting only
Изгубљено и нађено Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Иконица Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Уклони

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Опис
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Опис
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Poslednji put viđeno Last heard
Udaljenost Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Чворови | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Српски (Latinica)
Meshtastic Docs ↗

🌐 Српски (Latinica) — Community translation View in English

Чворови

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Улога Опис
Клијент Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Клијент мутиран Receives but doesn’t retransmit
Скривени клијент Like Client Mute, plus hides from node list
Рутер Prioritizes message forwarding; stays awake to relay
Рутер са кашњењем Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Трекер Optimized for position reporting at regular intervals
Сензор Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
ТАК Трекер TAK position reporting only
Изгубљено и нађено Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Иконица Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Уклони

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Опис
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Опис
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Poslednji put viđeno Last heard
Udaljenost Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/srp/user/nodes.html b/main/srp/user/nodes.html index bfda6f14a2..0e585f195d 100644 --- a/main/srp/user/nodes.html +++ b/main/srp/user/nodes.html @@ -1 +1 @@ - Чворови | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Српски (Ћирилица)
Meshtastic Docs ↗

🌐 Српски (Ћирилица) — Community translation View in English

Чворови

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Улога Опис
Клијент Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Клијент мутиран Receives but doesn’t retransmit
Скривени клијент Like Client Mute, plus hides from node list
Рутер Prioritizes message forwarding; stays awake to relay
Рутер са кашњењем Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Трекер Optimized for position reporting at regular intervals
Сензор Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
ТАК Трекер TAK position reporting only
Изгубљено и нађено Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Иконица Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Уклони

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Филтер Опис
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Опис
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Последње откривање Last heard
Раздаљина Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Чворови | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Српски (Ћирилица)
Meshtastic Docs ↗

🌐 Српски (Ћирилица) — Community translation View in English

Чворови

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Улога Опис
Клијент Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Клијент мутиран Receives but doesn’t retransmit
Скривени клијент Like Client Mute, plus hides from node list
Рутер Prioritizes message forwarding; stays awake to relay
Рутер са кашњењем Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Трекер Optimized for position reporting at regular intervals
Сензор Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
ТАК Трекер TAK position reporting only
Изгубљено и нађено Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Иконица Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Уклони

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Филтер Опис
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Опис
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Последње откривање Last heard
Раздаљина Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/sv-rSE/user/nodes.html b/main/sv-rSE/user/nodes.html index e4c71eeba0..3a06878ccc 100644 --- a/main/sv-rSE/user/nodes.html +++ b/main/sv-rSE/user/nodes.html @@ -1 +1 @@ - Noder | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Svenska
Meshtastic Docs ↗

🌐 Svenska — Community translation View in English

Noder

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Roll Beskrivning
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Hittegods Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Ta bort

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Beskrivning
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Beskrivning
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Batterinivå Battery
Hop count Hops
Senast hörd Last heard
Avstånd Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Noder | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Svenska
Meshtastic Docs ↗

🌐 Svenska — Community translation View in English

Noder

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Roll Beskrivning
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Hittegods Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Ta bort

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filter Beskrivning
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Beskrivning
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Batterinivå Battery
Hop count Hops
Senast hörd Last heard
Avstånd Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/tr-rTR/user/nodes.html b/main/tr-rTR/user/nodes.html index 09323befac..b349121d37 100644 --- a/main/tr-rTR/user/nodes.html +++ b/main/tr-rTR/user/nodes.html @@ -1 +1 @@ - Nodelar | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Türkçe
Meshtastic Docs ↗

🌐 Türkçe — Community translation View in English

Nodelar

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Rol Açıklaması
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Kaldır

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtre Açıklaması
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Açıklaması
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Son duyulma Last heard
Mesafe Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Nodelar | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Türkçe
Meshtastic Docs ↗

🌐 Türkçe — Community translation View in English

Nodelar

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Rol Açıklaması
Client Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Tracker Optimized for position reporting at regular intervals
Sensor Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Kaldır

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Filtre Açıklaması
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Açıklaması
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Battery level Battery
Hop count Hops
Son duyulma Last heard
Mesafe Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/uk-rUA/user/nodes.html b/main/uk-rUA/user/nodes.html index 68ad034557..c03253ab58 100644 --- a/main/uk-rUA/user/nodes.html +++ b/main/uk-rUA/user/nodes.html @@ -1 +1 @@ - Вузли | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Українська
Meshtastic Docs ↗

🌐 Українська — Community translation View in English

Вузли

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Роль Опис
Клієнт Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Трекер Optimized for position reporting at regular intervals
Датчик Optimized for telemetry reporting
ТАК Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Loast and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Видалити

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Фільтри Опис
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Опис
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Стрибків Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Рівень заряду батареї Battery
Hop count Hops
Востаннє в мережі Last heard
Відстань Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ Вузли | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 Українська
Meshtastic Docs ↗

🌐 Українська — Community translation View in English

Вузли

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

Роль Опис
Клієнт Standard end-user node
Client Base Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Трекер Optimized for position reporting at regular intervals
Датчик Optimized for telemetry reporting
ТАК Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Loast and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • Видалити

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

Фільтри Опис
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort Опис
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Стрибків Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
Рівень заряду батареї Battery
Hop count Hops
Востаннє в мережі Last heard
Відстань Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/zh-rCN/user/nodes.html b/main/zh-rCN/user/nodes.html index aa21dd5435..f9e9f46a20 100644 --- a/main/zh-rCN/user/nodes.html +++ b/main/zh-rCN/user/nodes.html @@ -1 +1 @@ - 节点 | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 中文 (简体)
Meshtastic Docs ↗

🌐 中文 (简体) — Community translation View in English

节点

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

角色 说明
客户端 Standard end-user node
客户群 Treats favorited-node traffic as Router Late priority; all other traffic as Client
客户端静默 Receives but doesn’t retransmit
客户端隐藏 Like Client Mute, plus hides from node list
路由 Prioritizes message forwarding; stays awake to relay
延迟时间 Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
追踪器 Optimized for position reporting at regular intervals
传感器 Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK 追踪器 TAK position reporting only
失物招领 Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

图标 Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • 移除

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

搜索节点 说明
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort 说明
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
电池电量 Battery
Hop count Hops
最后听到 Last heard
距离 Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ 节点 | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 中文 (简体)
Meshtastic Docs ↗

🌐 中文 (简体) — Community translation View in English

节点

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

角色 说明
客户端 Standard end-user node
客户群 Treats favorited-node traffic as Router Late priority; all other traffic as Client
客户端静默 Receives but doesn’t retransmit
客户端隐藏 Like Client Mute, plus hides from node list
路由 Prioritizes message forwarding; stays awake to relay
延迟时间 Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
追踪器 Optimized for position reporting at regular intervals
传感器 Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK 追踪器 TAK position reporting only
失物招领 Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

图标 Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • 移除

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

搜索节点 说明
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort 说明
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator Screenshot
Signal quality Signal
电池电量 Battery
Hop count Hops
最后听到 Last heard
距离 Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

diff --git a/main/zh-rTW/user/nodes.html b/main/zh-rTW/user/nodes.html index 56a37844bd..a53ce4f33e 100644 --- a/main/zh-rTW/user/nodes.html +++ b/main/zh-rTW/user/nodes.html @@ -1 +1 @@ - 節點 | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 中文 (繁體)
Meshtastic Docs ↗

🌐 中文 (繁體) — Community translation View in English

節點

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

角色 描述說明
用戶端 Standard end-user node
客戶端基礎模式 Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Repeater Optimized for position reporting at regular intervals
感測器 Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked Communication uses shared channel PSK — encrypted but identity not individually verified
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: PKI encryption (firmware 2.5+) provides stronger security than channel PSK because each node has a unique key pair. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • 移除

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

過濾器 描述說明
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort 描述說明
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator 螢幕截圖
Signal quality Signal
電池電量 Battery
Hop count Hops
最近一次收到排序 Last heard
距離 Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.

+ 節點 | Meshtastic Android Skip to main content Link Menu Expand (external link) Document Search Copy Copied
🌐 中文 (繁體)
Meshtastic Docs ↗

🌐 中文 (繁體) — Community translation View in English

節點

The Nodes screen lists every node visible on your mesh.

Node List

The node list shows every node your radio has heard, including:

  • Node name — user-configured long name
  • Short name — 4-character identifier
  • Signal quality — SNR, RSSI, and a quality word, shown only for nodes your radio heard directly. In the Complete layout a node reached through a relay shows its hop count here instead; a node heard only over MQTT shows neither
  • Last heard — time since last communication
  • Distance — estimated distance (if positions are shared)
  • Battery — remote node battery level (if telemetry is enabled)

Choosing What the List Shows

The list has two densities, set at Settings → Node Layout. Complete shows every field a node has reported and hides the ones it hasn’t. Compact fits more nodes on screen and lets you pick the fields yourself — Power, Last Heard Time, Relative Last Heard Time, Distance and Bearing, Hops Away, Signal (Direct Only), Channel, and Device & Role. The Environment Metrics toggle applies to both densities. A preview above the toggles shows the effect before you leave the screen.

Node Status Indicators

Indicator Meaning
Green last-heard time Node heard within the last 2 hours
Plain last-heard time Node not heard for over 2 hours
⭐ Favorite Node you marked as a favorite.

There is no separate “away” tier.

Node Roles

Nodes can be configured with different roles that affect their mesh behavior:

角色 描述說明
用戶端 Standard end-user node
客戶端基礎模式 Treats favorited-node traffic as Router Late priority; all other traffic as Client
Client Mute Receives but doesn’t retransmit
Client Hidden Like Client Mute, plus hides from node list
Router Prioritizes message forwarding; stays awake to relay
Router Late Infrastructure node that rebroadcasts once, but only after all other modes (provides supplemental coverage)
Router Client ⚠️ Deprecated (removed in firmware 2.3.15) — no longer selectable; use Router or Client instead
Repeater ⚠️ Deprecated (removed in firmware 2.7.11) — no longer selectable; use Router instead
Repeater Optimized for position reporting at regular intervals
感測器 Optimized for telemetry reporting
TAK Interoperates with TAK systems (sends/receives CoT)
TAK Tracker TAK position reporting only
Lost and Found Sends its position to the default channel as a text message at regular intervals, to help recover a lost radio

Choosing a Role

Most users should keep the default Client role. Consider a different role when:

  • Router — You have a node in a fixed, elevated location with reliable power (rooftop, hilltop). Routers stay awake continuously to relay messages for others and are essential for extending mesh coverage. Don’t use Router on battery-powered handheld radios.
  • Router Late — An infrastructure node that always rebroadcasts packets once but only after all other routing modes have had their turn. Provides supplemental coverage for local clusters without competing with primary routers.
  • Client Base — Treats traffic from/to your favorited nodes with Router Late priority (ensuring those messages get extra relay coverage) while handling everything else as a normal Client.
  • Client Mute — You want to receive mesh traffic but not contribute to relaying. Useful for monitoring-only radios or to reduce congestion in dense areas.
  • Tracker — An unattended radio whose sole purpose is broadcasting its GPS position (e.g., a vehicle, pet, or asset). Sleeps between broadcasts to conserve battery.
  • Sensor — An unattended radio reporting environmental telemetry (temperature, humidity, air quality). Similar power profile to Tracker.
  • TAK / TAK Tracker — Only needed if interoperating with ATAK/WinTAK systems. See TAK Integration for details.

💡 Tip: The mesh works best when most nodes are Client or Router. Too many Client Mute nodes reduce mesh resilience; too many Routers in a dense area can cause congestion. A good rule of thumb: one Router per 5–10 Clients in your area.

Encryption Indicators

Nodes display encryption status icons next to their name:

Icon Meaning
🔒 Locked Communication uses PKI (public key infrastructure) — end-to-end encrypted with verified identity
🔓 Unlocked No public key has been received for this node, so it cannot be direct messaged — use Request User Info on the node detail page to ask for one
⚠️ Mismatch Public key mismatch — the node’s key has changed since last seen (investigate before trusting)

💡 Tip: Direct messages always use PKI, so the radio needs the other node’s public key before it can send one. It refuses the send rather than falling back to channel encryption. Keys arrive inside node info, which is why an open lock usually clears itself once that node is heard from properly. If you see a key mismatch warning, the node may have been reset or compromised.

To clear a mismatch, first confirm through another trusted channel that the key change was intentional — a factory reset causes one. Then touch & hold the node, choose Remove, and let the two radios exchange keys again the next time yours hears it.

Quick Actions

From the node list, you can:

  • Tap a node to view its detail page
  • Touch & hold for quick actions:
    • Mark/remove favorite
    • Mute/unmute notifications
    • Send a direct message
    • Trace route
    • Ignore/unignore
    • 移除

Touch & hold your own node instead and you get one action, Update status, which opens the User settings screen with the cursor already in the Status Message field. It only appears while the radio is connected and running firmware 2.8 or newer — see Settings — Radio & User for the field itself.

Sharing a Contact

On a node’s detail screen, tap Share Contact to produce a link and a QR code for that node. From the same dialog, Write to NFC tag saves the link to a writable NFC tag that anyone can tap to open.

To add someone else’s contact, use the import button on the node list and choose Scan Shared Contact QR Code, Scan Shared Contact NFC, or Input Shared Contact URL. The app asks you to confirm with Import Shared Contact?, and warns you when the contact is one you already have.

Filtering & Sorting

Type in the search field to filter nodes by name or short name. The filter updates in real time as you type.

Filter Toggles

過濾器 描述說明
Hide offline nodes Show only nodes heard within the last 2 hours
Only show direct nodes Show only nodes your radio heard directly, with no relay in between
Include unknown Show nodes that haven’t sent user info yet. On by default, so a node heard before its info arrives stays visible and messageable; these carry a badge marking them incomplete
Exclude infrastructure Hide infrastructure-role nodes (Router, Router Late, Client Base, and legacy Repeater nodes) and any node that cannot be messaged, whatever its role
Exclude MQTT Hide nodes heard only via MQTT internet bridge
Only show ignored Nodes Replace the list with the nodes you have ignored. Every other node is hidden while this is on, and a banner appears at the top of the list to take you back

Sort Options

Sort 描述說明
Last heard Most recently heard nodes first
A-Z Sorted by node long name
Distance Nearest nodes first (requires position sharing)
Hops away Fewest relay hops first
Channel Grouped by channel index
via MQTT Grouped by MQTT vs. radio-heard
via Favorite (default) Favorited nodes first, then the rest

Nodes per Hop

Tap the hop-histogram icon in the node list’s app bar to open a bar chart of how many nodes sit at each hop distance (0 = direct, 1 = one relay away, and so on). Filter the chart to a last heard window — All time, 1 hour, 8 hours, or 24 hours — to see how the mesh looks right now versus over a longer period. It’s a quick way to gauge how busy and spread out your local mesh is.

Node Detail

Tapping a node opens the detail view with comprehensive information. See Node Metrics for full details on metrics and telemetry.

The Details card carries the node’s short name, role, IDs, last heard time, hops away, uptime, and its SNR and RSSI:

Node detail section

Inline status indicators show key metrics at a glance:

Indicator 螢幕截圖
Signal quality Signal
電池電量 Battery
Hop count Hops
最近一次收到排序 Last heard
距離 Distance

When a node’s hardware is recognized, the detail view shows a collapsible “I want one” section linking to places to buy or learn more about that device: the vendor’s product page, product variants, and regional marketplace listings (such as AliExpress, Amazon, and supported retailers), filtered to your country. Each link opens through the msh.to redirect service. Devices with no matching links don’t show the section.

A full, browsable directory of every link is also available at Settings → Device Links. The item is hidden while you have Settings open for a remote node.

When No Nodes Appear

The list stays empty until your radio hears another node.

  • No device connected — the app is not connected to a radio. See Connections.
  • Searching for nodes — the radio is connected and listening, but nothing has arrived yet. Check that its region and modem preset match the mesh around you, and leave Include unknown on so a node that has not yet sent its name still appears. See Settings — Radio & User.
  • A node you expect is missing — check the filter toggles. Only show direct nodes, Exclude MQTT, and Exclude infrastructure each hide a whole category of node.