From d4c03fe1be2a53eecba16013ecbc941c85e1a36a Mon Sep 17 00:00:00 2001 From: Madelena Mak Date: Sun, 30 Jun 2024 07:47:01 -0400 Subject: [PATCH] Update the theme to match branding better (#33462) Co-authored-by: Franck Nijhof --- Gemfile.lock | 3 +- plugins/alerts.rb | 83 ++ plugins/configuration.rb | 10 +- plugins/configuration_basic.rb | 2 +- plugins/details.rb | 59 +- plugins/my.rb | 9 +- plugins/output_modder.rb | 14 +- plugins/terminology_tooltip.rb | 2 +- sass/_base.scss | 5 - sass/_partials.scss | 8 - sass/base/_layout.scss | 192 ----- sass/base/_solarized.scss | 46 -- sass/base/_theme.scss | 85 -- sass/base/_typography.scss | 276 ------- sass/base/_utilities.scss | 28 - sass/custom/_layout.scss | 83 -- sass/fontawesome/_core.scss | 129 --- sass/fontawesome/_extras.scss | 93 --- sass/fontawesome/_font-awesome.scss | 32 - sass/fontawesome/_icons.scss | 381 --------- sass/fontawesome/_mixins.scss | 48 -- sass/fontawesome/_path.scss | 15 - sass/fontawesome/_variables.scss | 734 ------------------ sass/homeassistant/_homeassistant.scss | 44 ++ sass/{oscailte => homeassistant}/_mixins.scss | 0 .../_overrides.scss} | 623 +++++++++------ .../_variables.scss | 22 +- .../aside/_github.scss | 0 .../aside/_pinboard.scss | 0 .../aside/_recent_posts.scss | 0 .../aside/_social.scss | 0 .../base/_archive_list.scss | 0 .../base/_footer.scss | 2 - .../base/_global.scss | 47 ++ .../base/_grid.scss | 0 sass/homeassistant/base/_header.scss | 63 ++ .../base/_navigation.scss | 42 +- .../base/_post.scss | 16 +- .../base}/_print.scss | 0 sass/homeassistant/base/_sidebar.scss | 66 ++ .../base}/_syntax.scss | 0 sass/homeassistant/external/_search.scss | 35 + .../helpers/_classes.scss | 5 +- .../helpers/_grid-fix.scss | 0 .../homepage}/_features.scss | 8 +- sass/homeassistant/homepage/_hero_unit.scss | 137 ++++ .../homepage/_home.scss | 1 - .../pages}/_component_page.scss | 287 ++++--- .../pages}/_getting_started.scss | 4 - .../pages}/_landingpage.scss | 2 - sass/homeassistant/plugins/_alert.scss | 55 ++ .../plugins}/_details.scss | 14 +- .../plugins/_integration_alert.scss | 34 + .../plugins}/_tabbed_block.scss | 0 .../plugins}/_terminology_tooltip.scss | 0 sass/oscailte/_oscailte.scss | 26 - sass/oscailte/base/_header.scss | 12 - sass/oscailte/base/_sidebar.scss | 46 -- sass/oscailte/base/_solarized.scss | 333 -------- sass/oscailte/homepage/_hero_unit.scss | 75 -- sass/partials/_archive.scss | 72 -- sass/partials/_blog.scss | 141 ---- sass/partials/_footer.scss | 19 - sass/partials/_header.scss | 18 - sass/partials/_navigation.scss | 137 ---- sass/partials/_sharing.scss | 6 - sass/partials/_sidebar.scss | 3 - sass/partials/_syntax.scss | 261 ------- sass/partials/sidebar/_base.scss | 106 --- sass/partials/sidebar/_delicious.scss | 4 - sass/partials/sidebar/_pinboard.scss | 12 - sass/plugins/_plugins.scss | 6 - sass/screen.scss | 13 +- source/_dashboards/iframe.markdown | 5 +- source/_dashboards/map.markdown | 18 +- source/_dashboards/sections.markdown | 7 +- source/_dashboards/weather-forecast.markdown | 9 +- source/_docs/asterisk_mbox.markdown | 10 +- source/_docs/authentication.markdown | 14 +- .../authentication/multi-factor-auth.markdown | 16 +- .../_docs/authentication/providers.markdown | 28 +- source/_docs/automation/action.markdown | 4 +- source/_docs/automation/basics.markdown | 4 +- source/_docs/automation/condition.markdown | 4 +- source/_docs/automation/editor.markdown | 4 +- source/_docs/automation/trigger.markdown | 74 +- source/_docs/backend/database.markdown | 4 +- source/_docs/blueprint/schema.markdown | 4 +- source/_docs/blueprint/selectors.markdown | 4 +- source/_docs/blueprint/tutorial.markdown | 10 +- source/_docs/configuration.markdown | 4 +- source/_docs/configuration/events.markdown | 4 +- source/_docs/configuration/packages.markdown | 10 +- .../configuration/platform_options.markdown | 4 +- source/_docs/configuration/remote.markdown | 12 +- source/_docs/configuration/secrets.markdown | 4 +- .../_docs/configuration/templating.markdown | 41 +- .../configuration/troubleshooting.markdown | 4 +- source/_docs/frontend/icons.markdown | 32 +- source/_docs/organizing.markdown | 4 +- source/_docs/organizing/areas.markdown | 4 +- source/_docs/organizing/categories.markdown | 4 +- source/_docs/organizing/floors.markdown | 5 +- source/_docs/organizing/labels.markdown | 4 +- source/_docs/scene/editor.markdown | 4 +- source/_docs/scripts.markdown | 12 +- source/_docs/scripts/conditions.markdown | 18 +- source/_docs/scripts/service-calls.markdown | 8 +- source/_docs/tools/quick-bar.markdown | 6 +- source/_docs/z-wave/controllers.markdown | 40 +- source/_includes/asides/about.html | 12 +- source/_includes/asides/categories.html | 2 +- source/_includes/asides/cloud_navigation.html | 2 +- .../asides/common_tasks_navigation.html | 2 +- .../asides/component_navigation.html | 8 +- .../asides/conference_navigation.html | 6 +- .../asides/dashboards_navigation.html | 11 +- source/_includes/asides/docs_navigation.html | 32 +- source/_includes/asides/faq_navigation.html | 4 +- .../asides/getting_started_navigation.html | 2 +- .../_includes/asides/hassio_navigation.html | 2 +- source/_includes/asides/help_navigation.html | 6 +- .../asides/installation_navigation.html | 2 +- .../asides/organizing_navigation.html | 2 +- source/_includes/asides/recent_posts.html | 2 +- source/_includes/asides/voice_navigation.html | 8 +- source/_includes/blog/archive_post.html | 1 - source/_includes/blog/post/article.html | 2 +- source/_includes/blog/post/date.html | 2 +- source/_includes/common-tasks/data_disk.md | 30 +- .../common-tasks/development_version.md | 8 +- .../_includes/common-tasks/flashing_n2_otg.md | 10 +- .../_includes/common-tasks/network_storage.md | 12 +- .../common-tasks/third-party-addons.md | 4 +- source/_includes/custom/features.html | 12 +- source/_includes/custom/welcome.html | 6 +- source/_includes/feedback.html | 12 +- .../_includes/getting-started/next_step.html | 2 +- source/_includes/installation/container.md | 15 +- .../installation/container/alternative.md | 10 +- source/_includes/installation/core.md | 13 +- .../installation/operating_system.md | 49 +- source/_includes/installation/supervised.md | 4 +- .../building_block_integration.md | 4 +- source/_includes/integrations/config_flow.md | 4 +- source/_includes/javascripts/scripts.html | 18 + source/_includes/post/author.html | 2 +- source/_includes/post/sharing.html | 2 +- source/_includes/related.html | 4 +- source/_includes/site/footer.html | 179 +++-- source/_includes/site/head.html | 5 + source/_includes/site/header.html | 29 +- source/_includes/site/hero_unit.html | 14 +- source/_includes/site/sidebar.html | 7 +- source/_integrations/accuweather.markdown | 6 +- source/_integrations/actiontec.markdown | 4 +- source/_integrations/adguard.markdown | 4 +- source/_integrations/aftership.markdown | 8 +- source/_integrations/agent_dvr.markdown | 6 +- source/_integrations/airgradient.markdown | 6 +- source/_integrations/airly.markdown | 12 +- source/_integrations/airnow.markdown | 6 +- source/_integrations/airvisual.markdown | 4 +- source/_integrations/aladdin_connect.markdown | 4 +- .../alarm_control_panel.ifttt.markdown | 10 +- .../alarm_control_panel.mqtt.markdown | 7 +- source/_integrations/alarmdecoder.markdown | 10 +- .../_integrations/alexa.smart_home.markdown | 45 +- source/_integrations/analytics.markdown | 6 +- .../_integrations/android_ip_webcam.markdown | 6 +- source/_integrations/androidtv.markdown | 24 +- source/_integrations/anel_pwrctrl.markdown | 6 +- source/_integrations/anthemav.markdown | 4 +- source/_integrations/apcupsd.markdown | 8 +- source/_integrations/aquostv.markdown | 6 +- source/_integrations/arest.markdown | 4 +- source/_integrations/arris_tg2492lg.markdown | 4 +- source/_integrations/aruba.markdown | 4 +- source/_integrations/asuswrt.markdown | 12 +- source/_integrations/atag.markdown | 4 +- source/_integrations/august.markdown | 4 +- source/_integrations/aws.markdown | 4 +- source/_integrations/axis.markdown | 6 +- .../azure_data_explorer.markdown | 5 +- source/_integrations/azure_event_hub.markdown | 8 +- .../_integrations/azure_service_bus.markdown | 12 +- source/_integrations/bbox.markdown | 8 +- source/_integrations/blink.markdown | 4 +- source/_integrations/bluetooth.markdown | 18 +- .../bmw_connected_drive.markdown | 30 +- source/_integrations/brother.markdown | 6 +- source/_integrations/brunt.markdown | 4 +- source/_integrations/buienradar.markdown | 4 +- source/_integrations/button.mqtt.markdown | 6 +- source/_integrations/caldav.markdown | 8 +- source/_integrations/calendar.markdown | 12 +- source/_integrations/cast.markdown | 10 +- source/_integrations/cisco_ios.markdown | 8 +- .../_integrations/cisco_webex_teams.markdown | 6 +- source/_integrations/climate.markdown | 6 +- source/_integrations/color_extractor.markdown | 8 +- source/_integrations/comfoconnect.markdown | 4 +- source/_integrations/command_line.markdown | 18 +- source/_integrations/configurator.markdown | 4 +- source/_integrations/cover.mqtt.markdown | 5 +- source/_integrations/cppm_tracker.markdown | 6 +- source/_integrations/daikin.markdown | 32 +- source/_integrations/decora.markdown | 4 +- source/_integrations/denonavr.markdown | 8 +- source/_integrations/devialet.markdown | 4 +- source/_integrations/device_tracker.markdown | 20 +- .../device_tracker.mqtt.markdown | 4 +- source/_integrations/dexcom.markdown | 4 +- source/_integrations/dialogflow.markdown | 12 +- source/_integrations/discord.markdown | 5 +- .../_integrations/dlib_face_detect.markdown | 4 +- .../_integrations/dlib_face_identify.markdown | 10 +- source/_integrations/doorbird.markdown | 8 +- source/_integrations/dormakaba_dkey.markdown | 6 +- source/_integrations/drop_connect.markdown | 6 +- source/_integrations/dsmr.markdown | 4 +- .../_integrations/dte_energy_bridge.markdown | 4 +- source/_integrations/duckdns.markdown | 4 +- .../dwd_weather_warnings.markdown | 6 +- source/_integrations/dweet.markdown | 4 +- source/_integrations/dynalite.markdown | 8 +- source/_integrations/eafm.md | 4 +- source/_integrations/ecobee.markdown | 4 +- source/_integrations/egardia.markdown | 4 +- source/_integrations/electric_kiwi.markdown | 6 +- source/_integrations/emulated_hue.markdown | 28 +- source/_integrations/emulated_kasa.markdown | 6 +- source/_integrations/emulated_roku.markdown | 8 +- .../entur_public_transport.markdown | 6 +- source/_integrations/eufylife_ble.markdown | 6 +- source/_integrations/event.mqtt.markdown | 6 +- source/_integrations/fail2ban.markdown | 8 +- source/_integrations/fan.markdown | 4 +- source/_integrations/fan.mqtt.markdown | 4 +- source/_integrations/fastdotcom.markdown | 6 +- source/_integrations/ffmpeg_motion.markdown | 4 +- source/_integrations/ffmpeg_noise.markdown | 4 +- source/_integrations/fibaro.markdown | 4 +- source/_integrations/filesize.markdown | 4 +- source/_integrations/filter.markdown | 6 +- source/_integrations/fireservicerota.markdown | 4 +- source/_integrations/firmata.markdown | 18 +- source/_integrations/flexit.markdown | 8 +- source/_integrations/flick_electric.markdown | 4 +- source/_integrations/foscam.markdown | 4 +- source/_integrations/free_mobile.markdown | 4 +- source/_integrations/freebox.markdown | 10 +- source/_integrations/fritz.markdown | 4 +- source/_integrations/fritzbox.markdown | 10 +- .../_integrations/frontier_silicon.markdown | 4 +- source/_integrations/fully_kiosk.markdown | 6 +- .../_integrations/garages_amsterdam.markdown | 8 +- source/_integrations/gdacs.markdown | 4 +- source/_integrations/geonetnz_quakes.markdown | 4 +- .../_integrations/geonetnz_volcano.markdown | 6 +- source/_integrations/github.markdown | 6 +- source/_integrations/glances.markdown | 8 +- source/_integrations/goodwe.markdown | 8 +- source/_integrations/google.markdown | 22 +- .../_integrations/google_assistant.markdown | 30 +- ...google_generative_ai_conversation.markdown | 8 +- source/_integrations/google_maps.markdown | 11 +- source/_integrations/google_pubsub.markdown | 6 +- source/_integrations/google_tasks.markdown | 6 +- .../_integrations/google_translate.markdown | 6 +- source/_integrations/gree.markdown | 8 +- source/_integrations/group.markdown | 6 +- source/_integrations/haveibeenpwned.markdown | 10 +- source/_integrations/hddtemp.markdown | 9 +- source/_integrations/hdmi_cec.markdown | 12 +- source/_integrations/heos.markdown | 4 +- source/_integrations/hikvision.markdown | 4 +- source/_integrations/hikvisioncam.markdown | 6 +- source/_integrations/history_stats.markdown | 20 +- source/_integrations/hive.markdown | 6 +- source/_integrations/homeassistant.markdown | 6 +- source/_integrations/homekit.markdown | 12 +- .../_integrations/homekit_controller.markdown | 8 +- source/_integrations/homematic.markdown | 6 +- source/_integrations/homewizard.markdown | 6 +- source/_integrations/hp_ilo.markdown | 4 +- source/_integrations/html5.markdown | 6 +- source/_integrations/http.markdown | 30 +- source/_integrations/hue.markdown | 6 +- source/_integrations/humidifier.markdown | 6 +- source/_integrations/humidifier.mqtt.markdown | 6 +- .../hunterdouglas_powerview.markdown | 27 +- source/_integrations/huum.markdown | 6 +- source/_integrations/hydrawise.markdown | 8 +- source/_integrations/icloud.markdown | 4 +- source/_integrations/idasen_desk.markdown | 8 +- source/_integrations/ifttt.markdown | 4 +- source/_integrations/imap.markdown | 37 +- source/_integrations/influxdb.markdown | 10 +- source/_integrations/input_select.markdown | 6 +- source/_integrations/insteon.markdown | 17 +- source/_integrations/iss.markdown | 4 +- source/_integrations/knx.markdown | 90 +-- source/_integrations/kodi.markdown | 6 +- source/_integrations/konnected.markdown | 25 +- .../_integrations/kostal_plenticore.markdown | 16 +- source/_integrations/lacrosse_view.markdown | 6 +- source/_integrations/lannouncer.markdown | 4 +- source/_integrations/lawn_mower.mqtt.markdown | 6 +- source/_integrations/lcn.markdown | 77 +- source/_integrations/ld2410_ble.markdown | 4 +- source/_integrations/light.markdown | 18 +- source/_integrations/light.mqtt.markdown | 38 +- source/_integrations/lirc.markdown | 4 +- source/_integrations/lock.mqtt.markdown | 6 +- source/_integrations/logbook.markdown | 12 +- source/_integrations/luci.markdown | 6 +- source/_integrations/lutron.markdown | 12 +- source/_integrations/lutron_caseta.markdown | 12 +- source/_integrations/matrix.markdown | 12 +- source/_integrations/matter.markdown | 8 +- source/_integrations/media_extractor.markdown | 4 +- source/_integrations/media_source.markdown | 15 +- source/_integrations/met_eireann.markdown | 6 +- source/_integrations/meteo_france.markdown | 14 +- source/_integrations/meteoalarm.markdown | 4 +- source/_integrations/microsoft.markdown | 12 +- .../microsoft_face_detect.markdown | 6 +- .../microsoft_face_identify.markdown | 6 +- .../_integrations/minecraft_server.markdown | 24 +- source/_integrations/modbus.markdown | 6 +- source/_integrations/modern_forms.markdown | 12 +- source/_integrations/mqtt.markdown | 58 +- source/_integrations/mysensors.markdown | 4 +- source/_integrations/mystrom.markdown | 4 +- source/_integrations/nad.markdown | 6 +- source/_integrations/namecheapdns.markdown | 4 +- source/_integrations/neato.markdown | 16 +- source/_integrations/nest.markdown | 52 +- source/_integrations/netatmo.markdown | 12 +- source/_integrations/netgear_lte.markdown | 6 +- source/_integrations/nibe_heatpump.markdown | 4 +- source/_integrations/nina.markdown | 10 +- source/_integrations/nissan_leaf.markdown | 6 +- source/_integrations/nmap_tracker.markdown | 10 +- source/_integrations/notify.mqtt.markdown | 6 +- source/_integrations/numato.markdown | 10 +- source/_integrations/number.mqtt.markdown | 6 +- source/_integrations/onvif.markdown | 12 +- source/_integrations/opentherm_gw.markdown | 46 +- source/_integrations/openuv.markdown | 8 +- source/_integrations/openweathermap.markdown | 12 +- source/_integrations/oralb.markdown | 4 +- source/_integrations/orvibo.markdown | 6 +- source/_integrations/otp.markdown | 4 +- source/_integrations/owntracks.markdown | 4 +- source/_integrations/p1_monitor.markdown | 6 +- source/_integrations/pandora.markdown | 4 +- source/_integrations/panel_custom.markdown | 6 +- source/_integrations/peco.markdown | 8 +- .../persistent_notification.markdown | 8 +- source/_integrations/ping.markdown | 10 +- source/_integrations/plex.markdown | 18 +- source/_integrations/point.markdown | 18 +- source/_integrations/proximity.markdown | 8 +- source/_integrations/proxmoxve.markdown | 4 +- source/_integrations/ps4.markdown | 49 +- .../pulseaudio_loopback.markdown | 6 +- source/_integrations/pure_energie.markdown | 4 +- source/_integrations/purpleair.markdown | 12 +- source/_integrations/pushbullet.markdown | 12 +- .../pvpc_hourly_pricing.markdown | 6 +- source/_integrations/python_script.markdown | 10 +- source/_integrations/qld_bushfire.markdown | 6 +- source/_integrations/qvr_pro.markdown | 4 +- source/_integrations/rachio.markdown | 14 +- source/_integrations/raspyrfm.markdown | 6 +- source/_integrations/recollect_waste.markdown | 4 +- source/_integrations/recorder.markdown | 46 +- source/_integrations/reddit.markdown | 4 +- source/_integrations/remote_rpi_gpio.markdown | 4 +- source/_integrations/rest.markdown | 6 +- source/_integrations/rflink.markdown | 16 +- source/_integrations/rfxtrx.markdown | 4 +- source/_integrations/ring.markdown | 8 +- source/_integrations/risco.markdown | 8 +- source/_integrations/roomba.markdown | 18 +- source/_integrations/rpi_camera.markdown | 4 +- source/_integrations/scene.mqtt.markdown | 6 +- source/_integrations/schluter.markdown | 4 +- source/_integrations/script.markdown | 10 +- source/_integrations/scsgate.markdown | 6 +- source/_integrations/select.mqtt.markdown | 6 +- source/_integrations/sense.markdown | 6 +- source/_integrations/sensibo.markdown | 5 +- source/_integrations/sensor.rest.markdown | 6 +- source/_integrations/sentry.markdown | 8 +- source/_integrations/seventeentrack.markdown | 6 +- source/_integrations/shell_command.markdown | 6 +- source/_integrations/shelly.markdown | 22 +- source/_integrations/simplisafe.markdown | 4 +- source/_integrations/siren.mqtt.markdown | 6 +- source/_integrations/slimproto.markdown | 6 +- .../_integrations/smart_meter_texas.markdown | 4 +- source/_integrations/smartthings.markdown | 6 +- source/_integrations/smhi.markdown | 6 +- source/_integrations/smtp.markdown | 6 +- source/_integrations/snips.markdown | 6 +- source/_integrations/snmp.markdown | 4 +- source/_integrations/snooz.markdown | 8 +- source/_integrations/solaredge_local.markdown | 4 +- source/_integrations/solarlog.markdown | 8 +- source/_integrations/sonos.markdown | 29 +- source/_integrations/spider.markdown | 8 +- source/_integrations/sql.markdown | 4 +- source/_integrations/squeezebox.markdown | 8 +- source/_integrations/starline.markdown | 6 +- source/_integrations/starlingbank.markdown | 6 +- source/_integrations/statistics.markdown | 6 +- source/_integrations/steam_online.markdown | 6 +- source/_integrations/stiebel_eltron.markdown | 6 +- source/_integrations/streamlabswater.markdown | 6 +- source/_integrations/subaru.markdown | 12 +- .../swiss_hydrological_data.markdown | 6 +- source/_integrations/swisscom.markdown | 4 +- source/_integrations/switch.mqtt.markdown | 6 +- source/_integrations/switch.rest.markdown | 4 +- source/_integrations/switchbot.markdown | 4 +- source/_integrations/switchbot_cloud.markdown | 8 +- source/_integrations/synology_dsm.markdown | 22 +- source/_integrations/tag.markdown | 4 +- source/_integrations/tailscale.markdown | 6 +- source/_integrations/tankerkoenig.markdown | 4 +- source/_integrations/telegram.markdown | 8 +- source/_integrations/tellduslive.markdown | 8 +- source/_integrations/template.markdown | 4 +- source/_integrations/tensorflow.markdown | 4 +- source/_integrations/text.mqtt.markdown | 6 +- source/_integrations/thread.markdown | 6 +- source/_integrations/timer.markdown | 6 +- source/_integrations/traccar.markdown | 8 +- source/_integrations/traccar_server.markdown | 8 +- source/_integrations/tractive.markdown | 4 +- source/_integrations/tradfri.markdown | 16 +- source/_integrations/tts.markdown | 6 +- source/_integrations/uk_transport.markdown | 6 +- source/_integrations/unifiprotect.markdown | 18 +- source/_integrations/upc_connect.markdown | 4 +- source/_integrations/update.mqtt.markdown | 6 +- source/_integrations/utility_meter.markdown | 8 +- source/_integrations/uvc.markdown | 4 +- source/_integrations/valve.mqtt.markdown | 6 +- source/_integrations/vera.markdown | 8 +- source/_integrations/viaggiatreno.markdown | 18 +- source/_integrations/vilfo.markdown | 6 +- source/_integrations/vizio.markdown | 6 +- source/_integrations/vlc.markdown | 6 +- .../_integrations/vodafone_station.markdown | 4 +- source/_integrations/volumio.markdown | 4 +- source/_integrations/vultr.markdown | 16 +- source/_integrations/wake_on_lan.markdown | 4 +- source/_integrations/water_heater.markdown | 6 +- source/_integrations/watttime.markdown | 4 +- source/_integrations/weatherflow.markdown | 4 +- source/_integrations/webostv.markdown | 4 +- source/_integrations/workday.markdown | 6 +- source/_integrations/wsdot.markdown | 4 +- source/_integrations/xbox.markdown | 14 +- source/_integrations/xiaomi.markdown | 28 +- source/_integrations/xiaomi_miio.markdown | 22 +- source/_integrations/xiaomi_tv.markdown | 8 +- source/_integrations/xmpp.markdown | 17 +- source/_integrations/xs1.markdown | 8 +- source/_integrations/yandextts.markdown | 4 +- source/_integrations/yeelight.markdown | 8 +- .../_integrations/yeelightsunflower.markdown | 8 +- source/_integrations/yi.markdown | 24 +- source/_integrations/zabbix.markdown | 4 +- source/_integrations/zamg.markdown | 4 +- source/_integrations/zha.markdown | 23 +- source/_integrations/zone.markdown | 5 +- source/_integrations/zoneminder.markdown | 10 +- source/_integrations/zwave_js.markdown | 26 +- source/_integrations/zwave_me.markdown | 16 +- source/_layouts/default.html | 2 +- source/_layouts/page.html | 18 +- .../2015-02-07-looking-at-the-past.markdown | 4 +- .../_posts/2015-05-14-release-notes.markdown | 4 +- .../_posts/2015-06-10-release-notes.markdown | 4 +- ...meras-arduino-kodi-efergy-support.markdown | 4 +- ...h-moteino-mqtt-and-home-assistant.markdown | 4 +- ...tup-encryption-using-lets-encrypt.markdown | 4 +- ...lassifying-the-internet-of-things.markdown | 10 +- ...hat-cant-track-themselves-part-ii.markdown | 4 +- ...-28-esp8266-and-micropython-part1.markdown | 8 +- source/_posts/2017-02-04-babyphone.markdown | 6 +- ...n-raspberry-pi-zero-in-30-minutes.markdown | 4 +- ...automation-editor-zwave-panel-ocr.markdown | 4 +- ...-you-should-know-about-senic-covi.markdown | 4 +- source/_posts/2017-08-12-release-51.markdown | 4 +- ...017-09-25-new-hassio-build-system.markdown | 8 +- source/_posts/2017-11-18-release-58.markdown | 8 +- source/_posts/2018-08-17-release-76.markdown | 4 +- source/_posts/2018-10-01-release-79.markdown | 6 +- ...ogitech-harmony-removes-local-api.markdown | 8 +- source/_posts/2019-01-09-release-85.markdown | 6 +- .../2020-09-15-home-assistant-tags.markdown | 4 +- ...18-nabu-casa-has-acquired-esphome.markdown | 2 +- .../2021-08-24-supervisor-update.markdown | 4 +- .../_posts/2022-06-01-release-20226.markdown | 4 +- .../_posts/2023-12-06-release-202312.markdown | 6 +- .../2024-03-04-dashboard-chapter-1.markdown | 12 +- .../_posts/2024-03-06-release-20243.markdown | 6 +- .../2024-05-09-music-assistant-2.markdown | 18 +- source/addons/index.html | 14 +- source/font/FontAwesome.otf | Bin 61896 -> 0 bytes source/font/fontawesome-webfont.eot | Bin 37405 -> 0 bytes source/font/fontawesome-webfont.svg | 399 ---------- source/font/fontawesome-webfont.ttf | Bin 79076 -> 0 bytes source/font/fontawesome-webfont.woff | Bin 43572 -> 0 bytes source/getting-started/automation.markdown | 4 +- source/getting-started/configuration.markdown | 18 +- source/getting-started/index.markdown | 20 +- .../presence-detection.markdown | 4 +- source/images/footer-logo-text.svg | 20 + source/images/footer-skyline.svg | 39 + source/images/home-assistant-logo-white.svg | 16 + source/images/home-assistant-logo.svg | 84 +- source/index.html | 39 +- source/installation/index.html | 2 +- source/installation/raspberrypi.markdown | 14 +- source/integrations/index.html | 109 ++- source/voice_control/apple.markdown | 4 +- 533 files changed, 3359 insertions(+), 6896 deletions(-) create mode 100644 plugins/alerts.rb delete mode 100644 sass/_base.scss delete mode 100644 sass/_partials.scss delete mode 100644 sass/base/_layout.scss delete mode 100644 sass/base/_solarized.scss delete mode 100644 sass/base/_theme.scss delete mode 100644 sass/base/_typography.scss delete mode 100644 sass/base/_utilities.scss delete mode 100644 sass/custom/_layout.scss delete mode 100644 sass/fontawesome/_core.scss delete mode 100644 sass/fontawesome/_extras.scss delete mode 100644 sass/fontawesome/_font-awesome.scss delete mode 100644 sass/fontawesome/_icons.scss delete mode 100644 sass/fontawesome/_mixins.scss delete mode 100644 sass/fontawesome/_path.scss delete mode 100644 sass/fontawesome/_variables.scss create mode 100644 sass/homeassistant/_homeassistant.scss rename sass/{oscailte => homeassistant}/_mixins.scss (100%) rename sass/{custom/_paulus.scss => homeassistant/_overrides.scss} (61%) rename sass/{oscailte => homeassistant}/_variables.scss (74%) rename sass/{oscailte => homeassistant}/aside/_github.scss (100%) rename sass/{oscailte => homeassistant}/aside/_pinboard.scss (100%) rename sass/{oscailte => homeassistant}/aside/_recent_posts.scss (100%) rename sass/{oscailte => homeassistant}/aside/_social.scss (100%) rename sass/{oscailte => homeassistant}/base/_archive_list.scss (100%) rename sass/{oscailte => homeassistant}/base/_footer.scss (79%) rename sass/{oscailte => homeassistant}/base/_global.scss (55%) rename sass/{oscailte => homeassistant}/base/_grid.scss (100%) create mode 100644 sass/homeassistant/base/_header.scss rename sass/{oscailte => homeassistant}/base/_navigation.scss (80%) rename sass/{oscailte => homeassistant}/base/_post.scss (89%) rename sass/{custom => homeassistant/base}/_print.scss (100%) create mode 100644 sass/homeassistant/base/_sidebar.scss rename sass/{custom => homeassistant/base}/_syntax.scss (100%) create mode 100644 sass/homeassistant/external/_search.scss rename sass/{oscailte => homeassistant}/helpers/_classes.scss (93%) rename sass/{oscailte => homeassistant}/helpers/_grid-fix.scss (100%) rename sass/{custom => homeassistant/homepage}/_features.scss (89%) create mode 100644 sass/homeassistant/homepage/_hero_unit.scss rename sass/{oscailte => homeassistant}/homepage/_home.scss (95%) rename sass/{custom => homeassistant/pages}/_component_page.scss (63%) rename sass/{custom => homeassistant/pages}/_getting_started.scss (98%) rename sass/{custom => homeassistant/pages}/_landingpage.scss (99%) create mode 100644 sass/homeassistant/plugins/_alert.scss rename sass/{custom => homeassistant/plugins}/_details.scss (69%) create mode 100644 sass/homeassistant/plugins/_integration_alert.scss rename sass/{custom => homeassistant/plugins}/_tabbed_block.scss (100%) rename sass/{custom => homeassistant/plugins}/_terminology_tooltip.scss (100%) delete mode 100644 sass/oscailte/_oscailte.scss delete mode 100644 sass/oscailte/base/_header.scss delete mode 100644 sass/oscailte/base/_sidebar.scss delete mode 100644 sass/oscailte/base/_solarized.scss delete mode 100644 sass/oscailte/homepage/_hero_unit.scss delete mode 100644 sass/partials/_archive.scss delete mode 100644 sass/partials/_blog.scss delete mode 100644 sass/partials/_footer.scss delete mode 100644 sass/partials/_header.scss delete mode 100644 sass/partials/_navigation.scss delete mode 100644 sass/partials/_sharing.scss delete mode 100644 sass/partials/_sidebar.scss delete mode 100644 sass/partials/_syntax.scss delete mode 100644 sass/partials/sidebar/_base.scss delete mode 100644 sass/partials/sidebar/_delicious.scss delete mode 100644 sass/partials/sidebar/_pinboard.scss delete mode 100644 sass/plugins/_plugins.scss delete mode 100644 source/font/FontAwesome.otf delete mode 100644 source/font/fontawesome-webfont.eot delete mode 100644 source/font/fontawesome-webfont.svg delete mode 100644 source/font/fontawesome-webfont.ttf delete mode 100644 source/font/fontawesome-webfont.woff create mode 100644 source/images/footer-logo-text.svg create mode 100644 source/images/footer-skyline.svg create mode 100644 source/images/home-assistant-logo-white.svg diff --git a/Gemfile.lock b/Gemfile.lock index c6becd37de7..7090555883f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -130,8 +130,9 @@ GEM ruby2_keywords (0.0.5) safe_yaml (1.0.5) sass (3.4.25) - sass-embedded (1.77.5-x86_64-linux-gnu) + sass-embedded (1.77.5) google-protobuf (>= 3.25, < 5.0) + rake (>= 13) sass-globbing (1.1.5) sass (>= 3.1) sassc (2.1.0-x86_64-linux) diff --git a/plugins/alerts.rb b/plugins/alerts.rb new file mode 100644 index 00000000000..6178526e577 --- /dev/null +++ b/plugins/alerts.rb @@ -0,0 +1,83 @@ +module Jekyll + module HomeAssistant + class AlertBlock < Liquid::Block + def initialize(tag_name, args, tokens) + super + raise SyntaxError, <<~MSG unless args.strip =~ SYNTAX + Syntax error in alert block while parsing the following options: + + #{args} + + Valid syntax: + {% [title="Extra title"] [icon="mdi:alert"] %} + MSG + + @type = tag_name + @options = Regexp.last_match(1) + end + + def render(context) + # We parse on render, as we now have context + options = parse_options(@options, context) + contents = super(context) + + title = @type.capitalize + if options.include? :title + title += ": #{options[:title]}" + end + + if options.include? :icon + icon = options[:icon] + elsif @type == 'tip' + icon = "mdi:lightbulb-outline" + elsif @type == 'important' + icon = "mdi:message-alert-outline" + elsif @type == 'warning' + icon = "mdi:alert-outline" + elsif @type == 'caution' + icon = "mdi:alert-circle-outline" + else + icon = "mdi:information-outline" + end + + <<~MARKUP +
+

#{title}

+

+ #{contents} +

+
+ MARKUP + end + + private + + SYNTAX = /^((\s+\w+(=([\w.]+?|".+?"))?)*)$/ + OPTIONS_REGEX = /(?:\w="[^"]*"|\w=[\w.]+|\w)+/ + + def parse_options(input, context) + options = {} + return options if input.empty? + + # Split along 3 possible forms: key="value", key=value, or just key + input.scan(OPTIONS_REGEX) do |opt| + key, value = opt.split('=') + unless value.nil? + if value&.include?('"') + value.delete!('"') + else + value = context[value] + end + end + options[key.to_sym] = value || true + end + options + end + end + end +end +Liquid::Template.register_tag('note', Jekyll::HomeAssistant::AlertBlock) +Liquid::Template.register_tag('tip', Jekyll::HomeAssistant::AlertBlock) +Liquid::Template.register_tag('important', Jekyll::HomeAssistant::AlertBlock) +Liquid::Template.register_tag('warning', Jekyll::HomeAssistant::AlertBlock) +Liquid::Template.register_tag('caution', Jekyll::HomeAssistant::AlertBlock) diff --git a/plugins/configuration.rb b/plugins/configuration.rb index dcf2158cee3..aee7ff5016f 100644 --- a/plugins/configuration.rb +++ b/plugins/configuration.rb @@ -64,7 +64,7 @@ module Jekyll result << vars.map do |key, attr| markup = Array.new # There are spaces around the "{key}", to improve double-click selection in Chrome. - markup << "
#{key} " + markup << "
#{key} " if attr.key? 'type' @@ -121,7 +121,7 @@ module Jekyll markup << "#{startSymbol}#{required_value(attr['required'])}#{shortDefaultValue}#{endSymbol}" end - markup << "
" + markup << "
" if attr.key? 'description' markup << "#{converter.convert(attr['description'].to_s)}" @@ -168,9 +168,9 @@ module Jekyll <<~MARKUP
-

- Configuration Variables -

+

+ Configuration Variables +

diff --git a/plugins/configuration_basic.rb b/plugins/configuration_basic.rb index 816270a5d4a..df3829444b2 100644 --- a/plugins/configuration_basic.rb +++ b/plugins/configuration_basic.rb @@ -15,7 +15,7 @@ module Jekyll result << vars.map do |key, attr| markup = Array.new - markup << "
#{key}
" + markup << "
#{key}
" if attr.key? 'description' markup << "#{converter.convert(attr['description'].to_s)}" diff --git a/plugins/details.rb b/plugins/details.rb index d1d5daa96bc..8eb23798724 100644 --- a/plugins/details.rb +++ b/plugins/details.rb @@ -1,27 +1,44 @@ module Jekyll class DetailsBlock < Liquid::Block - def initialize(tag_name, title, tokens) + def initialize(tag_name, args, tokens) super - @title = title @details_idx = 1 + + raise SyntaxError, <<~MSG unless args.strip =~ SYNTAX + Syntax error in tag 'details' while parsing the following options: + + #{args} + + Valid syntax: + {% details [icon="iconify icon identifier"] %} + MSG + + @title = Regexp.last_match(1) + @options = Regexp.last_match(2) end def render(context) + # We parse on render, as we now have context + options = parse_options(@options, context) + contents = super(context) - if @title.nil? || @title.empty? then - title = "More info" + title = if @title.nil? || @title.empty? then + "More information" else - title = @title + @title end title = title.to_s.delete("\"") idx = context["details_idx"] - if idx.nil? then - idx = 0 - end + idx = 0 if idx.nil? context["details_idx"] = idx + 1 + icon = "" + if options.include? :icon + icon = "<iconify-icon inline icon='#{options[:icon]}'></iconify-icon> " + end + <<~MARKUP <script> function showDetails(el) { @@ -38,7 +55,7 @@ module Jekyll <div class="details-block"> <div class='details-block-item'> <button class='details-block-title' onclick='showDetails(this)' aria-controls="content_#{idx}" aria-expanded="false"> - #{title} + <span>#{icon}#{title}</span> <div class='details-block-arrow'> <svg id="down" style="display: block;" width="24" height="24" viewBox="0 0 24 24"><path d="M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z" /></svg> <svg id="up" style="display: none;" width="24" height="24" viewBox="0 0 24 24"><path d="M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z" /></svg> @@ -49,6 +66,30 @@ module Jekyll </div> MARKUP end + + private + + SYNTAX = /^(".+?")((\s+\w+(=([\w\.]+?|".+?"))?)*)$/ + OPTIONS_REGEX = /(?:\w="[^"]*"|\w=[\w\.]+|\w)+/ + + def parse_options(input, context) + options = {} + return options if input.empty? + + # Split along 3 possible forms: key="value", key=value, or just key + input.scan(OPTIONS_REGEX) do |opt| + key, value = opt.split("=") + unless value.nil? + if value&.include?('"') + value.delete!('"') + else + value = context[value] + end + end + options[key.to_sym] = value || true + end + options + end end end diff --git a/plugins/my.rb b/plugins/my.rb index 0a2ab949c07..17c897ac35d 100644 --- a/plugins/my.rb +++ b/plugins/my.rb @@ -65,10 +65,10 @@ module Jekyll raise ArgumentError, "No default icon for redirect #{@redirect}" \ if !!options[:icon] == options[:icon] and ! DEFAULT_ICONS.include?(@redirect) icon = !!options[:icon] == options[:icon] ? DEFAULT_ICONS[@redirect] : @options[:icon] - icon = "<i class='#{icon}' /> " + icon = "<iconify-icon inline icon='#{icon}'></iconify-icon> " end - "#{icon}<a href='#{uri}' class='my' target='_blank'>#{title}</a>" + "<a href='#{uri}' class='my' target='_blank'>#{icon}#{title}</a>" end end @@ -79,8 +79,9 @@ module Jekyll # Default icons when used in in-line text DEFAULT_ICONS = { - "config_flow_start" => "icon-plus-sign", - "config" => "icon-cog", + "config_flow_start" => "mdi:plus", + "config" => "mdi:cog", + "integrations" => "mdi:devices", } # Default title used for in-line text diff --git a/plugins/output_modder.rb b/plugins/output_modder.rb index a515f9629f6..a4ca095d796 100644 --- a/plugins/output_modder.rb +++ b/plugins/output_modder.rb @@ -21,8 +21,18 @@ module Jekyll # All external links start with 'http', skip when this one does not next unless link.get_attribute('href') =~ /\Ahttp/i - # Play nice with our own links + # Append an external link icon, if there isn't an icon already next if link.get_attribute('href') =~ /\Ahttps?:\/\/\w*.?home-assistant.io/i + next if link.css('iconify-icon').any? + + icon = Nokogiri::XML::Node.new('iconify-icon', dom) + icon['inline'] = true + icon['icon'] = 'tabler:external-link' + icon['class'] = 'external-link' + link.add_child(icon) + + # Play nice with our own links + next if link.get_attribute('href') =~ /\Ahttps?:\/\/(?:\w+\.)?(?:home-assistant\.io|esphome\.io|nabucasa\.com|openhomefoundation\.org)/i # Play nice with links that already have a rel attribute set rel.unshift(link.get_attribute('rel')) @@ -39,7 +49,7 @@ module Jekyll title = header.content slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '') - header.children = "<a class='title-link' name='#{slug}' href='\##{slug}'></a> #{title}" + header.children = "#{title} <a class='title-link' name='#{slug}' href='\##{slug}'></a>" end dom.to_s diff --git a/plugins/terminology_tooltip.rb b/plugins/terminology_tooltip.rb index 41d50355607..aeae162e8a3 100644 --- a/plugins/terminology_tooltip.rb +++ b/plugins/terminology_tooltip.rb @@ -34,7 +34,7 @@ module Jekyll if glossary.key?("link") rendered_link = Liquid::Template.parse(glossary["link"]).render(context).strip - link = "<small><a class='terminology-link' href='#{rendered_link}' target='_blank'>[Learn more]</a></small>" + link = "<small><a class='terminology-link' href='#{rendered_link}'>[Learn more]</a></small>" end tooltip = "<span class='terminology-tooltip'>#{definition}#{link || ""}</span>" diff --git a/sass/_base.scss b/sass/_base.scss deleted file mode 100644 index 05fdd005cbe..00000000000 --- a/sass/_base.scss +++ /dev/null @@ -1,5 +0,0 @@ -@import "base/utilities"; -@import "base/solarized"; -@import "base/theme"; -@import "base/typography"; -@import "base/layout"; diff --git a/sass/_partials.scss b/sass/_partials.scss deleted file mode 100644 index 4336c71cdba..00000000000 --- a/sass/_partials.scss +++ /dev/null @@ -1,8 +0,0 @@ -@import "partials/header"; -@import "partials/navigation"; -@import "partials/blog"; -@import "partials/sharing"; -// @import "partials/syntax"; -@import "partials/archive"; -@import "partials/sidebar"; -@import "partials/footer"; diff --git a/sass/base/_layout.scss b/sass/base/_layout.scss deleted file mode 100644 index 81903428f5c..00000000000 --- a/sass/base/_layout.scss +++ /dev/null @@ -1,192 +0,0 @@ -$max-width: 1200px !default; - -// Padding used for layout margins -$pad-min: 18px !default; -$pad-narrow: 25px !default; -$pad-medium: 35px !default; -$pad-wide: 55px !default; - -// Sidebar widths used in media queries -$sidebar-width-medium: 240px !default; -$sidebar-pad-medium: 15px !default; -$sidebar-pad-wide: 20px !default; -$sidebar-width-wide: 300px !default; - -$indented-lists: false !default; - -$header-font-size: 1em !default; -$header-padding-top: 1.5em !default; -$header-padding-bottom: 1.5em !default; - -.group { @include pie-clearfix; } - -@mixin collapse-sidebar { - float: none; - width: auto; - clear: left; - margin: 0; - padding: 0 $pad-medium 1px; - background-color: lighten($sidebar-bg, 2); - border-top: 1px solid lighten($sidebar-border, 4); - section { - &.odd, &.even { float: left; width: 48%; } - &.odd { margin-left: 0; } - &.even { margin-left: 4%; } - } - &.thirds section { - width: 30%; - margin-left: 5%; - &.first { - margin-left: 0; - clear: both; - } - } -} - -body { - -webkit-text-size-adjust: none; - max-width: $max-width; - position: relative; - margin: 0 auto; - > header, > nav, > footer, #content > article, #content > div > article, #content > div > section { - @extend .group; - padding-left: $pad-min; - padding-right: $pad-min; - @media only screen and (min-width: 480px) { - padding-left: $pad-narrow; - padding-right: $pad-narrow; - } - @media only screen and (min-width: 768px) { - padding-left: $pad-medium; - padding-right: $pad-medium; - } - @media only screen and (min-width: 992px) { - padding-left: $pad-wide; - padding-right: $pad-wide; - } - } - div.pagination { - @extend .group; - margin-left: $pad-min; - margin-right: $pad-min; - @media only screen and (min-width: 480px) { - margin-left: $pad-narrow; - margin-right: $pad-narrow; - } - @media only screen and (min-width: 768px) { - margin-left: $pad-medium; - margin-right: $pad-medium; - } - @media only screen and (min-width: 992px) { - margin-left: $pad-wide; - margin-right: $pad-wide; - } - } - > header { - font-size: $header-font-size; - padding-top: $header-padding-top; - padding-bottom: $header-padding-bottom; - } -} - -#content { - overflow: hidden; - > div, > article { width: 100%; } -} - -aside.sidebar { - float: none; - padding: 0 $pad-min 1px; - background-color: lighten($sidebar-bg, 2); - border-top: 1px solid $sidebar-border; - @extend .group; -} - -.flex-content { max-width: 100%; height: auto; } - -.basic-alignment { - &.left { float: left; margin-right: 1.5em; } - &.right { float: right; margin-left: 1.5em; } - &.center { display:block; margin: 0 auto 1.5em; } - &.left, &.right { margin-bottom: .8em; } -} - -.toggle-sidebar { &, .no-sidebar & { display: none; }} - -body.sidebar-footer { - @media only screen and (min-width: 750px) { - aside.sidebar{ @include collapse-sidebar; } - } - #content { margin-right: 0px; } - .toggle-sidebar { display: none; } -} - -@media only screen and (min-width: 550px) { - body > header { font-size: $header-font-size; } -} -@media only screen and (min-width: 750px) { - aside.sidebar { @include collapse-sidebar; } -} -#main, #content, .sidebar { - @extend .group; -} -@media only screen and (min-width: 768px) { - body { -webkit-text-size-adjust: auto; } - body > header { font-size: $header-font-size * 1.2; } - #main { - padding: 0; - margin: 0 auto; - } - #content { - overflow: visible; - margin-right: $sidebar-width-medium; - position: relative; - .no-sidebar & { margin-right: 0; border-right: 0; } - .collapse-sidebar & { margin-right: 20px; } - > div, > article { - padding-top: $pad-medium/2; - padding-bottom: $pad-medium/2; - float: left; - } - } - aside.sidebar { - width: $sidebar-width-medium - $sidebar-pad-medium*2; - padding: 0 $sidebar-pad-medium $sidebar-pad-medium; - background: none; - clear: none; - float: left; - margin: 0 -100% 0 0; - section { - width: auto; margin-left: 0; - &.odd, &.even { float: none; width: auto; margin-left: 0; } - } - .collapse-sidebar & { - @include collapse-sidebar; - } - } -} - -@media only screen and (min-width: 992px) { - body > header { font-size: $header-font-size * 1.3; } - #content { margin-right: $sidebar-width-wide; } - #content { - > div, > article { - padding-top: $pad-wide/2; - padding-bottom: $pad-wide/2; - } - } - aside.sidebar { - width: $sidebar-width-wide - $sidebar-pad-wide*2; - padding: 1.2em $sidebar-pad-wide $sidebar-pad-wide; - .collapse-sidebar & { - padding: { left: $pad-wide; right: $pad-wide; } - } - } -} - -@if $indented-lists == false { - @media only screen and (min-width: 768px) { - ul, ol { margin-left: 0; } - } -} - diff --git a/sass/base/_solarized.scss b/sass/base/_solarized.scss deleted file mode 100644 index 45d8fc5eff3..00000000000 --- a/sass/base/_solarized.scss +++ /dev/null @@ -1,46 +0,0 @@ -$base03: #002b36 !default; //darkest blue -$base02: #073642 !default; //dark blue -$base01: #586e75 !default; //darkest gray -$base00: #657b83 !default; //dark gray -$base0: #839496 !default; //medium gray -$base1: #93a1a1 !default; //medium light gray -$base2: #eee8d5 !default; //cream -$base3: #fdf6e3 !default; //white -$solar-yellow: #b58900 !default; -$solar-orange: #cb4b16 !default; -$solar-red: #dc322f !default; -$solar-magenta: #d33682 !default; -$solar-violet: #6c71c4 !default; -$solar-blue: #268bd2 !default; -$solar-cyan: #2aa198 !default; -$solar-green: #859900 !default; - -$solarized: dark !default; - -@if $solarized == light { - - $_base03: $base03; - $_base02: $base02; - $_base01: $base01; - $_base00: $base00; - $_base0: $base0; - $_base1: $base1; - $_base2: $base2; - $_base3: $base3; - - $base03: $_base3; - $base02: $_base2; - $base01: $_base1; - $base00: $_base0; - $base0: $_base00; - $base1: $_base01; - $base2: $_base02; - $base3: $_base03; -} - -/* non highlighted code colors */ -$pre-bg: $base03 !default; -$pre-border: darken($base02, 5) !default; -$pre-color: $base1 !default; - - diff --git a/sass/base/_theme.scss b/sass/base/_theme.scss deleted file mode 100644 index 60303ec9e3f..00000000000 --- a/sass/base/_theme.scss +++ /dev/null @@ -1,85 +0,0 @@ -$noise-bg: image-url('noise.png') top left !default; -$img-border: inline-image('dotted-border.png') !default; - -// Main Link Colors -$link-color: #1abcf2 !default; -$link-color-hover: adjust-color($link-color, $lightness: 10, $saturation: 25) !default; -$link-color-visited: adjust-color($link-color, $hue: 80, $lightness: -4) !default; -$link-color-active: adjust-color($link-color-hover, $lightness: -15) !default; - -// Main Section Colors -$main-bg: #f8f8f8 !default; -$page-bg: #252525 !default; -$article-border: #eeeeee !default; - -$header-bg: #333 !default; -$header-border: lighten($header-bg, 15) !default; -$title-color: #f2f2f2 !default; -$subtitle-color: #aaa !default; - -$text-color: #222 !default; -$text-color-light: #aaa !default; -$type-border: #ddd !default; - -/* Navigation */ -$nav-bg: #ccc !default; -$nav-bg-front: image-url('noise.png') !default; -$nav-bg-back: linear-gradient(lighten($nav-bg, 8), $nav-bg, darken($nav-bg, 11)) !default; -$nav-color: darken($nav-bg, 38) !default; -$nav-color-hover: darken($nav-color, 25) !default; -$nav-placeholder: desaturate(darken($nav-bg, 10), 15) !default; -$nav-border: darken($nav-bg, 10) !default; -$nav-border-top: lighten($nav-bg, 15) !default; -$nav-border-bottom: darken($nav-bg, 25) !default; -$nav-border-left: darken($nav-bg, 11) !default; -$nav-border-right: lighten($nav-bg, 7) !default; - -/* Sidebar colors */ -$sidebar-bg: #f2f2f2 !default; -$sidebar-link-color: $text-color !default; -$sidebar-link-color-hover: $link-color-hover !default; -$sidebar-link-color-active: $link-color-active !default; -$sidebar-color: change-color(mix($text-color, $sidebar-bg, 80), $hue: hue($sidebar-bg), $saturation: saturation($sidebar-bg)/2) !default; -$sidebar-border: desaturate(darken($sidebar-bg, 7), 10) !default; -$sidebar-border-hover: darken($sidebar-bg, 7) !default; -$sidebar-link-color-subdued: lighten($sidebar-color, 20) !default; -$sidebar-link-color-subdued-hover: $sidebar-link-color-hover !default; - -$footer-color: #888 !default; -$footer-bg: #ccc !default; -$footer-bg-front: image-url('noise.png') !default; -$footer-bg-back: linear-gradient(lighten($footer-bg, 8), $footer-bg, darken($footer-bg, 11)) !default; -$footer-color: darken($footer-bg, 38) !default; -$footer-color-hover: darken($footer-color, 10) !default; -$footer-border-top: lighten($footer-bg, 15) !default; -$footer-border-bottom: darken($footer-bg, 15) !default; -$footer-link-color: darken($footer-bg, 38) !default; -$footer-link-color-hover: darken($footer-color, 25) !default; -$page-border-bottom: darken($footer-bg, 5) !default; - - -/* Core theme application */ - -a { - @include link-colors($link-color, $hover: $link-color-hover, $focus: $link-color-hover, $visited: $link-color-visited, $active: $link-color-active); -} -aside.sidebar a { - @include link-colors($sidebar-link-color, $hover: $sidebar-link-color-hover, $focus: $sidebar-link-color-hover, $active: $sidebar-link-color-active); -} -a { - @include transition(color .3s); -} - -html { - background: $page-bg image-url('line-tile.png') top left; -} -body { - > div { - background: $sidebar-bg $noise-bg; - border-bottom: 1px solid $page-border-bottom; - > div { - background: $main-bg $noise-bg; - border-right: 1px solid $sidebar-border; - } - } -} diff --git a/sass/base/_typography.scss b/sass/base/_typography.scss deleted file mode 100644 index ded090889b7..00000000000 --- a/sass/base/_typography.scss +++ /dev/null @@ -1,276 +0,0 @@ -$blockquote: $type-border !default; -$sans: "PT Sans", "Helvetica Neue", Arial, sans-serif !default; -$serif: "PT Serif", Georgia, Times, "Times New Roman", serif !default; -$mono: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace !default; -$heading-font-family: "PT Serif", "Georgia", "Helvetica Neue", Arial, sans-serif !default; -$header-title-font-family: $heading-font-family !default; -$header-subtitle-font-family: $heading-font-family !default; - -// Fonts -.heading { - font-family: $heading-font-family; -} -.sans { - font-family: $sans; -} -.serif { - font-family: $serif; -} -.mono { - font-family: $mono; -} - -body > header h1 { - font-size: 2.2em; - @extend .heading; - font-family: $header-title-font-family; - font-weight: normal; - line-height: 1.2em; - margin-bottom: 0.6667em; -} -body > header h2 { - font-family: $header-subtitle-font-family; -} - -body { - line-height: 1.5em; - color: $text-color; - @extend .serif; -} -h1 { - font-size: 2.2em; - line-height: 1.2em; -} - -@media only screen and (min-width: 992px) { - body { - font-size: 1.15em; - } - h1 { - font-size: 2.6em; - line-height: 1.2em; - } -} - -#{headings()} { - @extend .heading; - text-rendering: optimizelegibility; - margin-bottom: 1em; - font-weight: bold; -} -h2, -section h1 { - font-size: 1.5em; -} -h3, -section h2, -section section h1 { - font-size: 1.3em; -} -h4, -section h3, -section section h2, -section section section h1 { - font-size: 1em; -} -h5, -section h4, -section section h3 { - font-size: 0.9em; -} -h6, -section h5, -section section h4, -section section section h3 { - font-size: 0.8em; -} - -p, -article blockquote, -ul, -ol { - margin-bottom: 1.5em; -} - -ul { - list-style-type: disc; - ul { - list-style-type: circle; - margin-bottom: 0px; - ul { - list-style-type: square; - margin-bottom: 0px; - } - } -} - -ol { - list-style-type: decimal; - ol { - list-style-type: lower-alpha; - margin-bottom: 0px; - ol { - list-style-type: lower-roman; - margin-bottom: 0px; - } - } -} - -ul, -ol { - &, - ul, - ol { - margin-left: 1.3em; - } -} -ul, -ol { - ul, - ol { - margin-bottom: 0em; - } -} - -strong { - font-weight: bold; -} - -em { - font-style: italic; -} - -sup, -sub { - font-size: 0.75em; - position: relative; - display: inline-block; - padding: 0 0.2em; - line-height: 0.8em; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.5em; -} - -a[rev="footnote"] { - font-size: 0.75em; - padding: 0 0.3em; - line-height: 1; -} - -q { - font-style: italic; - &:before { - content: '"'; - } - &:after { - content: '"'; - } -} - -em, -dfn { - font-style: italic; -} - -strong, -dfn { - font-weight: bold; -} - -del, -s { - text-decoration: line-through; -} - -abbr, -acronym { - border-bottom: 1px dotted; - cursor: help; -} - -pre, -code, -tt { - @extend .mono; -} - -hr { - margin-bottom: 0.2em; -} - -small { - font-size: 0.8em; -} - -big { - font-size: 1.2em; -} - -article blockquote { - $bq-margin: 1.2em; - font-style: italic; - position: relative; - font-size: 1.2em; - line-height: 1.5em; - padding-left: 1em; - border-left: 4px solid rgba($text-color-light, 0.5); - cite { - font-style: italic; - a { - color: $text-color-light !important; - word-wrap: break-word; - } - &:before { - content: "\2014"; - padding: { - right: 0.3em; - left: 0.3em; - } - color: $text-color-light; - } - } - @media only screen and (min-width: 992px) { - padding-left: 1.5em; - border-left-width: 4px; - } -} - -.pullquote-right:before, -.pullquote-left:before { - /* Reset metrics. */ - padding: 0; - border: none; - - /* Content */ - content: attr(data-pullquote); - - /* Pull out to the right, modular scale based margins. */ - float: right; - width: 45%; - margin: 0.5em 0 1em 1.5em; - - /* Baseline correction */ - position: relative; - top: 7px; - font-size: 1.4em; - line-height: 1.45em; -} - -.pullquote-left:before { - /* Make left pullquotes align properly. */ - float: left; - margin: 0.5em 1.5em 1em 0; -} - -/* @extend this to force long lines of continuous text to wrap */ -.force-wrap { - white-space: -moz-pre-wrap; - white-space: -pre-wrap; - white-space: -o-pre-wrap; - white-space: pre-wrap; - word-wrap: break-word; -} diff --git a/sass/base/_utilities.scss b/sass/base/_utilities.scss deleted file mode 100644 index 2d49e659e74..00000000000 --- a/sass/base/_utilities.scss +++ /dev/null @@ -1,28 +0,0 @@ -@mixin mask-image($img, $repeat: no-repeat){ - @include experimental(mask-image, image-url($img), -webkit, -moz, -o, -ms); - @include experimental(mask-repeat, $repeat, -webkit, -moz, -o, -ms); - width: image-width($img); - height: image-height($img); -} - -@mixin shadow-box($border: #fff .5em solid, $shadow: rgba(#000, .15) 0 1px 4px, $border-radius: .3em) { - @include border-radius($border-radius); - @include box-shadow($shadow); - @include box-sizing(border-box); - border: $border; -} - -@mixin selection($bg, $color: inherit, $text-shadow: none){ - * { - &::-moz-selection { background: $bg; color: $color; text-shadow: $text-shadow; } - &::-webkit-selection { background: $bg; color: $color; text-shadow: $text-shadow; } - &::selection { background: $bg; color: $color; text-shadow: $text-shadow; } - } -} - -@function text-color($color, $dark: dark, $light: light){ - $text-color: ( (red($color)*299) + (green($color)*587) + (blue($color)*114) ) / 1000; - $text-color: if($text-color >= 150, $dark, $light); - @return $text-color; -} - diff --git a/sass/custom/_layout.scss b/sass/custom/_layout.scss deleted file mode 100644 index e51aa942dab..00000000000 --- a/sass/custom/_layout.scss +++ /dev/null @@ -1,83 +0,0 @@ -// Here you can easily change your sites's layout. -// To give it a try, uncomment some of the lines below, make changes, rebuild your blog, and see how it works. - -//$header-font-size: 1em; -//$header-padding-top: 1.5em; -//$header-padding-bottom: 1.5em; - -//$max-width: 1350px; -//$indented-lists: true; - -// Padding used for layout margins -//$pad-min: 18px; -//$pad-narrow: 25px; -//$pad-medium: 35px; -//$pad-wide: 55px; - -// Sidebar widths used in media queries -//$sidebar-width-medium: 240px; -//$sidebar-pad-medium: 15px; -//$sidebar-pad-wide: 20px; -//$sidebar-width-wide: 300px; - -html { - overflow-y: hidden; -} - -.page-content { - display: inline-block; - height: calc(100% - 68px);; - margin-top: 68px; - overflow-y: scroll; - padding-top: 32px; - width: 100%; -} - -#sidebar { - .grid { - position: fixed; - width: 350px; - .brand-logo-container { - margin-top: 0; - } - } -} - -.site-header { - position: fixed; - width: 100%; - z-index: 999; -} - -table { - table-layout: fixed; - width: 100%; - - th,td { - word-wrap: break-word; - } -} - - -@media only screen and (max-width: $lap-end) { - #sidebar { - .grid { - position: initial; - width: 100%; - } - } - .site-header { - .pull-right { - position: fixed; - } - } - .hero { - > .grid-wrapper { - z-index: 0; - } - - img { - margin-bottom: 8px; - } - } - } \ No newline at end of file diff --git a/sass/fontawesome/_core.scss b/sass/fontawesome/_core.scss deleted file mode 100644 index 0189c73dfb6..00000000000 --- a/sass/fontawesome/_core.scss +++ /dev/null @@ -1,129 +0,0 @@ -/* FONT AWESOME CORE - * -------------------------- */ - -[class^="icon-"], -[class*=" icon-"] { - @include icon-FontAwesome(); -} - -[class^="icon-"]:before, -[class*=" icon-"]:before { - text-decoration: inherit; - display: inline-block; - speak: none; -} - -/* makes the font 33% larger relative to the icon container */ -.icon-large:before { - vertical-align: -10%; - font-size: (4em/3); -} - -/* makes sure icons active on rollover in links */ -a { - [class^="icon-"], - [class*=" icon-"] { - display: inline; - } -} - -/* increased font size for icon-large */ -[class^="icon-"], -[class*=" icon-"] { - &.icon-fixed-width { - display: inline-block; - width: (16em/14); - text-align: right; - padding-right: (4em/14); - &.icon-large { - width: (20em/14); - } - } -} - -.icons-ul { - margin-left: $icons-li-width; - list-style-type: none; - - > li { position: relative; } - - .icon-li { - position: absolute; - left: -$icons-li-width; - width: $icons-li-width; - text-align: center; - line-height: inherit; - } -} - -// allows usage of the hide class directly on font awesome icons -[class^="icon-"], -[class*=" icon-"] { - &.hide { - display: none; - } -} - -.icon-muted { color: $iconMuted; } -.icon-light { color: $iconLight; } -.icon-dark { color: $iconDark; } - -// Icon Borders -// ------------------------- - -.icon-border { - border: solid 1px $borderColor; - padding: .2em .25em .15em; - @include border-radius(3px); -} - -// Icon Sizes -// ------------------------- - -.icon-2x { - font-size: 2em; - &.icon-border { - border-width: 2px; - @include border-radius(4px); - } -} -.icon-3x { - font-size: 3em; - &.icon-border { - border-width: 3px; - @include border-radius(5px); - } -} -.icon-4x { - font-size: 4em; - &.icon-border { - border-width: 4px; - @include border-radius(6px); - } -} - -.icon-5x { - font-size: 5em; - &.icon-border { - border-width: 5px; - @include border-radius(7px); - } -} - - -// Floats & Margins -// ------------------------- - -// Quick floats -.pull-right { float: right; } -.pull-left { float: left; } - -[class^="icon-"], -[class*=" icon-"] { - &.pull-left { - margin-right: .3em; - } - &.pull-right { - margin-left: .3em; - } -} diff --git a/sass/fontawesome/_extras.scss b/sass/fontawesome/_extras.scss deleted file mode 100644 index 9a25845d8de..00000000000 --- a/sass/fontawesome/_extras.scss +++ /dev/null @@ -1,93 +0,0 @@ -/* EXTRAS - * -------------------------- */ - -/* Stacked and layered icon */ -@include icon-stack(); - -/* Animated rotating icon */ -.icon-spin { - display: inline-block; - -moz-animation: spin 2s infinite linear; - -o-animation: spin 2s infinite linear; - -webkit-animation: spin 2s infinite linear; - animation: spin 2s infinite linear; -} - -/* Prevent stack and spinners from being taken inline when inside a link */ -a .icon-stack, -a .icon-spin { - display: inline-block; - text-decoration: none; -} - -@-moz-keyframes spin { - 0% { -moz-transform: rotate(0deg); } - 100% { -moz-transform: rotate(359deg); } -} -@-webkit-keyframes spin { - 0% { -webkit-transform: rotate(0deg); } - 100% { -webkit-transform: rotate(359deg); } -} -@-o-keyframes spin { - 0% { -o-transform: rotate(0deg); } - 100% { -o-transform: rotate(359deg); } -} -@-ms-keyframes spin { - 0% { -ms-transform: rotate(0deg); } - 100% { -ms-transform: rotate(359deg); } -} -@keyframes spin { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(359deg); } -} - -/* Icon rotations and mirroring */ -.icon-rotate-90:before { - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -ms-transform: rotate(90deg); - -o-transform: rotate(90deg); - transform: rotate(90deg); - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); -} - -.icon-rotate-180:before { - -webkit-transform: rotate(180deg); - -moz-transform: rotate(180deg); - -ms-transform: rotate(180deg); - -o-transform: rotate(180deg); - transform: rotate(180deg); - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); -} - -.icon-rotate-270:before { - -webkit-transform: rotate(270deg); - -moz-transform: rotate(270deg); - -ms-transform: rotate(270deg); - -o-transform: rotate(270deg); - transform: rotate(270deg); - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); -} - -.icon-flip-horizontal:before { - -webkit-transform: scale(-1, 1); - -moz-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - -o-transform: scale(-1, 1); - transform: scale(-1, 1); -} - -.icon-flip-vertical:before { - -webkit-transform: scale(1, -1); - -moz-transform: scale(1, -1); - -ms-transform: scale(1, -1); - -o-transform: scale(1, -1); - transform: scale(1, -1); -} - -/* ensure rotation occurs inside anchor tags */ -a { - .icon-rotate-90, .icon-rotate-180, .icon-rotate-270, .icon-flip-horizontal, .icon-flip-vertical { - &:before { display: inline-block; } - } -} diff --git a/sass/fontawesome/_font-awesome.scss b/sass/fontawesome/_font-awesome.scss deleted file mode 100644 index 379dfd00f06..00000000000 --- a/sass/fontawesome/_font-awesome.scss +++ /dev/null @@ -1,32 +0,0 @@ -/*! - * Font Awesome 3.2.1 - * the iconic font designed for Bootstrap - * ------------------------------------------------------------------------------ - * The full suite of pictographic icons, examples, and documentation can be - * found at http://fontawesome.io. Stay up to date on Twitter at - * http://twitter.com/fontawesome. - * - * License - * ------------------------------------------------------------------------------ - * - The Font Awesome font is licensed under SIL OFL 1.1 - - * http://scripts.sil.org/OFL - * - Font Awesome CSS, LESS, and SASS files are licensed under MIT License - - * http://opensource.org/licenses/mit-license.html - * - Font Awesome documentation licensed under CC BY 3.0 - - * http://creativecommons.org/licenses/by/3.0/ - * - Attribution is no longer required in Font Awesome 3.0, but much appreciated: - * "Font Awesome by Dave Gandy - http://fontawesome.io" - * - * Author - Dave Gandy - * ------------------------------------------------------------------------------ - * Email: dave@fontawesome.io - * Twitter: http://twitter.com/davegandy - * Work: Lead Product Designer @ Kyruus - http://kyruus.com - */ - -@import "variables"; -@import "mixins"; -@import "path"; -@import "core"; -@import "extras"; -@import "icons"; diff --git a/sass/fontawesome/_icons.scss b/sass/fontawesome/_icons.scss deleted file mode 100644 index eefda0c9efe..00000000000 --- a/sass/fontawesome/_icons.scss +++ /dev/null @@ -1,381 +0,0 @@ -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - * readers do not read off random characters that represent icons */ - -.icon-glass:before { content: $glass; } -.icon-music:before { content: $music; } -.icon-search:before { content: $search; } -.icon-envelope-alt:before { content: $envelope-alt; } -.icon-heart:before { content: $heart; } -.icon-star:before { content: $star; } -.icon-star-empty:before { content: $star-empty; } -.icon-user:before { content: $user; } -.icon-film:before { content: $film; } -.icon-th-large:before { content: $th-large; } -.icon-th:before { content: $th; } -.icon-th-list:before { content: $th-list; } -.icon-ok:before { content: $ok; } -.icon-remove:before { content: $remove; } -.icon-zoom-in:before { content: $zoom-in; } -.icon-zoom-out:before { content: $zoom-out; } -.icon-power-off:before, -.icon-off:before { content: $off; } -.icon-signal:before { content: $signal; } -.icon-gear:before, -.icon-cog:before { content: $cog; } -.icon-trash:before { content: $trash; } -.icon-home:before { content: $home; } -.icon-file-alt:before { content: $file-alt; } -.icon-time:before { content: $time; } -.icon-road:before { content: $road; } -.icon-download-alt:before { content: $download-alt; } -.icon-download:before { content: $download; } -.icon-upload:before { content: $upload; } -.icon-inbox:before { content: $inbox; } -.icon-play-circle:before { content: $play-circle; } -.icon-rotate-right:before, -.icon-repeat:before { content: $repeat; } -.icon-refresh:before { content: $refresh; } -.icon-list-alt:before { content: $list-alt; } -.icon-lock:before { content: $lock; } -.icon-flag:before { content: $flag; } -.icon-headphones:before { content: $headphones; } -.icon-volume-off:before { content: $volume-off; } -.icon-volume-down:before { content: $volume-down; } -.icon-volume-up:before { content: $volume-up; } -.icon-qrcode:before { content: $qrcode; } -.icon-barcode:before { content: $barcode; } -.icon-tag:before { content: $tag; } -.icon-tags:before { content: $tags; } -.icon-book:before { content: $book; } -.icon-bookmark:before { content: $bookmark; } -.icon-print:before { content: $print; } -.icon-camera:before { content: $camera; } -.icon-font:before { content: $font; } -.icon-bold:before { content: $bold; } -.icon-italic:before { content: $italic; } -.icon-text-height:before { content: $text-height; } -.icon-text-width:before { content: $text-width; } -.icon-align-left:before { content: $align-left; } -.icon-align-center:before { content: $align-center; } -.icon-align-right:before { content: $align-right; } -.icon-align-justify:before { content: $align-justify; } -.icon-list:before { content: $list; } -.icon-indent-left:before { content: $indent-left; } -.icon-indent-right:before { content: $indent-right; } -.icon-facetime-video:before { content: $facetime-video; } -.icon-picture:before { content: $picture; } -.icon-pencil:before { content: $pencil; } -.icon-map-marker:before { content: $map-marker; } -.icon-adjust:before { content: $adjust; } -.icon-tint:before { content: $tint; } -.icon-edit:before { content: $edit; } -.icon-share:before { content: $share; } -.icon-check:before { content: $check; } -.icon-move:before { content: $move; } -.icon-step-backward:before { content: $step-backward; } -.icon-fast-backward:before { content: $fast-backward; } -.icon-backward:before { content: $backward; } -.icon-play:before { content: $play; } -.icon-pause:before { content: $pause; } -.icon-stop:before { content: $stop; } -.icon-forward:before { content: $forward; } -.icon-fast-forward:before { content: $fast-forward; } -.icon-step-forward:before { content: $step-forward; } -.icon-eject:before { content: $eject; } -.icon-chevron-left:before { content: $chevron-left; } -.icon-chevron-right:before { content: $chevron-right; } -.icon-plus-sign:before { content: $plus-sign; } -.icon-minus-sign:before { content: $minus-sign; } -.icon-remove-sign:before { content: $remove-sign; } -.icon-ok-sign:before { content: $ok-sign; } -.icon-question-sign:before { content: $question-sign; } -.icon-info-sign:before { content: $info-sign; } -.icon-screenshot:before { content: $screenshot; } -.icon-remove-circle:before { content: $remove-circle; } -.icon-ok-circle:before { content: $ok-circle; } -.icon-ban-circle:before { content: $ban-circle; } -.icon-arrow-left:before { content: $arrow-left; } -.icon-arrow-right:before { content: $arrow-right; } -.icon-arrow-up:before { content: $arrow-up; } -.icon-arrow-down:before { content: $arrow-down; } -.icon-mail-forward:before, -.icon-share-alt:before { content: $share-alt; } -.icon-resize-full:before { content: $resize-full; } -.icon-resize-small:before { content: $resize-small; } -.icon-plus:before { content: $plus; } -.icon-minus:before { content: $minus; } -.icon-asterisk:before { content: $asterisk; } -.icon-exclamation-sign:before { content: $exclamation-sign; } -.icon-gift:before { content: $gift; } -.icon-leaf:before { content: $leaf; } -.icon-fire:before { content: $fire; } -.icon-eye-open:before { content: $eye-open; } -.icon-eye-close:before { content: $eye-close; } -.icon-warning-sign:before { content: $warning-sign; } -.icon-plane:before { content: $plane; } -.icon-calendar:before { content: $calendar; } -.icon-random:before { content: $random; } -.icon-comment:before { content: $comment; } -.icon-magnet:before { content: $magnet; } -.icon-chevron-up:before { content: $chevron-up; } -.icon-chevron-down:before { content: $chevron-down; } -.icon-retweet:before { content: $retweet; } -.icon-shopping-cart:before { content: $shopping-cart; } -.icon-folder-close:before { content: $folder-close; } -.icon-folder-open:before { content: $folder-open; } -.icon-resize-vertical:before { content: $resize-vertical; } -.icon-resize-horizontal:before { content: $resize-horizontal; } -.icon-bar-chart:before { content: $bar-chart; } -.icon-twitter-sign:before { content: $twitter-sign; } -.icon-facebook-sign:before { content: $facebook-sign; } -.icon-camera-retro:before { content: $camera-retro; } -.icon-key:before { content: $key; } -.icon-gears:before, -.icon-cogs:before { content: $cogs; } -.icon-comments:before { content: $comments; } -.icon-thumbs-up-alt:before { content: $thumbs-up-alt; } -.icon-thumbs-down-alt:before { content: $thumbs-down-alt; } -.icon-star-half:before { content: $star-half; } -.icon-heart-empty:before { content: $heart-empty; } -.icon-signout:before { content: $signout; } -.icon-linkedin-sign:before { content: $linkedin-sign; } -.icon-pushpin:before { content: $pushpin; } -.icon-external-link:before { content: $external-link; } -.icon-signin:before { content: $signin; } -.icon-trophy:before { content: $trophy; } -.icon-github-sign:before { content: $github-sign; } -.icon-upload-alt:before { content: $upload-alt; } -.icon-lemon:before { content: $lemon; } -.icon-phone:before { content: $phone; } -.icon-unchecked:before, -.icon-check-empty:before { content: $check-empty; } -.icon-bookmark-empty:before { content: $bookmark-empty; } -.icon-phone-sign:before { content: $phone-sign; } -.icon-twitter:before { content: $twitter; } -.icon-facebook:before { content: $facebook; } -.icon-github:before { content: $github; } -.icon-unlock:before { content: $unlock; } -.icon-credit-card:before { content: $credit-card; } -.icon-rss:before { content: $rss; } -.icon-hdd:before { content: $hdd; } -.icon-bullhorn:before { content: $bullhorn; } -.icon-bell:before { content: $bell; } -.icon-certificate:before { content: $certificate; } -.icon-hand-right:before { content: $hand-right; } -.icon-hand-left:before { content: $hand-left; } -.icon-hand-up:before { content: $hand-up; } -.icon-hand-down:before { content: $hand-down; } -.icon-circle-arrow-left:before { content: $circle-arrow-left; } -.icon-circle-arrow-right:before { content: $circle-arrow-right; } -.icon-circle-arrow-up:before { content: $circle-arrow-up; } -.icon-circle-arrow-down:before { content: $circle-arrow-down; } -.icon-globe:before { content: $globe; } -.icon-wrench:before { content: $wrench; } -.icon-tasks:before { content: $tasks; } -.icon-filter:before { content: $filter; } -.icon-briefcase:before { content: $briefcase; } -.icon-fullscreen:before { content: $fullscreen; } -.icon-group:before { content: $group; } -.icon-link:before { content: $link; } -.icon-cloud:before { content: $cloud; } -.icon-beaker:before { content: $beaker; } -.icon-cut:before { content: $cut; } -.icon-copy:before { content: $copy; } -.icon-paperclip:before, -.icon-paper-clip:before { content: $paper-clip; } -.icon-save:before { content: $save; } -.icon-sign-blank:before { content: $sign-blank; } -.icon-reorder:before { content: $reorder; } -.icon-list-ul:before { content: $list-ul; } -.icon-list-ol:before { content: $list-ol; } -.icon-strikethrough:before { content: $strikethrough; } -.icon-underline:before { content: $underline; } -.icon-table:before { content: $table; } -.icon-magic:before { content: $magic; } -.icon-truck:before { content: $truck; } -.icon-pinterest:before { content: $pinterest; } -.icon-pinterest-sign:before { content: $pinterest-sign; } -.icon-google-plus-sign:before { content: $google-plus-sign; } -.icon-google-plus:before { content: $google-plus; } -.icon-money:before { content: $money; } -.icon-caret-down:before { content: $caret-down; } -.icon-caret-up:before { content: $caret-up; } -.icon-caret-left:before { content: $caret-left; } -.icon-caret-right:before { content: $caret-right; } -.icon-columns:before { content: $columns; } -.icon-sort:before { content: $sort; } -.icon-sort-down:before { content: $sort-down; } -.icon-sort-up:before { content: $sort-up; } -.icon-envelope:before { content: $envelope; } -.icon-linkedin:before { content: $linkedin; } -.icon-rotate-left:before, -.icon-undo:before { content: $undo; } -.icon-legal:before { content: $legal; } -.icon-dashboard:before { content: $dashboard; } -.icon-comment-alt:before { content: $comment-alt; } -.icon-comments-alt:before { content: $comments-alt; } -.icon-bolt:before { content: $bolt; } -.icon-sitemap:before { content: $sitemap; } -.icon-umbrella:before { content: $umbrella; } -.icon-paste:before { content: $paste; } -.icon-lightbulb:before { content: $lightbulb; } -.icon-exchange:before { content: $exchange; } -.icon-cloud-download:before { content: $cloud-download; } -.icon-cloud-upload:before { content: $cloud-upload; } -.icon-user-md:before { content: $user-md; } -.icon-stethoscope:before { content: $stethoscope; } -.icon-suitcase:before { content: $suitcase; } -.icon-bell-alt:before { content: $bell-alt; } -.icon-coffee:before { content: $coffee; } -.icon-food:before { content: $food; } -.icon-file-text-alt:before { content: $file-text-alt; } -.icon-building:before { content: $building; } -.icon-hospital:before { content: $hospital; } -.icon-ambulance:before { content: $ambulance; } -.icon-medkit:before { content: $medkit; } -.icon-fighter-jet:before { content: $fighter-jet; } -.icon-beer:before { content: $beer; } -.icon-h-sign:before { content: $h-sign; } -.icon-plus-sign-alt:before { content: $plus-sign-alt; } -.icon-double-angle-left:before { content: $double-angle-left; } -.icon-double-angle-right:before { content: $double-angle-right; } -.icon-double-angle-up:before { content: $double-angle-up; } -.icon-double-angle-down:before { content: $double-angle-down; } -.icon-angle-left:before { content: $angle-left; } -.icon-angle-right:before { content: $angle-right; } -.icon-angle-up:before { content: $angle-up; } -.icon-angle-down:before { content: $angle-down; } -.icon-desktop:before { content: $desktop; } -.icon-laptop:before { content: $laptop; } -.icon-tablet:before { content: $tablet; } -.icon-mobile-phone:before { content: $mobile-phone; } -.icon-circle-blank:before { content: $circle-blank; } -.icon-quote-left:before { content: $quote-left; } -.icon-quote-right:before { content: $quote-right; } -.icon-spinner:before { content: $spinner; } -.icon-circle:before { content: $circle; } -.icon-mail-reply:before, -.icon-reply:before { content: $reply; } -.icon-github-alt:before { content: $github-alt; } -.icon-folder-close-alt:before { content: $folder-close-alt; } -.icon-folder-open-alt:before { content: $folder-open-alt; } -.icon-expand-alt:before { content: $expand-alt; } -.icon-collapse-alt:before { content: $collapse-alt; } -.icon-smile:before { content: $smile; } -.icon-frown:before { content: $frown; } -.icon-meh:before { content: $meh; } -.icon-gamepad:before { content: $gamepad; } -.icon-keyboard:before { content: $keyboard; } -.icon-flag-alt:before { content: $flag-alt; } -.icon-flag-checkered:before { content: $flag-checkered; } -.icon-terminal:before { content: $terminal; } -.icon-code:before { content: $code; } -.icon-reply-all:before { content: $reply-all; } -.icon-mail-reply-all:before { content: $mail-reply-all; } -.icon-star-half-full:before, -.icon-star-half-empty:before { content: $star-half-empty; } -.icon-location-arrow:before { content: $location-arrow; } -.icon-crop:before { content: $crop; } -.icon-code-fork:before { content: $code-fork; } -.icon-unlink:before { content: $unlink; } -.icon-question:before { content: $question; } -.icon-info:before { content: $info; } -.icon-exclamation:before { content: $exclamation; } -.icon-superscript:before { content: $superscript; } -.icon-subscript:before { content: $subscript; } -.icon-eraser:before { content: $eraser; } -.icon-puzzle-piece:before { content: $puzzle-piece; } -.icon-microphone:before { content: $microphone; } -.icon-microphone-off:before { content: $microphone-off; } -.icon-shield:before { content: $shield; } -.icon-calendar-empty:before { content: $calendar-empty; } -.icon-fire-extinguisher:before { content: $fire-extinguisher; } -.icon-rocket:before { content: $rocket; } -.icon-maxcdn:before { content: $maxcdn; } -.icon-chevron-sign-left:before { content: $chevron-sign-left; } -.icon-chevron-sign-right:before { content: $chevron-sign-right; } -.icon-chevron-sign-up:before { content: $chevron-sign-up; } -.icon-chevron-sign-down:before { content: $chevron-sign-down; } -.icon-html5:before { content: $html5; } -.icon-css3:before { content: $css3; } -.icon-anchor:before { content: $anchor; } -.icon-unlock-alt:before { content: $unlock-alt; } -.icon-bullseye:before { content: $bullseye; } -.icon-ellipsis-horizontal:before { content: $ellipsis-horizontal; } -.icon-ellipsis-vertical:before { content: $ellipsis-vertical; } -.icon-rss-sign:before { content: $rss-sign; } -.icon-play-sign:before { content: $play-sign; } -.icon-ticket:before { content: $ticket; } -.icon-minus-sign-alt:before { content: $minus-sign-alt; } -.icon-check-minus:before { content: $check-minus; } -.icon-level-up:before { content: $level-up; } -.icon-level-down:before { content: $level-down; } -.icon-check-sign:before { content: $check-sign; } -.icon-edit-sign:before { content: $edit-sign; } -.icon-external-link-sign:before { content: $external-link-sign; } -.icon-share-sign:before { content: $share-sign; } -.icon-compass:before { content: $compass; } -.icon-collapse:before { content: $collapse; } -.icon-collapse-top:before { content: $collapse-top; } -.icon-expand:before { content: $expand; } -.icon-euro:before, -.icon-eur:before { content: $eur; } -.icon-gbp:before { content: $gbp; } -.icon-dollar:before, -.icon-usd:before { content: $usd; } -.icon-rupee:before, -.icon-inr:before { content: $inr; } -.icon-yen:before, -.icon-jpy:before { content: $jpy; } -.icon-renminbi:before, -.icon-cny:before { content: $cny; } -.icon-won:before, -.icon-krw:before { content: $krw; } -.icon-bitcoin:before, -.icon-btc:before { content: $btc; } -.icon-file:before { content: $file; } -.icon-file-text:before { content: $file-text; } -.icon-sort-by-alphabet:before { content: $sort-by-alphabet; } -.icon-sort-by-alphabet-alt:before { content: $sort-by-alphabet-alt; } -.icon-sort-by-attributes:before { content: $sort-by-attributes; } -.icon-sort-by-attributes-alt:before { content: $sort-by-attributes-alt; } -.icon-sort-by-order:before { content: $sort-by-order; } -.icon-sort-by-order-alt:before { content: $sort-by-order-alt; } -.icon-thumbs-up:before { content: $thumbs-up; } -.icon-thumbs-down:before { content: $thumbs-down; } -.icon-youtube-sign:before { content: $youtube-sign; } -.icon-youtube:before { content: $youtube; } -.icon-xing:before { content: $xing; } -.icon-xing-sign:before { content: $xing-sign; } -.icon-youtube-play:before { content: $youtube-play; } -.icon-dropbox:before { content: $dropbox; } -.icon-stackexchange:before { content: $stackexchange; } -.icon-instagram:before { content: $instagram; } -.icon-flickr:before { content: $flickr; } -.icon-adn:before { content: $adn; } -.icon-bitbucket:before { content: $bitbucket; } -.icon-bitbucket-sign:before { content: $bitbucket-sign; } -.icon-tumblr:before { content: $tumblr; } -.icon-tumblr-sign:before { content: $tumblr-sign; } -.icon-long-arrow-down:before { content: $long-arrow-down; } -.icon-long-arrow-up:before { content: $long-arrow-up; } -.icon-long-arrow-left:before { content: $long-arrow-left; } -.icon-long-arrow-right:before { content: $long-arrow-right; } -.icon-apple:before { content: $apple; } -.icon-windows:before { content: $windows; } -.icon-android:before { content: $android; } -.icon-linux:before { content: $linux; } -.icon-dribbble:before { content: $dribbble; } -.icon-skype:before { content: $skype; } -.icon-foursquare:before { content: $foursquare; } -.icon-trello:before { content: $trello; } -.icon-female:before { content: $female; } -.icon-male:before { content: $male; } -.icon-gittip:before { content: $gittip; } -.icon-sun:before { content: $sun; } -.icon-moon:before { content: $moon; } -.icon-archive:before { content: $archive; } -.icon-bug:before { content: $bug; } -.icon-vk:before { content: $vk; } -.icon-weibo:before { content: $weibo; } -.icon-renren:before { content: $renren; } diff --git a/sass/fontawesome/_mixins.scss b/sass/fontawesome/_mixins.scss deleted file mode 100644 index ca9c5931b3e..00000000000 --- a/sass/fontawesome/_mixins.scss +++ /dev/null @@ -1,48 +0,0 @@ -// Mixins -// -------------------------- - -@mixin icon($icon) { - @include icon-FontAwesome(); - content: $icon; -} - -@mixin icon-FontAwesome() { - font-family: FontAwesome; - font-weight: normal; - font-style: normal; - text-decoration: inherit; - -webkit-font-smoothing: antialiased; - *margin-right: .3em; // fixes ie7 issues -} - -@mixin border-radius($radius) { - -webkit-border-radius: $radius; - -moz-border-radius: $radius; - border-radius: $radius; -} - -@mixin icon-stack($width: 2em, $height: 2em, $top-font-size: 1em, $base-font-size: 2em) { - .icon-stack { - position: relative; - display: inline-block; - width: $width; - height: $height; - line-height: $width; - vertical-align: -35%; - [class^="icon-"], - [class*=" icon-"] { - display: block; - text-align: center; - position: absolute; - width: 100%; - height: 100%; - font-size: $top-font-size; - line-height: inherit; - *line-height: $height; - } - .icon-stack-base { - font-size: $base-font-size; - *line-height: #{$height / $base-font-size}em; - } - } -} diff --git a/sass/fontawesome/_path.scss b/sass/fontawesome/_path.scss deleted file mode 100644 index c8deb15543b..00000000000 --- a/sass/fontawesome/_path.scss +++ /dev/null @@ -1,15 +0,0 @@ -/* FONT PATH - * -------------------------- */ - -@font-face { - font-family: 'FontAwesome'; - src: url('#{$FontAwesomePath}/fontawesome-webfont.eot?v=#{$FontAwesomeVersion}'); - src: url('#{$FontAwesomePath}/fontawesome-webfont.eot?#iefix&v=#{$FontAwesomeVersion}') format('embedded-opentype'), - url('#{$FontAwesomePath}/fontawesome-webfont.woff?v=#{$FontAwesomeVersion}') format('woff'), - url('#{$FontAwesomePath}/fontawesome-webfont.ttf?v=#{$FontAwesomeVersion}') format('truetype'), - url('#{$FontAwesomePath}/fontawesome-webfont.svg#fontawesomeregular?v=#{$FontAwesomeVersion}') format('svg'); -// src: url('#{$FontAwesomePath}/FontAwesome.otf') format('opentype'); // used when developing fonts - font-weight: normal; - font-style: normal; - font-display: swap; -} diff --git a/sass/fontawesome/_variables.scss b/sass/fontawesome/_variables.scss deleted file mode 100644 index 7d6bbc5b1d6..00000000000 --- a/sass/fontawesome/_variables.scss +++ /dev/null @@ -1,734 +0,0 @@ -// Variables -// -------------------------- - -$FontAwesomePath: "../font" !default; -$FontAwesomeVersion: "3.2.1" !default; -$borderColor: #eeeeee !default; -$iconMuted: #eeeeee !default; -$iconLight: white !default; -$iconDark: #333333 !default; -$icons-li-width: (30em/14); - - -$glass: "\f000"; - -$music: "\f001"; - -$search: "\f002"; - -$envelope-alt: "\f003"; - -$heart: "\f004"; - -$star: "\f005"; - -$star-empty: "\f006"; - -$user: "\f007"; - -$film: "\f008"; - -$th-large: "\f009"; - -$th: "\f00a"; - -$th-list: "\f00b"; - -$ok: "\f00c"; - -$remove: "\f00d"; - -$zoom-in: "\f00e"; - -$zoom-out: "\f010"; - -$off: "\f011"; - -$signal: "\f012"; - -$cog: "\f013"; - -$trash: "\f014"; - -$home: "\f015"; - -$file-alt: "\f016"; - -$time: "\f017"; - -$road: "\f018"; - -$download-alt: "\f019"; - -$download: "\f01a"; - -$upload: "\f01b"; - -$inbox: "\f01c"; - -$play-circle: "\f01d"; - -$repeat: "\f01e"; - -$refresh: "\f021"; - -$list-alt: "\f022"; - -$lock: "\f023"; - -$flag: "\f024"; - -$headphones: "\f025"; - -$volume-off: "\f026"; - -$volume-down: "\f027"; - -$volume-up: "\f028"; - -$qrcode: "\f029"; - -$barcode: "\f02a"; - -$tag: "\f02b"; - -$tags: "\f02c"; - -$book: "\f02d"; - -$bookmark: "\f02e"; - -$print: "\f02f"; - -$camera: "\f030"; - -$font: "\f031"; - -$bold: "\f032"; - -$italic: "\f033"; - -$text-height: "\f034"; - -$text-width: "\f035"; - -$align-left: "\f036"; - -$align-center: "\f037"; - -$align-right: "\f038"; - -$align-justify: "\f039"; - -$list: "\f03a"; - -$indent-left: "\f03b"; - -$indent-right: "\f03c"; - -$facetime-video: "\f03d"; - -$picture: "\f03e"; - -$pencil: "\f040"; - -$map-marker: "\f041"; - -$adjust: "\f042"; - -$tint: "\f043"; - -$edit: "\f044"; - -$share: "\f045"; - -$check: "\f046"; - -$move: "\f047"; - -$step-backward: "\f048"; - -$fast-backward: "\f049"; - -$backward: "\f04a"; - -$play: "\f04b"; - -$pause: "\f04c"; - -$stop: "\f04d"; - -$forward: "\f04e"; - -$fast-forward: "\f050"; - -$step-forward: "\f051"; - -$eject: "\f052"; - -$chevron-left: "\f053"; - -$chevron-right: "\f054"; - -$plus-sign: "\f055"; - -$minus-sign: "\f056"; - -$remove-sign: "\f057"; - -$ok-sign: "\f058"; - -$question-sign: "\f059"; - -$info-sign: "\f05a"; - -$screenshot: "\f05b"; - -$remove-circle: "\f05c"; - -$ok-circle: "\f05d"; - -$ban-circle: "\f05e"; - -$arrow-left: "\f060"; - -$arrow-right: "\f061"; - -$arrow-up: "\f062"; - -$arrow-down: "\f063"; - -$share-alt: "\f064"; - -$resize-full: "\f065"; - -$resize-small: "\f066"; - -$plus: "\f067"; - -$minus: "\f068"; - -$asterisk: "\f069"; - -$exclamation-sign: "\f06a"; - -$gift: "\f06b"; - -$leaf: "\f06c"; - -$fire: "\f06d"; - -$eye-open: "\f06e"; - -$eye-close: "\f070"; - -$warning-sign: "\f071"; - -$plane: "\f072"; - -$calendar: "\f073"; - -$random: "\f074"; - -$comment: "\f075"; - -$magnet: "\f076"; - -$chevron-up: "\f077"; - -$chevron-down: "\f078"; - -$retweet: "\f079"; - -$shopping-cart: "\f07a"; - -$folder-close: "\f07b"; - -$folder-open: "\f07c"; - -$resize-vertical: "\f07d"; - -$resize-horizontal: "\f07e"; - -$bar-chart: "\f080"; - -$twitter-sign: "\f081"; - -$facebook-sign: "\f082"; - -$camera-retro: "\f083"; - -$key: "\f084"; - -$cogs: "\f085"; - -$comments: "\f086"; - -$thumbs-up-alt: "\f087"; - -$thumbs-down-alt: "\f088"; - -$star-half: "\f089"; - -$heart-empty: "\f08a"; - -$signout: "\f08b"; - -$linkedin-sign: "\f08c"; - -$pushpin: "\f08d"; - -$external-link: "\f08e"; - -$signin: "\f090"; - -$trophy: "\f091"; - -$github-sign: "\f092"; - -$upload-alt: "\f093"; - -$lemon: "\f094"; - -$phone: "\f095"; - -$check-empty: "\f096"; - -$bookmark-empty: "\f097"; - -$phone-sign: "\f098"; - -$twitter: "\f099"; - -$facebook: "\f09a"; - -$github: "\f09b"; - -$unlock: "\f09c"; - -$credit-card: "\f09d"; - -$rss: "\f09e"; - -$hdd: "\f0a0"; - -$bullhorn: "\f0a1"; - -$bell: "\f0a2"; - -$certificate: "\f0a3"; - -$hand-right: "\f0a4"; - -$hand-left: "\f0a5"; - -$hand-up: "\f0a6"; - -$hand-down: "\f0a7"; - -$circle-arrow-left: "\f0a8"; - -$circle-arrow-right: "\f0a9"; - -$circle-arrow-up: "\f0aa"; - -$circle-arrow-down: "\f0ab"; - -$globe: "\f0ac"; - -$wrench: "\f0ad"; - -$tasks: "\f0ae"; - -$filter: "\f0b0"; - -$briefcase: "\f0b1"; - -$fullscreen: "\f0b2"; - -$group: "\f0c0"; - -$link: "\f0c1"; - -$cloud: "\f0c2"; - -$beaker: "\f0c3"; - -$cut: "\f0c4"; - -$copy: "\f0c5"; - -$paper-clip: "\f0c6"; - -$save: "\f0c7"; - -$sign-blank: "\f0c8"; - -$reorder: "\f0c9"; - -$list-ul: "\f0ca"; - -$list-ol: "\f0cb"; - -$strikethrough: "\f0cc"; - -$underline: "\f0cd"; - -$table: "\f0ce"; - -$magic: "\f0d0"; - -$truck: "\f0d1"; - -$pinterest: "\f0d2"; - -$pinterest-sign: "\f0d3"; - -$google-plus-sign: "\f0d4"; - -$google-plus: "\f0d5"; - -$money: "\f0d6"; - -$caret-down: "\f0d7"; - -$caret-up: "\f0d8"; - -$caret-left: "\f0d9"; - -$caret-right: "\f0da"; - -$columns: "\f0db"; - -$sort: "\f0dc"; - -$sort-down: "\f0dd"; - -$sort-up: "\f0de"; - -$envelope: "\f0e0"; - -$linkedin: "\f0e1"; - -$undo: "\f0e2"; - -$legal: "\f0e3"; - -$dashboard: "\f0e4"; - -$comment-alt: "\f0e5"; - -$comments-alt: "\f0e6"; - -$bolt: "\f0e7"; - -$sitemap: "\f0e8"; - -$umbrella: "\f0e9"; - -$paste: "\f0ea"; - -$lightbulb: "\f0eb"; - -$exchange: "\f0ec"; - -$cloud-download: "\f0ed"; - -$cloud-upload: "\f0ee"; - -$user-md: "\f0f0"; - -$stethoscope: "\f0f1"; - -$suitcase: "\f0f2"; - -$bell-alt: "\f0f3"; - -$coffee: "\f0f4"; - -$food: "\f0f5"; - -$file-text-alt: "\f0f6"; - -$building: "\f0f7"; - -$hospital: "\f0f8"; - -$ambulance: "\f0f9"; - -$medkit: "\f0fa"; - -$fighter-jet: "\f0fb"; - -$beer: "\f0fc"; - -$h-sign: "\f0fd"; - -$plus-sign-alt: "\f0fe"; - -$double-angle-left: "\f100"; - -$double-angle-right: "\f101"; - -$double-angle-up: "\f102"; - -$double-angle-down: "\f103"; - -$angle-left: "\f104"; - -$angle-right: "\f105"; - -$angle-up: "\f106"; - -$angle-down: "\f107"; - -$desktop: "\f108"; - -$laptop: "\f109"; - -$tablet: "\f10a"; - -$mobile-phone: "\f10b"; - -$circle-blank: "\f10c"; - -$quote-left: "\f10d"; - -$quote-right: "\f10e"; - -$spinner: "\f110"; - -$circle: "\f111"; - -$reply: "\f112"; - -$github-alt: "\f113"; - -$folder-close-alt: "\f114"; - -$folder-open-alt: "\f115"; - -$expand-alt: "\f116"; - -$collapse-alt: "\f117"; - -$smile: "\f118"; - -$frown: "\f119"; - -$meh: "\f11a"; - -$gamepad: "\f11b"; - -$keyboard: "\f11c"; - -$flag-alt: "\f11d"; - -$flag-checkered: "\f11e"; - -$terminal: "\f120"; - -$code: "\f121"; - -$reply-all: "\f122"; - -$mail-reply-all: "\f122"; - -$star-half-empty: "\f123"; - -$location-arrow: "\f124"; - -$crop: "\f125"; - -$code-fork: "\f126"; - -$unlink: "\f127"; - -$question: "\f128"; - -$info: "\f129"; - -$exclamation: "\f12a"; - -$superscript: "\f12b"; - -$subscript: "\f12c"; - -$eraser: "\f12d"; - -$puzzle-piece: "\f12e"; - -$microphone: "\f130"; - -$microphone-off: "\f131"; - -$shield: "\f132"; - -$calendar-empty: "\f133"; - -$fire-extinguisher: "\f134"; - -$rocket: "\f135"; - -$maxcdn: "\f136"; - -$chevron-sign-left: "\f137"; - -$chevron-sign-right: "\f138"; - -$chevron-sign-up: "\f139"; - -$chevron-sign-down: "\f13a"; - -$html5: "\f13b"; - -$css3: "\f13c"; - -$anchor: "\f13d"; - -$unlock-alt: "\f13e"; - -$bullseye: "\f140"; - -$ellipsis-horizontal: "\f141"; - -$ellipsis-vertical: "\f142"; - -$rss-sign: "\f143"; - -$play-sign: "\f144"; - -$ticket: "\f145"; - -$minus-sign-alt: "\f146"; - -$check-minus: "\f147"; - -$level-up: "\f148"; - -$level-down: "\f149"; - -$check-sign: "\f14a"; - -$edit-sign: "\f14b"; - -$external-link-sign: "\f14c"; - -$share-sign: "\f14d"; - -$compass: "\f14e"; - -$collapse: "\f150"; - -$collapse-top: "\f151"; - -$expand: "\f152"; - -$eur: "\f153"; - -$gbp: "\f154"; - -$usd: "\f155"; - -$inr: "\f156"; - -$jpy: "\f157"; - -$cny: "\f158"; - -$krw: "\f159"; - -$btc: "\f15a"; - -$file: "\f15b"; - -$file-text: "\f15c"; - -$sort-by-alphabet: "\f15d"; - -$sort-by-alphabet-alt: "\f15e"; - -$sort-by-attributes: "\f160"; - -$sort-by-attributes-alt: "\f161"; - -$sort-by-order: "\f162"; - -$sort-by-order-alt: "\f163"; - -$thumbs-up: "\f164"; - -$thumbs-down: "\f165"; - -$youtube-sign: "\f166"; - -$youtube: "\f167"; - -$xing: "\f168"; - -$xing-sign: "\f169"; - -$youtube-play: "\f16a"; - -$dropbox: "\f16b"; - -$stackexchange: "\f16c"; - -$instagram: "\f16d"; - -$flickr: "\f16e"; - -$adn: "\f170"; - -$bitbucket: "\f171"; - -$bitbucket-sign: "\f172"; - -$tumblr: "\f173"; - -$tumblr-sign: "\f174"; - -$long-arrow-down: "\f175"; - -$long-arrow-up: "\f176"; - -$long-arrow-left: "\f177"; - -$long-arrow-right: "\f178"; - -$apple: "\f179"; - -$windows: "\f17a"; - -$android: "\f17b"; - -$linux: "\f17c"; - -$dribbble: "\f17d"; - -$skype: "\f17e"; - -$foursquare: "\f180"; - -$trello: "\f181"; - -$female: "\f182"; - -$male: "\f183"; - -$gittip: "\f184"; - -$sun: "\f185"; - -$moon: "\f186"; - -$archive: "\f187"; - -$bug: "\f188"; - -$vk: "\f189"; - -$weibo: "\f18a"; - -$renren: "\f18b"; - diff --git a/sass/homeassistant/_homeassistant.scss b/sass/homeassistant/_homeassistant.scss new file mode 100644 index 00000000000..c57729fa2e2 --- /dev/null +++ b/sass/homeassistant/_homeassistant.scss @@ -0,0 +1,44 @@ +@import "variables"; +@import "mixins"; + +@import "../inuitcss/_inuit"; + +@import "base/global"; +@import "base/grid"; +@import "base/header"; +@import "base/navigation"; +@import "base/footer"; +@import "base/syntax"; +@import "base/post"; +@import "base/archive_list"; +@import "base/print"; + +@import "plugins/alert"; +@import "plugins/details"; +@import "plugins/tabbed_block"; +@import "plugins/terminology_tooltip"; +@import "plugins/integration_alert"; + +@import "base/sidebar"; +@import "aside/recent_posts"; +@import "aside/github"; +@import "aside/pinboard"; +@import "aside/social"; + +@import "homepage/home"; +@import "homepage/hero_unit"; +@import "homepage/features"; + +@import "pages/landingpage"; +@import "pages/component_page"; +@import "pages/getting_started"; + +@import "helpers/classes"; +@import "helpers/grid-fix"; + +@import "external/search"; + +// This file overrides all kinds of stuff, it is the old "paulus.scss" file +// Most of what is in here should be moved to the correct file and remoted +// from here. +@import "overrides"; diff --git a/sass/oscailte/_mixins.scss b/sass/homeassistant/_mixins.scss similarity index 100% rename from sass/oscailte/_mixins.scss rename to sass/homeassistant/_mixins.scss diff --git a/sass/custom/_paulus.scss b/sass/homeassistant/_overrides.scss similarity index 61% rename from sass/custom/_paulus.scss rename to sass/homeassistant/_overrides.scss index 37cc00450fa..879811d10b1 100644 --- a/sass/custom/_paulus.scss +++ b/sass/homeassistant/_overrides.scss @@ -1,6 +1,118 @@ @charset "UTF-8"; -$primary-color: #1abcf2; +.page h1.title.indent { + font-size: 3.125em; +} +.title.delta, .title.epsilon { + border-bottom: none; + margin-bottom: .75rem; + text-transform: uppercase; + letter-spacing: .05em; + color: $gray; +} + +.title.indent { + &::before { + content: ""; + color: $primary-color; + } +} +@media only screen and (max-width: $menu-collapse) { + html { + font-size: .95em; + } + .page h1.title.indent { + font-size: 2.875em; + overflow-wrap: break-word; + hyphens: auto; + } +} + +// Rounded background for numbered lists +article> { + ol { + counter-reset: my-awesome-counter; + list-style: none; + margin-left: 3rem; + } + ol>li { + margin-left: -0.25rem; + counter-increment: my-awesome-counter; + position: relative; + } + ol>li::before { + content: counter(my-awesome-counter); + color: white; + font-size: 1.25rem; + font-weight: 600; + position: absolute; + left: -2.75rem; + top: -.1rem; + line-height: 2rem; + width: 2rem; + height: 2rem; + background: $grayLight; + border-radius: 50%; + text-align: center; + transition: background 1s; + } + ol:hover>li::before { + background: $link-color; + } + ol:hover>li:hover::before { + background: $primary-color; + } +} +ul, ol, dd { + margin-left: 2rem; +} + + +// Better looking menu + +.menu li { + a { + @include box-sizing(border-box); + display: block; + padding: 29px 0px 12px; + margin: 0 14px 27px; + text-decoration: none; + font-size: 14px; + line-height: 1; + } + + iconify-icon { + height: 14px; + margin-top: -2px; + } + + ul { + iconify-icon { + height: 16px; + padding-top: 2px; + padding-right: 8px; + } + } +} + +.menu > li > a { + font-weight: 500; + transition: box-shadow .33s; +} + +.menu > li > a:hover, +.menu > li > a:focus { + background: none; + box-shadow: inset 0px -5px $primary-color; + color: $navigation-color; + padding-bottom: 12px; + margin-bottom: 27px; +} + +.dark .menu > li > a:hover, +.dark .menu > li > a:focus { + box-shadow: inset 0px -5px rgba($white, .5); +} .site-header { position: relative; @@ -10,132 +122,183 @@ $primary-color: #1abcf2; align-items: center; font-weight: normal; } + } -.docsearch { - .DocSearch-Button { - padding: 0px; - margin-top: 16px; - margin-left: 0px; - margin-right: 0px; - background: none; - &:hover { - box-shadow: none; - } - } - .DocSearch-Button-Placeholder { - display: none; - } - .DocSearch-Button-Keys { - display: none; - } - .DocSearch-Search-Icon { - margin-right: 8px; - color: $primary-color; + +// Page breadcrumbs + +header .breadcrumbs { + color: $grayLight; + font-size: .9rem; + padding-bottom: 24px; + + a { + color: $grayLight; + text-decoration: none !important; + font-weight: 600; } } -.DocSearch-Container { - z-index: 1000; -} -.integration-alert-container { - margin: -1em 0; -} +// Integrations page filter -a.integration-alert { - margin: 1em 0; - background-color: wheat; - padding: 8px; - text-decoration: none !important; - display: flex; - align-items: center; - color: black; - - svg { - width: 24px; - margin-right: 8px; - } - - .content { - flex: 1; - } - - .learn-more { - padding: 4px 6px; - border-radius: 2px; - font-size: .8em; - - &:hover { - background-color: rgba(0, 0, 0, .12); +@media only screen and (min-width: $desk-start) { + #components-page { + .filter-button-group { + max-height: calc(100vh - 200px); + overflow: auto; } } } +.count { + font-size: .8rem; + background: $grayLighter; + color: $gray; + padding: 1px 4px; + border-radius: 8px; +} + + +// Footer +.page-content>footer { + margin-top: 194px !important; + + .skyline.grid{ + position: relative; + + .grid__item { + background-image: url(/images/footer-skyline.svg); + background-repeat: no-repeat; + background-size: 740px auto; + background-position-x: 24px; + position: absolute; + top: -130px; + height: 130px; + width: calc(100% + 24px); + } + } + + .footer-nav { + padding: 40px 0; + margin: 0 -24px; + text-align: left; + + h4 { + text-transform: uppercase; + font-size: .9rem; + letter-spacing: 0.005em; + margin-bottom: 8px; + } + ul { + padding-bottom: 24px; + } + + .company { + padding-bottom: 24px; + .title { + font-size: 1.5em; + padding-bottom: 24px; + } + + img { + vertical-align: middle; + height: 72px; + } + } + + .socials { + .icons { + margin: -16px 0 16px 0; + iconify-icon { + font-size: 2em; + margin-top: 12px; + padding-right: 8px; + } + } + + @media only screen and (min-width: $desk-start) { + .web-notice { + text-align: right; + + p { + color: $gray; + font-size: .8rem; + line-height: 1.25; + margin-bottom: 16px; + } + } + } + } + + ul { + margin: 0; + list-style: none; + + li { + padding-bottom: 4px; + } + } + } +} + + @media only screen and (max-width: $menu-collapse) { .feedback { margin-bottom: 32px; } } -.hero { - background-color: #038fc7; - padding-bottom: 0; - .lead { - margin-bottom: 16px; - } - - .hero-buttons a { - color: white; - text-transform: uppercase; - white-space: nowrap; - display: inline-block; - font-weight: 500; - } - - img { - display: block; - } -} +// Material Card .material-card { - background-color: #fefefe; - border-radius: 8px; + position: relative; + background-color: $white; + border-radius: 16px; border: 1px solid rgba(0, 0, 0, .12); - box-shadow: rgba(0,0,0,0.06) 0 0 10px; + transition: box-shadow .5s; h1 { - font-family: Roboto, Noto, sans-serif; + font-family: $heading-font; -webkit-font-smoothing: antialiased; - font-size: 24px; - font-weight: 400; + font-size: 1.33rem; + font-weight: 600; letter-spacing: -0.012em; line-height: 40px; color: #212121; - padding: 20px 16px 12px; - text-transform: capitalize; - margin: 0; + margin: -8px 0 0; } &.text { - padding: 16px; + padding: 24px; h1 { - padding: 4px 0px 12px; + padding: 0px 0px 12px; + } + &>svg { + margin-top: -8px; + margin-right: -8px; } } .links { - margin-top: 8px; - margin-left: -8px; + margin-top: 12px; + margin-right: -8px; + font-size: .9rem; + text-align: right; a { + background: #e8edf0; + font-family: $heading-font; text-decoration: none; - font-weight: 500; + font-weight: 650; text-transform: uppercase; display: inline-block; - margin: 0 8px; + margin: 4px; + padding: 6px 16px; + border-radius: 16px; } } @@ -146,6 +309,12 @@ a.integration-alert { } } +a.material-card:hover { + z-index: 2; + box-shadow: 0 0 1px rgba(0,0,0,.5), 0 -4px 8px hsla(180, 100%, 50%, .10), 0 32px 64px hsla(207, 100%, 10%, 0.5); +} + + .feedback { h4 { margin: 0 0 8px !important; @@ -181,17 +350,19 @@ a.integration-alert { .button { - position: relative; - cursor: pointer; - font-size: 14px; - font-weight: bold; - padding: 8px 28px; - color: #fff; - background-color: #03a9f4; - border: none; - text-decoration: none !important; - border-radius: 4px; - box-shadow: 0 2px 2px 0 rgba(0,0,0,.14), 0 3px 1px -2px rgba(0,0,0,.12), 0 1px 5px 0 rgba(0,0,0,.2); + position: relative; + cursor: pointer; + font-family: $heading-font; + font-size: 1.1rem; + font-weight: 650; + padding: 12px 24px; + color: $link-color; + background-color: #e8edf0; + border: none; + text-decoration: none !important; + border-radius: 24px; + margin: 8px 0; + transition: box-shadow .33s; &::before { content: " "; @@ -204,7 +375,7 @@ a.integration-alert { border-radius: 4px; } &:hover { - box-shadow: 0 4px 8px 0 rgba(0,0,0,.14), 0 1px 7px 0 rgba(0,0,0,.12), 0 3px 1px -1px rgba(0,0,0,.2); + box-shadow: 0 0 1px rgba(0,0,0,.5), 0 -1px 2px hsla(180, 100%, 50%, .05), 0 12px 24px hsla(207, 100%, 10%, 0.20); } &:hover::before { background-color: rgba(255,255,255,.8); @@ -235,12 +406,6 @@ a.integration-alert { margin-bottom: 24px; } - .current-version { - .release-date { - white-space: nowrap; - } - } - .recent-posts { .blog-date { white-space: nowrap; @@ -412,8 +577,6 @@ a.integration-alert { } -// https://fortawesome.github.io/Font-Awesome/3.2.1/icons/ - h1:hover a.title-link, h2:hover a.title-link, h3:hover a.title-link, @@ -421,34 +584,11 @@ h4:hover a.title-link, h5:hover a.title-link, h6:hover a.title-link, dt:hover a.title-link { - position: relative; - + text-decoration: none; &::before { - position: absolute; - top: 5px; - left: -25px; - padding-right: 10px; - padding-left: 5px; - font-family: "FontAwesome"; - font-size: 15px; + margin-left: 4px; color: #999; - content: "\f0c1"; - } -} - -.ha-title { - display: inline-flex; - height: 100%; - white-space: nowrap; - - img { - border-radius: 3px; - height: 36px; - margin-right: 10px; - } - - a>* { - vertical-align: middle; + content: "\00B6"; /* pilcrow */ } } @@ -472,16 +612,20 @@ dt:hover a.title-link { } } + +// Article formatting + article.post, article.page, article.listing { font-size: 1.125em; line-height: 1.6; + overflow: hidden; img, table { - border-radius: 3px; - box-shadow: rgba(0, 0, 0, 0.06) 0 0 10px; + border-radius: 8px; + box-shadow: rgba(0, 0, 0, 0.5) 0 0 1px; vertical-align: middle; } @@ -501,11 +645,13 @@ article.listing { p.img { background-color: #fff; - border-radius: 5px; + border-radius: 8px; + border-width: 8px; text-align: center; padding-bottom: 3px; font-size: 0.9rem; - box-shadow: rgba(0, 0, 0, 0.06) 0 0 10px; + box-shadow: rgba(0, 0, 0, 0.5) 0 0 1px; + border: 0; img { display: block; @@ -515,7 +661,8 @@ article.listing { } li { - margin-bottom: 10px; + margin-top: 4px; + margin-bottom: 8px; &>p:last-child { margin-bottom: 0; @@ -525,45 +672,41 @@ article.listing { margin-bottom: 0; } } + &>ol>li { + margin-bottom: 16px; + } a { text-decoration: underline; + overflow-wrap: break-word; &.btn { text-decoration: none; + transition: box-shadow .33; + + &:hover { + box-shadow: 0 0 1px rgba(0,0,0,.5), 0 -4px 8px hsla(180, 100%, 50%, .10), 0 32px 64px hsla(207, 100%, 10%, 0.5); + } } } - h1 {} - h2 { - font-size: 1.5em; - margin-top: 2em; - - // Future re-design - // margin: 1.5em 0 1rem; - // - // border: 0; - // border-top: 1px solid $primary-color; - // padding-top: 1.4rem; + margin-top: 1.75em; } h3 { text-transform: uppercase; - letter-spacing: 0.125rem; - font-size: 1.2rem; + letter-spacing: 0.05rem; + font-size: 1.375rem; margin-top: 2em; - - // Future re-design - // margin: 2em 0 1rem; } h4 { - font-size: 1.1rem; + text-transform: uppercase; + letter-spacing: 0.05rem; + font-size: 1.1875rem; margin-top: 2em; - - // Future re-design - // margin: 1.5em 0 1rem; + color: $gray; } details { @@ -571,106 +714,40 @@ article.listing { } } -p.note, -div.note { - position: relative; - - background: #e7f2fa; - - padding: 40px 12px 6px 12px; - margin-bottom: 24px; - box-shadow: rgba(0, 0, 0, 0.06) 0 0 10px; - - p { - margin-bottom: 0px; - } - - &::before { - font-family: "FontAwesome", sans-serif; - content: "\f05a"" Note " attr(data-title); - background-color: #6ab0de; - color: white; - font-weight: bold; - - border-top-left-radius: 3px; - border-top-right-radius: 3px; - padding: 6px 14px; - - line-height: 1.5em; - - position: absolute; - top: 0; - left: 0; - right: 0; - } - - &.warning { - background-color: #f7f9e1; - - &::before { - background-color: rgb(187, 185, 13); - content: "\f071"" Warning " attr(data-title); - } - } -} - -.copyright { - text-align: left; - - .company { - .title { - font-size: 1.5em; - } - - img { - vertical-align: middle; - height: 120px; - } - - i { - font-size: 2em; - padding: 0 5px; - } - - .icons { - display: flex; - align-items: center; - - svg { - height: 48px; - padding: 10px 4px; - fill: currentColor; - } - } - } - - ul { - margin: 0; - list-style: none; - } -} - .aside-module { + background: white; + border-radius: 16px; + margin: 0 0 24px 0px; + padding: 4px 24px 8px; + .section { margin-bottom: 10px; - ul.section-nav { + &>ul { margin-left: 0px; - li.toc-entry { + &>li.toc-entry:first-child{ + padding-top: 0; + } + + &>li.toc-entry { list-style-type: none; + } + + li.toc-entry, li.faq-entry { + padding: 3px 0; + font-size: .85rem; li { - list-style-type: circle; - margin-left: 1em; + list-style-type: disc; + margin-left: .5em; } ul { - margin-left: 1em; + margin: 3px 0 -3px 1em; } } } - } .brand-logo-container { @@ -678,9 +755,10 @@ div.note { margin-top: 50px; display: grid; justify-items: center; + padding: 12px 16px; img { - max-height: 67px; + max-height: 64px; } a.my img { @@ -689,6 +767,18 @@ div.note { } } + +.codeowner-avatar { + position: relative; + width: 48px; + height: 48px; + border-radius: 24px; + vertical-align: middle; + margin: 4px 8px 4px 0; + border: 2px solid rgba(0,0,0,.1); +} + + lite-youtube { position: relative; display: block; @@ -763,14 +853,18 @@ twitter-widget, // Configuration variables div.config-vars { - padding-bottom: 16px; + background: $white; + border: 1px solid rgba(0, 0, 0, 0.12); + padding: 24px; + border-radius: 16px; - h3 { - margin-bottom: 0; + h3, h4 { + margin: 0; } .configuration-link { font-size: 13px; + margin-bottom: 24px; a { color: #8792a2; @@ -783,6 +877,15 @@ div.config-vars { border-bottom: 1px solid #d9dbde; padding-top: 16px; padding-bottom: 16px; + + &:first-child { + padding-top: 0; + } + + &:last-child { + border: none; + padding-bottom: 0; + } } .nested .config-vars-item:last-child { @@ -792,16 +895,14 @@ div.config-vars { .config-vars-label { padding-bottom: 4px; position: relative; - + + a.title-link { + text-decoration: none; + } &:hover a.title-link::before { - position: absolute; - top: 5px; - left: -25px; - padding-right: 40px; - font-family: "FontAwesome"; - font-size: 15px; + margin-left: 4px; color: #999; - content: ""; + content: "\00B6"; /* pilcrow */ } } @@ -858,10 +959,11 @@ div.config-vars { code { font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.8em; - color: #1990b8; + color: $primary-color; word-spacing: normal; word-break: normal; word-wrap: normal; + overflow-wrap: break-word; -moz-tab-size: 4; -o-tab-size: 4; @@ -880,9 +982,12 @@ code { background-attachment: local; border: 1px solid #ddd; - border-radius: 0.4em; + border-radius: 16px; padding: 0.1em 0.4em; } +pre[class*="language-"]:before, pre[class*="language-"]:after { + box-shadow: none; +} @media only screen and (max-width: $menu-collapse) { @@ -942,3 +1047,9 @@ a.my { top: -100px; visibility: hidden; } + +.site-header { + position: fixed; + width: 100%; + z-index: 999; +} \ No newline at end of file diff --git a/sass/oscailte/_variables.scss b/sass/homeassistant/_variables.scss similarity index 74% rename from sass/oscailte/_variables.scss rename to sass/homeassistant/_variables.scss index a0ecf4d54b3..6cf7d601c65 100644 --- a/sass/oscailte/_variables.scss +++ b/sass/homeassistant/_variables.scss @@ -5,7 +5,15 @@ $use-gridfix: true; // Fonts & Font Families $serif: Georgia, 'Times New Roman', Times, serif !default; -$sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif !default; +$sans-serif: "Instrument Sans", "Helvetica Neue", Helvetica, Arial, sans-serif !default; +$heading-font: "Figtree", "Helvetica Neue", Arial, sans-serif !default; + +$h1-size: 40px; +$h2-size: 28px; +$h3-size: 22px; +$h4-size: 19px; +$h5-size: 16px; +$h6-size: 14px; // Grays // ------------------------- @@ -53,12 +61,16 @@ $footer-height: 100px; $primary-color: $blue; $secondary-color: $green; // ------------------------- -$site-background: #F5F5F5; -$header-background: $white; -$footer-background: $header-background; +$site-background: #FBFBFB; +$header-background: rgba(251,251,251,.8); +$footer-background: #f2f4f9; $text-color: $grayDarker; $title-color: $primary-color; -$link-color: $primary-color; +$link-color: #007fa8; $button-color: $primary-color; $button-text: $white; $navigation-color: $link-color; + +$brand-round: 16px; +$brand-face: $heading-font; +$brand-color: $primary-color; diff --git a/sass/oscailte/aside/_github.scss b/sass/homeassistant/aside/_github.scss similarity index 100% rename from sass/oscailte/aside/_github.scss rename to sass/homeassistant/aside/_github.scss diff --git a/sass/oscailte/aside/_pinboard.scss b/sass/homeassistant/aside/_pinboard.scss similarity index 100% rename from sass/oscailte/aside/_pinboard.scss rename to sass/homeassistant/aside/_pinboard.scss diff --git a/sass/oscailte/aside/_recent_posts.scss b/sass/homeassistant/aside/_recent_posts.scss similarity index 100% rename from sass/oscailte/aside/_recent_posts.scss rename to sass/homeassistant/aside/_recent_posts.scss diff --git a/sass/oscailte/aside/_social.scss b/sass/homeassistant/aside/_social.scss similarity index 100% rename from sass/oscailte/aside/_social.scss rename to sass/homeassistant/aside/_social.scss diff --git a/sass/oscailte/base/_archive_list.scss b/sass/homeassistant/base/_archive_list.scss similarity index 100% rename from sass/oscailte/base/_archive_list.scss rename to sass/homeassistant/base/_archive_list.scss diff --git a/sass/oscailte/base/_footer.scss b/sass/homeassistant/base/_footer.scss similarity index 79% rename from sass/oscailte/base/_footer.scss rename to sass/homeassistant/base/_footer.scss index 56ded121310..e2f610367e5 100644 --- a/sass/oscailte/base/_footer.scss +++ b/sass/homeassistant/base/_footer.scss @@ -9,9 +9,7 @@ } body > footer, .page-content > footer { - @include box-shadow(0 0 3px rgba(0, 0, 0, 0.25)); background-color: $footer-background; - // height: $footer-height; margin-top: 3em; } diff --git a/sass/oscailte/base/_global.scss b/sass/homeassistant/base/_global.scss similarity index 55% rename from sass/oscailte/base/_global.scss rename to sass/homeassistant/base/_global.scss index 250abb31aa0..2e08a90a454 100644 --- a/sass/oscailte/base/_global.scss +++ b/sass/homeassistant/base/_global.scss @@ -1,3 +1,8 @@ +html { + overflow-y: auto; + scroll-snap-type: y proximity; +} + body, html { background-color: $site-background; color: $text-color; @@ -5,6 +10,32 @@ body, html { height: 100%; } +.page-content { + display: inline-block; + height: 100%; + margin-top: 0; + padding-top: 88px; + width: 100%; +} + +h1, h2, h3, h4, h5, h6 { + font-family: $heading-font; + font-weight: 650; + letter-spacing: -.005em; +} + +h1 {font-weight: 800;} +h3, h4 {font-weight: 700;} + +p, li { + letter-spacing: .005em; +} + +article.page header+p, p.lead { + line-height: 1.6; + font-size: 1.4rem; +} + a { color: $link-color; text-decoration: none; @@ -13,6 +44,22 @@ a { } } +a.external-link iconify-icon, +iconify-icon.external-link { + font-size: 1.0rem; + vertical-align: middle; + padding: 0 0 2px 3px; +} + +table { + table-layout: fixed; + width: 100%; + + th,td { + word-wrap: break-word; + } +} + .gist { font-size: 0.75em; } diff --git a/sass/oscailte/base/_grid.scss b/sass/homeassistant/base/_grid.scss similarity index 100% rename from sass/oscailte/base/_grid.scss rename to sass/homeassistant/base/_grid.scss diff --git a/sass/homeassistant/base/_header.scss b/sass/homeassistant/base/_header.scss new file mode 100644 index 00000000000..ab9e08a79be --- /dev/null +++ b/sass/homeassistant/base/_header.scss @@ -0,0 +1,63 @@ +body > header { + background-color: $header-background; + margin-bottom: 2em; + backdrop-filter: blur(24px); + + .site-title { + color: rgba(229, 229, 229, 0.8); + font-size: 1.7em; + font-weight: bold; + line-height: 2.5em; + } + + .release-date { + font-size: 10px; + margin: 29.5px 0 0; + padding: 0 4px 0 4px; + background: #e8edf0; + height: fit-content; + color: $link-color; + font-weight: 500; + border-radius: 4px; + letter-spacing: .025rem; + } + + &.dark { + background-color: rgba(255,255,255,0); + backdrop-filter: none; + // transition: background-color 1s; + + @media only screen and (min-width: $desk-start) { + .menu>li>a, .docsearch .DocSearch-Search-Icon { + color: $white; + } + } + + .ha-title { + .logo { + background-image: url('/images/home-assistant-logo-white.svg'); + } + } + } +} + + +.ha-title { + display: inline-flex; + height: 100%; + white-space: nowrap; + + .logo { + border-radius: 0; + width: 226px; + height: 32px; + margin-right: 10px; + background-image: url('/images/home-assistant-logo.svg'); + background-repeat: no-repeat; + background-size: contain; + } + + a>* { + vertical-align: middle; + } +} diff --git a/sass/oscailte/base/_navigation.scss b/sass/homeassistant/base/_navigation.scss similarity index 80% rename from sass/oscailte/base/_navigation.scss rename to sass/homeassistant/base/_navigation.scss index 166e413ba1c..d1494a3e7d0 100644 --- a/sass/oscailte/base/_navigation.scss +++ b/sass/homeassistant/base/_navigation.scss @@ -76,6 +76,7 @@ $menu-collapse: 1024px; /* support for submenus */ ul.menu li { position: relative; + margin: 0; &:hover ul { display: block; @@ -90,6 +91,8 @@ ul.menu li { margin-left: 0; background-color: white; + border-radius: 16px; + box-shadow: 0 0 1px rgba(0,0,0,.5), 0 32px 64px rgba(0,0,0,.1); li { white-space: nowrap; @@ -97,8 +100,10 @@ ul.menu li { a { display: block; - padding: 20px 10px; + padding: 16px 16px; min-width: 150px; + margin: 8px; + border-radius: 8px; &:hover, &:focus { @@ -134,7 +139,7 @@ header .grid { .menu > li > a:hover, .menu > li > a:focus { background: $site-background; - box-shadow: inset 0px 5px $navigation-color; + box-shadow: inset 0px 5px $primary-color; color: $navigation-color; padding-bottom: 32px; } @@ -146,8 +151,9 @@ header .grid { @media only screen and (max-width: $menu-collapse) { .menu { background: $white; - border-top: 1px solid $navigation-color; - border-bottom: 4px solid $navigation-color; + box-shadow: 0px 64px 32px rgba(0,0,0,.1); + max-height: 100vh; + overflow-y: auto; } .menu, @@ -157,40 +163,42 @@ header .grid { } .menu li a { - padding: 15px 15px !important; + margin: 0 !important; + padding: 20px 24px !important; } .menu li a:hover, .menu li a:focus { background: $grayLighter; - box-shadow: inset 5px 0px $navigation-color; + box-shadow: inset 5px 0px $primary-color; padding: 15px 15px 15px 25px; } .toggle { position: absolute; - top: 15px; - right: 10px; + top: 17px; + right: 17px; } .toggle::after { - @include border-radius(2px); @include box-sizing(border-box); @include transition(all 0.5s linear); - font-family: "FontAwesome"; - content: "\f0c9"; + content: "☰"; display: inline-block; - width: 100%; - padding: 10px 15px; - background: $navigation-color; + width: 32px; + height: 32px; + padding: 4px 9px; + background: $primary-color; text-align: center; - font-size: 12px; + font-family: $sans-serif; + font-size: 16px; color: $white; white-space: nowrap; + border-radius: 24px; } .toggle:hover::after { - background: darken($navigation-color, 7%); + background: darken($primary-color, 25%); } #toggle:checked + .toggle::after { @@ -202,5 +210,7 @@ header .grid { display: block; position: relative; top: 0; + box-shadow: none; + margin-left: 24px; } } diff --git a/sass/oscailte/base/_post.scss b/sass/homeassistant/base/_post.scss similarity index 89% rename from sass/oscailte/base/_post.scss rename to sass/homeassistant/base/_post.scss index a93338fe6da..e590ade6517 100644 --- a/sass/oscailte/base/_post.scss +++ b/sass/homeassistant/base/_post.scss @@ -5,7 +5,7 @@ article { @extend .clearfix; border-left: 2px solid $primary-color; color: lighten($text-color, 15%); - font-family: $serif; + font-family: $sans-serif; font-size: 1.25em; font-style: italic; padding-left: 15px; @@ -35,7 +35,7 @@ article { color: $primary-color; content: "\201C"attr(data-pullquote) "\201D"; float: right; - font-family: $serif; + font-family: $sans-serif; font-size: 1.4em; font-style: italic; line-height: 1.45em; @@ -81,8 +81,7 @@ article { } .comments::before { - content: "\f075"; - font-family: "FontAwesome"; + content: "💬"; padding-right: 3px; } } @@ -91,14 +90,14 @@ article { &.listing { margin-bottom: 20px; h1 { - margin-bottom: 0; + margin-bottom: .5em; a { color: $title-color; text-decoration: none; } } .entry-content { - margin: 10px 0; + margin: 1em 0; } + hr { border: none; @@ -114,11 +113,10 @@ article { } } h1 { - margin-bottom: 0; + margin-bottom: 0.5em; } .meta { - border-bottom: 1px solid $primary-color; - margin-bottom: 20px; + margin-bottom: 3em; } } } diff --git a/sass/custom/_print.scss b/sass/homeassistant/base/_print.scss similarity index 100% rename from sass/custom/_print.scss rename to sass/homeassistant/base/_print.scss diff --git a/sass/homeassistant/base/_sidebar.scss b/sass/homeassistant/base/_sidebar.scss new file mode 100644 index 00000000000..d4af6318959 --- /dev/null +++ b/sass/homeassistant/base/_sidebar.scss @@ -0,0 +1,66 @@ +.aside-module { + .title { + border-bottom: 1px solid $blue; + color: $grayDark; + margin: 1em 0 0.5em; + padding-bottom: 5px; + + .btn { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + padding: 5px 10px; + text-decoration: none; + } + } + + .loading { + display: block; + font-size: 2em; + text-align: center; + } +} + +#sidebar { + position: sticky; + top: 88px; + max-height: calc(100vh - 104px); + overflow-y: auto; + scrollbar-width: none; + border-radius: 16px; + + .aside-module:last-child { + margin-bottom: 0; + } + + .grid { + position: fixed; + width: 350px; + display: contents; + .brand-logo-container { + margin-top: 16px; + } + } +} + +@media only screen and (max-width: $lap-end) { + #sidebar { + .grid { + position: initial; + width: 100%; + } + } + .site-header { + .pull-right { + position: fixed; + } + } + .hero { + > .grid-wrapper { + z-index: 0; + } + + img { + margin-bottom: 8px; + } + } +} diff --git a/sass/custom/_syntax.scss b/sass/homeassistant/base/_syntax.scss similarity index 100% rename from sass/custom/_syntax.scss rename to sass/homeassistant/base/_syntax.scss diff --git a/sass/homeassistant/external/_search.scss b/sass/homeassistant/external/_search.scss new file mode 100644 index 00000000000..9c26280b86a --- /dev/null +++ b/sass/homeassistant/external/_search.scss @@ -0,0 +1,35 @@ +.docsearch { + .DocSearch-Button { + @media only screen and (max-width: $lap-end) { + padding: 0px; + margin: 8px 24px; + } + + @media only screen and (min-width: $desk-start) { + padding: 0px; + margin-top: 16px; + margin-left: 8px; + margin-right: 0px; + } + + background: none; + + &:hover { + box-shadow: none; + } + } + .DocSearch-Button-Placeholder { + display: none; + } + .DocSearch-Button-Keys { + display: none; + } + .DocSearch-Search-Icon { + margin-right: 8px; + color: $link-color; + } +} + +.DocSearch-Container { + z-index: 1000; +} diff --git a/sass/oscailte/helpers/_classes.scss b/sass/homeassistant/helpers/_classes.scss similarity index 93% rename from sass/oscailte/helpers/_classes.scss rename to sass/homeassistant/helpers/_classes.scss index f0fb0cb3586..fd306cb455c 100644 --- a/sass/oscailte/helpers/_classes.scss +++ b/sass/homeassistant/helpers/_classes.scss @@ -54,12 +54,11 @@ ol { .btn { @include gradient-vertical; @include box-shadow(0 0 3px rgba(0, 0, 0, 0.25)); - border-radius: 3px; + border-radius: 24px; color: $button-text; display: inline-block; - padding: 7px 15px; + padding: 6px 20px 8px; text-decoration: none; - text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.25); &:hover { text-decoration: underline; } diff --git a/sass/oscailte/helpers/_grid-fix.scss b/sass/homeassistant/helpers/_grid-fix.scss similarity index 100% rename from sass/oscailte/helpers/_grid-fix.scss rename to sass/homeassistant/helpers/_grid-fix.scss diff --git a/sass/custom/_features.scss b/sass/homeassistant/homepage/_features.scss similarity index 89% rename from sass/custom/_features.scss rename to sass/homeassistant/homepage/_features.scss index f350f7245e3..ad044177616 100644 --- a/sass/custom/_features.scss +++ b/sass/homeassistant/homepage/_features.scss @@ -19,11 +19,9 @@ padding-bottom: 8px; height: 62px; - i { - height: 62px; - min-width: 62px; - text-align: center; - font-size: 39px; + iconify-icon { + font-size: 2.5rem; + margin-right: 8px; } } diff --git a/sass/homeassistant/homepage/_hero_unit.scss b/sass/homeassistant/homepage/_hero_unit.scss new file mode 100644 index 00000000000..757132ffc61 --- /dev/null +++ b/sass/homeassistant/homepage/_hero_unit.scss @@ -0,0 +1,137 @@ + +// Front page hero section + +.hero { + position: relative; + background: rgb(24,188,242); + background: linear-gradient(0deg, hsl(195, 89%, 52%) 0%, hsla(195, 89%, 52%, 0.8) 100%); + padding-bottom: 0; + margin-top: -88px; + margin-bottom: 24px; + padding-top: 88px; + overflow: hidden; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + max-height: 1080px; + height: 100vh; + align-content: center; + min-height: 720px; + // scroll-snap-align: start; + color: $white; + + > .grid-wrapper { + position: relative; + z-index: 7; + } + + h1 { + font-size: 6em; + line-height: .8; + background: linear-gradient(135deg, rgba(255, 255, 255, 1) 0%, hsl(174.86, 100%, 75%) 100%); + background-clip: text; + color: transparent; + + .line2 { + line-height: 1.25; + } + } + + p { + small { + color: $grayLighter; + font-size: .65em; + } + .lead { + font-size: 1.25rem; + margin-bottom: 24px; + } + } + + .hero-buttons a { + font-family: $heading-font; + font-size: 1.1rem; + color: white; + text-transform: uppercase; + white-space: nowrap; + display: inline-block; + font-weight: 600; + padding: 8px 24px 8px 0; + margin: 0 4px 0 0; + border-radius: 32px; + + &.primary { + background-color: $link-color; + font-size: 2rem; + font-weight: 700; + padding: 8px 24px; + margin-bottom: 16px; + } + } + + #HAdemoScreenshot { + display: none; + img { + display: block; + } + } + + #HAdemo { + width: 100%; + height: 800px; + border-radius: 48px; + border: 12px double white; + box-shadow: 24px 64px 64px hsla(220, 100%, 25%, .5); + // animation-name: box-shadow-color; + // animation-duration: 3s; + // animation-iteration-count: infinite; + // animation-direction: alternate; + + @media only screen and (max-height: 720px) { + border-bottom: 0; + margin-bottom: -8px; + border-radius: 48px 48px 0 0; + height: 640px; + + } + + } +} + +@keyframes box-shadow-color { + from { + box-shadow: 24px 64px 64px hsla(240, 100%, 25%, .5); + } + to { + box-shadow: 24px 64px 64px hsla(200, 100%, 25%, .5); + } +} + +@media only screen and (max-width: $lap-end) { + .hero { + h1 { + font-size: 4rem; + } + + .lead { + font-size: 1.15rem; + } + + .hero-buttons a { + &.primary { + font-size: 1.25rem; + } + } + } +} + +@media only screen and (max-width: $palm-end) { + .hero { + + #HAdemo { + display: none; + } + + #HAdemoScreenshot { + display: block; + } + } +} \ No newline at end of file diff --git a/sass/oscailte/homepage/_home.scss b/sass/homeassistant/homepage/_home.scss similarity index 95% rename from sass/oscailte/homepage/_home.scss rename to sass/homeassistant/homepage/_home.scss index 2b8228fd74e..9f6bad65d7c 100644 --- a/sass/oscailte/homepage/_home.scss +++ b/sass/homeassistant/homepage/_home.scss @@ -25,7 +25,6 @@ line-height: 3em; margin: 0; text-align: center; - text-transform: capitalize; + hr { margin: 0; diff --git a/sass/custom/_component_page.scss b/sass/homeassistant/pages/_component_page.scss similarity index 63% rename from sass/custom/_component_page.scss rename to sass/homeassistant/pages/_component_page.scss index 72c606c2c9b..a72c316feb4 100644 --- a/sass/custom/_component_page.scss +++ b/sass/homeassistant/pages/_component_page.scss @@ -1,4 +1,14 @@ #components-page { + .filter-button-group { + label { + font-size: .75rem; + font-weight: 500; + letter-spacing: .005em; + color: $gray; + text-transform: uppercase; + padding-top: 8px; + } + } .component-search { margin-bottom: 24px; @@ -7,44 +17,202 @@ padding: 10px; background-color: #fefefe; - border-radius: 2px; + border-radius: 8px; border: 1px solid; border-color: #7c7c7c #c3c3c3 #ddd; } } + select { + font-family: $sans-serif; + border: 0; + background-color: $grayLighter; + border-radius: 16px; + padding: 4px 16px; + } + .category_select { + display: none; + } } + +// styles for the cards +.hass-option-cards { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(192px, 1fr)); + + margin: -10px; // grid trick, has to match option-card's margin + + div.alert, p.alert-content { + width: 100%; + } + + .option-card { + flex: 0 0 auto; + min-width: 192px; + height: 192px; + display: inline-block; + background-color: #f8f8f8; + margin: 10px; + border-radius: 8px; + border: 1px solid rgba(0, 0, 0, .12); + padding: 8px; + text-align: center; + text-decoration: none; + align-content: center; + transition: box-shadow .33s; + + + .img-container { + height: 64px; + margin: 12px 16px; + font: 0/0 a; + border-radius: 0; + + &:before { + /* create a full-height inline block pseudo=element */ + content: " "; + display: inline-block; + vertical-align: middle; /* vertical alignment of the inline element */ + height: 100%; + } + + img { + max-width: 100%; + max-height: 64px; + box-shadow: none; + border: none; + border-radius: 0; + vertical-align: middle; + } + } + + .title { + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + + text-decoration: none; + font-size: 16px; + color: #000; + line-height: 1.25em; + height: 40px; + margin-top: 20px; + padding: 0 8px; + } + } + + // fade-in animation + &.show-items .option-card { + opacity: 0; + -webkit-animation: new-item-animation 0.2s linear forwards; + -o-animation: new-item-animation 0.2s linear forwards; + animation: new-item-animation 0.2s linear forwards; + } + + // fade-out animation + &.remove-items .option-card { + -webkit-animation: removed-item-animation 0.2s + cubic-bezier(0.55, -0.04, 0.91, 0.94) forwards; + -o-animation: removed-item-animation 0.2s + cubic-bezier(0.55, -0.04, 0.91, 0.94) forwards; + animation: removed-item-animation 0.2s cubic-bezier(0.55, -0.04, 0.91, 0.94) + forwards; + } +} + +a.option-card:hover { + z-index: 2; + box-shadow: 0 -2px 4px hsla(180, 100%, 50%, .05), 0 12px 24px hsla(207, 100%, 10%, 0.25); +} + +@for $i from 1 through 40 { + .option-card:nth-child(#{$i}) { + animation-delay: #{$i * 0.04}s !important; + } +} + + @media only screen and (max-width: $palm-end) { + .hass-option-cards { + .option-card { + width: calc(100% - 24px) !important; + flex-direction: row; + display: flex; + align-items: center; + height: 80px; + margin: 8px; + + .img-container { + margin: 8px; + + img { + max-width: 48px; + max-height: 48px; + } + } + + .title { + height: auto; + margin: 8px; + } + } + } #components-page { .hass-option-cards { + grid-template-columns: 1fr; .option-card { - width: 100%; + width: calc(50% - 24px); } } + .category_select { + display: block; + } + .category_list { + display: none; + } } } @media only screen and (max-width: $lap-end) { #components-page { .filter-button-group { + display: flex; + flex-wrap: wrap; margin-bottom: 16px; + align-items: flex-end; + + &>div { + margin-right: 8px; + } .btn { display: inline-block; - margin-right: 8px; - margin-bottom: 8px; + margin-right: 4px; + margin-bottom: 0; + padding: 4px 16px; + font-size: 1rem; + background: $grayLighter; + box-shadow: none; + color: $link-color; - &.current { - background-color: #3a5561; - background-image: linear-gradient(to bottom, #3a5561, #3f6b7d); + &.active { + font-weight: bold; } } } + .category_select { + display: block; + } + .category_list { + display: none; + } } } @media only screen and (min-width: $desk-start) { #components-page { + .filter-button-group { .active { font-weight: bold; @@ -69,6 +237,7 @@ box-shadow: none; text-shadow: none; padding: 2px; + border-radius: 0; &.current { font-weight: bold; @@ -78,102 +247,10 @@ } } -// styles for the cards -.hass-option-cards { - display: -ms-flexbox; - display: -webkit-box; - display: -webkit-flexbox; - display: -webkit-flex; - display: flex; - - flex-direction: row; - flex-wrap: wrap; - justify-content: flex-start; - align-items: flex-start; - margin: -4px; // grid trick, has to match option-card's margin - - p.note { - width: 100%; - } - - .option-card { - flex: 0 0 auto; - width: 210px; - height: 142px; - display: inline-block; - background-color: #fefefe; - margin: 4px; - border-radius: 8px; - border: 1px solid rgba(0, 0, 0, .12); - box-shadow: rgba(0,0,0,0.06) 0 0 10px; - padding: 8px; - text-align: center; - text-decoration: none; - - .img-container { - height: 50px; - margin: 12px 0; - font: 0/0 a; - - &:before { - /* create a full-height inline block pseudo=element */ - content: " "; - display: inline-block; - vertical-align: middle; /* vertical alignment of the inline element */ - height: 100%; - } - - img { - max-width: 100%; - max-height: 50px; - box-shadow: none; - border: none; - vertical-align: middle; - } - } - - .title { - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - overflow: hidden; - - text-decoration: none; - font-size: 18px; - color: #000; - line-height: 1.3em; - height: 2.6em; - margin-top: 20px; - } - } - - // fade-in animation - &.show-items .option-card { - opacity: 0; - -webkit-animation: new-item-animation 0.2s linear forwards; - -o-animation: new-item-animation 0.2s linear forwards; - animation: new-item-animation 0.2s linear forwards; - } - - // fade-out animation - &.remove-items .option-card { - -webkit-animation: removed-item-animation 0.2s - cubic-bezier(0.55, -0.04, 0.91, 0.94) forwards; - -o-animation: removed-item-animation 0.2s - cubic-bezier(0.55, -0.04, 0.91, 0.94) forwards; - animation: removed-item-animation 0.2s cubic-bezier(0.55, -0.04, 0.91, 0.94) - forwards; - } -} - // animations for fade-in and fade-out effects of option-cards @keyframes new-item-animation { from { opacity: 0; - -webkit-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - transform: scale(0); } to { opacity: 1; @@ -186,8 +263,6 @@ @-webkit-keyframes new-item-animation { from { opacity: 0; - -webkit-transform: scale(0); - transform: scale(0); } to { opacity: 1; @@ -198,8 +273,6 @@ @-o-keyframes new-item-animation { from { opacity: 0; - -o-transform: scale(0); - transform: scale(0); } to { opacity: 1; @@ -236,10 +309,6 @@ transform: scale(1); } to { - -webkit-transform: scale(0); - -ms-transform: scale(0); - -o-transform: scale(0); - transform: scale(0); opacity: 0; } } @@ -250,8 +319,6 @@ transform: scale(1); } to { - -webkit-transform: scale(0); - transform: scale(0); opacity: 0; } } @@ -262,8 +329,6 @@ transform: scale(1); } to { - -o-transform: scale(0); - transform: scale(0); opacity: 0; } } diff --git a/sass/custom/_getting_started.scss b/sass/homeassistant/pages/_getting_started.scss similarity index 98% rename from sass/custom/_getting_started.scss rename to sass/homeassistant/pages/_getting_started.scss index 85a35ec3c51..c088c200a13 100644 --- a/sass/custom/_getting_started.scss +++ b/sass/homeassistant/pages/_getting_started.scss @@ -1,8 +1,4 @@ #getting_started { - .intro { - padding-bottom: 16px; - font-size: 24px; - } .installations { .label { diff --git a/sass/custom/_landingpage.scss b/sass/homeassistant/pages/_landingpage.scss similarity index 99% rename from sass/custom/_landingpage.scss rename to sass/homeassistant/pages/_landingpage.scss index 387a933e319..5309612b7ba 100644 --- a/sass/custom/_landingpage.scss +++ b/sass/homeassistant/pages/_landingpage.scss @@ -4,8 +4,6 @@ $ha__primary_color: #03a9f4; #landingpage { $landingpage__hero_height: 670px; - font-family: Roboto, "Helvetica Neue", Helvetica, Arial, sans-serif; - .site-header { .grid-wrapper { max-width: 1100px !important; diff --git a/sass/homeassistant/plugins/_alert.scss b/sass/homeassistant/plugins/_alert.scss new file mode 100644 index 00000000000..39e6e115088 --- /dev/null +++ b/sass/homeassistant/plugins/_alert.scss @@ -0,0 +1,55 @@ +div.alert { + position: relative; + + background: #e7f2fa; + + padding: 20px 24px 20px 24px; + margin-bottom: 24px; + border-radius: 16px; + + p { + margin-bottom: 0px; + &.alert-title { + font-weight: bold; + line-height: 1.5em; + } + &.alert-content { + padding: 6px; + } + } + + &.alert-note { + p.alert-title { + color: #6ab0de; + } + background-color: #e7f2fa; + } + + &.alert-tip { + p.alert-title { + color: #4caf50; + } + background-color: #e6f4ea; + } + + &.alert-important { + p.alert-title { + color: #7e57c2; + } + background-color: #ede7f6; + } + + &.alert-warning { + p.alert-title { + color: rgb(187, 185, 13); + } + background-color: #f7f9e1; + } + + &.alert-caution { + p.alert-title { + color: #d32f2f; + } + background-color: #fdecea; + } +} diff --git a/sass/custom/_details.scss b/sass/homeassistant/plugins/_details.scss similarity index 69% rename from sass/custom/_details.scss rename to sass/homeassistant/plugins/_details.scss index a6117b1246c..6d46cf2f6f5 100644 --- a/sass/custom/_details.scss +++ b/sass/homeassistant/plugins/_details.scss @@ -4,12 +4,11 @@ div.details-block { margin: 0 0 1.5em 0; .details-block-item { - background-color: white; - padding: 4px 16px; - margin: 8px; + background-color: #f8f8f8; + padding: 4px 24px; + margin: 8px 0; border: 1px solid rgba(0, 0, 0, .12); - box-shadow: rgba(0,0,0,0.06) 0 0 10px; - border-radius: 8px; + border-radius: 16px; .details-block-title { font-weight: bold; @@ -20,12 +19,13 @@ div.details-block { justify-content: space-between; display: flex; align-items: center; - background-color: white; + background-color: #f8f8f8; border: 0px; width: 100%; + padding: 0; } .details-block-content { - margin: 4px 32px 12px 0; + margin: 4px 0 12px 0; } } } diff --git a/sass/homeassistant/plugins/_integration_alert.scss b/sass/homeassistant/plugins/_integration_alert.scss new file mode 100644 index 00000000000..ce15b189210 --- /dev/null +++ b/sass/homeassistant/plugins/_integration_alert.scss @@ -0,0 +1,34 @@ +.integration-alert-container { + margin: 0; +} + +a.integration-alert { + margin: 1em 0; + background-color: wheat; + padding: 16px 24px; + text-decoration: none !important; + display: flex; + align-items: center; + color: black; + border-radius: 16px; + + svg { + width: 24px; + margin-right: 8px; + } + + .content { + flex: 1; + } + + .learn-more { + font-weight: 600; + padding: 4px 12px; + border-radius: 16px; + font-size: 0.8em; + + &:hover { + background-color: rgba(0, 0, 0, 0.12); + } + } + } diff --git a/sass/custom/_tabbed_block.scss b/sass/homeassistant/plugins/_tabbed_block.scss similarity index 100% rename from sass/custom/_tabbed_block.scss rename to sass/homeassistant/plugins/_tabbed_block.scss diff --git a/sass/custom/_terminology_tooltip.scss b/sass/homeassistant/plugins/_terminology_tooltip.scss similarity index 100% rename from sass/custom/_terminology_tooltip.scss rename to sass/homeassistant/plugins/_terminology_tooltip.scss diff --git a/sass/oscailte/_oscailte.scss b/sass/oscailte/_oscailte.scss deleted file mode 100644 index 29a22ffcda7..00000000000 --- a/sass/oscailte/_oscailte.scss +++ /dev/null @@ -1,26 +0,0 @@ -@import "variables"; -@import "mixins"; - -@import "../inuitcss/_inuit"; -@import "../fontawesome/font-awesome"; - -@import "base/global"; -@import "base/grid"; -@import "base/header"; -@import "base/navigation"; -@import "base/footer"; -@import "base/post"; -@import "base/archive_list"; -@import "base/solarized"; - -@import "base/sidebar"; -@import "aside/recent_posts"; -@import "aside/github"; -@import "aside/pinboard"; -@import "aside/social"; - -@import "homepage/home"; -@import "homepage/hero_unit"; - -@import "helpers/classes"; -@import "helpers/grid-fix"; \ No newline at end of file diff --git a/sass/oscailte/base/_header.scss b/sass/oscailte/base/_header.scss deleted file mode 100644 index 08043bdac6a..00000000000 --- a/sass/oscailte/base/_header.scss +++ /dev/null @@ -1,12 +0,0 @@ -body > header { - @include box-shadow(0 0 3px rgba(0, 0, 0, 0.25)); - background-color: $header-background; - margin-bottom: 2em; - - .site-title { - color: $grayDarker; - font-size: 1.7em; - font-weight: bold; - line-height: 2.5em; - } -} \ No newline at end of file diff --git a/sass/oscailte/base/_sidebar.scss b/sass/oscailte/base/_sidebar.scss deleted file mode 100644 index ea35944aef5..00000000000 --- a/sass/oscailte/base/_sidebar.scss +++ /dev/null @@ -1,46 +0,0 @@ -// #sidebar { -// .title { -// border-bottom: 1px solid $blue; -// color: $grayDark; -// margin: 1em 0 0.5em; -// padding-bottom: 5px; -// } -// .social { -// ul { -// @include content-columns(2, 10px); -// } -// } - -// @media only screen and (min-width: $desk-start){ -// section:first-child { -// h3 {margin-top: 0;} -// } -// } -// } - -.aside-module { - @media only screen and (min-width: $desk-start){ - &:first-child { - .title {margin-top: 0;} - } - } - .title { - border-bottom: 1px solid $blue; - color: $grayDark; - margin: 1em 0 0.5em; - padding-bottom: 5px; - - .btn { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - padding: 5px 10px; - text-decoration: none; - } - } - - .loading { - display: block; - font-size: 2em; - text-align: center; - } -} \ No newline at end of file diff --git a/sass/oscailte/base/_solarized.scss b/sass/oscailte/base/_solarized.scss deleted file mode 100644 index 7924d26cb7e..00000000000 --- a/sass/oscailte/base/_solarized.scss +++ /dev/null @@ -1,333 +0,0 @@ -// // This file is just a butchered version of the one included in the default Octopress theme. -// // It could most definitely do with some cleaning up in the future. - -// @mixin selection($bg, $color: inherit, $text-shadow: none){ -// * { -// &::-moz-selection { background: $bg; color: $color; text-shadow: $text-shadow; } -// &::-webkit-selection { background: $bg; color: $color; text-shadow: $text-shadow; } -// &::selection { background: $bg; color: $color; text-shadow: $text-shadow; } -// } -// } - -// $base03: #002b36 !default; //darkest blue -// $base02: #073642 !default; //dark blue -// $base01: #586e75 !default; //darkest gray -// $base00: #657b83 !default; //dark gray -// $base0: #839496 !default; //medium gray -// $base1: #93a1a1 !default; //medium light gray -// $base2: #eee8d5 !default; //cream -// $base3: #fdf6e3 !default; //white -// $solar-yellow: #b58900 !default; -// $solar-orange: #cb4b16 !default; -// $solar-red: #dc322f !default; -// $solar-magenta: #d33682 !default; -// $solar-violet: #6c71c4 !default; -// $solar-blue: #268bd2 !default; -// $solar-cyan: #2aa198 !default; -// $solar-green: #859900 !default; - -// $solarized: dark !default; - -// @if $solarized == light { - -// $_base03: $base03; -// $_base02: $base02; -// $_base01: $base01; -// $_base00: $base00; -// $_base0: $base0; -// $_base1: $base1; -// $_base2: $base2; -// $_base3: $base3; - -// $base03: $_base3; -// $base02: $_base2; -// $base01: $_base1; -// $base00: $_base0; -// $base0: $_base00; -// $base1: $_base01; -// $base2: $_base02; -// $base3: $_base03; -// } - -// /* non highlighted code colors */ -// $pre-bg: $base03 !default; -// $pre-border: darken($base02, 5) !default; -// $pre-color: $base1 !default; - -// $noise-bg: image-url('noise.png') top left !default; -// $sans: "Helvetica Neue", Arial, sans-serif !default; -// $mono: Menlo, Monaco, "Andale Mono", "lucida console", "Courier New", monospace !default; -// .sans { font-family: $sans; } -// .mono { font-family: $mono; } - -// .highlight { -// table {margin-bottom: 0;} -// .gutter, .code { -// padding: 0; -// } -// .gutter { -// .line-number { -// display: block; -// } -// } -// } - -// .highlight, html .gist .gist-file .gist-syntax .gist-highlight { -// table td.code { width: 100%; } -// border: 1px solid $pre-border !important; -// } -// .highlight .line-numbers, html .gist .gist-file .gist-syntax .highlight .line_numbers { -// text-align: right; -// font-size: 13px; -// line-height: 1.45em; -// @if $solarized == light { -// background: lighten($base03, 1) $noise-bg !important; -// border-right: 1px solid darken($base02, 2) !important; -// @include box-shadow(lighten($base03, 2) -1px 0 inset); -// text-shadow: lighten($base02, 2) 0 -1px; -// } @else { -// background: $base02 $noise-bg !important; -// border-right: 1px solid darken($base03, 2) !important; -// @include box-shadow(lighten($base02, 2) -1px 0 inset); -// text-shadow: darken($base02, 10) 0 -1px; -// } -// span { color: $base01 !important; } -// padding: .8em !important; -// @include border-radius(0); -// } - -// figure.code, .gist-file, pre { -// @include box-shadow(rgba(#000, .06) 0 0 10px); -// .highlight pre { @include box-shadow(none); } -// } - -// .gist .highlight, figure.code .highlight { -// @include selection(adjust-color($base03, $lightness: 23%, $saturation: -65%), $text-shadow: $base03 0 1px); -// } -// html .gist .gist-file { -// margin-bottom: 1.8em; -// position: relative; -// border: none; -// padding-top: image-height("code_bg.png") !important; -// .highlight { -// margin-bottom: 0; -// } -// .gist-syntax { -// border-bottom: 0 !important; -// background: none !important; -// .gist-highlight { -// background: $base03 !important; -// } -// .highlight pre { -// @extend .pre-code; -// padding: 0; -// } -// } -// .gist-meta { -// padding: .6em 0.8em; -// border: 1px solid lighten($base02, 2) !important; -// color: $base01; -// font-size: .7em !important; -// @if $solarized == light { -// background: lighten($base03, 2) $noise-bg; -// border: 1px solid $pre-border !important; -// border-top: 1px solid lighten($base03, 2) !important; -// } @else { -// background: $base02 $noise-bg; -// } -// @extend .sans; -// line-height: 1.5em; -// a { -// color: mix($base1, $base01) !important; -// &:hover { color: $base1 !important; } -// } -// a[href*='#file'] { -// position: absolute; top: 0; left:0; right:-10px; -// color: #474747 !important; -// @extend .code-title; -// &:hover { color: $link-color !important; } -// } -// a[href*=raw]{ -// @extend .download-source; -// top: .4em; -// } -// } -// } -// pre { -// background: $pre-bg $noise-bg; -// @include border-radius(.4em); -// @extend .mono; -// border: 1px solid $pre-border; -// line-height: 1.45em; -// font-size: 13px; -// margin-bottom: 2.1em; -// padding: .8em 1em; -// color: $pre-color; -// overflow: auto; -// } -// h3.filename { -// @extend .code-title; -// + pre { @include border-radius(0px); } -// } - -// p, li { -// code { -// @extend .mono; -// display: inline-block; -// white-space: no-wrap; -// background: #fff; -// font-size: .8em; -// line-height: 1.5em; -// color: #555; -// border: 1px solid #ddd; -// @include border-radius(.4em); -// padding: 0 .3em; -// margin: -1px 0; -// } -// pre code { font-size: 1em !important; background: none; border: none; } -// } - -// .pre-code { -// font-family: $mono !important; -// overflow: scroll; -// overflow-y: hidden; -// display: block; -// padding: .8em; -// overflow-x: auto; -// line-height: 1.45em; -// background: $base03 $noise-bg !important; -// color: $base1 !important; -// span { color: $base1 !important; } -// span { font-style: normal !important; font-weight: normal !important; } - -// .c { color: $base01 !important; font-style: italic !important; } /* Comment */ -// .cm { color: $base01 !important; font-style: italic !important; } /* Comment.Multiline */ -// .cp { color: $base01 !important; font-style: italic !important; } /* Comment.Preproc */ -// .c1 { color: $base01 !important; font-style: italic !important; } /* Comment.Single */ -// .cs { color: $base01 !important; font-weight: bold !important; font-style: italic !important; } /* Comment.Special */ -// .err { color: $solar-red !important; background: none !important; } /* Error */ -// .k { color: $solar-orange !important; } /* Keyword */ -// .o { color: $base1 !important; font-weight: bold !important; } /* Operator */ -// .p { color: $base1 !important; } /* Operator */ -// .ow { color: $solar-cyan !important; font-weight: bold !important; } /* Operator.Word */ -// .gd { color: $base1 !important; background-color: mix($solar-red, $base03, 25%) !important; display: inline-block; } /* Generic.Deleted */ -// .gd .x { color: $base1 !important; background-color: mix($solar-red, $base03, 35%) !important; display: inline-block; } /* Generic.Deleted.Specific */ -// .ge { color: $base1 !important; font-style: italic !important; } /* Generic.Emph */ -// //.gr { color: #aa0000 } /* Generic.Error */ -// .gh { color: $base01 !important; } /* Generic.Heading */ -// .gi { color: $base1 !important; background-color: mix($solar-green, $base03, 20%) !important; display: inline-block; } /* Generic.Inserted */ -// .gi .x { color: $base1 !important; background-color: mix($solar-green, $base03, 40%) !important; display: inline-block; } /* Generic.Inserted.Specific */ -// //.go { color: #888888 } /* Generic.Output */ -// //.gp { color: #555555 } /* Generic.Prompt */ -// .gs { color: $base1 !important; font-weight: bold !important; } /* Generic.Strong */ -// .gu { color: $solar-violet !important; } /* Generic.Subheading */ -// //.gt { color: #aa0000 } /* Generic.Traceback */ -// .kc { color: $solar-green !important; font-weight: bold !important; } /* Keyword.Constant */ -// .kd { color: $solar-blue !important; } /* Keyword.Declaration */ -// .kp { color: $solar-orange !important; font-weight: bold !important; } /* Keyword.Pseudo */ -// .kr { color: $solar-magenta !important; font-weight: bold !important; } /* Keyword.Reserved */ -// .kt { color: $solar-cyan !important; } /* Keyword.Type */ -// .n { color: $solar-blue !important; } -// .na { color: $solar-blue !important; } /* Name.Attribute */ -// .nb { color: $solar-green !important; } /* Name.Builtin */ -// .nc { color: $solar-magenta !important;} /* Name.Class */ -// .no { color: $solar-yellow !important; } /* Name.Constant */ -// //.ni { color: #800080 } /* Name.Entity */ -// .nl { color: $solar-green !important; } -// .ne { color: $solar-blue !important; font-weight: bold !important; } /* Name.Exception */ -// .nf { color: $solar-blue !important; font-weight: bold !important; } /* Name.Function */ -// .nn { color: $solar-yellow !important; } /* Name.Namespace */ -// .nt { color: $solar-blue !important; font-weight: bold !important; } /* Name.Tag */ -// .nx { color: $solar-yellow !Important; } -// //.bp { color: #999999 } /* Name.Builtin.Pseudo */ -// //.vc { color: #008080 } /* Name.Variable.Class */ -// .vg { color: $solar-blue !important; } /* Name.Variable.Global */ -// .vi { color: $solar-blue !important; } /* Name.Variable.Instance */ -// .nv { color: $solar-blue !important; } /* Name.Variable */ -// //.w { color: #bbbbbb } /* Text.Whitespace */ -// .mf { color: $solar-cyan !important; } /* Literal.Number.Float */ -// .m { color: $solar-cyan !important; } /* Literal.Number */ -// .mh { color: $solar-cyan !important; } /* Literal.Number.Hex */ -// .mi { color: $solar-cyan !important; } /* Literal.Number.Integer */ -// //.mo { color: #009999 } /* Literal.Number.Oct */ -// .s { color: $solar-cyan !important; } /* Literal.String */ -// //.sb { color: #d14 } /* Literal.String.Backtick */ -// //.sc { color: #d14 } /* Literal.String.Char */ -// .sd { color: $solar-cyan !important; } /* Literal.String.Doc */ -// .s2 { color: $solar-cyan !important; } /* Literal.String.Double */ -// .se { color: $solar-red !important; } /* Literal.String.Escape */ -// //.sh { color: #d14 } /* Literal.String.Heredoc */ -// .si { color: $solar-blue !important; } /* Literal.String.Interpol */ -// //.sx { color: #d14 } /* Literal.String.Other */ -// .sr { color: $solar-cyan !important; } /* Literal.String.Regex */ -// .s1 { color: $solar-cyan !important; } /* Literal.String.Single */ -// //.ss { color: #990073 } /* Literal.String.Symbol */ -// //.il { color: #009999 } /* Literal.Number.Integer.Long */ -// div { .gd, .gd .x, .gi, .gi .x { display: inline-block; width: 100%; }} -// } - -// .highlight, .gist-highlight { -// pre { background: none; @include border-radius(0px); border: none; padding: 0; margin-bottom: 0; } -// margin-bottom: 1.8em; -// background: $base03; -// overflow-y: hidden; -// overflow-x: auto; -// } - -// $solar-scroll-bg: rgba(#fff, .15); -// $solar-scroll-thumb: rgba(#fff, .2); -// @if $solarized == light { -// $solar-scroll-bg: rgba(#000, .15); -// $solar-scroll-thumb: rgba(#000, .15); -// } - -// pre, .highlight, .gist-highlight { -// &::-webkit-scrollbar { height: .5em; background: $solar-scroll-bg; } -// &::-webkit-scrollbar-thumb:horizontal { background: $solar-scroll-thumb; -webkit-border-radius: 4px; border-radius: 4px } -// } - -// .highlight code { -// @extend .pre-code; background: #000; -// } -// figure.code { -// background: none; -// padding: 0; -// border: 0; -// margin-bottom: 1.5em; -// pre { margin-bottom: 0; } -// figcaption { -// position: relative; -// @extend .code-title; -// a { @extend .download-source; } -// } -// .highlight { -// margin-bottom: 0; -// } -// } - -// .code-title { -// text-align: center; -// font-size: 13px; -// line-height: 2em; -// text-shadow: #cbcccc 0 1px 0; -// color: #474747; -// font-weight: normal; -// margin-bottom: 0; -// @include border-radius(5px 5px 0 0); -// font-family: "Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", Lucida, sans-serif; -// background: #aaaaaa image-url("code_bg.png") top repeat-x; -// border: 1px solid #565656; -// border-top-color: #cbcbcb; -// border-left-color: #a5a5a5; -// border-right-color: #a5a5a5; -// border-bottom: 0; -// } - -// .download-source { -// position: absolute; right: .8em; -// color: #666 !important; -// z-index: 1; -// font-size: 13px; -// text-shadow: #cbcccc 0 1px 0; -// padding-left: 3em; -// } diff --git a/sass/oscailte/homepage/_hero_unit.scss b/sass/oscailte/homepage/_hero_unit.scss deleted file mode 100644 index ca41c37a588..00000000000 --- a/sass/oscailte/homepage/_hero_unit.scss +++ /dev/null @@ -1,75 +0,0 @@ -.hero { - background-color: rgb(11, 107, 148); - background-position: 0 50%; - -webkit-background-size: cover; - -moz-background-size: cover; - -o-background-size: cover; - background-size: cover; - border-bottom: 1px solid $white; - color: $white; - margin-top: -2em; - margin-bottom: 1.5em; - padding: 50px 0; - position: relative; - - // &::before { - // background: url("../images/matrix.png") 0 0 rgba(0, 0, 0, 0.35); - // box-shadow: inset 0 0 5px $black; - // content: ""; - // display: block; - // position: absolute; - // top: 0; right: 0; bottom: 0; left: 0; - // z-index: 5; - // } - - > .grid-wrapper { - position: relative; - z-index: 7; - } - - .credit { - font-size: 0.75em; - font-style: italic; - position: absolute; - bottom: 0; right: 10px; - z-index: 7; - a { - border-bottom: 1px solid; - color: $white; - text-decoration: none; - } - .licence { - border: none; - } - } - - .avatar { - @media only screen and (max-width: $lap-end){ - margin-bottom: 30px; - } - text-align: center; - img { - @include border-radius(100%); - border: 10px solid $primary-color; - } - } - - h1 { - font-size: 3.5em; - line-height: 1em; - text-shadow: 2px 2px 0 rgba(0, 0, 0, 0.75); - } - - hr { - @extend .divider; - box-shadow: 1px 1px 0 rgba(0, 0, 0, 0.75); - } - - p { - text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.75); - small { - color: $grayLighter; - font-size: .65em; - } - } -} \ No newline at end of file diff --git a/sass/partials/_archive.scss b/sass/partials/_archive.scss deleted file mode 100644 index 9ef1e824492..00000000000 --- a/sass/partials/_archive.scss +++ /dev/null @@ -1,72 +0,0 @@ -#archive { - #content > div { &, > article { padding-top: 0; } } -} -#blog-archives { - article { - padding: 1em 0 1em; - position: relative; - background: $img-border bottom left repeat-x; - &:last-child { - background: none; - } - footer { padding: 0; margin: 0;} - } - h1 { color: $text-color; margin-bottom: .3em; } - h2 { display: none; } - h1 { - font-size: 1.5em; - a { - @include hover-link; - color: inherit; - &:hover { color: $link-color-hover; } - font-weight: normal; - display: inline-block; - } - } - a.category, time { - @extend .sans; - color: $text-color-light; - } - color: $text-color-light; - .entry-content { display: none; } - time { - font-size: .9em; - line-height: 1.2em; - .month, .day { display: inline-block; } - .month { text-transform: uppercase; } - } - p { margin-bottom: 1em; } - &, .entry-content { a { @include link-colors(inherit, $link-color-hover); }} - a:hover { color: $link-color-hover; } - @media only screen and (min-width: 550px) { - article { margin-left: 5em; } - h2 { - margin-bottom: .3em; - font-weight: normal; - display: inline-block; - position: relative; top: -1px; - float: left; - &:first-child { padding-top: .75em; } - } - time { - position: absolute; - text-align: right; - left: 0em; - top: 1.8em; - } - .year { display: none; } - article { - padding:{left: 4.5em; bottom: .7em;} - } - a.category { - line-height: 1.1em; - } - } -} -#content > .category { - article { - margin-left: 0; - padding-left: 6.8em; - } - .year { display: inline; } -} diff --git a/sass/partials/_blog.scss b/sass/partials/_blog.scss deleted file mode 100644 index 57fe7a8aec1..00000000000 --- a/sass/partials/_blog.scss +++ /dev/null @@ -1,141 +0,0 @@ -article { - padding-top: 1em; - a { @extend .force-wrap; } - header { - position: relative; - padding-top: 2em; - padding-bottom: 1em; - margin-bottom: 1em; - background: $img-border bottom left repeat-x; - h1 { - margin: 0; - a { text-decoration: none; - &:hover { text-decoration: underline; } } - } - p { - font-size: .9em; - color: $text-color-light; - margin: 0; - &.meta { - @extend .sans; - text-transform: uppercase; - position: absolute; top: 0; - } - } - @media only screen and (min-width: 768px) { - margin-bottom: 1.5em; - padding-bottom: 1em; - background: $img-border bottom left repeat-x; - } - } - h2 { - padding-top: 0.8em; - background: $img-border top left repeat-x; - } - .entry-content & h2:first-child, header + h2 { padding-top: 0; } - h2:first-child, header + h2 { background: none; } - .feature { - padding-top: .5em; - margin-bottom: 1em; - padding-bottom: 1em; - background: $img-border bottom left repeat-x; - font-size: 2.0em; font-style: italic; - line-height: 1.3em; - } - img, video, .flash-video { - @extend .flex-content; - @extend .basic-alignment; - @include shadow-box; - } - video, .flash-video { margin: 0 auto 1.5em; } - video { display: block; width: 100%; } - .flash-video { - > div { - position: relative; - display: block; - padding-bottom: 56.25%; - padding-top: 1px; - height: 0; - overflow: hidden; - iframe, object, embed { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - } - } - } - > footer { - padding-bottom: 2.5em; - margin-top: 2em; - @extend .sans; - p.meta { - margin-bottom: .8em; - font-size: .85em; - clear: both; - overflow: hidden; - } - .byline + time:before, time +time:before, .comments:before, .byline ~ .categories:before { - @extend .separator; - } - } - -} -article + article { - .blog-index & { - background: $img-border top left repeat-x; - } -} -#content .blog-index { - padding: { top: 0; bottom: 0; } - article { padding-top: 2em; } - article header { background: none; padding-bottom: 0; } - article h1 { - font-size: 2.2em; - a { color: inherit; &:hover { color: $link-color-hover; } } - } - a[rel=full-article] { - background: darken($main-bg, 5); - display: inline-block; - padding: .4em .8em; - margin-right: .5em; - text-decoration: none; - color: mix($text-color, $text-color-light); - @extend .serif; - @include transition(background-color .5s); - &:hover { - background: $link-color-hover; - text-shadow: none; - color: $main-bg; - } - } - footer { - @extend .sans; - margin-top: 1em; - } -} - -.separator { - content: "\2022 "; - padding: 0 .4em 0 .2em; - display: inline-block; -} - -#content div.pagination { - text-align: center; - font-size: .95em; - position: relative; - background: $img-border top left repeat-x; - padding: {top: 1.5em; bottom: 1.5em;} - a { - text-decoration: none; - color: $text-color-light; - &.prev { position: absolute; left: 0; } - &.next { position: absolute; right: 0; } - &:hover { color: $link-color-hover; } - &[href*=archive] { - &:before, &:after { content: '\2014'; padding: 0 .3em; } - } - } -} diff --git a/sass/partials/_footer.scss b/sass/partials/_footer.scss deleted file mode 100644 index 37411225120..00000000000 --- a/sass/partials/_footer.scss +++ /dev/null @@ -1,19 +0,0 @@ -body > footer { - @extend .sans; - font-size: .8em; - color: $footer-color; - text-shadow: lighten($footer-bg, 5) 0 1px; - background-color: $footer-bg; - @include background($footer-bg-front, $footer-bg-back); - border-top: 1px solid $footer-border-top; - position: relative; - padding-top: 1em; - padding-bottom: 1em; - margin-bottom: 3em; - @include border-bottom-radius(.4em); - z-index: 1; - a { - @include link-colors($footer-link-color, $footer-link-color-hover, $visited: $footer-link-color); - } - p:last-child { margin-bottom: 0; } -} diff --git a/sass/partials/_header.scss b/sass/partials/_header.scss deleted file mode 100644 index 860e4c7bcec..00000000000 --- a/sass/partials/_header.scss +++ /dev/null @@ -1,18 +0,0 @@ -body > header { - background: $header-bg; - h1 { - display: inline-block; - margin: 0; - a, a:hover { - color: $title_color; - text-decoration: none; - } - } - h2 { - margin: .2em 0 0; - @extend .sans; - font-size: 1em; - color: $subtitle-color; - font-weight: normal; - } -} diff --git a/sass/partials/_navigation.scss b/sass/partials/_navigation.scss deleted file mode 100644 index 30fa011d18c..00000000000 --- a/sass/partials/_navigation.scss +++ /dev/null @@ -1,137 +0,0 @@ -body > nav { - position: relative; - background-color: $nav-bg; - @include background($nav-bg-front, $nav-bg-back); - border: { - top: 1px solid $nav-border-top; - bottom: 1px solid $nav-border-bottom; } - padding-top: .35em; - padding-bottom: .35em; - form { - @include background-clip(padding-box); - margin: 0; padding: 0; - .search { - padding: .3em .5em 0; - font-size: .85em; - font-family: $sans; - line-height: 1.1em; - width: 95%; - @include border-radius(.5em); - @include background-clip(padding-box); - @include box-shadow(lighten($nav-bg, 2) 0 1px); - background-color: lighten($nav-bg, 15); - border: 1px solid $nav-border; - color: #888; - &:focus { - color: #444; - border-color: #80b1df; - @include box-shadow(#80b1df 0 0 4px, #80b1df 0 0 3px inset); - background-color: #fff; - outline: none; - } - } - } - fieldset[role=search]{ float: right; width: 48%; } - fieldset.mobile-nav{ float: left; width: 48%; - select{ width: 100%; font-size: .8em; border: 1px solid #888;} - } - ul { display: none; } - @media only screen and (min-width: 550px) { - font-size: .9em; - ul { - @include horizontal-list(0); - float: left; - display: block; - padding-top: .15em; - } - ul.subscription { - margin-left: .8em; - float: right; - li:last-child a { padding-right: 0; } - } - ul li { - margin: 0; - } - a { - @include link-colors($nav-color, $nav-color-hover, $visited: $nav-color); - font-family: $sans; - text-shadow: lighten($nav-bg, 12) 0 1px; - float: left; - text-decoration: none; - font-size: 1.1em; - padding: .1em 0; - line-height: 1.5em; - } - li + li { - border-left: 1px solid $nav-border-left; - margin-left: .8em; - a { - padding-left: .8em; - border-left: 1px solid $nav-border-right; - } - } - form { - float: right; - text-align: left; - padding-left: .8em; - width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium + 20px; - .search { - width: 93%; - font-size: .95em; - line-height: 1.2em; - } - } - ul[data-subscription$=email] + form { - width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium - 58px; - .search { width: 91%; } - } - fieldset.mobile-nav { display: none; } - fieldset[role=search]{ width: 99%; } - } - @media only screen and (min-width: 992px) { - form { - width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 + 10px; - } - ul[data-subscription$=email] + form { - width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 - 58px; - } - } -} -.no-placeholder { - body > nav .search { - background: lighten($nav-bg, 15) image-url('search.png') .3em .25em no-repeat; - text-indent: 1.3em; - } -} -@mixin mask-subscription-nav($feed: 'rss.png'){ - position: relative; top: 0px; - text-indent: -999999em; - background-color: $nav-border-right; - border: 0; - padding: 0; - &,&:after { @include mask-image($feed); } - &:after { - content: ""; - position: absolute; top: -1px; left: 0; - background-color: lighten($nav-color, 25); - } - &:hover:after { background-color: lighten($nav-color, 20); } -} -.maskImage { - body > nav { - @media only screen and (min-width: 550px) { - ul[data-subscription$=email] + form { - width: $sidebar-width-medium - $pad-medium*2 - $sidebar-pad-medium - 32px; - } - } - @media only screen and (min-width: 992px) { - ul[data-subscription$=email] + form { - width: $sidebar-width-wide - $pad-wide - $sidebar-pad-wide*2 - 32px; - } - } - } - ul.subscription { position: relative; top: .2em; li, a { border: 0; padding: 0; }} - a[rel=subscribe-rss]{ @include mask-subscription-nav('rss.png'); } - a[rel=subscribe-email]{ @include mask-subscription-nav('email.png'); } -} - diff --git a/sass/partials/_sharing.scss b/sass/partials/_sharing.scss deleted file mode 100644 index 1fa9775026f..00000000000 --- a/sass/partials/_sharing.scss +++ /dev/null @@ -1,6 +0,0 @@ -.sharing { - p.meta + & { - padding: { top: 1em; left: 0; } - background: $img-border top left repeat-x; - } -} diff --git a/sass/partials/_sidebar.scss b/sass/partials/_sidebar.scss deleted file mode 100644 index fa15d759709..00000000000 --- a/sass/partials/_sidebar.scss +++ /dev/null @@ -1,3 +0,0 @@ -@import "sidebar/base"; -@import "sidebar/pinboard"; -@import "sidebar/delicious"; diff --git a/sass/partials/_syntax.scss b/sass/partials/_syntax.scss deleted file mode 100644 index 416de7fb678..00000000000 --- a/sass/partials/_syntax.scss +++ /dev/null @@ -1,261 +0,0 @@ -.highlight, html .gist .gist-file .gist-syntax .gist-highlight { - table td.code { width: 100%; } - border: 1px solid $pre-border !important; -} -.highlight .line-numbers, html .gist .gist-file .gist-syntax .highlight .line_numbers { - text-align: right; - font-size: 13px; - line-height: 1.45em; - @if $solarized == light { - background: lighten($base03, 1) $noise-bg !important; - border-right: 1px solid darken($base02, 2) !important; - @include box-shadow(lighten($base03, 2) -1px 0 inset); - text-shadow: lighten($base02, 2) 0 -1px; - } @else { - background: $base02 $noise-bg !important; - border-right: 1px solid darken($base03, 2) !important; - @include box-shadow(lighten($base02, 2) -1px 0 inset); - text-shadow: darken($base02, 10) 0 -1px; - } - span { color: $base01 !important; } - padding: .8em !important; - @include border-radius(0); -} - -figure.code, .gist-file, pre { - @include box-shadow(rgba(#000, .06) 0 0 10px); - .highlight pre { @include box-shadow(none); } -} - -.gist .highlight, figure.code .highlight { - @include selection(adjust-color($base03, $lightness: 23%, $saturation: -65%), $text-shadow: $base03 0 1px); -} -html .gist .gist-file { - margin-bottom: 1.8em; - position: relative; - border: none; - padding-top: image-height("code_bg.png") !important; - .highlight { - margin-bottom: 0; - } - .gist-syntax { - border-bottom: 0 !important; - background: none !important; - .gist-highlight { - background: $base03 !important; - } - .highlight pre { - @extend .pre-code; - padding: 0; - } - } - .gist-meta { - padding: .6em 0.8em; - border: 1px solid lighten($base02, 2) !important; - color: $base01; - font-size: .7em !important; - @if $solarized == light { - background: lighten($base03, 2) $noise-bg; - border: 1px solid $pre-border !important; - border-top: 1px solid lighten($base03, 2) !important; - } @else { - background: $base02 $noise-bg; - } - @extend .sans; - line-height: 1.5em; - a { - color: mix($base1, $base01) !important; - @include hover-link; - &:hover { color: $base1 !important; } - } - a[href*='#file'] { - position: absolute; top: 0; left:0; right:-10px; - color: #474747 !important; - @extend .code-title; - &:hover { color: $link-color !important; } - } - a[href*=raw]{ - @extend .download-source; - top: .4em; - } - } -} -pre { - background: $pre-bg $noise-bg; - @include border-radius(.4em); - @extend .mono; - border: 1px solid $pre-border; - line-height: 1.45em; - font-size: 13px; - margin-bottom: 2.1em; - padding: .8em 1em; - color: $pre-color; - overflow: auto; -} -h3.filename { - @extend .code-title; - + pre { @include border-top-radius(0px); } -} - -p, li { - code { - @extend .mono; - display: inline-block; - white-space: no-wrap; - background: #fff; - font-size: .8em; - line-height: 1.5em; - color: #555; - border: 1px solid #ddd; - @include border-radius(.4em); - padding: 0 .3em; - margin: -1px 0; - } - pre code { font-size: 1em !important; background: none; border: none; } -} - -.pre-code { - font-family: $mono !important; - overflow: scroll; - overflow-y: hidden; - display: block; - padding: .8em; - overflow-x: auto; - line-height: 1.45em; - background: $base03 $noise-bg !important; - color: $base1 !important; - span { color: $base1 !important; } - span { font-style: normal !important; font-weight: normal !important; } - - .c { color: $base01 !important; font-style: italic !important; } /* Comment */ - .cm { color: $base01 !important; font-style: italic !important; } /* Comment.Multiline */ - .cp { color: $base01 !important; font-style: italic !important; } /* Comment.Preproc */ - .c1 { color: $base01 !important; font-style: italic !important; } /* Comment.Single */ - .cs { color: $base01 !important; font-weight: bold !important; font-style: italic !important; } /* Comment.Special */ - .err { color: $solar-red !important; background: none !important; } /* Error */ - .k { color: $solar-orange !important; } /* Keyword */ - .o { color: $base1 !important; font-weight: bold !important; } /* Operator */ - .p { color: $base1 !important; } /* Operator */ - .ow { color: $solar-cyan !important; font-weight: bold !important; } /* Operator.Word */ - .gd { color: $base1 !important; background-color: mix($solar-red, $base03, 25%) !important; display: inline-block; } /* Generic.Deleted */ - .gd .x { color: $base1 !important; background-color: mix($solar-red, $base03, 35%) !important; display: inline-block; } /* Generic.Deleted.Specific */ - .ge { color: $base1 !important; font-style: italic !important; } /* Generic.Emph */ - //.gr { color: #aa0000 } /* Generic.Error */ - .gh { color: $base01 !important; } /* Generic.Heading */ - .gi { color: $base1 !important; background-color: mix($solar-green, $base03, 20%) !important; display: inline-block; } /* Generic.Inserted */ - .gi .x { color: $base1 !important; background-color: mix($solar-green, $base03, 40%) !important; display: inline-block; } /* Generic.Inserted.Specific */ - //.go { color: #888888 } /* Generic.Output */ - //.gp { color: #555555 } /* Generic.Prompt */ - .gs { color: $base1 !important; font-weight: bold !important; } /* Generic.Strong */ - .gu { color: $solar-violet !important; } /* Generic.Subheading */ - //.gt { color: #aa0000 } /* Generic.Traceback */ - .kc { color: $solar-green !important; font-weight: bold !important; } /* Keyword.Constant */ - .kd { color: $solar-blue !important; } /* Keyword.Declaration */ - .kp { color: $solar-orange !important; font-weight: bold !important; } /* Keyword.Pseudo */ - .kr { color: $solar-magenta !important; font-weight: bold !important; } /* Keyword.Reserved */ - .kt { color: $solar-cyan !important; } /* Keyword.Type */ - .n { color: $solar-blue !important; } - .na { color: $solar-blue !important; } /* Name.Attribute */ - .nb { color: $solar-green !important; } /* Name.Builtin */ - .nc { color: $solar-magenta !important;} /* Name.Class */ - .no { color: $solar-yellow !important; } /* Name.Constant */ - //.ni { color: #800080 } /* Name.Entity */ - .nl { color: $solar-green !important; } - .ne { color: $solar-blue !important; font-weight: bold !important; } /* Name.Exception */ - .nf { color: $solar-blue !important; font-weight: bold !important; } /* Name.Function */ - .nn { color: $solar-yellow !important; } /* Name.Namespace */ - .nt { color: $solar-blue !important; font-weight: bold !important; } /* Name.Tag */ - .nx { color: $solar-yellow !Important; } - //.bp { color: #999999 } /* Name.Builtin.Pseudo */ - //.vc { color: #008080 } /* Name.Variable.Class */ - .vg { color: $solar-blue !important; } /* Name.Variable.Global */ - .vi { color: $solar-blue !important; } /* Name.Variable.Instance */ - .nv { color: $solar-blue !important; } /* Name.Variable */ - //.w { color: #bbbbbb } /* Text.Whitespace */ - .mf { color: $solar-cyan !important; } /* Literal.Number.Float */ - .m { color: $solar-cyan !important; } /* Literal.Number */ - .mh { color: $solar-cyan !important; } /* Literal.Number.Hex */ - .mi { color: $solar-cyan !important; } /* Literal.Number.Integer */ - //.mo { color: #009999 } /* Literal.Number.Oct */ - .s { color: $solar-cyan !important; } /* Literal.String */ - //.sb { color: #d14 } /* Literal.String.Backtick */ - //.sc { color: #d14 } /* Literal.String.Char */ - .sd { color: $solar-cyan !important; } /* Literal.String.Doc */ - .s2 { color: $solar-cyan !important; } /* Literal.String.Double */ - .se { color: $solar-red !important; } /* Literal.String.Escape */ - //.sh { color: #d14 } /* Literal.String.Heredoc */ - .si { color: $solar-blue !important; } /* Literal.String.Interpol */ - //.sx { color: #d14 } /* Literal.String.Other */ - .sr { color: $solar-cyan !important; } /* Literal.String.Regex */ - .s1 { color: $solar-cyan !important; } /* Literal.String.Single */ - //.ss { color: #990073 } /* Literal.String.Symbol */ - //.il { color: #009999 } /* Literal.Number.Integer.Long */ - div { .gd, .gd .x, .gi, .gi .x { display: inline-block; width: 100%; }} -} - -.highlight, .gist-highlight { - pre { background: none; @include border-radius(0px); border: none; padding: 0; margin-bottom: 0; } - margin-bottom: 1.8em; - background: $base03; - overflow-y: hidden; - overflow-x: auto; -} - -$solar-scroll-bg: rgba(#fff, .15); -$solar-scroll-thumb: rgba(#fff, .2); -@if $solarized == light { - $solar-scroll-bg: rgba(#000, .15); - $solar-scroll-thumb: rgba(#000, .15); -} - -pre, .highlight, .gist-highlight { - &::-webkit-scrollbar { height: .5em; background: $solar-scroll-bg; } - &::-webkit-scrollbar-thumb:horizontal { background: $solar-scroll-thumb; -webkit-border-radius: 4px; border-radius: 4px } -} - -.highlight code { - @extend .pre-code; background: #000; -} -figure.code { - background: none; - padding: 0; - border: 0; - margin-bottom: 1.5em; - pre { margin-bottom: 0; } - figcaption { - position: relative; - @extend .code-title; - a { @extend .download-source; } - } - .highlight { - margin-bottom: 0; - } -} - -.code-title { - text-align: center; - font-size: 13px; - line-height: 2em; - text-shadow: #cbcccc 0 1px 0; - color: #474747; - font-weight: normal; - margin-bottom: 0; - @include border-top-radius(5px); - font-family: "Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", Lucida, sans-serif; - background: #aaaaaa image-url("code_bg.png") top repeat-x; - border: 1px solid #565656; - border-top-color: #cbcbcb; - border-left-color: #a5a5a5; - border-right-color: #a5a5a5; - border-bottom: 0; -} - -.download-source { - position: absolute; right: .8em; - @include hover-link; - color: #666 !important; - z-index: 1; - font-size: 13px; - text-shadow: #cbcccc 0 1px 0; - padding-left: 3em; -} diff --git a/sass/partials/sidebar/_base.scss b/sass/partials/sidebar/_base.scss deleted file mode 100644 index 5441304e279..00000000000 --- a/sass/partials/sidebar/_base.scss +++ /dev/null @@ -1,106 +0,0 @@ -.side-shadow-border { - @include box-shadow(lighten($sidebar-bg, 5) 0 1px); -} -aside.sidebar { - overflow: hidden; - color: $sidebar-color; - text-shadow: lighten($sidebar-bg, 8) 0 1px; - a { @extend .force-wrap; } - section { - @extend .sans; - font-size: .8em; - line-height: 1.4em; - margin-bottom: 1.5em; - h1 { - margin: 1.5em 0 0; - padding-bottom: .2em; - border-bottom: 1px solid $sidebar-border; - @extend .side-shadow-border; - + p { - padding-top: .4em; - } - } - } - img { - @extend .flex-content; - @extend .basic-alignment; - @include shadow-box($border: #fff .3em solid); - } - ul { - margin-bottom: 0.5em; - margin-left: 0; - } - li { - list-style: none; - padding: .5em 0; - margin: 0; - border-bottom: 1px solid $sidebar-border; - @extend .side-shadow-border; - p:last-child { - margin-bottom: 0; - } - } - a { - color: inherit; - @include transition(color .5s); - } - &:hover a { - color: $sidebar-link-color; - &:hover { color: $sidebar-link-color-hover; } - } -} -.aside-alt-link { - color: $sidebar-link-color-subdued; - &:hover { - color: $sidebar-link-color-subdued-hover; - } -} - -@media only screen and (min-width: 768px) { - .toggle-sidebar { - outline: none; - position: absolute; right: -10px; top: 0; bottom: 0; - display: inline-block; - text-decoration: none; - color: mix($text-color-light, $sidebar-bg); - width: 9px; - cursor: pointer; - &:hover { - background: mix($sidebar-border, $sidebar-bg); - @include background(linear-gradient(left, rgba($sidebar-border, .5), rgba($sidebar-border, 0))); - } - &:after { - position: absolute; right: -11px; top: 0; - width: 20px; - font-size: 1.2em; - line-height: 1.1em; - padding-bottom: .15em; - @include border-bottom-right-radius(.3em); - text-align: center; - background: $main-bg $noise-bg; - border-bottom: 1px solid $sidebar-border; - border-right: 1px solid $sidebar-border; - content: "\00BB"; - text-indent: -1px; - } - .collapse-sidebar & { - text-indent: 0px; - right: -20px; - width: 19px; - &:hover { - background: mix($sidebar-border, $sidebar-bg); - } - &:after { - border-left: 1px solid $sidebar-border; - text-shadow: #fff 0 1px; - content: "\00AB"; - left: 0px; right: 0; - text-align: center; - text-indent: 0; - border: 0; - border-right-width: 0; - background: none; - } - } - } -} diff --git a/sass/partials/sidebar/_delicious.scss b/sass/partials/sidebar/_delicious.scss deleted file mode 100644 index e962702e5fa..00000000000 --- a/sass/partials/sidebar/_delicious.scss +++ /dev/null @@ -1,4 +0,0 @@ -.delicious-posts { - a.delicious-link { margin-bottom: .5em; display: block; } - p { font-size: 1em; } -} diff --git a/sass/partials/sidebar/_pinboard.scss b/sass/partials/sidebar/_pinboard.scss deleted file mode 100644 index 9f9ab46114d..00000000000 --- a/sass/partials/sidebar/_pinboard.scss +++ /dev/null @@ -1,12 +0,0 @@ -#pinboard_linkroll { - .pin-title, .pin-description { - display: block; - margin-bottom: .5em; - } - .pin-tag { - @include hover-link; - @extend .aside-alt-link; - &:after { content: ','; } - &:last-child:after { content: ''; } - } -} diff --git a/sass/plugins/_plugins.scss b/sass/plugins/_plugins.scss deleted file mode 100644 index 25af026ba02..00000000000 --- a/sass/plugins/_plugins.scss +++ /dev/null @@ -1,6 +0,0 @@ -/* - Add plugin stylesheets to this directory and they will be automatically - Imported. Load order is alphabetical and styles can be overridden in - custom/_style.scss which is loaded after all plugin stylesheets. -*/ - diff --git a/sass/screen.scss b/sass/screen.scss index 5c4f3818c27..ff2a26ad172 100644 --- a/sass/screen.scss +++ b/sass/screen.scss @@ -1,12 +1 @@ -@import 'oscailte/oscailte'; -@import 'custom/paulus'; -@import 'custom/landingpage'; -@import 'custom/features'; -@import 'custom/component_page'; -@import 'custom/syntax'; -@import 'custom/details'; -@import 'custom/print'; -@import 'custom/layout'; -@import 'custom/getting_started'; -@import 'custom/tabbed_block'; -@import 'custom/terminology_tooltip'; +@import 'homeassistant/homeassistant'; diff --git a/source/_dashboards/iframe.markdown b/source/_dashboards/iframe.markdown index b3d4df4d99d..089db8e9bb2 100644 --- a/source/_dashboards/iframe.markdown +++ b/source/_dashboards/iframe.markdown @@ -24,9 +24,10 @@ The webpage card is used on the [Webpage dashboard](/dashboards/dashboards/#webp All options for this card can be configured via the user interface. Note that not every webpage can be embedded due to security restrictions that some sites have in place. These restrictions are enforced by your browser and prevent embedding them into a Home Assistant dashboard. -<div class='note warning'> + +{% important %} You can't embed sites using HTTP if you are using HTTPS for your Home Assistant. -</div> +{% endimportant %} ## YAML configuration diff --git a/source/_dashboards/map.markdown b/source/_dashboards/map.markdown index 921b720db6a..005f1ab39cf 100644 --- a/source/_dashboards/map.markdown +++ b/source/_dashboards/map.markdown @@ -75,17 +75,15 @@ hours_to_show: default: 0 {% endconfiguration %} -<div class='note'> - Only entities that have latitude and longitude attributes will be displayed on the map. -</div> +{% important %} +Only entities that have latitude and longitude attributes will be displayed on the map. +{% endimportant %} -<div class="note"> - - The `default_zoom` value will be ignored if it is set higher than the current zoom level - after fitting all visible entity markers in the map window. In other words, this can only - be used to zoom the map _out_ by default. - -</div> +{% note %} +The `default_zoom` value will be ignored if it is set higher than the current zoom level +after fitting all visible entity markers in the map window. In other words, this can only +be used to zoom the map _out_ by default. +{% endnote %} ## Options for entities diff --git a/source/_dashboards/sections.markdown b/source/_dashboards/sections.markdown index c3ce04b8d17..640949a9e66 100644 --- a/source/_dashboards/sections.markdown +++ b/source/_dashboards/sections.markdown @@ -27,9 +27,10 @@ You can group cards without using horizontal or vertical stack cards. A fully populated dashboard in Sections view layout </p> -<div class='note notice'> - <p>The sections view was released beginning of March 2024 and is experimental! Do not build your daily dashboard on top of it yet! We are still collecting feedback.</p><br><p>It is not possible to migrate dashboards into sections view.</p> -</div> +{% note %} +The sections view was released beginning of March 2024 and is experimental! Do not build your daily dashboard on top of it yet! We are still collecting feedback.<br> +It is not possible to migrate dashboards into sections view. +{% endnote %} ## Creating a sections view diff --git a/source/_dashboards/weather-forecast.markdown b/source/_dashboards/weather-forecast.markdown index 2ef07499650..1f9b40edb8e 100644 --- a/source/_dashboards/weather-forecast.markdown +++ b/source/_dashboards/weather-forecast.markdown @@ -36,11 +36,10 @@ Theme: description: Name of any loaded theme to be used for this card. For more information about themes, see the [frontend documentation](/integrations/frontend/). {% endconfiguration_basic %} -<div class="note"> - - This card works only with platforms that define a `weather` entity. - - E.g., it works with [OpenWeatherMap](https://www.home-assistant.io/integrations/openweathermap/#weather) but not [OpenWeatherMap Sensor](https://www.home-assistant.io/integrations/openweathermap/#sensor) +{% important %} +This card works only with platforms that define a `weather` entity. +E.g., it works with [OpenWeatherMap](/integrations/openweathermap/#weather) but not [OpenWeatherMap Sensor](/integrations/openweathermap/#sensor) +{% endimportant %} </div> diff --git a/source/_docs/asterisk_mbox.markdown b/source/_docs/asterisk_mbox.markdown index b5ed08059c5..e91f229f961 100644 --- a/source/_docs/asterisk_mbox.markdown +++ b/source/_docs/asterisk_mbox.markdown @@ -14,9 +14,9 @@ Both parts are necessary for Asterisk voicemail integration. The server installation is documented below. The client is [integrated inside Home Assistant](/integrations/asterisk_mbox) -<div class='note'> +{% note %} Currently this module can only monitor a single Asterisk PBX mailbox. -</div> +{% endnote %} ### Prerequisites @@ -99,8 +99,6 @@ Before beginning make sure that you have the following: WantedBy=multi-user.target ``` -<div class='note'> - +{% note %} This assumes that your Asterisk PBX server is using `systemd` for init handling. If not, you will need to create the appropriate configuration files yourself. - -</div> +{% endnote %} diff --git a/source/_docs/authentication.markdown b/source/_docs/authentication.markdown index de84130966b..09c43120c84 100644 --- a/source/_docs/authentication.markdown +++ b/source/_docs/authentication.markdown @@ -18,13 +18,13 @@ When you start Home Assistant for the first time, the _owner_ user account is cr - Create and manage other user accounts. - Configure integrations and other settings (coming soon). -<div class='note'> +{% warning %} For the moment, other user accounts will have the same access as the owner account. In the future, non-owner accounts will be able to have restrictions applied. -</div> +{% endwarning %} -<div class="note"> +{% note %} If you want to manage users and you're an owner but you do not see "Users" in your main configuration menu, make sure that **Advanced Mode** is enabled for your user in your profile. -</div> +{% endnote %} ### Your account profile @@ -41,11 +41,9 @@ You can: - Define language and other locale settings. - Log out of Home Assistant. -<div class="note"> - +{% note %} Unused refresh tokens will be automatically removed. A refresh token is considered unused if it has not been used for a login within 90 days. If you need a permanent token, then we recommend using [Long Lived Access Tokens](https://developers.home-assistant.io/docs/auth_api/#long-lived-access-token). - -</div> +{% endnote %} ### Securing your login diff --git a/source/_docs/authentication/multi-factor-auth.markdown b/source/_docs/authentication/multi-factor-auth.markdown index 5aa16847ce9..16405ff6d98 100644 --- a/source/_docs/authentication/multi-factor-auth.markdown +++ b/source/_docs/authentication/multi-factor-auth.markdown @@ -42,9 +42,9 @@ Click _Enable_ and a new secret key will be generated. Go to your phone app and <img src='/images/docs/authentication/mfa.png' alt='Screenshot of setting up multi-factor authentication' style='border: 0;box-shadow: none;'> -<div class='note warning'> +{% caution %} Please treat the secret key like a password - never expose it to others. -</div> +{% endcaution %} Your phone app will now start generating a different six-digit code every thirty seconds or so. Enter one of these into Home Assistant under the QR code where it asks for a _Code_. Home Assistant and your phone app are now in sync and you can now use the code displayed in the app to log in. @@ -52,11 +52,9 @@ Your phone app will now start generating a different six-digit code every thirty Once TOTP is enabled, Home Assistant requires the latest code from your phone app before you can log in. -<div class='note'> - +{% note %} TOTP is _time based_ so it relies on your Home Assistant clock being accurate. If the verification keeps failing, make sure the clock on Home Assistant is correct. - -</div> +{% endnote %} ### Notify multi-factor authentication module @@ -105,10 +103,8 @@ Try logging out, then logging in again. You will be asked for the six-digit one- If the validation failed, a new one-time password will be sent again. -<div class='note'> - +{% note %} The Notify MFA module can't tell if the one-time password was delivered successfully. If you don't get the notification, you won't be able to log in. You can disable the Notify MFA module by editing or removing the file `[your_config_dir]/.storage/auth_module.notify`. - -</div> +{% endnote %} diff --git a/source/_docs/authentication/providers.markdown b/source/_docs/authentication/providers.markdown index 8f42cdc1224..872f488cc53 100644 --- a/source/_docs/authentication/providers.markdown +++ b/source/_docs/authentication/providers.markdown @@ -6,21 +6,21 @@ related: title: configuration.yaml file --- -<div class='note warning'> +{% caution %} This is an advanced feature. -</div> +{% endcaution %} When you log in, an _auth provider_ checks your credentials to make sure you are an authorized user. ## Configuring auth providers -<div class='note warning'> +{% warning %} Home Assistant automatically configures the standard auth providers so you don't need to specify `auth_providers` in your {% term "`configuration.yaml`" %} file unless you are configuring more than one. Specifying `auth_providers` will disable all auth providers that are not listed, so you could reduce your security or create difficulties logging in if it is not configured correctly. If you decide to use `trusted_networks` as your `auth_provider` there won't be a way to authenticate for a device outside of your listed trusted network. To overcome this ensure you add the default `auth_provider` with `type: homeassistant` back in manually. This will then present you with the default auth login screen when trusted network authentication fails as expected from outside your LAN. -</div> +{% endwarning %} Authentication providers are configured in your {% term "`configuration.yaml`" %} file under the `homeassistant:` block. If you are moving configuration to packages, this particular configuration must stay within 'configuration.yaml'. See Issue 16441 in the warning block at the bottom of this page. @@ -63,17 +63,13 @@ The trusted networks auth provider defines a range of IP addresses for which no When you log in from one of these networks, you will be asked which user account to use and won't need to enter a password. -<div class='note info'> - +{% note %} The [multi-factor authentication module](/docs/authentication/multi-factor-auth/) will not participate in the login process if you are using this auth provider. +{% endnote %} -</div> - -<div class='note info'> - +{% important %} You cannot trust a network that you are using in any [trusted_proxies](/integrations/http/#reverse-proxies). The `trusted_networks` authentication will fail with the message: Your computer is not allowed - -</div> +{% endimportant %} Here is an example in {% term "`configuration.yaml`" %} to set up Trusted Networks: @@ -191,10 +187,10 @@ Leading and trailing whitespace, as well as lines starting with `#` are ignored. Stderr is not read at all and just passed through to that of the Home Assistant process, hence you can use it for status messages or suchlike. -<div class='note'> +{% note %} Any leading and trailing whitespace is stripped from usernames before they're passed to the configured command. For instance, " hello " will be rewritten to just "hello". -</div> +{% endnote %} -<div class='note'> +{% note %} For now, meta variables are only respected the first time a particular user is authenticated. Upon subsequent authentications of the same user, the previously created user object with the old values is reused. -</div> +{% endnote %} diff --git a/source/_docs/automation/action.markdown b/source/_docs/automation/action.markdown index 70086ecb2ea..e44f4f8ea62 100644 --- a/source/_docs/automation/action.markdown +++ b/source/_docs/automation/action.markdown @@ -3,7 +3,9 @@ title: "Automation actions" description: "Automations result in action." --- -The action of an automation rule is what is being executed when a rule fires. The action part follows the [script syntax](/docs/scripts/) which can be used to interact with anything via services or events. For {% term services %}, you can specify the entity_id that it should apply to and optional service parameters (to specify for example the brightness). +The action of an automation rule is what is being executed when a rule fires. The action part follows the [script syntax](/docs/scripts/) which can be used to interact with anything via services or events. + +For {% term services %}, you can specify the `entity_id` that it should apply to and optional service parameters (to specify for example the brightness). You can also call the {% term service %} to activate [a scene](/integrations/scene/) which will allow you to define how you want your devices to be and have Home Assistant call the right services. diff --git a/source/_docs/automation/basics.markdown b/source/_docs/automation/basics.markdown index 2815c6340e7..8a2d4ceb2ef 100644 --- a/source/_docs/automation/basics.markdown +++ b/source/_docs/automation/basics.markdown @@ -21,9 +21,9 @@ The second part is the [condition](/docs/automation/condition/). Conditions are The third part is the [action](/docs/automation/action/), which will be performed when a rule is triggered and all conditions are met. For example, it can turn a light on, set the temperature on your thermostat or activate a scene. -<div class='note'> +{% note %} The difference between a condition and a trigger can be confusing as they are very similar. Triggers look at the actions, while conditions look at the current state: turning a light on versus a light being on. -</div> +{% endnote %} ## Exploring the internal state diff --git a/source/_docs/automation/condition.markdown b/source/_docs/automation/condition.markdown index 1ecb61056d9..52080461cff 100644 --- a/source/_docs/automation/condition.markdown +++ b/source/_docs/automation/condition.markdown @@ -3,7 +3,9 @@ title: "Automation conditions" description: "Automations can test conditions when invoked." --- -Conditions are an optional part of an automation rule. They can be used to prevent the automation's actions from being run. After a {% term trigger %} occurred, all conditions will be checked. If any of them do not return true, the automation will stop executing. Conditions look very similar to triggers, but they are very different — a trigger will look at events happening in the system, while a condition only looks at how the system looks right now. A trigger can observe that a switch is being turned on. A condition can only see if a switch is currently on or off. +Conditions are an optional part of an automation rule. They can be used to prevent the automation's actions from being run. After a {% term trigger %} occurred, all conditions will be checked. If any of them do not return true, the automation will stop executing. + +Conditions look very similar to triggers, but they are very different — a trigger will look at events happening in the system, while a condition only looks at how the system looks right now. A trigger can observe that a switch is being turned on. A condition can only see if a switch is currently on or off. The available conditions for an automation are the same as for the script syntax so see that page for a [full list of available conditions](/docs/scripts/conditions/). diff --git a/source/_docs/automation/editor.markdown b/source/_docs/automation/editor.markdown index 86335c28166..9acc28299d3 100644 --- a/source/_docs/automation/editor.markdown +++ b/source/_docs/automation/editor.markdown @@ -3,7 +3,9 @@ title: "Automation editor" description: "Instructions on how to use the automation editor." --- -The automation editor is an easy way of creating and editing automations from the UI. This page uses the [Random sensor](/integrations/random#sensor) as an example, though any other sensor with a numeric value can be used as well. +The automation editor is an easy way of creating and editing automations from the UI. + +This page uses the [Random sensor](/integrations/random#sensor) as an example, though any other sensor with a numeric value can be used as well. From the UI, choose **{% my config %}** which is located in the sidebar, then click on **{% my automations %}** to go to the automation editor. Press the **Create Automation** button in the lower right corner to get started. You can create an automation based on a [blueprint](/docs/automation/using_blueprints/) or start from scratch. Select **Create new automation**. diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index 9625c7eaa55..a1e246c7497 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -118,11 +118,9 @@ automation: It's also possible to use [limited templates](/docs/configuration/templating/#limited-templates) in the `event_type`, `event_data` and `context` options. -<div class='note'> - +{% important %} The `event_type`, `event_data` and `context` templates are only evaluated when setting up the trigger, they will not be reevaluated for every event. - -</div> +{% endimportant %} {% raw %} @@ -151,11 +149,9 @@ automation: event: start ``` -<div class='note'> - +{% note %} Automations triggered by the `shutdown` event have 20 seconds to run, after which they are stopped to continue with the shutdown. - -</div> +{% endnote %} ## MQTT trigger @@ -189,11 +185,9 @@ automation: It's also possible to use [limited templates](/docs/configuration/templating/#limited-templates) in the `topic` and `payload` options. -<div class='note'> - +{% note %} The `topic` and `payload` templates are only evaluated when setting up the trigger, they will not be re-evaluated for every incoming MQTT message. - -</div> +{% endnote %} {% raw %} @@ -217,10 +211,10 @@ automation: Fires when the numeric value of an entity's state (or attribute's value if using the `attribute` property, or the calculated value if using the `value_template` property) **crosses** a given threshold (equal excluded). On state change of a specified entity, attempts to parse the state as a number and fires if the value is changing from above to below or from below to above the given threshold (equal excluded). -<div class='note'> +{% note %} Crossing the threshold means that the trigger only fires if the state wasn't previously within the threshold. If the current state of your entity is `50` and you set the threshold to `below: 75`, the trigger would not fire if the state changed to e.g. `49` or `72` because the threshold was never crossed. The state would first have to change to e.g. `76` and then to e.g. `74` for the trigger to fire. -</div> +{% endnote %} {% raw %} @@ -292,10 +286,10 @@ automation: {% endraw %} -<div class='note'> +{% note %} Listing above and below together means the numeric_state has to be between the two values. In the example above, the trigger would fire a single time if a numeric_state goes into the 17.1-24.9 range (above 17 and below 25). It will only fire again, once it has left the defined range and enters it again. -</div> +{% endnote %} Number helpers (`input_number` entities), `number`, `sensor`, and `zone` entities that contain a numeric value, can be used in the `above` and `below` thresholds, @@ -355,24 +349,20 @@ automation: The `for` template(s) will be evaluated when an entity changes as specified. -<div class='note warning'> - +{% important %} Use of the `for` option will not survive Home Assistant restart or the reload of automations. During restart or reload, automations that were awaiting `for` the trigger to pass, are reset. If for your use case this is undesired, you could consider using the automation to set an [`input_datetime`](/integrations/input_datetime) to the desired time and then use that [`input_datetime`](/integrations/input_datetime) as an automation trigger to perform the desired actions at the set time. - -</div> +{% endimportant %} ## State trigger Fires when the state of any of given entities changes. If only `entity_id` is given, the trigger will fire for all state changes, even if only state attributes change. If at least one of `from`, `to`, `not_from`, or `not_to` are given, the trigger will fire on any matching state change, but not if only attributes change. To trigger on all state changes, but not on changed attributes, set at least one of `from`, `to`, `not_from`, or `not_to` to `null`. -<div class='note'> - +{% note %} The values you see in your overview will often not be the same as the actual state of the entity. For instance, the overview may show `Connected` when the underlying entity is actually `on`. You should check the state of the entity by looking in the _States_ menu under _Developer tools_. - -</div> +{% endnote %} ```yaml automation: @@ -534,19 +524,15 @@ automation: The `for` template(s) will be evaluated when an entity changes as specified. -<div class='note warning'> - +{% tip %} Use quotes around your values for `from` and `to` to avoid the YAML parser from interpreting values as booleans. +{% endtip %} -</div> - -<div class='note warning'> - +{% important %} Use of the `for` option will not survive Home Assistant restart or the reload of automations. During restart or reload, automations that were awaiting `for` the trigger to pass, are reset. If for your use case this is undesired, you could consider using the automation to set an [`input_datetime`](/integrations/input_datetime) to the desired time and then use that [`input_datetime`](/integrations/input_datetime) as an automation trigger to perform the desired actions at the set time. - -</div> +{% endimportant %} ## Sun trigger @@ -556,11 +542,9 @@ Fires when the sun is setting or rising, i.e., when the sun elevation reaches 0 An optional time offset can be given to have it fire a set time before or after the sun event (e.g., 45 minutes before sunset). A negative value makes it fire before sunrise or sunset, a positive value afterwards. The offset needs to be specified in number of seconds, or in a hh:mm:ss format. -<div class='note'> - +{% tip %} Since the duration of twilight is different throughout the year, it is recommended to use [sun elevation triggers][sun_elevation_trigger] instead of `sunset` or `sunrise` with a time offset to trigger automations during dusk or dawn. - -</div> +{% endtip %} [sun_elevation_trigger]: /docs/automation/trigger/#sun-elevation-trigger @@ -688,13 +672,11 @@ The `for` template(s) will be evaluated when the `value_template` becomes 'true' Templates that do not contain an entity will be rendered once per minute. -<div class='note warning'> - +{% important %} Use of the `for` option will not survive Home Assistant restart or the reload of automations. During restart or reload, automations that were awaiting `for` the trigger to pass, are reset. If for your use case this is undesired, you could consider using the automation to set an [`input_datetime`](/integrations/input_datetime) to the desired time and then use that [`input_datetime`](/integrations/input_datetime) as an automation trigger to perform the desired actions at the set time. - -</div> +{% endimportant %} ## Time trigger @@ -805,11 +787,9 @@ automation 3: minutes: "/5" ``` -<div class='note warning'> - +{% note %} Do not prefix numbers with a zero - using `'01'` instead of `'1'` for example will result in errors. - -</div> +{% endnote %} ## Persistent notification trigger @@ -894,11 +874,9 @@ automation: Geolocation trigger fires when an entity is appearing in or disappearing from a zone. Entities that are created by a [Geolocation](/integrations/geo_location/) platform support reporting GPS coordinates. Because entities are generated and removed by these platforms automatically, the entity ID normally cannot be predicted. Instead, this trigger requires the definition of a `source`, which is directly linked to one of the Geolocation platforms. -<div class='note'> - +{% tip %} This isn't for use with `device_tracker` entities. For those look above at the `zone` trigger. - -</div> +{% endtip %} ```yaml automation: diff --git a/source/_docs/backend/database.markdown b/source/_docs/backend/database.markdown index f16cf2a2553..53acac2ad04 100644 --- a/source/_docs/backend/database.markdown +++ b/source/_docs/backend/database.markdown @@ -3,7 +3,9 @@ title: "Database" description: "Details about the database used by Home Assistant." --- -Home Assistant uses databases to store {% term events %} and parameters for history and tracking. The default database used is [SQLite](https://www.sqlite.org/) and the database file is stored in your [configuration directory](/getting-started/configuration/) (e.g., `<path to config dir>/home-assistant_v2.db`); however, other databases can be used. If you prefer to run a database server (e.g., PostgreSQL), use the [`recorder`](/integrations/recorder/) integration. +Home Assistant uses databases to store {% term events %} and parameters for history and tracking. The default database used is [SQLite](https://www.sqlite.org/). + +The database file is stored in your [configuration directory](/getting-started/configuration/) (e.g., `<path to config dir>/home-assistant_v2.db`); however, other databases can be used. If you prefer to run a database server (e.g., PostgreSQL), use the [`recorder`](/integrations/recorder/) integration. To work with SQLite database manually from the command-line, you will need an [installation](https://www.sqlitetutorial.net/download-install-sqlite/) of `sqlite3`. Alternatively [DB Browser for SQLite](https://sqlitebrowser.org/) provides a viewer for exploring the database data and an editor for executing SQL commands. First load your database with `sqlite3`: diff --git a/source/_docs/blueprint/schema.markdown b/source/_docs/blueprint/schema.markdown index 42c35e1a0a7..93d404a14e2 100644 --- a/source/_docs/blueprint/schema.markdown +++ b/source/_docs/blueprint/schema.markdown @@ -153,9 +153,9 @@ allows an optional description, and optionally allows for collapsing those input A section is differentiated from an input by the presence of an additional `input` key within that section. -<div class='note warning'> +{% caution %} Input sections are a new feature in version 2024.6. Set the `min_version` for the blueprint to at least this version if using input sections. Otherwise, the blueprint will generate errors on older versions. -</div> +{% endcaution %} The full configuration for a section is below: diff --git a/source/_docs/blueprint/selectors.markdown b/source/_docs/blueprint/selectors.markdown index fb7419dc58e..5cb8c40304f 100644 --- a/source/_docs/blueprint/selectors.markdown +++ b/source/_docs/blueprint/selectors.markdown @@ -1365,7 +1365,7 @@ entity: required: false {% endconfiguration %} -<div class='note'> +{% important %} Targets are meant to be used with the `target` property of a service call in a script sequence. For example: @@ -1376,7 +1376,7 @@ action: target: !input lights ``` -</div> +{% endimportant %} ### Example target selectors <!-- omit from toc --> diff --git a/source/_docs/blueprint/tutorial.markdown b/source/_docs/blueprint/tutorial.markdown index 6f988e5465c..3ba49f9a325 100644 --- a/source/_docs/blueprint/tutorial.markdown +++ b/source/_docs/blueprint/tutorial.markdown @@ -19,11 +19,9 @@ related: title: Using automation blueprints --- -<div class='note'> - +{% tip %} While the tutorial only shows how to create an automation blueprint, {% term scripts %} also support blueprints in the same way. - -</div> +{% endtip %} ## Creating an automation blueprint @@ -256,9 +254,9 @@ action: 1. To configure your blueprint via the UI, go to {% my blueprints title="**Settings** > **Automations & Scenes** > **Blueprints**" %}. 2. Find the **Motion Light Tutorial** blueprint and select **Create Automation**. -<div class='note'> +{% important %} Don't forget to reload automations after you make changes to your blueprint to have the UI and the automation integration pick up the latest blueprint changes. -</div> +{% endimportant %} ![Screenshot of the blueprint UI](/images/blueprints/tutorial-ui.png) diff --git a/source/_docs/configuration.markdown b/source/_docs/configuration.markdown index f93267df57b..4f08b345dad 100644 --- a/source/_docs/configuration.markdown +++ b/source/_docs/configuration.markdown @@ -20,7 +20,9 @@ related: title: Troubleshooting the configuration --- -While you can configure most of Home Assistant from the user interface, for some integrations, you need to edit the `configuration.yaml` file. This file contains {% term integrations %} to be loaded along with their configurations. Throughout the documentation, you will find snippets that you can add to your configuration file to enable specific functionality. +While you can configure most of Home Assistant from the user interface, for some integrations, you need to edit the `configuration.yaml` file. + +This file contains {% term integrations %} to be loaded along with their configurations. Throughout the documentation, you will find snippets that you can add to your configuration file to enable specific functionality. <p class='img'> <img src='/images/docs/configuration/config-yaml_via-file-editor.png' alt='Screenshot of an example of a configuration.yaml file, accessed using the File editor add-on on a Home Assistant Operating System installation.'> diff --git a/source/_docs/configuration/events.markdown b/source/_docs/configuration/events.markdown index 3d4eb05f3df..30548a0aeb0 100644 --- a/source/_docs/configuration/events.markdown +++ b/source/_docs/configuration/events.markdown @@ -3,7 +3,9 @@ title: "Events" description: "Describes all there is to know about events in Home Assistant." --- -The core of Home Assistant is the event bus. The event bus allows any integration to fire or listen for events. It is the core of everything. For example, any state change will be announced on the event bus as a `state_changed` event containing the previous and the new state of an entity. +The core of Home Assistant is the event bus. The event bus allows any integration to fire or listen for events. It is the core of everything. + +For example, any state change will be announced on the event bus as a `state_changed` event containing the previous and the new state of an entity. Home Assistant contains a few built-in events that are used to coordinate between various integrations. diff --git a/source/_docs/configuration/packages.markdown b/source/_docs/configuration/packages.markdown index b5b2126b6bf..5465ddc9968 100644 --- a/source/_docs/configuration/packages.markdown +++ b/source/_docs/configuration/packages.markdown @@ -68,9 +68,9 @@ There are some rules for packages that will be merged: 3. Any integration that is not a platform [1], or dictionaries with Entity ID keys [2] can only be merged if its keys, except those for lists, are solely defined once. -<div class='note tip'> +{% tip %} Integrations inside packages can only specify platform entries using configuration style 1, where all the platforms are grouped under the integration name. -</div> +{% endtip %} ## Create a packages folder @@ -114,10 +114,8 @@ homeassistant: ``` -<div class='note warning'> - +{% important %} If you are moving configuration to packages, `auth_providers` must stay within ‘configuration.yaml’. See the general documentation for [Authentication Providers](/docs/authentication/providers/#configuring-auth-providers). This is because Home Assistant processes the authentication provided early in the start-up process, even before packages are processed. - -</div> +{% endimportant %} diff --git a/source/_docs/configuration/platform_options.markdown b/source/_docs/configuration/platform_options.markdown index 0f0c443d67d..d7b7e3a39f8 100644 --- a/source/_docs/configuration/platform_options.markdown +++ b/source/_docs/configuration/platform_options.markdown @@ -3,9 +3,9 @@ title: "Entity integration platform options" description: "Shows how to customize polling interval for any integration via configuration.yaml." --- -<div class='note info'> +{% important %} These options are being phased out and are only available for single platform integrations. -</div> +{% endimportant %} Some integrations or platforms (those that are based on the [entity](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/helpers/entity.py) class) allow various extra options to be set. diff --git a/source/_docs/configuration/remote.markdown b/source/_docs/configuration/remote.markdown index c00987c0f93..e2f3616f15c 100644 --- a/source/_docs/configuration/remote.markdown +++ b/source/_docs/configuration/remote.markdown @@ -10,11 +10,9 @@ related: If you're interested in logging in to Home Assistant while away, you'll have to make your instance remotely accessible. Below are a few options to do this. -<div class='note warning'> - +{% tip %} Remember to follow the [securing checklist](/docs/configuration/securing/) before doing this. - -</div> +{% endtip %} ## Home Assistant Cloud @@ -36,11 +34,9 @@ A problem with making a port accessible is that some Internet Service Providers If you cannot access your Home Assistant installation remotely, remember to check if your ISP provides you with a dedicated IP, instead of one shared with other users via a [CG-NAT](https://en.wikipedia.org/wiki/Carrier-grade_NAT). This is becoming fairly common nowadays due to the shortage of IPv4 addresses. Some, if not most ISPs will require you to pay an extra fee to be assigned a dedicated IPv4 address. -<div class='note'> - +{% caution %} Just putting a port up is not secure. You should definitely consider encrypting your traffic if you are accessing your Home Assistant installation remotely. For details, please check the [set up encryption using Let's Encrypt](/blog/2017/09/27/effortless-encryption-with-lets-encrypt-and-duckdns/) blog post or this [detailed guide](https://community.home-assistant.io/t/certificate-authority-and-self-signed-certificate-for-ssl-tls/196970) to using Let's Encrypt with Home Assistant. - -</div> +{% endcaution %} ## Adding a remote URL to Home Assistant diff --git a/source/_docs/configuration/secrets.markdown b/source/_docs/configuration/secrets.markdown index e06de57973d..010db2271ac 100644 --- a/source/_docs/configuration/secrets.markdown +++ b/source/_docs/configuration/secrets.markdown @@ -10,7 +10,9 @@ related: title: Securing your instance --- -The {% term "`configuration.yaml`" %} file is a plain-text file, thus it is readable by anyone who has access to the file. The file contains passwords and API tokens which need to be redacted if you want to share your configuration. By using `!secret` you can remove any private information from your configuration files. This separation can also help you to keep easier track of your passwords and API keys, as they are all stored at one place and no longer spread across the {% term "`configuration.yaml`" %} file or even multiple YAML files if you [split up your configuration](/docs/configuration/splitting_configuration/). +The {% term "`configuration.yaml`" %} file is a plain-text file, thus it is readable by anyone who has access to the file. The file contains passwords and API tokens which need to be redacted if you want to share your configuration. + +By using `!secret` you can remove any private information from your configuration files. This separation can also help you to keep easier track of your passwords and API keys, as they are all stored at one place and no longer spread across the {% term "`configuration.yaml`" %} file or even multiple YAML files if you [split up your configuration](/docs/configuration/splitting_configuration/). ## Using `secrets.yaml` diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 727e2f7ccf7..9748bbec22a 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -121,11 +121,9 @@ Not supported in [limited templates](#limited-templates). - `is_state_attr('device_tracker.paulus', 'battery', 40)` will test if the given entity attribute is the specified state (in this case, a numeric value). Note that the attribute can be `None` and you want to check if it is `None`, you need to use `state_attr('sensor.my_sensor', 'attr') is none` or `state_attr('sensor.my_sensor', 'attr') == None` (note the difference in the capitalization of none in both versions). - `has_value('sensor.my_sensor')` will test if the given entity is not unknown or unavailable. Can be used as a filter or a test. -<div class='note warning'> - +{% warning %} Avoid using `states.sensor.temperature.state`, instead use `states('sensor.temperature')`. It is strongly advised to use the `states()`, `is_state()`, `state_attr()` and `is_state_attr()` as much as possible, to avoid errors and error message when the entity isn't ready yet (e.g., during Home Assistant startup). - -</div> +{% endwarning %} #### States examples @@ -699,15 +697,13 @@ Examples using `iif`: {{ (states('light.kitchen') == 'on') | iif('Yes', 'No') }} ``` -<div class='note warning'> +{% endraw %} +{% warning %} The immediate if filter does not short-circuit like you might expect with a typical conditional statement. The `if_true`, `if_false` and `if_none` expressions will all be evaluated and the filter will simply return one of the resulting values. This means you cannot use this filter to prevent executing an expression which would result in an error. For example, if you wanted to select a field from `trigger` in an automation based on the platform you might go to make this template: `trigger.platform == 'event' | iif(trigger.event.data.message, trigger.to_state.state)`. This won't work because both expressions will be evaluated and one will fail since the field doesn't exist. Instead you have to do this `trigger.event.data.message if trigger.platform == 'event' else trigger.to_state.state`. This form of the expression short-circuits so if the platform is `event` the expression `trigger.to_state.state` will never be evaluated and won't cause an error. - -</div> - -{% endraw %} +{% endwarning%} ### Time @@ -768,14 +764,11 @@ A precision of 0 returns all available units, default is 1. - Filter `timestamp_utc(default)` converts a UNIX timestamp to the ISO format string representation representation as date/time in UTC timezone. If that fails, returns the `default` value, or if omitted raises an error. If a custom string format is needed in the string, use `timestamp_custom` instead. - Filter `timestamp_custom(format_string, local=True, default)` converts an UNIX timestamp to its string representation based on a custom format, the use of a local timezone is the default. If that fails, returns the `default` value, or if omitted raises an error. Supports the standard [Python time formatting options](https://docs.python.org/3/library/time.html#time.strftime). -<div class='note'> - +{% tip %} [UNIX timestamp](https://en.wikipedia.org/wiki/Unix_time) is the number of seconds that have elapsed since 00:00:00 UTC on 1 January 1970. Therefore, if used as a function's argument, it can be substituted with a numeric value (`int` or `float`). +{% endtip %} -</div> - -<div class='note warning'> - +{% important %} If your template is returning a timestamp that should be displayed in the frontend (e.g., as a sensor entity with `device_class: timestamp`), you have to ensure that it is the ISO 8601 format (meaning it has the "T" separator between the date and time portion). Otherwise, frontend rendering on macOS and iOS devices will show an error. The following value template would result in such an error: {% raw %} @@ -792,7 +785,7 @@ To fix it, enforce the ISO conversion via `isoformat()`: {% endraw %} -</div> +{% endimportant %} {% raw %} @@ -1017,7 +1010,7 @@ Some examples: Some of these functions can also be used in a [filter](https://jinja.palletsprojects.com/en/latest/templates/#id11). This means they can act as a normal function like this `sqrt(2)`, or as part of a filter like this `2|sqrt`. -<div class='note'> +{% note %} The numeric functions and filters raise an error if the input is not a valid number, optionally a default value can be specified which will be returned instead. The `is_number` function and filter can be used to check if a value is a valid number. Errors can be caught by the `default` filter. @@ -1030,7 +1023,7 @@ The numeric functions and filters raise an error if the input is not a valid num {% endraw %} -</div> +{% endnote %} - `float(value, default)` function will attempt to convert the input to a `float`. If that fails, returns the `default` value, or if omitted raises an error. - `float(default)` filter will attempt to convert the input to a `float`. If that fails, returns the `default` value, or if omitted raises an error. @@ -1102,7 +1095,7 @@ See: [Python struct library documentation](https://docs.python.org/3/library/str - Filter `value | unpack(format_string, offset=0)` will try to convert a `bytes` object into a native Python object. The `offset` parameter defines the offset position in bytes from the start of the input `bytes` based buffer. This will call function `struct.unpack_from(format_string, value, offset=offset)`. Returns `None` if an error occurs or when `format_string` is invalid. Note that the filter `unpack` will only return the first `bytes` object, despite the function `struct.unpack_from` supporting to return multiple objects (e.g. with `format_string` being `">hh"`. - Function `unpack(value, format_string, offset=0)` will try to convert a `bytes` object into a native Python object. The `offset` parameter defines the offset position in bytes from the start of the input `bytes` based buffer. This will call function `struct.unpack_from(format_string, value, offset=offset)`. Returns `None` if an error occurs or when `format_string` is invalid. Note that the function `unpack` will only return the first `bytes` object, despite the function `struct.unpack_from` supporting to return multiple objects (e.g. with `format_string` being `">hh"`. -<div class='note'> +{% note %} Some examples: {% raw %} @@ -1114,7 +1107,7 @@ Some examples: {% endraw %} -</div> +{% endnote %} ### String filters @@ -1247,7 +1240,7 @@ The [MQTT integration](/integrations/mqtt/) relies heavily on templates. Templat For incoming data a value template translates incoming JSON or raw data to a valid payload. Incoming payloads are rendered with possible JSON values, so when rendering the `value_json` can be used access the attributes in a JSON based payload. -<div class='note'> +{% note %} Example value template: @@ -1261,13 +1254,13 @@ Template {% raw %}`{{ value_json.temperature | round(1) }}`{% endraw %} renders Additional the MQTT entity attributes `entity_id`, `name` and `this` can be used as variables in the template. The `this` attribute refers to the [entity state](/docs/configuration/state_object) of the MQTT item. - </div> +{% endnote %} #### Using command templates with MQTT For service calls command templates are defined to format the outgoing MQTT payload to the device. When a service call is executed `value` can be used to generate the correct payload to the device. -<div class='note'> +{% note %} Example command template: @@ -1281,7 +1274,7 @@ With given value `21.9` template {% raw %}`{"temperature": {{ value }} }`{% endr Additional the MQTT entity attributes `entity_id`, `name` and `this` can be used as variables in the template. The `this` attribute refers to the [entity state](/docs/configuration/state_object) of the MQTT item. -</div> +{% endnote %} ## Some more things to keep in mind diff --git a/source/_docs/configuration/troubleshooting.markdown b/source/_docs/configuration/troubleshooting.markdown index 3390d996933..33725aba440 100644 --- a/source/_docs/configuration/troubleshooting.markdown +++ b/source/_docs/configuration/troubleshooting.markdown @@ -88,9 +88,9 @@ Contents of `sensors.yaml`: ... ``` -<div class='note'> +{% note %} Whenever you report an issue, be aware that we are volunteers who do not have access to every single device in the world nor unlimited time to fix every problem out there. -</div> +{% endnote %} ### Entity names diff --git a/source/_docs/frontend/icons.markdown b/source/_docs/frontend/icons.markdown index ed95d33b146..3a50a182367 100644 --- a/source/_docs/frontend/icons.markdown +++ b/source/_docs/frontend/icons.markdown @@ -32,11 +32,9 @@ The most common way you can find icons is by using the icon picker built right i <img src='/images/screenshots/icon-picker.png' alt='Icon Picker in Home Assistant' /> </p> -<div class='note info'> - - The icon picker will filter by icon name and by aliases applied to the icon by the MDI project. For example, typing "user" will show you most "account"-named icons. - -</div> +{% tip %} +The icon picker will filter by icon name and by aliases applied to the icon by the MDI project. For example, typing "user" will show you most "account"-named icons. +{% endtip %} For more detailed steps on customizing entities, including their icon, refer to [customizing entities](/docs/configuration/customizing-devices/). @@ -48,31 +46,25 @@ The easiest way to browse and find icons outside of Home Assistant is with the o <img src='/images/screenshots/mdi-picker.png' alt='Material Design Icons Picker' /> </p> -<div class='note info'> - - Not all icons that appear in the MDI Picker Browser Extension may be available in Home Assistant (yet!). While the browser extension is updated as MDI releases new packages, Home Assistant may lag behind until its next release. - -</div> +{% note %} +Not all icons that appear in the MDI Picker Browser Extension may be available in Home Assistant (yet!). While the browser extension is updated as MDI releases new packages, Home Assistant may lag behind until its next release. +{% endnote %} ### Material design icons on the Pictogrammers website The last way to browse through available icons is by viewing the library on the Pictogrammers website, [https://pictogrammers.com/library/mdi/](https://pictogrammers.com/library/mdi/). Select an icon you'd like to use, then click "Home Assistant" to see an example of its usage. -<div class='note info'> - - The Pictogrammers website will always show the latest release of the material design icons library. However, you may find icons that may not yet be available in Home Assistant (yet!). Watch the Home Assistant release notes for announcements on upgrades of the Material Design Icons library. - -</div> +{% note %} +The Pictogrammers website will always show the latest release of the material design icons library. However, you may find icons that may not yet be available in Home Assistant (yet!). Watch the Home Assistant release notes for announcements on upgrades of the Material Design Icons library. +{% endnote %} ## Suggesting or contributing new icons Being open-source like Home Assistant, the material design icons library is always accepting suggestions and contributions to expand the library. -<div class='note info'> - - Before suggesting or creating a new icon, it is very important that you [search the current library](https://pictogrammers.com/library/mdi/) and [search all issues](https://github.com/Templarian/MaterialDesign/issues?q=is%3Aissue), open and closed, on their GitHub. Try searching with different terms that might mean the same thing. (e.g. "user", "person", "account") - -</div> +{% note %} +Before suggesting or creating a new icon, it is very important that you [search the current library](https://pictogrammers.com/library/mdi/) and [search all issues](https://github.com/Templarian/MaterialDesign/issues?q=is%3Aissue), open and closed, on their GitHub. Try searching with different terms that might mean the same thing. (e.g. "user", "person", "account") +{% endnote %} ### Suggesting a new icon diff --git a/source/_docs/organizing.markdown b/source/_docs/organizing.markdown index 5091baaac10..8dc183b8169 100644 --- a/source/_docs/organizing.markdown +++ b/source/_docs/organizing.markdown @@ -12,7 +12,9 @@ related: title: Categories --- -Once you have more devices, you may want to target entire groups of devices in automations. It also becomes more challenging to find items in lists. There are a few tools to group your assets: [Areas](#areas), [floors](#floors), [labels](#labels), and [categories](#categories). +Once you have more devices, you may want to target entire groups of devices in automations. It also becomes more challenging to find items in lists. + +There are a few tools to group your assets: [Areas](#areas), [floors](#floors), [labels](#labels), and [categories](#categories). | Taxonomy | Automation target | Entity can have multiple | | -------- | ----------------- | ------------------------ | diff --git a/source/_docs/organizing/areas.markdown b/source/_docs/organizing/areas.markdown index 6af4f1434ba..b22a27166a2 100644 --- a/source/_docs/organizing/areas.markdown +++ b/source/_docs/organizing/areas.markdown @@ -13,7 +13,9 @@ related: title: Using areas in template --- -An area in Home Assistant is a logical grouping of {% term devices %} and {% term entities %} that are meant to match areas (or rooms) in the physical world of your home. For example, the "Living room" area groups devices and entities in your living room. Areas allow you to target an entire group of devices with a service call. For example, turning off all the lights in the living room. +An area in Home Assistant is a logical grouping of {% term devices %} and {% term entities %} that are meant to match areas (or rooms) in the physical world of your home. + +For example, the "Living room" area groups devices and entities in your living room. Areas allow you to target an entire group of devices with a service call. For example, turning off all the lights in the living room. Areas can be assigned to floors. Areas can also be used to automatically generate cards, such as the [Area card](/dashboards/area/). ## Creating an area diff --git a/source/_docs/organizing/categories.markdown b/source/_docs/organizing/categories.markdown index 261332fbc02..a40b429d7cc 100644 --- a/source/_docs/organizing/categories.markdown +++ b/source/_docs/organizing/categories.markdown @@ -10,7 +10,9 @@ related: title: Labels --- -Categories let you group and filter items in a table. Like labels, categories allow grouping irrespective of the items physical location. For example, on the automations page, you can create the categories “Notifications” or “NFC tags” to view your automations grouped or filtered. These categories group automations on the automation page, but have no effect anywhere else. Categories are unique for each table. The automations page can have different categories than the scene, scripts, or helpers settings page. +Categories let you group and filter items in a table. Like labels, categories allow grouping irrespective of the items physical location. + +For example, on the automations page, you can create the categories “Notifications” or “NFC tags” to view your automations grouped or filtered. These categories group automations on the automation page, but have no effect anywhere else. Categories are unique for each table. The automations page can have different categories than the scene, scripts, or helpers settings page. ## Creating a category diff --git a/source/_docs/organizing/floors.markdown b/source/_docs/organizing/floors.markdown index 3a39c03ec91..f2be3664f8f 100644 --- a/source/_docs/organizing/floors.markdown +++ b/source/_docs/organizing/floors.markdown @@ -13,8 +13,9 @@ related: title: Using floor alias for voice assistants --- -A floor in Home Assistant is a logical grouping of areas meant to match your home's physical floors. Devices and entities -cannot be assigned to floors directly but to areas. Floors can be used in automations and scripts as a target for actions. For example, to turn off all the lights on the downstairs floor when you go to bed. +A floor in Home Assistant is a logical grouping of areas meant to match your home's physical floors. + +Devices and entities cannot be assigned to floors directly but to areas. Floors can be used in automations and scripts as a target for actions. For example, to turn off all the lights on the downstairs floor when you go to bed. ## Creating a floor diff --git a/source/_docs/organizing/labels.markdown b/source/_docs/organizing/labels.markdown index 0e95e8dc515..e2db75cf2ce 100644 --- a/source/_docs/organizing/labels.markdown +++ b/source/_docs/organizing/labels.markdown @@ -12,7 +12,9 @@ related: title: Using labels in templates --- -Labels in Home Assistant allow grouping elements irrespective of their physical location or type. Labels can be assigned to areas, devices, entities, automations, scenes, scripts, and helpers. Labels can be used in automations and scripts as a target for actions and services. Labels can also be used to filter data. For example, you can filter the list of devices to show only devices with the label `heavy energy usage` or turn these devices off when there is not a lot of solar energy available. +Labels in Home Assistant allow grouping elements irrespective of their physical location or type. Labels can be assigned to areas, devices, entities, automations, scenes, scripts, and helpers. Labels can be used in automations and scripts as a target for actions and services. Labels can also be used to filter data. + +For example, you can filter the list of devices to show only devices with the label `heavy energy usage` or turn these devices off when there is not a lot of solar energy available. ## Creating a label diff --git a/source/_docs/scene/editor.markdown b/source/_docs/scene/editor.markdown index cf9ff0fc4f4..38653989c71 100644 --- a/source/_docs/scene/editor.markdown +++ b/source/_docs/scene/editor.markdown @@ -77,6 +77,6 @@ For example: brightness: 200 ``` -<div class='note'> +{% note %} Any comments in the YAML file will be lost and templates will be reformatted when you update a scene via the editor. -</div> +{% endnote %} diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 432a8d02b0b..6771cf8d5ae 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -131,11 +131,9 @@ sequence: While executing a script you can add a condition in the main sequence to stop further execution. When a condition does not return `true`, the script will stop executing. For documentation on the many different conditions refer to the [conditions page]. -<div class='note'> - +{% note %} The `condition` {% term action %} only stops executing the current sequence block. When it is used inside a [repeat](#repeat-a-group-of-actions) action, only the current iteration of the `repeat` loop will stop. When it is used inside a [choose](#choose-a-group-of-actions) action, only the {% term actions %} within that `choose` will stop. - -</div> +{% endnote %} ```yaml # If paulus is home, continue to execute the script below these lines @@ -845,8 +843,7 @@ script: message: "I am sent immediately and do not await the above action!" ``` -<div class='note'> - +{% warning %} Running {% term actions %} in parallel can be helpful in many cases, but use it with caution and only if you need it. @@ -854,8 +851,7 @@ There are some caveats (see below) when using parallel actions. While it sounds attractive to parallelize, most of the time, just the regular sequential {% term actions %} will work just fine. - -</div> +{% endwarning %} Some of the caveats of running {% term actions %} in parallel: diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown index 21f7c96694e..6d66417043e 100644 --- a/source/_docs/scripts/conditions.markdown +++ b/source/_docs/scripts/conditions.markdown @@ -400,9 +400,9 @@ Note that if only `before` key is used, the condition will be true _from midnigh [sun_trigger]: /docs/automation/trigger/#sun-trigger -<div class='note warning'> +{% tip %} The sunset/sunrise conditions do not work in locations inside the polar circles, and also not in locations with a highly skewed local time zone. In those cases it is advised to use conditions evaluating the solar elevation instead of the before/after sunset/sunrise conditions. -</div> +{% endtip %} This is an example of 1 hour offset before sunset: ```yaml @@ -557,11 +557,9 @@ Note that if only `before` key is used, the condition will be `true` *from midni If only `after` key is used, the condition will be `true` from the specified time *until midnight*. Time condition windows can span across the midnight threshold if **both** `after` and `before` keys are used. In the example above, the condition window is from 3pm to 2am. -<div class='note tip'> - +{% tip %} A better weekday condition could be by using the [Workday Binary Sensor](/integrations/workday/). - -</div> +{% endtip %} For the `after` and `before` options a time helper (`input_datetime` entity) or another `sensor` entity containing a timestamp with the "timestamp" device @@ -578,13 +576,11 @@ condition: after: sensor.groceries_delivery_time ``` -<div class='note warning'> - -Please note that the time condition only takes the time into account. If +{% note %} +Note that the time condition only takes the time into account. If a referenced sensor or helper entity contains a timestamp with a date, the date part is fully ignored. - -</div> +{% endnote %} ## Trigger condition diff --git a/source/_docs/scripts/service-calls.markdown b/source/_docs/scripts/service-calls.markdown index ccd734c536c..6450ab0bf7b 100644 --- a/source/_docs/scripts/service-calls.markdown +++ b/source/_docs/scripts/service-calls.markdown @@ -9,9 +9,9 @@ The configuration options to call a configuration are the same between all integ Examples on this page will be given as part of an automation integration configuration but different approaches can be used for other integrations too. -<div class='note'> +{% tip %} Use the "Services" tab under Developer Tools to discover available services. -</div> +{% endtip %} ### The basics @@ -153,9 +153,9 @@ You may then use the response data in the variable `agenda` in another action in the same script. The example below sends a notification using the response data. -<div class='note'> +{% important %} Which data fields can be used in a service call depends on the type of notification service that is used. -</div> +{% endimportant %} {% raw %} diff --git a/source/_docs/tools/quick-bar.markdown b/source/_docs/tools/quick-bar.markdown index ba73ba75a75..ae4c666b182 100644 --- a/source/_docs/tools/quick-bar.markdown +++ b/source/_docs/tools/quick-bar.markdown @@ -22,9 +22,9 @@ Type these from anywhere in the application to launch the dialog. | Command Palette | `c` | Remove `>` from start of input to switch to entity filter. | Create [`my`](/integrations/my) link | `m` | Open a new tab to create a my link to the page you are on. -<div class='note'> - The application must have focus for the hotkey to register. If the dialog doesn't launch, try clicking into an empty part of the main content area of Home Assistant and type it again. -</div> +{% important %} +The application must have focus for the hotkey to register. If the dialog doesn't launch, try clicking into an empty part of the main content area of Home Assistant and type it again. +{% endimportant %} ## Entity filter diff --git a/source/_docs/z-wave/controllers.markdown b/source/_docs/z-wave/controllers.markdown index 0028c908338..feada8af062 100644 --- a/source/_docs/z-wave/controllers.markdown +++ b/source/_docs/z-wave/controllers.markdown @@ -7,7 +7,7 @@ description: "Extended instructions how to setup Z-Wave." You need to have a compatible Z-Wave stick or module installed. The following devices have been confirmed to work with Z-Wave JS: -<div class='note warning'> +{% warning %} Until recently, 700 series Z-Wave Controllers had a bug that could cause the mesh to be flooded on some networks and the controller to become unresponsive. At present, all 700 series controllers share the same firmware and are subject to this bug. It appears that this bug is largely, if not completely, resolved as of firmware version 7.17.2. @@ -18,7 +18,7 @@ Users should upgrade the firmware on all 700 series controllers to version 7.17. - [Upgrade instructions using Windows (Zooz)](https://www.support.getzooz.com/kb/article/931-how-to-perform-an-ota-firmware-update-on-your-zst10-700-z-wave-stick/) - [Upgrade instructions using Windows/Linux (Z-Wave.Me)](https://z-wave.me/support/uzbrazberry-firmwares/) -</div> +{% endwarning %} - 800 series controllers (with some caveats, see notes) - Zooz 800 Series Z-Wave Long Range S2 Stick (ZST39 LR) @@ -50,9 +50,9 @@ Users should upgrade the firmware on all 700 series controllers to version 7.17. If you are just starting out, we recommend that you purchase a 700 series controller or a Raspberry Pi module. The 700 series controllers are the more recent version (when compared to the 500 series). The 700 series controllers support SmartStart, which allows you to add a device by scanning a QR code. -<div class='note'> - If you're using Home Assistant OS, Supervised, or Container, it's recommended to use a USB stick, not a module. Passing a module through Docker is more complicated than passing a USB stick through. -</div> +{% tip %} +If you're using Home Assistant OS, Supervised, or Container, it's recommended to use a USB stick, not a module. Passing a module through Docker is more complicated than passing a USB stick through. +{% endtip %} ## Stick alternatives @@ -71,11 +71,9 @@ Z-Wave JS does not support Z-Wave Long Range yet. ### Aeotec Z-Stick -<div class='note'> - +{% note %} There are [known compatibility issues](https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=245031#p1502030) with older hardware versions of the Aeotec stick not working on the Raspberry Pi 4. Aeotec has released a 2020 hardware revision ZW090-A/B/C Gen5+ with Pi 4 compatibility. Both hardware revisions are still being sold, make informed purchasing decisions if using paired with a Pi 4. - -</div> +{% endnote %} It's totally normal for your Z-Wave stick to cycle through its LEDs (Yellow, Blue and Red) while plugged into your system. @@ -127,23 +125,17 @@ sudo systemctl disable hciuart You should also check the README for details on the overlays. You might find it in `/boot/overlays/README` on your SD-card. If it is not there you can find [the official version here](https://github.com/raspberrypi/firmware/blob/master/boot/overlays/README). -<div class='note'> +{% note %} +It is possible to keep a limited Bluetooth functionality while using Razberry Z-Wave. Check `boot/overlays/README` on `miniuart-bt`. +{% endnote %} - It is possible to keep a limited Bluetooth functionality while using Razberry Z-Wave. Check `boot/overlays/README` on `miniuart-bt`. +{% note %} +`disable-bt` was previously known as `pi3-disable-bt`. If your OS is old, you might need to use this instead. +{% endnote %} -</div> - -<div class='note'> - - `disable-bt` was previously known as `pi3-disable-bt`. If your OS is old, you might need to use this instead. - -</div> - -<div class='note'> - - If you've installed the Z-Wave.Me Z-Way software. In order to use Z-Wave JS instead of Z-Way, you'll need to ensure you disable it before you install Home Assistant, or you won't be able to access the board. Do this with `sudo /etc/init.d/z-way-server stop; sudo update-rc.d z-way-server disable`. Alternatively, you could use the [Z-Wave.Me](/integrations/zwave_me) integration. - -</div> +{% note %} +If you've installed the Z-Wave.Me Z-Way software. In order to use Z-Wave JS instead of Z-Way, you'll need to ensure you disable it before you install Home Assistant, or you won't be able to access the board. Do this with `sudo /etc/init.d/z-way-server stop; sudo update-rc.d z-way-server disable`. Alternatively, you could use the [Z-Wave.Me](/integrations/zwave_me) integration. +{% endnote %} #### Setting up a Raspberry Pi Z-Wave module on Home Assistant Yellow diff --git a/source/_includes/asides/about.html b/source/_includes/asides/about.html index daf0a0ff121..a6322ca06ac 100644 --- a/source/_includes/asides/about.html +++ b/source/_includes/asides/about.html @@ -1,14 +1,13 @@ <section class="aside-module grid__item one-whole lap-one-half"> - <h1 class="title delta">About Home Assistant</h1> + <h1 class="title epsilon">About Home Assistant</h1> <ul class="divided"> <li> {{ site.description }} </li> <li><a href='/getting-started/'>Get started with Home Assistant</a></li> - <li><a href='https://demo.home-assistant.io'>Try the online demo</a></li> - <li><a href='https://building.open-home.io/#/portal'>Join our newsletter</a></li> - <li><a href="https://twitter.com/Home_Assistant">Follow Home Assistant on X</a></li> - <li><a href="https://www.openhomefoundation.org/">Home Assistant is part of the Open Home Foundation</a></li> + <li><a class="external-link" href='https://demo.home-assistant.io'>Try the online demo <iconify-icon inline icon="tabler:external-link"></iconify-icon></a></li> + <li><a class="external-link" href='https://building.open-home.io/#/portal'>Sign up for our newsletter <iconify-icon inline icon="tabler:external-link"></iconify-icon></a></li> + <li><a class="external-link" href="https://twitter.com/Home_Assistant">Follow Home Assistant on X <iconify-icon inline icon="tabler:external-link"></iconify-icon></a></li> {% comment %} <li> Subscribe to the Home Assistant Newsletter @@ -19,4 +18,7 @@ </li> {% endcomment %} </ul> + <p> + Home Assistant is part of the <a class="external-link" href="https://www.openhomefoundation.org/">Open Home Foundation <iconify-icon inline icon="tabler:external-link"></iconify-icon></a>. + </p> </section> diff --git a/source/_includes/asides/categories.html b/source/_includes/asides/categories.html index 639ce3fc038..c19f1a18244 100644 --- a/source/_includes/asides/categories.html +++ b/source/_includes/asides/categories.html @@ -1,5 +1,5 @@ <section class="aside-module grid__item one-whole lap-one-half"> - <h1 class="title delta">Categories</h1> + <h1 class="title epsilon">Categories</h1> <ul class="divided"> {% assign categories = site.categories | sort %} {% for category in categories %} diff --git a/source/_includes/asides/cloud_navigation.html b/source/_includes/asides/cloud_navigation.html index b4d936c0579..c89e978be9c 100644 --- a/source/_includes/asides/cloud_navigation.html +++ b/source/_includes/asides/cloud_navigation.html @@ -1,6 +1,6 @@ <section class="aside-module grid__item one-whole lap-one-half"> <div class="section"> - <h1 class="title delta">About Home Assistant</h1> + <h1 class="title epsilon">About Home Assistant</h1> <ul class="divided sidebar-menu"> <li> The Home Assistant Cloud is a cloud-based service provided to supporters of the Home Assistant project. diff --git a/source/_includes/asides/common_tasks_navigation.html b/source/_includes/asides/common_tasks_navigation.html index c3f5fd67dd0..bc1550bdc02 100644 --- a/source/_includes/asides/common_tasks_navigation.html +++ b/source/_includes/asides/common_tasks_navigation.html @@ -1,6 +1,6 @@ <section class="aside-module grid__item one-whole lap-one-half"> <div class='section'> - <h1 class="title delta">Common tasks</h1> + <h1 class="title epsilon">Common tasks</h1> <ul class='divided sidebar-menu'> <li>{% active_link /common-tasks/os/ Home Assistant Operating System %}</li> <li>{% active_link /common-tasks/container/ Home Assistant Container %}</li> diff --git a/source/_includes/asides/component_navigation.html b/source/_includes/asides/component_navigation.html index 0d714b0628e..3e82c42912a 100644 --- a/source/_includes/asides/component_navigation.html +++ b/source/_includes/asides/component_navigation.html @@ -70,15 +70,15 @@ {% if page.ha_domain %} <div class='section'> - <a href="https://github.com/home-assistant/core/tree/dev/homeassistant/components/{{ domain }}" target="_blank"><i class="icon-github"></i> View source on GitHub</a><br /> - <a href="https://github.com/home-assistant/core/issues?q=is%3Aissue+is%3Aopen+label%3A%22integration%3A+{{ domain }}%22" target="_blank"><i class="icon-bug"></i> View known issues</a> + <a href="https://github.com/home-assistant/core/tree/dev/homeassistant/components/{{ domain }}" target="_blank"><iconify-icon inline icon="simple-icons:github"></iconify-icon> View source on GitHub</a><br /> + <a href="https://github.com/home-assistant/core/issues?q=is%3Aissue+is%3Aopen+label%3A%22integration%3A+{{ domain }}%22" target="_blank"><iconify-icon inline icon="mdi:bug"></iconify-icon> View known issues</a> </div> {%- endif -%} </section> <section class="aside-module grid__item one-whole lap-one-half"> <div class='section'> - <h1 class="title delta">Code owners</h1> + <h1 class="title epsilon"><iconify-icon inline icon="mdi:person-heart"></iconify-icon> Integration owners</h1> {% if page.ha_codeowners %} {% assign ha_project = false %} {% for codeowner in page.ha_codeowners %} @@ -98,7 +98,7 @@ <div class="section"> {%- for codeowner in page.ha_codeowners -%} {%- assign clean_codeowner = codeowner | replace: "@", "" -%} - <a href="https://github.com/{{ clean_codeowner }}" target="_blank"><i class="icon-github"></i> {{ codeowner }}</a><br /> + <a href="https://github.com/{{ clean_codeowner }}" target="_blank"><img class="codeowner-avatar" src="https://avatars.githubusercontent.com/{{ codeowner | replace: "@", "" }}?size=96" alt="{{ codeowner }}"/> {{ codeowner }}</a><br /> {%- endfor -%} </div> {% endif %} diff --git a/source/_includes/asides/conference_navigation.html b/source/_includes/asides/conference_navigation.html index d55f3681f54..e51b1318da8 100644 --- a/source/_includes/asides/conference_navigation.html +++ b/source/_includes/asides/conference_navigation.html @@ -1,6 +1,6 @@ <section class="aside-module grid__item one-whole lap-one-half"> <div class="section"> - <h1 class="title delta">Details</h1> + <h1 class="title epsilon">Details</h1> <ul class="divided sidebar-menu"> <li> <b>When</b>: Sunday, December 13, 2020<br> @@ -14,7 +14,7 @@ </div> <div class="section"> - <h1 class="title delta">Contact</h1> + <h1 class="title epsilon">Contact</h1> <ul class="divided sidebar-menu"> <li> If you want to collaborate with us, contact us at @@ -26,7 +26,7 @@ </div> <div class="section"> - <h1 class="title delta">Sponsors</h1> + <h1 class="title epsilon">Sponsors</h1> <ul class="divided sidebar-menu"> <li> <a href="https://www.nabucasa.com"> diff --git a/source/_includes/asides/dashboards_navigation.html b/source/_includes/asides/dashboards_navigation.html index e438544380c..9646fc9df9d 100644 --- a/source/_includes/asides/dashboards_navigation.html +++ b/source/_includes/asides/dashboards_navigation.html @@ -2,7 +2,7 @@ {% assign elements = site.dashboards | sort_natural: 'title' %} <div class="section"> - <h1 class="title delta">Dashboards</h1> + <h1 class="title epsilon">Dashboards</h1> <ul class="divided sidebar-menu"> <li>{% active_link /dashboards/ Introduction %}</li> <li> @@ -21,7 +21,7 @@ </div> <div class="section"> - <h1 class="title delta">View types</h1> + <h1 class="title epsilon">View types</h1> <ul class="divided sidebar-menu"> {% for element in elements %} {% if element.type == "view" %} @@ -32,7 +32,7 @@ </div> <div class="section"> - <h1 class="title delta">Card types</h1> + <h1 class="title epsilon">Card types</h1> <ul class="divided sidebar-menu"> {% for element in elements %} {% if element.type == "card" %} @@ -43,16 +43,17 @@ </div> <div class="section"> - <h1 class="title delta">Advanced</h1> + <h1 class="title epsilon">Advanced</h1> <ul class="divided sidebar-menu"> <li>{% active_link /dashboards/features/ Features %}</li> <li>{% active_link /dashboards/header-footer/ Headers & footers %}</li> <li>{% active_link /dashboards/actions/ Actions %}</li> <li> <a + class="external-link" href="https://developers.home-assistant.io/docs/frontend/custom-ui/custom-card/" >Developing custom cards - <i class="icon-external-link"></i> + <iconify-icon inline icon="tabler:external-link"></iconify-icon> </a> </li> </ul> diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html index bfa5374d231..ae54ccd30f8 100644 --- a/source/_includes/asides/docs_navigation.html +++ b/source/_includes/asides/docs_navigation.html @@ -1,6 +1,6 @@ <section class="aside-module grid__item one-whole lap-one-half"> <div class="section"> - <h1 class="title delta">Topics</h1> + <h1 class="title epsilon">Topics</h1> <ul class="divided sidebar-menu"> <li> <b>{% active_link /faq/ FAQ %}</b> @@ -8,7 +8,7 @@ <b>{% active_link /docs/glossary/ Glossary %}</b> </li> <li> - <b>Getting started</b> + <b><iconify-icon inline icon="mdi:rocket-launch-outline"></iconify-icon> Getting started</b> <ul> <li>{% active_link /installation Installation %}</li> <li>{% active_link /getting-started Getting started & onboarding %}</li> @@ -23,7 +23,7 @@ </ul> </li> <li> - <b>{% active_link /docs/frontend/ Frontend %}</b> + <b><iconify-icon inline icon="mdi:view-dashboard"></iconify-icon> {% active_link /docs/frontend/ Frontend %}</b> <ul> <li>{% active_link /dashboards Dashboards, views, cards %}</li> <li>{% active_link /docs/organizing/ Organizing: areas, floors, labels, categories, ... %}</li> @@ -31,7 +31,7 @@ </ul> </li> <li> - <b>Configuration</b> + <b><iconify-icon inline icon="mdi:cog"></iconify-icon> Configuration</b> <ul> <li>{% active_link /docs/configuration/ Configuration.yaml %}</li> <li>{% active_link /docs/configuration/yaml/ YAML syntax%}</li> @@ -52,7 +52,7 @@ </ul> </li> <li> - <b>{% active_link /docs/energy/ Home Energy Management %}</b> + <b><iconify-icon inline icon="mdi:solar-power-variant"></iconify-icon> {% active_link /docs/energy/ Home Energy Management %}</b> <ul> <li>{% active_link /docs/energy/electricity-grid/ Electricity grid %}</li> <li>{% active_link /docs/energy/solar-panels/ Solar panels %}</li> @@ -61,7 +61,7 @@ </ul> </li> <li> - Advanced configuration + <iconify-icon inline icon="fa-solid:cogs"></iconify-icon> Advanced configuration <ul> <li>{% active_link /docs/configuration/remote/ Remote access %}</li> <li> @@ -80,7 +80,7 @@ </ul> </li> <li> - <b>{% active_link /docs/authentication/ Authentication %}</b> + <b><iconify-icon inline icon="mdi:account-security"></iconify-icon> {% active_link /docs/authentication/ Authentication %}</b> <ul> <li> {% active_link /docs/authentication/providers/ Auth providers %} @@ -95,7 +95,7 @@ </ul> </li> <li> - Core objects + <iconify-icon inline icon="clarity:objects-solid"></iconify-icon> Core objects <ul> <li>{% active_link /docs/configuration/events/ Events %}</li> <li> @@ -104,7 +104,7 @@ </ul> </li> <li> - <b>{% active_link /docs/automation/ Automation %}</b> + <b><iconify-icon icon="mdi:robot-happy"></iconify-icon> {% active_link /docs/automation/ Automation %}</b> <ul> <li>{% active_link /docs/automation/using_blueprints/ Using automation blueprints %}</li> <li>{% active_link /docs/automation/basics/ Automation basics %}</li> @@ -122,7 +122,7 @@ </ul> </li> <li> - <b>{% active_link /docs/blueprint/ Blueprints %}</b> + <b><iconify-icon inline icon="carbon:floorplan"></iconify-icon> {% active_link /docs/blueprint/ Blueprints %}</b> <ul> <li>{% active_link /docs/blueprint/tutorial/ Tutorial %}</li> <li>{% active_link /docs/blueprint/schema/ Blueprint schema %}</li> @@ -130,26 +130,26 @@ </ul> </li> <li> - <b>{% active_link /docs/backend/ Backend %}</b> + <b><iconify-icon inline icon="mdi:database"></iconify-icon> {% active_link /docs/backend/ Backend %}</b> <ul> <li>{% active_link /docs/backend/database/ Database %}</li> </ul> </li> <li> - <b>{% active_link /docs/scripts/ Scripts %}</b> + <b><iconify-icon inline icon="mdi:script-text"></iconify-icon> {% active_link /docs/scripts/ Scripts %}</b> <ul> <li>{% active_link /docs/scripts/service-calls/ Service calls %}</li> <li>{% active_link /docs/scripts/conditions/ Conditions %}</li> </ul> </li> <li> - <b>{% active_link /docs/scene/ Scenes %}</b> + <b><iconify-icon inline icon="mdi:script-text"></iconify-icon> {% active_link /docs/scene/ Scenes %}</b> <ul> <li>{% active_link /docs/scene/editor/ Editor %}</li> </ul> </li> <li> - <b>{% active_link /docs/tools/ Tools and helpers %}</b> + <b><iconify-icon inline icon="mdi:palette"></iconify-icon> {% active_link /docs/tools/ Tools and helpers %}</b> <ul> <li>{% active_link /docs/tools/dev-tools/ Developer tools %}</li> <li>{% active_link /docs/tools/quick-bar/ Quick bar %}</li> @@ -158,7 +158,7 @@ </ul> </li> <li> - <b>{% active_link /integrations/mqtt MQTT %}</b> + <b><iconify-icon inline icon="simple-icons:mqtt"></iconify-icon> {% active_link /integrations/mqtt MQTT %}</b> <ul> <li>{% active_link /integrations/mqtt/#broker-configuration Broker %}</li> <li>{% active_link /integrations/mqtt/#advanced-broker-configuration Certificate %}</li> @@ -172,7 +172,7 @@ </ul> </li> <li> - <b>Hardware</b> + <b><iconify-icon inline icon="bitcoin-icons:node-hardware-filled"></iconify-icon> Hardware</b> <ul> <li> <a href="https://green.home-assistant.io/">Home Assistant Green</a> diff --git a/source/_includes/asides/faq_navigation.html b/source/_includes/asides/faq_navigation.html index 65221d5ee22..0b234db9db0 100644 --- a/source/_includes/asides/faq_navigation.html +++ b/source/_includes/asides/faq_navigation.html @@ -1,6 +1,6 @@ <section class="aside-module grid__item one-whole lap-one-half"> <div class='section'> - <h1 class="title delta">Entries</h1> + <h1 class="title epsilon">Entries</h1> <ul class='divided sidebar-menu'> {% assign faq = site.faq | sort_natural: 'title' %} {% assign categories = faq | map: 'ha_category' | uniq | sort_natural %} @@ -11,7 +11,7 @@ <ul> {% for entry in faq %} {% if entry.ha_category == category %} -<li><a href='/faq#{{ entry.title | slugify }}'>{{ entry.title}}</a></li> +<li class="faq-entry"><a href='/faq#{{ entry.title | slugify }}'>{{ entry.title}}</a></li> {% endif %} {% endfor %} </ul> diff --git a/source/_includes/asides/getting_started_navigation.html b/source/_includes/asides/getting_started_navigation.html index 5af49d203de..7275af0ced5 100644 --- a/source/_includes/asides/getting_started_navigation.html +++ b/source/_includes/asides/getting_started_navigation.html @@ -1,6 +1,6 @@ <section class="aside-module grid__item one-whole lap-one-half"> <div class="section"> - <h1 class="title delta">Getting started</h1> + <h1 class="title epsilon"><iconify-icon inline icon="mdi:rocket-launch-outline"></iconify-icon> Getting started</h1> <ul class="divided sidebar-menu"> <li>{% active_link /installation/ Installation %}</li> <li>{% active_link /getting-started/onboarding/ Onboarding %}</li> diff --git a/source/_includes/asides/hassio_navigation.html b/source/_includes/asides/hassio_navigation.html index 7661f7763b4..01994fafe97 100644 --- a/source/_includes/asides/hassio_navigation.html +++ b/source/_includes/asides/hassio_navigation.html @@ -1,6 +1,6 @@ <section class="aside-module grid__item one-whole lap-one-half"> <div class="section"> - <h1 class="title delta">Topics</h1> + <h1 class="title epsilon">Topics</h1> <ul class="divided sidebar-menu"> <li> {% active_link /hassio/ Home Assistant %} diff --git a/source/_includes/asides/help_navigation.html b/source/_includes/asides/help_navigation.html index 3c3fdc9c923..3c8e24b5055 100644 --- a/source/_includes/asides/help_navigation.html +++ b/source/_includes/asides/help_navigation.html @@ -1,12 +1,12 @@ <section class="aside-module grid__item one-whole lap-one-half"> <div class="section"> - <h1 class="title delta"> </h1> + <h1 class="title epsilon">Topics</h1> <ul class="divided sidebar-menu"> <li>{% active_link /help/ Help %}</li> <li> - <a href="https://developers.home-assistant.io" + <a class="external-link" href="https://developers.home-assistant.io" >Developer documentation - <i class="icon-external-link"></i> + <iconify-icon inline icon="tabler:external-link"></iconify-icon> </a> </li> <li> diff --git a/source/_includes/asides/installation_navigation.html b/source/_includes/asides/installation_navigation.html index 5b9a435daf0..4d69dfacac6 100644 --- a/source/_includes/asides/installation_navigation.html +++ b/source/_includes/asides/installation_navigation.html @@ -1,6 +1,6 @@ <section class="aside-module grid__item one-whole lap-one-half"> <div class="section"> - <h1 class="title delta">Installation</h1> + <h1 class="title epsilon">Installation</h1> {{ content | toc_only }} </div> </section> diff --git a/source/_includes/asides/organizing_navigation.html b/source/_includes/asides/organizing_navigation.html index 1b6b2225de3..2c3f8994668 100644 --- a/source/_includes/asides/organizing_navigation.html +++ b/source/_includes/asides/organizing_navigation.html @@ -1,7 +1,7 @@ <section class="aside-module grid__item one-whole lap-one-half"> <div class="section"> - <h1 class="title delta">Organizing</h1> + <h1 class="title epsilon">Organizing</h1> <ul class="divided sidebar-menu"> <li>{% active_link /docs/organizing/ Grouping your assets %}</li> <li>{% active_link /docs/organizing/filtering Filtering your assets %}</li> diff --git a/source/_includes/asides/recent_posts.html b/source/_includes/asides/recent_posts.html index 946a8e52bfe..2930091aa8e 100644 --- a/source/_includes/asides/recent_posts.html +++ b/source/_includes/asides/recent_posts.html @@ -1,5 +1,5 @@ <section id="recent-posts" class="aside-module grid__item one-whole lap-one-half"> - <h1 class="title delta">Recent Posts</h1> + <h1 class="title epsilon">Recent Posts</h1> <ul class="divided"> {% for post in site.posts limit: site.recent_posts %} {% if post.url != page.url %} diff --git a/source/_includes/asides/voice_navigation.html b/source/_includes/asides/voice_navigation.html index 55d613f5eb2..6f436975713 100644 --- a/source/_includes/asides/voice_navigation.html +++ b/source/_includes/asides/voice_navigation.html @@ -2,7 +2,7 @@ {% assign elements = site.dashboards | sort_natural: 'title' %} <div class="section"> - <h1 class="title delta">Devices</h1> + <h1 class="title epsilon">Devices</h1> <ul class="divided sidebar-menu"> <li>{% active_link /voice_control/android/ Assist for Android %}</li> <li>{% active_link /voice_control/apple/ Assist for Apple %}</li> @@ -11,7 +11,7 @@ </div> <div class="section"> - <h1 class="title delta">{% active_link /voice_control/ Voice assistants %}</h1> + <h1 class="title epsilon">{% active_link /voice_control/ Voice assistants %}</h1> <ul class="divided sidebar-menu"> <li>{% active_link /voice_control/voice_remote_local_assistant/ Configuring a local assistant %}</li> <li>{% active_link /voice_control/voice_remote_cloud_assistant/ Configuring a cloud assistant %}</li> @@ -27,7 +27,7 @@ </div> <div class="section"> - <h1 class="title delta">Projects</h1> + <h1 class="title epsilon">Projects</h1> <ul class="divided sidebar-menu"> <li>{% active_link /voice_control/s3_box_voice_assistant/ Tutorial: ESP32-S3-BOX voice assistant %}</li> <li>{% active_link /voice_control/s3-box-customize/ Tutorial: Customize the S3-BOX %}</li> @@ -38,7 +38,7 @@ </ul> </div> <div class="section"> - <h1 class="title delta">Troubleshooting</h1> + <h1 class="title epsilon">Troubleshooting</h1> <ul class="divided sidebar-menu"> <li>{% active_link /voice_control/troubleshooting/ Troubleshooting Assist %}</li> <li>{% active_link /voice_control/troubleshooting_the_s3_box/ Troubleshooting the ESP32-S3-BOX %}</li> diff --git a/source/_includes/blog/archive_post.html b/source/_includes/blog/archive_post.html index d0f36753b64..840d0ffff0b 100644 --- a/source/_includes/blog/archive_post.html +++ b/source/_includes/blog/archive_post.html @@ -14,7 +14,6 @@ {% include blog/post/tags.html %} </footer> {% endif %} - <hr class="divider"> </div> </div> \ No newline at end of file diff --git a/source/_includes/blog/post/article.html b/source/_includes/blog/post/article.html index e43448aed03..940323c9f5d 100644 --- a/source/_includes/blog/post/article.html +++ b/source/_includes/blog/post/article.html @@ -1,6 +1,6 @@ <header> {% if index %} - <h1 class="beta"> + <h1> <a href="{{ post.url }}">{{ post.title }}</a> </h1> {% else %} diff --git a/source/_includes/blog/post/date.html b/source/_includes/blog/post/date.html index 247baa7526a..decc03cbbb2 100644 --- a/source/_includes/blog/post/date.html +++ b/source/_includes/blog/post/date.html @@ -7,7 +7,7 @@ {% capture was_updated %}{{ updated | size }}{% endcapture %} {% if has_date != '0' %} - {% capture time %}<time datetime="{{ date | datetime | date_to_xmlschema }}" pubdate{% if updated %} data-updated="true"{% endif %}><i class="icon-calendar"></i> {{ date_formatted }}</time>{% endcapture %} + {% capture time %}<time datetime="{{ date | datetime | date_to_xmlschema }}" pubdate{% if updated %} data-updated="true"{% endif %}><iconify-icon inline icon="mdi:calendar"></iconify-icon> {{ date_formatted }}</time>{% endcapture %} {% endif %} {% if was_updated != '0' %} diff --git a/source/_includes/common-tasks/data_disk.md b/source/_includes/common-tasks/data_disk.md index 86291803107..a12656dcd6d 100644 --- a/source/_includes/common-tasks/data_disk.md +++ b/source/_includes/common-tasks/data_disk.md @@ -6,23 +6,17 @@ The data disk feature can be used on an existing installation without losing data: The system will move existing data to the external data disk automatically. However, it is recommended to create and download a full <a href="#backups">Backup</a> before proceeding! -<div class='note warning'> +{% caution %} +All data on the target disk will be overwritten! +{% endcaution %} - All data on the target disk will be overwritten! +{% important %} +The storage ca pacity of the external data disk must be larger than the storage capacity of the existing (boot) disk. +{% endimportant %} -</div> - -<div class='note'> - - The storage capacity of the external data disk must be larger than the storage capacity of the existing (boot) disk. - -</div> - -<div class='note'> - - If you have been using a data disk previously with {% term "Home Assistant Operating System" %}, you need to use your host computer to delete all partitions *before* using it as a data disk again. - -</div> +{% important %} +If you have been using a data disk previously with {% term "Home Assistant Operating System" %}, you need to use your host computer to delete all partitions *before* using it as a data disk again. +{% endimportant %} ### Using UI to move the data partition @@ -59,11 +53,9 @@ ha os datadisk move /dev/sdx The system will prepare the data disk and immediately reboot. The reboot will take 10 minutes or more depending on the speed of the new data disk; please be patient! -<div class='note'> - +{% warning %} Using an USB attached SSD can draw quite some power. For instance on Raspberry Pi 3 the official Raspberry Pi power supply (PSU) only provides 2.5A which can be too tight. Use a more powerful power supply if you experience issues. Alternatively use a powered USB hub. Connect the Hub to one of the USB slots of your Raspberry Pi, and connect the SSD to the Hub. In this setup the power supply of the Hub will power the attached device(s). - -</div> +{% endwarning %} ### Migrating an external data disk to another system diff --git a/source/_includes/common-tasks/development_version.md b/source/_includes/common-tasks/development_version.md index 712bfef200b..d2e2cbccb9f 100644 --- a/source/_includes/common-tasks/development_version.md +++ b/source/_includes/common-tasks/development_version.md @@ -2,11 +2,9 @@ If you want to stay on the bleeding-edge Home Assistant Core development branch, you can upgrade to `dev`. -<div class='note warning'> - - The `dev` branch is likely to be unstable. Potential consequences include loss of data and instance corruption. - -</div> +{% caution %} +The `dev` branch is likely to be unstable. Potential consequences include loss of data and instance corruption. +{% endcaution %} {% if page.installation == "os" or page.installation == "supervised" %} diff --git a/source/_includes/common-tasks/flashing_n2_otg.md b/source/_includes/common-tasks/flashing_n2_otg.md index 8a53895d93e..91d995bbd5d 100644 --- a/source/_includes/common-tasks/flashing_n2_otg.md +++ b/source/_includes/common-tasks/flashing_n2_otg.md @@ -38,21 +38,19 @@ After The ODROID-N2+ is set to SPI boot mode and powered on, it boots into a ter ![Exit to shell](/images/hassio/screenshots/exit-shell.png) -<div class='note'> - +{% note %} When using the command line, it may return the following message: `can't access tty; job control turned off.` You can safely ignore this message and proceed with the installation +{% endnote %} -</div> - -2. Use the following command at the console to confirm the storage device node: +1. Use the following command at the console to confirm the storage device node: ```bash ls /dev/mmc* ``` -3. Set the storage device on the ODROID-N2+ as a mass storage device using the `ums` command (USB Mass storage mode). +2. Set the storage device on the ODROID-N2+ as a mass storage device using the `ums` command (USB Mass storage mode). This will configure the ODROID-N2+ and OTG to act as a memory card reader: ```bash diff --git a/source/_includes/common-tasks/network_storage.md b/source/_includes/common-tasks/network_storage.md index 540e8baa891..90e12654a3d 100644 --- a/source/_includes/common-tasks/network_storage.md +++ b/source/_includes/common-tasks/network_storage.md @@ -5,17 +5,17 @@ To list all your currently connected network storages, go to **{% my storage tit {% if page.installation == "os" %} -<div class='note'> - You need to update to Home Assistant Operating System 10.2 before you can use this feature. -</div> +{% important %} +You need to update to Home Assistant Operating System 10.2 before you can use this feature. +{% endimportant %} {% else %} -<div class='note'> +{% important %} - You need to make sure you run a supported {% term "Home Assistant Supervised" %} installation with the latest version of the [os-agent](https://github.com/home-assistant/os-agent). Make sure that your supervisor uses [slave bind propagation](https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation) for the data volume. +You need to make sure you run a supported {% term "Home Assistant Supervised" %} installation with the latest version of the [os-agent](https://github.com/home-assistant/os-agent). Make sure that your supervisor uses [slave bind propagation](https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation) for the data volume. -</div> +{% endimportant %} {% endif %} diff --git a/source/_includes/common-tasks/third-party-addons.md b/source/_includes/common-tasks/third-party-addons.md index d2b6c373203..827791fbfce 100644 --- a/source/_includes/common-tasks/third-party-addons.md +++ b/source/_includes/common-tasks/third-party-addons.md @@ -6,9 +6,9 @@ Home Assistant allows anyone to create add-on repositories to share their add-on https://github.com/home-assistant/hassio-addons-example ``` -<div class='note warning'> +{% caution %} Home Assistant cannot guarantee the quality or security of third-party add-ons. Use at your own risk. -</div> +{% endcaution %} <p class='img'> <img src='/images/hassio/screenshots/dashboard.png' /> diff --git a/source/_includes/custom/features.html b/source/_includes/custom/features.html index 72e7cb12f86..29c579b3c0a 100644 --- a/source/_includes/custom/features.html +++ b/source/_includes/custom/features.html @@ -1,7 +1,7 @@ <div class="feature-cards"> <div class="card"> <div class="card-header"> - <i class="icon-lightbulb"></i> + <iconify-icon inline icon="mdi:lightbulb-variant-outline"></iconify-icon> Works with over 1000 brands </div> <div class="card-content"> @@ -19,7 +19,7 @@ </div> <div class="card"> <div class="card-header"> - <i class="icon-gears"></i> + <iconify-icon inline icon="mdi:robot-happy-outline"></iconify-icon> Powerful automations </div> <div class="card-content"> @@ -37,7 +37,7 @@ </div> <div class="card"> <div class="card-header"> - <i class="icon-puzzle-piece"></i> + <iconify-icon inline icon="mdi:puzzle"></iconify-icon> Extend your system with add-ons </div> <div class="card-content"> @@ -56,7 +56,7 @@ </div> <div class="card"> <div class="card-header"> - <i class="icon-shield"></i> + <iconify-icon inline icon="mdi:shield-home-outline"></iconify-icon> All your smart home data stays local </div> <div class="card-content"> @@ -71,7 +71,7 @@ </div> <div class="card"> <div class="card-header"> - <i class="icon-mobile-phone"></i> + <iconify-icon inline icon="mdi:cellphone"></iconify-icon> Companion Mobile Apps </div> <div class="card-content"> @@ -97,7 +97,7 @@ </div> <div class="card"> <div class="card-header"> - <i class="icon-sun"></i> + <iconify-icon inline icon="mdi:solar-power-variant"></iconify-icon> Home Energy Management </div> <div class="card-content"> diff --git a/source/_includes/custom/welcome.html b/source/_includes/custom/welcome.html index 77d747068ab..10eacf5d8fb 100644 --- a/source/_includes/custom/welcome.html +++ b/source/_includes/custom/welcome.html @@ -1,4 +1,4 @@ -<h1>Awaken your home</h1> +<h1>Awaken<br><span class="line2">your home</span></h1> <p class="lead"> {{ site.description }} </p> @@ -15,7 +15,7 @@ {%- endfor -%} <p class='hero-buttons'> - <a href='/getting-started/'>Get started</a> - <a href='https://demo.home-assistant.io' target='_blank'>View demo</a> + <a href='/getting-started/' class="primary">Get started <iconify-icon inline icon='mdi:arrow-right'></iconify-icon></a><br/> + <a href='https://demo.home-assistant.io' target='_blank'>View live demos</a> <a href='/integrations/'>Browse {{ tot | minus: 1 | divided_by: 100 | round | times: 100 }}+ integrations</a> </p> \ No newline at end of file diff --git a/source/_includes/feedback.html b/source/_includes/feedback.html index 2801ad6bd01..46bac253ca1 100644 --- a/source/_includes/feedback.html +++ b/source/_includes/feedback.html @@ -1,36 +1,36 @@ {% unless page.feedback == false or page.layout == "landingpage" %} <div class="material-card text feedback"> - <h4><a href="#feedback_section" class="title-link" name="feedback_section"></a><b> Help us to improve our documentation</b></h4> + <h4><iconify-icon inline icon="mdi:feedback"></iconify-icon> <b> Help us improve our documentation</b><a href="#feedback_section" class="title-link" name="feedback_section"></a></h4> Suggest an edit to this page, or provide/view feedback for this page. <div class="links"> <a href="{{ site.netlify.repository_url }}/tree/{{ site.netlify.head }}/source/{{ page.path }}" target="_blank" - ><i class="icon-edit" /> Edit</a + ><iconify-icon inline icon="mdi:edit" /> Edit</a > {% if page.ha_domain %} <a href="{{ site.netlify.repository_url }}/issues/new?template=feedback.yml&url={{ site.netlify.url | url_encode }}{{ page.url | url_encode }}&version={{ site.current_major_version }}.{{ site.current_minor_version }}.{{ site.current_patch_version }}&labels={{ site.netlify.branch }},integration%3A%20{{ page.ha_domain }}" target="_blank" - ><i class="icon-comment" /> Provide feedback</a + ><iconify-icon inline icon="mdi:comment-edit-outline" /> Provide feedback</a > <a href="{{ site.netlify.repository_url }}/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3A%22integration%3A+{{ page.ha_domain }}%22" target="_blank" - ><i class="icon-comments" /> View pending feedback</a + ><iconify-icon inline icon="mdi:comment-text-multiple-outline" /> View pending feedback</a > {% else %} <a href="{{ site.netlify.repository_url }}/issues/new?template=feedback.yml&url={{ site.netlify.url | url_encode }}{{ page.url | url_encode }}&version={{ site.current_major_version }}.{{ site.current_minor_version }}.{{ site.current_patch_version }}&labels={{ site.netlify.branch }}" target="_blank" - ><i class="icon-comment" /> Provide feedback</a + ><iconify-icon inline icon="mdi:comment-edit-outline" /> Provide feedback</a > <a href="{{ site.netlify.repository_url }}/issues?utf8=%E2%9C%93&q=%22{{ page.url | url_encode }}%22&in=body" target="_blank" - ><i class="icon-comments" /> View given feedback</a + ><iconify-icon inline icon="mdi:comment-text-multiple-outline" /> View given feedback</a > {% endif %} </div> diff --git a/source/_includes/getting-started/next_step.html b/source/_includes/getting-started/next_step.html index ebd26ee7e8d..5444f2c3f61 100644 --- a/source/_includes/getting-started/next_step.html +++ b/source/_includes/getting-started/next_step.html @@ -1,7 +1,7 @@ <a href="{{ include.link }}" class="link-card next-step"> <div class="material-card text"> - <p>{{ include.step }}</p> + <p><iconify-icon inline icon="{{ include.icon }}"></iconify-icon>  {{ include.step }}</p> {% include assets/chevron_right.html %} </div> </a> diff --git a/source/_includes/installation/container.md b/source/_includes/installation/container.md index 7963a76c9bb..14d679ffcb6 100644 --- a/source/_includes/installation/container.md +++ b/source/_includes/installation/container.md @@ -3,13 +3,14 @@ {% if page.installation_type != 'alternative' %} These below instructions are for an installation of {% term "Home Assistant Container" %} running in your own container environment, which you manage yourself. Any [OCI](https://opencontainers.org/) compatible runtime can be used, however this guide will focus on installing it with Docker. -<div class='note'> -<b>Prerequisites</b> +{% important %} +<bPrerequisites</b> This guide assumes that you already have an operating system setup and a container runtime installed (like Docker). If you are using Docker then you need to be on at least version 19.03.9, ideally an even higher version, and `libseccomp` 2.4.2 or newer. -</div> + +{% endimportant %} ### Platform installation @@ -59,11 +60,9 @@ If you change the configuration, you have to restart the server. To do that you ### Docker compose -<div class="note tip"> - - `docker compose` should [already be installed](https://www.docker.com/blog/announcing-compose-v2-general-availability/) on your system. If not, you can [manually](https://docs.docker.com/compose/install/linux/) install it. - -</div> +{% tip %} +`docker compose` should [already be installed](https://www.docker.com/blog/announcing-compose-v2-general-availability/) on your system. If not, you can [manually](https://docs.docker.com/compose/install/linux/) install it. +{% endtip %} As the Docker command becomes more complex, switching to `docker compose` can be preferable and support automatically restarting on failure or system restart. Create a `compose.yml` file: diff --git a/source/_includes/installation/container/alternative.md b/source/_includes/installation/container/alternative.md index a1bc4f71299..0d0372ba979 100644 --- a/source/_includes/installation/container/alternative.md +++ b/source/_includes/installation/container/alternative.md @@ -26,11 +26,9 @@ To use a Z-Wave USB stick for Z-Wave control, the HA Docker container needs extr <https://www.synology.com/en-global/knowledgebase/DSM/help/DSM/AdminCenter/system_terminal> -<div class='note'> - +{% tip %} [See this page for accessing the Terminal via SSH](https://www.synology.com/en-global/knowledgebase/DSM/tutorial/General_Setup/How_to_login_to_DSM_with_root_permission_via_SSH_Telnet) - -</div> +{% endtip %} Adjust the following Terminal command as follows : @@ -61,11 +59,11 @@ Remark: to restart your Home Assistant within Synology NAS, you just have to do - Go to the "Container Manager"-app and move to "Container"-section - Right-click on it and select "Action"->"Restart". -<div class='note'> +{% note %} If you want to use a USB Bluetooth adapter or Z-Wave USB Stick with Home Assistant on Synology Docker these instructions do not correctly configure the container to access the USB devices. To configure these devices on your Synology Docker Home Assistant you can follow the instructions provided [here](https://philhawthorne.com/installing-home-assistant-io-on-a-synology-diskstation-nas/) by Phil Hawthorne. -</div> +{% endnote %} ### QNAP NAS diff --git a/source/_includes/installation/core.md b/source/_includes/installation/core.md index 7e06ce3b64c..edfaa7368e1 100644 --- a/source/_includes/installation/core.md +++ b/source/_includes/installation/core.md @@ -8,18 +8,17 @@ To install {% term "Home Assistant Core" %} on Windows, you will need to use th As an alternative, Home Assistant OS can be installed in a Linux guest VM. Running {% term "Home Assistant Core" %} directly on Windows is not supported. {% endif %} -<div class='note warning'> - +{% caution %} This is an advanced installation process, and some steps might differ on your system. Considering the nature of this installation type, we assume you can handle subtle differences between this document and the system configuration you are using. When in doubt, please consider one of the [other installation methods](/installation/), as they might be a better fit instead. +{% endcaution %} -</div> +{% important %} -<div class='note'> <b>Prerequisites</b> This guide assumes that you already have an operating system setup and have installed Python {{site.installation.versions.python}} (including the package `python3-dev`) or newer. -</div> +{% endimportant %} ### Install dependencies @@ -97,8 +96,8 @@ You can now reach your installation via the web interface on `http://homeassista If this address doesn't work you may also try `http://localhost:8123` or `http://X.X.X.X:8123` (replace X.X.X.X with your machines’ IP address). -<div class='note'> +{% note %} When you run the `hass` command for the first time, it will download, install and cache the necessary libraries/dependencies. This procedure may take anywhere between 5 to 10 minutes. During that time, you may get a **site cannot be reached** error when accessing the web interface. This will only happen the first time. Subsequent restarts will be much faster. -</div> +{% endnote %} diff --git a/source/_includes/installation/operating_system.md b/source/_includes/installation/operating_system.md index 7adfa27b438..f91a8d4b716 100644 --- a/source/_includes/installation/operating_system.md +++ b/source/_includes/installation/operating_system.md @@ -43,7 +43,8 @@ Variants without pre-installed Home Assistant: {% if page.installation_type == 'generic-x86-64' %} -<div class='note'> +{% important %} + <b>Prerequisites</b> This guide assumes that you have a dedicated {{ site.installation.types[page.installation_type].board }} PC to exclusively run the {% term "Home Assistant Operating System" %}. @@ -57,7 +58,7 @@ This guide assumes that you have a dedicated {{ site.installation.types[page.ins 1. First, you will need to configure your {{ site.installation.types[page.installation_type].board }} PC to use UEFI boot mode. 2. Then, write the {% term "Home Assistant Operating System" %} disk image to your boot medium. -</div> +{% endimportant %} ## Configure the BIOS on your x86-64 hardware @@ -80,9 +81,9 @@ The BIOS configuration is now complete. Next, you need to write the Home Assistant Operating System image to the *boot medium*, which is the medium your x86-64 hardware will boot from when it is running Home Assistant. -<div class='note'> +{% note %} HAOS has no integrated installer that writes the image automatically. You will write it manually using either the <b>Disks</b> utility from Ubuntu or Balena Etcher. -</div> +{% endnote %} Typically, an internal medium like S-ATA hard disk, S-ATA SSD, M.2 SSD, or a non-removable eMMC is used for the x86-64 boot medium. Alternatively, an external medium can be used such as a USB SDD, though this is not recommended. @@ -140,9 +141,9 @@ To write the HAOS image to the boot medium on your x86-64 hardware, there are 2 ### Method 2: Installing HAOS directly from a boot medium -<div class='note warning'> +{% note %} Use this method only if Method 1 does not work for you. -</div> +{% endnote %} #### Required material @@ -234,7 +235,7 @@ Use this method only if Method 1 does not work for you. - Note: Internet is required because the newly installed Home Assistant OS does not contain all Home Assistant components yet. It downloads the latest version of Home Assistant Core on first start. 2. Power the system on. If you have a screen connected to the {{site.installation.types[page.installation_type].board}} system, after a minute or so the Home Assistant welcome banner will appear in the console. -<div class="note"> +{% note %} If the machine complains about not being able to find a bootable medium, you might need to specify the EFI entry in your BIOS. This can be accomplished either by using a live operating system (e.g. Ubuntu) and running the following command (replace `<drivename>` with the appropriate drive name assigned by Linux, typically this will be `sda` or `nvme0n1` on NVMe SSDs): @@ -253,7 +254,7 @@ Or else, the BIOS might provide you with a tool to add boot options, there you c \EFI\BOOT\bootx64.efi ``` -</div> +{% endnote %} {% else %} @@ -265,9 +266,9 @@ Or else, the BIOS might provide you with a tool to add boot options, there you c 3. In the browser of your desktop system, within a few minutes you will be able to reach your new Home Assistant at <a href="http://homeassistant.local:8123" target="_blank">homeassistant.local:8123</a>. -<div class="note"> +{% note %} If you are running an older Windows version or have a stricter network configuration, you might need to access Home Assistant at <a href="http://homeassistant:8123" target="_blank">homeassistant:8123</a> or `http://X.X.X.X:8123` (replace X.X.X.X with your {{site.installation.types[page.installation_type].board}}’s IP address). -</div> +{% endnote %} {% else %} @@ -317,16 +318,15 @@ Minimum recommended assignments: 3. Under **Hardware**, select the amount of memory and number of CPUs. Then, select **Enable EFI**. - Make sure **EFI** is enabled. If EFI is not enabled, HAOS won't boot. 4. Under **Hard Disk**, select **Use an existing virtual hard disk file**, select the unzipped VDI file from above. - 5. Then go to **Network** > **Adapter 1**. Choose **Bridged Adapter** and choose your network adapter. - <div class="note warning"> - Please keep in mind that the bridged adapter only functions over a hardwired Ethernet connection. - Using Wi-Fi on your VirtualBox host is unsupported. - </div> + 5. Then go to **Network** > **Adapter 1**. Choose **Bridged Adapter** and choose your network adapter. + <iconify-icon inline icon="mdi:alert-outline"></iconify-icon> Please keep in mind that the bridged + adapter only functions over a hardwired Ethernet connection. + Using Wi-Fi on your VirtualBox host is unsupported. 6. Then go to <b>Audio</b> and choose <b>Intel HD Audio</b> as audio controller. - <div class="note info"> - By default, VirtualBox does not free up unused disk space. To automatically shrink the vdi disk image - the `discard` option must be enabled using your host machine's terminal: + <iconify-icon inline icon="mdi:alert-outline"></iconify-icon> By default, VirtualBox does not + free up unused disk space. To automatically shrink the vdi disk image the `discard` option must + be enabled using your host machine's terminal: ```bash VBoxManage storageattach <VM name> --storagectl "SATA" --port 0 --device 0 --nonrotational on --discard on @@ -334,8 +334,6 @@ Minimum recommended assignments: More details can be found about the command can be found [here](https://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach). - </div> - {% unless page.installation_type == 'macos' %} - title: Unraid @@ -376,9 +374,9 @@ Minimum recommended assignments: virt-install --name haos --description "Home Assistant OS" --os-variant=generic --ram=4096 --vcpus=2 --disk <PATH TO QCOW2 FILE>,bus=scsi --controller type=scsi,model=virtio-scsi --import --graphics none --boot uefi ``` - <div class="note info"> - If you have a USB dongle to attach, you need to add the option `--hostdev busID.deviceId`. You can discover these IDs via the `lsusb` command. - As example, if `lsusb` output is: + <iconify-icon inline icon="mdi:alert-outline"></iconify-icon> If you have a USB + dongle to attach, you need to add the option `--hostdev busID.deviceId`. You can + discover these IDs via the `lsusb` command. As example, if `lsusb` output is: ```bash Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub @@ -399,7 +397,6 @@ Minimum recommended assignments: Note that this configuration (bus 003, device 003) is just an example, your dongle could be on another bus and/or with another device ID. Please check the correct IDs of your USB dongle with `lsusb`. - </div> {% endunless %} @@ -449,9 +446,7 @@ Minimum recommended assignments: {% if page.installation_type == 'windows' %} - title: Hyper-V content: | - <div class='note warning'> - Hyper-V does not have USB support - </div> + ⚠️ Hyper-V does not have USB support 1. Create a new virtual machine. 2. Select **Generation 2**. diff --git a/source/_includes/installation/supervised.md b/source/_includes/installation/supervised.md index c3806b199c7..39bf52fb273 100644 --- a/source/_includes/installation/supervised.md +++ b/source/_includes/installation/supervised.md @@ -1,12 +1,12 @@ ## Install Home Assistant Supervised -<div class='note warning'> +{% caution %} This way of running Home Assistant will require the most of you. It also has strict requirements you need to follow. Unless you really need this installation type, you should install Home Assistant OS (this can also be a [virtual machine](#install-home-assistant-operating-system)), or [Home Assistant Container](#install-home-assistant-container). -</div> +{% endcaution %} 1. First make sure you understand the <a href="https://github.com/home-assistant/architecture/blob/master/adr/0014-home-assistant-supervised.md" target="_blank">requirements</a>. 2. This installation method has very strict requirements, for example, it only diff --git a/source/_includes/integrations/building_block_integration.md b/source/_includes/integrations/building_block_integration.md index e7b4df2cd39..93adb9e61d5 100644 --- a/source/_includes/integrations/building_block_integration.md +++ b/source/_includes/integrations/building_block_integration.md @@ -1,7 +1,7 @@ {% capture name %}{{ include.name | default: page.title }}{% endcapture %} {% capture domain %}{{ include.domain | default: page.ha_domain }}{% endcapture %} -<div class='note info'> +{% note %} **Building block integration** @@ -11,5 +11,5 @@ A building block integration differs from the typical integration that connects If one of your integrations features this building block, this page documents the functionality the {{ name | downcase }} building block offers. -</div> +{% endnote %} diff --git a/source/_includes/integrations/config_flow.md b/source/_includes/integrations/config_flow.md index 4a9feb458fd..69da751e89f 100644 --- a/source/_includes/integrations/config_flow.md +++ b/source/_includes/integrations/config_flow.md @@ -12,7 +12,7 @@ To add the **{{ name }}** integration to your Home Assistant instance, use this it will be shown as **Discovered**. You can then set it up right away. {% endif %} -{% details "Manual configuration steps" %} +{% details "Manual configuration steps" icon="mdi:cursor-hand" %} {% if include.discovery or page.ha_dhcp or page.ha_homekit or page.ha_ssdp or page.ha_zeroconf or page.ha_mqtt %} If it wasn't discovered automatically, don't worry! You can set up a manual integration entry: @@ -22,7 +22,7 @@ manually: {% endif %} - Browse to your Home Assistant instance. -- Go to **{% my integrations title="Settings > Devices & Services" %}**. +- Go to **{% my integrations icon title="Settings > Devices & Services" %}**. {% if page.ha_integration_type == 'helper' %} - At the top of the screen, select the tab: **{% my helpers %}**. - In the bottom right corner, select the diff --git a/source/_includes/javascripts/scripts.html b/source/_includes/javascripts/scripts.html index f2b630cf0a1..649d2630201 100644 --- a/source/_includes/javascripts/scripts.html +++ b/source/_includes/javascripts/scripts.html @@ -16,3 +16,21 @@ document.querySelector('.site-title').addEventListener('contextmenu', function(e document.location.assign("https://design.home-assistant.io/#brand/logo") }); </script> + + +{% if page.hero_unit %} +<script type="text/javascript"> + const changeNavColor = () => { + const scrollPosition = document.documentElement.scrollTop; + const nav = document.querySelector("header"); + if (scrollPosition <= 10) { + nav.classList.add("dark"); + } else { + nav.classList.remove("dark"); + } + } + + window.addEventListener("load", () => changeNavColor()); + window.addEventListener("scroll", () => changeNavColor()); +</script> +{% endif %} diff --git a/source/_includes/post/author.html b/source/_includes/post/author.html index 96a10c510ab..123219bd5fc 100644 --- a/source/_includes/post/author.html +++ b/source/_includes/post/author.html @@ -5,4 +5,4 @@ {% else %} {% assign author = site.author %} {% endif %} -{% if author %}<span class="byline author vcard"><i class='icon-user'></i> {{ author }}</span>{% endif %} +{% if author %}<span class="byline author vcard"><iconify-icon inline icon="mdi:person"></iconify-icon> {{ author }}</span>{% endif %} diff --git a/source/_includes/post/sharing.html b/source/_includes/post/sharing.html index 06ae068d7b4..043e5a081fc 100644 --- a/source/_includes/post/sharing.html +++ b/source/_includes/post/sharing.html @@ -1,5 +1,5 @@ <section class="sharing aside-module grid__item one-whole lap-one-half"> - <h1 class="title delta">Share this post</h1> + <h1 class="title epsilon">Share this post</h1> <ul class="divided"> {% if site.twitter_tweet_button %} <li> diff --git a/source/_includes/related.html b/source/_includes/related.html index 65ffe151326..7003fe9191c 100644 --- a/source/_includes/related.html +++ b/source/_includes/related.html @@ -9,7 +9,7 @@ {%- endfor -%} {% if related_topics and related_topics.size != 0 %} <div class="text related-topics"> - <h2><a class="title-link" href="#related-topics" name="related-topics"></a>Related topics</h2> + <h2>Related topics<a class="title-link" href="#related-topics" name="related-topics"></a></h2> <ul> {%- for related in related_topics -%} {% assign computed = related.docs | split: "#" %} @@ -30,7 +30,7 @@ {% endif %} {% if related_links and related_links.size != 0 %} <div class="text related-links"> - <h2><a class="title-link" href="#related-links" name="related-links"></a>Related links</h2> + <h2>Related links<a class="title-link" href="#related-links" name="related-links"></a></h2> <ul> {% for link in related_links %} <li><a href="{{ link.url }}" class="link" target="_blank">{{ link.title | default: link.url }}</a></li> diff --git a/source/_includes/site/footer.html b/source/_includes/site/footer.html index d8cac65a506..9c2cc70cd1f 100644 --- a/source/_includes/site/footer.html +++ b/source/_includes/site/footer.html @@ -1,95 +1,134 @@ <div class="grid-wrapper"> <div class="grid"> <div class="grid__item"> - <div class="copyright grid"> - <div class="company grid__item one-third lap-one-half palm-one-whole"> + <div class="skyline grid"> + <div class="skyline grid__item one-whole"> + <div class="footer-skyline"> + </div> + </div> + </div> + <div class="footer-nav grid"> + <div class="company grid__item one-quarter lap-one-half palm-one-whole"> <div class="title"> <img - src="/images/home-assistant-logo-vertical.svg" - height="120" + src="/images/footer-logo-text.svg" + height="72" alt="Home Assistant" /> </div> + <p> + Home Assistant is a project from the <a href="https://www.openhomefoundation.org/">Open Home Foundation</a>, sponsored by <a href="https://www.nabucasa.com/">Nabu Casa</a>. + </p> + </div> + + <div class="grid__item one-quarter lap-one-half palm-one-whole"> + <h4>Join us and contribute!</h4> + <ul> + <li><a class="external-link" href="https://github.com/home-assistant/">GitHub repo <iconify-icon inline icon="tabler:external-link"></iconify-icon></a></li> + <li> + <a class="external-link" href="https://developers.home-assistant.io">Developers Portal <iconify-icon inline icon="tabler:external-link"></iconify-icon></a> + </li> + <li><a class="external-link" href="https://data.home-assistant.io">Data Science Portal <iconify-icon inline icon="tabler:external-link"></iconify-icon></a></li> + <li> + <a class="external-link" href="https://community.home-assistant.io">Community Forum <iconify-icon inline icon="tabler:external-link"></iconify-icon></a> + </li> + <li><a href="/help/reporting_issues/">Reporting issues</a></li> + </ul> + <h4>System status</h4> + <ul> + <li> + <a class="external-link" href="https://alerts.home-assistant.io">Integration Alerts <iconify-icon inline icon="tabler:external-link"></iconify-icon></a> + </li> + <li><a href="/security/">Security Alerts</a></li> + <li> + <a class="external-link" href="https://status.home-assistant.io">System Status <iconify-icon inline icon="tabler:external-link"></iconify-icon></a> + </li> + </ul> + </div> + + <div class="grid__item one-quarter lap-one-half palm-one-whole"> + <h4>Governance</h4> + <ul> + <li><a href="/privacy/">Privacy Notices</a></li> + <li><a href="/developers/cla/">Contributor License Agreement</a></li> + <li><a href="/tos/">Terms of Service</a></li> + <li><a href="/code_of_conduct/">Code of Conduct</a></li> + <li><a href="/developers/credits/">Credits</a></li> + <li><a href="/developers/license/">License</a></li> + </ul> + </div> + + <div class="socials grid__item one-quarter lap-one-half palm-one-whole"> + + <h4>Follow us</h4> + <p><a class="external-link" href='https://building.open-home.io/#/portal'>Sign up for our newsletter <iconify-icon inline icon="tabler:external-link"></iconify-icon></a></p> <div class="icons"> <a rel="me" - href="https://twitter.com/home_assistant" - title="Twitter" + href="https://youtube.com/@home_assistant" + title="YouTube" target="_blank" - ><i class="icon-twitter"></i - ></a> + ><iconify-icon icon="simple-icons:youtube"></iconify-icon></a> <a rel="me" - href="https://fosstodon.org/@homeassistant" - title="Mastodon" + href="https://reddit.com/r/homeassistant" + title="Reddit" target="_blank" - ><svg - xmlns="http://www.w3.org/2000/svg" - viewBox="0 0 216.4144 232.00976" - alt="Mastodon" - > - <path - d="M211.80734 139.0875c-3.18125 16.36625-28.4925 34.2775-57.5625 37.74875-15.15875 1.80875-30.08375 3.47125-45.99875 2.74125-26.0275-1.1925-46.565-6.2125-46.565-6.2125 0 2.53375.15625 4.94625.46875 7.2025 3.38375 25.68625 25.47 27.225 46.39125 27.9425 21.11625.7225 39.91875-5.20625 39.91875-5.20625l.8675 19.09s-14.77 7.93125-41.08125 9.39c-14.50875.7975-32.52375-.365-53.50625-5.91875C9.23234 213.82 1.40609 165.31125.20859 116.09125c-.365-14.61375-.14-28.39375-.14-39.91875 0-50.33 32.97625-65.0825 32.97625-65.0825C49.67234 3.45375 78.20359.2425 107.86484 0h.72875c29.66125.2425 58.21125 3.45375 74.8375 11.09 0 0 32.975 14.7525 32.975 65.0825 0 0 .41375 37.13375-4.59875 62.915" - /> - <path - fill="#fff" - d="M177.50984 80.077v60.94125h-24.14375v-59.15c0-12.46875-5.24625-18.7975-15.74-18.7975-11.6025 0-17.4175 7.5075-17.4175 22.3525v32.37625H96.20734V85.42325c0-14.845-5.81625-22.3525-17.41875-22.3525-10.49375 0-15.74 6.32875-15.74 18.7975v59.15H38.90484V80.077c0-12.455 3.17125-22.3525 9.54125-29.675 6.56875-7.3225 15.17125-11.07625 25.85-11.07625 12.355 0 21.71125 4.74875 27.8975 14.2475l6.01375 10.08125 6.015-10.08125c6.185-9.49875 15.54125-14.2475 27.8975-14.2475 10.6775 0 19.28 3.75375 25.85 11.07625 6.36875 7.3225 9.54 17.22 9.54 29.675" - /> - </svg> - </a> - <a - rel="me" - href="https://www.facebook.com/homeassistantio" - title="Facebook" - target="_blank" - ><i class="icon-facebook"></i - ></a> + ><iconify-icon icon="simple-icons:reddit"></iconify-icon></a> <a rel="me" href="https://github.com/home-assistant/home-assistant" title="GitHub" target="_blank" - ><i class="icon-github"></i - ></a> + ><iconify-icon icon="simple-icons:github"></iconify-icon></a> + <a + rel="me" + href="https://fosstodon.org/@homeassistant" + title="Mastodon" + target="_blank" + ><iconify-icon icon="simple-icons:mastodon"></iconify-icon></a> + <br /> + <a + rel="me" + href="https://x.com/home_assistant" + title="X" + target="_blank" + ><iconify-icon icon="simple-icons:x"></iconify-icon></a> + <a + rel="me" + href="https://www.facebook.com/homeassistantio" + title="Facebook" + target="_blank" + ><iconify-icon icon="simple-icons:facebook"></iconify-icon></a> + <a + rel="me" + href="https://www.instagram.com/homeassistant/" + title="Instagram" + target="_blank" + ><iconify-icon icon="simple-icons:instagram"></iconify-icon></a> + <a + rel="me" + href="https://www.linkedin.com/company/home-assistant" + title="LinkedIn" + target="_blank" + ><iconify-icon icon="simple-icons:linkedin"></iconify-icon></a> </div> - </div> - <div class="grid__item one-third lap-one-half palm-one-whole"> - <ul> - <li> - <a href="https://alerts.home-assistant.io" - >Home Assistant Alerts</a - > - </li> - <li> - <a href="https://developers.home-assistant.io">Developers</a> - </li> - <li><a href="https://data.home-assistant.io">Data Science</a></li> - <li> - <a href="https://community.home-assistant.io">Community Forum</a> - </li> - <li> - <a href="mailto:hello@home-assistant.io">Contact</a> (no support!) - </li> - <li><a href="/security/">Security Vulnerabilities</a></li> - <li><a href="/privacy/">Privacy</a></li> - <li> - <a href="https://status.home-assistant.io">System Status</a> - </li> - <li><a href="https://www.openhomefoundation.org/">Home Assistant is part of the Open Home Foundation</a></li> - </ul> - </div> - - <div class="grid__item one-third lap-one-half palm-one-whole"> - Website powered by <a href="https://jekyllrb.com/">Jekyll</a> and the - <a href="https://github.com/coogie/oscailte">Oscailte theme</a>.<br /> - <br /> - <a href="https://www.netlify.com"> - <img - src="/images/frontpage/netlify.svg" - alt="Deploys by Netlify Badge" - /> - </a> + <div class="web-notice"> + <p> + Contact us <a href="mailto:hello@home-assistant.io">here</a> for media and partnership inquiries. (No technical support!) + </p> + <p> + Website powered by <a href="https://jekyllrb.com/">Jekyll</a><br /> + Originally based on the <a href="https://github.com/coogie/oscailte">Oscailte theme</a> + </p> + <a href="https://www.netlify.com"> + <img + src="/images/frontpage/netlify.svg" + alt="Deploys by Netlify Badge" + /> + </a> + </div> </div> </div> </div> diff --git a/source/_includes/site/head.html b/source/_includes/site/head.html index e29ee41bbb6..9294875a657 100644 --- a/source/_includes/site/head.html +++ b/source/_includes/site/head.html @@ -35,4 +35,9 @@ <link href="{{ site.subscribe_rss }}" rel="alternate" title="{{ site.title }}" type="application/atom+xml"> <link rel='shortcut icon' href='/images/favicon.ico' /> <link rel='icon' type='image/png' href='/images/favicon-192x192.png' sizes='192x192' /> + + <link rel="preconnect" href="https://fonts.googleapis.com"> + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""> + <link href="https://fonts.googleapis.com/css2?family=Figtree:ital,wght@0,300..900;1,300..900&family=Instrument+Sans:ital,wdth,wght@0,99,400..700;1,99,400..700&" rel="stylesheet"> + <script src="https://code.iconify.design/iconify-icon/2.1.0/iconify-icon.min.js"></script> </head> diff --git a/source/_includes/site/header.html b/source/_includes/site/header.html index b318235c053..46e05f56cef 100644 --- a/source/_includes/site/header.html +++ b/source/_includes/site/header.html @@ -1,12 +1,15 @@ +{% assign recent_release_post = site.categories['Core'].first %} + <div class="grid-wrapper"> <div class="grid"> <div class="grid__item three-tenths lap-two-sixths palm-one-whole ha-title"> <a href="/" class="site-title"> - <img - src="/images/home-assistant-logo.svg" - height="36" - alt="Home Assistant" - /> + <div class="logo"></div> + </a> + <a class="release-date" href="{{ recent_release_post.url }}" title="Latest version {{ site.current_major_version }}.{{ + site.current_minor_version }}.{{ site.current_patch_version }} released {{ site.date_released | date: "%B %e, %Y" }}"> + {{ site.current_major_version }}.{{ + site.current_minor_version }}.{{ site.current_patch_version }} </a> </div> @@ -17,30 +20,30 @@ for="toggle" class="toggle" data-open="Main Menu" - data-close="Close Menu" + data-close="⨉" ></label> <ul class="menu pull-right"> <li><a href="/getting-started/">Getting started</a></li> <li> <a href="/docs/" - >Documentation <i class="icon icon-caret-down"></i + >Documentation <iconify-icon inline icon="mdi:chevron-down"></iconify-icon></i ></a> <ul> - <li><a href="/installation/">Installation</a></li> + <li><a href="/installation/"><iconify-icon inline icon="simple-icons:homeassistant"></iconify-icon> Installation</a></li> <li> - <a href="/docs/configuration/">Configuration</a> + <a href="/docs/configuration/"><iconify-icon inline icon="mdi:cog"></iconify-icon> Configuration</a> </li> <li> - <a href="/docs/automation/">Automation</a> + <a href="/docs/automation/"><iconify-icon inline icon="mdi:robot-happy"></iconify-icon> Automation</a> </li> <li> - <a href="/docs/scripts/">Scripting</a> + <a href="/docs/scripts/"><iconify-icon inline icon="mdi:script-text"></iconify-icon> Scripting</a> </li> <li> - <a href="/dashboards/">Dashboards</a> + <a href="/dashboards/"><iconify-icon inline icon="mdi:view-dashboard"></iconify-icon> Dashboards</a> </li> <li> - <a href="/voice_control/">Voice assistant</a> + <a href="/voice_control/"><iconify-icon inline icon="mdi:comment-processing-outline"></iconify-icon> Voice assistant</a> </li> </ul> </li> diff --git a/source/_includes/site/hero_unit.html b/source/_includes/site/hero_unit.html index def95c031d7..11e4851d7f0 100644 --- a/source/_includes/site/hero_unit.html +++ b/source/_includes/site/hero_unit.html @@ -1,14 +1,18 @@ <div class="hero"> <div class="grid-wrapper"> <div class="grid flex"> - <div class="grid__item flex__item two-fifths palm-one-whole"> - <a href='https://demo.home-assistant.io/' target='_blank'> + <div class="grid__item flex__item three-fifths lap-one-half palm-one-whole"> + {% include custom/welcome.html %} + </div> + <div class="grid__item flex__item two-fifths lap-one-half palm-one-whole"> + <iframe id="HAdemo" title="Home Assistant Demo" + src="https://demo.home-assistant.io/"> + </iframe> + + <a id="HAdemoScreenshot" href='https://demo.home-assistant.io/' target='_blank'> <img src="/images/hero_screenshot.png" alt="Home Assistant screenshot"> </a> </div> - <div class="grid__item flex__item three-fifths palm-one-whole"> - {% include custom/welcome.html %} - </div> </div> </div> </div> diff --git a/source/_includes/site/sidebar.html b/source/_includes/site/sidebar.html index 410c1daad25..76d9d3db214 100644 --- a/source/_includes/site/sidebar.html +++ b/source/_includes/site/sidebar.html @@ -30,20 +30,19 @@ {% elsif root == 'conference' %} {% include asides/conference_navigation.html %} {% else %} - {% include asides/about.html %} - {% if page.blog_index %} {% include asides/categories.html %} {% else %} {% include post/sharing.html %} {% include asides/recent_posts.html %} {% endif %} + {% include asides/about.html %} {% endif %} {% if page.toc %} {%- unless page.no_toc -%} <section class="aside-module grid__item one-whole lap-one-half"> <div class='section'> - <h1 class="title delta">On this page</h1> + <h1 class="title epsilon"><iconify-icon inline icon="mdi:toc"></iconify-icon> On this page</h1> {{ content | toc_only }} </div> </section> @@ -53,7 +52,7 @@ {%- if page.ha_category.first -%} <section class="aside-module grid__item one-whole lap-one-half"> <div class='section'> - <h1 class="title delta">Categories</h1> + <h1 class="title epsilon"><iconify-icon inline icon="mdi:category"></iconify-icon> Categories</h1> <ul class='divided'> {%- for category in page.ha_category -%} <li> diff --git a/source/_integrations/accuweather.markdown b/source/_integrations/accuweather.markdown index 84bc2fcfb12..130a7a0937a 100644 --- a/source/_integrations/accuweather.markdown +++ b/source/_integrations/accuweather.markdown @@ -42,9 +42,7 @@ You can test your newly created API key [here](https://developer.accuweather.com {% include integrations/config_flow.md %} -<div class="note warning"> - +{% important %} Due to limitations of the terms of use of AccuWeather free API key, it is possible to configure only one integration instance. The Limited Trial account only allows 50 API calls per day. - -</div> +{% endimportant %} diff --git a/source/_integrations/actiontec.markdown b/source/_integrations/actiontec.markdown index d3f51fdbb42..a61d58fab6b 100644 --- a/source/_integrations/actiontec.markdown +++ b/source/_integrations/actiontec.markdown @@ -20,9 +20,9 @@ Supported devices (tested): - MI424WR (Verizon FIOS) -<div class='note warning'> +{% important %} This device tracker needs telnet to be enabled on the router. -</div> +{% endimportant %} To use this device tracker in your installation, add the following to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} diff --git a/source/_integrations/adguard.markdown b/source/_integrations/adguard.markdown index 6919048433f..656c268afc6 100644 --- a/source/_integrations/adguard.markdown +++ b/source/_integrations/adguard.markdown @@ -53,10 +53,10 @@ write an automation to turn off Safe Search after the kids' bedtime. The "AdGuard Protection" switch is a master switch. It will turn off and bypass all AdGuard features, regardless of whether they are switched on or not. -<div class="note"> +{% important %} Turning off Query Log will result in all sensors not receiving updates anymore. AdGuard relies on Query Log to provide stats. -</div> +{% endimportant %} ## Services diff --git a/source/_integrations/aftership.markdown b/source/_integrations/aftership.markdown index ad71021b6b9..847373c567c 100644 --- a/source/_integrations/aftership.markdown +++ b/source/_integrations/aftership.markdown @@ -20,9 +20,9 @@ The sensor value shows the number of packages that are not in `Delivered` state. To use this sensor, you need an [AfterShip Account](https://accounts.aftership.com/register) and set up an API Key. To set up an API Key go to [AfterShip API](https://admin.aftership.com/settings/api-keys) page, and copy existing key or generate a new one. -<div class='note info'> +{% important %} AfterShip removed the Tracking API functionality from the Forever Free plan, and also no longer offers it in the Essentials plan. Using this integration now requires at least the [Pro](https://www.aftership.com/pricing/tracking) plan. -</div> +{% endimportant %} {% include integrations/config_flow.md %} @@ -45,6 +45,6 @@ AfterShip removed the Tracking API functionality from the Forever Free plan, and | `tracking_number` | `True` | string | Tracking number | `slug` | `True` | string | Carrier e.g., `fedex` -<div class='note info'> +{% note %} This integration retrieves data from AfterShip public REST API, but the integration is not affiliated with AfterShip. -</div> +{% endnote %} diff --git a/source/_integrations/agent_dvr.markdown b/source/_integrations/agent_dvr.markdown index 0604a98c4d2..2b4131e19bd 100644 --- a/source/_integrations/agent_dvr.markdown +++ b/source/_integrations/agent_dvr.markdown @@ -22,9 +22,9 @@ You can add Agent DVR via integrations using the IP address and port of the serv {% include integrations/config_flow.md %} -<div class='note'> - Please ensure you are using Agent DVR v2.6.1.0 + -</div> +{% important %} +Please ensure you are using Agent DVR v2.6.1.0 + +{% endimportant %} ## Alarm control panel diff --git a/source/_integrations/airgradient.markdown b/source/_integrations/airgradient.markdown index e44ed718703..4fc22df2089 100644 --- a/source/_integrations/airgradient.markdown +++ b/source/_integrations/airgradient.markdown @@ -19,11 +19,9 @@ ha_zeroconf: true The AirGradient integration will fetch data from your [AirGradient devices](https://www.airgradient.com/). -<div class='note'> - +{% important %} In order for the device to be set up or discovered by Home Assistant, the firmware version should be at least 3.1.1. - -</div> +{% endimportant %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/airly.markdown b/source/_integrations/airly.markdown index 016e66c0b5f..ec0aad26d7b 100644 --- a/source/_integrations/airly.markdown +++ b/source/_integrations/airly.markdown @@ -24,8 +24,10 @@ To generate an Airly API key, go to [Airly for developers](https://developer.air {% include integrations/config_flow.md %} -<div class="note warning"> - -Airly allows 100 data updates per day. For this reason, the more Airly instances configured, the less frequent updates will be. For one configured Airly instance, data will be updated every 15 minutes, for two configured instances, data will be updated every 30 minutes, for three configured instances, data will be updated every 45 minutes, etc. - -</div> +{% note %} +Airly allows 100 data updates per day. For this reason, the more Airly instances +configured, the less frequent updates will be. For one configured Airly instance, +data will be updated every 15 minutes, for two configured instances, data will +be updated every 30 minutes, for three configured instances, data will be +updated every 45 minutes, etc. +{% endnote %} diff --git a/source/_integrations/airnow.markdown b/source/_integrations/airnow.markdown index 26eacd1770a..2fc5f32d27d 100644 --- a/source/_integrations/airnow.markdown +++ b/source/_integrations/airnow.markdown @@ -34,8 +34,6 @@ First, navigate to the [AirNow Current Observations By Lat/Lon](https://docs.air If the query returns a result other than `[]`, open a bug report and include the query result (you may sanitize the data to remove your latitude and longitude, but please do not remove any fields). This information will help a lot to figure out the source of the issue. -<div class="note"> - +{% note %} The AirNow API allows 500 data updates per hour, but since observations are only updated hourly, the default update rate is set to 2 per hour and should not trigger rate limiting. If you use this API key for other purposes, ensure the total request rate does not exceed 500 per hour. - -</div> +{% endnote %} diff --git a/source/_integrations/airvisual.markdown b/source/_integrations/airvisual.markdown index 66ee7f1d915..1efd9e8281e 100644 --- a/source/_integrations/airvisual.markdown +++ b/source/_integrations/airvisual.markdown @@ -23,7 +23,7 @@ AirVisual API keys can be obtained [here](https://www.iqair.com/dashboard/api). The Community API key is valid for 12 months after which it will expire. You must then go back to the AirVisual website, delete your old key, create a new one following the same steps and update your configuration with the new key. -<div class='note warning'> +{% note %} The "Community" API key is limited to 10,000 calls per month. In order to accommodate using the same API key for multiple geographies, the `airvisual` integration will automatically "re-level" the time between API calls so as to not overrun the call limit. @@ -33,7 +33,7 @@ For example: - Two instances of the integration: API calls every 10 minutes - etc. -</div> +{% endnote %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/aladdin_connect.markdown b/source/_integrations/aladdin_connect.markdown index 3a9c957c5cf..731ed4163bd 100644 --- a/source/_integrations/aladdin_connect.markdown +++ b/source/_integrations/aladdin_connect.markdown @@ -19,9 +19,9 @@ ha_quality_scale: platinum The Aladdin Connect integration lets you control Genie Aladdin Connect garage doors through Home Assistant. -<div class='note'> +{% note %} Only doors that are owned by your Aladdin Connect account will be available. Doors that your account has been granted shared access to are not yet supported. -</div> +{% endnote %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/alarm_control_panel.ifttt.markdown b/source/_integrations/alarm_control_panel.ifttt.markdown index 609a4358de4..6f79d20bfe3 100644 --- a/source/_integrations/alarm_control_panel.ifttt.markdown +++ b/source/_integrations/alarm_control_panel.ifttt.markdown @@ -14,9 +14,9 @@ The `ifttt` {% term integration %} allows you to integrate security systems that This {% term integration %} depends on the [IFTTT](/integrations/ifttt/) Home Assistant integration. See the integrations documentation to set it up. -<div class='note'> +{% note %} It is important to note that this platform fully relies on IFTTT to receive updates when the security system's state changes. Therefore, this platform shows an assumed state. -</div> +{% endnote %} ## Configuration @@ -79,11 +79,11 @@ optimistic: default: false {% endconfiguration %} -<div class='note warning'> +{% warning %} -It is strongly discouraged to use this platform when you don't use encryption; otherwise, your API password will be send unprotected through the IFTTT Webhooks. It is advised to [setup encryption using Let's Encrypt](https://home-assistant.io/blog/2017/09/27/effortless-encryption-with-lets-encrypt-and-duckdns/). +It is strongly discouraged to use this platform when you don't use encryption; otherwise, your API password will be send unprotected through the IFTTT Webhooks. It is advised to [setup encryption using Let's Encrypt](/blog/2017/09/27/effortless-encryption-with-lets-encrypt-and-duckdns/). -</div> +{% endwarning %} ### Required IFTTT applets diff --git a/source/_integrations/alarm_control_panel.mqtt.markdown b/source/_integrations/alarm_control_panel.mqtt.markdown index eaea1448d9c..78847e993aa 100644 --- a/source/_integrations/alarm_control_panel.mqtt.markdown +++ b/source/_integrations/alarm_control_panel.mqtt.markdown @@ -341,8 +341,7 @@ mqtt: {% endraw %} -<div class='note warning'> - +{% caution %} When your MQTT connection is not secured, this will send your secret code over the network unprotected! - -</div> +{% endcaution %} + \ No newline at end of file diff --git a/source/_integrations/alarmdecoder.markdown b/source/_integrations/alarmdecoder.markdown index 2faa1d6d50a..cbc5bc4614f 100644 --- a/source/_integrations/alarmdecoder.markdown +++ b/source/_integrations/alarmdecoder.markdown @@ -109,11 +109,9 @@ The **Alarm Decoder** {% term integration %} gives you access to several {% term - `alarmdecoder.alarm_keypress`: Sends a string of characters to the alarm, as if you had touched those keys on a keypad. - `alarmdecoder.alarm_toggle_chime`: Toggles the alarm's chime state. -<div class='note'> - +{% note %} `alarm_arm_custom_bypass` and `alarm_trigger`, while available in the services list in Home Assistant, are not currently implemented in the Alarm Decoder platform. - -</div> +{% endnote %} ### Examples @@ -196,11 +194,11 @@ The tables below show the key press sequences used for arming for the different #### code_arm_required = false -<div class='note'> +{% note %} The `chr(4)` and `chr(5)` sequences below are equivalent to pressing the <em>Stay</em> and <em>Away</em> keypad keys respectively (as outlined in the <a href='https://www.alarmdecoder.com/wiki/index.php/Protocol#Special_Keys'>AlarmDecoder documentation</a>). -</div> +{% endnote %} | Mode | Key Sequence | | ------------------------------------------------------- | ------------------------------ | diff --git a/source/_integrations/alexa.smart_home.markdown b/source/_integrations/alexa.smart_home.markdown index ee92110be1d..cef080c0a83 100644 --- a/source/_integrations/alexa.smart_home.markdown +++ b/source/_integrations/alexa.smart_home.markdown @@ -21,14 +21,14 @@ It takes considerable effort to configure. Your Home Assistant instance must be The [Emulated Hue integration][emulated-hue-integration] provides a simpler alternative to use utterances such as _"Alexa, turn on the kitchen light"_. However, it has some limitations since everything looks like a light bulb. -<div class='note'> +{% note %} With [Home Assistant Cloud](/cloud/), you can connect your Home Assistant instance in a few simple clicks to Amazon Alexa. With Home Assistant Cloud you don't have to deal with dynamic DNS, SSL certificates or opening ports on your router. Just log in via the user interface and a secure connection with the cloud will be established. Home Assistant Cloud requires a paid subscription after a 30-day free trial. <br/> <br/> For Home Assistant Cloud Users, documentation can be found [here](https://www.nabucasa.com/config/amazon_alexa/). -</div> +{% endnote %} Steps to Integrate an Amazon Alexa Smart Home Skill with Home Assistant: @@ -244,9 +244,10 @@ Alexa needs to link your Amazon account to your Home Assistant account. Therefor Read [more from the Alexa developer documentation](https://developer.amazon.com/en-US/docs/alexa/account-linking/requirements-account-linking.html) about requirements for account linking. -<div class="note"> - Note: you must use a valid/trusted SSL certificate for account linking to work. Self signed certificates will not work, but you can use a free Let's Encrypt certificate. -</div> +{% important %} +You must use a valid/trusted SSL certificate for account linking to work. +Self signed certificates will not work, but you can use a free Let's Encrypt certificate. +{% endimportant %} - `Client ID`: - `https://pitangui.amazon.com/` if you are in US @@ -452,9 +453,9 @@ light.kitchen_light: display_categories: LIGHT,SWITCH ``` -<div class='note info'> +{% note %} Devices such as cameras, garage doors, and alarm control panels require specific display categories to provide all available features from Amazon Alexa. Overriding the default display category will limit features provided by Amazon Alexa. -</div> +{% endnote %} See [Alexa Display Categories][alexa-display-categories] for a complete list @@ -479,12 +480,10 @@ The alarm control panel state must be in the `disarmed` state before arming. Ale The alarm control panel state `armed_custom_bypass` isn't supported by Alexa and is treated as `armed_home`. -<div class="note"> - +{% note %} Alexa does not support arming with voice PIN at this time. Therefore if the alarm control panel requires a `code` for arming or the `code_arm_required` attribute is `true`, the entity will not be exposed during discovery. The alarm control panel may default the `code_arm_required` attribute to `true` even if the platform does not support or require it. Use the [entity customization tool](/docs/configuration/customizing-devices/#customization-using-the-ui) to override `code_arm_required` to `false` and expose the alarm control panel during discovery. - -</div> +{% endnote %} #### Disarming @@ -594,11 +593,9 @@ alexa: Alexa will announce on all echo devices _"Person detected at [entity name]"_. -<div class="note"> - +{% important %} Each Echo device will need the communication and Announcements setting enabled, and the Do Not Disturb feature turned off. - -</div> +{% endimportant %} <p class='img'> <a href='/images/integrations/alexa/alexa_app_person_detection.png' target='_blank'> @@ -727,9 +724,9 @@ Requires [Proactive Events](#proactive-events) enabled. Home Assistant `event` entities can trigger a doorbell announcement in Alexa if the `device_class` of the `event` entity is set to `doorbell`. Alexa will announce on all echo devices _"Someone is at the [entity name]"_ when an `event` entity has received an updated. -<div class='note info'> +{% note %} Each Amazon Echo device will need the communication and announcements setting enabled and the Do Not Disturb feature turned off. -</div> +{% endnote %} <p class='img'> <a href='/images/integrations/alexa/alexa_app_doorbell_announcement.png' target='_blank'> @@ -810,11 +807,9 @@ Alexa will announce on all echo devices _"Person detected at [entity name]"_. <img height='460' src='/images/integrations/alexa/alexa_app_person_detection.png' alt='Screenshot: Alexa App Person Detection Notification'/></a> </p> -<div class='note'> - +{% note %} Display category will default to `CAMERA` to enable presence detected notification settings in the Alexa App. Each Echo device will need the communication and Announcements setting enabled, and the Do Not Disturbed feature turned off. - -</div> +{% endnote %} ### Input Number and Number @@ -943,9 +938,9 @@ Home Assistant will attempt to translate the `media_player` `source_list` into a Requires [Proactive Events](#proactive-events) enabled. -<div class='note info'> +{% note %} Intents to seek forwards (skip) or to rewind (go back) are not supported at the moment. -</div> +{% endnote %} ### Scene @@ -1007,9 +1002,9 @@ Pause and Restart Timer entities in Home Assistant. - _"Alexa, hold the sous vide."_ - _"Alexa, restart the microwave."_ -<div class="note"> +{% important %} To avoid issues with Alexa's built-in timer functionality, the timer entity should not include the word "timer" in its friendly name. -</div> +{% endimportant %} ### Vacuum diff --git a/source/_integrations/analytics.markdown b/source/_integrations/analytics.markdown index 58e4a1fcc92..20d9ae3a15a 100644 --- a/source/_integrations/analytics.markdown +++ b/source/_integrations/analytics.markdown @@ -46,7 +46,7 @@ If you are running Home Assistant Operating System, this will also contain: - The board type you are using - The version of the Operating System -{% details Example payload %} +{% details "Example payload" %} ```json { @@ -87,7 +87,7 @@ If your system includes the Supervisor, this will also contain: - If protection mode is enabled - If auto update is enabled -{% details Example payload %} +{% details "Example payload" %} ```json { @@ -140,7 +140,7 @@ If your system includes the Supervisor, this will also contain: - Number of installed add-ons -{% details Example payload %} +{% details "Example payload" %} ```json { diff --git a/source/_integrations/android_ip_webcam.markdown b/source/_integrations/android_ip_webcam.markdown index 9932dece87e..18968efb6e4 100644 --- a/source/_integrations/android_ip_webcam.markdown +++ b/source/_integrations/android_ip_webcam.markdown @@ -38,8 +38,6 @@ Download [Android IP Webcam app](https://play.google.com/store/apps/details?id=c {% include integrations/config_flow.md %} -<div class='note'> - +{% note %} You need to enable logging in the Android app (`Data logging` > `Enable data logging`) if you wish to see the sensor states in Home Assistant. The {% term sensor %} {% term states %} stay as `unknown`, until this is enabled. - -</div> +{% endnote %} diff --git a/source/_integrations/androidtv.markdown b/source/_integrations/androidtv.markdown index d91224a91ad..7bd7523945b 100644 --- a/source/_integrations/androidtv.markdown +++ b/source/_integrations/androidtv.markdown @@ -18,11 +18,9 @@ ha_integration_type: device The **Android Debug Bridge** {% term integration %} allows you to control an Android device or [Amazon Fire TV](https://www.amazon.com/b/?node=8521791011) device. -<div class='note'> - +{% important %} When setting up this {% term integration %}, it is recommended that you do NOT use an ADB server and instead use the built-in Python ADB implementation. This simplifies the setup and makes it easier to troubleshoot issues. If there are stability issues with this approach, then you may wish to try using an ADB server. See the [ADB Setup](#adb-setup) section for more information. - -</div> +{% endimportant %} ## Device preparation @@ -64,21 +62,17 @@ Configure State Detection Rules: This integration works by sending ADB commands to your Android / Fire TV device. There are two ways to accomplish this. -<div class='note'> - +{% important %} When connecting to your device for the first time, a dialog will appear on your Android / Fire TV asking you to approve the connection. Check the box that says "always allow connections from this device" and hit OK. - -</div> +{% endimportant %} ### 1. Python ADB Implementation The default approach is to connect to your device using the `adb-shell` Python package. As of Home Assistant 0.101, if a key is needed for authentication and it is not provided by the `ADB Key` setup option, then Home Assistant will generate a key for you. -<div class='note'> - +{% important %} To be able to provide `ADB Key` on integration setup, you need to enable [advanced mode](/blog/2019/07/17/release-96/#advanced-mode). - -</div> +{% endimportant %} Prior to Home Assistant 0.101, this approach did not work well for newer devices. Efforts have been made to resolve these issues, but if you experience problems then you should use the ADB server option. @@ -86,11 +80,9 @@ Prior to Home Assistant 0.101, this approach did not work well for newer devices The second option is to use an ADB server to connect to your Android and Fire TV devices. -<div class='note'> - +{% important %} To configure ADB server on integration setup, you need to enable [advanced mode](/blog/2019/07/17/release-96/#advanced-mode). - -</div> +{% endimportant %} Using this approach, Home Assistant will send the ADB commands to the server, which will then send them to the Android / Fire TV device and report back to Home Assistant. To use this option, add the `adb_server_ip` option to your configuration. If you are running the server on the same machine as Home Assistant, you can use `127.0.0.1` for this value. diff --git a/source/_integrations/anel_pwrctrl.markdown b/source/_integrations/anel_pwrctrl.markdown index 80993033f5f..88ec2658284 100644 --- a/source/_integrations/anel_pwrctrl.markdown +++ b/source/_integrations/anel_pwrctrl.markdown @@ -59,8 +59,6 @@ password: type: string {% endconfiguration %} -<div class="note"> - +{% note %} If no **host** is given the platform will try to auto-discover all devices on the network, that are listening on the given **port_recv**. - -</div> +{% endnote %} diff --git a/source/_integrations/anthemav.markdown b/source/_integrations/anthemav.markdown index 59b40e31f26..905f0030f7f 100644 --- a/source/_integrations/anthemav.markdown +++ b/source/_integrations/anthemav.markdown @@ -54,10 +54,10 @@ port: - The tuner is currently unsupported as are the `media_player` play, pause, prev, and next controls. - Enabling this platform will set and enforce **Standby IP Control On** within your Anthem device. You almost certainly want this. If you disable it on the device, it will just get re-enabled by Home Assistant. -<div class='note warning'> +{% warning %} The {% term integration %} will maintain a persistent connection to the network control port which will prevent any other application from communicating with the receiver. This includes the Anthem iOS and Android remote control apps as well as the ARC-2 Anthem Room Calibration software. If you want to use another application that makes use of the network control port, disable this {% term integration %} and restart Home Assistant. <br /><br /> *The underlying Python module has hooks for halting and resuming the network connection but those functions are currently unsupported by the Home Assistant platform.* -</div> +{% endwarning %} \ No newline at end of file diff --git a/source/_integrations/apcupsd.markdown b/source/_integrations/apcupsd.markdown index 409a7ec2a6d..819e1e30254 100644 --- a/source/_integrations/apcupsd.markdown +++ b/source/_integrations/apcupsd.markdown @@ -34,11 +34,11 @@ After installation, follow the instructions on the GitHub page to configure the {% include integrations/config_flow.md %} -<div class='note'> +{% note %} If you get `ConnectionRefusedError: Connection refused` errors in the Home Assistant logs, ensure the [apcupsd](http://www.apcupsd.org/) configuration directives used by its Network Information Server is set to permit connections from all addresses [NISIP 0.0.0.0](http://www.apcupsd.org/manual/manual.html#configuration-directives-used-by-the-network-information-server), else non-local addresses will not connect. -</div> +{% endnote %} ## Binary sensor @@ -51,11 +51,11 @@ This integration provides a binary sensor for the following information from apc This integration provides sensors for the following information from apcupsd based on their availability. Each sensor is listed here along with their corresponding resource name obtained from `apcaccess`. -<div class='note'> +{% note %} Some sensors are disabled by default, since they provide information that is only useful for advanced users. You can manually enable them in **{% my entities title="Settings -> Devices & Services -> Entities" %}** -> the sensor entity you want to enable -> Advanced settings -> Enabled. -</div> +{% endnote %} - UPS Alarm Delay (ALARMDEL) - UPS Ambient Temperature (AMBTEMP) diff --git a/source/_integrations/aquostv.markdown b/source/_integrations/aquostv.markdown index 2ce4cbbdd0b..41bcd6a7403 100644 --- a/source/_integrations/aquostv.markdown +++ b/source/_integrations/aquostv.markdown @@ -61,13 +61,11 @@ power_on_enabled: type: boolean {% endconfiguration %} -<div class='note warning'> - +{% important %} When you set **power_on_enabled** as True, you have to turn on your TV on the first time with the remote. Then you will be able to turn on with Home Assistant. Also, with **power_on_enabled** as True, the Aquos logo on your TV will stay on when you turn off the TV and your TV could consume more power. - -</div> +{% endimportant %} ## Currently known supported models diff --git a/source/_integrations/arest.markdown b/source/_integrations/arest.markdown index 8e45619eb14..ccd6552d2d3 100644 --- a/source/_integrations/arest.markdown +++ b/source/_integrations/arest.markdown @@ -73,9 +73,9 @@ binary_sensor: name: Office ``` -<div class='note'> +{% note %} This sensor is not suitable for fast state changes because there is a high possibility that the change took place between two update cycle. -</div> +{% endnote %} ## Sensor diff --git a/source/_integrations/arris_tg2492lg.markdown b/source/_integrations/arris_tg2492lg.markdown index 06a4fd4d8f3..709ccc15148 100644 --- a/source/_integrations/arris_tg2492lg.markdown +++ b/source/_integrations/arris_tg2492lg.markdown @@ -23,9 +23,9 @@ This is one of the routers provided by: - [Ziggo](https://www.ziggo.nl/), a cable operator in the Netherlands, to their customers as the Ziggo Connectbox. - [Virgin Media](https://www.virginmedia.com/), a cable operator in the United Kingdom and Ireland, to their customers as the Hub 3. -<div class='note warning'> +{% warning %} The router prevents the admin user from logging in twice. This can cause problems with accessing the router's configuration pages while this platform is active. -</div> +{% endwarning %} To use this device tracker in your installation, add the following to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} diff --git a/source/_integrations/aruba.markdown b/source/_integrations/aruba.markdown index eb7887a0db6..e5a3bacc37d 100644 --- a/source/_integrations/aruba.markdown +++ b/source/_integrations/aruba.markdown @@ -26,9 +26,9 @@ Supported devices (tested): - Aruba IAP-335 - Aruba Instant IAP-275 -<div class='note warning'> +{% important %} This device tracker needs telnet to be enabled on the router. -</div> +{% endimportant %} To use this device tracker in your installation, add the following to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} diff --git a/source/_integrations/asuswrt.markdown b/source/_integrations/asuswrt.markdown index ab57fc8c518..881b7cfc491 100644 --- a/source/_integrations/asuswrt.markdown +++ b/source/_integrations/asuswrt.markdown @@ -28,11 +28,9 @@ There is currently support for the following device types within Home Assistant: {% include integrations/config_flow.md %} -<div class='note warning'> - +{% important %} You need to enable telnet on your router if you choose to use `protocol: telnet`. - -</div> +{% endimportant %} ### Sensors configuration @@ -62,11 +60,9 @@ Require IP: description: If devices must have IP (this option is available only for access point mode). {% endconfiguration_basic %} -<div class='note'> - +{% note %} If you don't want to automatically track new detected device, disable the integration system option `Enable new added entities` - -</div> +{% endnote %} ## Padavan custom firmware (The rt-n56u project) diff --git a/source/_integrations/atag.markdown b/source/_integrations/atag.markdown index 09ea8ad0b2b..96ed0bdf297 100644 --- a/source/_integrations/atag.markdown +++ b/source/_integrations/atag.markdown @@ -57,10 +57,10 @@ This integration supports the following services (see [Climate](/integrations/cl - `away` enable the vacation mode for 1 day or until another preset is activated - `boost` enable fireplace mode -<div class='note'> +{% note %} `HVAC mode Auto` (Weather based) should not be confused with `Preset mode Auto` (Scheduled, thermostat mode). Currently selection of custom timeframes in Extend, Away and boost modes is not supported. The default settings can be changed on the device. -</div> +{% endnote %} ## Water heater diff --git a/source/_integrations/august.markdown b/source/_integrations/august.markdown index 855ee3fda90..d32e3ffd991 100644 --- a/source/_integrations/august.markdown +++ b/source/_integrations/august.markdown @@ -58,9 +58,9 @@ There is currently support for the following device types within Home Assistant: - Camera - Lock -<div class='note'> +{% note %} Most devices will need either August Connect Bridge or Doorbell to connect to Home Assistant. -</div> +{% endnote %} ## Known issues with battery reporting diff --git a/source/_integrations/aws.markdown b/source/_integrations/aws.markdown index a2edad54af1..9682f1b4be5 100644 --- a/source/_integrations/aws.markdown +++ b/source/_integrations/aws.markdown @@ -146,9 +146,9 @@ If one exists, the SNS Subject will be set to the title. All attributes from the - On the left-hand side, select "Users" then click "Create New Users". Enter a name here and then click "Create". - You can either download the credentials or click the arrow to display them one time. -<div class='note warning'> +{% warning %} If you do not download them, you will lose them and will have to recreate a new user. -</div> +{% endwarning %} - Copy/Paste the two keys that are shown here in your {% term "`configuration.yaml`" %} file. - On the left-hand side of the screen go back to "Users" and select the user you just created. On the "Permissions" tab click the "Attach Policy" icon. Search for "SNS" and attach the policy "AmazonSNSFullAccess". diff --git a/source/_integrations/axis.markdown b/source/_integrations/axis.markdown index 6baa58ecc34..b17b1a1308a 100644 --- a/source/_integrations/axis.markdown +++ b/source/_integrations/axis.markdown @@ -30,9 +30,9 @@ ha_integration_type: device {% include integrations/config_flow.md %} -<div class='note'> - It is recommended that you create a user on your Axis device specifically for Home Assistant. For sensor functionality, it is enough to create a user with viewer privileges. If you want additional functional control you will need admin privileges. -</div> +{% tip %} +It is recommended that you create a user on your Axis device specifically for Home Assistant. For sensor functionality, it is enough to create a user with viewer privileges. If you want additional functional control you will need admin privileges. +{% endtip %} ## Debugging integration diff --git a/source/_integrations/azure_data_explorer.markdown b/source/_integrations/azure_data_explorer.markdown index ba37fd16494..60e68a6459d 100644 --- a/source/_integrations/azure_data_explorer.markdown +++ b/source/_integrations/azure_data_explorer.markdown @@ -140,10 +140,9 @@ filter: type: list {% endconfiguration %} -<div class='note warning'> +{% warning %} Not filtering domains or entities will send every event to Azure Data Explorer. -</div> - +{% endwarning %} ### Configuring a filter diff --git a/source/_integrations/azure_event_hub.markdown b/source/_integrations/azure_event_hub.markdown index 612b6169242..a2948e056fe 100644 --- a/source/_integrations/azure_event_hub.markdown +++ b/source/_integrations/azure_event_hub.markdown @@ -35,13 +35,13 @@ The final thing to consider is how often you want the integration to send messag You can setup [filters](#filter-configuration) through the {% term "`configuration.yaml`" %}. -<div class='note warning'> +{% warning %} Not filtering domains or entities will send every event to Azure Event Hub, thus taking up a lot of space and bandwidth. -</div> +{% endwarning %} -<div class='note warning'> +{% note %} Event Hubs have a retention time of at most 7 days, if you do not capture or use the events they are deleted automatically from the Event Hub, the default retention is 1 day. -</div> +{% endnote %} ### Filter configuration diff --git a/source/_integrations/azure_service_bus.markdown b/source/_integrations/azure_service_bus.markdown index 176f5ba42cc..4cf22321a51 100644 --- a/source/_integrations/azure_service_bus.markdown +++ b/source/_integrations/azure_service_bus.markdown @@ -28,11 +28,9 @@ You must then create a Shared Access Policy for the Service Bus with `Send` clai Once you have the connection string with `Send` policy, you can set up the integration itself. -<div class='note warning'> - +{% important %} The queue or topic that you are sending to needs to exists with the service bus namespace before you use it within Home Assistant. See [here](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-portal) for how to set up a queue and [here](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-topics-subscriptions-portal) for setting up a topic and subscriptions. - -</div> +{% endimportant %} ## Configuration @@ -70,11 +68,9 @@ topic: type: string {% endconfiguration %} -<div class="note"> - +{% tip %} If you plan to send all state changes from one or more entities within Home Assistant, you should consider using the [Azure Event Hub](/integrations/azure_event_hub/) integration instead. - -</div> +{% endtip %} ## Usage diff --git a/source/_integrations/bbox.markdown b/source/_integrations/bbox.markdown index 667f43a3aef..4485298921c 100644 --- a/source/_integrations/bbox.markdown +++ b/source/_integrations/bbox.markdown @@ -24,9 +24,9 @@ There is currently support for the following device types within Home Assistant: - [Presence Detection](#presence-detection) - [Sensor](#sensor) -<div class='note warning'> +{% note %} Due to third party limitation, the sensors will only be available if Home Assistant and the Bbox are on the same local area network. You can check this by going to 192.168.1.254 with your web browser. -</div> +{% endnote %} ## Presence detection @@ -55,9 +55,9 @@ host: default: 192.168.1.254 {% endconfiguration %} -<div class='note warning'> +{% important %} For now and due to third party limitation, the Bbox must be on the same local network as the Home Assistant installation. -</div> +{% endimportant %} See the [device tracker integration page](/integrations/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_integrations/blink.markdown b/source/_integrations/blink.markdown index 780c4c1f674..4b606d2cde8 100644 --- a/source/_integrations/blink.markdown +++ b/source/_integrations/blink.markdown @@ -28,9 +28,9 @@ ha_integration_type: integration The **Blink** {% term integration %} lets you view camera images and motion events from [Blink](https://blinkforhome.com/) camera and security systems. -<p class='note'> +{% important %} This integration does NOT allow for live viewing of your Blink camera within Home Assistant. -</p> +{% endimportant %} ## Setup diff --git a/source/_integrations/bluetooth.markdown b/source/_integrations/bluetooth.markdown index c30e1914fe0..d9972c36495 100644 --- a/source/_integrations/bluetooth.markdown +++ b/source/_integrations/bluetooth.markdown @@ -53,7 +53,7 @@ For Bluetooth to function on Linux systems: ### Additional details for Container, Core, and Supervised installs -{% details Making the DBus socket available in the Docker container %} +{% details "Making the DBus socket available in the Docker container" %} For most systems, the Dbus socket is in `/run/dbus`. The socket must be available in the container for Home Assistant to be able to connect to Dbus and access the Bluetooth adapter. When starting with `docker run`, this can be accomplished by adding `-v /run/dbus:/run/dbus:ro` to the command. If the Dbus socket is in `/var/run/dbus` on the host system, use `-v /var/run/dbus:/run/dbus:ro` instead. @@ -66,13 +66,13 @@ volumes: {% enddetails %} -{% details Switching from dbus-daemon to dbus-broker %} +{% details "Switching from dbus-daemon to dbus-broker" %} Follow [the instructions](https://github.com/bus1/dbus-broker/wiki) to switch to dbus-broker. {% enddetails %} -{% details Installing BlueZ %} +{% details "Installing BlueZ" %} On Debian based host systems, the `sudo apt-get -y install bluez` command will install BlueZ. @@ -121,11 +121,11 @@ These adapters generally offer the fastest connect times and do not require addi #### Broadcom (BCM) based adapters -<div class='note warning'> +{% warning %} These adapters may require additional patch files available at <a href="https://github.com/winterheart/broadcom-bt-firmware">https://github.com/winterheart/broadcom-bt-firmware</a> for stable operation. There is currently no supported method to install these patch files when using Home Assistant Operating System. -</div> +{% endwarning %} - ASUS USB-BT400 (BCM20702A0) - Cable Matters 604002-BLK (BCM20702A0) @@ -171,15 +171,15 @@ Performance testing used the following hardware: ### Known working adapters -<div class='note'> +{% note %} Known working adapters list adapters that do not meet high-performance requirements but will generally work. These adapters vary widely in performance and may take as long as thirty seconds or more to establish a connection. These adapters may also miss advertisements such as button presses or temperature updates. -</div> +{% endnote %} #### Realtek RTL8761BU adapters -<div class='note warning'> +{% warning %} These adapters do not have a reset pin. If they stop responding, there is currently no way for the kernel to reset them automatically. A generic USB reset for these adapters has been introduced in Linux kernel 6.1 and later. -</div> +{% endwarning %} - ASUS USB-BT500 (RTL8761BU) - Avantree DG45 (RTL8761BU) diff --git a/source/_integrations/bmw_connected_drive.markdown b/source/_integrations/bmw_connected_drive.markdown index 06a9f7ae834..c3319f62472 100644 --- a/source/_integrations/bmw_connected_drive.markdown +++ b/source/_integrations/bmw_connected_drive.markdown @@ -37,9 +37,9 @@ The **BMW Connected Drive** {% term integration %} lets you retrieve data of you The **BMW Connected Drive** {% term integration %} also works with (recent) Mini vehicles. You need to have a working Mini Connected account, and a Mini Connected enabled vehicle for this to work. -<div class='note'> +{% note %} The {% term entities %} available in Home Assistant heavily depend on your vehicle's capabilities (model year, headunit, etc.). The integration will make sure all available car attributes are added as entities. -</div> +{% endnote %} For compatibility with your BMW vehicle check the [bimmer_connected page](https://github.com/bimmerconnected/bimmer_connected) on GitHub. @@ -59,11 +59,9 @@ This integration provides the following platforms: Enable the `BMW Connected Drive` integration via **Settings** -> **Devices & Services**. -<div class='note'> - - For `china`, it is mandatory to prefix your username/phone number with `86`, i.e. `8612345678`. - -</div> +{% note %} +For `china`, it is mandatory to prefix your username/phone number with `86`, i.e. `8612345678`. +{% endnote %} After connecting to your account, you can set the following settings in the integration's options: @@ -122,18 +120,14 @@ The `button.<your_vehicle>_light_flash` button flashes the lights of the vehicle The `button.<your_vehicle>_find_vehicle` button requests the vehicle to update the GPS location. This can be used for older vehicles which don't automatically send the updated GPS location. -<div class="note warning"> +{% warning %} +Using this service will **send your Home Assistant location to BMW**, as this is required by the API (like sharing your mobile phone's location with the MyBMW app for vehicle tracking). +If you do not want this, trigger the `vehicle_finder` service from your phone and it should update in Home Assistant within 5 minutes. +{% endwarning %} - Using this service will **send your Home Assistant location to BMW**, as this is required by the API (like sharing your mobile phone's location with the MyBMW app for vehicle tracking). - If you do not want this, trigger the `vehicle_finder` service from your phone and it should update in Home Assistant within 5 minutes. - -</div> - -<div class="note"> - - On some older cars (non i3/i8 series produced before 7/2014) this service will fail in getting your vehicles position, if the vehicle is more than 1.5 km away from the location of your Home Assistant instance. This is a limitation of the BMW API. - -</div> +{% note %} +On some older cars (non i3/i8 series produced before 7/2014) this service will fail in getting your vehicles position, if the vehicle is more than 1.5 km away from the location of your Home Assistant instance. This is a limitation of the BMW API. +{% endnote %} ## Selects diff --git a/source/_integrations/brother.markdown b/source/_integrations/brother.markdown index c33622be83c..4da9e143685 100644 --- a/source/_integrations/brother.markdown +++ b/source/_integrations/brother.markdown @@ -24,11 +24,9 @@ The integration monitors every supported part. {% include integrations/config_flow.md %} -<div class="note warning"> - +{% note %} Some very old Brother printers use different data format and these models are not supported. The integration will show information about that during configuration. - -</div> +{% endnote %} ## Configuring the printer diff --git a/source/_integrations/brunt.markdown b/source/_integrations/brunt.markdown index c83d6ddb51b..a158866fccc 100644 --- a/source/_integrations/brunt.markdown +++ b/source/_integrations/brunt.markdown @@ -16,8 +16,8 @@ ha_integration_type: integration The **Brunt Blind Energy** {% term integration %} allows one to control Blind Engines by [Brunt](https://www.brunt.co). To use it, you need a Brunt App Account. All Brunt Blind devices registered to your account are automatically added to your Home Assistant with the names given them through the Brunt app. -<div class='note warning'> +{% warning %} This integration is not affiliated with Brunt and retrieves data from the endpoints of the mobile application. Use at your own risk. -</div> +{% endwarning %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/buienradar.markdown b/source/_integrations/buienradar.markdown index 0adae5b4083..9ae04423f9a 100644 --- a/source/_integrations/buienradar.markdown +++ b/source/_integrations/buienradar.markdown @@ -116,9 +116,9 @@ timeframe: description: Minutes to look ahead for precipitation forecast sensors (minimum 5, maximum 120). {% endconfiguration_basic %} -<div class='note'> +{% note %} **Usage statement** Buienradar makes free weather data available for use by individuals and businesses (website/intranet). The use of the weather data is allowed for **non-commercial purposes**. Please refer to the [full usage statement](https://www.buienradar.nl/overbuienradar/gratis-weerdata) to confirm your use or to request permission. -</div> +{% endnote %} diff --git a/source/_integrations/button.mqtt.markdown b/source/_integrations/button.mqtt.markdown index e3393dc3229..1fb48e1e893 100644 --- a/source/_integrations/button.mqtt.markdown +++ b/source/_integrations/button.mqtt.markdown @@ -183,11 +183,9 @@ unique_id: type: string {% endconfiguration %} -<div class='note warning'> - +{% important %} Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics. - -</div> +{% endimportant %} ## Examples diff --git a/source/_integrations/caldav.markdown b/source/_integrations/caldav.markdown index 8b2fe35ce7d..6d2584ca0ec 100644 --- a/source/_integrations/caldav.markdown +++ b/source/_integrations/caldav.markdown @@ -53,7 +53,7 @@ This integration was tested against the following systems, but any other complyi You may also manually add a WebDAV calendar in Home Assistant by adding the following section to your {% term "`configuration.yaml`" %} file. This method does not support to-do lists. {% include integrations/restart_ha_after_config_inclusion.md %} -{% details Manual configuration examples %} +{% details "Manual configuration examples" %} ```yaml # Example configuration.yaml entry for baikal @@ -177,11 +177,9 @@ See [Calendar Automations](/integrations/calendar#automation) for an overview, a The calendar entity has additional attributes related to a single next upcoming event. -<div class='note'> - +{% tip %} Using the entity state and attributes is more error prone and less flexible than using Calendar Automations. The calendar entity itself may only track a single upcoming active event and can't handle multiple events with the same start time, or overlapping events. - -</div> +{% endtip %} - **offset_reached**: If set in the event title and parsed out will be on/off once the offset in the title in minutes is reached. So the title Very important meeting `!! -10` would trigger this attribute to be on 10 minutes before the event starts. This should be in the format of `HH:MM` or `MM`. This attribute is not available when configured from the UI. - **all_day**: `True/False` if this is an all day event. Will be `False` if there is no event found. diff --git a/source/_integrations/calendar.markdown b/source/_integrations/calendar.markdown index 231c3f6c5e1..a3f4b24f9bc 100644 --- a/source/_integrations/calendar.markdown +++ b/source/_integrations/calendar.markdown @@ -160,11 +160,9 @@ Add a new calendar event. A calendar `target` is selected with a [Target Selecto | `location` | yes | The location of the event. | Bowling center -<div class='note'> - +{% note %} You either use `start_date_time` and `end_date_time`, or `start_date` and `end_date`, or `in`. - -</div> +{% endnote %} This is a full example of a {% term service %} call in YAML: @@ -204,11 +202,9 @@ with calendar events within a date range. It can return events from multiple cal | `end_date_time` | yes | Return active events before this time (exclusive). Cannot be used with `duration`. You must specify either `end_date_time` or `duration`.| 2019-03-10 23:00:00 | `duration` | yes | Return active events from `start_date_time` until the specified duration. Cannot be used with `end_date_time`. You must specify either `duration` or `end_date_time`. | `days: 2` -<div class='note'> - +{% note %} Use only one of `end_date_time` or `duration`. - -</div> +{% endnote %} ```yaml service: calendar.get_events diff --git a/source/_integrations/cast.markdown b/source/_integrations/cast.markdown index 2a880e2b4ab..01695310d54 100644 --- a/source/_integrations/cast.markdown +++ b/source/_integrations/cast.markdown @@ -46,21 +46,19 @@ cast_downstairs_on_kitchen: service: cast.show_lovelace_view ``` -<div class='note'> - +{% important %} Home Assistant Cast requires your Home Assistant installation to be accessible via `https://`. If you're using Home Assistant Cloud, you don't need to do anything. Otherwise you must make sure that you have configured the `external_url` in your [configuration](/integrations/homeassistant/#configuration-variables). - -</div> +{% endimportant %} ## Playing media -<div class='note'> +{% note %} Chromecasts generally ignore DNS servers from DHCP and will instead use Google's DNS servers, 8.8.8.8 and 8.8.4.4. This means media URLs must either be specifying the IP-address of the server directly, e.g. `http://192.168.1.1:8123/movie.mp4`, or be publicly resolvable, e.g. `http://homeassistant.internal.mydomain.com:8123/movie.mp4` where `homeassistant.internal.mydomain.com` resolves to `192.168.1.1`. A hostname which can't be publicly resolved, e.g. `http://homeassistant.local:8123/movie.mp4` will fail to play. This is important when casting TTS or local media sources; the cast integration will cast such media from the `external_url` if [configured](/integrations/homeassistant/#editing-the-general-settings-in-yaml), otherwise from the Home Assistant Cloud if configured, otherwise from the [`internal_url`](/integrations/homeassistant/#editing-the-general-settings-in-yaml). Note that the Home Assistant Cloud will not be used if an `external_url` is configured. -</div> +{% endnote %} ### Using the built in media player app (Default Media Receiver) diff --git a/source/_integrations/cisco_ios.markdown b/source/_integrations/cisco_ios.markdown index 1634ff4cfd9..65007d28d5f 100644 --- a/source/_integrations/cisco_ios.markdown +++ b/source/_integrations/cisco_ios.markdown @@ -18,9 +18,9 @@ related: This is a presence detection scanner for [Cisco IOS](https://www.cisco.com/) devices. -<div class='note warning'> +{% important %} This device tracker needs SSH to be enabled on the router. -</div> +{% endimportant %} Before using this scanner it is recommended that you lower the ARP cache timeout on your router, as Cisco IOS normally comes with a 4 hour default ARP cache timeout. @@ -46,11 +46,11 @@ arp timeout 120 copy running-config startup-config ``` -<div class='note warning'> +{% note %} If you have a very large number of devices on your VLan (+1000), then you may want to adjust the ARP cache timeout to suit your needs. See [this discussion](https://community.cisco.com/t5/switching/arp-timeout/td-p/839027) to learn more. -</div> +{% endnote %} To use this device tracker in your installation, add the following to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} diff --git a/source/_integrations/cisco_webex_teams.markdown b/source/_integrations/cisco_webex_teams.markdown index 30844b7adcf..8392deae364 100644 --- a/source/_integrations/cisco_webex_teams.markdown +++ b/source/_integrations/cisco_webex_teams.markdown @@ -29,11 +29,9 @@ You also need to specify the `room_id` that you wish to post messages into. The - select the room (or create a new room), - then copying the room ID from the URL. -<div class='note'> - +{% important %} You must add the bot email (in the format `mybot@webex.bot`) as a participant to the room specified above. - -</div> +{% endimportant %} To enable this platform in your installation, add the following to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} diff --git a/source/_integrations/climate.markdown b/source/_integrations/climate.markdown index b49e08ac820..66ea3f0e557 100644 --- a/source/_integrations/climate.markdown +++ b/source/_integrations/climate.markdown @@ -21,11 +21,9 @@ The **Climate** {% term integration %} allows you to control and monitor HVAC (h Available services: `climate.set_aux_heat`, `climate.set_preset_mode`, `climate.set_temperature`, `climate.set_humidity`, `climate.set_fan_mode`, `climate.set_hvac_mode`, `climate.set_swing_mode`, `climate.turn_on`, `climate.turn_off`, `climate.toggle` -<div class='note'> - +{% tip %} Not all climate {% term services %} may be available for your platform. You can check which climate services are available under **Developer Tools** -> **Services**. - -</div> +{% endtip %} ### Service `climate.set_aux_heat` diff --git a/source/_integrations/color_extractor.markdown b/source/_integrations/color_extractor.markdown index 211fa90d800..6f5a2382b3d 100644 --- a/source/_integrations/color_extractor.markdown +++ b/source/_integrations/color_extractor.markdown @@ -28,11 +28,9 @@ Passing the key `color_extract_url` to the {% term service %} call will download | `color_extract_path` | `/tmp/album.png` | The full path to the image file on local storage we'll process | | `entity_id` | `light.shelf_leds` | The RGB capable light we'll set the color of | -<div class="note"> - - Please ensure any [external URLs](/integrations/homeassistant/#allowlist_external_urls) or [external files](/docs/integrations/homeassistant/#allowlist_external_dirs) are authorized for use. You will receive error messages if this {% term integration %} is not allowed access to these external resources. - -</div> +{% important %} +Ensure any [external URLs](/integrations/homeassistant/#allowlist_external_urls) or [external files](/docs/integrations/homeassistant/#allowlist_external_dirs) are authorized for use. You will receive error messages if this {% term integration %} is not allowed access to these external resources. +{% endimportant %} ### URL Service Call diff --git a/source/_integrations/comfoconnect.markdown b/source/_integrations/comfoconnect.markdown index 9d08628d0e3..08318ce2fe8 100644 --- a/source/_integrations/comfoconnect.markdown +++ b/source/_integrations/comfoconnect.markdown @@ -90,7 +90,7 @@ sensor: The list above indicates all supported sensors. It is recommended to only include the ones you need. -<div class='note'> +{% note %} Note that multiple connections to the bridge only work version >= U1.2.6 of the ComfoConnect LAN C bridge. In older versions it's not possible to have multiple connections to the bridge at the same time. This integration will then keep the connection open, and if you open the app, it will ask you to disconnect Home Assistant. If you close the app again, Home Assistant will reconnect automatically. -</div> +{% endnote %} diff --git a/source/_integrations/command_line.markdown b/source/_integrations/command_line.markdown index 381c56436d6..4e2c2050c10 100644 --- a/source/_integrations/command_line.markdown +++ b/source/_integrations/command_line.markdown @@ -26,11 +26,9 @@ related: The **Command line** {% term integration %} offers functionality that issues specific commands to get data or to control a device. -<div class='note'> - +{% tip %} It's highly recommended to enclose the command in single quotes `'` as it ensures all characters can be used in the command and reduces the risk of unintentional escaping. To include a single quote in a command enclosed in single quotes, double it: `''`. - -</div> +{% endtip %} {% configuration %} command_line: @@ -373,7 +371,7 @@ command_line: ``` {% endraw%} -<div class='note'> +{% note %} A note on `name` for `cover` and `switch`: @@ -381,17 +379,17 @@ The use of `friendly_name` and `object_id` has been deprecated and the slugified Use `unique_id` to enable changing the name from the UI and if required, use the slugified `name` as identifier. -</div> +{% endnote %} ## Execution The `command` is executed within the [configuration directory](/docs/configuration/). -<div class='note'> +{% note %} If you are using [Home Assistant Operating System](https://github.com/home-assistant/operating-system), the commands are executed in the `homeassistant` container context. So if you test or debug your script, it might make sense to do this in the context of this container to get the same runtime environment. -</div> +{% endnote %} With a `0` exit code, the output (stdout) of the command is used as `value`. In case a command results in a non `0` exit code or is terminated by the `command_timeout`, the result is only logged to Home Assistant log and the sensors value is not updated. @@ -691,9 +689,9 @@ Given this example, in the UI one would see the `friendly_name` of This switch will shutdown your system that is hosting Home Assistant. -<div class='note warning'> +{% warning %} This switch will shutdown your host immediately, there will be no confirmation. -</div> +{% endwarning %} {% raw %} ```yaml diff --git a/source/_integrations/configurator.markdown b/source/_integrations/configurator.markdown index 216a8cc85cb..627c6483660 100644 --- a/source/_integrations/configurator.markdown +++ b/source/_integrations/configurator.markdown @@ -11,9 +11,9 @@ ha_domain: configurator ha_integration_type: system --- -<div class='note'> +{% caution %} This integration is intended for developers. -</div> +{% endcaution %} The **Configurator** {% term integration %} allows integrations to request information from the user. It is currently implemented as the minimum viable product: diff --git a/source/_integrations/cover.mqtt.markdown b/source/_integrations/cover.mqtt.markdown index fc8bcc30881..0b890ea932b 100644 --- a/source/_integrations/cover.mqtt.markdown +++ b/source/_integrations/cover.mqtt.markdown @@ -311,13 +311,12 @@ value_template: type: template {% endconfiguration %} -<div class="note"> +{% note %} MQTT cover expects position and tilt values to be in range of 0 to 100, where 0 indicates closed position and 100 indicates fully open position. If position `min` or `max` are set to a different range (e.g. 40 to 140), when sending command to the device the range will be adjusted to the device range (position 0 will send a value of 40 to device) and when position payload is received from the device it will be adjusted back to the 0 to 100 range (device value of 40 will report cover position 0). `min` and `max` can also be used to reverse the direction of the device, if `min` is set to 100 and `max` is set to `0` device operation will be inverted (e.g. when setting position to 40, a value of 60 will be sent to device). - -</div> +{% endnote %} ## Examples diff --git a/source/_integrations/cppm_tracker.markdown b/source/_integrations/cppm_tracker.markdown index 615842ce393..4b33fe0f047 100644 --- a/source/_integrations/cppm_tracker.markdown +++ b/source/_integrations/cppm_tracker.markdown @@ -17,11 +17,9 @@ Supported platforms (tested): - Aruba ClearPass 6.7.5 -<div class='note warning'> - +{% important %} You must first create an API client [here](https://www.arubanetworks.com/techdocs/ClearPass/6.6/Guest/Content/AdministrationTasks1/CreateEditAPIclient.htm). - -</div> +{% endimportant %} To use this device tracker in your installation, add the following to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} diff --git a/source/_integrations/daikin.markdown b/source/_integrations/daikin.markdown index 89e4e573322..410fa24874a 100644 --- a/source/_integrations/daikin.markdown +++ b/source/_integrations/daikin.markdown @@ -20,11 +20,11 @@ ha_platforms: ha_integration_type: integration --- -<div class='note warning'> +{% warning %} Daikin has removed their local API in newer products. They offer a Onecta cloud API for controlling Daikin devices through the cloud, see the [Daikin Europe Developer Portal](https://developer.cloud.daikineurope.com) for more details. This affects units fitted with the BRP069C4x wifi adapter. Units listed under Supported Hardware below continue to have access to local control. Additionally the older but commonly available BRP072A42 adapter can be fitted to most if not all newer units for access to local control. -</div> +{% endwarning %} The **Daikin** {% term integration %} integrates Daikin air conditioning systems into Home Assistant. @@ -43,16 +43,16 @@ There is currently support for the following device types within Home Assistant: - The Australian version of the Daikin Wifi Controller for **AirBase** units (BRP15B61), which is operated by the [Daikin Airbase](https://play.google.com/store/apps/details?id=au.com.daikin.airbase) application. - **SKYFi** based units, which is operated by the SKYFi application*. -<div class='note'> +{% note %} - The integration for BRP072Cxx and SKYFi based units need API-key / password respectively. The API-key/password can be found on a sticker under the front cover. The other models are auto detected and the API-key and password field must be left empty. - BRP084Cxx firmware update from 1.19.0 to 2.8.0 breaks local API there is however ongoing work in fixing local API support again. -</div> +{% endnote %} {% include integrations/config_flow.md %} -<div class='note'> +{% note %} If your Daikin unit does not reside in the same network as your Home Assistant instance, i.e. your network is segmented, note that a couple of UDP connections are made during discovery: @@ -61,7 +61,7 @@ If your Daikin unit does not reside in the same network as your Home Assistant i If this situation applies to you, you may need to adjust your firewall(s) accordingly. -</div> +{% endnote %} ## Climate @@ -76,13 +76,13 @@ The `daikin` climate platform integrates Daikin air conditioning systems into Ho Current inside temperature is displayed. -<div class='note'> +{% note %} Some models do not support setting of **fan speed** or **swing mode**. -</div> +{% endnote %} -<div class='note'> +{% note %} Preset mode **away** translates to Daikin's "Holiday Mode":<br/> <br> @@ -93,7 +93,7 @@ _When "Holiday mode" is enabled, the following action take place:_ - _All connected units are turned OFF._ - _All schedule timers are disabled._ -</div> +{% endnote %} ## Sensor @@ -112,16 +112,16 @@ The integration displays the following parameters for the outdoor compressor: - Outside compressor Energy consumption (sum of all devices, resets at 00:00) - Outside compressor frequency -<div class='note'> +{% note %} - Some models only report outside temperature when they are turned on. - Some models do not have humidity sensor. - Some models do not report the power/energy consumption. - Some models do not report the compressor frequency. -</div> +{% endnote %} -<div class='note'> +{% note %} - The 'Outdoor compressor Energy consumption' and 'Outdoor compressor Estimated power consumption' sensors are updated every time 100 Wh are consumed by all different operating modes summed together. - The 'Outdoor compressor Estimated power consumption' sensor is derived from the above energy consumption and not provided by the AC directly. @@ -130,17 +130,17 @@ The integration displays the following parameters for the outdoor compressor: - The 'cool' mode also includes the 'fan' and 'dehumidifier' modes' power consumption. - If you have multiple indoor devices, the 'Outdoor compressor' sensors will be created multiple times but will all report the same values. You can disable all but one. -</div> +{% endnote %} ## Switch AirBase and SKYFi units exposes zones (typically rooms) that can be switched on/off individually. -<div class='note'> +{% note %} Zones with the name `-` will be ignored, just as the AirBase application is working. -</div> +{% endnote %} A switch is created for each device that will toggle the unit on/off. This will turn the unit on to its previous state, or toggle it off. This switch works in conjunction with the climate entity. diff --git a/source/_integrations/decora.markdown b/source/_integrations/decora.markdown index 2e389fe8af8..2672db9bf95 100644 --- a/source/_integrations/decora.markdown +++ b/source/_integrations/decora.markdown @@ -48,7 +48,7 @@ devices: type: string {% endconfiguration %} -<div class='note'> +{% note %} If you get an error looking like this: @@ -68,4 +68,4 @@ Jun 20 19:41:18 androlapin hass[29588]: OSError: [Errno 8] Exec format error 3. Then run `make all` 4. Restart Home Assistant -</div> +{% endnote %} diff --git a/source/_integrations/denonavr.markdown b/source/_integrations/denonavr.markdown index df62d531ab6..44d91d3eb70 100644 --- a/source/_integrations/denonavr.markdown +++ b/source/_integrations/denonavr.markdown @@ -115,9 +115,9 @@ If your model is not on the list then give it a test, if everything works correc If you are using VLANs, Home Assistant needs access to the following ports on the AVR: 23, 8080, and 60006 (all TCP). -<div class='note warning'> +{% warning %} If you have something else using the IP controller for your Denon AVR 3808CI, such as your URC controller, it will not work! There is either a bug or security issue with some models where only one device could be controlling the IP functionality. -</div> +{% endwarning %} {% include integrations/config_flow.md %} @@ -165,11 +165,11 @@ To use these commands, call the `denonavr.get_command` service and append the sp So for example, the above command `/goform/formiPhoneAppDirect.xml?VSMONI2` will switch the HDMI to output 2 (if your receiver supports it). Sending an IR code works the same, so the command `/goform/formiPhoneAppDirect.xml?RCKSK0410370` will toggle muting. -<div class='note'> +{% tip %} The denonavr platform supports the standard media player controls such as `turn_on` and `volume_up`. Thus calling the service `media_player.turn_on` is equivalent to calling `denonavr.get_command` with the command `/goform/formiPhoneAppDirect.xml?PWON`. See [media_player](/integrations/media_player/) for more details. -</div> +{% endtip %} #### Service `denonavr.set_dynamic_eq` diff --git a/source/_integrations/devialet.markdown b/source/_integrations/devialet.markdown index 077ee62441e..110bd38060a 100644 --- a/source/_integrations/devialet.markdown +++ b/source/_integrations/devialet.markdown @@ -18,13 +18,13 @@ ha_platforms: The **Devialet** integration lets you control your [Devialet](https://www.devialet.com) wireless speakers from Home Assistant. -<div class='note'> +{% important %} - For a stereo setup, only one of the speakers need to be configured. - Make sure your Devialet firmware version is 2.16.1 or later. Otherwise, expect functions not to work. - Assigning a fixed IP address to your speakers is highly recommended. -</div> +{% endimportant %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/device_tracker.markdown b/source/_integrations/device_tracker.markdown index d43b7dc7bc0..0d54b76ee60 100644 --- a/source/_integrations/device_tracker.markdown +++ b/source/_integrations/device_tracker.markdown @@ -32,20 +32,20 @@ device_tracker: The following optional parameters can be used with any platform: -<div class='note'> - Device tracker will only look for the following global settings under the configuration of the first configured platform: -</div> +{% note %} +Device tracker will only look for the following global settings under the configuration of the first configured platform: +{% endnote %} | Parameter | Default | Description | | ------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `interval_seconds` | 12 | Seconds between each scan for new devices. This only applies to local device trackers, not applications that push updates. | | `consider_home` | 180 | Seconds to wait till marking someone as not home after not being seen. This parameter is most useful for households with Apple iOS devices that go into sleep mode while still at home to conserve battery life. iPhones will occasionally drop off the network and then re-appear. `consider_home` helps prevent false alarms in presence detection when using IP scanners such as Nmap. `consider_home` accepts various time representations, (e.g., the following all represents 3 minutes: `180`, `0:03`, `0:03:00`) | -<div class='note'> +{% note %} - Note that setting `track_new_devices: false` will still result in new devices being recorded in `known_devices.yaml`, but they won't be tracked (`track: false`). +Note that setting `track_new_devices: false` will still result in new devices being recorded in `known_devices.yaml`, but they won't be tracked (`track: false`). -</div> +{% endnote %} The extended example from above would look like the following sample: @@ -65,11 +65,11 @@ Multiple device trackers can be used in parallel, such as [Owntracks](/integrati ## `known_devices.yaml` -<div class='note warning'> +{% warning %} As of 0.94 `known_devices.yaml` is being phased out and no longer used by all trackers. Depending on the integration you use this section may no longer apply. This includes OwnTracks, GeoFency, GPSLogger, Locative and Huawei LTE. -</div> +{% endwarning %} Once `device_tracker` is enabled, a file will be created in your configuration dir named `known_devices.yaml`. Edit this file to adjust which devices to be tracked. @@ -83,11 +83,11 @@ devicename: track: true ``` -<div class='note warning'> +{% important %} In the example above, `devicename` refers to the detected name of the device. For example, with `nmap`, this will be the MAC address (with byte separators omitted). -</div> +{% endimportant %} | Parameter | Default | Description | | --------------- | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/source/_integrations/device_tracker.mqtt.markdown b/source/_integrations/device_tracker.mqtt.markdown index 0742270e575..1471fe455cf 100644 --- a/source/_integrations/device_tracker.mqtt.markdown +++ b/source/_integrations/device_tracker.mqtt.markdown @@ -233,11 +233,11 @@ To create the device_tracker with GPS coordinates support: mosquitto_pub -h 127.0.0.1 -t homeassistant/device_tracker/a4567d663eaf/config -m '{"json_attributes_topic": "a4567d663eaf/attributes", "name": "My Tracker"}' ``` -<div class='note info'> +{% note %} Using `state_topic` is optional when using `json_attributes_topic` to determine the state of the device tracker. -</div> +{% endnote %} To set the state of the device tracker to specific coordinates: diff --git a/source/_integrations/dexcom.markdown b/source/_integrations/dexcom.markdown index 132e5c2e9d6..ad572ac4f7d 100644 --- a/source/_integrations/dexcom.markdown +++ b/source/_integrations/dexcom.markdown @@ -22,9 +22,9 @@ You will need to set up the [Dexcom Share](https://provider.dexcom.com/education {% include integrations/config_flow.md %} -<div class='note warning'> +{% note %} Some people have had problems with connecting when their Dexcom passwords are entirely numeric. If you have connection issues in that case, try changing your password to something with a mix of numbers and letters. -</div> +{% endnote %} ### Server diff --git a/source/_integrations/dialogflow.markdown b/source/_integrations/dialogflow.markdown index 93ce6720cdc..bab7a140ca5 100644 --- a/source/_integrations/dialogflow.markdown +++ b/source/_integrations/dialogflow.markdown @@ -19,7 +19,9 @@ To be able to receive messages from Dialogflow, your Home Assistant instance nee Dialogflow could be [integrated](https://cloud.google.com/dialogflow/es/docs/integrations) with many popular messaging, virtual assistant and IoT platforms. -<div class='note warning'> After the [Conversational Actions sunset on June 13, 2023](https://developers.google.com/assistant/ca-sunset), Dialogflow can no longer be integreated with Google Assistant </div> +{% note %} +After the [Conversational Actions sunset on June 13, 2023](https://developers.google.com/assistant/ca-sunset), Dialogflow can no longer be integreated with Google Assistant. +{% endnote %} Using Dialogflow will be easy to create conversations like: @@ -57,11 +59,9 @@ To get the webhook URL, go to the integrations page in the configuration screen - At the top right of the screen where it says "Try it now...", type, or say, the phrase you have previously defined and hit enter. - Dialogflow will now send a request to your Home Assistant instance and display the response. -<div class='note warning'> - - The V1 API will be deprecated on October 23, 2019. If you are still using the V1 API, it is recommended to change your settings in Dialogflow to use the V2 API. No changes to your intents YAML configuration need to take place after upgrading to the V2 API. Change to the V2 API by clicking on the cog button [here](https://console.dialogflow.com/) and then select the V2 API. - -</div> +{% note %} +The V1 API will be deprecated on October 23, 2019. If you are still using the V1 API, it is recommended to change your settings in Dialogflow to use the V2 API. No changes to your intents YAML configuration need to take place after upgrading to the V2 API. Change to the V2 API by clicking on the cog button [here](https://console.dialogflow.com/) and then select the V2 API. +{% endnote %} Take a look to "Integrations", in the left menu, to configure third parties. diff --git a/source/_integrations/discord.markdown b/source/_integrations/discord.markdown index f5e2c9476f0..efac386d101 100644 --- a/source/_integrations/discord.markdown +++ b/source/_integrations/discord.markdown @@ -28,10 +28,9 @@ Once the application is ready, create a [bot](https://discordapp.com/developers/ Retrieve the **Application ID** from the 'General Information' section and the (hidden) **Token** of your bot for later. -<div class='note'> - +{% note %} The name you give your application on the [Discord My Apps page](https://discordapp.com/developers/applications/me) will determine the name of the notify service. For example: if you enter "Discord Chat", the service will be named `notify.discord_chat`. -</div> +{% endnote %} ### Setting up the bot diff --git a/source/_integrations/dlib_face_detect.markdown b/source/_integrations/dlib_face_detect.markdown index 9f23152bbaf..7fb9c035e05 100644 --- a/source/_integrations/dlib_face_detect.markdown +++ b/source/_integrations/dlib_face_detect.markdown @@ -16,9 +16,9 @@ The `dlib_face_detect` image processing {% term integration %} allows you to use This can be used to trigger an automation rule. Further info is on the [integration](/integrations/image_processing/) page. -<div class='note'> +{% note %} This integration is only available on Home Assistant Core installation types. Unfortunately, it cannot be used with Home Assistant OS, Supervised or Container. -</div> +{% endnote %} ## Configuration diff --git a/source/_integrations/dlib_face_identify.markdown b/source/_integrations/dlib_face_identify.markdown index 035724f4a4f..90eb68e062d 100644 --- a/source/_integrations/dlib_face_identify.markdown +++ b/source/_integrations/dlib_face_identify.markdown @@ -16,9 +16,9 @@ The `dlib_face_identify` image processing {% term integration %} allows you to u For using the result inside an automation rule, take a look at the [integration](/integrations/image_processing/) page. -<div class='note'> +{% note %} This integration is only available on Home Assistant Core installation types. Unfortunately, it cannot be used with Home Assistant OS, Supervised or Container. -</div> +{% endnote %} ## Configuration @@ -61,8 +61,6 @@ confidence: default: 0.6 {% endconfiguration %} -<div class='note'> - +{% note %} If the platform fails to load because it could not install its requirement, install cmake: `sudo apt-get install cmake`. - -</div> +{% endnote %} diff --git a/source/_integrations/doorbird.markdown b/source/_integrations/doorbird.markdown index a530813955a..8899e03bbf5 100644 --- a/source/_integrations/doorbird.markdown +++ b/source/_integrations/doorbird.markdown @@ -50,9 +50,9 @@ Event names will be prefixed by `doorbird_devicename`. For example, the example See [Automation Example](#automation-example) section below for details on how to use the event names in an automation. -<div class="note info"> +{% important %} Events will not be received in Home Assistant until a schedule is defined via the DoorBird app. -</div> +{% endimportant %} ### Clearing registered events @@ -77,9 +77,9 @@ The following keys are available on `event_data`: - `rtsp_live_video_url` - `html5_viewer_url` -<div class="note"> +{% note %} The URLs on the event will be based on the configuration used to connect to your DoorBird device. The ability to connect from outside your network will depend on your configuration. -</div> +{% endnote %} ## Schedules diff --git a/source/_integrations/dormakaba_dkey.markdown b/source/_integrations/dormakaba_dkey.markdown index 251acddf94a..b020490345a 100644 --- a/source/_integrations/dormakaba_dkey.markdown +++ b/source/_integrations/dormakaba_dkey.markdown @@ -28,8 +28,6 @@ In addition to a lock entity, each added dKey lock will also have: - A binary_sensor which shows if the door is open or not - A binary_sensor which shows the position of the lock's dead bolt -<div class='note warning'> - +{% important %} The Dormakaba dKey lock is currently not working with USB dongles or built-in Bluetooth radios, only [ESPHome Bluetooth proxies](/integrations/bluetooth/#remote-adapters-bluetooth-proxies) configured to allow active connections work reliably. - -</div> +{% endimportant %} diff --git a/source/_integrations/drop_connect.markdown b/source/_integrations/drop_connect.markdown index d1994cc4b79..e402289fa5f 100644 --- a/source/_integrations/drop_connect.markdown +++ b/source/_integrations/drop_connect.markdown @@ -60,8 +60,6 @@ Assistant. {% enddetails %} -<div class="note"> - +{% important %} The MQTT broker address and port used for the DROP Hub must be the same as configured for the Home Assistant MQTT integration. - -</div> +{% endimportant %} diff --git a/source/_integrations/dsmr.markdown b/source/_integrations/dsmr.markdown index f115aec6325..6158f2c041b 100644 --- a/source/_integrations/dsmr.markdown +++ b/source/_integrations/dsmr.markdown @@ -44,9 +44,9 @@ To configure options for DSMR integration go to **Settings** -> **Devices & Serv Typically the smart meter sends new data every 5-10 seconds. This value defines the minimum time between entity updates in seconds. Setting this value to 0 will update entities each time data is received from the smart meter. -<div class='note warning'> +{% important %} Reducing the default time between updates will increase the amount of events generated and can potentially flood the system with events. -</div> +{% endimportant %} ### Supported meters diff --git a/source/_integrations/dte_energy_bridge.markdown b/source/_integrations/dte_energy_bridge.markdown index c40c920c394..f7f66ea44e7 100644 --- a/source/_integrations/dte_energy_bridge.markdown +++ b/source/_integrations/dte_energy_bridge.markdown @@ -19,7 +19,7 @@ A sensor {% term integration %} for [DTE](https://www.newlook.dteenergy.com/) us - If the status LED is on the top, you have a v1. - If the status LED is on the front, you have a v2. -<div class='note'> +{% warning %} The firmware of the DTE v2 bridges that started shipping circa mid-2020 will not work with this integration. This includes the model containing integrated Wi-Fi. @@ -28,7 +28,7 @@ you get a response. Later model DTE Energy Bridge hardware uses [MQTT](https://www.home-assistant.io/integrations/mqtt/) to communicate your energy data with Home Assistant. -</div> +{% endwarning %} To enable this sensor, add the following lines to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} diff --git a/source/_integrations/duckdns.markdown b/source/_integrations/duckdns.markdown index 5a6f4231986..a8698792676 100644 --- a/source/_integrations/duckdns.markdown +++ b/source/_integrations/duckdns.markdown @@ -14,11 +14,11 @@ related: The DuckDNS {% term integration %} allows you to keep your DuckDNS subdomain always in sync with your public IP address. [DuckDNS](https://www.duckdns.org) is a free service that allows you to bind your own favorite subdomain under `duckdns.org` to the public IP address in use from your router, even though such address is dynamically allocated by your internet service provider and therefore changes over time. -<div class='note'> +{% warning %} If you are running the Home Assistant DuckDNS add-on this integration is not required. The add-on will keep your IP updated with DuckDNS. -</div> +{% endwarning %} ## Configuration diff --git a/source/_integrations/dwd_weather_warnings.markdown b/source/_integrations/dwd_weather_warnings.markdown index 52a2e5eade4..2e193cf3f3a 100644 --- a/source/_integrations/dwd_weather_warnings.markdown +++ b/source/_integrations/dwd_weather_warnings.markdown @@ -47,8 +47,6 @@ Device tracker entity: | `warning_<x>_parameters` | *(list)* A list of additional warning parameters. More information can be found [here](https://www.dwd.de/DE/leistungen/opendata/help/warnungen/warning_codes_pdf.pdf?__blob=publicationFile&v=5). | | `warning_<x>_color` | *(str)* The DWD color of the warning encoded as `#rrggbb`. | -<div class="note"> - +{% note %} In the attribute name `x` is the counter of the warning starting from `1`. - -</div> +{% endnote %} diff --git a/source/_integrations/dweet.markdown b/source/_integrations/dweet.markdown index 8f6e3cff94a..5f7b2bd7383 100644 --- a/source/_integrations/dweet.markdown +++ b/source/_integrations/dweet.markdown @@ -21,9 +21,9 @@ The `dweet` {% term integration %} makes it possible to transfer details collect <img src='/images/screenshots/dweet-freeboard.png' /> </p> -<div class='note warning'> +{% note %} The publishing interval is limited to 1 second. This means that it's possible to miss fast changes. -</div> +{% endnote %} There is currently support for the following device types within Home Assistant: diff --git a/source/_integrations/dynalite.markdown b/source/_integrations/dynalite.markdown index a9ed3d2b825..0f9fc6f4cc7 100755 --- a/source/_integrations/dynalite.markdown +++ b/source/_integrations/dynalite.markdown @@ -60,11 +60,11 @@ The initial process can be a bit time consuming and tedious, but it only has to Send a command on the Dynalite network asking an area to report its currently selected preset. Normally, channel 1 (default) is used, but in some implementation, specific areas will need other channels. -<div class='note'> +{% note %} This does not return the area preset. It sends a network command asking the area to report its preset. Once it reports, that will be caught and handled by the system. -</div> +{% endnote %} | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------------------------------------------------------------------------------------- | @@ -76,11 +76,11 @@ This does not return the area preset. It sends a network command asking the area Send a command on the Dynalite network asking a specific channel in an area to report its current level. -<div class='note'> +{% note %} This does not return the channel level. It sends a network command asking the channel to report its level. Once it reports, that will be caught and handled by the system. -</div> +{% endnote %} | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------------------------------------------------------------------------------------- | diff --git a/source/_integrations/eafm.md b/source/_integrations/eafm.md index 2bd773d5ccf..d3dda12da5b 100644 --- a/source/_integrations/eafm.md +++ b/source/_integrations/eafm.md @@ -12,11 +12,11 @@ ha_codeowners: The `eafm` integration offers integration with the [UK Environment Agency Flood Monitoring](https://flood-warning-information.service.gov.uk/) API to provide sensors for nearby water levels. Combined with Home Assistant notifications, you could give yourself a warning if a nearby river was likely to flood your local cycle path or the only road out of your village. -<div class='note warning'> +{% important %} The UK Environment Agency Flood Monitoring only provides data for England - Northern Ireland, Scotland and Wales have their own flood agencies. -</div> +{% endimportant %} ## Configuration diff --git a/source/_integrations/ecobee.markdown b/source/_integrations/ecobee.markdown index c71d87898e7..c7eead96836 100644 --- a/source/_integrations/ecobee.markdown +++ b/source/_integrations/ecobee.markdown @@ -35,9 +35,9 @@ The **ecobee** {% term integration %} lets you control and view sensor data from You will need to obtain an API key from ecobee's [developer site](https://www.ecobee.com/developers/) to use this integration. To get the key, your thermostat must be registered on ecobee's website (which you likely would have already done while installing your thermostat). Once you have done that, perform the following steps. -<div class='note warning'> +{% warning %} As of March 28th, 2024, ecobee is no longer accepting new developer subscriptions, nor are existing developer accounts able to create new API keys. There is no ETA for when they will be allowed again. Existing API keys will continue to function. -</div> +{% endwarning %} 1. Click on the **Become a developer** link on the [developer site](https://www.ecobee.com/home/developer/loginDeveloper.jsp). 2. Log in with your ecobee credentials. (Make sure multifactor authentication is disabled to meet the developer login form's limits. If you've already enabled MFA, the web portal doesn't support disabling it. The iOS and Android apps do under Account > Account Security. You can re-enable MFA after becoming a developer.) diff --git a/source/_integrations/egardia.markdown b/source/_integrations/egardia.markdown index 0e6340aa99b..dc1881a8b7d 100644 --- a/source/_integrations/egardia.markdown +++ b/source/_integrations/egardia.markdown @@ -99,9 +99,9 @@ report_server_codes: Note that this basic configuration will only enable you to read the armed/armed away/disarmed status of your alarm and will **not** update the status if the alarm is triggered. This is because of how Egardia built their system. The alarm triggers normally go through their servers. You can change this, however, using the following procedure. This is a more advanced (and more useful) configuration. -<div class='note'> +{% note %} There seem to be multiple versions of software running on GATE-02 devices; we have received reports from GATE-02 users who successfully run this package in GATE-02 mode. Others have reported they needed to specify GATE-03 as their version to integrate their GATE-02. -</div> +{% endnote %} ## Advanced configuration diff --git a/source/_integrations/electric_kiwi.markdown b/source/_integrations/electric_kiwi.markdown index f0887d991eb..b61e4cea626 100644 --- a/source/_integrations/electric_kiwi.markdown +++ b/source/_integrations/electric_kiwi.markdown @@ -21,8 +21,6 @@ This integration uses the official [Electric Kiwi API](https://developer.electri {% include integrations/config_flow.md %} -<div class='note'> - +{% note %} The configuration uses `client_id` and `client_secret` provided to Home Assistant, so all you need to do is install the integration and authenticate using your account credentials. - -</div> +{% endnote %} diff --git a/source/_integrations/emulated_hue.markdown b/source/_integrations/emulated_hue.markdown index f77700816f7..2f31f19d02a 100644 --- a/source/_integrations/emulated_hue.markdown +++ b/source/_integrations/emulated_hue.markdown @@ -16,43 +16,43 @@ related: title: Configuration file --- -<div class='note warning'> +{% warning %} Be aware that `emulated_hue` doesn't work for new users of **Google Home** with `emulated_hue`. If you've not previously set this up and had it working, use the [Google Assistant](/integrations/google_assistant/) integration or [Nabu Casa cloud](/integrations/cloud) integration. -</div> +{% endwarning %} The `emulated_hue` {% term integration %} provides a virtual [Philips Hue](https://www.philips-hue.com) bridge, written entirely in software that allows services that work with the Hue API to interact with Home Assistant entities. The driving use case behind this functionality is to allow Home Assistant to work with an Amazon Echo or Google Home with no setup cost outside of configuration changes. The virtual bridge can turn entities on/off or change the brightness of dimmable lights. The volume level of media players can be controlled as brightness. -<div class='note'> +{% important %} A physical Hue Bridge is required for Philips Hue lights to function - this virtual bridge will not replace a physical bridge. Instead, it allows Home Assistant to represent non-Philips Hue devices to Amazon Echo as Philips Hue devices, which Amazon Echo can control with built-in support. -</div> +{% endimportant %} -<div class='note'> +{% tip %} It is recommended to assign a static IP address to the computer running Home Assistant. This is because the Amazon Echo discovers devices by IP addresses, and if the IP changes, the Echo won't be able to control it. This is easiest done from your router, see your router's manual for details. -</div> +{% endtip %} -<div class='note'> +{% note %} Both Google Home and Alexa use the device they were initially set up with for communication with `emulated_hue`. In other words: if you remove/replace this device you will also break `emulated_hue`. To recover your `emulated_hue` functionality, backup your `config/.storage/emulated_hue.ids` file, delete the original one and reboot your Home Assistant instance. If you added or upgraded to a newer Alexa device and devices are not found, you must change to listen_port: 80. If Alexa responds with "value is out of range for device..." it means switches were automatically added as lights in discovery. Remove each device in the Alexa app. Turn on all the switches in Home Assistant. In the Alexa app go to "Add New Device" select "Switch" and then "other" to add them correctly. -</div> +{% endnote %} -<div class='note'> +{% note %} [Sleep Cycle](https://www.sleepcycle.com) and [Sleep as Android](https://sleep.urbandroid.org): smart alarm clock app can use emulated_hue to turn on and off entities. Sleep Cycle only has it implemented in the iOS app, see [Sleep Cycle support](https://support.sleepcycle.com/hc/articles/207670385-Does-Sleep-Cycle-integrates-with-Phillips-Hue-). The app requires the same configuration as Google Home and does not work if the type is defined as Alexa in the configuration. -</div> +{% endnote %} -<div class='note'> +{% note %} Logitech Harmony remotes cannot connect to this emulator via Android and iOS mobile applications because they require the physical button on the hub to be pressed. The [MyHarmony desktop software](https://support.myharmony.com/download) must be used with the original cable to connect it, then "Scan for Devices". -</div> +{% endnote %} ### Configuration @@ -149,11 +149,11 @@ The following are attributes that can be applied in the `entities` section: - **name** (*Optional*): The name that the emulated Hue will use. The default for this is the entity's friendly name. - **hidden** (*Optional*): Whether or not the emulated Hue bridge should expose the entity. Adding `hidden: false` will expose the entity to Alexa. The default value for this attribute is controlled by the `expose_by_default` option. -<div class='note'> +{% note %} These attributes used to be found under the `customize` section of `homeassistant`, however, they have now been moved to `entities`. Emulated Hue configuration under `homeassistant.customize` will be deprecated in the near future. -</div> +{% endnote %} ### Troubleshooting diff --git a/source/_integrations/emulated_kasa.markdown b/source/_integrations/emulated_kasa.markdown index 64a069280a3..df28a71f5b5 100644 --- a/source/_integrations/emulated_kasa.markdown +++ b/source/_integrations/emulated_kasa.markdown @@ -23,11 +23,9 @@ The configuration includes a list of entities to expose with attributes for the If the entity is a sensor, that value will be reported as the current power usage unless the power field is defined. The power field can contain a hardcoded value, a sensor, or a template (see configuration example). -<div class='note'> - +{% note %} The provided power unit must be the current power usage in Watts. Values of `kW` can be converted, but the values of `kWh` cannot be used. - -</div> +{% endnote %} ## Configuration diff --git a/source/_integrations/emulated_roku.markdown b/source/_integrations/emulated_roku.markdown index 3626e7f996f..4072fcba941 100644 --- a/source/_integrations/emulated_roku.markdown +++ b/source/_integrations/emulated_roku.markdown @@ -18,19 +18,19 @@ so remotes such as Harmony and Android apps can connect to it through Wi-Fi as i Home Assistant will see key presses and app launches as Events, which you can use as triggers for automations. Multiple Roku servers may be started if you run out of buttons by specifying multiple server entries. -<div class='note'> +{% note %} Windows is not supported because Home Assistant uses `ProactorEventLoop` which does not support UDP sockets. -</div> +{% endnote %} -<div class='note warning'> +{% caution %} This {% term integration %} opens an unauthenticated API on the host, allowing anything on the local network to access your Home Assistant instance through the automations you create with emulated Roku as the trigger. Using a proxy with whitelisted IP addresses is recommended. (set `advertise_ip` to the proxy's IP or DNS name) -</div> +{% endcaution %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/entur_public_transport.markdown b/source/_integrations/entur_public_transport.markdown index d352222e08e..6af51bcf8fb 100644 --- a/source/_integrations/entur_public_transport.markdown +++ b/source/_integrations/entur_public_transport.markdown @@ -19,9 +19,9 @@ For each stop place given in the configuration, a sensor will be mounted for tha Real-time data is fetched from [Entur](https://www.entur.no). Entur is a service which collects and delivers information about all public transport available in Norway under an [open source license](https://data.norge.no/nlod/no). -<div class='note'> -Note that the underlying API is rate limited and to avoid getting your instance blocked from entur the sensor is only fetching new information every 45 seconds. It's recommended to not schedule updates more often than this. -</div> +{% note %} +Note that the underlying API is rate limited and to avoid getting your instance blocked from Entur the sensor is only fetching new information every 45 seconds. It's recommended to not schedule updates more often than this. +{% endnote %} ## Configuration diff --git a/source/_integrations/eufylife_ble.markdown b/source/_integrations/eufylife_ble.markdown index 39a99de70ee..3f993784459 100644 --- a/source/_integrations/eufylife_ble.markdown +++ b/source/_integrations/eufylife_ble.markdown @@ -24,11 +24,9 @@ The EufyLife integration allows you to integrate Eufy smart scales with Home Ass - [Smart Scale P2 (T9148)](https://us.eufy.com/products/t9148) - [Smart Scale P2 Pro (T9149)](https://us.eufy.com/products/t9149111) -<div class='note'> - +{% note %} This integration does not support the Wi-Fi capabilities of the P2 and P2 Pro. It can only connect to your smart scale via Bluetooth. - -</div> +{% endnote %} ## Features diff --git a/source/_integrations/event.mqtt.markdown b/source/_integrations/event.mqtt.markdown index 39253b0aed1..645264b8a03 100644 --- a/source/_integrations/event.mqtt.markdown +++ b/source/_integrations/event.mqtt.markdown @@ -179,11 +179,9 @@ value_template: type: template {% endconfiguration %} -<div class='note warning'> - +{% important %} Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics. - -</div> +{% endimportant %} ### Full configuration with JSON data diff --git a/source/_integrations/fail2ban.markdown b/source/_integrations/fail2ban.markdown index 76ab10e5677..4247d387d0e 100644 --- a/source/_integrations/fail2ban.markdown +++ b/source/_integrations/fail2ban.markdown @@ -16,11 +16,11 @@ related: The `fail2ban` {% term integration %} allows for IPs banned by [fail2ban](https://www.fail2ban.org/wiki/index.php/Main_Page) to be displayed in the Home Assistant frontend. -<div class='note'> +{% important %} Your system must have `fail2ban` installed and correctly configured for this sensor to work. In addition, Home Assistant must be able to read the `fail2ban` log file. -</div> +{% endimportant %} ## Configuration @@ -55,11 +55,11 @@ file_path: ### Fail2Ban with Docker -<div class='note'> +{% important %} These steps assume you already have the Home Assistant Docker running behind NGINX and that it is externally accessible. It also assumes the Docker is running with the `--net='host'` flag. -</div> +{% endimportant %} For those of us using Docker, the above tutorial may not be sufficient. The following steps specifically outline how to set up `fail2ban` and Home Assistant when running Home Assistant within a Docker behind NGINX. The setup this was tested on was an unRAID server using the [SWAG](https://github.com/linuxserver/docker-swag) from linuxserver.io. diff --git a/source/_integrations/fan.markdown b/source/_integrations/fan.markdown index 44a26535ed6..b2ef4308b10 100644 --- a/source/_integrations/fan.markdown +++ b/source/_integrations/fan.markdown @@ -22,11 +22,11 @@ The fan integration allows you to control and monitor fan devices. Available services: `fan.set_percentage`, `fan.set_preset_mode`, `fan.set_direction`, `fan.oscillate`, `fan.turn_on`, `fan.turn_off`, `fan.toggle`, `fan.increase_speed`, `fan.decrease_speed` -<div class='note'> +{% note %} Not all fan services may be available for your platform. You can check which services are available for your fan(s) under **Developer Tools** > **Services**. -</div> +{% endnote %} ### Service `fan.set_percentage` diff --git a/source/_integrations/fan.mqtt.markdown b/source/_integrations/fan.mqtt.markdown index 2af02cfcd24..4a56e0d507a 100644 --- a/source/_integrations/fan.mqtt.markdown +++ b/source/_integrations/fan.mqtt.markdown @@ -305,11 +305,11 @@ unique_id: type: string {% endconfiguration %} -<div class='note warning'> +{% important %} Make sure that your topics match exactly. `some-topic/` and `some-topic` are different topics. -</div> +{% endimportant %} ## Examples diff --git a/source/_integrations/fastdotcom.markdown b/source/_integrations/fastdotcom.markdown index dd8d9b5fb59..541b0bdf727 100644 --- a/source/_integrations/fastdotcom.markdown +++ b/source/_integrations/fastdotcom.markdown @@ -20,12 +20,10 @@ ha_quality_scale: gold The `fastdotcom` integration uses the [Fast.com](https://fast.com/) web service to measure network bandwidth performance. -<div class='note'> - +{% note %} Currently, the Fast.com integration only supports measuring download bandwidth. If you want to measure bandwidth metrics other than download such as ping and upload, utilize the [Speedtest.net](/integrations/speedtestdotnet) integration. - -</div> +{% endnote %} Enabling this integration will automatically create the Fast.com Sensor. diff --git a/source/_integrations/ffmpeg_motion.markdown b/source/_integrations/ffmpeg_motion.markdown index 6a7481666e2..4e9e286dd18 100644 --- a/source/_integrations/ffmpeg_motion.markdown +++ b/source/_integrations/ffmpeg_motion.markdown @@ -16,11 +16,11 @@ related: The `ffmpeg` {% term integration %} allows you to use any video feed with [FFmpeg](https://www.ffmpeg.org/) for motion sensors in Home Assistant. -<div class='note'> +{% note %} If the `ffmpeg` process is broken, the sensor will be unavailable. To control the FFmpeg process of sensor, use the service `ffmpeg.start`, `ffmpeg.stop`, `ffmpeg.restart`. -</div> +{% endnote %} ## Motion diff --git a/source/_integrations/ffmpeg_noise.markdown b/source/_integrations/ffmpeg_noise.markdown index dcc2d43bdd6..7ce51100996 100644 --- a/source/_integrations/ffmpeg_noise.markdown +++ b/source/_integrations/ffmpeg_noise.markdown @@ -16,11 +16,11 @@ related: The `ffmpeg` {% term integration %} allows you to use any video or audio feed with [FFmpeg](https://www.ffmpeg.org/) for various sensors in Home Assistant. -<div class='note'> +{% note %} If the `ffmpeg` process is broken, the sensor will be unavailable. To control the FFmpeg process of sensor, use the service `ffmpeg.start`, `ffmpeg.stop`, `ffmpeg.restart`. -</div> +{% endnote %} ## Configuration diff --git a/source/_integrations/fibaro.markdown b/source/_integrations/fibaro.markdown index 4910d87e8d1..feee3ce2201 100644 --- a/source/_integrations/fibaro.markdown +++ b/source/_integrations/fibaro.markdown @@ -47,11 +47,11 @@ Fibaro Home Center 2, Home Center Lite, Home Center 3, Home Center 3 Lite, and Y {% include integrations/config_flow.md %} -<div class='note'> +{% tip %} It is recommended to assign a static IP address to your Fibaro controller. This ensures that it won't change its IP address, so you won't have to change the `url` if the controller reboots and comes up with a different IP address. See your router's manual for details on how to set this up. If you need the MAC address of your Fibaro, check the label on the bottom. -</div> +{% endtip %} ## Supported platforms diff --git a/source/_integrations/filesize.markdown b/source/_integrations/filesize.markdown index 3d34b5044c7..b1724722927 100644 --- a/source/_integrations/filesize.markdown +++ b/source/_integrations/filesize.markdown @@ -17,12 +17,12 @@ ha_integration_type: integration The **File size** {% term integration %} is for displaying the size in MB of a file. -<div class='note'> +{% important %} File paths must also be added to [allowlist_external_dirs](/integrations/homeassistant/#allowlist_external_dirs) in your `configuration.yaml`. File paths should be absolute paths. For example: `/config/home-assistant_v2.db` to monitor the size of the default database. -</div> +{% endimportant %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/filter.markdown b/source/_integrations/filter.markdown index e965ae3b2bf..49b50b28a56 100644 --- a/source/_integrations/filter.markdown +++ b/source/_integrations/filter.markdown @@ -119,11 +119,9 @@ filters: default: positive infinity {% endconfiguration %} -<div class="note warning"> - +{% warning %} When configuring a `window_size` that is not a time and with a value larger than the default of `1`, the database must examine nearly every stored state for that entity during Home Assistant startup. If you have modified the [Recorder `purge_keep_days`](/integrations/recorder/#purge_keep_days) value or have many states stored in the database for the filtered entity, this can cause your Home Assistant instance to respond poorly during startup. - -</div> +{% endwarning %} ## Filters diff --git a/source/_integrations/fireservicerota.markdown b/source/_integrations/fireservicerota.markdown index f7a094c5952..4dc5138f371 100644 --- a/source/_integrations/fireservicerota.markdown +++ b/source/_integrations/fireservicerota.markdown @@ -25,11 +25,11 @@ The FireServiceRota integration provides you real-time information about inciden You will need a FireServiceRota or BrandweerRooster account. -<div class='note'> +{% caution %} A word of caution: Do not solely rely on this integration for your emergency calls! -</div> +{% endcaution %} This integration provides the following platforms: diff --git a/source/_integrations/firmata.markdown b/source/_integrations/firmata.markdown index fcb3f7ecb6d..2623c318ba1 100644 --- a/source/_integrations/firmata.markdown +++ b/source/_integrations/firmata.markdown @@ -37,15 +37,15 @@ You will need to upload a [Firmata firmware](https://github.com/firmata/) to you To integrate Arduino boards with Home Assistant, add the following section to your {% term "`configuration.yaml`" %} file: -<div class='note warning'> +{% warning %} Firmata does not store the last state across power cycles. This means that with every powerup the pins are set to off/low and after every initialization, they will be set to the default that you have configured in YAML. -</div> +{% endwarning %} -<div class='note warning'> +{% warning %} Firmata may cycle pins HIGH/LOW during initialization. If your pins should not be accidentally cycled, you may need to modify your Firmtata sketch or if you are using a relay board use an output pin as VCC. See this issue for details: [Make initial pin value configurable](https://github.com/firmata/arduino/issues/166). -</div> +{% endwarning %} You may configure multiple Firmata boards. Each board has the following options: @@ -179,15 +179,13 @@ sensors: type: integer {% endconfiguration %} -<div class='note'> +{% note %} If you double-configure a pin, the integration will fail to configure the second one that it attempts to set up and will log an error. -</div> - -<div class='note'> +{% endnote %} +{% note %} To invert/negate a light, set the `maximum` to `0` and the `minimum` to `255`. - -</div> +{% endnote %} ```yaml # Example firmata configuration.yaml entry diff --git a/source/_integrations/flexit.markdown b/source/_integrations/flexit.markdown index 174d6cf1c71..b54a78ff613 100644 --- a/source/_integrations/flexit.markdown +++ b/source/_integrations/flexit.markdown @@ -44,11 +44,9 @@ hub: type: string {% endconfiguration %} -<div class='note'> - -This integration requires the [Modbus](/integrations/modbus/) integration to be set up to work - -</div> +{% important %} +This integration requires the [Modbus](/integrations/modbus/) integration to be set up to work. +{% endimportant %} Full configuration example including modbus setup shown below: diff --git a/source/_integrations/flick_electric.markdown b/source/_integrations/flick_electric.markdown index ee70e55acdd..c1e11e3fe44 100644 --- a/source/_integrations/flick_electric.markdown +++ b/source/_integrations/flick_electric.markdown @@ -18,10 +18,10 @@ ha_integration_type: service {% include integrations/config_flow.md %} -<div class='note'> +{% note %} The configuration uses the client ID and secret used by the app at the time of release. If this stops working, you can find the new ones by using a MITM proxy with the mobile app. The app will call `https://api.flick.energy/identity/oauth/token` with the `client_id` and `client_secret`. You can then use these values during the configuration. -</div> +{% endnote %} diff --git a/source/_integrations/foscam.markdown b/source/_integrations/foscam.markdown index 54abf407e3b..2256a39b1a2 100644 --- a/source/_integrations/foscam.markdown +++ b/source/_integrations/foscam.markdown @@ -18,9 +18,9 @@ The `foscam` platform allows you to watch the live stream of your [Foscam](https {% include integrations/config_flow.md %} -<div class='note'> +{% note %} There seems to be some issues within Foscam with lengthy passwords and passwords containing certain symbols. Be sure to check your camera's documentation. -</div> +{% endnote %} ### Streams diff --git a/source/_integrations/free_mobile.markdown b/source/_integrations/free_mobile.markdown index 0a5f30e9fba..a84c839d721 100644 --- a/source/_integrations/free_mobile.markdown +++ b/source/_integrations/free_mobile.markdown @@ -26,9 +26,9 @@ Before doing anything, you have to activate the SMS API option in your Free Mobi This API only sends classic SMS messages and only to the cell phone of the account owner. So you only have to provide a text message in your payload. -<div class='note warning'> +{% note %} If you disable and re-enable the SMS API option, please be sure to update your token in your configuration. -</div> +{% endnote %} ## Configuration diff --git a/source/_integrations/freebox.markdown b/source/_integrations/freebox.markdown index 12263bcceca..95e02bfa79c 100644 --- a/source/_integrations/freebox.markdown +++ b/source/_integrations/freebox.markdown @@ -45,19 +45,19 @@ You can find out your Freebox host and port by opening this address <http://mafr The returned JSON should contain an `api_domain` (`host`) and a `https_port` (`port`). Please consult the [API documentation](https://dev.freebox.fr/sdk/os/) for more information. -<div class='note warning'> +{% tip %} The `host` (ex: xxxxxxxx.fbxos.fr) and `port` given by <http://mafreebox.freebox.fr/api_version> refers to your Freebox public IP address and may not work if your Home Assistant server is located inside your local LAN. For local API access, you can alternatively use `host` = *mafreebox.freebox.fr* and `port` = *443*. -</div> +{% endtip %} ### Initial setup -<div class='note warning'> +{% important %} - You must have set a password for your Freebox router web administration page. Enable the option "Permettre les nouvelles demandes d'associations" and check that the option "Accès à distance sécurisé à Freebox OS" is active in "Gestion des ports" > "Connexions entrantes". +You must have set a password for your Freebox router web administration page. Enable the option "Permettre les nouvelles demandes d'associations" and check that the option "Accès à distance sécurisé à Freebox OS" is active in "Gestion des ports" > "Connexions entrantes". -</div> +{% endimportant %} The first time Home Assistant will connect to your Freebox, you will need to authorize it by pressing the right arrow on the facade of the Freebox when prompted to do so. diff --git a/source/_integrations/fritz.markdown b/source/_integrations/fritz.markdown index 85f8b91ee07..46986bea29f 100644 --- a/source/_integrations/fritz.markdown +++ b/source/_integrations/fritz.markdown @@ -42,9 +42,9 @@ There is support for the following platform types within Home Assistant: - **Update** - firmware status of the device. {% include integrations/config_flow.md %} -<div class='note'> +{% important %} Both TR-064 and UPnP need to be enabled in the FRITZ!Box ( Home Network -> Network -> Network settings -> Access Settings in the Home Network ) for Home Assistant to login and read device info. -</div> +{% endimportant %} ## Username diff --git a/source/_integrations/fritzbox.markdown b/source/_integrations/fritzbox.markdown index 142e1c154a3..ee2a0d2c2c8 100644 --- a/source/_integrations/fritzbox.markdown +++ b/source/_integrations/fritzbox.markdown @@ -63,9 +63,9 @@ Additionally, we also support to trigger smarthome templates. {% include integrations/config_flow.md %} -<div class='note'> +{% note %} The configuration in the UI asks for a username. Starting from FRITZ!OS 7.24 the FRITZ!Box creates a random username for the admin user if you didn't set one yourself. This can be found after logging into the FRITZ!Box and visiting System -> FRITZ!Box Users -> Users. The username starts with "fritz" followed by four random numbers. Under properties on the right it says "created automatically". Prior to FRITZ!OS 7.24 the default username was "admin". -</div> +{% endnote %} ## Switches & thermostats @@ -118,9 +118,9 @@ There are several attributes that can be useful for automations and templates. To get AVM FRITZ!DECT lightbulbs (e.g., FRITZ!DECT 500) follow the [configuration instructions](#configuration) above. -<div class='note'> -The FRITZ!DECT 500 lightbulb supports only 36 colors. When a color is picked in home assistant that is not supported by the device, a color that comes close will be activated. -</div> +{% note %} +The FRITZ!DECT 500 lightbulb supports only 36 colors. When a color is picked in Home Assistant that is not supported by the device, a color that comes close will be activated. +{% endnote %} ## Cover diff --git a/source/_integrations/frontier_silicon.markdown b/source/_integrations/frontier_silicon.markdown index 23389fdce46..211ca211f89 100644 --- a/source/_integrations/frontier_silicon.markdown +++ b/source/_integrations/frontier_silicon.markdown @@ -74,13 +74,13 @@ Overview of the info dialog: ## Notes and Limitations -<div class='note warning'> +{% warning %} Some older devices may require setting up a session to process requests. This is automatically detected by the underlying library. There is always a single user (session) controlling a device, which means that once Home Assistant connects to a device all other sessions will be invalidated. This renders the usage of [UNDOK] almost impossible for these older devices, as the Home Assistant integration polls the device state every 30 seconds or issues a command by creating a new session. In that case, you have to disable the integration if you want to use UNDOK. -</div> +{% endwarning %} [Frontier Silicon chipset]: https://www.frontiersmart.com/solution/solutions-for-digital-radio/ [Medion Radios]: https://www.medion.com/de/shop/internetradios diff --git a/source/_integrations/fully_kiosk.markdown b/source/_integrations/fully_kiosk.markdown index 5617ead7990..89069f95f94 100644 --- a/source/_integrations/fully_kiosk.markdown +++ b/source/_integrations/fully_kiosk.markdown @@ -64,9 +64,9 @@ The following controls are available: - Play and stop media files - Set device volume -<div class='note warning'> - The Fully Kiosk Browser app does not provide feedback on the device volume or media playback status, so we are unable to display the current volume level or playback status. -</div> +{% note %} +The Fully Kiosk Browser app does not provide feedback on the device volume or media playback status, so we are unable to display the current volume level or playback status. +{% endnote %} ## Services diff --git a/source/_integrations/garages_amsterdam.markdown b/source/_integrations/garages_amsterdam.markdown index 785f0864dd8..67c0e482beb 100644 --- a/source/_integrations/garages_amsterdam.markdown +++ b/source/_integrations/garages_amsterdam.markdown @@ -29,11 +29,9 @@ When you add a parking garage, 4 sensors are created in your configuration by de - **Long capacity** - Total of parking spaces for cardholders or reserved spaces - **Short capacity** - Total of parking spaces for regular paid parking -<div class='note warning'> - - Some parking garages don't have long-term parking spaces, in which case the 2 specific **Long** sensors will not be created. - -</div> +{% note %} +Some parking garages don't have long-term parking spaces, in which case the 2 specific **Long** sensors will not be created. +{% endnote %} ### Binary sensor diff --git a/source/_integrations/gdacs.markdown b/source/_integrations/gdacs.markdown index c6d1e4bba14..0ab860c1825 100644 --- a/source/_integrations/gdacs.markdown +++ b/source/_integrations/gdacs.markdown @@ -28,13 +28,13 @@ Entities are generated, updated and removed automatically with each update from The data is updated every 5 minutes. -<div class='note'> +{% note %} The material used by this integration is provided by the [Global Disaster Alert and Coordination System (GDACS)](https://www.gdacs.org/) - a cooperation framework between the United Nations and the European Commission - under the [Creative Commons Attribution 4.0 International (CC BY 4.0) license](https://creativecommons.org/licenses/by/4.0/). It has only been modified for the purpose of presenting the material in Home Assistant. Please refer to the [creator's disclaimer and terms of use notice](https://www.gdacs.org/About/termofuse.aspx) for more information. -</div> +{% endnote %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/geonetnz_quakes.markdown b/source/_integrations/geonetnz_quakes.markdown index add8f164408..2e167a4f429 100644 --- a/source/_integrations/geonetnz_quakes.markdown +++ b/source/_integrations/geonetnz_quakes.markdown @@ -35,7 +35,7 @@ converted to the unit (kilometers or miles) configured in Home Assistant. The data is updated every 5 minutes. -<div class='note'> +{% note %} The material used by this integration is provided under the [Creative Commons Attribution 3.0 New Zealand (CC BY 3.0 NZ) license](https://creativecommons.org/licenses/by/3.0/nz/). It has only been modified for the purpose of presenting the material in Home Assistant. @@ -43,7 +43,7 @@ Please refer to the [creator's disclaimer notice](https://www.geonet.org.nz/disc We acknowledge the New Zealand GeoNet project and its sponsors EQC, GNS Science and LINZ, for providing data/images used in this integration. -</div> +{% endnote %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/geonetnz_volcano.markdown b/source/_integrations/geonetnz_volcano.markdown index 5ca5b209bca..01ddf3a6b0e 100644 --- a/source/_integrations/geonetnz_volcano.markdown +++ b/source/_integrations/geonetnz_volcano.markdown @@ -35,15 +35,13 @@ The data is updated every 5 minutes. <img src='/images/integrations/geonetnz_volcano/sensor.png' /> </p> -<div class='note'> - +{% note %} The material used by this integration is provided under the [Creative Commons Attribution 3.0 New Zealand (CC BY 3.0 NZ) license](http://creativecommons.org/licenses/by/3.0/nz/). It has only been modified for the purpose of presenting the material in Home Assistant. Please refer to the [creator's disclaimer notice](https://www.geonet.org.nz/disclaimer) and [data policy](https://www.geonet.org.nz/policy) for more information. We acknowledge the New Zealand GeoNet project and its sponsors EQC, GNS Science and LINZ, for providing data/images used in this integration. - -</div> +{% endnote %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/github.markdown b/source/_integrations/github.markdown index fc1cabf2ccb..039cf3d5dc3 100644 --- a/source/_integrations/github.markdown +++ b/source/_integrations/github.markdown @@ -116,12 +116,10 @@ These entities are simpler diagnostic entities without any additional attributes Here are some small examples on how you can automate using the provided entities from this integration. -<div class="note"> - +{% note %} Remember that the service names and entity IDs used in these examples are examples as well, you need to replace it with services and entities that you have in your installation. - -</div> +{% endnote %} ### Notify new releases diff --git a/source/_integrations/glances.markdown b/source/_integrations/glances.markdown index bff66d10ff4..f2b017eb173 100644 --- a/source/_integrations/glances.markdown +++ b/source/_integrations/glances.markdown @@ -18,11 +18,9 @@ The `glances` integration allows you to monitor the system information provided ## Setup -<div class='note warning'> - - Support for Glances api version 2 is deprecated. It is recommended to upgrade your Glances server to version 3. Once upgraded, reload the integration to connect again. - -</div> +{% important %} +Support for Glances api version 2 is deprecated. It is recommended to upgrade your Glances server to version 3. Once upgraded, reload the integration to connect again. +{% endimportant %} These sensors needs a running instance of `glances` on the host. The minimal supported version of `glances` is 2.3. diff --git a/source/_integrations/goodwe.markdown b/source/_integrations/goodwe.markdown index 9220e4fe4b4..1f8ac9b85e1 100644 --- a/source/_integrations/goodwe.markdown +++ b/source/_integrations/goodwe.markdown @@ -24,11 +24,11 @@ The GoodWe integration will poll a [GoodWe](http://www.goodwe.com/) solar invert It works with GoodWe ET, EH, BT, BH, ES, EM, DT, MS, D-NS, XS and BP families of inverters. Different inverter families/models expose different sets of sensors, the newer models have usually broader support. -<div class='note'> +{% note %} If you can't communicate with the inverter despite your model is listed above, it is possible you have an old ARM firmware version. You should ask manufacturer support to upgrade your ARM firmware (not just inverter firmware) to be able to communicate with the inverter via UDP. It may work on other inverter families as well, as long as they listen on UDP port 8899 and respond to one of the supported communication protocols. In general, if you can communicate with the inverter via an official mobile application (PvMaster, SolarGo), it is very likely the integration will work too. -</div> +{% endnote %} {% include integrations/config_flow.md %} @@ -56,9 +56,9 @@ The integration will poll the inverter for new values every 10 seconds. If you w entity_id: sensor.ppv ``` -<div class='note'> +{% note %} It has been observed in some rare situations that frequent polling conflicts with updates to the Goodwe SEMS cloud portal and do not receive any updates anymore. Reducing polling frequency to 30 seconds or 1 minute seems to help in such cases. -</div> +{% endnote %} For more detailed steps on how to define a custom polling interval, follow the procedure below. diff --git a/source/_integrations/google.markdown b/source/_integrations/google.markdown index ec8c55ae637..8d5407dc6da 100644 --- a/source/_integrations/google.markdown +++ b/source/_integrations/google.markdown @@ -64,11 +64,9 @@ See [calendar automations](/integrations/calendar#automation) for an overview, a The calendar entity has additional attributes related to a single next upcoming event. -<div class='note'> - +{% tip %} Using the entity state and attributes is more error prone and less flexible than using Calendar Automations. The calendar entity itself may only track a single upcoming active event and can't handle multiple events with the same start time, or overlapping events. - -</div> +{% endtip %} {% details "Attributes" %} @@ -88,11 +86,9 @@ You can use the service `google.create_event` to create a new calendar event in {% details "Create Event Service details" %} -<div class='note'> - +{% note %} This will only be available if you have given Home Assistant `read-write` access in configuration options. - -</div> +{% endnote %} A calendar `target` is selected with a [Target Selector](/docs/blueprint/selectors/#target-selector) and the `data` payload supports the following fields: @@ -107,11 +103,9 @@ A calendar `target` is selected with a [Target Selector](/docs/blueprint/selecto | `in` | yes | Days or weeks that you want to create the event in. | "days": 2 | | `location` | yes | The location of the event. | Bowling center | -<div class='note'> - +{% important %} You either use `start_date_time` and `end_date_time`, or `start_date` and `end_date`, or `in`. - -</div> +{% endimportant %} This is a full example of service call in YAML: @@ -132,11 +126,11 @@ data: {% details "More Configuration" %} -<div class='note warning'> +{% warning %} It is not recommended to new users to use these settings as they are not compatible with other Home Assistant features, but this documentation is available for existing users. -</div> +{% endwarning %} The integration supports additional configuration from a file `google_calendars.yaml` which is available for existing users before version `2022.06`. This file is no longer automatically populated. diff --git a/source/_integrations/google_assistant.markdown b/source/_integrations/google_assistant.markdown index df95fa3648b..f3d1b6f2804 100644 --- a/source/_integrations/google_assistant.markdown +++ b/source/_integrations/google_assistant.markdown @@ -29,11 +29,9 @@ For Home Assistant Cloud users, documentation can be found [here](https://www.na The Google Assistant integration (without Home Assistant Cloud) requires a bit more setup than most due to the way Google requires Assistant Apps to be set up. -<div class='note warning'> - +{% important %} To use Google Assistant, your Home Assistant configuration has to be [externally accessible with a hostname and SSL certificate](/docs/configuration/remote/). If you haven't already configured that, you should do so before continuing. If you make DNS changes to accomplish this, please ensure you have allowed up to the full 48 hours for DNS changes to propagate, otherwise, Google may not be able to reach your server. Once you have confirmed you can reach your Home Assistant from outside your home network, you can set up the Google integration: - -</div> +{% endimportant %} ### Google Cloud Platform configuration @@ -93,11 +91,9 @@ To use Google Assistant, your Home Assistant configuration has to be [externally 1. Open the Google Home app. 2. Select the `+` button on the top left corner, select **Set up device**. In the **Set up a device** screen, select **Works with Google**. You should have `[test] <Action Name>` listed under **Add new**. Selecting that should lead you to a browser to login your Home Assistant instance, then redirect back to a screen where you can set rooms and nicknames for your devices if you wish. -<div class='note'> - +{% important %} If you've added Home Assistant to your phone's home screen, you have to first remove it from the home screen. Otherwise, this HTML5 app will show up instead of a browser. Using it would prevent Home Assistant redirecting back to the Google Home app. - -</div> +{% endimportant %} ### Allow other users @@ -134,15 +130,13 @@ Your Google Assistant devices will still communicate via the internet to: - Send commands that involve a [secure device](#secure-devices). - Send commands if local fulfillment fails. -<div class='note'> - +{% important %} The [HTTP integration](/integrations/http) must **not** be configured to use an SSL certificate with the [`ssl_certificate` option](/integrations/http/#ssl_certificate). This is because the Google Assistant device will connect directly to the IP of your Home Assistant instance and will fail if it encounters an invalid SSL certificate. For secure remote access, use a reverse proxy such as the {% my supervisor_addon addon="core_nginx_proxy" title="NGINX SSL" %} add-on instead of directing external traffic straight to Home Assistant. - -</div> +{% endimportant %} 1. Open the project you created in the [Actions on Google console](https://console.actions.google.com/). 2. Select **Develop** on the top of the page, then select **Actions** located in the hamburger menu on the top left. @@ -283,11 +277,9 @@ Currently, the following domains are available to be used with Google Assistant, - valve (open/close/set position/stop/start=toggle valve) - water_heater (on-off/temperature setting/operation mode) -<div class='note'> - +{% note %} Some of these devices may not display correctly in the Google Home app, such as media_player, however voice commands will still work. - -</div> +{% endnote %} ### Secure devices @@ -301,13 +293,11 @@ If a code is set for the Alarm control panel, it must be the same as the `secure Entities that have not been explicitly assigned to rooms but have been placed in Home Assistant areas will return room hints to Google with the devices in those areas. -<div class='note'> - +{% note %} Some devices, such as `scene` or `script`, must be assigned to an `area` before other members of a shared Google Home Household can use them. This is because household members in a shared Google Home will not be able to view devices that are not assigned to a room _unless_ they were the user who linked the service to Google Home. This issue isn't immediately apparent because `script` and `scene` devices aren't visible in the main Google Home dashboard. The automatic room assignment will not work when multiple homes are set up in your Google account. - -</div> +{% endnote %} ### Climate operation modes diff --git a/source/_integrations/google_generative_ai_conversation.markdown b/source/_integrations/google_generative_ai_conversation.markdown index 2cc8115013c..74f77d51591 100644 --- a/source/_integrations/google_generative_ai_conversation.markdown +++ b/source/_integrations/google_generative_ai_conversation.markdown @@ -92,11 +92,9 @@ The tutorial is using OpenAI, but this could also be done with the Google Genera ### Service `google_generative_ai_conversation.generate_content` -<div class='note info'> - - This service isn't tied to any integration entry, so it won't use the model, prompt, or any of the other settings in your options. If you only want to pass text, you should use the `conversation.process` service. - -</div> +{% tip %} +This service isn't tied to any integration entry, so it won't use the model, prompt, or any of the other settings in your options. If you only want to pass text, you should use the `conversation.process` service. +{% endtip %} Allows you to ask Gemini Pro or Gemini Pro Vision to generate content from a prompt consisting of text and optionally images. This service populates [response data](/docs/scripts/service-calls#use-templates-to-handle-response-data) with the generated content. diff --git a/source/_integrations/google_maps.markdown b/source/_integrations/google_maps.markdown index 48695ee03df..64409aa023a 100644 --- a/source/_integrations/google_maps.markdown +++ b/source/_integrations/google_maps.markdown @@ -38,12 +38,9 @@ device_tracker: username: "ACCOUNT_B_EMAIL" ``` -<div class='note'> +{% note %} If using more than one account, your own device may show twice, however, the parameters returned from Account A will not include a value for battery_level or entity_picture. These parameters will be present in your device tracker entity from Account B. Therefore, disregard the device tracker entity with is missing those parameters. -</div> - - - +{% endnote %} ## Configuration @@ -77,6 +74,6 @@ scan_interval: type: integer {% endconfiguration %} -<div class='note'> +{% note %} As of release 0.97 Google passwords are no longer required in your configuration. Users coming from earlier releases should only remove the password entry from their configuration file (username is still required) and restart Home Assistant. The cookie file previously generated should still be valid and will allow the tracker to continue functioning normally until the cookie is invalidated. -</div> +{% endnote %} diff --git a/source/_integrations/google_pubsub.markdown b/source/_integrations/google_pubsub.markdown index 529defa3909..f0927a96002 100644 --- a/source/_integrations/google_pubsub.markdown +++ b/source/_integrations/google_pubsub.markdown @@ -84,9 +84,9 @@ filter: type: list {% endconfiguration %} -<div class='note warning'> - Not filtering domains or entities will send every event to Google PubSub, thus hitting the free tier limit very fast. Be sure to fill in this configuration parameter or have a paid subscription for Google Cloud. -</div> +{% important %} +Not filtering domains or entities will send every event to Google PubSub, thus hitting the free tier limit very fast. Be sure to fill in this configuration parameter or have a paid subscription for Google Cloud. +{% endimportant %} ### Configure filter diff --git a/source/_integrations/google_tasks.markdown b/source/_integrations/google_tasks.markdown index 02ccff1f761..a3c79002c9d 100644 --- a/source/_integrations/google_tasks.markdown +++ b/source/_integrations/google_tasks.markdown @@ -28,11 +28,9 @@ related: The **Google Tasks** integration allows you to connect your [Google Tasks](https://support.google.com/tasks/answer/7675772) to Home Assistant. The integration adds a [to-do list entity](/integrations/todo) for each task list, allowing you to create, update, or delete items on the list from the **To-do list** dashboard. -<div class='note'> - +{% note %} The Google Tasks public API does not support viewing or setting the due time of tasks, only the due date. - -</div> +{% endnote %} ## Prerequisites diff --git a/source/_integrations/google_translate.markdown b/source/_integrations/google_translate.markdown index c25d55370ed..90df5a2270a 100644 --- a/source/_integrations/google_translate.markdown +++ b/source/_integrations/google_translate.markdown @@ -131,11 +131,9 @@ data: ## Service say (legacy) -<div class='note'> - +{% tip %} The `google_translate_say` service can be used when configuring the legacy `google_translate` text-to-speech platform in `configuration.yaml`. We recommend new users to instead set up the integration in the UI and use the `tts.speak` service with the corresponding Google Translate text-to-speech entity as target. - -</div> +{% endtip %} The `google_translate_say` service supports `language` and also `options` for setting `tld`. The text for speech is set with `message`. Since release 0.92, the service name can be defined in the configuration `service_name` option. diff --git a/source/_integrations/gree.markdown b/source/_integrations/gree.markdown index 7db402cdc3b..a2ca2bbbc64 100644 --- a/source/_integrations/gree.markdown +++ b/source/_integrations/gree.markdown @@ -24,9 +24,9 @@ There is currently support for the following device types within Home Assistant: {% include integrations/config_flow.md %} -<div class='note'> +{% important %} Devices must first be bound to WiFi using the Gree+ app, or app provided by the device manufacturer. It is not possible to connect devices to WiFi using this integration at the current time. -</div> +{% endimportant %} ## Supported models @@ -51,9 +51,9 @@ The `gree` climate platform integrates Gree HVAC systems into Home Assistant, en - [`swing mode`](/integrations/climate#service-climateset_swing_mode) - [`set_preset_mode`](/integrations/climate#service-climateset_preset_mode) -<div class='note'> +{% note %} Preset mode **Away** represents Gree's "8°C heating mode." -</div> +{% endnote %} ## Switch diff --git a/source/_integrations/group.markdown b/source/_integrations/group.markdown index d8b53897002..ee8bca181be 100644 --- a/source/_integrations/group.markdown +++ b/source/_integrations/group.markdown @@ -400,11 +400,9 @@ Old style groups can calculate group state with entities from the following doma - `vacuum` - `water_heater` -<div class='note info'> - +{% note %} Platform domains other than these are not supported to be used with old style groups, nor will other domains be supported in the future. - -</div> +{% endnote %} When member entities all have a single `on` and `off` state, the group state will be calculated as follows: diff --git a/source/_integrations/haveibeenpwned.markdown b/source/_integrations/haveibeenpwned.markdown index 48cb979330f..564e64cb842 100644 --- a/source/_integrations/haveibeenpwned.markdown +++ b/source/_integrations/haveibeenpwned.markdown @@ -56,8 +56,8 @@ account has been breached as well as the added date of the breach data. This dat <img src='/images/integrations/haveibeenpwned/sensor.png' /> </p> -<div class='note warning'> - The sensor will scan all email addresses specified with a 5 second delay between all breach data requests on Home Assistant startup. - After this initial startup scanning, the sensor will only scan one email account per 15 minutes to prevent abuse, and not hammer "the - Have I been Pwned" service, as this breach data almost never changes. -</div> +{% note %} +The sensor will scan all email addresses specified with a 5 second delay between all breach data requests on Home Assistant startup. +After this initial startup scanning, the sensor will only scan one email account per 15 minutes to prevent abuse, and not hammer "the +Have I been Pwned" service, as this breach data almost never changes. +{% endnote %} diff --git a/source/_integrations/hddtemp.markdown b/source/_integrations/hddtemp.markdown index 73e057c3a62..2468ae5f38b 100644 --- a/source/_integrations/hddtemp.markdown +++ b/source/_integrations/hddtemp.markdown @@ -24,12 +24,9 @@ It required that `hddtemp` is started or running in daemon mode on a local or re hddtemp -dF ``` -<div class='note warning'> - - You can't use this sensor in a container (only Home Assistant Core is supported) as it requires access to `hddtemp` which is not available in a container-based setup. - -</div> - +{% important %} +You can't use this sensor in a container (only Home Assistant Core is supported) as it requires access to `hddtemp` which is not available in a container-based setup. +{% endimportant %} ## Configuration diff --git a/source/_integrations/hdmi_cec.markdown b/source/_integrations/hdmi_cec.markdown index cf681a6dbb9..a9821ae15da 100644 --- a/source/_integrations/hdmi_cec.markdown +++ b/source/_integrations/hdmi_cec.markdown @@ -53,12 +53,10 @@ ln -s /usr/local/lib/python*/dist-packages/cec.py /srv/homeassistant/lib/python* ln -s /usr/local/lib/python*/dist-packages/_cec.so /srv/homeassistant/lib/python*/site-packages ``` -<div class='note'> - +{% note %} If after symlinking and adding `hdmi_cec:` to your configuration you are getting the following error in your logs, `* failed to open vchiq instance` you will also need to add the user account Home Assistant runs under, to the `video` group. To add the Home Assistant user account to the `video` group, run the following command. `$ usermod -a -G video <hass_user_account>` - -</div> +{% endnote %} ## Testing your installation @@ -93,11 +91,9 @@ power status: on language: ??? ``` -<div class='note'> - +{% note %} `address:` entry above this will be used to configure Home Assistant, this address is represented below as 3: BlueRay player. - -</div> +{% endnote %} ## Configuration Example diff --git a/source/_integrations/heos.markdown b/source/_integrations/heos.markdown index 84abe6d82c1..8a028de010d 100644 --- a/source/_integrations/heos.markdown +++ b/source/_integrations/heos.markdown @@ -26,9 +26,9 @@ The HEOS integration adds support for [HEOS](https://www.denon.com/en-gb/categor {% include integrations/config_flow.md %} -<div class='note info'> +{% note %} A connection to a single device enables control for all devices on the network. If you have multiple HEOS devices, enter the host of one that is connected to the LAN via wire or has the strongest wireless signal. -</div> +{% endnote %} ## Services diff --git a/source/_integrations/hikvision.markdown b/source/_integrations/hikvision.markdown index 47fbbf54016..017bb3a2cc3 100644 --- a/source/_integrations/hikvision.markdown +++ b/source/_integrations/hikvision.markdown @@ -24,10 +24,10 @@ as a trigger. If you would like to hide a sensor type you can do so by either unchecking "Notify the surveillance center" in the camera configuration or by using the "ignored" customize option detailed below. -<div class='note'> +{% important %} In order for the sensors to work the hikvision user must have the 'Remote: Notify Surveillance Center/Trigger Alarm Output' permission which can be enabled from the user management section of the web interface. If authentication issues persist after permissions are verified, try accessing using an admin user. Certain devices will only authenticate with an admin account despite permissions being set correctly. Also, the 'WEB Authentication' needs to be set to 'digest/basic' in the security/authentication section. Ensure this is applied on each individual camera in case of using an NVR. -</div> +{% endimportant %} For example, if you configure a camera with the name "Front Porch" that has motion detection and line crossing events enabled to notify the surveillance diff --git a/source/_integrations/hikvisioncam.markdown b/source/_integrations/hikvisioncam.markdown index dad7e7a9618..dfd4e9552e1 100644 --- a/source/_integrations/hikvisioncam.markdown +++ b/source/_integrations/hikvisioncam.markdown @@ -18,9 +18,9 @@ related: This `hikvisioncam` switch {% term integration %} allows you to control your motion detection setting on your [Hikvision](https://www.hikvision.com/) camera. -<div class='note warning'> -Currently works using default https port only. -</div> +{% important %} +Currently works using default HTTPS port only. +{% endimportant %} To use your Hikvision cam in your installation, add the following to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} diff --git a/source/_integrations/history_stats.markdown b/source/_integrations/history_stats.markdown index 99bcefc3c4d..f834aa6f917 100644 --- a/source/_integrations/history_stats.markdown +++ b/source/_integrations/history_stats.markdown @@ -84,13 +84,13 @@ duration: type: time {% endconfiguration %} -<div class='note'> +{% note %} You have to provide **exactly 2** of `start`, `end` and `duration`. <br/> You can use [template extensions](/docs/configuration/templating/#home-assistant-template-extensions) such as `now()` or `as_timestamp()` to handle dynamic dates, as shown in the examples below. -</div> +{% endnote %} ## Sensor type @@ -131,11 +131,9 @@ duration: minutes: 30 ``` -<div class='note'> - - If the duration exceeds the number of days of history stored by the `recorder` integration (`purge_keep_days`), the history statistics sensor will not have all the information it needs to look at the entire duration. For example, if `purge_keep_days` is set to 7, a history statistics sensor with a duration of 30 days will only report a value based on the last 7 days of history. - -</div> +{% note %} +If the duration exceeds the number of days of history stored by the `recorder` integration (`purge_keep_days`), the history statistics sensor will not have all the information it needs to look at the entire duration. For example, if `purge_keep_days` is set to 7, a history statistics sensor with a duration of 30 days will only report a value based on the last 7 days of history. +{% endnote %} ### Video tutorial This video tutorial explains how you can use history stats. It also shows how you can create a daily bar chart graph to visualize things such as occupancy, or how long the lights are on in a particular room. @@ -251,8 +249,6 @@ Here, last Monday is today at 00:00, minus the current weekday (the weekday is 0 {% endraw %} -<div class='note'> - - The `/developer-tools/template` page of your Home Assistant UI can help you check if the values for `start`, `end` or `duration` are correct. If you want to check if your period is right, just click on your component, the `from` and `to` attributes will show the start and end of the period, nicely formatted. - -</div> +{% tip %} +The `/developer-tools/template` page of your Home Assistant UI can help you check if the values for `start`, `end` or `duration` are correct. If you want to check if your period is right, just click on your component, the `from` and `to` attributes will show the start and end of the period, nicely formatted. +{% endtip %} diff --git a/source/_integrations/hive.markdown b/source/_integrations/hive.markdown index 1835055ce6d..92e1509f6b9 100644 --- a/source/_integrations/hive.markdown +++ b/source/_integrations/hive.markdown @@ -32,12 +32,10 @@ ha_homekit: true The Hive integration for Home Assistant allows you to interact with supported devices and services offered by [hivehome.com](https://www.hivehome.com) -<div class='note'> - +{% note %} Please note that Hive shut down its North American Servers on November 30th, 2021. Read more about this in their [shutdown notice](https://www.hivehome.com/us/support). - -</div> +{% endnote %} This Hive integration uses the same username and password you use on the [Hive website](https://sso.hivehome.com) to configure it within Home Assistant, 2FA authentication must be enabled to use this integration. Once configured Home Assistant will detect and add all Hive devices, including support for multi-zone heating. diff --git a/source/_integrations/homeassistant.markdown b/source/_integrations/homeassistant.markdown index 0bbbd06d500..dae857da465 100644 --- a/source/_integrations/homeassistant.markdown +++ b/source/_integrations/homeassistant.markdown @@ -211,11 +211,9 @@ For a list of the supported device classes, refer to the documentation of the pl ### Manual customization -<div class='note'> - +{% important %} If you implement `customize`, `customize_domain`, or `customize_glob` you must make sure it is done inside of `homeassistant:` or it will fail. - -</div> +{% endimportant %} ```yaml homeassistant: diff --git a/source/_integrations/homekit.markdown b/source/_integrations/homekit.markdown index 4d090c32995..f0041a797ed 100644 --- a/source/_integrations/homekit.markdown +++ b/source/_integrations/homekit.markdown @@ -23,13 +23,11 @@ Please make sure that you have read the [considerations](#considerations) listed some trouble later. However, if you do encounter issues, check out the [troubleshooting](#troubleshooting) section. -<div class="note"> - - If you want to control HomeKit-only devices with Home Assistant, - check out the [HomeKit Device](/integrations/homekit_controller/) integration, - which provides the possibility to pull HomeKit-enabled devices into Home Assistant. - -</div> +{% tip %} +If you want to control HomeKit-only devices with Home Assistant, +check out the [HomeKit Device](/integrations/homekit_controller/) integration, +which provides the possibility to pull HomeKit-enabled devices into Home Assistant. +{% endtip %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/homekit_controller.markdown b/source/_integrations/homekit_controller.markdown index 958bf36cbb5..ac1156de292 100644 --- a/source/_integrations/homekit_controller.markdown +++ b/source/_integrations/homekit_controller.markdown @@ -205,11 +205,9 @@ There is currently support for the following device types (also called *domains* - Humidifier (HomeKit humidifiers and dehumidifiers) - Automation triggers (HomeKit 'stateless' accessories like buttons, remotes and doorbells) -<div class='note'> - - If your device is not on this list then you may still be able to pair it, and it will be visible in the Device Registry. But Home Assistant may not create entities for it. - -</div> +{% note %} +If your device is not on this list then you may still be able to pair it, and it will be visible in the Device Registry. But Home Assistant may not create entities for it. +{% endnote %} The integration will enable push updates. Devices that connect through Wi-Fi or Ethernet may fall back to only polling if the connection is unstable. diff --git a/source/_integrations/homematic.markdown b/source/_integrations/homematic.markdown index 2a67d9a7be6..d1e1599ca38 100644 --- a/source/_integrations/homematic.markdown +++ b/source/_integrations/homematic.markdown @@ -47,11 +47,9 @@ There is currently support for the following device types within Home Assistant: Device support is available for most of the wired and wireless devices, as well as a lot of IP devices. If you have a setup with mixed protocols, you have to configure additional [interfaces](/integrations/homematic#interfaces) with the appropriate ports. The default is using port 2001, which are wireless devices. Wired devices usually are available through port 2000 and IP devices through port 2010. The virtual thermostatgroups the CCU provides use port 9292 **and** require you to set the `path` setting to `/groups`. When using SSL on a CCU3, by default the same ports as usual with a prepended 4 are available. So 2001 becomes 42001, 2010 becomes 42010 etc.. -<div class='note info'> - +{% important %} Since CCU Version 3, the internal firewalls are enabled by default. You have to grant full access for the `XML-RPC API` or specify the IP-address of the Home Assistant instance and allowlist it, inside the CCU's security settings. - -</div> +{% endimportant %} If you want to see if a specific device you have is supported, head over to the [pyhomematic](https://github.com/danielperna84/pyhomematic/tree/master/pyhomematic/devicetypes) repository and browse through the source code. A dictionary with the device identifiers (e.g., HM-Sec-SC-2) can be found within the relevant modules near the bottom. If your device is not supported, feel free to contribute. diff --git a/source/_integrations/homewizard.markdown b/source/_integrations/homewizard.markdown index 9bda7132412..eb439da0501 100644 --- a/source/_integrations/homewizard.markdown +++ b/source/_integrations/homewizard.markdown @@ -31,11 +31,9 @@ Integration for the [HomeWizard Energy](https://www.homewizard.com) platform. It - [Wi-Fi Watermeter](https://www.homewizard.com/watermeter): Sensors for active and total water usage (model: `HWE-WTR`) - [Wi-Fi kWh Meter](https://www.homewizard.com/kwh-meter): Sensors for power import/export and energy consumption. (Models: `HWE-KWH1`, `HWE-KWH3`, `SDM230-wifi`, and `SDM630-wifi`) -<div class='note'> - +{% note %} The Watermeter can be powered via a USB-C cable and with batteries. When using batteries they only connect to Wi-Fi every couple of hours. Because of this, the API can only be used when powered via the USB-C cable. It is not possible to use this integration when the water meter is powered by batteries. - -</div> +{% endnote %} ## Enable the API diff --git a/source/_integrations/hp_ilo.markdown b/source/_integrations/hp_ilo.markdown index 90c443a01ba..1dc830465ff 100644 --- a/source/_integrations/hp_ilo.markdown +++ b/source/_integrations/hp_ilo.markdown @@ -130,9 +130,9 @@ sensor: ## Hardware specifics -<div class='note warning'> +{% note %} Not every hardware supports all values. -</div> +{% endnote %} ### HP Microserver Gen8 diff --git a/source/_integrations/html5.markdown b/source/_integrations/html5.markdown index 65c93305410..1ce3f7b4e23 100644 --- a/source/_integrations/html5.markdown +++ b/source/_integrations/html5.markdown @@ -16,11 +16,9 @@ related: The `html5` notification {% term integration %} enables you to receive push notifications to Chrome or Firefox, no matter where you are in the world. `html5` also supports Chrome and Firefox on Android, which enables native-app-like integrations without actually needing a native app. -<div class='note'> - +{% important %} HTML5 push notifications **do not** work on iOS versions below 16.4. - -</div> +{% endimportant %} ## Configuration diff --git a/source/_integrations/http.markdown b/source/_integrations/http.markdown index 9ad3a714924..081b3335380 100644 --- a/source/_integrations/http.markdown +++ b/source/_integrations/http.markdown @@ -19,11 +19,9 @@ There is currently support for the following device types within Home Assistant: - [Binary sensor](#binary-sensor) - [Sensor](#sensor) -<div class='note'> - +{% warning %} The option `server_host` should only be used on a Home Assistant Core installation! - -</div> +{% endwarning %} ```yaml # Example configuration.yaml entry @@ -150,17 +148,13 @@ After a ban is added a Persistent Notification is populated to the Home Assistan If you want to use Home Assistant to host or serve static files then create a directory called `www` under the configuration path (`/config`). The static files in `www/` can be accessed by the following URL `http://your.domain:8123/local/`, for example `audio.mp3` would be accessed as `http://your.domain:8123/local/audio.mp3`. -<div class='note'> +{% important %} +If you've had to create the `www/` folder for the first time, you'll need to restart Home Assistant. +{% endimportant %} - If you've had to create the `www/` folder for the first time, you'll need to restart Home Assistant. - -</div> - -<div class='note warning'> - - Files served from the `www` folder (`/local/` URL), aren't protected by the Home Assistant authentication. Files stored in this folder, if the URL is known, can be accessed by anybody without authentication. - -</div> +{% caution %} +Files served from the `www` folder (`/local/` URL), aren't protected by the Home Assistant authentication. Files stored in this folder, if the URL is known, can be accessed by anybody without authentication. +{% endcaution %} ## Binary sensor @@ -174,9 +168,9 @@ The URL for a binary sensor looks like the example below: http://IP_ADDRESS:8123/api/states/binary_sensor.DEVICE_NAME ``` -<div class='note'> +{% important %} You should choose a unique device name (DEVICE_NAME) to avoid clashes with other devices. -</div> +{% endimportant %} The JSON payload must contain the new state and can have a friendly name. The friendly name is used in the frontend to name the sensor. @@ -259,9 +253,9 @@ The URL for a sensor looks like the example below: http://IP_ADDRESS:8123/api/states/sensor.DEVICE_NAME ``` -<div class='note'> +{% important %} You should choose a unique device name (DEVICE_NAME) to avoid clashes with other devices. -</div> +{% endimportant %} The JSON payload must contain the new state and should include the unit of measurement and a friendly name. The friendly name is used in the frontend to name the sensor. diff --git a/source/_integrations/hue.markdown b/source/_integrations/hue.markdown index f115aab7b04..c268e8dc16f 100644 --- a/source/_integrations/hue.markdown +++ b/source/_integrations/hue.markdown @@ -67,11 +67,9 @@ You can use this service for example if you'd like to start/stop Dynamic Mode. Hue remotes such as the Dimmer Switch are stateless devices, meaning that they do not have a on/off state like regular entities in Home Assistant. Instead, such devices emit the event `hue_event` when a button is pressed. You can test what events come in using the event {% my developer_events title="developer tools in Home Assistant" %} and subscribe to the `hue_event`. Once you know what the event data looks like, you can use this to create automations. -<div class='note warning'> - +{% note %} At the time of writing, there's a limitation on the Hue API that each device can only send one event per second. This means that button events are rate-limited to 1 per second. This is brought to the attention of Signify and it will hopefully be fixed soon. - -</div> +{% endnote %} ## Support for legacy (V1) Hue bridges diff --git a/source/_integrations/humidifier.markdown b/source/_integrations/humidifier.markdown index db5b2bf5567..28c8d0ad570 100644 --- a/source/_integrations/humidifier.markdown +++ b/source/_integrations/humidifier.markdown @@ -43,11 +43,9 @@ The following device classes are supported for humidifiers: Available services: `humidifier.set_mode`, `humidifier.set_humidity`, `humidifier.turn_on`, `humidifier.turn_off`, `humidifier.toggle` -<div class='note'> - +{% tip %} Not all humidifier services may be available for your platform. Be sure to check the available services Home Assistant has enabled by checking the Services page in the [Developer Tools](/docs/tools/dev-tools/). - -</div> +{% endtip %} ### Service `humidifier.set_mode` diff --git a/source/_integrations/humidifier.mqtt.markdown b/source/_integrations/humidifier.mqtt.markdown index c50b9e6f47d..078bb6319e4 100644 --- a/source/_integrations/humidifier.mqtt.markdown +++ b/source/_integrations/humidifier.mqtt.markdown @@ -286,11 +286,9 @@ unique_id: type: string {% endconfiguration %} -<div class='note warning'> - +{% important %} Make sure that your topics match exactly. `some-topic/` and `some-topic` are different topics. - -</div> +{% endimportant %} ## Examples diff --git a/source/_integrations/hunterdouglas_powerview.markdown b/source/_integrations/hunterdouglas_powerview.markdown index e39b7964af8..8b3494adde1 100644 --- a/source/_integrations/hunterdouglas_powerview.markdown +++ b/source/_integrations/hunterdouglas_powerview.markdown @@ -53,11 +53,11 @@ Generation 1 and 2 Pebble remotes use proprietary Bluetooth Low Energy (PLE) and This will result in the shade positioning displayed within Home Assistant being incorrect. -<div class="note"> +{% note %} Calling the update entity service (`homeassistant.update_entity`) on a shade entity will trigger the hub to awaken a shade and report its current position. [An example automation is available](#force-update-shade-position) below for mains powered shades. While the automation will work for battery-powered shades, it will quickly drain the batteries for these devices. -</div> +{% endnote %} ### Generation 3 @@ -67,9 +67,9 @@ Generation 3 shades report position changes back to the hub automatically. They ## Shades -<div class="note"> +{% note %} Your shades may still make work even if not listed. If you encounter issues, please raise a feature request on the community forum. -</div> +{% endnote %} | Name (Type) | Capabilities | | :---------------------------------------- | :------------------------------ | @@ -181,9 +181,9 @@ Three different entities that will be created for each blind: Front, Rear and Co ### Calibrate -<div class="note"> +{% important %} Gen 1 and Gen 2 Only. -</div> +{% endimportant %} Initiate a calibration of the shade position. Calibration is a common requirement with Duette-type shades with a string drop that lowers and raises the blind and less so with roller types. ### Identify @@ -192,27 +192,30 @@ Identify will 'jog' the shade position as a diagnostic tool to ensure the shade ### Favorite -<div class="note"> +{% important %} Gen 1 and Gen 2 Only. -</div> +{% endimportant %} + Move the shade to the favorite position as programmed physically on the device. This will perform the same move as the heart on the pebble remote. ## Selection Entities ### Power Source -<div class="note"> +{% important %} Gen 1 and Gen 2 Only. -</div> +{% endimportant %} + Set the type for connected power source. Available options are Hardwired Power Supply, Battery Wand and Rechargeable Battery ## Number entities ### Velocity -<div class="note"> +{% important %} Gen 3 Only. -</div> +{% endimportant %} + Velocity controls the speed of the shade. The default speed from Hunter Douglas is 0; setting this higher will increase the speed of the shade. ## Example Automations diff --git a/source/_integrations/huum.markdown b/source/_integrations/huum.markdown index 4f05569a0df..aa61d470fe3 100644 --- a/source/_integrations/huum.markdown +++ b/source/_integrations/huum.markdown @@ -21,12 +21,10 @@ You’ll need your username (which is usually your email) and password to config The integration takes the same security measures regarding an open sauna door as the Huum app. If the sauna door is open, the sauna will not turn on. -<div class='note info'> - +{% note %} When the sauna is off, you must turn on the sauna after setting the temperature. This is as a security measure so that one does not turn on the sauna by mistake. - -</div> +{% endnote %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/hydrawise.markdown b/source/_integrations/hydrawise.markdown index f50726cd18d..76accaeffa1 100644 --- a/source/_integrations/hydrawise.markdown +++ b/source/_integrations/hydrawise.markdown @@ -42,9 +42,9 @@ Binary sensor entities are created for the controller: - Cloud API availability -<div class='note warning'> +{% note %} The Hydrawise API removed the ability to read the rain sensor status. Therefore it is no longer supported by the Hydrawise integration to Home Assistant. -</div> +{% endnote %} Binary sensor entities are created for each zone: @@ -70,6 +70,6 @@ When `auto_watering` is `on` the irrigation zone will follow the Smart Watering When `manual_watering` is `on` the zone will run for 15 minutes. -<div class='note warning'> +{% note %} Due to changes in the Hydrawise API the status of the Auto Watering switches has changed. Under normal conditions the Auto Watering switches correctly reflect the Smart Watering schedule on the Hydrawise mobile or web app. However, if a rain sensor is connected to the system and it is active (rain detected), or the zone is running the Auto Watering switch will turn off. After both of those conditions are removed the switch will again show the correct Auto Watering condition. -</div> +{% endnote %} diff --git a/source/_integrations/icloud.markdown b/source/_integrations/icloud.markdown index c21090c0f3b..1488db73ee5 100644 --- a/source/_integrations/icloud.markdown +++ b/source/_integrations/icloud.markdown @@ -28,11 +28,11 @@ It does require that your devices are registered with the [Find My](https://www. {% include integrations/config_flow.md %} -<div class='note warning'> +{% warning %} You may receive an email and a notification from Apple saying that someone has logged into your account. For the notification, press "Allow", then "OK". -</div> +{% endwarning %} To prevent excessive battery drainage, a dynamic interval is used for each individual device instead of a fixed interval for all devices linked to one account. The dynamic interval is based on the current zone of a device, the distance towards home and the battery level of the device. diff --git a/source/_integrations/idasen_desk.markdown b/source/_integrations/idasen_desk.markdown index 2e948d66857..1df4b341e0f 100644 --- a/source/_integrations/idasen_desk.markdown +++ b/source/_integrations/idasen_desk.markdown @@ -20,7 +20,7 @@ ha_codeowners: The IKEA IDÅSEN integration allows you to connect your IKEA Idåsen motorized desk to Home Assistant, making it possible to control the desk height and also monitor height changes from the physical controller. -<div class='note warning'> +{% tip %} The recommended way to connect the desk to Home Assistant is by using an [ESPHome Bluetooth Proxy](https://esphome.io/projects/?type=bluetooth), as they provide the best experience. @@ -28,15 +28,15 @@ If you are not using an ESPHome Bluetooth Proxy, you need to keep `bluetoothctl` Also, if not using an ESPHome Bluetooth Proxy, you may experience the desk becoming unavailable and needing re-pairing after a restart of Home Assistant or a reload of the integration. To pair it permanently, [access the host over SSH](https://developers.home-assistant.io/docs/operating-system/debugging/#ssh-access-to-the-host), pair the desk with `bluetoothctl pair <desk-BT-address>`, and validate it being listed by `bluetoothctl devices Paired`. If the desk is not listed as paired, repeat the command several times while entering pairing mode on the desk. -</div> +{% endtip %} {% include integrations/config_flow.md %} Home Assistant will display a list of addresses of the available desks, and you just need to select the one you want to add. Repeat the process to add more than one desk. -<div class='note'> +{% note %} If you see an "No unconfigured devices found" message, make sure that the desk is in Bluetooth pairing mode. For that, press the small button with the Bluetooth logo on the controller until it starts blinking (about 3 seconds). -</div> +{% endnote %} ## Connect/Disconnect buttons diff --git a/source/_integrations/ifttt.markdown b/source/_integrations/ifttt.markdown index 126e45d4c3d..fa4bbc3b664 100644 --- a/source/_integrations/ifttt.markdown +++ b/source/_integrations/ifttt.markdown @@ -66,9 +66,9 @@ ifttt: Once you have added your key to your {% term "`configuration.yaml`" %} file, restart your Home Assistant instance. This will load up the IFTTT integration and make a service available to trigger events in IFTTT. -<div class='note'> +{% important %} After restarting the server, be sure to watch the console for any logging errors that show up in red, white or yellow. -</div> +{% endimportant %} ### Multiple IFTTT keys diff --git a/source/_integrations/imap.markdown b/source/_integrations/imap.markdown index 0e10b7ea74f..844b022aa5b 100644 --- a/source/_integrations/imap.markdown +++ b/source/_integrations/imap.markdown @@ -62,12 +62,9 @@ Below is an example for setting up the integration to connect to your Microsoft - Password: Your password - Charset: `US-ASCII` -<div class="note"> - +{% important %} Yahoo also requires the character set `US-ASCII`. - -</div> - +{% endimportant %} ### Selecting message data to include in the IMAP event (advanced mode) @@ -81,21 +78,17 @@ The SSL cipher list option allows you to select the list of SSL ciphers to be ac If you are using self signed certificates, you can turn off SSL verification. -<div class='note info'> - +{% important %} The SSL cipher list and verify SSL are advanced settings. The options are available only when advanced mode is enabled (see user settings). - -</div> +{% endimportant %} ### Enable IMAP-Push IMAP-Push is enabled by default if your IMAP server supports it. If you use an unreliable IMAP service that periodically drops the connection and causes issues, you might consider turning off IMAP-Push. This will fall back to polling the IMAP server. -<div class='note info'> - +{% important %} The enforce polling option is an advanced setting. The option is available only when advanced mode is enabled (see user settings). - -</div> +{% endimportant %} ### Troubleshooting @@ -110,11 +103,9 @@ The table below shows what attributes come with `trigger.event.data`. The data i The attributes shown in the table are also available as variables for the custom event data template. The [example](/integrations/imap/#example---custom-event-data-template) shows how to use this as an event filter. -<div class='note info'> - +{% important %} The custom event data template is an advanced feature. The option is available only when advanced mode is enabled (see user settings). The `text` attribute is not size limited when used as a variable in the template. - -</div> +{% endimportant %} {% configuration_basic %} server: @@ -148,11 +139,9 @@ The `event_type` for the custom event should be set to `imap_content`. The confi If the default maximum message size (2048 bytes) to be used in events is too small for your needs, then this maximum size setting can be increased. You need to have your profile set to _advanced_ mode to do this. -<div class='note warning'> - +{% warning %} Increasing the default maximum message size (2048 bytes) could have a negative impact on performance as event data is also logged by the `recorder`. If the total event data size exceeds the maximum event size (32168 bytes), the event will be skipped. - -</div> +{% endwarning %} {% raw %} @@ -196,11 +185,9 @@ Available services are: - `delete`: Delete the message. - `fetch`: Fetch the content of a message. Returns a dictionary containing `"text"`, `"subject"`, `"sender"` and `"uid""`. This allows to fetch and process the complete message text, not limited by size. -<div class='note warning'> - +{% caution %} When these services are used in an automation, make sure the right triggers and filtering are set up. When messages are deleted, they cannot be recovered. When multiple IMAP entries are set up, make sure the messages are filtered by the `entry_id` as well to ensure the correct messages are processed. Do not use these services unless you know what you are doing. - -</div> +{% endcaution %} ## Example - post-processing diff --git a/source/_integrations/influxdb.markdown b/source/_integrations/influxdb.markdown index e1c2a13b056..84ae7803c0a 100644 --- a/source/_integrations/influxdb.markdown +++ b/source/_integrations/influxdb.markdown @@ -25,11 +25,9 @@ There is currently support for the following device types within Home Assistant: - [Sensor](#sensor) -<div class='note'> - +{% note %} The `influxdb` database integration runs parallel to the Home Assistant database. It does not replace it. - -</div> +{% endnote %} ## Configuration @@ -300,7 +298,7 @@ influxdb: The `influxdb` sensor allows you to use values from an [InfluxDB](https://influxdb.com/) database to populate a sensor state. This can be used to present statistics as Home Assistant sensors, if used with the `influxdb` history integration. It can also be used with an external data source. -<div class='note'> +{% important %} You must configure the `influxdb` history integration in order to create `influxdb` sensors. If you just want to create sensors for an external InfluxDB database and you don't want Home Assistant to write any data to it you can exclude all entities like this: @@ -310,7 +308,7 @@ influxdb: entity_globs: "*" ``` -</div> +{% endimportant %} ### Configuration diff --git a/source/_integrations/input_select.markdown b/source/_integrations/input_select.markdown index 442636fda92..7db599b4f18 100644 --- a/source/_integrations/input_select.markdown +++ b/source/_integrations/input_select.markdown @@ -63,11 +63,9 @@ input_select: type: icon {% endconfiguration %} -<div class='note'> - +{% note %} Because YAML defines [booleans](https://yaml.org/type/bool.html) as equivalent, any variations of 'On', 'Yes', 'Y', 'Off', 'No', or 'N' (regardless of case) used as option names will be replaced by True and False unless they are defined in quotation marks. - -</div> +{% endnote %} ### Restore state diff --git a/source/_integrations/insteon.markdown b/source/_integrations/insteon.markdown index 193dca0801c..4197d1f52f4 100644 --- a/source/_integrations/insteon.markdown +++ b/source/_integrations/insteon.markdown @@ -27,7 +27,9 @@ ha_integration_type: integration ha_dhcp: true --- -<p class='note warning'>The Insteon apps (Director or Insteon for Hub) are a paid service utilizing the Insteon cloud to control an Insteon Hub. Home Assistant does not require the use of the Insteon app but can operate in conjunction with the app if desired.</p> +{% important %} +The Insteon apps (Director or Insteon for Hub) are a paid service utilizing the Insteon cloud to control an Insteon Hub. Home Assistant does not require the use of the Insteon app but can operate in conjunction with the app if desired. +{% endimportant %} This integration adds support for integrating your Insteon network with Home Assistant. It has been tested with all USB and serial PowerLinc Modems (PLM) including [2413U], [2448A7], [2413S] and [2412S] models. It has also been tested to work with the [2242] and [2245] Hubs. @@ -102,8 +104,13 @@ The Insteon All-Link Database (ALDB) contains the list of links to other devices - **Undo changes**: Undoes ALDB record changes before they are written to the device. - **Delete device**: Deletes the Insteon device from Home Assistant and removes all references to the device in the modem. Optionally, it can remove any references to the device in other Insteon devices. -<p class='note warning'>If you choose to use the Insteon app, it is recommended to add devices and scenes using the Insteon app. Home Assistant will see the devices and scenes as well. Devices and scenes added in Home Assistant will not be available in the Insteon app.</p> -<p class='note warning'>Editing a device's All-Link Database can cause the device to become unresponsive. If this occurs, simply relink the device to the modem using the <a href="#add-device">Add device</a> directions above.</p> +{% tip %} +If you choose to use the Insteon app, it is recommended to add devices and scenes using the Insteon app. Home Assistant will see the devices and scenes as well. Devices and scenes added in Home Assistant will not be available in the Insteon app. +{% endtip %} + +{% warning %} +Editing a device's All-Link Database can cause the device to become unresponsive. If this occurs, simply relink the device to the modem using the <a href="#add-device">Add device</a> directions above. +{% endwarning %} [understanding linking]: https://www.insteon.com/support-knowledgebase/2015/1/28/understanding-linking @@ -196,7 +203,9 @@ The following services are available: ## Device overrides -<p class='note warning'>Device overrides are not used to add a device to the Insteon integration. They are only used if a device that was linked correctly to the Insteon Modem but is not appearing in Home Assistant. +{% warning %} +Device overrides are not used to add a device to the Insteon integration. They are only used if a device that was linked correctly to the Insteon Modem but is not appearing in Home Assistant. +{% endwarning %} There are two primary uses for the **device override** feature: diff --git a/source/_integrations/iss.markdown b/source/_integrations/iss.markdown index ff00c58f607..19771213729 100644 --- a/source/_integrations/iss.markdown +++ b/source/_integrations/iss.markdown @@ -22,10 +22,10 @@ It will also tell you how many people are in space. {% include integrations/config_flow.md %} -<div class='note warning'> +{% note %} If you enable "Show on map" in the options for this integration then the location attributes are named `latitude` and `longitude`. The default name of the location attributes is `lat` and `long` to avoid showing them on the map. -</div> +{% endnote %} diff --git a/source/_integrations/knx.markdown b/source/_integrations/knx.markdown index 335133c5141..198e96fed3f 100644 --- a/source/_integrations/knx.markdown +++ b/source/_integrations/knx.markdown @@ -162,11 +162,9 @@ The KNX integration provides its own trigger platform which can be used in autom The `knx.telegram` trigger can be used to trigger automations on incoming or outgoing KNX telegrams. -<div class='note'> - +{% note %} This trigger is also provided as a device trigger by the `KNX Interface` device. It supports setting the options in the automation builder UI, but doesn't support setting a specific <abbr title="data point type">DPT</abbr> (`type`) to decode the payload as it always relies on project data. - -</div> +{% endnote %} {% configuration %} destination: @@ -284,11 +282,9 @@ context: null ## Events -<div class='note'> - +{% tip %} For automation triggers, it is recommended to use the [knx.telegram](#telegram-trigger) trigger instead of `knx_event`. - -</div> +{% endtip %} ```yaml knx: @@ -431,11 +427,9 @@ remove: KNX integration is able to expose entity states or attributes to KNX bus. The integration will broadcast any change of the exposed value to the KNX bus and answer read requests to the specified group address. It is also possible to expose the current time and date. These are sent to the bus every hour. -<div class='note'> - +{% tip %} Expose is only triggered on state changes. If you need periodical telegrams, use an automation with the `knx.send` service to send the value to the bus. - -</div> +{% endtip %} {% raw %} @@ -656,11 +650,9 @@ action: The KNX button platform allows to send concurrent predefined values via the frontend or a platform service. When a user presses the button, the assigned generic raw payload is sent to the KNX bus. -<div class='note'> - +{% tip %} Telegrams received on the KNX bus for the group address of a button are not reflected in a new button state. Use the `knx.telegram` trigger if you want to automate on a specific payload received on a group address. - -</div> +{% endtip %} ```yaml # Example configuration.yaml entry @@ -678,12 +670,10 @@ knx: type: temperature ``` -<div class='note'> - +{% important %} When `type` is used `value` is required, `payload` is invalid. When `payload_length` is used `value` is invalid. - -</div> +{% endimportant %} {% configuration %} name: @@ -968,13 +958,11 @@ entity_category: The KNX cover platform is used as an interface to KNX covers. -<div class='note'> - +{% note %} Unlike most KNX devices, Home Assistant defines 0% as closed and 100% as fully open in regards to covers. The corresponding value inversion is done internally by the KNX integration. Home Assistant will, by default, `close` a cover by moving it in the `DOWN` direction in the KNX nomenclature, and `open` a cover by moving it in the `UP` direction. - -</div> +{% endnote %} To use your KNX covers in your installation, add the following lines to your top level [KNX Integration](/integrations/knx) configuration key in `configuration.yaml`: @@ -1066,19 +1054,15 @@ entity_category: The KNX date platform allows to send date values to the KNX bus and update its state from received telegrams. It can optionally respond to read requests from the KNX bus. -<div class='note'> - +{% note %} Date entities without a `state_address` will restore their last known state after Home Assistant was restarted. Dates that have a `state_address` configured request their current state from the KNX bus. +{% endnote %} -</div> - -<div class='note'> - +{% note %} DPT 11.001 covers the range 1990 to 2089. Year values outside of this range are not allowed. - -</div> +{% endnote %} ```yaml # Example configuration.yaml entry @@ -1136,20 +1120,16 @@ entity_category: The KNX datetime platform allows to send datetime values to the KNX bus and update its state from received telegrams. It can optionally respond to read requests from the KNX bus. -<div class='note'> - +{% note %} Date entities without a `state_address` will restore their last known state after Home Assistant was restarted. DateTimes that have a `state_address` configured request their current state from the KNX bus. +{% endnote %} -</div> - -<div class='note'> - +{% note %} System timezone is used as DPT 19.001 doesn't provide timezone information. Year values outside of the range 1900 to 2155 are invalid. - -</div> +{% endnote %} ```yaml # Example configuration.yaml entry @@ -1538,13 +1518,11 @@ data: The KNX number platform allows to send generic numeric values to the KNX bus and update its state from received telegrams. It can optionally respond to read requests from the KNX bus. -<div class='note'> - +{% note %} Number entities without a `state_address` will restore their last known state after Home Assistant was restarted. Numbers that have a `state_address` configured request their current state from the KNX bus. - -</div> +{% endnote %} ```yaml # Example configuration.yaml entry @@ -1650,13 +1628,11 @@ entity_category: The KNX select platform allows the user to define a list of values that can be selected via the frontend and can be used within conditions of automation. When a user selects a new item, the assigned generic raw payload is sent to the KNX bus. A received telegram updates the state of the select entity. It can optionally respond to read requests from the KNX bus. -<div class='note'> - +{% note %} Select entities without a `state_address` will restore their last known state after Home Assistant was restarted. Selects that have a `state_address` configured request their current state from the KNX bus. - -</div> +{% endnote %} ```yaml # Example configuration.yaml entry @@ -2064,13 +2040,11 @@ Switches that have a `state_address` configured request their current state from The KNX text platform allows to send text values to the KNX bus and update its state from received telegrams. It can optionally respond to read requests from the KNX bus. -<div class='note'> - +{% note %} Text entities without a `state_address` will restore their last known state after Home Assistant was restarted. Texts that have a `state_address` configured request their current state from the KNX bus. - -</div> +{% endnote %} ```yaml # Example configuration.yaml entry @@ -2126,19 +2100,15 @@ entity_category: The KNX time platform allows to send time values to the KNX bus and update its state from received telegrams. It can optionally respond to read requests from the KNX bus. -<div class='note'> - +{% note %} Time entities without a `state_address` will restore their last known state after Home Assistant was restarted. Times that have a `state_address` configured request their current state from the KNX bus. +{% endnote %} -</div> - -<div class='note'> - +{% note %} The `day` field of the time telegram will always be set to 0 (`no day`). - -</div> +{% endnote %} ```yaml # Example configuration.yaml entry diff --git a/source/_integrations/kodi.markdown b/source/_integrations/kodi.markdown index ff019861220..59172153f6e 100644 --- a/source/_integrations/kodi.markdown +++ b/source/_integrations/kodi.markdown @@ -220,11 +220,9 @@ script: command: standby ``` -<div class='note'> - +{% important %} This example and the following requires to have the [script.json-cec](https://github.com/joshjowen/script.json-cec) plugin installed on your Kodi player. It'll also expose the endpoints standby, toggle and activate without authentication on your Kodi player. Use this with caution. - -</div> +{% endimportant %} ### Kodi services samples diff --git a/source/_integrations/konnected.markdown b/source/_integrations/konnected.markdown index 36df0a6f4ed..82e8ec45ead 100644 --- a/source/_integrations/konnected.markdown +++ b/source/_integrations/konnected.markdown @@ -22,19 +22,16 @@ ha_integration_type: integration The `konnected` integration lets you connect wired sensors and switches to a Konnected Alarm Panel, or NodeMCU ESP8226 based device running the [open source Konnected software](https://github.com/konnected-io/konnected-security). Reuse the wired sensors and siren from an old or pre-wired alarm system installation and integrate them directly into Home Assistant. -<div class='note warning'> - -This integration is deprecated in favor of [Konnected's ESPHome firmware](https://support.konnected.io/add-a-konnected-device-to-home-assistant-with-esphome) and will not receive updates. ESPHome connects locally and natively to Home Assistant and doesn't need this custom integration. If you are getting started with a Konnected device, do not use this integration. Instead, flash your device with ESPHome-based firmware for the [Konnected Alarm Panel](https://install.konnected.io/esphome) and [Garage Door Opener](https://support.konnected.io/installing-the-garage-door-opener-with-home-assistant). +{% warning %} -</div> +This integration is deprecated in favor of [Konnected's ESPHome firmware](https://support.konnected.io/add-a-konnected-device-to-home-assistant-with-esphome) and will not receive updates. ESPHome connects locally and natively to Home Assistant and doesn't need this custom integration. If you are getting started with a Konnected device, do not use this integration. Instead, flash your device with ESPHome-based firmware for the [Konnected Alarm Panel](https://install.konnected.io/esphome) and [Garage Door Opener](https://support.konnected.io/installing-the-garage-door-opener-with-home-assistant). +{% endwarning %} Visit the [Konnected.io website](https://konnected.io) for more information about the Konnected Alarm Panel board and compatible hardware. -<div class='note info'> - +{% important %} Always ensure your panel is running the [latest firmware](https://help.konnected.io/support/solutions/folders/32000035066) before connecting it to Home Assistant. - -</div> +{% endimportant %} The integration currently supports the following device types in Home Assistant: @@ -44,11 +41,9 @@ The integration currently supports the following device types in Home Assistant: This integration uses the [SSDP](/integrations/ssdp) integration, which must be enabled for device discovery to work. If you don't want to use SSDP you'll need to manually provide the IP and Port information for each Konnected Panel. The IP/Port info can be found using the Konnected mobile app. -<div class='note info'> - +{% note %} Konnected devices communicate with Home Assistant over your local LAN -- there is no cloud component! For best performance we recommend allowing unsecured HTTP API traffic between Konnected devices and Home Assistant on your LAN. This means that you should not use the `http` integration to serve SSL/TLS certificates. Instead, use a proxy like NGINX or Caddy to serve SSL/TLS. [Read more.](https://help.konnected.io/support/solutions/articles/32000023964-set-up-hass-io-with-secure-remote-access-using-duckdns-and-nginx-proxy) - -</div> +{% endnote %} ## Configuration @@ -58,13 +53,11 @@ Starting with 0.106.0 Home Assistant requires UI based configuration of Konnecte Selecting one of these discovered panels will guide you through connecting and configuring the panel. If your panel was discovered via SSDP, you shouldn't need any information to complete configuration - simply confirm that the information displayed is correct. If the UI prompts you for IP/Port, you'll need to enter it. IP/Port info can be found using the Konnected mobile app. -<div class='note info'> - +{% note %} If you have an existing `configuration.yaml` completing the UI configuration will do a one time import of the settings contained in `configuration.yaml`. Once the import creates a **Configured** integration the Konnected section of the `configuration.yaml` is no longer used - it is recommended to remove the `konnected` section of `configuration.yaml` and after the import occurs. Any future changes to settings should occur via the settings provided in the Home Assistant web interface. If you want to retain `configuration.yaml` and need to re-import any changes or updates you will need to delete the entry in **Settings** -> **Devices & Services** -> **Configured** and repeat the UI configuration for that device. - -</div> +{% endnote %} Once configuration is completed you'll see a Konnected.io entry in **Settings** -> **Devices & Services** -> **Configured**. If you imported settings from `configuration.yaml` you are now done! If you are setting up a new Konnected Alarm Panel or modifying settings, you'll need to utilize the settings UI to configure zone behavior. diff --git a/source/_integrations/kostal_plenticore.markdown b/source/_integrations/kostal_plenticore.markdown index c0a1f7d2762..51438158650 100644 --- a/source/_integrations/kostal_plenticore.markdown +++ b/source/_integrations/kostal_plenticore.markdown @@ -28,9 +28,9 @@ The integration uses the REST-API interface which is also used by the integrated The integration disables most of the sensors per default. You can enable it in the *Entity* page. The sensors are split into two sets, one for the process data and one for the setting values. -<div class='note'> +{% note %} The Plenticore inverter provides much more data endpoints, some of them are also dependent of the version of the firmware. If you are missing process data values, open an issue with the necessary information or make an pull request. -</div> +{% endnote %} ### Process Data Sensors @@ -122,9 +122,9 @@ The following sensors are available in the library: | Energy to Grid Total | kWh | Energy fed into the grid in total, since the system was installed. | | Sum power of all PV DC inputs | W | Total sum of power provided by all PV inputs together. | -<div class='note'> +{% note %} The inverter does not provide any data about the energy that is fed into the grid directly, but the `pykoplenti` library provides it via virtual process data. -</div> +{% endnote %} #### Configuration of the energy dashboard @@ -136,9 +136,9 @@ The following sensors can be used in the [energy dashboard](/docs/energy/): | Solar production | Energy PV1 Total, Energy PV2 Total, Energy PV3 Total | | Battery systems | Battery Discharge Total, Battery Charge from PV Total | -<div class='note'> +{% note %} Some of the energy is measured on the DC side and some on the AC side, so the values may differ slightly due to losses between DC and AC. -</div> +{% endnote %} ### Settings Sensors @@ -151,9 +151,9 @@ The following sensors are available in the library: | Battery Strategy | | RW | Battery strategy. | | Shadow Management | | RW | PV string shadow management. | -<div class='note'> +{% note %} Setting values change less often, therefore these sensors are only polled every 5 minutes. -</div> +{% endnote %} #### Battery Strategy diff --git a/source/_integrations/lacrosse_view.markdown b/source/_integrations/lacrosse_view.markdown index 8b71a65d401..485826136d3 100644 --- a/source/_integrations/lacrosse_view.markdown +++ b/source/_integrations/lacrosse_view.markdown @@ -19,11 +19,9 @@ ha_integration_type: integration It is also available in Europe as [**TFA View**](https://www.tfa-dostmann.de/en/produkte/weather-stations/wifi-weather-stations/). -<div class='note'> - +{% tip %} If you are looking for an integration for [**Jeelink LaCrosse sensors**](/integrations/lacrosse), you can find that integration [**here**](/integrations/lacrosse). - -</div> +{% endtip %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/lannouncer.markdown b/source/_integrations/lannouncer.markdown index 377f499d6bf..f099e145150 100644 --- a/source/_integrations/lannouncer.markdown +++ b/source/_integrations/lannouncer.markdown @@ -86,8 +86,8 @@ You can also request to play a configured additional soundfiles (`FILE1`, `FILE2 } ``` -<div class='note info'> +{% note %} The free version only supports one additional soundfile. -</div> +{% endnote %} To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_integrations/lawn_mower.mqtt.markdown b/source/_integrations/lawn_mower.mqtt.markdown index 315bdc45828..e145f53b1fa 100644 --- a/source/_integrations/lawn_mower.mqtt.markdown +++ b/source/_integrations/lawn_mower.mqtt.markdown @@ -195,11 +195,9 @@ unique_id: type: string {% endconfiguration %} -<div class='note warning'> - +{% important %} Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics. - -</div> +{% endimportant %} ## Example diff --git a/source/_integrations/lcn.markdown b/source/_integrations/lcn.markdown index eaf16048618..d4fc37af7af 100644 --- a/source/_integrations/lcn.markdown +++ b/source/_integrations/lcn.markdown @@ -41,13 +41,11 @@ There is currently support for the following device types within Home Assistant: - [Sensor](#sensor) - [Switch](#switch) -<div class='note'> - - The implemented platforms do not cover the whole functionality of the LCN system. - Therefore the `lcn` integration offers a variety of [events](#events), [device triggers](#device-triggers) and [service calls](#services). - They are ideal to be used in automation scripts or for the `template` platforms. - -</div> +{% note %} +The implemented platforms do not cover the whole functionality of the LCN system. +Therefore the `lcn` integration offers a variety of [events](#events), [device triggers](#device-triggers) and [service calls](#services). +They are ideal to be used in automation scripts or for the `template` platforms. +{% endnote %} ## Configuration @@ -438,11 +436,9 @@ This platform depends on the correct configuration of the module's regulators, w You need to specify at least the variable for the current temperature and a setpoint variable for the target temperature. If the control is set lockable, the regulator can be turned on/off. -<div class='note'> - +{% tip %} If you intend to leave the regulation to Home Assistant, you should consider using the [Generic Thermostat](/integrations/generic_thermostat/) in conjunction with [LCN Sensor](#sensor) and [LCN Switch](#switch). - -</div> +{% endtip %} ### Cover @@ -453,11 +449,10 @@ The configuration allows the optional definition of reverse time. This is the ti The reverse time should only be defined when using the [MOTOR_PORT](#ports) value `OUTPUTS`. For all other configuration, the reverse time has to be defined in the LCN Pro software. For the reverse time, you may choose one of the following constants: `RT70` (70ms), `RT600` (600ms), `RT1200` (1,2s). -<p class='note'> +{% important %} If you are using the module's output ports for motor control, ensure that you have configured the output ports as motor controllers in the LCN Pro software! Otherwise, the output ports are not mutually interlocked and you run the risk of destroying the motor. -</p> - +{% endimportant %} ### Light @@ -483,12 +478,10 @@ The `lcn` sensor platform allows the monitoring of the following [LCN](https://w The sensor can be used in automation scripts or in conjunction with `template` platforms. -<div class='note'> - - Ensure that the LCN module is configured properly to provide the requested value. - Otherwise, the module might show unexpected behavior or return error messages. - -</div> +{% important %} +Ensure that the LCN module is configured properly to provide the requested value. +Otherwise, the module might show unexpected behavior or return error messages. +{% endimportant %} ### Switch @@ -556,24 +549,20 @@ Alternatively, you can use the corresponding [device triggers](#device-triggers) Examples can be found in the [event section](#events). -<div class='note'> - - Only commands sent from physical buttons of a module are evaluated. The "Test command" button in the LCN-PRO software - is not evaluated and therefore cannot be used for testing purposes. - -</div> +{% note %} +Only commands sent from physical buttons of a module are evaluated. The "Test command" button in the LCN-PRO software +is not evaluated and therefore cannot be used for testing purposes. +{% endnote %} ## Events There are several functionalities of the LCN system which are not exposed as regular entities by the integration, but as events. Examples are button presses from remote controls (transmitters), transponder findings, fingerprint sensors and so called *send keys* events. -<div class='note'> - - If you find it difficult to deal with events in scripted automations, you can also use [device triggers](#device-triggers) - which offer automation design via the UI. - -</div> +{% tip %} +If you find it difficult to deal with events in scripted automations, you can also use [device triggers](#device-triggers) +which offer automation design via the UI. +{% endtip %} All events have some common attributes in their `event_data` which identify the sending LCN hardware module (e.g., the module the transponder is connected to): @@ -846,10 +835,10 @@ data: unit_of_measurement: % ``` -<div class='note'> - Ensure that the LCN module is configured properly to provide access to the defined variable. - Otherwise the module might show unexpected behaviors or return error messages. -</div> +{% important %} +Ensure that the LCN module is configured properly to provide access to the defined variable. +Otherwise the module might show unexpected behaviors or return error messages. +{% endimportant %} ### Service: `var_rel` @@ -875,10 +864,10 @@ data: unit_of_measurement: % ``` -<div class='note'> - Ensure that the LCN module is configured properly to provide access to the defined variable. - Otherwise the module might show unexpected behavior or return error messages. -</div> +{% important %} +Ensure that the LCN module is configured properly to provide access to the defined variable. +Otherwise the module might show unexpected behavior or return error messages. +{% endimportant %} ### Service: `var_reset` @@ -898,10 +887,10 @@ data: variable: var1 ``` -<div class='note'> - Ensure that the LCN module is configured properly to provide access to the defined variable. - Otherwise the module might show unexpected behavior or return error messages. -</div> +{% important %} +Ensure that the LCN module is configured properly to provide access to the defined variable. +Otherwise the module might show unexpected behavior or return error messages. +{% endimportant %} ### Service: `lock_regulator` diff --git a/source/_integrations/ld2410_ble.markdown b/source/_integrations/ld2410_ble.markdown index b72511848d7..ed5d30c648d 100644 --- a/source/_integrations/ld2410_ble.markdown +++ b/source/_integrations/ld2410_ble.markdown @@ -42,8 +42,8 @@ The following sensors are provided: ## Purchasing -<div class='note'> +{% note %} There are multiple similar versions of the board. Make sure to buy the LD2410B or LD2410C versions as these are the ones with Bluetooth and have been tested. The C variant has 2.54mm pitch pins which is the one used by Arduino type devices, whereas the B variant has half pitch pins. -</div> +{% endnote %} You can buy this module bareboard or in a devkit from [AliExpress](https://www.aliexpress.com/item/1005004351593073.html). diff --git a/source/_integrations/light.markdown b/source/_integrations/light.markdown index e79877da712..45310001d08 100644 --- a/source/_integrations/light.markdown +++ b/source/_integrations/light.markdown @@ -29,11 +29,9 @@ The field transition is optional and can be omitted. The `.default` suffix should be added to the entity identifier of each light to define a default value, e.g., for `light.ceiling_2` the `profile` field is `light.ceiling_2.default`. To define a default for all lights, the identifier `group.all_lights.default` can be used. Individual settings always supersede the `all_lights` default setting. -<div class='note'> - +{% note %} If a light entity is in the `on` state, the default profile brightness will only be applied if it is called in the service call data attribute `profile`, like any other named profile. The transition attribute will be applied for all `light.turn_on`, `light.toggle` and `light.turn_off` service calls, unless specified otherwise in the service call data. - -</div> +{% endnote %} ### Service `light.turn_on` @@ -63,11 +61,9 @@ Most lights do not support all attributes. You can check the integration documen | `flash` | yes | Tell light to flash, can be either value `short` or `long`. | | `effect` | yes | Applies an effect such as `colorloop` or `random`. | -<div class='note'> - +{% note %} In order to apply attributes to an entity, you will need to add `data:` to the configuration. See example below - -</div> +{% endnote %} ```yaml # Example configuration.yaml entry @@ -101,11 +97,9 @@ automation: brightness: 130 rgb_color: [255,0,0] ``` -<div class='note'> - +{% note %} If no data is sent, and a default profile exists, the default profile will be applied. - -</div> +{% endnote %} ### Service `light.turn_off` diff --git a/source/_integrations/light.mqtt.markdown b/source/_integrations/light.mqtt.markdown index 604a68376dc..9aee3d634ca 100644 --- a/source/_integrations/light.mqtt.markdown +++ b/source/_integrations/light.mqtt.markdown @@ -397,15 +397,13 @@ xy_value_template: type: template {% endconfiguration %} -<div class='note warning'> +{% important %} +Make sure that your topics match exactly. `some-topic/` and `some-topic` are different topics. +{% endimportant %} - Make sure that your topics match exactly. `some-topic/` and `some-topic` are different topics. - -</div> - -<div class='note warning'> - XY and RGB can not be used at the same time. If both are provided, XY overrides RGB. -</div> +{% note %} +XY and RGB can not be used at the same time. If both are provided, XY overrides RGB. +{% endnote %} ## Default schema - Examples @@ -724,17 +722,13 @@ white_scale: default: 255 {% endconfiguration %} -<div class='note warning'> +{% important %} +Make sure that your topics match exact. `some-topic/` and `some-topic` are different topics. +{% endimportant %} - Make sure that your topics match exact. `some-topic/` and `some-topic` are different topics. - -</div> - -<div class='note warning'> - - RGB, XY and HSV can not be used at the same time in `state_topic` messages. Make sure that only one of the color models is in the "color" section of the state MQTT payload. - -</div> +{% note %} +RGB, XY and HSV can not be used at the same time in `state_topic` messages. Make sure that only one of the color models is in the "color" section of the state MQTT payload. +{% endnote %} ## JSON schema - Examples @@ -1078,11 +1072,9 @@ unique_id: type: string {% endconfiguration %} -<div class='note warning'> - - Make sure that your topics match exact. `some-topic/` and `some-topic` are different topics. - -</div> +{% important %} +Make sure that your topics match exact. `some-topic/` and `some-topic` are different topics. +{% endimportant %} ## Template schema - Examples diff --git a/source/_integrations/lirc.markdown b/source/_integrations/lirc.markdown index 12bec615c0e..35b89da5424 100644 --- a/source/_integrations/lirc.markdown +++ b/source/_integrations/lirc.markdown @@ -21,7 +21,7 @@ To allow Home Assistant to talk to your IR receiver, you need to first make sure sudo apt-get install lirc liblircclient-dev ``` -<div class='note'> +{% note %} If you are configuring on a Raspberry Pi, there are excellent instructions with GPIO schematics and driver configurations [here](http://alexba.in/blog/2013/01/06/setting-up-lirc-on-the-raspberrypi/). Take notice, the instructions in this blog are valid for Raspian Jesse where lirc 0.9.0 was included in the Debian package. In Raspian Stretch lirc 0.9.4 is included in the Debian package. The configuration is slightly different : @@ -32,7 +32,7 @@ The configuration is slightly different : For more information have a look at `/usr/share/doc/lirc/README.Debian.gz` where the update process is explained when you have updated from jessie to stretch. -</div> +{% endnote %} ## Configuring LIRC diff --git a/source/_integrations/lock.mqtt.markdown b/source/_integrations/lock.mqtt.markdown index 862ee9531b5..48c20b76593 100644 --- a/source/_integrations/lock.mqtt.markdown +++ b/source/_integrations/lock.mqtt.markdown @@ -246,11 +246,9 @@ value_template: type: template {% endconfiguration %} -<div class='note warning'> - +{% important %} Make sure that your topics match exactly. `some-topic/` and `some-topic` are different topics. - -</div> +{% endimportant %} ## Examples diff --git a/source/_integrations/logbook.markdown b/source/_integrations/logbook.markdown index 9a35e87bf2b..e283e8bc151 100644 --- a/source/_integrations/logbook.markdown +++ b/source/_integrations/logbook.markdown @@ -172,14 +172,10 @@ script: ``` -<div class="note warning"> - +{% important %} When calling the `logbook.log` service without a `domain` or `entity_id`, entries will be added with the `logbook` domain. Ensure that the `logbook` domain is not filtered away if you want these entries to appear in your logbook. +{% endimportant %} -</div> - -<div class='note'> - +{% note %} Sensor entities that have been assigned units (i.e., have a `unit_of_measurement` attribute) are assumed to change frequently and those sensors are automatically excluded from the logbook. - -</div> +{% endnote %} diff --git a/source/_integrations/luci.markdown b/source/_integrations/luci.markdown index 822a3fb5e3e..730566d146a 100644 --- a/source/_integrations/luci.markdown +++ b/source/_integrations/luci.markdown @@ -62,9 +62,7 @@ See the [device tracker integration page](/integrations/device_tracker/) for ins This device tracker provides a number of additional attributes for each tracked device (if it is at home): `flags`, `ip`, `device`, and `host`. The first three attributes are taken from the ARP table returned by the luci RPC. The `host` attribute is taken from the platform configuration and can be used to distinguish in which router a device is logged in, if you are using multiple OpenWrt routers. -<div class='note warning'> - +{% note %} Some installations have [a small bug](https://github.com/openwrt/luci/issues/576). The timeout for luci RPC calls is not set and this makes the call fail. If you want to locally fix your OpenWrt installation, you can apply the change manually to `/usr/lib/lua/luci/controller/rpc.lua`, or simply set a fixed timeout. The default is 3600. - -</div> +{% endnote %} diff --git a/source/_integrations/lutron.markdown b/source/_integrations/lutron.markdown index 91fde89568f..5d5d7874025 100644 --- a/source/_integrations/lutron.markdown +++ b/source/_integrations/lutron.markdown @@ -39,17 +39,13 @@ To use Lutron RadioRA 2 devices in your installation, you'll need to first creat {% include integrations/config_flow.md %} -<div class='note'> - +{% tip %} It is recommended to assign a static IP address to your main repeater. This ensures that it won't change IP addresses, so you won't have to change the `host` if it reboots and comes up with a different IP address. +{% endtip %} -</div> - -<div class='note'> - +{% important %} If you are using RadioRA2 software version 12 or later, the default `lutron` user with password `integration` is not configured by default. To configure a new telnet user, go to **Settings** > **Integration** in your project and add a new telnet login. Once configured, use the transfer tab to push your changes to the RadioRA2 main repeater(s). - -</div> +{% endimportant %} ## Keypad buttons diff --git a/source/_integrations/lutron_caseta.markdown b/source/_integrations/lutron_caseta.markdown index 4ca57f96e97..73a52dc2687 100644 --- a/source/_integrations/lutron_caseta.markdown +++ b/source/_integrations/lutron_caseta.markdown @@ -80,11 +80,9 @@ lutron_caseta: ca_certs: caseta-bridge.crt ``` -<div class='note'> - +{% note %} Note that multiple hubs can be specified by using multiple configuration blocks, but each of them requires its own `keyfile`, `certfile`, and `ca_certs` to be generated and specified. - -</div> +{% endnote %} {% configuration %} host: @@ -105,13 +103,11 @@ Note that multiple hubs can be specified by using multiple configuration blocks, type: string {% endconfiguration %} -<div class='note'> - +{% tip %} It is recommended to assign a static IP address to your Lutron Smart Bridge. This ensures that it won't change IP address, so you won't have to change the `host` if it reboots and comes up with a different IP address. <br> Use a DHCP reservation on your router to reserve the address or in the PRO model of the Smart Bridge, set the IP address under Network Settings in the Advanced / Integration menu in the mobile app. - -</div> +{% endtip %} To get Lutron Caseta roller, honeycomb shades, wood blinds, lights, scene and switch working with Home Assistant, first follow the instructions for the general Lutron Caseta integration above. diff --git a/source/_integrations/matrix.markdown b/source/_integrations/matrix.markdown index a94c3500060..284debed43b 100644 --- a/source/_integrations/matrix.markdown +++ b/source/_integrations/matrix.markdown @@ -89,11 +89,9 @@ commands: default: empty {% endconfiguration %} -<div class="note"> - +{% warning %} In order to prevent infinite loops when reacting to commands, you have to use a separate account for the Matrix integration. - -</div> +{% endwarning %} ### Event data @@ -222,8 +220,7 @@ action: - /path/to/picture.jpg ``` -<div class='note'> - +{% important %} If you need to include a file from an external folder in your notifications, you will have to [list the source folder as allowed](/integrations/homeassistant/#allowlist_external_dirs). ```yaml @@ -233,5 +230,4 @@ homeassistant: allowlist_external_dirs: - /tmp ``` - -</div> +{% endimportant %} diff --git a/source/_integrations/matter.markdown b/source/_integrations/matter.markdown index 7ba89330df1..d3a25706154 100644 --- a/source/_integrations/matter.markdown +++ b/source/_integrations/matter.markdown @@ -42,9 +42,9 @@ The Matter integration allows you to control Matter devices on your local Wi-Fi For communicating with Matter devices, the Home Assistant integration runs its own "Matter controller" as add-on. This Matter Server add-on runs the controller software as a separate process and connects your Matter network (called Fabric in technical terms) and Home Assistant. The Home Assistant Matter integration connects to this server via a WebSocket connection. -<div class='note warning'> +{% warning %} The integration is marked BETA: Both the Matter standard itself and its implementation within Home Assistant are in an early stage. You may run into compatibility issues and/or other bugs. -</div> +{% endwarning %} # Introduction - What is Matter? @@ -80,9 +80,9 @@ Don't assume Matter support when you see a Thread logo on a device. Always look Most (if not all) Matter-compliant devices have a Bluetooth chip onboard to ease {% term commissioning %}. Bluetooth is not used to control but to pair a device after unboxing or after factory resetting. The Home Assistant controller uses the Home Assistant Companion app for {% term commissioning %}. During commissioning, you need to bring your phone close to the device. The controller then sends your network credentials to your device over Bluetooth. Once that is done, the device communicates over its native interface: Wi-Fi or Thread. -<div class='note'> +{% note %} Although your Home Assistant server might have a Bluetooth adapter on board that the controller can use to {% term commission %} devices, Home Assistant does not utilize that adapter. Mainly to prevent issues with the built-in Bluetooth integration but also because it is easier to bring your mobile devices close to the Matter device than bringing the device near your server. -</div> +{% endnote %} ## Multi fabric: join to multiple controllers diff --git a/source/_integrations/media_extractor.markdown b/source/_integrations/media_extractor.markdown index 2c4c6e745fe..83551dc7b62 100644 --- a/source/_integrations/media_extractor.markdown +++ b/source/_integrations/media_extractor.markdown @@ -18,9 +18,9 @@ ha_config_flow: true The Media extractor {% term integration %} gets a stream URL and sends it to a media player entity. This integration can extract entity specific streams if configured accordingly. -<div class='note'> +{% note %} Media extractor doesn't transcode streams, it just tries to find a stream that matches the requested query. -</div> +{% endnote %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/media_source.markdown b/source/_integrations/media_source.markdown index fa6260eabb3..bf532adeebf 100644 --- a/source/_integrations/media_source.markdown +++ b/source/_integrations/media_source.markdown @@ -62,13 +62,10 @@ homeassistant: recording: /mnt/recordings ``` -<div class='note'> - - If you want to use media from a network storage, the network storage must be connected first. Refer to [these instructions on how to connect network storage](/common-tasks/os/#network-storage). - - The media from the network storage is then automatically added to the local media browser. - -</div> +{% tip %} +If you want to use media from a network storage, the network storage must be connected first. Refer to [these instructions on how to connect network storage](/common-tasks/os/#network-storage). +The media from the network storage is then automatically added to the local media browser. +{% endtip %} ## Playing media from a media source @@ -76,7 +73,7 @@ To play media from a media source via a service call, use the uri scheme `media-source://media_source/<media_dir>/<path>`. Default `media_dir` is `local`. -<div class="note"> +{% note %} Web browsers and Google Cast media players have very limited video container and codec support. The media source integration does not do any transcoding of media, meaning media files must be natively supported by your media player or @@ -86,7 +83,7 @@ If a video file is not supported by your media player or web browser it will fail to play. Please check the documentation of your media player or web browser for lists of supported video formats. -</div> +{% endnote %} Example: diff --git a/source/_integrations/met_eireann.markdown b/source/_integrations/met_eireann.markdown index fe28adcb9ae..29c317692d7 100644 --- a/source/_integrations/met_eireann.markdown +++ b/source/_integrations/met_eireann.markdown @@ -16,11 +16,9 @@ ha_integration_type: integration The Met Éireann integration uses the [Met Éireann](https://met.ie) (The Irish Meteorological Service) Public Weather Forecast API to provide current and forecasted weather data for a given location. This integration is in no way affiliated with or endorsed by Met Éireann. -<div class="note"> - +{% note %} The Met Éireann API will only provide data for Ireland, the UK and a small part of northern France. For specific coverage, please see the Notes on API document available [here](https://data.gov.ie/dataset/met-eireann-weather-forecast-api/resource/027da6d5-d819-48d1-9b16-331dba169bd1). - -</div> +{% endnote %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/meteo_france.markdown b/source/_integrations/meteo_france.markdown index 7a3ea544391..ef286f0ae59 100644 --- a/source/_integrations/meteo_france.markdown +++ b/source/_integrations/meteo_france.markdown @@ -61,13 +61,13 @@ To enable an entity disabled by default, go in **Settings** -> **Devices & Servi ### About `next_rain` condition sensor -<div class='note warning'> +{% note %} - The 1 hour rain forecast is supported for more than 75 % of metropolitan France.<br/> +The 1 hour rain forecast is supported for more than 75 % of metropolitan France.<br/> - ![Rain coverage map](/images/integrations/meteo_france/carte-couverture-du-service.png) +![Rain coverage map](/images/integrations/meteo_france/carte-couverture-du-service.png) -</div> +{% endnote %} The attributes allow to have a forecast of the rain type by 5 to 10 minutes intervals: @@ -99,9 +99,9 @@ forecast_time_ref: '2020-08-20T19:25:00+00:00' ### About `weather_alert` sensor -<div class='note warning'> - The weather alert is available for the metropolitan France and Andorre. -</div> +{% note %} +The weather alert is available for the metropolitan France and Andorre. +{% endnote %} The `weather_alert` sensor state give the current weather alert status for the department linked to the city. Only one entity by department is created. diff --git a/source/_integrations/meteoalarm.markdown b/source/_integrations/meteoalarm.markdown index 1f98c75c204..817d518aa39 100644 --- a/source/_integrations/meteoalarm.markdown +++ b/source/_integrations/meteoalarm.markdown @@ -104,6 +104,6 @@ automation: {% endraw %} -<div class='note warning'> +{% note %} This integration is not affiliated with MeteoAlarm and retrieves data from the website by using the XML feeds. Use it at your own risk. -</div> +{% endnote %} diff --git a/source/_integrations/microsoft.markdown b/source/_integrations/microsoft.markdown index e8ac566daf2..7fe4206ca97 100644 --- a/source/_integrations/microsoft.markdown +++ b/source/_integrations/microsoft.markdown @@ -74,19 +74,15 @@ region: default: "`eastus`" {% endconfiguration %} -<div class='note'> - +{% note %} Not all Azure regions support high-quality neural voices. Use [this overview](https://learn.microsoft.com/azure/cognitive-services/speech-service/regions) to determine the availability of standard and neural voices by region/endpoint. New users ([any newly created Azure Speech resource after August 31st, 2021](https://learn.microsoft.com/azure/cognitive-services/speech-service/text-to-speech#more-about-neural-text-to-speech-features)) can only use neural voices. Existing resources can continue using standard voices through August 31st, 2024. +{% endnote %} -</div> - -<div class='note'> - +{% important %} If you set the language to anything other than the default `en-us`, you will need to specify a matching voice type as well. - -</div> +{% endimportant %} ## Full configuration example diff --git a/source/_integrations/microsoft_face_detect.markdown b/source/_integrations/microsoft_face_detect.markdown index eccd546a6df..c4c4963e5e8 100644 --- a/source/_integrations/microsoft_face_detect.markdown +++ b/source/_integrations/microsoft_face_detect.markdown @@ -23,11 +23,9 @@ how to setup the API key. For using the result inside an automation rule, take a look at the [Image Processing integration](/integrations/image_processing/) page. -<div class='note'> - +{% important %} The free version of the Microsoft Face identify API limits the number of requests possible per month. Therefore, it is strongly recommended that you limit the `scan_interval` when setting up an instance of this entity as detailed on the main [Image Processing integration](/integrations/image_processing/) page. - -</div> +{% endimportant %} ### Configuration diff --git a/source/_integrations/microsoft_face_identify.markdown b/source/_integrations/microsoft_face_identify.markdown index 87cfb45fbe7..e344c07eab0 100644 --- a/source/_integrations/microsoft_face_identify.markdown +++ b/source/_integrations/microsoft_face_identify.markdown @@ -23,11 +23,9 @@ how to setup the API key. For using the result inside an automation rule, take a look at the [Image Processing integration](/integrations/image_processing/) page. -<div class='note'> - +{% important %} The free version of the Microsoft Face identify API limits the number of requests possible per month. Therefore, it is strongly recommended that you limit the `scan_interval` when setting up an instance of this entity as detailed on the main [Image Processing integration](/integrations/image_processing/) page. - -</div> +{% endimportant %} ### Configuration diff --git a/source/_integrations/minecraft_server.markdown b/source/_integrations/minecraft_server.markdown index 20d4a2d30cd..51636ae5569 100644 --- a/source/_integrations/minecraft_server.markdown +++ b/source/_integrations/minecraft_server.markdown @@ -20,11 +20,9 @@ ha_integration_type: integration [Minecraft](https://www.minecraft.net/en-us) is a sandbox video game developed by Mojang Studios. Minecraft servers allow players to play the game online or via a local area network with other players. The **Minecraft Server** integration lets you retrieve information from a Minecraft server within Home Assistant. Both **Java Edition** and **Bedrock Edition** servers are supported. -<div class='note'> - +{% important %} Minecraft Java Edition servers must be version 1.7 or newer, since older versions don't expose any information. - -</div> +{% endimportant %} {% include integrations/config_flow.md %} @@ -34,11 +32,9 @@ During setup you will be prompted to enter the **name** and the **address** of t The **server name** can be chosen freely. -<div class='note'> - +{% note %} Default is `Minecraft Server`. - -</div> +{% endnote %} ### Server address @@ -48,13 +44,11 @@ The **server address** is a combination of the hostname and the port, where the - **Hostname**: `mc.hypixel.net:25565` or `mc.hypixel.net` - **IP address**: `192.168.0.123:19132` or `192.168.0.123` -<div class='note'> - +{% note %} Default is `localhost:25565`. Bedrock Edition servers don't support SRV records. - -</div> +{% endnote %} ## Binary sensors @@ -80,8 +74,6 @@ For Bedrock Edition servers following sensors are provided additionally: - Game mode - Map name -<div class='note'> - +{% note %} Player names are only available on Java Edition servers. Depending on the server, the player names list may not be shown completely. Some servers and plugins limit or completely hide this list or even replace the player names with fake ones to show some custom messages there. - -</div> +{% endnote %} diff --git a/source/_integrations/modbus.markdown b/source/_integrations/modbus.markdown index 7beb76bd1d1..56b3ff74dda 100644 --- a/source/_integrations/modbus.markdown +++ b/source/_integrations/modbus.markdown @@ -1392,11 +1392,9 @@ sensors: type: string {% endconfiguration %} -<div class='note'> - +{% note %} If you specify scale or offset as floating point values, double precision floating point arithmetic will be used to calculate final value. This can cause loss of precision for values that are larger than 2^53. - -</div> +{% endnote %} ### Example: sensor configuration diff --git a/source/_integrations/modern_forms.markdown b/source/_integrations/modern_forms.markdown index 162d4080aa0..8974ce1a6ac 100644 --- a/source/_integrations/modern_forms.markdown +++ b/source/_integrations/modern_forms.markdown @@ -27,11 +27,9 @@ ha_integration_type: integration {% include integrations/config_flow.md %} -<div class='note'> - +{% note %} If the Modern Forms fan does not have a light unit installed, then the Light entities and services will not show up. - -</div> +{% endnote %} ## Fans @@ -88,8 +86,6 @@ This service will set a sleep timer for the light. When the sleep timer is expir | ---------------------- | -------- | -------------------------------------------------- | | `sleep_time` | yes | The amount of time in minutes to set the sleep timer for. This is time in minutes from 1 to 1440 (1 day).| -<div class='note'> - +{% note %} Modern Forms Fans use NTP to pool.ntp.org in order to set its internal clock and check of sleep timers have expired. Sleep timers will only work if the Modern Forms Fans have internet NTP access. You can block off cloud access for the fan and only leave NTP (UDP port 123) outbound working for the sleep timers. - -</div> +{% endnote %} diff --git a/source/_integrations/mqtt.markdown b/source/_integrations/mqtt.markdown index dc038056424..df9d2de9035 100644 --- a/source/_integrations/mqtt.markdown +++ b/source/_integrations/mqtt.markdown @@ -125,12 +125,10 @@ While public MQTT brokers are available, the easiest and most private option is The recommended setup method is to use the [Mosquitto MQTT broker add-on](https://github.com/home-assistant/hassio-addons/blob/master/mosquitto/DOCS.md). -<div class='note warning'> - +{% warning %} Neither ActiveMQ MQTT broker nor the RabbitMQ MQTT Plugin are supported, use a known working broker like Mosquitto instead. There are [at least two](https://issues.apache.org/jira/browse/AMQ-6360) [issues](https://issues.apache.org/jira/browse/AMQ-6575) with the ActiveMQ MQTT broker which break MQTT message retention. - -</div> +{% endwarning %} ## Broker configuration @@ -142,24 +140,17 @@ Add the MQTT integration, then provide your broker's hostname (or IP address) an 2. Select the MQTT integration. 3. Select **Configure**, then **Re-configure MQTT**. -<div class='note'> -<p> - +{% important %} If you experience an error message like `Failed to connect due to exception: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed`, then turn on `Advanced options` and set [Broker certificate validation](/integrations/mqtt/#broker-certificate-validation) to `Auto`. - - -</p> -</div> +{% endimportant %} ### Advanced broker configuration Advanced broker configuration options include setting a custom client ID, setting a client certificate and key for authentication, and enabling TLS validation of the broker's certificate for secure connection. To access the advanced settings, open the MQTT broker settings, switch on `Advanced options` and click `Next`. The advanced options will be shown by default if there are advanced settings active already. -<div class='note info'> - +{% tip %} Advanced broker options are accessible only when advanced mode is enabled (see user settings), or when advanced broker settings are configured already. - -</div> +{% endtip %} #### Alternative client ID @@ -187,11 +178,9 @@ With a secure broker connection it is possible to use a client certificate for a You can select `websockets` as transport method if your MQTT broker supports it. When you select `websockets` and click `NEXT`, you will be able to add a WebSockets path (default = `/`) and WebSockets headers (optional). The target WebSockets URI: `ws://{broker}:{port}{WebSockets path}` is built with `broker`, `port` and `ws_path` (WebSocket path) settings. To configure the WebSocket's headers supply a valid JSON dictionary string. E.g. `{ "Authorization": "token" , "x-header": "some header"}`. The default transport method is `tcp`. The WebSockets transport can be secured using TLS and optionally using user credentials or a client certificate. -<div class='note'> - +{% note %} A configured client certificate will only be active if broker certificate validation is enabled. - -</div> +{% endnote %} ## Configure MQTT options @@ -284,11 +273,9 @@ The discovery of MQTT devices will enable one to use MQTT devices with only mini MQTT discovery is enabled by default, but can be disabled. The prefix for the discovery topic (default `homeassistant`) can be changed. See the [MQTT Options sections](#configure-mqtt-options) -<div class='note info'> - +{% note %} Documentation on the MQTT components that support MQTT discovery [can be found here](/integrations/mqtt/#configuration-via-mqtt-discovery). - -</div> +{% endnote %} ### Discovery messages @@ -650,15 +637,13 @@ This can also be done by publishing `retained` messages. As soon as a config is the setup will subscribe any state topics. If a retained message is available at a state topic, this message will be replayed so that the state can be restored for this topic. -<div class='note warning'> - +{% warning %} A disadvantage of using retained messages is that these messages retain at the broker, even when the device or service stops working. They are retained even after the system or broker has been restarted. Retained messages can create ghost entities that keep coming back. <br><br> Especially when you have many entities, (unneeded) discovery messages can cause excessive system load. For this reason, use discovery messages with caution. - -</div> +{% endwarning %} ### Using Availability topics @@ -865,9 +850,9 @@ Setting up a sensor with multiple measurement values requires multiple consecuti The sensor [`identifiers` or `connections`](/integrations/sensor.mqtt/#device) option allows to set up multiple entities that share the same device. -<p class='note info'> +{% note %} If a device configuration is shared, then it is not needed to add all device details to the other entity configs. It is enough to add shared identifiers or connections to the device mapping for the other entity config payloads. -</p> +{% endnote %} A common state payload that can be parsed with the `value_template` in the sensor configs: @@ -1034,11 +1019,9 @@ mqtt: If you have a large number of manually configured items, you might want to consider [splitting up the configuration](/docs/configuration/splitting_configuration/). -<div class='note info'> - +{% note %} Documentation on the MQTT components that support YAML [can be found here](/integrations/mqtt/#configuration-via-yaml). - -</div> +{% endnote %} ## Using Templates @@ -1130,14 +1113,9 @@ The MQTT integration will register the service `mqtt.publish` which allows publi | `retain` | yes | If message should have the retain flag set. (default: false) | -<div class='note'> -<p> - +{% important %} You must include either `topic` or `topic_template`, but not both. If providing a payload, you need to include either `payload` or `payload_template`, but not both. - - -</p> -</div> +{% endimportant %} ```yaml diff --git a/source/_integrations/mysensors.markdown b/source/_integrations/mysensors.markdown index b1c36cbe4ab..ab47931703f 100644 --- a/source/_integrations/mysensors.markdown +++ b/source/_integrations/mysensors.markdown @@ -44,9 +44,9 @@ In addition to the serial device you also need to enter the baud rate. If you are using the MQTT gateway, you will need to enter topic prefixes for input and output. These need to be swapped with the settings of the gateway. I.e. the input topic for Home Assistant needs to be the output (publish) topic of the gateway. -<div class='note'> +{% note %} The MQTT gateway requires MySensors version 2.0+ and only the MQTT client gateway is supported. -</div> +{% endnote %} ### Ethernet gateway diff --git a/source/_integrations/mystrom.markdown b/source/_integrations/mystrom.markdown index 6410c2da9df..68a59258699 100644 --- a/source/_integrations/mystrom.markdown +++ b/source/_integrations/mystrom.markdown @@ -93,6 +93,6 @@ binary_sensor: - platform: mystrom ``` -<div class='note'> +{% important %} The firmware version 2.56 doesn't support TLS/SSL. This means that you are only able to use the WiFi Buttons if you are using plain-text communication between Home Assistant and the clients/entities. -</div> +{% endimportant %} diff --git a/source/_integrations/nad.markdown b/source/_integrations/nad.markdown index 3e7187cd8a9..d49da6d9161 100644 --- a/source/_integrations/nad.markdown +++ b/source/_integrations/nad.markdown @@ -95,13 +95,11 @@ volume_step: The `min_volume` and `max_volume` options are there to protect you against misclicks on the slider so you will not blow up your speakers when you go from -92dB to +20dB. You can still force higher or lower volumes than the values set by using the plus and minus buttons. -<div class='note warning'> - +{% important %} On Linux the user running Home Assistant needs `dialout` permissions to access the serial port. This can be added to the user by doing `sudo usermod -a -G dialout <username>`. Be aware that the user might need to logout and logon again to activate these permissions. - -</div> +{% endimportant %} An example of a full configuration: diff --git a/source/_integrations/namecheapdns.markdown b/source/_integrations/namecheapdns.markdown index d129c3cd4b3..19a8f3cb10d 100644 --- a/source/_integrations/namecheapdns.markdown +++ b/source/_integrations/namecheapdns.markdown @@ -14,9 +14,9 @@ related: With the `namecheapdns` {% term integration %} you can automatically update your dynamic DNS entry hosted by Namecheap's [FreeDNS](https://www.namecheap.com/store/domains/freedns/) service. -<div class='note warning'> +{% important %} Namecheap only supports updating IPv4 addresses. -</div> +{% endimportant %} ## Configuration diff --git a/source/_integrations/neato.markdown b/source/_integrations/neato.markdown index 8afdb03c705..35d8defa100 100644 --- a/source/_integrations/neato.markdown +++ b/source/_integrations/neato.markdown @@ -36,7 +36,7 @@ There is support for the following platform types within Home Assistant: Visit [the Neato Developer Network](https://developers.neatorobotics.com/applications) and create a new app. -<div class='note'> +{% important %} You will have to enter a name, a description, and the redirect URI: @@ -47,7 +47,7 @@ You will have to enter a name, a description, and the redirect URI: - **Privacy Policy URL**: leave blank You have to select all three scopes (`public_profile`, `control_robots` and `maps`). -</div> +{% endimportant %} {% details "I have manually disabled My Home Assistant" %} @@ -69,11 +69,9 @@ instance does not need to be exposed to the Internet. The integration configuration will ask for the *Client ID* and *Client Secret* created above. See [Application Credentials](/integrations/application_credentials) for more details. -<div class='note'> - +{% note %} After the update to firmware 4.0 (which adds cleaning maps) there is also support for displaying the maps of the Botvac D3 Connected and Botvac D5 Connected robots. More information on how to update can be found [here](https://support.neatorobotics.com/hc/en-us/articles/115004320694-Software-Update-4-0-for-Neato-Botvac-Connected-D3-D5-). - -</div> +{% endnote %} ## Button @@ -105,12 +103,10 @@ And a specific Platform Service: Starts a custom cleaning of your house. You can set the various options like in the mobile application (mode, map usage, navigation mode, zone). -<div class='note'> - +{% note %} Not all Botvac models support all the attributes. Only the Neato Botvac D7 supports the `zone` attribute. Some information about the capabilities might be found on the [Neato Developer Portal](https://developers.neatorobotics.com/api/robot-remote-protocol/housecleaning). - -</div> +{% endnote %} | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/source/_integrations/nest.markdown b/source/_integrations/nest.markdown index 2568f640bdb..2abcf8fbc27 100644 --- a/source/_integrations/nest.markdown +++ b/source/_integrations/nest.markdown @@ -36,17 +36,13 @@ Cameras and doorbells use [Automation and device triggers](#automation-and-devic You are in control of the information and capabilities exposed to Home Assistant. You can authorize a single device, multiple devices, or different levels of functionality such as motion events, live streams, for any particular device. The integration is flexible enough to adapt based on what you allow. -<div class='note'> - +{% caution %} The Nest Smart Device Management (SDM) API **requires a US$5 fee**. Before buying, make sure your device is [supported](https://developers.google.com/nest/device-access/supported-devices). +{% endcaution %} -</div> - -<div class='note'> - +{% note %} The Google Nest integration uses a Cloud Pub/Sub subscription with a 15-minute retention period by default. The Google Cloud Pub/Sub billing changes, effective June 30, 2024, do not apply. The billing changes only apply to subscriptions with a 24-hour retention period. See the [Pub/Sub console](https://console.cloud.google.com/cloudpubsub/subscription/list) to view your subscriptions if you previously created one manually. - -</div> +{% endnote %} <lite-youtube videoid="RwZmQ7QfhsM" videotitle="Finally! A WORKING NEST Integration with Home Assistant using Oauth!" posterquality="maxresdefault"></lite-youtube> @@ -165,9 +161,9 @@ Now that you have authentication configured, you will create a Nest Device Acces 2. Check the box to "Accept the Terms of Service" and click **Continue to Payment** where you need to pay a fee (currently US$5). ![Screenshot of accepting terms](/images/integrations/nest/accept_terms.png) - <div class='note'> - It is currently not possible to share/be invited to a home with a G-Suite account. Make sure that you pay the fee with an account that has access to your devices. - </div> +{% note %} +It is currently not possible to share/be invited to a home with a G-Suite account. Make sure that you pay the fee with an account that has access to your devices. +{% endnote %} 3. Now the [Device Access Console](https://console.nest.google.com/device-access/project-list) should be visible. Click on **Create project**. @@ -228,13 +224,13 @@ All Google Nest Thermostat models are exposed as a `climate` entity that use the Given a thermostat named `Upstairs` then the climate entity is created with a name such as `climate.upstairs` -<div class='note'> +{% note %} This feature is enabled by the following permissions: - *Allow Home Assistant to access and control your thermostat* -</div> +{% endnote %} ## Sensor @@ -245,16 +241,16 @@ All Google Nest Thermostat models have traits exposed from the SDM API. The init Given a thermostat named `Upstairs` then sensors are created with names such as `sensor.upstairs_temperature` or `sensor.upstairs_humidity`. -<div class='note'> +{% note %} This feature is enabled by the following permissions: - *Allow Home Assistant to access and control your thermostat* -</div> -<div class='note'> +{% endnote %} +{% note %} Additional Nest Temperature Sensors are not supported by the SDM API. The Temperature reported by the API will be pulled from whichever device is currently configured as the Active Sensor, which can be adjusted via manual selection or the schedule offered in the Nest App. -</div> +{% endnote %} ## Camera @@ -264,14 +260,14 @@ Home Assistant supports all SDM API features. However, every Camera or Doorbell - **RTSP**: These devices have an HLS stream served by the Home Assistant Core. These cameras support server-side `camera` services like stream recording or image preview. See [Low Latency HLS](/integrations/stream#ll-hls) as a great option to enable to reduce stream latency. - **WebRTC**: These devices support direct browser to camera communication and a super low latency stream. A [Picture Glance Card](/dashboards/picture-glance/) can show the live stream in the grid with the *Camera View* set to `live` (not recommended for battery-powered cameras). `camera` services like stream recording are *not supported*. -<div class='note'> +{% note %} This feature is enabled by the following permissions: - *Allow Home Assistant to see and display your camera’s livestream* - *Other permissions in the Nest or Google Home apps*. -</div> +{% endnote %} All cameras have motion and person triggers, however only some support capturing snapshots for events. The table below summarizes the [Supported SDM API features](https://developers.google.com/nest/device-access/supported-devices) for each device. @@ -297,7 +293,7 @@ The Nest integration provides [device triggers](/docs/automation/trigger/#device ![Screenshot Device Triggers](/images/integrations/nest/device_triggers.png) -{% details "Example Device Trigger / Event payload %} +{% details "Example Device Trigger / Event payload" %} This is an example of what the `nest_event` payload looks like for a Device Trigger that you can use to power automations. @@ -322,14 +318,14 @@ This is an example of what the `nest_event` payload looks like for a Device Trig Continue reading below to *Media Source Attachments* to see how to use media with notification actions. -<div class='note'> +{% note %} This feature is enabled by the following permissions: - *Allow Home Assistant to know when there's a camera event* - *Allow Home Assistant to know when there's a doorbell event* - *Other permissions and notification settings in the Nest or Google Home apps*. -</div> +{% endnote %} ### Google Home App Notification Settings @@ -378,7 +374,7 @@ The Media Source APIs can be used in [Companion App Attachments](https://compani You can use the event payload fields `device_id` and `event_id` in an [automation](/getting-started/automation/) to send a notification from an [actions](/getting-started/automation-action/) as shown in the examples below. -{% details "Example Action: Clip Preview (mp4) attachment for iOS %} +{% details "Example Action: Clip Preview (mp4) attachment for iOS" %} Example for cameras that support Clip Previews used with iOS which can render video in notifications. @@ -401,7 +397,7 @@ mode: single {% enddetails %} -{% details "Example Action: Clip Preview thumbnail (gif) for Android or iOS %} +{% details "Example Action: Clip Preview thumbnail (gif) for Android or iOS" %} Example for cameras that support Clip Previews, but transcoded to an animated gif (Android does not render video notifications). @@ -421,7 +417,7 @@ data: {% enddetails %} -{% details "Example Action: Snapshot (jpg) attachment for Android or iOS %} +{% details "Example Action: Snapshot (jpg) attachment for Android or iOS" %} Example for cameras that support Snapshot (jpg) on either Android or iOS. @@ -441,7 +437,7 @@ data: {% enddetails %} -<div class='note'> +{% note %} This feature is enabled by the following permissions: @@ -449,13 +445,13 @@ This feature is enabled by the following permissions: - *Based on the events you've selected to share from this device, allow Home Assistant to access camera snapshots* - *Other permissions in the Nest or Google Home apps*. -</div> +{% endnote %} ## Deprecated App Auth Credentials To improve security and reduce phishing risk Google has [deprecated](https://developers.googleblog.com/2022/02/making-oauth-flows-safer.html) a previous authentication method used by Home Assistant. **This requires action by you to resolve** if you previously configured *Nest* using *App Auth*. -{% details "Reconfigure the integration %} +{% details "Reconfigure the integration" %} 1. Make sure to upgrade to the latest version of Home Assistant. 2. Go to **{% my integrations title="Settings > Devices & Services" %}**. diff --git a/source/_integrations/netatmo.markdown b/source/_integrations/netatmo.markdown index d7d58a462e8..c2ae41783cf 100644 --- a/source/_integrations/netatmo.markdown +++ b/source/_integrations/netatmo.markdown @@ -187,12 +187,10 @@ Service to manually register and unregister the webhook. The Netatmo backend sends instant events to Home Assistant by using webhooks which unlocks improved responsiveness of most devices with the exception of [Netatmo Smart Home Weather Station](https://www.netatmo.com/smart-weather-station), [Netatmo Smart Indoor Air Quality Monitor](https://www.netatmo.com/smart-indoor-air-quality-monitor) or [Netatmo Public Weather Stations](https://weathermap.netatmo.com/). -<div class='note warning'> - +{% warning %} Netatmo webhook events have known issues with Home Assistant Cloud Link. It is therefore recommended to use [an individual development account](#development--testing-with-your-own-client-id). - -</div> +{% endwarning %} To be able to receive events from [Netatmo](https://www.netatmo.com/), your Home Assistant instance needs to be accessible from the web over port `443`. To achieve this you can either use your Nabu Casa account or for example Duck DNS ([Home Assistant instructions](/addons/duckdns/)). You also need to have the external URL configured in the Home Assistant [configuration](/integrations/homeassistant/#allowlist_external_urls). @@ -302,11 +300,9 @@ to declare a new application in the [Netatmo Developer Page](https://dev.netatmo Sign in using your username and password from your regular Netatmo account. -<div class='note warning'> - +{% important %} In your Netatmo Application configuration, do not enter a 'redirect URI' or a 'webhook URI'. The 'webhook URI' is automatically registered by this integration based on the external URL configured in the Home Assistant [configuration](/integrations/homeassistant/#editing-the-general-settings-in-yaml). - -</div> +{% endimportant %} See [Application Credentials](/integrations/application_credentials) for instructions on how to configure your *Client ID* and *Client Secret*, then enable Netatmo through the integrations page. diff --git a/source/_integrations/netgear_lte.markdown b/source/_integrations/netgear_lte.markdown index 41970ddd18f..15fef5916b5 100644 --- a/source/_integrations/netgear_lte.markdown +++ b/source/_integrations/netgear_lte.markdown @@ -29,11 +29,9 @@ There is currently support for the following device types within Home Assistant: The integration supports sending notifications with SMS, reporting incoming SMS with events and reporting the modem and connection state in a number of sensors and binary sensors. -<div class='note'> - +{% note %} Splitting of long SMS messages is not supported so notifications can contain a maximum of 70 characters. Simple messages using the reduced GSM-7 alphabet can contain up to 160 characters. Most emojis are not supported. - -</div> +{% endnote %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/nibe_heatpump.markdown b/source/_integrations/nibe_heatpump.markdown index 69c60eda6a6..82c545f55d1 100644 --- a/source/_integrations/nibe_heatpump.markdown +++ b/source/_integrations/nibe_heatpump.markdown @@ -105,6 +105,6 @@ If your system is equipped with a MODBUS40 accessory, this can be used to contro - `serial://[DEVICE PATH]` for direct local connection - `rfc2217://[IP OR HOSTNAME]:[PORT]` for a [ser2net](https://linux.die.net/man/8/ser2net) type proxy -<div class='note info'> +{% note %} Support for RCU-based communication is currently untested. -</div> +{% endnote %} \ No newline at end of file diff --git a/source/_integrations/nina.markdown b/source/_integrations/nina.markdown index 988edfd8c70..c16fca961d9 100644 --- a/source/_integrations/nina.markdown +++ b/source/_integrations/nina.markdown @@ -18,11 +18,9 @@ The [NINA](https://www.bbk.bund.de/DE/Warnung-Vorsorge/Warn-App-NINA/warn-app-ni For each county/city it creates warning slots that change to Unsafe when warnings are present. The text of the warning and the metadata are stored in the attributes of the slots. -<div class='note warning'> - +{% important %} This integration may only work with an Internet connection that supports IPv4. - -</div> +{% endimportant %} {% include integrations/config_flow.md %} @@ -30,9 +28,9 @@ This integration may only work with an Internet connection that supports IPv4. The integration includes the possibility to filter warnings in two ways via a regex. -<div class='note'> +{% note %} All filters are applied to lowercase text only. -</div> +{% endnote %} #### Headline filter diff --git a/source/_integrations/nissan_leaf.markdown b/source/_integrations/nissan_leaf.markdown index 950010d0b67..7b944db0faf 100644 --- a/source/_integrations/nissan_leaf.markdown +++ b/source/_integrations/nissan_leaf.markdown @@ -21,11 +21,9 @@ related: The `nissan_leaf` {% term integration %} offers integration with the [NissanConnect EV](https://www.nissan.co.uk/dashboard.html) cloud service. NissanConnect EV was previously known as Nissan Carwings. -<div class='note info'> - +{% important %} Please be aware that the `nissan_leaf` {% term integration %} only works with Nissan vehicles from before 2019. Newer vehicles will not work with this integration. - -</div> +{% endimportant %} The {% term integration %} offers offers: diff --git a/source/_integrations/nmap_tracker.markdown b/source/_integrations/nmap_tracker.markdown index 6e39547ea46..249202270a9 100644 --- a/source/_integrations/nmap_tracker.markdown +++ b/source/_integrations/nmap_tracker.markdown @@ -14,17 +14,15 @@ ha_integration_type: integration As an alternative to the router-based device tracking, it is possible to directly scan the network for devices by using Nmap. The IP addresses to scan can be specified in any format that Nmap understands, including the network-prefix notation (`192.168.1.1/24`) and the range notation (`192.168.1.1-255`). -<div class='note'> +{% note %} Please keep in mind that modern smart phones will usually turn off WiFi when they are idle. Simple trackers like this may not be reliable on their own. -</div> - -<div class='note'> +{% endnote %} +{% note %} If you are running Home Assistant Core in a Python virtual environment, you might have to install the packages for `arp` and `nmap`. On Debian based hosts (for example Raspbian) do so by running `sudo apt-get install net-tools nmap`. On a Fedora host run `sudo dnf -y install nmap`. - -</div> +{% endnote %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/notify.mqtt.markdown b/source/_integrations/notify.mqtt.markdown index 9328222e046..fc6a71e48d4 100644 --- a/source/_integrations/notify.mqtt.markdown +++ b/source/_integrations/notify.mqtt.markdown @@ -174,11 +174,9 @@ unique_id: type: string {% endconfiguration %} -<div class='note warning'> - +{% important %} Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics. - -</div> +{% endimportant %} ## Examples diff --git a/source/_integrations/numato.markdown b/source/_integrations/numato.markdown index eaa005503a0..768eb939b4c 100644 --- a/source/_integrations/numato.markdown +++ b/source/_integrations/numato.markdown @@ -140,14 +140,12 @@ devices: The `numato` binary_sensor platform allows you to operate the GPIOs of your [Numato](https://numato.com) 32 port USB GPIO expander in binary input mode. -<div class='note warning'> - +{% caution %} As the Numato devices do not have internal pull-up or pull-down circuitry, be careful not to destroy a port by creating a short circuit. Refer to the [Numato documentation](https://numato.com/docs/32-channel-usb-gpio-module-with-analog-inputs/#gpio-with-switches-8) on how to connect a switch to an input port, for example. - -</div> +{% endcaution %} ## Sensor @@ -211,7 +209,7 @@ Hint: It is a good practice to put sticky labels with the IDs onto the PCBs in order to avoid confusion of devices and their port configuration since this could easily destroy your device. -<div class='note warning'> +{% warning %} Numato devices used by Home Assistant are expected to be exclusive to Home Assistant and remain permanently connected. -</div> +{% endwarning %} diff --git a/source/_integrations/number.mqtt.markdown b/source/_integrations/number.mqtt.markdown index ca7c58e4019..e4301d3fac7 100644 --- a/source/_integrations/number.mqtt.markdown +++ b/source/_integrations/number.mqtt.markdown @@ -203,8 +203,6 @@ value_template: type: template {% endconfiguration %} -<div class='note warning'> - +{% important %} Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics. - -</div> +{% endimportant %} diff --git a/source/_integrations/onvif.markdown b/source/_integrations/onvif.markdown index 807735dc891..523eed5ae54 100644 --- a/source/_integrations/onvif.markdown +++ b/source/_integrations/onvif.markdown @@ -25,13 +25,13 @@ The ONVIF camera integration allows you to use an [ONVIF](https://www.onvif.org/ {% include integrations/config_flow.md %} -<div class='note'> - It is recommended that you create a user on your device specifically for Home Assistant. For all current functionality, it is enough to create a standard user. -</div> +{% tip %} +It is recommended that you create a user on your device specifically for Home Assistant. For all current functionality, it is enough to create a standard user. +{% endtip %} -<div class='note'> -If running Home assistant Core in a venv, ensure that libxml2 and libxslt python interfaces are installed via your package manager. -</div> +{% note %} +If running Home Assistant Core in a venv, ensure that libxml2 and libxslt Python interfaces are installed via your package manager. +{% endnote %} ### Configuration notes diff --git a/source/_integrations/opentherm_gw.markdown b/source/_integrations/opentherm_gw.markdown index 80e4f954bed..a19f5d6b71a 100644 --- a/source/_integrations/opentherm_gw.markdown +++ b/source/_integrations/opentherm_gw.markdown @@ -29,9 +29,9 @@ The following device types are currently supported within Home Assistant: This integration will add a single `climate` entity to Home Assistant for each configured gateway. Each gateway also has a collection of `sensor` and `binary_sensor` entities, which are disabled by default. These can be enabled from the `Devices` panel in the `Configuration` page of the web interface. -<div class='note'> +{% note %} The OpenTherm protocol is based on polling. The thermostat sends requests to the boiler at specific intervals. As a result, it may take some time for changes to propagate between Home Assistant and the thermostat. -</div> +{% endnote %} {% include integrations/config_flow.md %} @@ -46,13 +46,13 @@ id: description: "The `gateway_id` for this OpenTherm Gateway. This is used to identify this specific gateway in service calls and to generate the entity IDs for the entities related to this gateway. The entered value will be slugified, i.e. all spaces and special characters will be converted to underscores and any accents will be removed from their characters. The default value is the slugified version of the `name` given above.<br/>Examples: `thermostat`, `living_room`" {% endconfiguration_basic %} -<div class='note warning'> +{% important %} Please make sure no other device or application is connected to the OpenTherm Gateway at the same time as Home Assistant. This is not a supported scenario and may lead to unexpected results. -</div> +{% endimportant %} -<div class='note'> +{% note %} The precision and floor_temperature settings that were supported in configuration.yaml entries have been lost upon import of the `configuration.yaml` entry into the Integrations panel. You can now configure them as per the following Options paragraph. -</div> +{% endnote %} # Options @@ -92,11 +92,9 @@ To return control of the central heating to the thermostat, call the [set_contro | `gateway_id` | no | The `gateway_id` as specified during configuration. | | `ch_override` | no | The desired value for the central heating override. Use `0` to disable or `1` to enable. | -<div class='note'> - +{% warning %} Please read [this information](http://otgw.tclcode.com/standalone.html) from the designer of the OpenTherm Gateway before considering to write your own software thermostat. - -</div> +{% endwarning %} ### Service `opentherm_gw.set_clock` @@ -110,9 +108,9 @@ Provide the time and day of week to the OpenTherm Gateway. The value provided he ### Service `opentherm_gw.set_control_setpoint` -<div class='note warning'> +{% caution %} Improper use of this service may continuously keep your central heating system active, resulting in an overheated house and a significant increase in gas and/or electricity consumption. -</div> +{% endcaution %} Set the central heating control setpoint override on the OpenTherm Gateway. In a normal situation, the thermostat will calculate and control the central heating setpoint on the boiler. Setting this to any value other than 0 will enable the override and allow the OpenTherm Gateway to control this setting. While the override is active, the OpenTherm Gateway will also request your boiler to activate the central heating circuit. For your boiler's actual maximum and minimum supported setpoint value, please see the `slave_ch_max_setp` and `slave_ch_min_setp` [sensors](#sensors). Due to the potential consequences of leaving this setting enabled for prolonged periods, the override will be disabled when Home Assistant is shut down or restarted. @@ -123,11 +121,9 @@ In a normal situation, the thermostat will calculate and control the central hea | `gateway_id` | no | The `gateway_id` as specified during configuration. | | `temperature` | no | The central heating setpoint. Values between `0.0` and `90.0` are accepted, but your boiler may not support the full range. Set to `0` to disable the override. | -<div class='note'> - +{% warning %} Please read [this information](http://otgw.tclcode.com/standalone.html) from the designer of the OpenTherm Gateway before considering to write your own software thermostat. - -</div> +{% endwarning %} ### Service `opentherm_gw.set_hot_water_ovrd` @@ -175,9 +171,9 @@ For a list of possible modes with explanation, see [LED modes](#led-modes) ### Service `opentherm_gw.set_max_modulation` -<div class='note warning'> +{% warning %} Improper use of this service may impair the performance of your central heating system. -</div> +{% endwarning %} Set the maximum modulation level override on the OpenTherm Gateway. In a normal situation, the thermostat will control the maximum modulation level on the boiler. Setting this to any value other than `-1` will enable the override and allow the OpenTherm Gateway to control this setting. Due to the potential consequences of leaving this setting enabled, the override will be disabled when Home Assistant is shut down or restarted. @@ -188,11 +184,9 @@ In a normal situation, the thermostat will control the maximum modulation level | `gateway_id` | no | The `gateway_id` as specified during configuration. | | `level` | no | The maximum modulation level. Accepted values are `-1` through `100`. Set to `-1` to disable the override. | -<div class='note'> - +{% warning %} Please read [this information](http://otgw.tclcode.com/standalone.html) from the designer of the OpenTherm Gateway before considering to write your own software thermostat. - -</div> +{% endwarning %} ### Service `opentherm_gw.set_outside_temperature` @@ -217,9 +211,9 @@ The value you provide here will be used with the GPIO `home` (5) and `away` (6) ## Sensors The following `sensor` entities will be created for each configured gateway. The `entity_id` of every sensor will have a suffix containing the data source (`boiler`, `gateway` or `thermostat`) and the `gateway_id` of the gateway to which it belongs. All `sensor` entities are disabled by default. -<p class='note'> +{% note %} Not all boilers and thermostats properly support all OpenTherm features, so not all of the sensors will have useful values. -</p> +{% endnote %} - **burner_hours** Boiler flame on time. @@ -417,9 +411,9 @@ Not all boilers and thermostats properly support all OpenTherm features, so not ## Binary sensors The following `binary_sensor` entities will be created for each configured gateway. The `entity_id` of every sensor will have a suffix containing the data source (`boiler`, `gateway` or `thermostat`) and the `gateway_id` of the gateway to which it belongs. All `binary_sensor` entities are disabled by default. -<p class='note'> +{% note %} Not all boilers and thermostats properly support all OpenTherm features, so not all of the sensors will have useful values. -</p> +{% endnote %} - **master_ch2_enabled** Thermostat requests central heating 2 on. diff --git a/source/_integrations/openuv.markdown b/source/_integrations/openuv.markdown index 8c2d737d2a0..c373bf43f94 100644 --- a/source/_integrations/openuv.markdown +++ b/source/_integrations/openuv.markdown @@ -20,11 +20,11 @@ ha_integration_type: service The OpenUV integration displays UV and Ozone data from [openuv.io](https://www.openuv.io/). -<div class='note warning'> +{% warning %} The guidelines within this documentation constitute estimates which are intended to help informed decision making. They should not replace analysis, advice, or diagnosis from a trained medical professional. -</div> +{% endwarning %} ## Generating an API Key @@ -50,10 +50,10 @@ To generate an API key, log in at [the OpenUV website](https://www.openuv.io/). ## Updating data -<div class='note warning'> +{% important %} OpenUV does _not_ automatically update data for its entities! Users must manually update data via the `homeassistant.update_entity` service. -</div> +{% endimportant %} Beginning February 1, 2019, the "Limited" plan (which is what new users are given by default) is limited to 50 API requests per day. Because different API plans and diff --git a/source/_integrations/openweathermap.markdown b/source/_integrations/openweathermap.markdown index 229eb872670..6a03b68968e 100644 --- a/source/_integrations/openweathermap.markdown +++ b/source/_integrations/openweathermap.markdown @@ -45,13 +45,11 @@ To continue using the service: For more details, set limits on your usage to avoid charges at [OpenWeatherMap Subscriptions](https://home.openweathermap.org/subscriptions). -<div class='note'> - +{% important %} If you register an new API key with OpenWeatherMap, it will be activated automatically, this typically takes between 10 minutes and 2 hours after your successful registration. Keep in mind when configuring this integration, that you new API key might not be activated yet. Recent policy changes limit the API access for new registered users with a free plan, they should select the `hourly` mode. The other modes require a paid subscription plan. Invalid API-key errors might occur if your API key is used with the other modes. - -</div> +{% endimportant %} {% include integrations/config_flow.md %} @@ -70,11 +68,9 @@ A `sensor` entity will be created for each supported condition. Their ids will f Sensors provide data in the language that was selected when configuring the integration. -<div class='note'> - +{% note %} The Weather entity provides data only in English. Home Assistant automatically translates it to the language configured for the frontend. - -</div> +{% endnote %} ## Supported Weather Conditions diff --git a/source/_integrations/oralb.markdown b/source/_integrations/oralb.markdown index 523c86c6a9d..7071feee54f 100644 --- a/source/_integrations/oralb.markdown +++ b/source/_integrations/oralb.markdown @@ -49,6 +49,6 @@ The integration can discover most Bluetooth-enabled Oral-B toothbrushes. Brushes - Toothbrush state - whether the toothbrush is running, idle. - Battery - toothbrush battery percentage. -<div class='note'> +{% important %} Updates of the battery sensor require an active Bluetooth connection and relatively close proximity. If you use a <a href="/integrations/bluetooth/#remote-adapters-bluetooth-proxies/" target="_blank">Bluetooth proxy</a>, please ensure it supports active connections. All the other sensors update with active or passive connections. -</div> +{% endimportant %} diff --git a/source/_integrations/orvibo.markdown b/source/_integrations/orvibo.markdown index 60a9f1ffbdc..4b8c1f691fc 100644 --- a/source/_integrations/orvibo.markdown +++ b/source/_integrations/orvibo.markdown @@ -11,11 +11,9 @@ ha_platforms: ha_integration_type: integration --- -<div class='note warning'> - +{% caution %} Please be aware that the product ORVIBO WIFI SMART SOCKET S20 (LGS-20) has been recalled by the European authorities due to safety concerns. For more information, please visit [RAPEX information](https://ec.europa.eu/consumers/consumers_safety/safety_products/rapex/alerts/?event=viewProduct&reference=A12/1577/15&lng=en). - -</div> +{% endcaution %} The `orvibo` switch platform allows you to toggle your Orvibo S20 Wifi Smart Sockets. diff --git a/source/_integrations/otp.markdown b/source/_integrations/otp.markdown index 9954dedf775..578282e3e0f 100644 --- a/source/_integrations/otp.markdown +++ b/source/_integrations/otp.markdown @@ -61,6 +61,6 @@ Token: IHEDPEBEVA2WVHB7 Copy and paste the token into your Home Assistant configuration and add it to your OTP generator. Verify that they generate the same code. -<div class='note warning'> +{% important %} It is vital that your system clock is correct both on your Home Assistant instance and on your OTP generator device (e.g., your phone). If not, the generated codes will not match! Make sure NTP is running and syncing your time correctly before creating an issue. -</div> +{% endimportant %} diff --git a/source/_integrations/owntracks.markdown b/source/_integrations/owntracks.markdown index b6f2ddb2b91..d8167443114 100644 --- a/source/_integrations/owntracks.markdown +++ b/source/_integrations/owntracks.markdown @@ -122,9 +122,9 @@ When you exit a zone, Home Assistant will start using location updates to track ## Using OwnTracks regions - forcing OwnTracks to update using iBeaconsOwntracks -<div class='note'> +{% note %} OwnTracks v2.0.0 removes support for iBeacons on Android. -</div> +{% endnote %} When run in the usual *significant changes mode* (which is kind to your phone battery), OwnTracks sometimes doesn't update your location as quickly as you'd like when you arrive at a zone. This can be annoying if you want to trigger an automation when you get home. You can improve the situation using iBeacons. diff --git a/source/_integrations/p1_monitor.markdown b/source/_integrations/p1_monitor.markdown index 0730a3a709f..f8086cdd711 100644 --- a/source/_integrations/p1_monitor.markdown +++ b/source/_integrations/p1_monitor.markdown @@ -51,11 +51,9 @@ See per phase what your voltage, current and power consumption/production is. ### WaterMeter -<div class='note'> - +{% important %} You need to run at least version **1.1.0** of P1 Monitor, to use a water meter. - -</div> +{% endimportant %} See how much water you consume per day, in total and the number of counted pulses. diff --git a/source/_integrations/pandora.markdown b/source/_integrations/pandora.markdown index afff323f618..6c20dae36be 100644 --- a/source/_integrations/pandora.markdown +++ b/source/_integrations/pandora.markdown @@ -16,9 +16,9 @@ related: If you have a Pandora account, you can control it from Home Assistant with this media player. -<div class='note'> +{% important %} This integration is only available on Home Assistant Core installation types. Unfortunately, it cannot be used with Home Assistant OS, Supervised or Container. -</div> +{% endimportant %} ### Installation of Pianobar diff --git a/source/_integrations/panel_custom.markdown b/source/_integrations/panel_custom.markdown index dd83cc95564..94dc7967bfe 100644 --- a/source/_integrations/panel_custom.markdown +++ b/source/_integrations/panel_custom.markdown @@ -31,11 +31,9 @@ panel_custom: who: world ``` -<div class='note'> - +{% tip %} Store your custom panels in `<config>/www` to make them available in the frontend at the path `/local`. - -</div> +{% endtip %} {% configuration %} name: diff --git a/source/_integrations/peco.markdown b/source/_integrations/peco.markdown index e8483457470..649d44a9877 100644 --- a/source/_integrations/peco.markdown +++ b/source/_integrations/peco.markdown @@ -19,15 +19,11 @@ PECO is a public utility company that provides electricity to the Philadelphia m To learn more about PECO, visit [**their about page**](https://www.peco.com/AboutUs/Pages/Default.aspx). -<div class='note'> - +{% note %} This integration is only for PECO customers. To see if your county is supported, take a look at [**their outage map**](https://www.peco.com/Outages/CheckOutageStatus/Pages/OutageMap.aspx). - - PECO Is a registered trademark of Exelon Business Services Co., LLC - -</div> +{% endnote %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/persistent_notification.markdown b/source/_integrations/persistent_notification.markdown index 9f4bf3f312e..b54c9be32b7 100644 --- a/source/_integrations/persistent_notification.markdown +++ b/source/_integrations/persistent_notification.markdown @@ -114,11 +114,9 @@ The message attribute supports the [Markdown formatting syntax](https://daringfi | Link | `[Link](https://home-assistant.io/)` | | Image | `![image](/local/my_image.jpg)` | -<div class="note"> - - `/local/` in this context refers to the `.homeassistant/www/` folder. - -</div> +{% note %} +`/local/` in this context refers to the `.homeassistant/www/` folder. +{% endnote %} ### Create a persistent notification diff --git a/source/_integrations/ping.markdown b/source/_integrations/ping.markdown index 741931d29cc..4bf4a86344a 100644 --- a/source/_integrations/ping.markdown +++ b/source/_integrations/ping.markdown @@ -62,9 +62,9 @@ The integration exposes the different round trip times milliseconds as entities: **These entities are disabled by default and can be enabled in the UI if needed.** -<div class='note'> +{% note %} When run on Windows systems, the round trip time attributes are rounded to the nearest millisecond and the mdev value is unavailable. -</div> +{% endnote %} ## Presence detection @@ -72,8 +72,8 @@ The `ping` device tracker platform offers presence detection by using `ping` to The device tracker is disabled by default and can be enabled in the UI. -<div class='note'> - Please keep in mind that modern smart phones will usually turn off WiFi when they are idle. Simple trackers like this may not be reliable on their own. -</div> +{% note %} +Please keep in mind that modern smart phones will usually turn off WiFi when they are idle. Simple trackers like this may not be reliable on their own. +{% endnote %} See the [person integration page](/integrations/person/) for instructions on how to configure the people to be tracked. diff --git a/source/_integrations/plex.markdown b/source/_integrations/plex.markdown index 42404f73b92..c808aca9538 100644 --- a/source/_integrations/plex.markdown +++ b/source/_integrations/plex.markdown @@ -96,11 +96,9 @@ action: message: "{{ trigger.to_state.attributes.last_added_item }}" ``` -<div class='note info'> - +{% important %} The library sensors are disabled by default, but can be enabled via the Plex integration page. - -</div> +{% endimportant %} ## Button @@ -165,20 +163,16 @@ Required fields within the `media_content_id` payloads are marked as such, other Simplified examples are provided for [music](#music), [TV episodes](#tv-episode), and [movies](#movie). See [advanced searches](#advanced-searches) for complex/smart search capabilities. -<div class='note info'> - +{% note %} Refer to these links if casting to non-Plex players: - [Chromecast](/integrations/cast/#plex) - [Sonos](/integrations/plex#sonos-playback) - -</div> - -<div class='note warning'> +{% endnote %} +{% important %} The integration must be configured with a token for playback commands to work. This can occur if using the `List of IP addresses and networks that are allowed without auth` option on the Plex server. If that feature is required, it's recommended to configure the integration with that feature temporarily disabled. - -</div> +{% endimportant %} #### Music diff --git a/source/_integrations/point.markdown b/source/_integrations/point.markdown index 6aeb4b2aeb5..87f610ac753 100644 --- a/source/_integrations/point.markdown +++ b/source/_integrations/point.markdown @@ -63,21 +63,17 @@ The integration supports the following device types within Home Assistant: - [Binary sensor](#binary-sensor) - [Sensor](#sensor) -<div class='note'> - +{% note %} The Point is just active occasionally so the [sensors](#sensor) are only updated every hour or so. The [binary sensors](#binary-sensor) are however updated via [Cloud Push](/blog/2016/02/12/classifying-the-internet-of-things/#cloud-pushing-new-state), making the changes close to instant. - -</div> +{% endnote %} ## Alarm Each home configured in the Point mobile application will show up as a separate alarm control panel. The panels allow **arming** and **disarming** of the Point home alarm system. -<div class="note"> - +{% note %} The Point only supports a Arm/Disarm action, so it is only `Arm Away` that is implemented. - -</div> +{% endnote %} ## Binary sensor @@ -99,11 +95,9 @@ Each Point exposes the following binary sensors: - **tamper**: `On` means the point was removed, `Off` means normal - **tamper_old**: `On` means the point was removed or attached, `Off` means normal (this is only supported on some "old" devices) -<div class="note"> - +{% note %} The binary sensors **button_press**, **sound** and **tamper** are switched `On` for a brief moment and are then switched back to `Off`. - -</div> +{% endnote %} ### Automation example diff --git a/source/_integrations/proximity.markdown b/source/_integrations/proximity.markdown index 8bb23da47ff..16967660664 100644 --- a/source/_integrations/proximity.markdown +++ b/source/_integrations/proximity.markdown @@ -28,9 +28,9 @@ Some examples of its use include: {% include integrations/config_flow.md %} -<div class="note"> +{% note %} When adding the **Proximity** integration, you are prompted to define the **Tolerance distance**. The tolerance distance is used to calculate the direction of travel in meters (m) to filter out small GPS coordinate changes. -</div> +{% endnote %} ## Sensors @@ -50,9 +50,9 @@ For each tracked device or person, a sensor is created showing the direction of - `towards` - `unknown` -<div class="note"> +{% important %} To calculate the distance and the direction of travel for a tracked device or person, they must specify a geo-location. -</div> +{% endimportant %} ### Nearest device diff --git a/source/_integrations/proxmoxve.markdown b/source/_integrations/proxmoxve.markdown index d1297d36f8c..e32646a7988 100644 --- a/source/_integrations/proxmoxve.markdown +++ b/source/_integrations/proxmoxve.markdown @@ -23,9 +23,9 @@ After configuring this {% term integration %}, the binary sensors automatically ## Configuration -<div class='note'> +{% important %} You should have at least one VM or container entry configured, else this integration won't do anything. -</div> +{% endimportant %} To use the `proxmoxve` {% term integration %}, add the following configuration to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} diff --git a/source/_integrations/ps4.markdown b/source/_integrations/ps4.markdown index 802fdba083b..5ced1f43529 100644 --- a/source/_integrations/ps4.markdown +++ b/source/_integrations/ps4.markdown @@ -26,17 +26,17 @@ The `ps4` integration allows you to control a 1. Download the Second Screen App and make sure that you can find and control your PlayStation 4 normally. -<div class='note'> - Read the section "Granting Port Access" below before continuing. -</div> +{% important %} +Read the section "Granting Port Access" below before continuing. +{% endimportant %} -2. Navigate to `Settings -> Integrations` and press the plus button in the bottom right corner. Select `PlayStation 4` from the list of integrations. +1. Navigate to `Settings -> Integrations` and press the plus button in the bottom right corner. Select `PlayStation 4` from the list of integrations. -3. Follow instructions displayed to generate user credentials. You will know this step is completed when a form with fields appears. +2. Follow instructions displayed to generate user credentials. You will know this step is completed when a form with fields appears. -4. On the PS4, go to Settings / Mobile App Connection Settings / Add Device, a PIN will be displayed. +3. On the PS4, go to Settings / Mobile App Connection Settings / Add Device, a PIN will be displayed. -5. Pair Home Assistant to your PlayStation 4 by filling in the fields using the PIN from the above step. +4. Pair Home Assistant to your PlayStation 4 by filling in the fields using the PIN from the above step. - **Note:** To find your correct region refer to the section [Regions](#regions) @@ -44,17 +44,15 @@ The `ps4` integration allows you to control a The PlayStation 4 integration requires the use of privileged ports during configuration to work correctly, specifically UDP port 987 and TCP port 997. Depending on your OS of your Home Assistant instance, you may need to allow usage of privileged ports manually. -<div class='note warning'> - Do not run your <b>Home Assistant Core</b> instance itself as <b>root</b> or with <b>root/sudo privileges</b> to accomplish this. This would create a security risk for your host system. -</div> +{% warning %} +Do not run your <b>Home Assistant Core</b> instance itself as <b>root</b> or with <b>root/sudo privileges</b> to accomplish this. This would create a security risk for your host system. +{% endwarning %} There are varying methods to perform this, dependent on your OS that is running Home Assistant. Specifically, your *Python Interpreter*, which runs your Home Assistant instance, needs access to the mentioned ports. -<div class='note'> - +{% note %} Additional configuration is only required for Home Assistant Core users **not** running on Docker. - -</div> +{% endnote %} ### Debian-based @@ -114,20 +112,18 @@ When running Home Assistant using Docker, make sure that the Home Assistant cont ## Configuration -<div class='note'> - - The PlayStation 4 integration does not use entries from `configuration.yaml`. You must configure this integration by using `Integrations` - -</div> +{% note %} +The PlayStation 4 integration does not use entries from `configuration.yaml`. You must configure this integration by using `Integrations` +{% endnote %} ## Regions Some titles will have different SKUs in the PlayStation Store database, depending on your [region](https://www.playstation.com/country-selector/index.html). You must select your specific region in the setup in order to retrieve the cover art for such titles correctly. The integration will attempt to search other databases for the correct title if it cannot be found. -<div class='note'> - The following regions have no database and can not be used by the integration: - China, Philippines, Serbia, Vietnam. -</div> +{% important %} +The following regions have no database and can not be used by the integration: +China, Philippines, Serbia, Vietnam. +{% endimportant %} ## Media Data @@ -170,9 +166,10 @@ Each entry will begin with the SKU ID of the title, e.g., `CUSA00000` and will h The `media_image_url` value can be any valid URL. This includes the `local directory` of your Home Assistant instance. The first entry in the example directs to a file named `image.jpg` located in the `config/www/` directory. ### Editing with Text Editor -<div class='note'> - Backup a copy of your <b>.ps4-games.json</b> file before continuing. If there are errors in the formatting, your file may be deleted. -</div> + +{% warning %} +Backup a copy of your `.ps4-games.json` file before continuing. If there are errors in the formatting, your file may be deleted. +{% endwarning %} To edit, simply open the file in a text editor, find the game or app you would like to edit, and edit the value(s) you wish to change and then save the file. The changes will appear the next time you play the game or app on your console. diff --git a/source/_integrations/pulseaudio_loopback.markdown b/source/_integrations/pulseaudio_loopback.markdown index d69007cf9c4..e897cd07564 100644 --- a/source/_integrations/pulseaudio_loopback.markdown +++ b/source/_integrations/pulseaudio_loopback.markdown @@ -57,8 +57,6 @@ port: type: integer {% endconfiguration %} -<div class='note warning'> - +{% important %} This integration relies on raw TCP commands to PulseAudio. In order for PulseAudio to accept commands with this integration, `module-native-protocol-tcp auth-ip-acl=<homeassistant ip>` must be loaded on the PulseAudio server. - -</div> +{% endimportant %} diff --git a/source/_integrations/pure_energie.markdown b/source/_integrations/pure_energie.markdown index 7dd273c1a35..8b4460b632b 100644 --- a/source/_integrations/pure_energie.markdown +++ b/source/_integrations/pure_energie.markdown @@ -24,11 +24,11 @@ The Pure Energie meter is a product that allows you to read the data from your smart meter via the serial port (P1), such as your energy consumption and power flow. -<div class='note'> +{% note %} The product of Pure Energie is a white label product of Net2Grid, other white label products may be found by zeroconf and work with this integration. -</div> +{% endnote %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/purpleair.markdown b/source/_integrations/purpleair.markdown index b68ff6682b4..459e818e822 100644 --- a/source/_integrations/purpleair.markdown +++ b/source/_integrations/purpleair.markdown @@ -52,11 +52,11 @@ The PurpleAir API does not provide AQI data; therefore, the integration does not an AQI sensor automatically. However, sensors providing raw particulate data can be used to create a human-friendly AQI rating sensor. -<div class='note warning'> +{% warning %} The guidelines within this documentation constitute estimates and are intended to help informed decision making. They should not replace analysis, advice or diagnosis from a trained medical professional. -</div> +{% endwarning %} ### Understanding EPA Guidelines @@ -75,10 +75,10 @@ With the EPA guidelines in hand, the next step is to create [`statistics`](/integrations/statistics/) sensors for each particulate sensor you are interested. This example uses PM2.5 and PM10.0 over a 24-hour period: -<div class='note info'> +{% note %} The entity IDs provided below are simulated; make sure that you use entity IDs that actually exist in your Home Assistant instance. -</div> +{% endnote %} ```yaml sensor: @@ -103,10 +103,10 @@ The [`statistics`](/integrations/statistics/) sensors can then be combined into sensor. Note that this example takes a conservative approach: the "worse" of the two values (PM2.5 or PM10.0) is used to determine the overall rating. -<div class='note info'> +{% tip %} Reminder that the breakpoints used below can be determined from the aforementioned EPA guidelines. -</div> +{% endtip %} {% raw %} diff --git a/source/_integrations/pushbullet.markdown b/source/_integrations/pushbullet.markdown index 97339a83a2e..c0b7597156f 100644 --- a/source/_integrations/pushbullet.markdown +++ b/source/_integrations/pushbullet.markdown @@ -21,11 +21,9 @@ There is currently support for the following device types within Home Assistant: - [Sensor](#sensors) - [Notifications](#notifications) -<div class='note'> - +{% note %} The free tier is [limited](https://docs.pushbullet.com/#push-limit) to 500 pushes per month. - -</div> +{% endnote %} ## Prerequisites @@ -139,8 +137,6 @@ action: - `target`: Pushbullet device to receive the notification. -<div class='note'> - +{% important %} Don't forget to [allowlist external directories](/integrations/homeassistant/#allowlist_external_dirs), so Home Assistant has access to them. - -</div> +{% endimportant %} diff --git a/source/_integrations/pvpc_hourly_pricing.markdown b/source/_integrations/pvpc_hourly_pricing.markdown index b2c759e1802..5bbba6b8aca 100644 --- a/source/_integrations/pvpc_hourly_pricing.markdown +++ b/source/_integrations/pvpc_hourly_pricing.markdown @@ -47,8 +47,7 @@ Then, enable the API Token option for this integration. You can set up the integration 2 times; one for each geographic zone. To do this, add them again through the integrations panel under {% my integrations title="**Settings** > **Devices & services**" %}. You can change the configuration anytime in the integration options. -<div class='note'> - +{% note %} The sensor provides an hourly price for energy consumed, but the variable cost of energy is only one of the factors that add up to the electricity bill: - Fixed cost of contracted power @@ -56,5 +55,4 @@ The sensor provides an hourly price for energy consumed, but the variable cost o - Variable cost of energy consumed (the sensor's value) - Other fixed expenses, such as the rental of the electric meter - Multiple taxes applied - -</div> +{% endnote %} diff --git a/source/_integrations/python_script.markdown b/source/_integrations/python_script.markdown index 66d1a42bb9e..849fb33468c 100644 --- a/source/_integrations/python_script.markdown +++ b/source/_integrations/python_script.markdown @@ -27,11 +27,9 @@ Other imports like `min`, `max` are available as builtins. See the [python_scrip [hass-api]: https://developers.home-assistant.io/docs/dev_101_hass/ [logger-api]: https://docs.python.org/3.7/library/logging.html#logger-objects -<div class='note'> - +{% note %} It is not possible to use Python imports with this integration. If you want to do more advanced scripts, you can take a look at [AppDaemon](https://appdaemon.readthedocs.io/en/latest/) or [pyscript](https://github.com/custom-components/pyscript) - -</div> +{% endnote %} ## Writing your first script, reading input and logging the activity @@ -65,7 +63,7 @@ data: name: "Input-Text" ``` -<div class='note'> +{% tip %} Running this script show absolutely no output on the screen, but it logs with level `info`. You must have the [Logger](/integrations/logger/) enabled at least for level `info`. @@ -76,7 +74,7 @@ logger: default: info ``` -</div> +{% endtip %} ## Triggering events diff --git a/source/_integrations/qld_bushfire.markdown b/source/_integrations/qld_bushfire.markdown index e918803c3d4..d9e6675eebd 100644 --- a/source/_integrations/qld_bushfire.markdown +++ b/source/_integrations/qld_bushfire.markdown @@ -33,13 +33,11 @@ of each entity. The data is updated every 5 minutes. -<div class='note'> - +{% note %} The material used by this integration is provided under the [Creative Commons Attribution 4.0 license](https://creativecommons.org/licenses/by/4.0/legalcode). It has only been modified for the purpose of presenting the material in Home Assistant. Please refer to the [creator's copyright notice](https://www.qfes.qld.gov.au/copyright) for more information. - -</div> +{% endnote %} ## Configuration diff --git a/source/_integrations/qvr_pro.markdown b/source/_integrations/qvr_pro.markdown index a18c1eb7e0b..5af0a812251 100644 --- a/source/_integrations/qvr_pro.markdown +++ b/source/_integrations/qvr_pro.markdown @@ -64,6 +64,6 @@ Enabling the QVR Pro camera platform will add all QVR Pro channels by default. Please see `exclude_channels` if you would like to exclude specific channels from showing up in Home Assistant. -<p class="note warning"> +{% important %} The QVR Pro user must have Surveillance Management permission. -</p> +{% endimportant %} diff --git a/source/_integrations/rachio.markdown b/source/_integrations/rachio.markdown index f58ecddc2ca..5dcf8ce6c23 100644 --- a/source/_integrations/rachio.markdown +++ b/source/_integrations/rachio.markdown @@ -37,11 +37,9 @@ They will be automatically added if the Rachio integration is loaded. 3. Click **Get API Key**. 4. Copy the API key from the dialog that opens. -<div class='note'> - +{% important %} In order for Rachio switches and sensors to update, your Home Assistant instance must be accessible from the internet, either via Home Assistant Cloud or another method. See the [Remote Access documentation](/docs/configuration/remote/) for more information. The smart hose timers use polling and don't require external access to be setup. - -</div> +{% endimportant %} {% include integrations/config_flow.md %} @@ -83,17 +81,17 @@ Service data attribute | Optional | Description | | `entity_id` | no | Individual zone, schedule, or multiple smart hose timer valves to run. A smart hose timer base station device can also be selected to run all valves on the given base. | `duration` | yes | Duration in minutes to run the zone or valves. Leave empty for schedules. -<div class='note'> +{% note %} The services below only apply to sprinkler controllers and will not be shown if only smart hose timers are on the account. -</div> +{% endnote %} ### Service `rachio.start_multiple_zone_schedule` Allows a list of zones to be passed with a corresponding list of durations to create a custom schedule directly from Home Assistant. -<div class='note'> +{% note %} It is not currently possible to have zones from multiple controllers in the same custom schedule. -</div> +{% endnote %} Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | diff --git a/source/_integrations/raspyrfm.markdown b/source/_integrations/raspyrfm.markdown index 1f4553176fc..670564b865d 100644 --- a/source/_integrations/raspyrfm.markdown +++ b/source/_integrations/raspyrfm.markdown @@ -94,11 +94,9 @@ Depending on the control unit the channel configuration can have varying formats Initially, the state of a switch is unknown. When the switch is turned on or off (via frontend) the state is known and will be shown in the frontend. -<div class='note warning'> - +{% note %} Note that due to the way those cheap RC units work it is **not possible to query their current state**. Therefore the only way to preserve a consistent state within Home Assistant is to only use Home Assistant as the controller. - -</div> +{% endnote %} ## Full example diff --git a/source/_integrations/recollect_waste.markdown b/source/_integrations/recollect_waste.markdown index ad999774d78..2485027b2a8 100644 --- a/source/_integrations/recollect_waste.markdown +++ b/source/_integrations/recollect_waste.markdown @@ -26,8 +26,8 @@ webcal://recollect.a.ssl.fastly.net/api/places/PLACE_ID/services/SERVICE_ID/even The default frequency for pulling data from ReCollect Waste is once a day (86400 seconds). -<div class='note warning'> +{% warning %} The ReCollect Waste sensor uses the ReCollect API <strong>URL</strong> to obtain data and not an official API from ReCollect. Use at your own risk. -</div> +{% endwarning %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/recorder.markdown b/source/_integrations/recorder.markdown index 2a217e69b81..8d1c7f95381 100644 --- a/source/_integrations/recorder.markdown +++ b/source/_integrations/recorder.markdown @@ -14,11 +14,9 @@ ha_integration_type: system This integration is by default enabled as dependency of the [`history`](/integrations/history/) integration. -<div class='note'> - +{% important %} This integration constantly saves data. If you use the default configuration, the data will be saved on the media Home Assistant is installed on. In case of Raspberry Pi with an SD card, it might affect your system's reaction time and life expectancy of the storage medium (the SD card). It is therefore recommended to set the [commit_interval](/integrations/recorder#commit_interval) to higher value, e.g. 30s, limit the amount of stored data (e.g., by excluding devices) or store the data elsewhere (e.g., another system). - -</div> +{% endimportant %} Home Assistant uses [SQLAlchemy](https://www.sqlalchemy.org/), which is an Object Relational Mapper (ORM). This makes it possible to use a number of database solutions. @@ -32,11 +30,9 @@ Although SQLAlchemy supports database solutions in addition to the ones supporte The default, and recommended, database engine is [SQLite](https://www.sqlite.org/) which does not require any configuration. The database is stored in your Home Assistant configuration directory ('/config/') and is named `home-assistant_v2.db`. -<div class='note'> - +{% caution %} Changing database used by the recorder may result in losing your existing history. Migrating data is not supported. - -</div> +{% endcaution %} To change the defaults for the `recorder` integration in your installation, add the following to your {% term "`configuration.yaml`" %} file: @@ -252,13 +248,11 @@ Call the service `recorder.enable` to start again saving events and states to th ## Custom database engines -<div class='note'> - +{% warning %} SQLite is the most tested, and newer version of Home Assistant are highly optimized to perform well when using SQLite. When choosing another option, you should be comfortable in the role of the database administrator, including making backups of the external database. - -</div> +{% endwarning %} Here are examples to use with the [`db_url`](#db_url) configuration option. @@ -302,31 +296,23 @@ PostgreSQL (Custom socket dir): `postgresql://@/DB_NAME?host=/path/to/dir` {% endconfiguration_basic %} -<div class='note'> - +{% note %} Some installations of MariaDB/MySQL may require an ALTERNATE_PORT (3rd-party hosting providers or parallel installations) to be added to the SERVER_IP, e.g., `mysql://user:password@SERVER_IP:ALTERNATE_PORT/DB_NAME?charset=utf8mb4`. +{% endnote %} -</div> - -<div class='note'> - +{% note %} When using a MariaDB or MySQL server, adding `+pymysql` to the URL will use the pure Python MySQL library, which is slower but may be required if the C MySQL library is not available. When using the official Docker image, the C MySQL library will always be available. `pymysql` is most commonly used with `venv` where the C MySQL library is not installed. +{% endnote %} -</div> - -<div class='note'> - +{% tip %} Unix Socket connections always bring performance advantages over TCP, if the database is on the same host as the `recorder` instance (i.e., `localhost`). +{% endtip %} -</div> - -<div class='note warning'> - +{% note %} If you want to use Unix Sockets for PostgreSQL you need to modify the `pg_hba.conf`. See [PostgreSQL](#postgresql) - -</div> +{% endnote %} ### Database startup @@ -357,9 +343,9 @@ Not all Python bindings for the chosen database engine can be installed directly ### MariaDB and MySQL -<div class='note warning'> +{% warning %} MariaDB versions before 10.5.17, 10.6.9, 10.7.5, and 10.8.4 suffer from a performance regression which can result in the system becoming overloaded while querying history data or purging the database. -</div> +{% endwarning %} Make sure the default character set of your database server is set to `utf8mb4` (see [MariaDB documentation](https://mariadb.com/kb/en/setting-character-sets-and-collations/#example-changing-the-default-character-set-to-utf-8)). If you are in a virtual environment, don't forget to activate it before installing the `mysqlclient` Python package described below. diff --git a/source/_integrations/reddit.markdown b/source/_integrations/reddit.markdown index 457b4ebcf1d..051c52ee433 100644 --- a/source/_integrations/reddit.markdown +++ b/source/_integrations/reddit.markdown @@ -20,9 +20,9 @@ The Reddit sensor integrates data from [Reddit](https://reddit.com/) to monitor To set up this sensor, you will need to generate a `client_id` and `client_secret` for the user account you will use to connect. Follow the first steps in [this Wiki page](https://github.com/reddit-archive/reddit/wiki/OAuth2-Quick-Start-Example). -<div class='note'> +{% important %} This integration does not support Reddit's two-factor authentication. If you use two-factor authentication for your Reddit account, create a separate Reddit account without two-factor authentication for use with Home Assistant. -</div> +{% endimportant %} ## Configuration diff --git a/source/_integrations/remote_rpi_gpio.markdown b/source/_integrations/remote_rpi_gpio.markdown index 23d816ca603..8e25bf1bfb4 100644 --- a/source/_integrations/remote_rpi_gpio.markdown +++ b/source/_integrations/remote_rpi_gpio.markdown @@ -112,9 +112,9 @@ invert_logic: For more details about the GPIO layout, visit the Wikipedia [article](https://en.wikipedia.org/wiki/Raspberry_Pi#J8_header_and_general_purpose_input-output_(GPIO)) about the Raspberry Pi. -<div class='note warning'> +{% note %} Note that a pin managed by Home Assistant is expected to be exclusive to Home Assistant. -</div> +{% endnote %} A common question is what does port refer to? This number is the actual GPIO #, not the pin #. For example, if you have a relay connected to pin 11 its GPIO # is 17. diff --git a/source/_integrations/rest.markdown b/source/_integrations/rest.markdown index 89cabafaa42..1ceb59b5bcc 100644 --- a/source/_integrations/rest.markdown +++ b/source/_integrations/rest.markdown @@ -186,8 +186,6 @@ binary_sensor: type: list {% endconfiguration %} -<div class='note'> - +{% important %} Use either `resource` or `resource_template`. - -</div> +{% endimportant %} diff --git a/source/_integrations/rflink.markdown b/source/_integrations/rflink.markdown index 4479a40d2c1..22f0842d610 100644 --- a/source/_integrations/rflink.markdown +++ b/source/_integrations/rflink.markdown @@ -26,9 +26,9 @@ The 433 MHz spectrum is used by many manufacturers mostly using their own protoc RFLink Gateway supports a number of RF frequencies, using a wide range of low-cost hardware. [Their website](https://www.rflink.nl) provides details for various RF transmitters, receivers and transceiver modules for 433MHz, 868MHz and 2.4 GHz. -<div class='note'> -Note: Versions later than R44 add support for Ikea Ansluta, Philips Living Colors Gen1 and MySensors devices. -</div> +{% note %} +Versions later than R44 add support for IKEA Ansluta, Philips Living Colors Gen1 and MySensors devices. +{% endnote %} A complete list of devices supported by RFLink can be found [here](https://www.rflink.nl/devlist.php). @@ -105,15 +105,13 @@ Other methods of exposing the serial interface over TCP are possible (eg: ESP826 Tested with Wifi serial bridge [esp-link V2.2.3](https://github.com/jeelabs/esp-link/releases/tag/v2.2.3) running on a NodeMCU (ESP8266 Wifi module) with ESP8266 TXD0 (pin D10) and RXD0 (pin D9) connected to Arduino MEGA 2560 RX (Pin 2) and TX (Pin 3) respectively. -<div class='note warning'> - +{% tip %} Due to different logic levels, a voltage level shifter is required between the 3.3V NodeMCU and 5V Arduino MEGA 2560 pins. The BSS138 bidirectional logic level converter has been tested for serial pins and the [link](https://aliexpress.com/item/32238089139.html) is recommended for the CC2500 transceiver (used for IKEA Ansluta and Philips Living Colors) +{% endtip %} -</div> - -<div class='note'> +{% tip %} When re-flashing the Arduino MEGA, disconnect the ESP8266 to avoid programming difficulties. -</div> +{% endtip %} ```yaml # Example configuration.yaml entry diff --git a/source/_integrations/rfxtrx.markdown b/source/_integrations/rfxtrx.markdown index a1c876e043b..3b37083f038 100644 --- a/source/_integrations/rfxtrx.markdown +++ b/source/_integrations/rfxtrx.markdown @@ -177,9 +177,9 @@ Some protocols, like `undecoded`, cannot be enabled in non-volatile memory and m To configure device options, select a device from the list under *Select device to configure*. After pressing *Submit* a window with device options are presented based on the device type. -<div class='note warning'> +{% important %} If a device is missing from the list, close the options window and either make sure the device sents a command or manually re-add the device by event code. -</div> +{% endimportant %} #### Off delay diff --git a/source/_integrations/ring.markdown b/source/_integrations/ring.markdown index 9726760b587..ab8109775ac 100644 --- a/source/_integrations/ring.markdown +++ b/source/_integrations/ring.markdown @@ -41,9 +41,9 @@ There is currently support for the following device types within Home Assistant: - [Switch](#switch) - [Light](#light) -<p class='note'> +{% note %} This integration does NOT allow for live viewing of your Ring camera within Home Assistant. -</p> +{% endnote %} {% include integrations/config_flow.md %} @@ -57,9 +57,9 @@ Once you have enabled the [Ring integration](/integrations/ring), you can start ## Camera -<div class='note'> +{% important %} Please note that downloading and playing Ring video will require a Ring Protect plan. -</div> +{% endimportant %} Once you have enabled the [Ring integration](/integrations/ring), you can start using the camera platform. Currently, it supports doorbell and stickup cameras. diff --git a/source/_integrations/risco.markdown b/source/_integrations/risco.markdown index 68925be1ba7..f2992d5cdef 100644 --- a/source/_integrations/risco.markdown +++ b/source/_integrations/risco.markdown @@ -27,13 +27,13 @@ This integration connects with Risco Alarms, in one of two ways: The integration will connect with your alarm over [Risco Cloud](https://riscocloud.com/). This is easiest to configure, and is widely supported, but is cloud based, and requires polling. -<div class='note'> +{% important %} As of January 2021, Risco have implemented charges for use of their Cloud Features. -</div> +{% endimportant %} -<div class='note warning'> +{% tip %} It is recommended to use a regular (non-owner) account with the Risco app/website, and use a different regular account with the integration. Risco has restrictions on concurrent uses by different users, especially if they have different permission levels. -</div> +{% endtip %} 4 sensors will be created to store events, depending on the category (Status, Alarm, Trouble and Other). Each sensor has the event timestamp as the state, and other event information in attributes. diff --git a/source/_integrations/roomba.markdown b/source/_integrations/roomba.markdown index d758f4a9e92..461a3e44e61 100644 --- a/source/_integrations/roomba.markdown +++ b/source/_integrations/roomba.markdown @@ -29,19 +29,15 @@ The **Roomba** {% term integrations %} allows you to control your [iRobot Roomba <img src='/images/screenshots/more-info-dialog-roomba.png' /> </p> -<div class='note'> - +{% note %} This {% term integrations %} has been tested and confirmed to be working with the iRobot Roomba s9+, Roomba 980, Roomba 960, Roomba 890, and Braava jet m6 models, but should also work fine with any Wi-Fi enabled Roomba or Braava like the 690. For auto-discovery, you will need to initiate a Roomba reboot. For example, by holding the clean button for up to 20 seconds on an i7 or 980. [More information about rebooting your robot](https://homesupport.irobot.com/s/article/9087). - -</div> +{% endnote %} {% include integrations/config_flow.md %} -<div class='note'> - +{% warning %} The Roomba's MQTT server only allows a single connection. Enabling continuous mode will force the App to connect via the cloud to your Roomba. For more information, refer to the [Roomba 980 repository](https://github.com/NickWaterton/Roomba980-Python#firmware-2xx-notes). - -</div> +{% endwarning %} ## Integration entities @@ -75,11 +71,9 @@ For Home Assistant Container, the following command retrieves the BLID (username docker exec -it CONTAINER_NAME_OR_ID python -c 'import roombapy.entry_points; roombapy.entry_points.password()' ROOMBA_IP ``` -<div class='note'> - +{% note %} The command to retrieve the credentials does not need any additional software to be installed because it uses the built-in [roombapy](https://github.com/pschmitt/roombapy) package and [password](https://github.com/pschmitt/roombapy/blob/1.6.1/roomba/entry_points.py#L20) function deployed with Home Assistant. - -</div> +{% endnote %} #### Retrieving credentials from the cloud with dorita980 diff --git a/source/_integrations/rpi_camera.markdown b/source/_integrations/rpi_camera.markdown index ce143782366..1b6e6c6ba67 100644 --- a/source/_integrations/rpi_camera.markdown +++ b/source/_integrations/rpi_camera.markdown @@ -16,9 +16,9 @@ related: The `rpi_camera` {% term integration %} allows you to integrate the Raspberry Pi camera into Home Assistant. This integration uses the application [`raspistill`](https://www.raspberrypi.org/documentation/usage/camera/raspicam/raspistill.md) to store the image from camera. -<div class='note'> +{% important %} This integration is only available on Home Assistant Core installation types. Unfortunately, it cannot be used with Home Assistant OS, Supervised or Container. -</div> +{% endimportant %} ## Configuration diff --git a/source/_integrations/scene.mqtt.markdown b/source/_integrations/scene.mqtt.markdown index a2e7212481c..f7ec95cbeac 100644 --- a/source/_integrations/scene.mqtt.markdown +++ b/source/_integrations/scene.mqtt.markdown @@ -177,11 +177,9 @@ unique_id: type: string {% endconfiguration %} -<div class='note warning'> - +{% important %} Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics. - -</div> +{% endimportant %} ## Examples diff --git a/source/_integrations/schluter.markdown b/source/_integrations/schluter.markdown index a966bf1a7e0..c97f59da451 100644 --- a/source/_integrations/schluter.markdown +++ b/source/_integrations/schluter.markdown @@ -18,9 +18,9 @@ related: The `schluter` {% term integration %} allows you to integrate your [Schluter-DITRA-HEAT-E-WiFi](https://www.schluter.com/schluter-us/en_US/ditra-heat-wifi) electric floor heating thermostat in Home Assistant. -<div class='note'> +{% important %} You will need to create a Schluter DITRA-HEAT account and register your thermostat with it. This can be done via the thermostat touchscreen, where an email will be sent to you to confirm your account. -</div> +{% endimportant %} ## Configuration diff --git a/source/_integrations/script.markdown b/source/_integrations/script.markdown index 339c872932c..475e5186c0f 100644 --- a/source/_integrations/script.markdown +++ b/source/_integrations/script.markdown @@ -36,11 +36,9 @@ script: {% endraw %} -<div class='note'> - +{% important %} Script names (e.g., `message_temperature` in the example above) are not allowed to contain capital letters, or dash (minus) characters, i.e., `-`. The preferred way to separate words for better readability is to use underscore (`_`) characters. - -</div> +{% endimportant %} {% configuration %} alias: @@ -215,14 +213,14 @@ automation: -<div class='note'> +{% note %} Script variables that may be used by templates include the following: - those provided from the configuration as fields - those that are passed as data when started from a service, - the `this` variable the value of which is a dictionary of the current script's state. -</div> +{% endnote %} ### Waiting for Script to Complete diff --git a/source/_integrations/scsgate.markdown b/source/_integrations/scsgate.markdown index 22f6debf8ba..733c29caef4 100644 --- a/source/_integrations/scsgate.markdown +++ b/source/_integrations/scsgate.markdown @@ -88,11 +88,9 @@ devices: type: string {% endconfiguration %} -<div class='note'> - +{% note %} **Known limitation:** It is not possible to know the current state of the cover. - -</div> +{% endnote %} ### Light diff --git a/source/_integrations/select.mqtt.markdown b/source/_integrations/select.mqtt.markdown index 5ed057fbe40..dcd782ccb38 100644 --- a/source/_integrations/select.mqtt.markdown +++ b/source/_integrations/select.mqtt.markdown @@ -186,8 +186,6 @@ value_template: type: template {% endconfiguration %} -<div class='note warning'> - +{% important %} Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics. - -</div> +{% endimportant %} diff --git a/source/_integrations/sense.markdown b/source/_integrations/sense.markdown index a622c5f10ac..72c60f33a32 100644 --- a/source/_integrations/sense.markdown +++ b/source/_integrations/sense.markdown @@ -47,8 +47,6 @@ Binary sensors are created for each of the devices detected by your Sense monito Sensors are created for each of the devices detected by your Sense monitor to show their power usage in Watts. -<div class='note'> - +{% note %} The [Emulated Kasa](/integrations/emulated_kasa) integration can be used to expose devices in Home Assistant to the Sense Monitor by emulating TP-Link Kasa Smart Plugs. - -</div> +{% endnote %} diff --git a/source/_integrations/sensibo.markdown b/source/_integrations/sensibo.markdown index c62f885ba02..a0d6a67791f 100644 --- a/source/_integrations/sensibo.markdown +++ b/source/_integrations/sensibo.markdown @@ -39,11 +39,12 @@ Integrates [Sensibo](https://sensibo.com) devices into Home Assistant. ## Prerequisites Please click [here](https://home.sensibo.com/me/api) and register to obtain the API key. -<div class="note"> + +{% tip %} If you create the API key using a dedicated user (and not your main user), then in the Sensibo app log you will be able to distinguish between actions done in the app and actions done by Home Assistant. -</div> +{% endtip %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/sensor.rest.markdown b/source/_integrations/sensor.rest.markdown index 0187568e5fe..94a9c6108a4 100644 --- a/source/_integrations/sensor.rest.markdown +++ b/source/_integrations/sensor.rest.markdown @@ -151,11 +151,9 @@ verify_ssl: default: True {% endconfiguration %} -<div class='note'> - +{% important %} Use either `resource` or `resource_template`. - -</div> +{% endimportant %} `curl` can help you identify the variable you want to display in your Home Assistant frontend. The example below shows the JSON response of a device that is running with [aREST](https://arest.io/). diff --git a/source/_integrations/sentry.markdown b/source/_integrations/sentry.markdown index 5370225c8e7..d82e8444d24 100644 --- a/source/_integrations/sentry.markdown +++ b/source/_integrations/sentry.markdown @@ -13,11 +13,9 @@ ha_domain: sentry ha_integration_type: service --- -<div class='note warning'> - - The free Sentry account allows 5000 events per month. Depending on the amount of events sent to Sentry, you will either have to upgrade your Sentry account or have a period without data flowing from Home Assistant to Sentry. - -</div> +{% important %} +The free Sentry account allows 5000 events per month. Depending on the amount of events sent to Sentry, you will either have to upgrade your Sentry account or have a period without data flowing from Home Assistant to Sentry. +{% endimportant %} The Sentry integration in Home Assistant integrates with [Sentry](https://sentry.io/) to capture both logged errors as well as unhandled exceptions in Home Assistant. diff --git a/source/_integrations/seventeentrack.markdown b/source/_integrations/seventeentrack.markdown index 0d589bf4960..e09fc5e0e9a 100644 --- a/source/_integrations/seventeentrack.markdown +++ b/source/_integrations/seventeentrack.markdown @@ -16,11 +16,9 @@ ha_integration_type: service The seventeentrack {% term integration %} allows users to get package data tied to their [17track.net](https://www.17track.net) account. The integration creates both summary sensors, which show the number of packages in a current state (e.g., "In Transit"), as well as individual sensors for each package within the account. -<div class='note warning'> - +{% important %} Although the 17track.net website states that account passwords cannot be longer than 16 characters, users can technically set longer-than-16-character passwords. These passwords **will not** work with the used API. Therefore, please ensure that your 17track.net password does not exceed 16 characters. - -</div> +{% endimportant %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/shell_command.markdown b/source/_integrations/shell_command.markdown index 280cf33f7ab..8da0e3e8dc6 100644 --- a/source/_integrations/shell_command.markdown +++ b/source/_integrations/shell_command.markdown @@ -46,11 +46,9 @@ Any service data passed into the service call to activate the shell command will The `command` is executed within the [configuration directory](/docs/configuration/). -<div class='note'> - +{% tip %} If you are using [Home Assistant Operating System](https://github.com/home-assistant/operating-system), the commands are executed in the `homeassistant` container context. So if you test or debug your script, it might make sense to do this in the context of this container to get the same runtime environment. - -</div> +{% endtip %} A `0` exit code means the commands completed successfully without error. In case a command results in a non `0` exit code or is terminated after a timeout of 60 seconds, the result is logged to Home Assistant log. diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown index 33d1d981fb8..8a1ceade7ba 100644 --- a/source/_integrations/shelly.markdown +++ b/source/_integrations/shelly.markdown @@ -74,9 +74,9 @@ Generation 2 and 3 devices use the `RPC` protocol to communicate with the integr `ws://` + `Home_Assistant_local_ip_address:Port` + `/api/shelly/ws` (for example: `ws://192.168.1.100:8123/api/shelly/ws`), click **Apply** to save the settings. In case your installation is set up to use SSL encryption (HTTP**S** with certificate), an additional `s` needs to be added to the WebSocket protocol, too, so that it reads `wss://` (for example: `wss://192.168.1.100:8123/api/shelly/ws`). -<div class="note"> +{% note %} Integration is communicating directly with the device; cloud connection is not needed. -</div> +{% endnote %} ## Bluetooth Support @@ -226,11 +226,9 @@ You can also create automations using YAML, for example: Generation 2 and 3 devices use the values `btn_down`, `btn_up`, `single_push`, `double_push`, `triple_push` and `long_push` as `click_type`. -<div class="note"> - +{% note %} Not all devices support all input events. You can check on [Shelly API Reference](https://shelly-api-docs.shelly.cloud/) website what types of Shelly input events your device supports. - -</div> +{% endnote %} ## Appliance type (generation 1) @@ -251,11 +249,9 @@ Shelly lights supporting light transition: - Shelly RGBW2 - Shelly Vintage -<div class="note"> - +{% note %} The firmware limits the transition time to 5 seconds. - -</div> +{% endnote %} ## Device services @@ -294,11 +290,9 @@ As soon as you change the temperature, it gets enabled again. If you have Valve add-on connected to Shelly Gas, the integration will create three entities for the valve. The `switch` and `valve` entities allow you to control the valve, the `sensor` entity shows exact states of the valve. The `switch` entity is deprecated and will be removed in a future version of Home Assistant. -<div class="note"> - +{% note %} The `switch` entity in Home Assistant does not support transition states. For this reason, the `opening` state of the valve maps to the `on` (opened) state of the entity and the `closing` state of the valve maps to the `off` (closed) state of the entity. - -</div> +{% endnote %} ## CoAP port (generation 1) diff --git a/source/_integrations/simplisafe.markdown b/source/_integrations/simplisafe.markdown index e72ee5f143f..bdeda6d3d05 100644 --- a/source/_integrations/simplisafe.markdown +++ b/source/_integrations/simplisafe.markdown @@ -48,9 +48,9 @@ SimpliSafe offers several [monitoring plans](https://support.simplisafe.com/arti ## Getting an Authorization Code -<div class='note warning'> +{% important %} You must have multi-factor authentication (MFA) enabled on your SimpliSafe account for the below instructions to work. Without MFA enabled, you will never receive the correct authorization code! -</div> +{% endimportant %} SimpliSafe authenticates users via its web app. Due to technical limitations, there is a manual step when adding the integration. For in-depth guidance, refer to step 6 of [the `simplisafe-python` documentation on authentication](https://simplisafe-python.readthedocs.io/en/latest/usage.html#authentication). diff --git a/source/_integrations/siren.mqtt.markdown b/source/_integrations/siren.mqtt.markdown index f9887db48d4..161244e9483 100644 --- a/source/_integrations/siren.mqtt.markdown +++ b/source/_integrations/siren.mqtt.markdown @@ -234,11 +234,9 @@ unique_id: type: string {% endconfiguration %} -<div class='note warning'> - +{% important %} Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics. - -</div> +{% endimportant %} ## Examples diff --git a/source/_integrations/slimproto.markdown b/source/_integrations/slimproto.markdown index 797e259a1d2..604865c7265 100644 --- a/source/_integrations/slimproto.markdown +++ b/source/_integrations/slimproto.markdown @@ -18,11 +18,9 @@ The SlimProto integration allows you to control a [Squeezebox](https://en.wikipe {% include integrations/config_flow.md %} -<div class='note'> - +{% note %} This integration talks directly to the player running the "SLIM" protocol, effectively turning Home Assistant into the Media Server so you will not need an external Media Server like Logitech Media Server or Roon. This means that the media you want to play is available in/from Home Assistant itself, for example by using the [Radio Browser](/integrations/radio_browser) integration or the custom [Music Assistant](https://github.com/music-assistant/hass-music-assistant) integration. - -</div> +{% endnote %} ## Basic support only diff --git a/source/_integrations/smart_meter_texas.markdown b/source/_integrations/smart_meter_texas.markdown index b65b70c4c22..85bf3412c52 100644 --- a/source/_integrations/smart_meter_texas.markdown +++ b/source/_integrations/smart_meter_texas.markdown @@ -30,8 +30,8 @@ Any Texas electricity consumer can register an account. - Your meter number - Your ESIID (Electric Service Identifier) -<div class='note'> +{% note %} Due to API limits, this sensor refreshes once per hour. The limit is 24 meter readings per calendar day. -</div> +{% endnote %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/smartthings.markdown b/source/_integrations/smartthings.markdown index 61030e8608c..87641682a8f 100644 --- a/source/_integrations/smartthings.markdown +++ b/source/_integrations/smartthings.markdown @@ -82,11 +82,9 @@ After completing the prerequisite steps above, you are ready to setup the integr 4. Select **Close Window** or close it manually. 5. Back in Home Assistant select **Finish**. -<div class='note info'> - +{% note %} If you want to integrate additional SmartThings accounts or locations, repeat the steps above. - -</div> +{% endnote %} ## Removal instructions diff --git a/source/_integrations/smhi.markdown b/source/_integrations/smhi.markdown index 3027a93dcfe..7d2b23fd2ae 100644 --- a/source/_integrations/smhi.markdown +++ b/source/_integrations/smhi.markdown @@ -26,10 +26,8 @@ There is currently support for the following device types within Home Assistant: The SMHI weather service is free under the Creative Commons Attribution 4.0, international license. Weather data will be pulled once every 30 minutes. -<div class='note warning'> - +{% important %} Only location close to Sweden can be added. See [SMHI.se area](https://opendata.smhi.se/apidocs/metfcst/geographic_area.html) for more details what locations are supported. - -</div> +{% endimportant %} Details about the API are available in the [SMHI API documentation](https://opendata.smhi.se/apidocs/metfcst/index.html). diff --git a/source/_integrations/smtp.markdown b/source/_integrations/smtp.markdown index b965856b631..c162f383ca1 100644 --- a/source/_integrations/smtp.markdown +++ b/source/_integrations/smtp.markdown @@ -132,11 +132,9 @@ The optional `html` field makes a custom text/HTML multi-part message, allowing The optional `images` field adds image attachments to the email. If `html` is defined, the images need to be added to the message in-line as described above (and as shown in the example below). If `html` is not defined, images will be added as separate attachments. -<div class='note info'> - +{% important %} When adding images, make sure the folders containing the attachments are added to `allowlist_external_dirs`.<br>See: [Setup basic documentation](/integrations/homeassistant/#allowlist_external_dirs) - -</div> +{% endimportant %} ```yaml burglar: diff --git a/source/_integrations/snips.markdown b/source/_integrations/snips.markdown index ecba5b734d4..49be4f77861 100644 --- a/source/_integrations/snips.markdown +++ b/source/_integrations/snips.markdown @@ -9,11 +9,9 @@ ha_iot_class: Local Push ha_integration_type: integration --- -<div class='note warning'> - +{% warning %} The Snips Console no longer available due to acquisition by Sonos. For more details, read the [announcement on the Snips forum](http://web.archive.org/web/20200109164247/https://forum.snips.ai/t/important-message-regarding-the-snips-console/4145). - -</div> +{% endwarning %} The [Snips Voice Platform](https://www.snips.ai) allows users to add powerful voice assistants to their Raspberry Pi devices without compromising on privacy. It runs 100% on-device, and does not require an internet connection. It features Hotword Detection, Automatic Speech Recognition (ASR), Natural Language Understanding (NLU) and Dialog Management. diff --git a/source/_integrations/snmp.markdown b/source/_integrations/snmp.markdown index b447e6ea7b4..0c5a4a5e1d1 100644 --- a/source/_integrations/snmp.markdown +++ b/source/_integrations/snmp.markdown @@ -26,9 +26,9 @@ There is currently support for the following device types within Home Assistant: - [Sensor](#sensor) - [Switch](#switch) -<div class='note warning'> +{% important %} This device tracker needs SNMP to be enabled on the router. It could be that you need to install the SNMP support manually. -</div> +{% endimportant %} ## Presence detection diff --git a/source/_integrations/snooz.markdown b/source/_integrations/snooz.markdown index 85f256e01f4..3af56562b1b 100644 --- a/source/_integrations/snooz.markdown +++ b/source/_integrations/snooz.markdown @@ -46,9 +46,9 @@ Devices are exposed as Fan entities with a persistent connection to the device. Fan speed percentage is mapped to the device volume level. -<div class='note'> +{% note %} Speed percentages less than 10 have no effect - they all map to a value of 1 on the device. -</div> +{% endnote %} ## Services @@ -83,9 +83,9 @@ automation: Transition the volume level to the lowest setting over the specified duration, then power off the device. -<div class='note'> +{% note %} Once the transition completes, the volume level is restored to the value before the transition started. -</div> +{% endnote %} {% my developer_call_service badge service="snooz.transition_off" %} diff --git a/source/_integrations/solaredge_local.markdown b/source/_integrations/solaredge_local.markdown index 2cb91603254..31ce73e4f7a 100644 --- a/source/_integrations/solaredge_local.markdown +++ b/source/_integrations/solaredge_local.markdown @@ -24,13 +24,13 @@ Only specific models support the local API. The local API is available on invert You can check if the local API works by finding the IP address of your inverter and visiting it in a browser. If it supports the local API, you'll see an HTML page with the SolarEdge logo and a "Commissioning" menu. -<div class='note'> +{% warning %} Recent firmware updates have disabled the local API on many inverters. Please enter the IP address of your inverter in a browser before attempting to use this integration. If the local API is enabled, you'll see a web page with the SolarEdge logo and a "Commissioning" menu. See [this issue](https://github.com/jbuehl/solaredge/issues/124) and [this issue](https://github.com/drobtravels/solaredge-local/issues/24) for additional details. If your inverter does not support the local API, you can use the [cloud based version](/integrations/solaredge/) -</div> +{% endwarning %} ## Configuration diff --git a/source/_integrations/solarlog.markdown b/source/_integrations/solarlog.markdown index 21b20cd1c73..a6f0c76b433 100644 --- a/source/_integrations/solarlog.markdown +++ b/source/_integrations/solarlog.markdown @@ -22,9 +22,9 @@ When activating the interface, a red warning triangle with security information The `solarlog` integration uses the default host address "http://solar-log" if you don't specify a host. If your device isn't accessible on this address, use its IP Address instead. -<div class='note warning'> +{% important %} The open JSON interface is deactivated by default. To activate the open JSON interface, a user password must first be set. The password isn't needed for accessing the open JSON interface. -</div> +{% endimportant %} {% include integrations/config_flow.md %} @@ -73,6 +73,6 @@ The following sensors are available in the library: | power_available | W | Available power (equals to power_ac - consumption_ac) | | usage | % | Usage (equals to consumption_ac / power_ac) | -<div class='note'> +{% note %} The solarlog integration is using the sunwatcher pypi package to get the data from your Solar-Log device. The last five sensors are not reported by your Solar-Log device directly, but are computed by the sunwatcher package. -</div> +{% endnote %} diff --git a/source/_integrations/sonos.markdown b/source/_integrations/sonos.markdown index 53e329f020e..103cca0ec7a 100644 --- a/source/_integrations/sonos.markdown +++ b/source/_integrations/sonos.markdown @@ -51,11 +51,9 @@ Battery sensors are fully supported for the `Sonos Roam` and `Sonos Move` device For each speaker with a battery, a `sensor` showing the current battery charge level and a `binary_sensor` showing the power state of the speaker are created. The `binary_sensor` reports if the speaker is currently powered by an external source and its `power_source` attribute shows which specific source is providing the current power. This source attribute can be one of `BATTERY`, `SONOS_CHARGING_RING` if using wireless charging, or `USB_POWER` if charging via USB cable. Note that the Roam will report `SONOS_CHARGING_RING` even when using a generic Qi charger. -<div class='note'> - +{% note %} The battery sensors rely on working change events or updates will be delayed. S1 battery sensors **require** working events to report any data. See more details in [Advanced use](#advanced-use). - -</div> +{% endnote %} ### Alarm support notes @@ -115,12 +113,9 @@ Example templates: {% endraw %} -<div class='note'> - +{% tip %} The Sonos favorites sensor (`sensor.sonos_favorites`) is disabled by default. It can be found and enabled from the entities associated with the Sonos integration on your {% my integrations %} page. - -</div> - +{% endtip %} ## Playing media @@ -280,11 +275,9 @@ The Sonos integration makes various custom services available in addition to the Take a snapshot of what is currently playing on one or more speakers. This service, and the following one, are useful if you want to play a doorbell or notification sound and resume playback afterwards. -<div class='note'> - +{% note %} The queue is not snapshotted and must be left untouched until the restore. Using `media_player.play_media` is safe and can be used to play a notification sound, including [TTS](/integrations/tts/) announcements. - -</div> +{% endnote %} | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | @@ -295,15 +288,13 @@ The queue is not snapshotted and must be left untouched until the restore. Using Restore a previously taken snapshot of one or more speakers. -<div class='note'> - +{% note %} The playing queue is not snapshotted. Using `sonos.restore` on a speaker that has replaced its queue will restore the playing position, but in the new queue! +{% endnote %} -</div> - -<div class='note'> +{% note %} A cloud queue cannot be restarted. This includes queues started from within Spotify and queues controlled by Amazon Alexa. -</div> +{% endnote %} | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | diff --git a/source/_integrations/spider.markdown b/source/_integrations/spider.markdown index 0177666ea1b..975b2535d5f 100644 --- a/source/_integrations/spider.markdown +++ b/source/_integrations/spider.markdown @@ -27,12 +27,12 @@ There is currently support for the following device types within Home Assistant: {% include integrations/config_flow.md %} -<div class='note warning'> +{% note %} This integration is not affiliated with Itho Daalderop Spider and retrieves data from the endpoints of the mobile application. Use at your own risk. -</div> +{% endnote %} ### Climate -<div class='note'> +{% note %} Although this integration lets you change the operation mode to heating or cooling, it doesn't necessarily mean your boiler can. Spider is not aware of your current situation. -</div> +{% endnote %} diff --git a/source/_integrations/sql.markdown b/source/_integrations/sql.markdown index 171807c3fa2..d44613acee7 100644 --- a/source/_integrations/sql.markdown +++ b/source/_integrations/sql.markdown @@ -272,11 +272,11 @@ Use the same Database URL as for the `recorder` integration. Change `DB_NAME` to Example Database URL: `"mssql+pyodbc://username:password@SERVER_IP:1433/DB_NAME?charset=utf8&driver=FreeTDS"` -<div class='note info'> +{% note %} Connecting with MSSQL requires "pyodbc" to be installed on your system, which can only be done on systems using the Home Assistant Core installation type to be able to install the necessary dependencies. "pyodbc" has special requirements which need to be pre-installed before installation, see the ["pyodbc" wiki](https://github.com/mkleehammer/pyodbc/wiki/Install) for installation instructions -</div> +{% endnote %} ```sql SELECT TOP 1 SUM(m.size) * 8 / 1024 as size FROM sys.master_files m INNER JOIN sys.databases d ON d.database_id=m.database_id WHERE d.name='DB_NAME'; diff --git a/source/_integrations/squeezebox.markdown b/source/_integrations/squeezebox.markdown index 3ee42568542..98d406c37ad 100644 --- a/source/_integrations/squeezebox.markdown +++ b/source/_integrations/squeezebox.markdown @@ -19,13 +19,13 @@ The Squeezebox integration allows you to control a [Logitech Squeezebox](https:/ {% include integrations/config_flow.md %} -<div class='note'> +{% note %} This platform uses the web interface of the Logitech Media Server (LMS) to send commands. The default port of the web interface is 9000. It is the same port that you use to access the LMS through your web browser. -</div> +{% endnote %} -<div class='note'> +{% note %} The integration now supports Logitech Media Servers behind an HTTPS reverse proxy. Please note that Logitech Media Server natively only supports HTTP traffic. Unless you have configured a reverse proxy, do not select the `https` option. If you have configured a reverse proxy, remember to update the port number. -</div> +{% endnote %} The Logitech Transporter which have two digital inputs can be activated using a script. The following example turns on the Transporter and activates the toslink input interface: diff --git a/source/_integrations/starline.markdown b/source/_integrations/starline.markdown index f8be1291e3c..2d34d5b604c 100644 --- a/source/_integrations/starline.markdown +++ b/source/_integrations/starline.markdown @@ -41,14 +41,12 @@ This integration provides the following platforms: Create a new application in the [StarLine developer profile](https://my.starline.ru/developer). -<div class='note'> - +{% note %} The integration makes API calls to StarLine servers to retrieve data. It gets only the latest set of values that are valid for the moment of the API call. This means that the integration does not retrieve or store values, StarLine events, or parameters between the API calls. You can make up to 1000 API calls per day, which means you could make one approximately every 86 seconds. By default, the state of integration will be updated every 3 minutes and OBD information will be updated every 3 hours, making 488 calls per day. It is not recommended to set an update interval of less than 90 seconds. - -</div> +{% endnote %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/starlingbank.markdown b/source/_integrations/starlingbank.markdown index fa3ea9e7a67..f068d52e58e 100644 --- a/source/_integrations/starlingbank.markdown +++ b/source/_integrations/starlingbank.markdown @@ -26,9 +26,9 @@ You can find more information about Starling Bank at [their website](https://www Once you have your own Starling bank account you will need to sign up for a Starling developer account [here](https://developer.starlingbank.com/signup). You won't need to do any development but you will need to get a "Personal Access Token" that will allow the integration to access your account balance. -<div class='note info'> - You control what access is granted using this token. This integration only needs very basic access (see below). -</div> +{% note %} +You control what access is granted using this token. This integration only needs very basic access (see below). +{% endnote %} Once you've signed up: diff --git a/source/_integrations/statistics.markdown b/source/_integrations/statistics.markdown index 1de46f9a041..d877bfcc909 100644 --- a/source/_integrations/statistics.markdown +++ b/source/_integrations/statistics.markdown @@ -21,11 +21,9 @@ The statistics sensor updates with every update of the source sensor, for which Assuming the [`recorder`](/integrations/recorder/) integration is running, historical sensor data is read from the database on startup and is available immediately after a restart of the platform. If the [`recorder`](/integrations/recorder/) integration is *not* running, it can take some time for the sensor to start reporting data because some characteristics calculations require more than one source sensor value. -<div class='note tip'> - +{% tip %} The `statistics` integration is different to [Long-term Statistics](https://developers.home-assistant.io/docs/core/entity/sensor/#long-term-statistics). More details on the differences can be found in the [2021.8.0 release notes](/blog/2021/08/04/release-20218/#long-term-statistics). - -</div> +{% endtip %} ## Characteristics diff --git a/source/_integrations/steam_online.markdown b/source/_integrations/steam_online.markdown index 2c638e73d66..32ba8c8dce7 100644 --- a/source/_integrations/steam_online.markdown +++ b/source/_integrations/steam_online.markdown @@ -18,13 +18,11 @@ The Steam integration will allow you to track the online status of public [Steam {% include integrations/config_flow.md %} -<div class='note'> - +{% important %} Steam has a friends list privacy feature that interferes with easily adding sensors to track friends' activities. Setting the friends list to Public during initial setup will allow the integration to see them for easy adding. It is **not** necessary to keep the friends list Public. Go to your profile, select "Edit Profile", "Privacy Settings". - -</div> +{% endimportant %} <p class='img'> <img src='/images/screenshots/steam_privacy_settings.png' /> diff --git a/source/_integrations/stiebel_eltron.markdown b/source/_integrations/stiebel_eltron.markdown index c870878c00f..e58d2a1af09 100644 --- a/source/_integrations/stiebel_eltron.markdown +++ b/source/_integrations/stiebel_eltron.markdown @@ -73,11 +73,9 @@ hub: type: string {% endconfiguration %} -<div class='note'> - +{% important %} This integration requires the [Modbus](/integrations/modbus/) integration to be set up to work - -</div> +{% endimportant %} Full configuration example including modbus setup shown below: diff --git a/source/_integrations/streamlabswater.markdown b/source/_integrations/streamlabswater.markdown index a5bc1e8de08..01107c7f796 100644 --- a/source/_integrations/streamlabswater.markdown +++ b/source/_integrations/streamlabswater.markdown @@ -16,11 +16,9 @@ ha_integration_type: integration The StreamLabs Water integration is used to interact with [StreamLabs water monitoring devices](https://www.streamlabswater.com/) in order to retrieve usage information and manage the away mode of the device. The [StreamLabs Water API](https://developer.streamlabswater.com) is used to retrieve daily, monthly, and yearly water usage along with the current away mode. -<div class='note'> - +{% important %} Access to the StreamLabs Water API is not free, you must have a StreamPlus™ subscription level that enables API access. Visit [https://streamlabswater.com/subscription](https://streamlabswater.com/subscription) for more information. - -</div> +{% endimportant %} There is currently support for the following device types within Home Assistant: diff --git a/source/_integrations/subaru.markdown b/source/_integrations/subaru.markdown index 60c91c162ad..727540e3cc4 100644 --- a/source/_integrations/subaru.markdown +++ b/source/_integrations/subaru.markdown @@ -41,9 +41,9 @@ In addition to the telematics generational differences, there are two levels of {% include integrations/config_flow.md %} -<p class='note'> +{% important %} If your account includes multiple vehicles, the same PIN will be used for all vehicles. Ensure that you have configured all vehicles in your account to have the same PIN. -</p> +{% endimportant %} ## Sensors @@ -64,9 +64,9 @@ Available sensors will vary by model, year, and subscription type. The integrati ## Lock This integration supports remote locking and unlocking of vehicle doors. If doors are remotely unlocked, they will automatically relock if a door is not opened within a minute. There is no remote notification of this automatic relock. -<p class='note'> +{% note %} The current lock status is always unknown due to the fact that the Subaru API does not report this data. -</p> +{% endnote %} ### Unlock specific door @@ -90,9 +90,9 @@ Subaru integration options are set via: - **Enable vehicle polling *[Default: off]*:** When enabled, vehicle polling will send a remote command to your vehicle every 2 hours to obtain new sensor data. This involves "waking" your vehicle and requesting that it send new data to Subaru servers. Without vehicle polling, new sensor data is only received when the vehicle automatically pushes data (normally after engine shutdown). This option only applies to vehicles with Security Plus subscriptions because it uses a "locate" command to request the data. -<p class='note warning'> +{% warning %} Vehicle polling draws power from the 12V battery. Long term use without driving may drain the battery resulting in the inability to start. -</p> +{% endwarning %} ## FAQ - Troubleshooting diff --git a/source/_integrations/swiss_hydrological_data.markdown b/source/_integrations/swiss_hydrological_data.markdown index efdff463961..9b5ab53ec15 100644 --- a/source/_integrations/swiss_hydrological_data.markdown +++ b/source/_integrations/swiss_hydrological_data.markdown @@ -57,8 +57,8 @@ Sensors are exposing additional values through their attributes for all availabl - `min-24h`: The minimum measurement for the last 24 hours. - `station_update`: There is a time span between the sensor update in Home Assistant and the updates from the stations. Include those information if you are building automations based on the discharge of a water body. -<div class='note info'> - The sensors don't show the latest measurement, but those from the last hour due to the source of data. Some stations also don't provide data for certain measurements. -</div> +{% note %} +The sensors don't show the latest measurement, but those from the last hour due to the source of data. Some stations also don't provide data for certain measurements. +{% endnote %} The hydrological measurements are coming from the [Swiss Federal Office for the Environment (Bundesamt für Umwelt - Abt. Hydrologie)](https://www.hydrodaten.admin.ch/) and are updated every 10 minutes. diff --git a/source/_integrations/swisscom.markdown b/source/_integrations/swisscom.markdown index b7147f397a8..7e6ac5557fb 100644 --- a/source/_integrations/swisscom.markdown +++ b/source/_integrations/swisscom.markdown @@ -16,9 +16,9 @@ related: The `swisscom` {% term integration %} offers presence detection by looking at connected devices to an [Internet-Box](https://www.swisscom.ch/en/residential/help/device/internet-router.html) router from [Swisscom](https://www.swisscom.ch) which is an Internet provider in Switzerland. -<div class='note'> +{% note %} There are three models of Internet-Box (light, standard and plus). The platform has only been tested on the Internet-Box plus but the others should work as well because they have the same web interface. -</div> +{% endnote %} To use an Internet-Box router in your installation, add the following to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} diff --git a/source/_integrations/switch.mqtt.markdown b/source/_integrations/switch.mqtt.markdown index 267ffcf1ef3..1ac9b513e7a 100644 --- a/source/_integrations/switch.mqtt.markdown +++ b/source/_integrations/switch.mqtt.markdown @@ -215,11 +215,9 @@ value_template: type: template {% endconfiguration %} -<div class='note warning'> - +{% important %} Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics. - -</div> +{% endimportant %} ## Examples diff --git a/source/_integrations/switch.rest.markdown b/source/_integrations/switch.rest.markdown index 17bb503a0e7..fc16207d8a4 100644 --- a/source/_integrations/switch.rest.markdown +++ b/source/_integrations/switch.rest.markdown @@ -98,9 +98,9 @@ verify_ssl: default: true {% endconfiguration %} -<div class='note warning'> +{% important %} Make sure that the URL matches exactly your endpoint or resource. -</div> +{% endimportant %} ## Example diff --git a/source/_integrations/switchbot.markdown b/source/_integrations/switchbot.markdown index e26c78592b1..97d8ac7d965 100644 --- a/source/_integrations/switchbot.markdown +++ b/source/_integrations/switchbot.markdown @@ -93,9 +93,9 @@ Password: description: SwitchBot account password {% endconfiguration_basic %} -<div class='note warning'> +{% important %} This integration doesn't support SSO accounts (Login with Google, etc.) only username and password accounts. -</div> +{% endimportant %} ### Enter the lock encryption key manually diff --git a/source/_integrations/switchbot_cloud.markdown b/source/_integrations/switchbot_cloud.markdown index 3bacae231bb..afac48dd138 100644 --- a/source/_integrations/switchbot_cloud.markdown +++ b/source/_integrations/switchbot_cloud.markdown @@ -44,10 +44,10 @@ Please note, device names configured in the SwitchBot app are transferred into H ## Important considerations -<div class='note warning'> +{% note %} Each sensor will request a status update from the SwitchBot Cloud API once every 10 minutes (600 seconds). The SwitchBot Cloud API limits users to 10,000 requests per day. -</div> +{% endnote %} -<div class='note warning'> +{% warning %} For IR Appliances, the state is inferred from previous commands in Home Assistant and might not reflect reality if you use other ways to control the device. -</div> +{% endwarning %} diff --git a/source/_integrations/synology_dsm.markdown b/source/_integrations/synology_dsm.markdown index e94ea8c6a07..14fffc05fb4 100644 --- a/source/_integrations/synology_dsm.markdown +++ b/source/_integrations/synology_dsm.markdown @@ -31,21 +31,17 @@ The Synology DSM integration provides access to various statistics from your [Sy {% include integrations/config_flow.md %} -<div class='note warning'> - +{% warning %} This sensor will wake up your Synology NAS if it's in hibernation mode. You can change the scan interval within the configuration options (default is 15 min). Having cameras or the Home mode toggle from [Surveillance Station](https://www.synology.com/en-us/surveillance) will fetch every 30 seconds. Disable those entities if you don't want your NAS to be fetched as frequently. +{% endwarning %} -</div> - -<div class='note'> - +{% important %} When SSDP is activated on a NAS with two or more NICs with different IP addresses on the same subnet an adoption loop will occur. The NAS will be detected several times with different IP addresses and the integration will adopt the "newly" detected IP causing a reload. To resolve this either <a href="https://kb.synology.com/en-id/DSM/help/DSM/AdminCenter/file_service_advanced_introduction?version=7" target="_blank">deactivate SSDP on the NAS</a> or use NIC bonding so that only one IP address is present. - -</div> +{% endimportant %} ## Separate User Configuration @@ -61,9 +57,9 @@ If you have the "Enforce 2-step verification for the following users" option che Make sure to log out of your "normal" user's account and then login with the separate user you created specifically for Home Assistant. DSM will walk you through the process of setting up the one-time password for this user which you'll then be able to use in Home Assistant's frontend configuration screen. -<div class='note'> +{% note %} If you denied access to all locations and applications it is normal to receive a message indicating you do not have access to DSM when trying to login with this separate user. As noted above, you do not need access to the DSM and Home Assistant will still be able to read statistics from your NAS. -</div> +{% endnote %} ## Sensors @@ -99,11 +95,9 @@ Entities reporting status, total size (TB), used size (TB), % of volume used, av Entity reporting the security status of the NAS. -<div class='note'> - +{% note %} The security status corresponds with the analysis of the DSM Security Advisor, e.g., an `outOfDate` state for the `Update` attribute not only reflects the update status of the installed DSM version but also the status of the installed DSM packages. - -</div> +{% endnote %} ### Disk sensors diff --git a/source/_integrations/tag.markdown b/source/_integrations/tag.markdown index f74e3d8d8d1..615a3908851 100644 --- a/source/_integrations/tag.markdown +++ b/source/_integrations/tag.markdown @@ -29,9 +29,9 @@ The easiest way to get started with tags is to use NFC tags ([stickers](https:// <lite-youtube videoid="Xc120lClUgA" videotitle="Writing a tag (iOS)" posterquality="maxresdefault"></lite-youtube> -<div class='note' data-title='for iPhone users'> +{% important %} Only iPhone XS, XR and iPhone 11 or later support background NFC tag reading. -</div> +{% endimportant %} <lite-youtube videoid="xE7wm1bxRLs" videotitle="Writing a tag (Android)" posterquality="maxresdefault"></lite-youtube> diff --git a/source/_integrations/tailscale.markdown b/source/_integrations/tailscale.markdown index b1fa85a9ffd..279db85f589 100644 --- a/source/_integrations/tailscale.markdown +++ b/source/_integrations/tailscale.markdown @@ -23,16 +23,14 @@ The Tailscale integration integrates the [Tailscale](https://www.tailscale.com) with Home Assistant; giving you the possibility to monitor and automate on the state of the devices in your Tailscale VPN network (Tailnet). -<div class="note"> - +{% important %} This integration **DOES NOT** make your Home Assistant accessible via Tailscale VPN remotely! If you want to access your Home Assistant instance remotely, you will need to install Tailscale itself on your own. For instructions on how to do this, please consult the [Tailscale documentation](https://tailscale.com/kb/). - -</div> +{% endimportant %} ## Prerequisites diff --git a/source/_integrations/tankerkoenig.markdown b/source/_integrations/tankerkoenig.markdown index 2e2c37659d9..a13e991a25f 100755 --- a/source/_integrations/tankerkoenig.markdown +++ b/source/_integrations/tankerkoenig.markdown @@ -25,6 +25,6 @@ To use this sensor you need an API key from tankerkoenig. Go to [tankerkoenig AP {% include integrations/config_flow.md %} -<div class='note'> +{% important %} The Terms & Conditions of tankerkoenig.de specify that the API is not meant for massive data fetching, but it does not explicitly mention a limit. Having a maximum of 10 monitored fuel stations is recommended, and a warning will be issued otherwise. -</div> +{% endimportant %} diff --git a/source/_integrations/telegram.markdown b/source/_integrations/telegram.markdown index c534277d85b..0fa0feec7c4 100644 --- a/source/_integrations/telegram.markdown +++ b/source/_integrations/telegram.markdown @@ -118,9 +118,9 @@ $ python3 123456789 ``` -<div class='note'> +{% tip %} If you want to add new chat IDs then you will need to disable the active configuration to actually see the result with the IDs, otherwise you may only get empty results array. -</div> +{% endtip %} **Method 4:** You can also get the chat ID from the Home Assistant logs. If you have set up the bot already, you can send a message to your bot from an unauthorized ID and you will see an error entry in the log containing the ID. @@ -267,7 +267,7 @@ inline_keyboard: type: list {% endconfiguration %} -<div class='note'> +{% important %} Since Home Assistant version 0.48 you have to [whitelist the source folder](/integrations/homeassistant/#allowlist_external_dirs) of the file you want to include in the notification. @@ -280,7 +280,7 @@ homeassistant: - /home/kenji/data ``` -</div> +{% endimportant %} ### Video support diff --git a/source/_integrations/tellduslive.markdown b/source/_integrations/tellduslive.markdown index fff4e120dc7..e62e25fa8d6 100644 --- a/source/_integrations/tellduslive.markdown +++ b/source/_integrations/tellduslive.markdown @@ -29,11 +29,9 @@ related: The `tellduslive` {% term integration %} let you connect to the [Telldus Live](https://live.telldus.com) API. It's cloud platform that connects to your Tellstick Net or Tellstick ZNet connected gear at home. -<div class='note'> - -Note that you need a [Telldus Premium](https://telldus.com/en/telldus-premium/) subscription to access the Cloud API (https://telldus.com/en/important-announcement-english/). - -</div> +{% important %} +You need a [Telldus Premium](https://telldus.com/en/telldus-premium/) subscription to access the Cloud API (https://telldus.com/en/important-announcement-english/). +{% endimportant %} Local API supports only one device at this stage. Local API is only supported with the Znet Lite products, the older hardware (such as Tellstick Net) does not support local API. diff --git a/source/_integrations/template.markdown b/source/_integrations/template.markdown index 570377f2a6d..51d75b3678a 100644 --- a/source/_integrations/template.markdown +++ b/source/_integrations/template.markdown @@ -418,9 +418,9 @@ State-based and trigger-based template entities have the special template variab When there are entities present in the template and no triggers are defined, the template will be re-rendered when one of the entities changes states. To avoid this taking up too many resources in Home Assistant, rate limiting will be automatically applied if too many states are observed. -<p class='note'> +{% tip %} <a href='#trigger-based-template-sensors'>Define a trigger</a> to avoid a rate limit and get more control over entity updates. -</p> +{% endtip %} When `states` is used in a template by itself to iterate all states on the system, the template is re-rendered each time any state changed event happens if any part of the state is accessed. When merely counting states, the template diff --git a/source/_integrations/tensorflow.markdown b/source/_integrations/tensorflow.markdown index 356134cd467..511a5ccb798 100644 --- a/source/_integrations/tensorflow.markdown +++ b/source/_integrations/tensorflow.markdown @@ -14,9 +14,9 @@ related: The TensorFlow image processing {% term integration %} allows you to detect and recognize objects in a camera image using [TensorFlow](https://www.tensorflow.org/). The state of the entity is the number of objects detected, and recognized objects are listed in the `summary` attribute along with quantity. The `matches` attribute provides the confidence `score` for recognition and the bounding `box` of the object for each detection category. -<div class='note'> +{% important %} This integration is only available on Home Assistant Core installation types. Unfortunately, it cannot be used with Home Assistant OS, Supervised or Container. -</div> +{% endimportant %} ## Prerequisites diff --git a/source/_integrations/text.mqtt.markdown b/source/_integrations/text.mqtt.markdown index 28154b23ab7..c8b36f76dff 100644 --- a/source/_integrations/text.mqtt.markdown +++ b/source/_integrations/text.mqtt.markdown @@ -189,11 +189,9 @@ value_template: type: template {% endconfiguration %} -<div class='note warning'> - +{% important %} Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics. - -</div> +{% endimportant %} ## Examples diff --git a/source/_integrations/thread.markdown b/source/_integrations/thread.markdown index 590f18d8930..31a55e17fc1 100644 --- a/source/_integrations/thread.markdown +++ b/source/_integrations/thread.markdown @@ -220,11 +220,9 @@ Home Assistant discovers all Thread border routers in your network because they The intention of the **Preferred network** in Home Assistant is that it will be used as the default network when adding Thread⁻based devices. -<div class="note"> - +{% note %} The **preferred network** function isn't completely implemented yet. In particular, when adding {% term Matter %} devices through the companion apps, the preferred network of the mobile device is being used. - -</div> +{% endnote %} #### Making a network your preferred network diff --git a/source/_integrations/timer.markdown b/source/_integrations/timer.markdown index cefa8f42d82..c934fb949a7 100644 --- a/source/_integrations/timer.markdown +++ b/source/_integrations/timer.markdown @@ -14,13 +14,11 @@ The `timer` integration aims to simplify automations based on (dynamic) duration When a timer finishes or gets canceled the corresponding events are fired. This allows you to differentiate if a timer has switched from `active` to `idle` because the given duration has elapsed or it has been canceled. To control timers in your automations you can use the services mentioned below. When calling the `start` service on a timer that is already running, it resets the duration it will need to finish and restarts the timer without triggering a canceled or finished event. This, for example, makes it easy to create timed lights that get triggered by motion. Starting a timer triggers a started event unless the timer is paused, in that case, it triggers a restarted event. -<div class='note'> - +{% note %} Timers will be restored to their correct state and time on Home Assistant startup and restarts when configured with the `restore` option. However, automations using the `timer.finished` event **will not** trigger if the timer expires when Home Assistant is not running. - -</div> +{% endnote %} ## Configuration diff --git a/source/_integrations/traccar.markdown b/source/_integrations/traccar.markdown index ebbbd02e73e..863a985c7b3 100644 --- a/source/_integrations/traccar.markdown +++ b/source/_integrations/traccar.markdown @@ -17,11 +17,9 @@ ha_integration_type: integration `Traccar` uses GPS for tracking and has support for over 1500 different types of devices. You can use the [Traccar Client](https://www.traccar.org/client/) app on a smartphone via `webhook`. -<div class="note"> - - Looking for documentation on how to communicate with a Traccar Server? See the [Traccar Server](/integrations/traccar_server/) integration documentation. - -</div> +{% tip %} +Looking for documentation on how to communicate with a Traccar Server? See the [Traccar Server](/integrations/traccar_server/) integration documentation. +{% endtip %} To configure Traccar Client, you must set it up via the integrations panel in the configuration screen. This will give you the webhook URL to use during mobile device configuration. This URL has to be set in the Traccar app. diff --git a/source/_integrations/traccar_server.markdown b/source/_integrations/traccar_server.markdown index 63454beef58..3cd49328783 100644 --- a/source/_integrations/traccar_server.markdown +++ b/source/_integrations/traccar_server.markdown @@ -20,11 +20,9 @@ ha_integration_type: integration Traccar uses GPS for tracking and has support for over 1500 different types of devices. You can use the Traccar Server integration to communicate with your own [Traccar Server](https://www.traccar.org/server/), which is also available as [Home Assistant add-on](https://my.home-assistant.io/redirect/supervisor_addon/?addon=a0d7b954_traccar). -<div class="note"> - - Looking for documentation on how to setup the Traccar Client with webhooks in Home Assistant? See the [Traccar Client](/integrations/traccar/) integration documentation. - -</div> +{% tip %} +Looking for documentation on how to setup the Traccar Client with webhooks in Home Assistant? See the [Traccar Client](/integrations/traccar/) integration documentation. +{% endtip %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/tractive.markdown b/source/_integrations/tractive.markdown index dee5a9b5317..e4706ae773c 100644 --- a/source/_integrations/tractive.markdown +++ b/source/_integrations/tractive.markdown @@ -30,9 +30,9 @@ To use the integration you must be a premium tractive client. {% include integrations/config_flow.md %} -<div class="note"> +{% important %} Due to Tractive API limitations, trackers (pets) that are shared from another account to your account are not visible in Home Assistant. You need to configure all Tractive accounts from which trackers (pets) come from with Home Assistant. -</div> +{% endimportant %} ## Integration entities diff --git a/source/_integrations/tradfri.markdown b/source/_integrations/tradfri.markdown index e3ffea13499..37871bcd62c 100644 --- a/source/_integrations/tradfri.markdown +++ b/source/_integrations/tradfri.markdown @@ -29,13 +29,13 @@ The IKEA TRÅDFRI integration allows you to connect your IKEA Trådfri Gateway t You will be prompted to configure the gateway through the Home Assistant interface. The configuration process is very simple: when prompted, enter the security key printed on the sticker on the bottom of the IKEA Trådfri Gateway, then click *configure*. -<div class='note'> +{% tip %} If you see an "Unable to connect" message, restart the gateway and try again. Don't forget to assign a permanent IP address to your IKEA Trådfri Gateway on your router or DHCP server. -</div> +{% endtip %} -<div class='note'> - There is currently no native support for the Dirigera hub released in October, 2022. -</div> +{% note %} +There is currently no native support for the Dirigera hub released in October, 2022. +{% endnote %} ## Troubleshooting @@ -53,9 +53,9 @@ Then restart Home Assistant. When prompted, enter the security key and click *co ### Compilation issues -<div class='note'> - This does not apply to Home Assistant running in Docker Containers, including the default Home Assistant install. -</div> +{% note %} +This does not apply to Home Assistant running in Docker Containers, including the default Home Assistant install. +{% endnote %} Please make sure you have `autoconf` installed (`$ sudo apt-get install autoconf`) if you want to use this integration. Also, installing some dependencies might take considerable time (more than one hour) on slow devices. diff --git a/source/_integrations/tts.markdown b/source/_integrations/tts.markdown index e0258a10786..5389b41e802 100644 --- a/source/_integrations/tts.markdown +++ b/source/_integrations/tts.markdown @@ -131,11 +131,9 @@ $ curl -X POST -H "Authorization: Bearer <ACCESS TOKEN>" \ ## Troubleshooting -<div class='note'> - +{% important %} Depending on your setup, you might need to set an external URL (`external_url`) inside the [configuration](/integrations/homeassistant/#external_url). - -</div> +{% endimportant %} The following sections describe some of the problems encountered with media devices. diff --git a/source/_integrations/uk_transport.markdown b/source/_integrations/uk_transport.markdown index 720e22c7c76..d1614a923e9 100644 --- a/source/_integrations/uk_transport.markdown +++ b/source/_integrations/uk_transport.markdown @@ -16,11 +16,9 @@ related: The `uk_transport` {% term integration %} will display the time in minutes until the next departure in a specified direction from of a configured train station or bus stop. The sensor uses [transportAPI](https://www.transportapi.com/) to query live departure data and requires a developer application ID and key which can be obtained [here](https://developer.transportapi.com/). The [free tier](https://www.transportapi.com/blog/2022/08/introducing-the-home-use-plan-for-transportapi/) allows 30 requests a day, which is sufficient for a single sensor refreshing every 48 minutes. -<div class='note warning'> - +{% note %} Additional sensors can be added but at the expense of a reduced refresh rate. 2 sensors can be updated every 2*48 = 96 minutes, and so on. Calculating and setting this rate is automatically handles by the integration. - -</div> +{% endnote %} Queries are entered as a list, with the two transport modes available being `bus` and `train`. diff --git a/source/_integrations/unifiprotect.markdown b/source/_integrations/unifiprotect.markdown index 74799a69953..919ae912d3c 100644 --- a/source/_integrations/unifiprotect.markdown +++ b/source/_integrations/unifiprotect.markdown @@ -58,13 +58,11 @@ UCKP with Firmware v1.x **do NOT run UniFi OS**, you must upgrade to firmware [` The absolute **minimal** software version is [`v1.20.0`](https://community.ui.com/releases/UniFi-Protect-Application-1-20-0/d43c0905-3fb4-456b-a7ca-73aa830cb011) for UniFi Protect. If you have an older version, you will get errors trying to set up the integration. However, the general advice is the latest 2 minor versions of UniFi Protect and hardware supported by those are supported. -<div class='note warning'> - +{% important %} **Early Access and Release Candidate versions are not supported by Home Assistant.** Using Early Access Release Candidate versions of UniFi Protect or UniFi OS will likely cause your UniFi Protect {% term integration %} to break unexpectedly. If you choose to opt into either the Early Access or the Release Candidate release channel and anything breaks in Home Assistant, you will need to wait until that version goes to the official Stable Release channel before it is expected to work. - -</div> +{% endimportant %} ### Local user @@ -102,26 +100,22 @@ check that this is done. To check and enable the feature: All known UniFi Protect devices should be supported. Each UniFi Protect device will get a variety of entities added for each of the different {% term entity %} platforms. -<div class='note'> - +{% note %} **Permissions**: The below sections on the features available to your Home Assistant instance assume you have full write access to each device. If the user you are using has limited access to some devices, you will get fewer entities and in many cases, get a read-only sensor instead of an editable switch/select/number {% term entity %}. - -</div> +{% endnote %} ### UniFi Protect cameras -<div class='note'> - +{% note %} **Smart Detections**: The following cameras have Smart Detections: - All "AI" series cameras. This includes the [AI 360](https://store.ui.com/collections/unifi-protect/products/unifi-protect-ai-360) and the [AI Bullet](https://store.ui.com/collections/unifi-protect/products/uvc-ai-bullet). - All "G4" series cameras. This includes the [G4 Doorbell](https://store.ui.com/collections/unifi-protect/products/uvc-g4-doorbell), [G4 Bullet](https://store.ui.com/collections/unifi-protect/products/uvc-g4-bullet), [G4 Pro](https://store.ui.com/collections/unifi-protect/products/uvc-g4-pro) and [G4 Instant](https://store.ui.com/collections/unifi-protect/products/camera-g4-instant). G3 Series cameras do _not_ have Smart detections. - -</div> +{% endnote %} Each UniFi Protect camera will get a device in Home Assistant with the following: diff --git a/source/_integrations/upc_connect.markdown b/source/_integrations/upc_connect.markdown index 6a7833b9717..3138140f85c 100644 --- a/source/_integrations/upc_connect.markdown +++ b/source/_integrations/upc_connect.markdown @@ -19,9 +19,9 @@ related: The `upc_connect` {% term integration %} offers presence detection by looking at connected devices to a [Connect Box](https://www.upc.ch/en/internet/learn-about-internet/) from [Liberty Global](https://www.libertyglobal.com) (also known as UPC Cablecom in Switzerland) which is an Internet provider in Switzerland, Austria, the Netherlands (under Ziggo) and Hungary (under Vodafone). -<div class='note'> +{% important %} This integration works by logging into the router with a password. The router can only have one active session at any time, so if you want to access your router settings then stop Home Assistant first. -</div> +{% endimportant %} To use a Connect Box in your installation, add the following to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} diff --git a/source/_integrations/update.mqtt.markdown b/source/_integrations/update.mqtt.markdown index 9c2fa161468..63167874b2a 100644 --- a/source/_integrations/update.mqtt.markdown +++ b/source/_integrations/update.mqtt.markdown @@ -202,11 +202,9 @@ value_template: type: template {% endconfiguration %} -<div class='note warning'> - +{% important %} Make sure that your topic matches exactly. `some-topic/` and `some-topic` are different topics. - -</div> +{% endimportant %} ## Examples diff --git a/source/_integrations/utility_meter.markdown b/source/_integrations/utility_meter.markdown index 68389b49637..124bc28e623 100644 --- a/source/_integrations/utility_meter.markdown +++ b/source/_integrations/utility_meter.markdown @@ -24,9 +24,9 @@ From a user perspective, utility meters operate in cycles (usually monthly) for Some utility providers have different tariffs according to time/resource availability/etc. The utility meter enables you to define the various tariffs supported by your utility provider and accounts your consumptions in accordance. When tariffs are defined a new {% term entity %} will show up indicating the current tariff. In order to change the tariff, the user must call a service, usually through an automation that can be based in time or other external source (eg. a REST sensor). -<div class='note'> +{% note %} Sensors created with this {% term integration %} are persistent, so values are retained across restarts of Home Assistant. The first cycle for each sensor will be incomplete; a sensor tracking daily usage will start to be accurate the next day after the {% term integration %} was activated. A sensor tracking monthly usage will present accurate data starting the first of the next month after being added to Home Assistant. -</div> +{% endnote %} {% include integrations/config_flow.md %} {% configuration_basic %} @@ -137,9 +137,9 @@ always_available: type: boolean {% endconfiguration %} -<p class='note warning'> +{% important %} When using the `offset` configuration parameter, the defined period must not be longer than 28 days. -</p> +{% endimportant %} ### Time period dictionary example diff --git a/source/_integrations/uvc.markdown b/source/_integrations/uvc.markdown index cd44234fc1f..997db67b53e 100644 --- a/source/_integrations/uvc.markdown +++ b/source/_integrations/uvc.markdown @@ -64,6 +64,6 @@ ssl: default: false {% endconfiguration %} -<div class='note'> +{% important %} When using an API_KEY to access cameras controlled by Ubiquiti's NVR Software, the associated user account MUST have at least Administrator privileges within the NVR Software in order for new cameras to be added into Home Assistant. Once the entities have been created in Home Assistant, privileges for the user account can be lowered. -</div> +{% endimportant %} diff --git a/source/_integrations/valve.mqtt.markdown b/source/_integrations/valve.mqtt.markdown index d1c05dab534..5f373bea4e7 100644 --- a/source/_integrations/valve.mqtt.markdown +++ b/source/_integrations/valve.mqtt.markdown @@ -277,13 +277,11 @@ value_template: type: template {% endconfiguration %} -<div class="note"> - +{% note %} MQTT valve expects position values to be in the range of 0 to 100, where 0 indicates a closed position and 100 indicates a fully open position. If `position_open` or `position_closed` are set to a different range (for example, 40 to 140), when sending a command to the device, the range will be adjusted to the device range. For example, position 0 will send a value of 40 to device. When the device receives a position payload, it will be adjusted back to the 0 to 100 range. In our example, the device value of 40 will report valve position 0. `position_open` and `position_closed` can also be used to reverse the direction of the device: If `position_closed` is set to 100 and `position_open` is set to `0`, the device operation will be inverted. For example, when setting the position to 40, a value of 60 will be sent to the device. - -</div> +{% endnote %} ## Examples diff --git a/source/_integrations/vera.markdown b/source/_integrations/vera.markdown index e14368dc786..a4a0ce160f6 100644 --- a/source/_integrations/vera.markdown +++ b/source/_integrations/vera.markdown @@ -50,11 +50,9 @@ and will be automatically added when HA connects to your Vera controller. {% include integrations/config_flow.md %} -<div class='note'> - - It is recommended to assign a static IP address to your Vera Controller. This ensures that it won't change IP addresses, so you won't have to change the `vera_controller_url` if it reboots and comes up with a different IP address. See your router's manual for details on how to set this up. If you need the MAC address of your Vera, check the label on the bottom. - -</div> +{% tip %} +It is recommended to assign a static IP address to your Vera Controller. This ensures that it won't change IP addresses, so you won't have to change the `vera_controller_url` if it reboots and comes up with a different IP address. See your router's manual for details on how to set this up. If you need the MAC address of your Vera, check the label on the bottom. +{% endtip %} ## Options diff --git a/source/_integrations/viaggiatreno.markdown b/source/_integrations/viaggiatreno.markdown index 37446605202..e96cacca720 100644 --- a/source/_integrations/viaggiatreno.markdown +++ b/source/_integrations/viaggiatreno.markdown @@ -22,11 +22,9 @@ The first is available just looking at the [ViaggiaTreno](http://viaggiatreno.it `http://www.viaggiatreno.it/infomobilita/resteasy/viaggiatreno/autocompletaStazione/<Station name>` (e.g., `http://www.viaggiatreno.it/infomobilita/resteasy/viaggiatreno/autocompletaStazione/ROMA` will list all station names (with ids) that starts with *ROMA*). -<div class='note'> - -Note that the `station_id` is referred to the train's **departing station**. If a train number does not match with the station id, no data will be returned to the sensor. - -</div> +{% note %} +The `station_id` is referred to the train's **departing station**. If a train number does not match with the station id, no data will be returned to the sensor. +{% endnote %} Then add the data to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} @@ -54,15 +52,13 @@ train_name: type: string {% endconfiguration %} -<div class='note'> +{% note %} In a future implementation, the station name could be used to automatically search best-matching station id, without the need to specify it. -</div> +{% endnote %} The public timetables are coming from [ViaggiaTreno](http://viaggiatreno.it). -<div class='note'> - +{% note %} Instructions (in Italian) for the API are available at: https://github.com/bluviolin/TrainMonitor/wiki/API-del-sistema-Viaggiatreno - -</div> +{% endnote %} diff --git a/source/_integrations/vilfo.markdown b/source/_integrations/vilfo.markdown index ef9daff5aaa..040162eb564 100644 --- a/source/_integrations/vilfo.markdown +++ b/source/_integrations/vilfo.markdown @@ -26,8 +26,6 @@ It currently supports reporting the current load of the device in percent and th The access token for the API can be obtained through the Vilfo web-UI in the pane named "general". Visit [the official API documentation](https://www.vilfo.com/apidocs/#header-authorization) for more information on how to find your token. -<div class="note warning"> - +{% important %} In version 1.0.13 of the Vilfo firmware, access tokens are invalidated when a new login to the web UI is made. To prevent web UI logins from interfering with the API calls, you can create a separate user solely for API purposes and use its access token. - -</div> +{% endimportant %} diff --git a/source/_integrations/vizio.markdown b/source/_integrations/vizio.markdown index d845eb8ffa8..2d4ced2fac0 100644 --- a/source/_integrations/vizio.markdown +++ b/source/_integrations/vizio.markdown @@ -24,11 +24,9 @@ If `zeroconf` discovery is enabled, your device will get discovered automaticall ### Install `pyvizio` locally -<div class='note'> - +{% note %} If the `pip3` command is not found, try `pip` instead - -</div> +{% endnote %} - To install, run `pip3 install pyvizio` in your terminal. - If `pyvizio` is already installed locally, make sure you are using the latest version by running `pip3 install --upgrade pyvizio` in your terminal. diff --git a/source/_integrations/vlc.markdown b/source/_integrations/vlc.markdown index 9097c3a5e8b..fd9e162cd6f 100644 --- a/source/_integrations/vlc.markdown +++ b/source/_integrations/vlc.markdown @@ -16,11 +16,9 @@ related: The `vlc` platform allows you to control [VLC media player](https://www.videolan.org/vlc/index.html). -<div class='note'> - +{% important %} The **VLC media player** {% term integration %}, is currently only available for installations that are based on the Home Assistant Core in a Python virtual environment. - -</div> +{% endimportant %} ## Configuration diff --git a/source/_integrations/vodafone_station.markdown b/source/_integrations/vodafone_station.markdown index 7229ac0e6c3..5a33f943b1e 100644 --- a/source/_integrations/vodafone_station.markdown +++ b/source/_integrations/vodafone_station.markdown @@ -22,9 +22,9 @@ ha_quality_scale: silver The **Vodafone Station** {% term integration %} allows you to control your [Vodafone Station](https://www.vodafone.it/privati/area-supporto/assistenza-dispositivi/vodafone-station.html) based router. -<div class="note"> +{% note %} The integration supports only Sercomm models so far. -</div> +{% endnote %} There is support for the following platform types within Home Assistant: diff --git a/source/_integrations/volumio.markdown b/source/_integrations/volumio.markdown index 909c7b4b839..f69335b6b1e 100644 --- a/source/_integrations/volumio.markdown +++ b/source/_integrations/volumio.markdown @@ -19,6 +19,6 @@ The **Volumio** {% term integration %} allows you to control a [Volumio](https:/ {% include integrations/config_flow.md %} -<div class='note'> +{% note %} Volumio versions 2.799 and below do not have a unique id when manually configured, so you will not be able to rename your {% term entity %} or add your device to an area. If discovery does not work for you, it is advised to upgrade Volumio before configuring. -</div> +{% endnote %} diff --git a/source/_integrations/vultr.markdown b/source/_integrations/vultr.markdown index abd76fbe334..62f370a35b9 100644 --- a/source/_integrations/vultr.markdown +++ b/source/_integrations/vultr.markdown @@ -31,9 +31,9 @@ There is currently support for the following device types within Home Assistant: Obtain your API key from your [Vultr Account](https://my.vultr.com/settings/#settingsapi). -<div class='note'> +{% important %} Ensure you allow the public IP of Home Assistant under the Access Control heading. -</div> +{% endimportant %} To integrate your Vultr subscriptions with Home Assistant, add the following section to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} @@ -59,11 +59,9 @@ The `vultr` binary sensor platform allows you to monitor your [Vultr](https://ww To use this binary sensor, you first have to set up your Vultr hub. -<div class='note'> - +{% note %} The following examples assume a subscription that has an ID of `123456` and a label of `Web Server` - -</div> +{% endnote %} Minimal `configuration.yaml` (produces `binary_sensor.vultr_web_server`): @@ -103,11 +101,9 @@ The `vultr` sensor platform will allow you to view current bandwidth usage and p To use this sensor, you must set up your Vultr hub. -<div class='note'> - +{% note %} The following examples assume a subscription that has an ID of `123456` and a label of `Web Server` - -</div> +{% endnote %} Minimal {% term "`configuration.yaml`" %} (produces `sensor.vultr_web_server_current_bandwidth_used` and `sensor.vultr_web_server_pending_charges`): diff --git a/source/_integrations/wake_on_lan.markdown b/source/_integrations/wake_on_lan.markdown index 74624f6b753..44f71468418 100644 --- a/source/_integrations/wake_on_lan.markdown +++ b/source/_integrations/wake_on_lan.markdown @@ -55,10 +55,10 @@ Sample service data: } ``` -<div class='note'> +{% note %} This usually only works if the target device is connected to the same network. Routing the magic packet to a different subnet requires a special configuration on your router or may not be possible. The service to route the packet is most likely named "IP Helper". It may support Wake on LAN, but not all routers support this. -</div> +{% endnote %} ## Switch diff --git a/source/_integrations/water_heater.markdown b/source/_integrations/water_heater.markdown index be9c62129d1..f58071ad053 100644 --- a/source/_integrations/water_heater.markdown +++ b/source/_integrations/water_heater.markdown @@ -26,11 +26,9 @@ water_heater: Available services: `water_heater.set_temperature`, `water_heater.turn_away_mode_on`, `water_heater.turn_away_mode_off`, `water_heater.set_operation_mode` -<div class='note'> - +{% tip %} Not all water heater services may be available for your platform. Be sure to check the available services Home Assistant has enabled by checking **Developer Tools** -> **Services**. - -</div> +{% endtip %} ### Service `water_heater.set_temperature` diff --git a/source/_integrations/watttime.markdown b/source/_integrations/watttime.markdown index a3b545eb8fc..147a31e5d20 100644 --- a/source/_integrations/watttime.markdown +++ b/source/_integrations/watttime.markdown @@ -38,9 +38,9 @@ Note that the `org` value can be anything you like – it doesn't need to repres ## Sensors -<div class='note info'> +{% note %} The sensors available to you will depend on the type of WattTime subscription you have. You can reach out to WattTime to upgrade your subscription via [their website](https://www.watttime.org/contact/). -</div> +{% endnote %} | Name | Subscription Level | Meaning | | ------------------------------------- | ------------------ | ----------------------------------------------------------------------------------------------------------- | diff --git a/source/_integrations/weatherflow.markdown b/source/_integrations/weatherflow.markdown index 9135a8c4a81..de3389f3f61 100644 --- a/source/_integrations/weatherflow.markdown +++ b/source/_integrations/weatherflow.markdown @@ -18,9 +18,9 @@ ha_integration_type: hub The **WeatherFlow** {% term integration %} is a local-only {% term integration %} that reads weather data from all [WeatherFlow Tempest](https://weatherflow.com/tempest-weather-system/) compatible weather station on the local network. -<div class='note'> +{% note %} You may see slight deviations between the values reported in Home Assistant and the values in the WeatherFlow App. This is because the WeatherFlow app considers both forecasts and neighboring weather stations in addition to the local data used in this {% term integration %}. -</div> +{% endnote %} {% include integrations/config_flow.md %} diff --git a/source/_integrations/webostv.markdown b/source/_integrations/webostv.markdown index 347450df746..3421c30261b 100644 --- a/source/_integrations/webostv.markdown +++ b/source/_integrations/webostv.markdown @@ -38,9 +38,9 @@ Common for webOS 3.0 and higher would be to use WakeOnLan feature. To use this f On newer models (2017+), WakeOnLan may need to be enabled in the TV settings by going to Settings > General > Mobile TV On > Turn On Via WiFi [instructions](https://support.quanticapps.com/hc/en-us/articles/115005985729-How-to-turn-on-my-LG-Smart-TV-using-the-App-WebOS-). -<div class='note'> +{% important %} This usually only works if the TV is connected to the same network. Routing the WakeOnLan packet to a different subnet requires special configuration on your router or may not be possible. -</div> +{% endimportant %} You can create an automation from the user interface, from the device create a new automation and select the **Device is requested to turn on** automation. Automations can also be created using an automation action: diff --git a/source/_integrations/workday.markdown b/source/_integrations/workday.markdown index ca831ad2e0c..9b42586b410 100644 --- a/source/_integrations/workday.markdown +++ b/source/_integrations/workday.markdown @@ -31,11 +31,9 @@ Check the [country list](https://github.com/dr-prodigy/python-holidays#available The keyword "Holidays" is used for public holidays identified by the holidays module and holidays added by the "Add holidays" configuration option. -<div class='note warning'> - +{% important %} Take note of the "Holidays" keyword. Your first instinct might be to add it to the "Excludes" configuration, thinking it means skipping the holidays. But it is meant to exclude the days in the holiday list from the workdays. So, when you exclude "Holidays" and a workday falls on that day, that workday is excluded, and the sensor will be **off**. If you want every workday flagged with no regard to holidays, ensure that there is something in your "Excludes" configuration _other_ than "Holidays". - -</div> +{% endimportant %} ## Specific field information diff --git a/source/_integrations/wsdot.markdown b/source/_integrations/wsdot.markdown index b6626190449..52871938780 100644 --- a/source/_integrations/wsdot.markdown +++ b/source/_integrations/wsdot.markdown @@ -87,9 +87,9 @@ Some common examples include: 98 HOV Bellevue-Seattle via I-90 (WB REV) ``` -<div class='note info'> +{% note %} WSDOT does provide information about ferry schedules, mountain passes, tolls, etc. but so far only Travel Time data is available in this platform. -</div> +{% endnote %} Here's an example of the sensor in use: diff --git a/source/_integrations/xbox.markdown b/source/_integrations/xbox.markdown index 7db8af298f2..d86a78049f2 100644 --- a/source/_integrations/xbox.markdown +++ b/source/_integrations/xbox.markdown @@ -28,11 +28,9 @@ Home Assistant authenticates with Xbox Live through OAuth2 using the Home Assist Note that for the media player and remote entities to be added your Xbox will need to have remote features enabled via **Settings -> Devices & connections -> Remote features** (you may need to upgrade your controller firmware). -<div class='note'> - +{% important %} Because it uses the Home Assistant Cloud account linking service you **must** have either `cloud:` or `default_config:` in your {% term "`configuration.yaml`" %}. - -</div> +{% endimportant %} ## Media player @@ -271,15 +269,15 @@ Just like the binary sensors, the Xbox sensor platform automatically keeps track The Xbox media source platform allows you to use the Media Browser panel to view both your own, and community, gameclips or screenshots for games that you have installed on any of your consoles. As with any other media source {% term integration %}, you are also able to send these clips to supported media players like Chromecast. -<div class="note"> +{% important %} It can take up to a couple of days for newly installed applications to appear in the media browser. -</div> +{% endimportant %} ## Manual configuration -<div class="note"> +{% warning %} These steps are not required, nor will they be supported if issues are encountered. -</div> +{% endwarning %} If you prefer not to use the Home Assistant account linking service, you may manually configure a local implementation if your instance is exposed externally over HTTPS using the following steps: diff --git a/source/_integrations/xiaomi.markdown b/source/_integrations/xiaomi.markdown index 7737c0efdb3..bdaa7eb0e54 100644 --- a/source/_integrations/xiaomi.markdown +++ b/source/_integrations/xiaomi.markdown @@ -27,25 +27,21 @@ In order to integrate the camera with Home Assistant, it is necessary to install Once installed, please ensure that you have enabled FTP. -<div class='note warning'> - +{% warning %} Currently, version 0.1.4-beta2 of the custom firmware is the highest supported. Firmwares higher than this version use [Pure-FTPd](https://www.pureftpd.org/project/pure-ftpd), which has a bug that prevents FFmpeg from correctly rendering video files. +{% endwarning %} -</div> - -<div class='note warning'> - +{% important %} Raspbian users: Don't forget to install `ffmpeg` support on your platform, otherwise, you'll not see video. +{% endimportant %} -</div> +{% note %} +The live stream writing by the camera is not a supported format when Home Assistant reads through FTP for Yi 720p and Xiaofang Cameras, so this platform retrieves the video which was saved 1 minute earlier. +{% endnote %} -<div class='note warning'> -The live stream writing by the camera is not a supported format when the hass reads through FTP for Yi 720p and Xiaofang Cameras, so this platform retrieves the video which was saved 1 minute earlier. -</div> - -<div class='note warning'> +{% tip %} If you enabled RTSP server, you can connect to your camera via other Home Assistant camera platforms. However, this RTSP server disables the ability to use the supremely-useful Mi Home app. In order to maintain both Home Assistant compatibility _and_ the native app, this platform retrieves videos via FTP. -</div> +{% endtip %} ## Configuring the platform @@ -93,11 +89,9 @@ ffmpeg_arguments: type: string {% endconfiguration %} -<div class='note'> - +{% important %} The default for `path:` will not work with all cameras. It may be needed that you add that key with the exact path for your device. - -</div> +{% endimportant %} ## Image quality diff --git a/source/_integrations/xiaomi_miio.markdown b/source/_integrations/xiaomi_miio.markdown index c2813807e7d..72788fdd3a6 100644 --- a/source/_integrations/xiaomi_miio.markdown +++ b/source/_integrations/xiaomi_miio.markdown @@ -57,11 +57,9 @@ and [Xiaomi IR Remote](#xiaomi-ir-remote). Please read the linked sections for t Devices need to be set up using the Mi Home app and not vendor-specific apps (e.g. Roborock). -<div class='note'> - +{% note %} For more complex network setups (e.g. VLANs), reference the [following documentation](https://python-miio.readthedocs.io/en/latest/troubleshooting.html#discover-devices-across-subnets) for additional information. - -</div> +{% endnote %} {% include integrations/config_flow.md %} @@ -917,9 +915,9 @@ These models use newer MiOT communication protocol. | Clean Mode | Turn on/off the clean mode | | Dry Mode | Turn on/off the dry mode | -<div class='note'> +{% note %} Clean mode and Motor speed can only be set when the device is turned on. -</div> +{% endnote %} ### Air Humidifier CB (zhimi.humidifier.cb1) @@ -1687,10 +1685,10 @@ Water Shortage\*\*: {% endconfiguration_basic %} -<div class="note"> -* Needs to be manually enabled once the {% term integration %} has been added. <br> -** Only enabled if the vacuum has a mop. -</div> +{% note %} +\* Needs to be manually enabled once the {% term integration %} has been added. <br> +\*\* Only enabled if the vacuum has a mop. +{% endnote %} ### Attributes @@ -2066,7 +2064,7 @@ If you are on a Windows or macOS device, you can use the [Get MiHome devices tok ### Alternative methods -<div class='note'> +{% note %} If using an Android device to retrieve the Access Token only `v5.4.49` of Mi Home is confirmed working (December 2019). Use `v5.4.49` of Mi Home locate a text file under the `Smarthome/logs` folder where the 32 character token is stored. There will likely be several text files in this directory, search all of them for the word 'token' and you should find it there. Be advised that the latest version of Mi Home does not store the token in clear text. <br/> <br/> @@ -2078,7 +2076,7 @@ These instructions are written for the Mi Home app - not for the new RoboRock ap <br/> <br/> This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot Vacuum, Mi Robot 2 (Roborock) Vacuum, Xiaomi Philips Lights and Xiaomi IR Remote. -</div> +{% endnote %} ### Android (not rooted) diff --git a/source/_integrations/xiaomi_tv.markdown b/source/_integrations/xiaomi_tv.markdown index c2ce0557419..cdcb1a5f619 100644 --- a/source/_integrations/xiaomi_tv.markdown +++ b/source/_integrations/xiaomi_tv.markdown @@ -30,9 +30,9 @@ media_player: - platform: xiaomi_tv ``` -<div class='note warning'> +{% important %} When starting or restarting Home Assistant make sure your TV is off. This is a flaw in the TV itself. -</div> +{% endimportant %} {% configuration %} host: @@ -58,6 +58,6 @@ media_player: name: YOUR_TV_NAME ``` -<div class='note info'> +{% note %} The platform will never turn your TV off. Instead, it will be put to sleep and woken up. This can be useful, because the selected source of the TV will remain the same. It will essentially turn your TV into a dumb TV. -</div> +{% endnote %} diff --git a/source/_integrations/xmpp.markdown b/source/_integrations/xmpp.markdown index d0c56ce2f03..f9ab77cef63 100644 --- a/source/_integrations/xmpp.markdown +++ b/source/_integrations/xmpp.markdown @@ -75,13 +75,10 @@ room: type: string {% endconfiguration %} -<div class='note'> - - Pre Home Assistant 0.81 `sleekxmpp` was used to connect to XMPP servers. `sleekxmpp` as of version 1.3.2, does not support > TLS v1. If you are running your own XMPP server (e.g., Prosody, ejabberd) make sure to allow using TLS v1. - - Home Assistant after 0.81 uses `slixmpp`, which also supports TLS v1.1 and TLS v1.2. - -</div> +{% note %} +Pre Home Assistant 0.81 `sleekxmpp` was used to connect to XMPP servers. `sleekxmpp` as of version 1.3.2, does not support > TLS v1. If you are running your own XMPP server (e.g., Prosody, ejabberd) make sure to allow using TLS v1. +Home Assistant after 0.81 uses `slixmpp`, which also supports TLS v1.1 and TLS v1.2. +{% endnote %} All Jabber IDs (JID) must include the domain. Make sure that the password matches the account provided as sender. @@ -110,13 +107,11 @@ Number 1 shows a classical, text-only message. The Title is optional, although i You can send images or files from locally stored files or remote web locations via Jabber's HTTP Upload feature. To send files and images, your jabber server must support [XEP_0363](https://xmpp.org/extensions/xep-0363.html). -<div class='note'> - +{% note %} Be aware that images are uploaded onto the Jabber server of your provider. They reside there un-encrypted and could be accessed by the server admins. Usually images are deleted after a few days.<br> <br> Home Assistant supports TLS encryption to ensure transport encryption. TLS is enforced by default. You can disable it with the [`tls`](#tls) flag -- which is not recommended. - -</div> +{% endnote %} Number 2 sends only an image, retrieved from the URL. The TLS connection to get the image is also not verified (use with caution). diff --git a/source/_integrations/xs1.markdown b/source/_integrations/xs1.markdown index f4109033faa..acac7ed0caa 100644 --- a/source/_integrations/xs1.markdown +++ b/source/_integrations/xs1.markdown @@ -61,17 +61,17 @@ password: ## Supported device types -<div class='note warning'> +{% note %} This {% term integration %} currently only covers part of the device types supported by the XS1 gateway, unsupported types are simply ignored. -</div> +{% endnote %} ### Sensors Any type of sensor is supported. -<div class='note warning'> +{% note %} If you are using climate devices the "current temp" sensor will be automatically used by the actuator (if named correctly). To make this work have a look at the actuator description below. -</div> +{% endnote %} ### Actuators diff --git a/source/_integrations/yandextts.markdown b/source/_integrations/yandextts.markdown index 2d6d2066f2f..964742b394a 100644 --- a/source/_integrations/yandextts.markdown +++ b/source/_integrations/yandextts.markdown @@ -16,9 +16,9 @@ related: The `yandextts` text-to-speech {% term integration %} uses [Yandex SpeechKit](https://tech.yandex.com/speechkit/) text-to-speech engine to read a text with natural sounding voices. -<div class='note warning'> +{% important %} This integration is working only with old API keys. For the new API keys, this integration cannot be used. -</div> +{% endimportant %} ## Configuration diff --git a/source/_integrations/yeelight.markdown b/source/_integrations/yeelight.markdown index 381ca2440e5..fcd157f378b 100644 --- a/source/_integrations/yeelight.markdown +++ b/source/_integrations/yeelight.markdown @@ -156,7 +156,7 @@ Per default, the bulb limits the number of requests per minute to 60, a limitati ### Initial setup -<div class='note'> +{% important %} Before trying to control your light through Home Assistant, you have to set up your bulb using the Yeelight app. ( [Android](https://play.google.com/store/apps/details?id=com.yeelight.cherry&hl=fr), [IOS](https://itunes.apple.com/us/app/yeelight/id977125608?mt=8) ). In the bulb property, you have to enable "LAN Control" (previously called "Developer mode"). LAN Control may only be available with the latest firmware installed on your bulb. Firmware can be updated in the application after connecting the bulb. @@ -165,13 +165,13 @@ Currently, there is no official way to change LAN mode. However, some methods mi - [Desktop app](https://community.home-assistant.io/t/the-easiest-method-to-enable-lan-developer-mode-on-xiaomi-bulb/727360) - CLI using the python-miio library: [1](https://community.home-assistant.io/t/integrate-mi-smart-led-bulb-easy-steps/312174), [2](https://community.home-assistant.io/t/integrate-mi-smart-led-bulb-warm-white-xmbgdp01ylk/290404) -</div> +{% endimportant %} ### Supported models -<div class='note warning'> +{% note %} This {% term integration %} is tested to work with the following models. If you have a different model and it is working, please let us know. -</div> +{% endnote %} | Model ID | Model number | Product name | |------------|--------------|--------------------------------------------------| diff --git a/source/_integrations/yeelightsunflower.markdown b/source/_integrations/yeelightsunflower.markdown index f372a993488..5ffbbad3af4 100644 --- a/source/_integrations/yeelightsunflower.markdown +++ b/source/_integrations/yeelightsunflower.markdown @@ -18,9 +18,9 @@ related: The `yeelightsunflower` {% term integration %} allows you to control your Yeelight Sunflower light bulbs with Home Assistant. -<div class='note warning'> +{% note %} The "Yeelight Sunflower" bulbs are not the same as the "Yeelight WiFi" bulbs. -</div> +{% endnote %} To enable your lights, add the following lines to your {% term "`configuration.yaml`" %} file. {% include integrations/restart_ha_after_config_inclusion.md %} @@ -39,6 +39,6 @@ host: type: string {% endconfiguration %} -<div class='note'> +{% note %} When the hub is loaded, your lights will appear as devices with their Zigbee IDs as part of the entity name. -</div> +{% endnote %} diff --git a/source/_integrations/yi.markdown b/source/_integrations/yi.markdown index 74542d108b5..b8225a874ee 100644 --- a/source/_integrations/yi.markdown +++ b/source/_integrations/yi.markdown @@ -31,27 +31,21 @@ If you have a 2019/2020 version camera use [yi-hack-MStar GitHub project](https: Once installed, please ensure that you have enabled FTP and Telnet on your device. -<div class='note warning'> - +{% important %} Currently, version 0.1.4-beta2 of the custom firmware is the highest supported without having to make additional modifications. Firmwares higher than this version use [Pure-FTPd](https://www.pureftpd.org/project/pure-ftpd), which has a bug that prevents FFmpeg from correctly rendering video files. To use higher firmware versions you must also follow [this workaround](https://github.com/shadow-1/yi-hack-v3/issues/129#issuecomment-361723075) to revert back to ftpd. +{% endimportant %} -</div> - -<div class='note warning'> - +{% tip %} If you use a version higher than 0.1.4-beta2, you can simply solve the FTP issue by creating a symlink to `/tmp` in the `/home/yi-hack-v4` directory (the directory name can be different depending on the version which you use). For example, access the Yi camera via SSH and type command: `ln -s /tmp tmp`. +{% endtip %} -</div> - -<div class='note warning'> -Raspbian users: don't forget to install ffmpeg support on your platform, otherwise, you'll not see video. -</div> - -<div class='note warning'> +{% important %} +Raspbian users: don't forget to install FFmpeg support on your platform, otherwise, you'll not see video. +{% endimportant %} +{% tip %} Some alternative Yi firmwares enable an experimental RTSP server, which will allow you to connect to your camera via other Home Assistant camera platforms. However, this RTSP server disables the ability to use the supremely-useful Yi Home app. In order to maintain both Home Assistant compatibility _and_ the native app, this platform retrieves videos via FTP. - -</div> +{% endtip %} ### Changing the FTP password diff --git a/source/_integrations/zabbix.markdown b/source/_integrations/zabbix.markdown index fe5ef010379..5a6b2bf3b3f 100644 --- a/source/_integrations/zabbix.markdown +++ b/source/_integrations/zabbix.markdown @@ -144,9 +144,9 @@ zabbix: The `zabbix` sensor platform let you monitor the current count of active triggers for your [Zabbix](https://www.zabbix.com/) monitoring instance. -<div class='note'> +{% important %} You must have the <a href="#configuration">Zabbix integration</a> configured to use those sensors. -</div> +{% endimportant %} To set it up, add the following information to your {% term "`configuration.yaml`" %} file: diff --git a/source/_integrations/zamg.markdown b/source/_integrations/zamg.markdown index 421903af56b..aab75757c85 100644 --- a/source/_integrations/zamg.markdown +++ b/source/_integrations/zamg.markdown @@ -48,6 +48,6 @@ This integration provides the following sensors: |Precipitation|Precipitation in mm| |Snow|Snow in cm| -<div class='note'> +{% note %} Not every station supports every sensor. -</div> +{% endnote %} diff --git a/source/_integrations/zha.markdown b/source/_integrations/zha.markdown index ae94afd965b..d9abb679838 100644 --- a/source/_integrations/zha.markdown +++ b/source/_integrations/zha.markdown @@ -134,15 +134,13 @@ Some other Zigbee coordinator hardware may not support a firmware that is capabl #### Warning about using Zigbee Coordinator over Wi-Fi/WAN/VPN -<div class="note warning"> - +{% caution %} Be aware that using a Zigbee Coordinator via a Serial-Proxy-Server (also known as Serial-to-IP bridge or Ser2Net remote adapter) over a Wi-Fi, WAN, or VPN connection is not recommended. Serial protocols used by the Zigbee Coordinator do not have enough robustness, resilience, or fault tolerance to handle packet loss and latency delays that can occur over unstable connections. A Zigbee Coordinator requires a stable local connection to its serial port interface with no drops in communication between it and the Zigbee gateway application running on the host computer. - -</div> +{% endcaution %} ## Configuration - GUI @@ -228,11 +226,9 @@ The ZHA integration has the ability to perform OTA (over-the-air) firmware updat To see OTA updates for a device, it's required that it both supports OTA updates and that firmware images for the device are publicly provided by the manufacturer. For this reason, ZHA currently only includes OTA providers for a few manufacturers that provide these updates publicly. This includes IKEA, Inovelli, Ledvacnce/OSRAM, SALUS/Computime, Sonoff/iTead, and Third Reality. -<div class="note warning"> - +{% warning %} Before updating a device, you should search for any disadvantages or if you even need to install an available update. Some firmware updates can break features you might use (e.g. group binding for IKEA devices). Some updates might also require changes to ZHA. In rare cases, you can even brick devices by installing a firmware update. - -</div> +{% endwarning %} ## Configuration - YAML @@ -334,15 +330,14 @@ from the same group: | `install_code` | install_code | Install Code of the joining device. Use with `src_ieee` | | `qr_code` | qr_code | QR code containing IEEE and Install Code of the joining ZB3 device | -<div class='note'> +{% note %} Currently `qr_code` supports QR Install Codes from: - Aqara - Bosch - Consciot - Embrighten - -</div> +{% endnote %} ### Service `zha.remove` @@ -425,9 +420,9 @@ ZHA supports Zigbee groups and binding devices to each other. These features can A Zigbee group enables the grouping of multiple Zigbee lights, switches, and fans. This allows you to control those devices with only one command/entity. -<div class='note'> -Note that while using a native Zigbee group instead of Home Assistant's [Group](/integrations/group/) integration can improve the visual responsiveness, the broadcast commands issued can flood the Zigbee network if issued repeatedly. -</div> +{% note %} +While using a native Zigbee group instead of Home Assistant's [Group](/integrations/group/) integration can improve the visual responsiveness, the broadcast commands issued can flood the Zigbee network if issued repeatedly. +{% endnote %} To create a Zigbee Group, press the "Configure" button on the ZHA integration config page. At the top, choose "Groups" and select "Create Group". Set a group name and choose which devices to include in the group. diff --git a/source/_integrations/zone.markdown b/source/_integrations/zone.markdown index b3411912a37..f067f3c5835 100644 --- a/source/_integrations/zone.markdown +++ b/source/_integrations/zone.markdown @@ -78,10 +78,9 @@ To find the latitude/longitude of a certain place you can use [Google Maps](http If no configuration is given, the `zone` integration will create a zone for home. This zone will use location provided in the `configuration.yaml` file and have a radius of 100 meters. To override this, create a zone configuration in `configuration.yaml` (see above) and name it **'Home'**. Overriding the Home zone via the UI is not supported. -<div class='note'> - +{% note %} Devices that are in the zone **'Home'** will not appear on the map in the Home Assistant UI. To apply the changes to the **'Home'** `zone`, you must restart Home Assistant. -</div> +{% endnote %} ## Icons diff --git a/source/_integrations/zoneminder.markdown b/source/_integrations/zoneminder.markdown index 7959118599a..d260c519e31 100644 --- a/source/_integrations/zoneminder.markdown +++ b/source/_integrations/zoneminder.markdown @@ -172,11 +172,9 @@ monitored_conditions: The `zoneminder` switch platform allows you to toggle the current function of all cameras attached to your [ZoneMinder](https://www.zoneminder.com) instance. -<div class='note'> - +{% important %} You must have the [ZoneMinder integration](/integrations/zoneminder/) configured to use this and if ZoneMinder authentication is enabled the account specified in the integration configuration must have "Edit" permission for "System". - -</div> +{% endimportant %} To enable this switch, add the following lines to your {% term "`configuration.yaml`" %} file: @@ -199,6 +197,6 @@ command_off: type: string {% endconfiguration %} -<div class='note'> +{% note %} The default functions installed by ZoneMinder are: None, Monitor, Modect, Record, Mocord, Nodect. -</div> +{% endnote %} diff --git a/source/_integrations/zwave_js.markdown b/source/_integrations/zwave_js.markdown index e046f2b3690..2be9de61aac 100644 --- a/source/_integrations/zwave_js.markdown +++ b/source/_integrations/zwave_js.markdown @@ -94,9 +94,9 @@ Use this My button: - You successfully installed the Z-Wave integration and the Z-Wave JS add-on. - You can now [add](/integrations/zwave_js/#adding-a-new-device-to-the-z-wave-network) devices to the Z-Wave network. -<p class='note'> +{% note %} While your Z-Wave mesh is permanently stored on your dongle, the additional metadata is not. When the Z-Wave integration starts up the first time, it will interview your entire Z-Wave network. Depending on the number of devices paired with the Z-Wave dongle, this can take a while. You can speed up this process by manually waking up your battery-powered devices. Most of the time, this is a button press on those devices (see their manual). It is not necessary to exclude and re-include devices from the mesh. -</p> +{% endnote %} ### Adding a new device to the Z-Wave network @@ -260,11 +260,9 @@ This service will bulk set multiple partial configuration parameters. Be warned Let's use parameter 21 for [this device](https://devices.zwave-js.io/?jumpTo=0x031e:0x000a:0x0001:0.0) as an example to show how partial parameters can be bulk set. In this case, we want to set `0xff` to `127`, `0x7f00` to `10`, and `0x8000` to `1` (or the raw value of `4735`). -<div class='note'> - +{% note %} When using the dictionary format to map the partial parameter to values, the cached values for the missing partial parameters will be used. So in examples 2, 3, 4, and 5, the service would use the cached value for partial parameters `0xff0000`, `0x3f000000`, and `0x40000000` because new values haven't been specified. If you send the raw integer value, it is assumed that you have calculated the full value, so in example 1, partial parameters `0xff0000`, `0x3f000000`, and `0x40000000` would all be set to `0`. - -</div> +{% endnote %} Example 1: @@ -746,21 +744,17 @@ This method provides the same server application and UI as the Z-Wave JS UI add- This is considered a very advanced use case. In this case you run the Z-Wave JS Server or Z-Wave JS UI NodeJS application directly. Installation and maintaining this is out of scope for this document. See the [Z-Wave JS server](https://github.com/zwave-js/zwave-js-server) or [Z-Wave JS UI](https://github.com/zwave-js/zwave-js-ui/) GitHub repository for information. -<div class='note info'> - +{% note %} [Supported Z-Wave dongle](/docs/z-wave/controllers/#supported-z-wave-usb-sticks--hardware-modules). The Z-Wave controller dongle should be connected to the same host as where the Z-Wave JS server is running. In the configuration for the Z-Wave JS server, you need to provide the path to this stick. It's recommended to use the `/dev/serial-by-id/yourdevice` version of the path to your stick, to make sure the path doesn't change over reboots. The most common known path is `/dev/serial/by-id/usb-0658_0200-if00`. +{% endnote %} -</div> - -<div class='note info'> - +{% note %} **Network keys** are used to connect securely to compatible devices. The network keys consist of 32 hexadecimal characters, for example, `2232666D100F795E5BB17F0A1BB7A146` (do not use this one, pick a random one). Without network keys security enabled devices cannot be added securely and will not function correctly. You must provide these network keys in the configuration part of the Z-Wave JS Server. For new installations, unique default keys will be auto-generated for you by the Z-Wave JS add-on. You can also generate those network keys in the Settings section of Z-Wave JS UI. Make sure that you keep a backup of these keys in a safe place. You will need to enter the same keys to be able to access securely paired devices. - -</div> +{% endnote %} ### Installing and configuring the Z-Wave integration in Home Assistant @@ -891,9 +885,9 @@ Z-Wave does not automatically poll devices on a regular basis. Polling can quick - Z-Wave JS UI allows you to configure scheduled polling on a per-value basis, which you can use to keep certain values updated. It also allows you to poll individual values on-demand from your automations, which should be preferred over blindly polling all the time if possible. -<div class='note warning'> +{% warning %} Polling should only be used as a last resort. You must use it with care and accept the negative impact on your network. Z-Wave is a very low speed network and poll requests can easily flood your network and slow down your commands. -</div> +{% endwarning %} ### My device is recognized as Unknown Manufacturer and/or some functions don't work with the Z-Wave integration diff --git a/source/_integrations/zwave_me.markdown b/source/_integrations/zwave_me.markdown index 66f9d3e3495..ad4d306c0d6 100644 --- a/source/_integrations/zwave_me.markdown +++ b/source/_integrations/zwave_me.markdown @@ -70,18 +70,14 @@ Example of connecting to Z-Way via remote access find.z-wave.me: - API Token: /112f7a4a-0051-cc2b-3b61-1898181b9950 -<div class='note warning'> - - To grant access only to certain devices, create a new user and select the necessary devices from the list. Then use the API token of that user. It is suggested **not to use the API token of the admin**. - -</div> +{% warning %} +To grant access only to certain devices, create a new user and select the necessary devices from the list. Then use the API token of that user. It is suggested **not to use the API token of the admin**. +{% endwarning %} -<div class='note info'> - - You can use Z-Wave.Me UI with its enhanced Z-Wave network diagnostics tools together with the Home Assistant UI. - -</div> +{% tip %} +You can use Z-Wave.Me UI with its enhanced Z-Wave network diagnostics tools together with the Home Assistant UI. +{% endtip %} ## Hardware requirements diff --git a/source/_layouts/default.html b/source/_layouts/default.html index 6e10e3d03a0..7e898126d0c 100644 --- a/source/_layouts/default.html +++ b/source/_layouts/default.html @@ -1,6 +1,6 @@ {% include site/head.html %} <body {% if page.body_id %} id="{{ page.body_id }}"{% elsif page.layout == "landingpage" %} id="landingpage"{% endif %}> - <header class='site-header'> + <header class='site-header {% if page.hero_unit %}dark{% endif %}'> {% include site/header.html %} </header> diff --git a/source/_layouts/page.html b/source/_layouts/page.html index fb1122d4cff..830c3187fbc 100644 --- a/source/_layouts/page.html +++ b/source/_layouts/page.html @@ -5,9 +5,22 @@ layout: default <article class="page"> {% if page.title and page.show_title != false and page.layout != "landingpage" %} <header> + {% assign crumbs = page.url | split: '/' %} + {% if crumbs.size > 2 %} + <div class="breadcrumbs"> + <a href="/">Home</a> + {% for crumb in crumbs offset: 1 %} + {% if forloop.last %} + ▸ + {% else %} + {% assign crumb_limit = forloop.index | plus: 1 %} + ▸ <a href="{% for crumb in crumbs limit: crumb_limit %}{{ crumb | append: '/' }}{% endfor %}">{{ crumb | replace:'docs','documentation' | replace:'-',' ' | replace:'_',' ' | capitalize }}</a> + {% endif %} + {% endfor %} + </div> + {% endif %} <h1 class="title indent"> - {% if site.titlecase %}{{ page.title | titlecase }}{% else %}{{ page.title - }}{% endif %} + {% if site.titlecase %}{{ page.title | titlecase }}{% else %}{{ page.title }}{% endif %} </h1> </header> {% if page.collection == "integrations" %} @@ -31,7 +44,6 @@ layout: default </div> {% endif %} {% endif %} - <hr class="divider" /> {% endif %} {{ content }} diff --git a/source/_posts/2015-02-07-looking-at-the-past.markdown b/source/_posts/2015-02-07-looking-at-the-past.markdown index 109ac5eed65..f34c56fdee1 100644 --- a/source/_posts/2015-02-07-looking-at-the-past.markdown +++ b/source/_posts/2015-02-07-looking-at-the-past.markdown @@ -27,9 +27,9 @@ The history component will be enabled for new users by default. For current user </a> </p> -<div class='note'> +{% note %} Events are saved in a local database. Google Graphs is used to draw the graph. Drawing is happening 100% in your browser - no data is transferred to anyone at any time. -</div> +{% endnote %} <!--more--> diff --git a/source/_posts/2015-05-14-release-notes.markdown b/source/_posts/2015-05-14-release-notes.markdown index 12515d545de..2bf1f025d26 100644 --- a/source/_posts/2015-05-14-release-notes.markdown +++ b/source/_posts/2015-05-14-release-notes.markdown @@ -16,9 +16,9 @@ This release includes a significant startup boost for the frontend and a fix for I would like to give a big shout out to our newest contributor [fabaff](https://github.com/fabaff) for taking the time to improve the documentation. -<div class='note'> +{% note %} To update to the latest version, run <code>scripts/update</code>. Please report any issues on <a href='https://github.com/home-assistant/home-assistant/issues'>GitHub</a>. -</div> +{% endnote %} <!--more--> diff --git a/source/_posts/2015-06-10-release-notes.markdown b/source/_posts/2015-06-10-release-notes.markdown index 9ceaf1507b3..711fbe78f74 100644 --- a/source/_posts/2015-06-10-release-notes.markdown +++ b/source/_posts/2015-06-10-release-notes.markdown @@ -20,9 +20,9 @@ A big improvement has been brought this release by wind-rider. He took the time <img src='/images/screenshots/media_player-card.png' /> Example of the new media player cards </p> -<div class='note'> +{% note %} To update to the latest version, run <code>scripts/update</code>. Please report any issues on <a href='https://github.com/home-assistant/home-assistant/issues'>GitHub</a>. -</div> +{% endnote %} <!--more--> diff --git a/source/_posts/2015-07-11-ip-cameras-arduino-kodi-efergy-support.markdown b/source/_posts/2015-07-11-ip-cameras-arduino-kodi-efergy-support.markdown index 3e51e162e10..19eec4c3267 100644 --- a/source/_posts/2015-07-11-ip-cameras-arduino-kodi-efergy-support.markdown +++ b/source/_posts/2015-07-11-ip-cameras-arduino-kodi-efergy-support.markdown @@ -29,9 +29,9 @@ camera: still_image_url: http://194.218.96.92/jpg/image.jpg ``` -<div class='note'> +{% note %} To update to the latest version, run <code>scripts/update</code>. Please report any issues on <a href='https://github.com/home-assistant/home-assistant/issues'>GitHub</a>. -</div> +{% endnote %} <!--more--> diff --git a/source/_posts/2015-08-26-laundry-automation-with-moteino-mqtt-and-home-assistant.markdown b/source/_posts/2015-08-26-laundry-automation-with-moteino-mqtt-and-home-assistant.markdown index 0b9e8d24a78..2b9f8b75429 100644 --- a/source/_posts/2015-08-26-laundry-automation-with-moteino-mqtt-and-home-assistant.markdown +++ b/source/_posts/2015-08-26-laundry-automation-with-moteino-mqtt-and-home-assistant.markdown @@ -53,9 +53,9 @@ Materials used: Home Assistant Configuration: -<div class='note'> +{% note %} The automation and script syntax here is using a deprecated and no longer supported format. -</div> +{% endnote %} ```yaml mqtt: diff --git a/source/_posts/2015-12-13-setup-encryption-using-lets-encrypt.markdown b/source/_posts/2015-12-13-setup-encryption-using-lets-encrypt.markdown index d245bfdeb4b..503dfbaf8f1 100644 --- a/source/_posts/2015-12-13-setup-encryption-using-lets-encrypt.markdown +++ b/source/_posts/2015-12-13-setup-encryption-using-lets-encrypt.markdown @@ -9,9 +9,9 @@ categories: How-To og_image: /images/blog/2015-12-lets-encrypt/letsencrypt-secured-fb.png --- -<div class='note'> +{% note %} The instructions in this blog post are outdated. Please have a look at the <a href='/blog/2017/09/27/effortless-encryption-with-lets-encrypt-and-duckdns/'>new instructions</a>. -</div> +{% endnote %} Exposing your Home Assistant instance outside of your network always has been tricky. You have to set up port forwarding on your router and most likely add a dynamic DNS service to work around your ISP changing your IP. After this you would be able to use Home Assistant from anywhere but there is one big red flag: no encryption. diff --git a/source/_posts/2016-02-11-classifying-the-internet-of-things.markdown b/source/_posts/2016-02-11-classifying-the-internet-of-things.markdown index 3fef64c8dfa..91bf551bbf9 100644 --- a/source/_posts/2016-02-11-classifying-the-internet-of-things.markdown +++ b/source/_posts/2016-02-11-classifying-the-internet-of-things.markdown @@ -28,7 +28,7 @@ We want our users to get the best home automation experience out there and this <th>Description</th> </tr> <tr> - <td><i class="icon-adjust"></i></td> + <td><iconify-icon icon="mdi:circle-half-full"></iconify-icon></td> <td style='white-space: nowrap;'>Assumed State</td> <td> We are unable to get the state of the device. Best we can do is to assume the state based on our last command. @@ -36,7 +36,7 @@ We want our users to get the best home automation experience out there and this </tr> <tr> - <td><i class="icon-cloud-upload"></i></td> + <td><iconify-icon icon="mdi:cloud-upload"></iconify-icon></td> <td>Cloud Polling</td> <td> Integration of this device happens via the cloud and requires an active internet connection. Polling the state means that an update might be noticed later. @@ -44,7 +44,7 @@ We want our users to get the best home automation experience out there and this </tr> <tr> - <td><i class="icon-cloud-download"></i></td> + <td><iconify-icon icon="mdi:cloud-download"></iconify-icon></td> <td>Cloud Push</td> <td> Integration of this device happens via the cloud and requires an active internet connection. Home Assistant will be notified as soon as a new state is available. @@ -52,7 +52,7 @@ We want our users to get the best home automation experience out there and this </tr> <tr> - <td><i class="icon-download-alt"></i></td> + <td><iconify-icon icon="mdi:download-network-outline"></iconify-icon></td> <td>Local Polling</td> <td> Offers direct communication with device. Polling the state means that an update might be noticed later. @@ -60,7 +60,7 @@ We want our users to get the best home automation experience out there and this </tr> <tr> - <td><i class="icon-upload-alt"></i></td> + <td><iconify-icon icon="mdi:upload-network-outline"></iconify-icon></td> <td>Local Push</td> <td> Offers direct communication with device. Home Assistant will be notified as soon as a new state is available. diff --git a/source/_posts/2016-05-26-ibeacons-how-to-track-things-that-cant-track-themselves-part-ii.markdown b/source/_posts/2016-05-26-ibeacons-how-to-track-things-that-cant-track-themselves-part-ii.markdown index 200a33e6032..8583cf89773 100644 --- a/source/_posts/2016-05-26-ibeacons-how-to-track-things-that-cant-track-themselves-part-ii.markdown +++ b/source/_posts/2016-05-26-ibeacons-how-to-track-things-that-cant-track-themselves-part-ii.markdown @@ -34,9 +34,9 @@ So if you put an iBeacon on your keys or in your car - then you can track them. It’s easier to set up OwnTracks and HA to track a mobile beacon than the fixed beacon I discussed in Part 1, because you only need to tell OwnTracks about your iBeacon. You don’t need to configure HA at all. -<div class='note warning'> +{% warning %} OwnTracks currently only supports mobile beacons on iOS. -</div> +{% endwarning %} You set up the beacon the same way as we discussed in part 1. The only difference is that instead of calling the region the name of a location (eg -drive) you call it the name of the device you want to track (eg -keys). Remember the leading ‘-’ that makes the connection more reliable. diff --git a/source/_posts/2016-07-28-esp8266-and-micropython-part1.markdown b/source/_posts/2016-07-28-esp8266-and-micropython-part1.markdown index c993c499646..7577fd3967c 100644 --- a/source/_posts/2016-07-28-esp8266-and-micropython-part1.markdown +++ b/source/_posts/2016-07-28-esp8266-and-micropython-part1.markdown @@ -54,11 +54,11 @@ Type "help()" for more information. >>> ``` -<div class='note'> +{% note %} The public build of the firmware may be different than the firmware distributed to the backers of the Kickstarter campaign. Especially in regard of the [available modules](http://docs.micropython.org/en/latest/esp8266/quickref.html), turned on debug messages, and alike. Also, the WebREPL may not be started by default. -</div> +{% endnote%} Connect a LED to pin 5 (or another pin of your choosing) to check if the ESP8266 is working as expected. @@ -116,11 +116,11 @@ If you reboot, you should see your current IP address in the terminal. First let's create a little consumer for Home Assistant sensor's state. The code to place in `main.py` is a mixture of code from above and the [RESTful API](https://developers.home-assistant.io/docs/api/rest/) of Home Assistant. If the temperature in the kitchen is higher than 20 °C then the LED connected to pin 5 is switched on. -<div class='note'> +{% warning %} If a module is missing then you need to download it from the [MicroPython Library overview](https://github.com/micropython/micropython-lib) and upload it to the ESP8266 with `webrepl_cli.py` manually. -</div> +{% endwarning %} ```python # Sample code to request the state of a Home Assistant entity. diff --git a/source/_posts/2017-02-04-babyphone.markdown b/source/_posts/2017-02-04-babyphone.markdown index 8c094b2ff11..829c532c944 100644 --- a/source/_posts/2017-02-04-babyphone.markdown +++ b/source/_posts/2017-02-04-babyphone.markdown @@ -20,11 +20,9 @@ We need an IP camera that can capture sound in the baby's room. It is also possi Next, we attach a `ffmpeg_noise` binary sensor to our IP camera. The sensor has an output `option` that allows us to send the output to an [icecast2](http://icecast.org/) server for playing over speakers integrated with Home Assistant. We can use the binary sensor in our automation. You can ignore the icecast2 setup if you don't want to play the audio after the noise sensor trigger. -<div class='note'> - +{% note %} We change the platform name for binary sensor in 0.38 from `ffmpeg` to `ffmpeg_noise`. Also all service going to component and was rename from `binary_sensor.ffmpeg_xy` to `ffmpeg.xy`. - -</div> +{% endnote %} On Raspbian Jessie, you can setup [FFmpeg](/integrations/ffmpeg) and install an [icecast2](http://icecast.org/) server using: diff --git a/source/_posts/2017-05-01-home-assistant-on-raspberry-pi-zero-in-30-minutes.markdown b/source/_posts/2017-05-01-home-assistant-on-raspberry-pi-zero-in-30-minutes.markdown index 11fed002e75..662449c3e83 100644 --- a/source/_posts/2017-05-01-home-assistant-on-raspberry-pi-zero-in-30-minutes.markdown +++ b/source/_posts/2017-05-01-home-assistant-on-raspberry-pi-zero-in-30-minutes.markdown @@ -13,11 +13,11 @@ og_image: /images/blog/2017-05-hassbian-pi-zero/home_assistant_plus_rpi_600x315. <img src="/images/blog/2017-05-hassbian-pi-zero/home_assistant_plus_rpi_600x315.png" /> </p> -<div class='note warning'> +{% warning %} ***This article is very outdated*** guide. If you follow it you will be installing a very outdated version of Hassbian, on a hardware platform only suitable for testing. ***We strongly recommend you do not follow this article***. -</div> +{% endwarning %} Saw the [announcement](/blog/2017/04/30/hassbian-1.21-its-about-time/) yesterday for HASSbian 1.21 and got super excited? diff --git a/source/_posts/2017-05-20-automation-editor-zwave-panel-ocr.markdown b/source/_posts/2017-05-20-automation-editor-zwave-panel-ocr.markdown index 1a6d7b85b81..6b5db6cf0bb 100644 --- a/source/_posts/2017-05-20-automation-editor-zwave-panel-ocr.markdown +++ b/source/_posts/2017-05-20-automation-editor-zwave-panel-ocr.markdown @@ -36,11 +36,11 @@ On the Z-Wave front a lot has happened. The biggest one is that we have a major </p> Thanks to the work by the Python Open Z-Wave team we are now able to install it on demand from PyPi! There is no longer a need to pre-compile it yourself. This should give us the guarantee that we work with the Python Open Z-Wave version that the code expects. -<div class='note warning'> +{% warning %} If you have a security key set in your Open Z-Wave `options.xml`, copy `options.xml` to your Home Assistant configuration directory. This is the only place where options will get persisted. -</div> +{% endwarning %} Next to that [@armills] has lead the charge and managed to get full test coverage for Z-Wave! Thanks for all the hard work! diff --git a/source/_posts/2017-06-20-things-you-should-know-about-senic-covi.markdown b/source/_posts/2017-06-20-things-you-should-know-about-senic-covi.markdown index 3f036bd8398..941dc6d6bb1 100644 --- a/source/_posts/2017-06-20-things-you-should-know-about-senic-covi.markdown +++ b/source/_posts/2017-06-20-things-you-should-know-about-senic-covi.markdown @@ -15,11 +15,11 @@ categories: Public-Service-Announcement *Original post:* <!--more--> -<div class='note'> +{% note %} TL;DR: We are not affiliated with Senic or their COVI product. We will not support their users and you will get a subpar Home Assistant experience by using their product. **Furthermore, we cannot guarantee stability or security if you use Senic products.** -</div> +{% endnote %} Recently Home Assistant has been made aware of a product by [Senic] that will be launching later today on [Kickstarter][kickstarter] ([screenshot][ks-backup]). Senic is not new in the IoT business, we have had support for their first product (Nuimo) since last September. Their new product, COVI, uses Home Assistant as its core home automation codebase. This is great, that is what open source is all about. However, they also use our name and logo in their Kickstarter, with the press and in their [developer documentation] ([screenshot][docs-backup]) to give the appearance of being affiliated with Home Assistant, against our wishes. Which is not great, at all. diff --git a/source/_posts/2017-08-12-release-51.markdown b/source/_posts/2017-08-12-release-51.markdown index 699d239dede..5b185829626 100644 --- a/source/_posts/2017-08-12-release-51.markdown +++ b/source/_posts/2017-08-12-release-51.markdown @@ -13,9 +13,9 @@ og_image: /images/blog/2017-08-0.51/components.png <a href='/integrations/#version/0.51'><img src='/images/blog/2017-08-0.51/components.png' style='border: 0;box-shadow: none;'></a> -<div class='note warning'> +{% important %} This release has to do a one time database migration which can take a long time on big databases (20 minutes). During this time the frontend will not work. Do not stop Home Assistant while it is in progress. -</div> +{% endimportant %} Release 0.51 is around the corner and it contains some really great updates. diff --git a/source/_posts/2017-09-25-new-hassio-build-system.markdown b/source/_posts/2017-09-25-new-hassio-build-system.markdown index c36f833953d..864f355af9c 100644 --- a/source/_posts/2017-09-25-new-hassio-build-system.markdown +++ b/source/_posts/2017-09-25-new-hassio-build-system.markdown @@ -7,9 +7,9 @@ author: Pascal Vizeli categories: Technology --- -<div class='note'> +{% note %} This is going to be a technical post for Hass.io add-on developers and people that run locally build add-ons (not the default). -</div> +{% endnote %} Two months ago we [introduced Hass.io][intro], allowing our users to easily install, update and manage their Home Assistant installation. In this short time we've seen great adoption from the community. Around 20% of our users are choosing Hass.io as their method of running Home Assistant today. We've also seen many add-ons being made available on [the forums][addon-repos]. There are currently 14 reposities full of add-ons being shared! @@ -17,11 +17,11 @@ Hass.io is built on top of Docker, a container runtime. One thing that Docker di This change only impacts people that build add-ons or use add-ons that are built locally. You can check if your add-on is building locally on the detail page of add-ons. -<div class='note'> +{% tip %} If you are an add-on developer, read [the documentation][publishing-addons] on how to publish your add-ons to Docker Hub. This will greatly improve the user experience. -</div> +{% endtip %} ### Template changes diff --git a/source/_posts/2017-11-18-release-58.markdown b/source/_posts/2017-11-18-release-58.markdown index aed37c86d4c..4d3857a436c 100644 --- a/source/_posts/2017-11-18-release-58.markdown +++ b/source/_posts/2017-11-18-release-58.markdown @@ -13,9 +13,9 @@ og_image: /images/blog/2017-11-0.58/components.png <a href='/integrations/#version/0.58'><img src='/images/blog/2017-11-0.58/components.png' style='border: 0;box-shadow: none;'></a> -<div class='note'> +{% note %} The Hass.io release of 0.58 will be delayed by a couple of days because Pascal is moving this weekend. -</div> +{% endnote %} ## Translation update @@ -38,9 +38,9 @@ frontend: javascript_version: latest ``` -<div class='note'> +{% important %} For Custom UI users: your custom UI will need to be updated before it can work with the new version of the frontend. -</div> +{% endimportant %} ### System log enhanced diff --git a/source/_posts/2018-08-17-release-76.markdown b/source/_posts/2018-08-17-release-76.markdown index b4ea6741b8a..e0e645d97d0 100644 --- a/source/_posts/2018-08-17-release-76.markdown +++ b/source/_posts/2018-08-17-release-76.markdown @@ -11,9 +11,9 @@ categories: og_image: /images/blog/2018-08-0.76/components.png --- -<div class='note'> +{% note %} This release has a migration, initial startup can take ~20 minutes (depends on size DB) -</div> +{% endnote %} This release includes a database migration to allow us to store context in the database. This will make it possible in the future to introduce attribution. For example, we'll be able to say which user opened the garage door or which automation triggered the party mode at 3am. diff --git a/source/_posts/2018-10-01-release-79.markdown b/source/_posts/2018-10-01-release-79.markdown index c3674ae3a92..17e7fafb7b7 100644 --- a/source/_posts/2018-10-01-release-79.markdown +++ b/source/_posts/2018-10-01-release-79.markdown @@ -11,11 +11,9 @@ categories: og_image: /images/blog/2018-09-release-0.79/components.png --- -<div class='note'> - +{% note %} In case you missed it two weeks ago, check [our plans for the future](/blog/2018/09/17/thinking-big/). - -</div> +{% endnote %} <a href='/integrations/#version/0.79'><img src='/images/blog/2018-09-release-0.79/components.png' style='border: 0;box-shadow: none;'></a> diff --git a/source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown b/source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown index 9d7fdd124a0..6dc41a2bb56 100644 --- a/source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown +++ b/source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown @@ -79,9 +79,9 @@ We will be releasing a hot fix today to migrate our integration to another local ### Reverting the software update -<div class='note'> +{% note %} If you're using Home Assistant, consider upgrading to 0.84.4 instead of downgrading your hub. -</div> +{% endnote %} If you have already updated your Harmony Hub to v4.15.206, you have probably noticed that Home Assistant and other products communicating with the local API have stopped working. Don’t worry, it’s (still?) possible to downgrade to a previous version using the following steps (source: [Reddit 1](https://www.reddit.com/r/homeassistant/comments/a6u6ep/psa_harmony_hub_firmware_v415206_breaksremoves/), [Reddit 2](https://www.reddit.com/r/homeassistant/comments/a6u6ep/psa_harmony_hub_firmware_v415206_breaksremoves/eby89t8/)): @@ -95,8 +95,8 @@ If you have already updated your Harmony Hub to v4.15.206, you have probably not 6. Steps 1-4 will be displayed for completing a Factory Reset. We are only doing Step 1. "Restore" here means "Rollback". 7. Connect your Harmony hub to the PC via micro-USB. Within a few minutes, it will be detected by MyHarmony and display Remote Model, Firmware Version, and Hardware revision. The Restore 1. button will be enabled. -8. Click "Restore" and wait. (Now is the first time that it actually describes that it's a rollback!) -9. When it completes, you should be on Firmware Version 4.15.193. Disconnect the hub from the PC and return it to its original location. +1. Click "Restore" and wait. (Now is the first time that it actually describes that it's a rollback!) +2. When it completes, you should be on Firmware Version 4.15.193. Disconnect the hub from the PC and return it to its original location. And the final, important step: eliminate the ability for the Harmony hub to access these domains, or the internet altogether. I used 1. DD-WRT's Access Restrictions feature to disable all internet access, because my specific implementation is entirely intranet-based. YMMV. - svcs.myharmony.com - content.dhg.myharmony.com diff --git a/source/_posts/2019-01-09-release-85.markdown b/source/_posts/2019-01-09-release-85.markdown index 2711923ffd3..61f5f7b4a96 100644 --- a/source/_posts/2019-01-09-release-85.markdown +++ b/source/_posts/2019-01-09-release-85.markdown @@ -13,11 +13,9 @@ og_image: /images/blog/2019-01-release-85/components.png <a href='/integrations/#version/0.85'><img src='/images/blog/2019-01-release-85/components.png' style='border: 0;box-shadow: none;'></a> -<div class='note warning'> - +{% warning %} Slugify changed, which can impact entity ID creation if the entities had names with either a `-` or characters outside of A-Z and the integration has no unique IDs. We now better handle the characters and substitute it with an alternative instead of removing that character. - -</div> +{% endwarning %} Read this breaking change warning? 👆 Good. Let's get started. This is the first release of 2019 and it covers a whopping 4 weeks, as we skipped the last release of the year to focus on friends and family. This is going to be a great year and we're planning a lot of cool stuff. If you haven't seen it yet, check the [State of the Union](/blog/2018/11/16/state-of-the-union/) to see what we have planned. diff --git a/source/_posts/2020-09-15-home-assistant-tags.markdown b/source/_posts/2020-09-15-home-assistant-tags.markdown index 10966220ba8..e7b17e55baf 100644 --- a/source/_posts/2020-09-15-home-assistant-tags.markdown +++ b/source/_posts/2020-09-15-home-assistant-tags.markdown @@ -29,9 +29,9 @@ Thanks to [@David-Development](https://github.com/david-development) for the NFC <iframe width="853" height="480" src="https://www.youtube-nocookie.com/embed/Xc120lClUgA" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe> </div> -<div class='note' data-title='for iPhone users'> +{% note %} Only iPhone XS, XR and iPhone 11 or later support background NFC tag reading. -</div> +{% endnote %} ## Standalone Tag Reader diff --git a/source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown b/source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown index b843abce42f..096312e5e95 100644 --- a/source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown +++ b/source/_posts/2021-03-18-nabu-casa-has-acquired-esphome.markdown @@ -18,7 +18,7 @@ Today I'm happy to announce that [ESPHome](https://esphome.io) is from now on un Otto started ESPHome three years ago to make programming ESP devices as easy as possible. With ESPHome, users write simple YAML files in which you describe what components are attached to what pins of the ESP device. ESPHome will then make this available in Home Assistant. No extra work necessary. Super simple. -{% details Example ESPHome configuration %} +{% details "Example ESPHome configuration" %} The following ESPHome YAML example will program your ESP device. When you plug it in, it will make the light on pin 16 available in Home Assistant. diff --git a/source/_posts/2021-08-24-supervisor-update.markdown b/source/_posts/2021-08-24-supervisor-update.markdown index 31f6f2f0301..40b58f87a34 100644 --- a/source/_posts/2021-08-24-supervisor-update.markdown +++ b/source/_posts/2021-08-24-supervisor-update.markdown @@ -22,9 +22,9 @@ The functionality of it does not change, this is just a rename to make it more u ## Supervised installations -<div class='note'> +{% note %} Having a supervisor does not make it a supervised installation, Home Assistant Operating System also has this, the information below does not apply to Home Assistant Operating System. -</div> +{% endnote %} While we try not to break supervised installations, we do have a few things we need to change. These adjustments you have to manually apply to your installation. Without these adjustments you will start to see warnings in your logs, and your installation will eventually be marked as unsupported. diff --git a/source/_posts/2022-06-01-release-20226.markdown b/source/_posts/2022-06-01-release-20226.markdown index dab203dcdce..f2010784720 100644 --- a/source/_posts/2022-06-01-release-20226.markdown +++ b/source/_posts/2022-06-01-release-20226.markdown @@ -177,7 +177,7 @@ or a reminder 15 minutes before a meeting. <img class="no-shadow" src='/images/blog/2022-06/calendar-offset.png' alt='Screenshot showing the calendar trigger using an offset'> -<div class='note' data-title=" / Pro-tip!"> +{% tip %} <b>Use the calendar trigger to schedule anything in your home!</b><br> <br> Create a calendar and add events to it as a schedule, for example, for your @@ -186,7 +186,7 @@ or a reminder 15 minutes before a meeting. <br> This way, you can create complex schedules with repeating patterns and schedule exceptions, with the ease of using your calendar. -</div> +{% endtip %} ## Improved scene editor diff --git a/source/_posts/2023-12-06-release-202312.markdown b/source/_posts/2023-12-06-release-202312.markdown index 750f3a8b547..c77c89d1b08 100644 --- a/source/_posts/2023-12-06-release-202312.markdown +++ b/source/_posts/2023-12-06-release-202312.markdown @@ -70,12 +70,10 @@ Don't forget to [join our release party live stream on YouTube](https://www.yout ## A beautiful new login page -<div class='note'> - +{% note %} This feature has been disabled in Home Assistant 2023.12.3. [Read more about it here](/blog/2023/12/14/disabling-new-login-page-functionality/). - -</div> +{% endnote %} The login page of Home Assistant has been redesigned to be more modern and diff --git a/source/_posts/2024-03-04-dashboard-chapter-1.markdown b/source/_posts/2024-03-04-dashboard-chapter-1.markdown index 054af96181f..245f6472884 100644 --- a/source/_posts/2024-03-04-dashboard-chapter-1.markdown +++ b/source/_posts/2024-03-04-dashboard-chapter-1.markdown @@ -88,9 +88,9 @@ For our new Sections view, we are making these sections as the base unit of the ### Getting started with Sections -<div class='note warning'> - The new Sections view is experimental! Please do not build your daily dashboard on top of it yet! -</div> +{% warning %} +The new Sections view is experimental! Please do not build your daily dashboard on top of it yet! +{% endwarning %} <p class='img'> <img width="66%" src="/images/blog/2024-03-dashboard-chapter-1/sections-create-new-view.png" alt="The Create New View configuration screen"/> @@ -99,9 +99,9 @@ For our new Sections view, we are making these sections as the base unit of the To get started with the new Sections view, create a new view on your dashboard and choose **Sections (experimental)** as the view type. We currently do not have the option to migrate your current dashboard over yet. -<div class='note info'> - If you are using the default dashboard, please read about how to <a href="/dashboards/#get-started-with-your-own-dashboard">create a new dashboard</a>. -</div> +{% note %} +If you are using the default dashboard, please read about how to <a href="/dashboards/#get-started-with-your-own-dashboard">create a new dashboard</a>. +{% endnote %} <p class='img'> <img src="/images/blog/2024-03-dashboard-chapter-1/sections-blank-sections-view.png" alt="A new dashboard view laid out in Sections"/> diff --git a/source/_posts/2024-03-06-release-20243.markdown b/source/_posts/2024-03-06-release-20243.markdown index cfb97237b57..d00d4489bfe 100644 --- a/source/_posts/2024-03-06-release-20243.markdown +++ b/source/_posts/2024-03-06-release-20243.markdown @@ -114,9 +114,9 @@ of a section by default at the moment. Moreover, we have tweaked our "Add Cards" dialogs to recommend Tile cards by default when the sections view type is in use. -<div class='note warning'> - The new Sections view is experimental! Please do not build your daily dashboard on top of it yet! We are releasing this early so that we can collect your feedback. -</div> +{% warning %} +The new Sections view is experimental! Do not build your daily dashboard on top of it yet! We are releasing this early so that we can collect your feedback. +{% endwarning %} To get started with the new Sections view type, create a new view on your dashboard and select **Sections (experimental)** as the view type. diff --git a/source/_posts/2024-05-09-music-assistant-2.markdown b/source/_posts/2024-05-09-music-assistant-2.markdown index 0b6d8785b13..37ff03adee4 100644 --- a/source/_posts/2024-05-09-music-assistant-2.markdown +++ b/source/_posts/2024-05-09-music-assistant-2.markdown @@ -11,7 +11,7 @@ og_image: /images/blog/2024-05-music-assistant/art.jpg --- <p><img src='/images/blog/2024-05-music-assistant/art.jpg' class='no-shadow' /></p> -Today, exactly five years ago, I, Marcel, started working on [Music Assistant <i class="icon-external-link"></i>](https://music-assistant.io/). What began as a quick script, to sync my playlists so I could switch between streaming providers, grew into a beast on its own. +Today, exactly five years ago, I, Marcel, started working on [Music Assistant](https://music-assistant.io/). What began as a quick script, to sync my playlists so I could switch between streaming providers, grew into a beast on its own. Music Assistant is what I’d like to call a “music library manager” – it gives you full control of playing YOUR music on your players. Just like Home Assistant centralizes all your devices and services to work together, Music Assistant does the same with your music sources and smart audio-playing devices. @@ -28,9 +28,9 @@ To just play with Music Assistant without reading what it is (yes, we know you!) <p class="img"><img src='/images/blog/2024-05-music-assistant/how-it-works.jpg'/>From source to Music Assistant to speaker</p> #### Connect and play anywhere -Music Assistant allows you to quickly connect some of the <a href="https://music-assistant.io/music-providers/">most popular streaming providers <i class="icon-external-link"></i></a> like Spotify and Tidal, with your local media files. Importing your liked tracks, artists, albums, and playlists, all displayed with the correct artwork. +Music Assistant allows you to quickly connect some of the <a href="https://music-assistant.io/music-providers/">most popular streaming providers</a> like Spotify and Tidal, with your local media files. Importing your liked tracks, artists, albums, and playlists, all displayed with the correct artwork. -It supports the most ubiquitous <a href="https://music-assistant.io/player-support/">streaming protocols and devices <i class="icon-external-link"></i></a> like Airplay, Cast and DLNA, letting you play media on almost any device - if an old speaker doesn’t support new services, Music Assistant can bring it back to life. +It supports the most ubiquitous <a href="https://music-assistant.io/player-support/">streaming protocols and devices</a> like Airplay, Cast and DLNA, letting you play media on almost any device - if an old speaker doesn’t support new services, Music Assistant can bring it back to life. [Read more...](#freedom-of-choice) @@ -53,11 +53,11 @@ After many years of development and testing with the amazing community, we can f <p class="img"><img src='/images/blog/2024-05-music-assistant/start-me-up.png'/></p> -Even though Music Assistant is an HA Add-on, it can be installed from start to finish via [HACS <i class="icon-external-link"></i>](https://hacs.xyz/). You simply install the integration, which will automatically install and manage the add-on for you. The integration allows you to control your devices with automations and voice control. +Even though Music Assistant is an HA Add-on, it can be installed from start to finish via [HACS](https://hacs.xyz/). You simply install the integration, which will automatically install and manage the add-on for you. The integration allows you to control your devices with automations and voice control. {% my supervisor_addon badge addon="d5369777_music_assistant" repository_url="https://github.com/music-assistant/home-assistant-addon" %} -_Music Assistant is distributed as a <a href="https://www.home-assistant.io/addons">Home Assistant add-on</a> – our way to easily extend your Home Assistant installation with third party applications. To install it as a Docker container, follow the <a href="https://music-assistant.io/installation/#tertiary-installation-method-docker-image">MA installation instructions <i class="icon-external-link"></i></a>._ +_Music Assistant is distributed as a <a href="https://www.home-assistant.io/addons">Home Assistant add-on</a> – our way to easily extend your Home Assistant installation with third party applications. To install it as a Docker container, follow the <a href="https://music-assistant.io/installation/#tertiary-installation-method-docker-image">MA installation instructions</a>._ ## Fight the power <h3 style="margin-top: -1em; opacity: .67;">Why Music Assistant?</h3> @@ -103,7 +103,7 @@ When you search in Music Assistant, it searches all your libraries. Every stream ## We are family <h3 style="margin-top: -1em; opacity: .67;">Built for Home Assistant</h3> -Music Assistant has always been closely linked to Home Assistant (more on that below). I now even work for [Nabu Casa <i class="icon-external-link"></i>](https://www.nabucasa.com/), partly because of my work on Music Assistant (but now I’m the Matter guy).  +Music Assistant has always been closely linked to Home Assistant (more on that below). I now even work for [Nabu Casa](https://www.nabucasa.com/), partly because of my work on Music Assistant (but now I’m the Matter guy).  <p class="img"><img src='/images/blog/2024-05-music-assistant/we-are-family.png'/></p> @@ -111,9 +111,9 @@ Because of this strong link, Home Assistant seamlessly links with Music Assistan ## Liner notes -So, I started working on Music Assistant [exactly five years ago <i class="icon-external-link"></i>](<https://github.com/music-assistant/server/commit/75adea9721fa1f1b7225515087c81edd979fcc8f>), at first for my own personal use. It started as a learning exercise - thanks to it, I learned asyncio Python programming as well as the Vue frontend framework. I had the project on GitHub just to host the code, but it was not really meant to be used by others. +So, I started working on Music Assistant [exactly five years ago](<https://github.com/music-assistant/server/commit/75adea9721fa1f1b7225515087c81edd979fcc8f>), at first for my own personal use. It started as a learning exercise - thanks to it, I learned asyncio Python programming as well as the Vue frontend framework. I had the project on GitHub just to host the code, but it was not really meant to be used by others. -At some point, it became clear to me that there was a real demand, and I posted some info on how to install it, which gained a little attention. In June 2022, we released the 1.0 version of Music Assistant, and it was still in rough shape but already suitable for many users. We even organized a Livestream, “[Let’s get Loud <i class="icon-external-link"></i>](https://www.youtube.com/watch?v=SEH-DxOsywg)” hosted by Home Assistant, to promote [audio support for ESPHome <i class="icon-external-link"></i>](https://esphome.io/components/media_player/i2s_audio.html) and the super cool things you can build when you combine these three open-source projects. +At some point, it became clear to me that there was a real demand, and I posted some info on how to install it, which gained a little attention. In June 2022, we released the 1.0 version of Music Assistant, and it was still in rough shape but already suitable for many users. We even organized a Livestream, “[Let’s get Loud](https://www.youtube.com/watch?v=SEH-DxOsywg)” hosted by Home Assistant, to promote [audio support for ESPHome](https://esphome.io/components/media_player/i2s_audio.html) and the super cool things you can build when you combine these three open-source projects. Version 1.0 was not everything we hoped it would be. It had some structural bugs, specifically running as a custom component in Home Assistant. HA was created to give you the best experience for automating your home; it was never optimized for real-time audio streaming. On top of that, at some point, the dependencies of both projects got so conflicted that Music Assistant stopped working completely in the March 2023 release of HA. @@ -121,6 +121,6 @@ Six months after its initial version 1.0 launch, the project was beginning to lo So, the Music Assistant Server was born. It is a standalone application that you can run in docker (or Home Assistant add-on), all connected to HA via a HACS integration. The project was split up into multiple self-contained parts.  -Music Assistant Server has its own web interface, a modern interface written in Vue. Thanks to HA's add-on system, this web interface can be securely accessed from HA. The web interface is a Progressive Web App (PWA), so you can also visit it directly and [install it on your device <i class="icon-external-link"></i>](https://support.google.com/chrome/answer/9658361?hl=en-GB&co=GENIE.Platform=Desktop). We also have an (experimental) [desktop app <i class="icon-external-link"></i>](https://music-assistant.io/companion-app/). +Music Assistant Server has its own web interface, a modern interface written in Vue. Thanks to HA's add-on system, this web interface can be securely accessed from HA. The web interface is a Progressive Web App (PWA), so you can also visit it directly and [install it on your device](https://support.google.com/chrome/answer/9658361?hl=en-GB&co=GENIE.Platform=Desktop). We also have an (experimental) [desktop app](https://music-assistant.io/companion-app/). Over the past year, we have been iterating on this with an impressive number of beta testers. So, while technically this is a 2.0 release, to me personally this is the first real release, as this is finally something that feels good and has the right foundation. What is also super is that we attracted contributors to the project, folks helping create and maintain music integrations while providing support or translations. Even more exciting there are some really big features and streaming services on the horizon. My sincere thanks to everyone who has helped bring this release home. diff --git a/source/addons/index.html b/source/addons/index.html index 43732ee5fd5..06a21502139 100644 --- a/source/addons/index.html +++ b/source/addons/index.html @@ -27,13 +27,13 @@ regenerate: false Click on an add-on you are interested in, to read the documentation or to install the add-on. </p> -<p class="note"> - Add-ons are only available if you've used the Home Assistant Operating System or - Home Assistant Supervised <a href="/installation">installation</a> method. If you - installed Home Assistant using any other method then you cannot use add-ons. - Often you can achieve the same manually, refer to the documentation by the - vendor of the application you'd like to install. -</p> +{% important %} +Add-ons are only available if you've used the Home Assistant Operating System or +Home Assistant Supervised <a href="/installation">installation</a> method. If you +installed Home Assistant using any other method then you cannot use add-ons. +Often you can achieve the same manually, refer to the documentation by the +vendor of the application you'd like to install. +{% endimportant %} <p> Check the Home Assistant forums for diff --git a/source/font/FontAwesome.otf b/source/font/FontAwesome.otf deleted file mode 100644 index 70125459f7d593b79cabc75bd60b91943aa65e93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61896 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 diff --git a/source/font/fontawesome-webfont.eot b/source/font/fontawesome-webfont.eot deleted file mode 100644 index 0662cb96bfb78cb2603df4bc9995314bd6806312..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37405 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�-A&iY%khEsGVMaq&$BJA^QAs8x>7-g_ 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 diff --git a/source/font/fontawesome-webfont.svg b/source/font/fontawesome-webfont.svg deleted file mode 100644 index 2edb4ec34cb..00000000000 --- a/source/font/fontawesome-webfont.svg +++ /dev/null @@ -1,399 +0,0 @@ -<?xml version="1.0" standalone="no"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > -<svg xmlns="http://www.w3.org/2000/svg"> -<metadata></metadata> -<defs> -<font id="fontawesomeregular" horiz-adv-x="1536" > -<font-face units-per-em="1792" ascent="1536" descent="-256" /> -<missing-glyph horiz-adv-x="448" /> -<glyph unicode=" " horiz-adv-x="448" /> -<glyph unicode=" " horiz-adv-x="448" /> -<glyph unicode=" " horiz-adv-x="448" /> -<glyph unicode="¨" horiz-adv-x="1792" /> -<glyph unicode="©" horiz-adv-x="1792" /> -<glyph unicode="®" horiz-adv-x="1792" /> -<glyph unicode="´" horiz-adv-x="1792" /> -<glyph unicode="Æ" horiz-adv-x="1792" /> -<glyph unicode=" " horiz-adv-x="768" /> -<glyph unicode=" " /> -<glyph unicode=" " horiz-adv-x="768" /> -<glyph unicode=" " /> -<glyph unicode=" " horiz-adv-x="512" /> -<glyph unicode=" " horiz-adv-x="384" /> -<glyph unicode=" " horiz-adv-x="256" /> -<glyph unicode=" " horiz-adv-x="256" /> -<glyph unicode=" " horiz-adv-x="192" /> -<glyph unicode=" " horiz-adv-x="307" /> -<glyph unicode=" " horiz-adv-x="85" /> -<glyph unicode=" " horiz-adv-x="307" /> -<glyph unicode=" " horiz-adv-x="384" /> -<glyph unicode="™" horiz-adv-x="1792" /> -<glyph unicode="∞" horiz-adv-x="1792" /> -<glyph unicode="≠" horiz-adv-x="1792" /> -<glyph unicode="" horiz-adv-x="500" d="M0 0z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" /> -<glyph unicode="" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> -<glyph unicode="" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> -<glyph unicode="" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> -<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" /> -<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " /> -<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" /> -<glyph unicode="" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" /> -<glyph unicode="" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" /> -<glyph unicode="" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " /> -<glyph unicode="" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" /> -<glyph unicode="" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" /> -<glyph unicode="" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" /> -<glyph unicode="" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" /> -<glyph unicode="" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" /> -<glyph unicode="" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" /> -<glyph unicode="" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" /> -<glyph unicode="" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" /> -<glyph unicode="" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" /> -<glyph unicode="" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" /> -<glyph unicode="" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> -<glyph unicode="" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 -65 -104 -274q-23 -64 -23 -84q0 -31 17 -43 q26 -21 103 -32q3 0 13.5 -2t30 -5t40.5 -6q1 -28 1 -58q0 -17 -2 -27q-66 0 -349 20l-48 -8q-81 -14 -167 -14z" /> -<glyph unicode="" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 14 0.5t14 0.5q1 0 21.5 -0.5t40.5 -0.5h74q88 0 191 -27 q43 -13 96 -39q57 -29 102 -76q44 -47 65 -104t21 -122q0 -70 -32 -128t-95 -105q-26 -20 -150 -77q177 -41 267 -146q92 -106 92 -236q0 -76 -29 -161q-21 -62 -71 -117q-66 -72 -140 -108q-73 -36 -203 -60q-82 -15 -198 -11l-197 4q-84 2 -298 -11q-33 -3 -272 -11z" /> -<glyph unicode="" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q-18 0 -23 -1q-24 -2 -42 -2q-9 0 -28 3q-19 4 -145 17 l-198 2q-41 1 -174 -11q-74 -7 -98 -9z" /> -<glyph unicode="" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88 0 -233 -14q-48 -4 -70 -4q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q8 192 6 433l-5 428q-1 62 -0.5 118.5t0.5 102.5t-2 57t-6 15q-6 5 -14 6q-38 6 -148 6q-43 0 -100 -13.5t-73 -24.5q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1744 128q33 0 42 -18.5t-11 -44.5 l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80z" /> -<glyph unicode="" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -70 -5q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q6 137 6 433l-5 44q0 265 -2 278q-2 11 -6 15q-6 5 -14 6q-38 6 -148 6q-50 0 -168.5 -14t-132.5 -24q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1505 113q26 -20 26 -49t-26 -49l-162 -126 q-26 -20 -44.5 -11t-18.5 42v80h-1024v-80q0 -33 -18.5 -42t-44.5 11l-162 126q-26 20 -26 49t26 49l162 126q26 20 44.5 11t18.5 -42v-80h1024v80q0 33 18.5 42t44.5 -11z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" /> -<glyph unicode="" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> -<glyph unicode="" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" /> -<glyph unicode="" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" /> -<glyph unicode="" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" /> -<glyph unicode="" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> -<glyph unicode="" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" /> -<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" /> -<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" /> -<glyph unicode="" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" /> -<glyph unicode="" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" /> -<glyph unicode="" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" /> -<glyph unicode="" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" /> -<glyph unicode="" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" /> -<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" /> -<glyph unicode="" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" /> -<glyph unicode="" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" /> -<glyph unicode="" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" /> -<glyph unicode="" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" /> -<glyph unicode="" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" /> -<glyph unicode="" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" /> -<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" /> -<glyph unicode="" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" /> -<glyph unicode="" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " /> -<glyph unicode="" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" /> -<glyph unicode="" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> -<glyph unicode="" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" /> -<glyph unicode="" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " /> -<glyph unicode="" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" /> -<glyph unicode="" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> -<glyph unicode="" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> -<glyph unicode="" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M1307 618l23 219h-198v109q0 49 15.5 68.5t71.5 19.5h110v219h-175q-152 0 -218 -72t-66 -213v-131h-131v-219h131v-635h262v635h175zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" /> -<glyph unicode="" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" /> -<glyph unicode="" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" /> -<glyph unicode="" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" /> -<glyph unicode="" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" /> -<glyph unicode="" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" /> -<glyph unicode="" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" /> -<glyph unicode="" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" /> -<glyph unicode="" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" /> -<glyph unicode="" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> -<glyph unicode="" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" /> -<glyph unicode="" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" /> -<glyph unicode="" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" /> -<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" /> -<glyph unicode="" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" /> -<glyph unicode="" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" /> -<glyph unicode="" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" /> -<glyph unicode="" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" /> -<glyph unicode="" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" /> -<glyph unicode="" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" /> -<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" /> -<glyph unicode="" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" /> -<glyph unicode="" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" /> -<glyph unicode="" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " /> -<glyph unicode="" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " /> -<glyph unicode="" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" /> -<glyph unicode="" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" /> -<glyph unicode="" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" /> -<glyph unicode="" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" /> -<glyph unicode="" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" /> -<glyph unicode="" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" /> -<glyph unicode="" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" /> -<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" /> -<glyph unicode="" d="M678 -57q0 -38 -10 -71h-380q-95 0 -171.5 56.5t-103.5 147.5q24 45 69 77.5t100 49.5t107 24t107 7q32 0 49 -2q6 -4 30.5 -21t33 -23t31 -23t32 -25.5t27.5 -25.5t26.5 -29.5t21 -30.5t17.5 -34.5t9.5 -36t4.5 -40.5zM385 294q-234 -7 -385 -85v433q103 -118 273 -118 q32 0 70 5q-21 -61 -21 -86q0 -67 63 -149zM558 805q0 -100 -43.5 -160.5t-140.5 -60.5q-51 0 -97 26t-78 67.5t-56 93.5t-35.5 104t-11.5 99q0 96 51.5 165t144.5 69q66 0 119 -41t84 -104t47 -130t16 -128zM1536 896v-736q0 -119 -84.5 -203.5t-203.5 -84.5h-468 q39 73 39 157q0 66 -22 122.5t-55.5 93t-72 71t-72 59.5t-55.5 54.5t-22 59.5q0 36 23 68t56 61.5t65.5 64.5t55.5 93t23 131t-26.5 145.5t-75.5 118.5q-6 6 -14 11t-12.5 7.5t-10 9.5t-10.5 17h135l135 64h-437q-138 0 -244.5 -38.5t-182.5 -133.5q0 126 81 213t207 87h960 q119 0 203.5 -84.5t84.5 -203.5v-96h-256v256h-128v-256h-256v-128h256v-256h128v256h256z" /> -<glyph unicode="" horiz-adv-x="1664" d="M876 71q0 21 -4.5 40.5t-9.5 36t-17.5 34.5t-21 30.5t-26.5 29.5t-27.5 25.5t-32 25.5t-31 23t-33 23t-30.5 21q-17 2 -50 2q-54 0 -106 -7t-108 -25t-98 -46t-69 -75t-27 -107q0 -68 35.5 -121.5t93 -84t120.5 -45.5t127 -15q59 0 112.5 12.5t100.5 39t74.5 73.5 t27.5 110zM756 933q0 60 -16.5 127.5t-47 130.5t-84 104t-119.5 41q-93 0 -144 -69t-51 -165q0 -47 11.5 -99t35.5 -104t56 -93.5t78 -67.5t97 -26q97 0 140.5 60.5t43.5 160.5zM625 1408h437l-135 -79h-135q71 -45 110 -126t39 -169q0 -74 -23 -131.5t-56 -92.5t-66 -64.5 t-56 -61t-23 -67.5q0 -26 16.5 -51t43 -48t58.5 -48t64 -55.5t58.5 -66t43 -85t16.5 -106.5q0 -160 -140 -282q-152 -131 -420 -131q-59 0 -119.5 10t-122 33.5t-108.5 58t-77 89t-30 121.5q0 61 37 135q32 64 96 110.5t145 71t155 36t150 13.5q-64 83 -64 149q0 12 2 23.5 t5 19.5t8 21.5t7 21.5q-40 -5 -70 -5q-149 0 -255.5 98t-106.5 246q0 140 95 250.5t234 141.5q94 20 187 20zM1664 1152v-128h-256v-256h-128v256h-256v128h256v256h128v-256h256z" /> -<glyph unicode="" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> -<glyph unicode="" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" /> -<glyph unicode="" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" /> -<glyph unicode="" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" /> -<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" /> -<glyph unicode="" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> -<glyph unicode="" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" /> -<glyph unicode="" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" /> -<glyph unicode="" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" /> -<glyph unicode="" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" /> -<glyph unicode="" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" /> -<glyph unicode="" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1664 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5 q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1024 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1024 608v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280z M768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z" /> -<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" /> -<glyph unicode="" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" /> -<glyph unicode="" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> -<glyph unicode="" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" /> -<glyph unicode="" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" /> -<glyph unicode="" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> -<glyph unicode="" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" /> -<glyph unicode="" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" /> -<glyph unicode="" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" /> -<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" /> -<glyph unicode="" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " /> -<glyph unicode="" horiz-adv-x="1152" d="M896 608v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h224q14 0 23 -9t9 -23zM1024 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 -28 t-28 -68v-704q0 -40 28 -68t68 -28h704q40 0 68 28t28 68zM1152 928v-704q0 -92 -65.5 -158t-158.5 -66h-704q-93 0 -158.5 66t-65.5 158v704q0 93 65.5 158.5t158.5 65.5h704q93 0 158.5 -65.5t65.5 -158.5z" /> -<glyph unicode="" horiz-adv-x="1152" d="M928 1152q93 0 158.5 -65.5t65.5 -158.5v-704q0 -92 -65.5 -158t-158.5 -66h-704q-93 0 -158.5 66t-65.5 158v704q0 93 65.5 158.5t158.5 65.5h704zM1024 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 -28t-28 -68v-704q0 -40 28 -68t68 -28h704q40 0 68 28t28 68z M864 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576z" /> -<glyph unicode="" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" /> -<glyph unicode="" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> -<glyph unicode="" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> -<glyph unicode="" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" /> -<glyph unicode="" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" /> -<glyph unicode="" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" /> -<glyph unicode="" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" /> -<glyph unicode="" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" /> -<glyph unicode="" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" /> -<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" /> -<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" /> -<glyph unicode="" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" /> -<glyph unicode="" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" /> -<glyph unicode="" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> -<glyph unicode="" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1708 881l-188 -881h-304l181 849q4 21 1 43q-4 20 -16 35q-10 14 -28 24q-18 9 -40 9h-197l-205 -960h-303l204 960h-304l-205 -960h-304l272 1280h1139q157 0 245 -118q86 -116 52 -281z" /> -<glyph unicode="" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" /> -<glyph unicode="" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" /> -<glyph unicode="" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" /> -<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> -<glyph unicode="" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> -<glyph unicode="" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" /> -<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" /> -<glyph unicode="" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" /> -<glyph unicode="" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" /> -<glyph unicode="" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" /> -<glyph unicode="" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1664 352v-32q0 -132 -94 -226t-226 -94h-128q-132 0 -226 94t-94 226v480h-224q-2 -102 -14.5 -190.5t-30.5 -156t-48.5 -126.5t-57 -99.5t-67.5 -77.5t-69.5 -58.5t-74 -44t-69 -32t-65.5 -25.5q-4 -2 -32 -13q-8 -2 -12 -2q-22 0 -30 20l-71 178q-5 13 0 25t17 17 q7 3 20 7.5t18 6.5q31 12 46.5 18.5t44.5 20t45.5 26t42 32.5t40.5 42.5t34.5 53.5t30.5 68.5t22.5 83.5t17 103t6.5 123h-256q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h1216q14 0 23 -9t9 -23v-160q0 -14 -9 -23t-23 -9h-224v-512q0 -26 19 -45t45 -19h128q26 0 45 19t19 45 v64q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1280 1376v-160q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h960q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1024 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1024 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28 t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" /> -<glyph unicode="" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" /> -<glyph unicode="" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" /> -<glyph unicode="" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" /> -<glyph unicode="" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" /> -<glyph unicode="" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" /> -<glyph unicode="" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" /> -<glyph unicode="" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" /> -<glyph unicode="" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" /> -<glyph unicode="" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" /> -<glyph unicode="" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" /> -<glyph unicode="" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" /> -<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" /> -<glyph unicode="" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" /> -<glyph unicode="" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="1024" d="M390 1408h219v-388h364v-241h-364v-394q0 -136 14 -172q13 -37 52 -60q50 -31 117 -31q117 0 232 76v-242q-102 -48 -178 -65q-77 -19 -173 -19q-105 0 -186 27q-78 25 -138 75q-58 51 -79 105q-22 54 -22 161v539h-170v217q91 30 155 84q64 55 103 132q39 78 54 196z " /> -<glyph unicode="" d="M1123 127v181q-88 -56 -174 -56q-51 0 -88 23q-29 17 -39 45q-11 30 -11 129v295h274v181h-274v291h-164q-11 -90 -40 -147t-78 -99q-48 -40 -116 -63v-163h127v-404q0 -78 17 -121q17 -42 59 -78q43 -37 104 -57q62 -20 140 -20q67 0 129 14q57 13 134 49zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> -<glyph unicode="" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" /> -<glyph unicode="" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" /> -<glyph unicode="" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" /> -<glyph unicode="" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" /> -<glyph unicode="" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" /> -<glyph unicode="" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" /> -<glyph unicode="" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1483 512l-587 -587q-52 -53 -127.5 -53t-128.5 53l-587 587q-53 53 -53 128t53 128l587 587q53 53 128 53t128 -53l265 -265l-398 -399l-188 188q-42 42 -99 42q-59 0 -100 -41l-120 -121q-42 -40 -42 -99q0 -58 42 -100l406 -408q30 -28 67 -37l6 -4h28q60 0 99 41 l619 619l2 -3q53 -53 53 -128t-53 -128zM1406 1138l120 -120q14 -15 14 -36t-14 -36l-730 -730q-17 -15 -37 -15v0q-4 0 -6 1q-18 2 -30 14l-407 408q-14 15 -14 36t14 35l121 120q13 15 35 15t36 -15l252 -252l574 575q15 15 36 15t36 -15z" /> -<glyph unicode="" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> -<glyph unicode="" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> -<glyph unicode="" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" /> -<glyph unicode="" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" /> -<glyph unicode="" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" /> -<glyph unicode="" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" /> -<glyph unicode="" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" /> -<glyph unicode="" horiz-adv-x="1920" d="M805 163q-122 -67 -261 -67q-141 0 -261 67q98 61 167 149t94 191q25 -103 94 -191t167 -149zM453 1176v-344q0 -179 -89.5 -326t-234.5 -217q-129 152 -129 351q0 200 129.5 352t323.5 184zM958 991q-128 -152 -128 -351q0 -201 128 -351q-145 70 -234.5 218t-89.5 328 v341q196 -33 324 -185zM1638 163q-122 -67 -261 -67q-141 0 -261 67q98 61 167 149t94 191q25 -103 94 -191t167 -149zM1286 1176v-344q0 -179 -91 -326t-237 -217v0q133 154 133 351q0 195 -133 351q129 151 328 185zM1920 640q0 -201 -129 -351q-145 70 -234.5 218 t-89.5 328v341q194 -32 323.5 -184t129.5 -352z" /> -<glyph unicode="" horiz-adv-x="1792" /> -<glyph unicode="" horiz-adv-x="1792" /> -<glyph unicode="" horiz-adv-x="1792" /> -<glyph unicode="" horiz-adv-x="1792" /> -</font> -</defs></svg> \ No newline at end of file diff --git a/source/font/fontawesome-webfont.ttf b/source/font/fontawesome-webfont.ttf deleted file mode 100644 index d3659246915cacb0c9204271f1f9fc5f77049eac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79076 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 diff --git a/source/font/fontawesome-webfont.woff b/source/font/fontawesome-webfont.woff deleted file mode 100644 index b9bd17e158d87fb1477f7ac3ddbb5a676f3c26d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43572 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 diff --git a/source/getting-started/automation.markdown b/source/getting-started/automation.markdown index 024912d4b0d..5067a348deb 100644 --- a/source/getting-started/automation.markdown +++ b/source/getting-started/automation.markdown @@ -3,7 +3,9 @@ title: "Automating Home Assistant" description: "A quick intro on getting your first automation going." --- -Once your {% term devices %} are set up, it's time to put the cherry on the pie: {% term automation %}. We're going to create a simple automation to turn on the lights when the sun sets. Of course, this assumes that you have set up an integration that provides a light at this point. +Once your {% term devices %} are set up, it's time to put the cherry on the pie: {% term automation %}. + +We're going to create a simple automation to turn on the lights when the sun sets. Of course, this assumes that you have set up an integration that provides a light at this point. ## Automatically turn on the lights before sunset diff --git a/source/getting-started/configuration.markdown b/source/getting-started/configuration.markdown index b18abfa0212..6d8ab275707 100644 --- a/source/getting-started/configuration.markdown +++ b/source/getting-started/configuration.markdown @@ -5,11 +5,9 @@ description: "Instructions to get Home Assistant configured." The onboarding process takes care of the initial setup for Home Assistant, such as naming your home and selecting your location. After initial onboarding, these options can be changed in the user interface by clicking on Configuration in the sidebar and clicking on General, or by manually editing them in the Home Assistant configuration file called `configuration.yaml`. This section will explain how to do the latter. -<div class='note'> - +{% note %} The steps below do not apply to Home Assistant Core & Container installations, for those types of installations, [see here](/docs/configuration/). - -</div> +{% endnote %} We are going to help you make your first changes to `configuration.yaml`. To do this, we are going to install an add-on from the Home Assistant add-on store: the File editor. To get to the add-on store, go to {% my supervisor title="Settings > Add-ons" %}. On the new page, open the add-on store tab. @@ -34,11 +32,11 @@ Now let's make a change using the file editor: we are going to change the name, unit_system: us_customary time_zone: America/Chicago ``` -<div class='note'> +{% note %} - Valid options for `unit_system` are `us_customary` or `metric`. See [here](https://timezonedb.com/time-zones) for a list of valid time zones. Enter the appropriate option found under the Time Zone column at that page. +Valid options for `unit_system` are `us_customary` or `metric`. See [here](https://timezonedb.com/time-zones) for a list of valid time zones. Enter the appropriate option found under the Time Zone column at that page. -</div> +{% endnote %} - Click the save icon in the top right to commit changes. - Most changes in `configuration.yaml` require Home Assistant to be restarted to see the changes. You can verify that your changes are acceptable by running a configuration check. Do this by navigating to {% my server_controls title="Developer Tools > YAML" %} and then clicking on the **Check configuration** button. When it's valid, it will show the text "Configuration valid!". In order for the **Check Configuration**" button to be visible, you must enable **Advanced Mode** on your user profile. @@ -46,11 +44,11 @@ Now let's make a change using the file editor: we are going to change the name, ![Screenshot of the "General" page in the configuration panel.](/images/screenshots/configuration-validation.png) -<div class='note'> +{% note %} - If you have watched any videos about setting up Home Assistant using `configuration.yaml` (particularly ones that are old), you might notice your default configuration file is much smaller than what the videos show. Don't be concerned, you haven't done anything wrong. Many items in the default configuration files shown in those old videos are now included in the `default_config:` line that you see in your configuration file. [See here](/integrations/default_config/) for more information on what's included in that line. +If you have watched any videos about setting up Home Assistant using `configuration.yaml` (particularly ones that are old), you might notice your default configuration file is much smaller than what the videos show. Don't be concerned, you haven't done anything wrong. Many items in the default configuration files shown in those old videos are now included in the `default_config:` line that you see in your configuration file. [See here](/integrations/default_config/) for more information on what's included in that line. -</div> +{% endnote %} ### Editing configuration via Samba/Windows Networking diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 4e8fa10bf8f..2b3e22d0790 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -5,12 +5,14 @@ body_id: getting_started show_title: true --- -{% include getting-started/next_step.html step="Installation" link="/installation/" %} -{% include getting-started/next_step.html step="Onboarding" link="/getting-started/onboarding/" %} -{% include getting-started/next_step.html step="Concepts and terminology" link="/getting-started/concepts-terminology/" %} -{% include getting-started/next_step.html step="Edit the dashboard" link="/getting-started/onboarding_dashboard/" %} -{% include getting-started/next_step.html step="Integration" link="/getting-started/integration/" %} -{% include getting-started/next_step.html step="Automation" link="/getting-started/automation/" %} -{% include getting-started/next_step.html step="Presence detection" link="/getting-started/presence-detection/" %} -{% include getting-started/next_step.html step="Join the community" link="/getting-started/join-the-community/" %} -{% include getting-started/next_step.html step="Advanced Configuration" link="/getting-started/configuration/" %} +<!-- textlint-disable --> +{% include getting-started/next_step.html step="Installation" link="/installation/" icon="simple-icons:homeassistant" %} +<!-- textlint-enable --> +{% include getting-started/next_step.html step="Onboarding" link="/getting-started/onboarding/" icon="fluent-mdl2:onboarding" %} +{% include getting-started/next_step.html step="Concepts and terminology" link="/getting-started/concepts-terminology/" icon="material-symbols:dictionary" %} +{% include getting-started/next_step.html step="Edit the dashboard" link="/getting-started/onboarding_dashboard/" icon="mdi:view-dashboard-edit" %} +{% include getting-started/next_step.html step="Integration" link="/getting-started/integration/" icon="mdi:devices" %} +{% include getting-started/next_step.html step="Automation" link="/getting-started/automation/" icon="mdi:robot-happy" %} +{% include getting-started/next_step.html step="Presence detection" link="/getting-started/presence-detection/" icon="mdi:motion-detector" %} +{% include getting-started/next_step.html step="Join the community" link="/getting-started/join-the-community/" icon="mdi:people-group-outline" %} +{% include getting-started/next_step.html step="Advanced Configuration" link="/getting-started/configuration/" icon="mdi:cog" %} diff --git a/source/getting-started/presence-detection.markdown b/source/getting-started/presence-detection.markdown index 3d1f98eb8e6..a206c6e1a47 100644 --- a/source/getting-started/presence-detection.markdown +++ b/source/getting-started/presence-detection.markdown @@ -24,9 +24,9 @@ During the setup of Home Assistant Companion on your mobile device, the app will {% term Zones %} allow you to name areas on a map. These areas can then be used to name the location a tracked user is, or use entering/leaving a zone as an automation {% term trigger %} or {% term condition %}. See [Zones integration](/integrations/zone/) page for more details like creating zones. -<div class='note'> +{% note %} The <a href="/dashboards/map/">map dashboard</a> will hide all devices that are home. -</div> +{% endnote %} [routers]: /integrations/#presence-detection [nmap]: /integrations/nmap_tracker diff --git a/source/images/footer-logo-text.svg b/source/images/footer-logo-text.svg new file mode 100644 index 00000000000..5f06722ed50 --- /dev/null +++ b/source/images/footer-logo-text.svg @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg id="b" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 146.62 71.24"> + <g id="c" data-name="Layer 1"> + <g> + <path d="M2.95,0h4.46v10.99l11.58.04V0h4.5v26.28h-4.5v-11.3l-11.58-.04v11.34H2.95V0Z" fill="#1d2126" stroke-width="0"/> + <path d="M36.57,8.03c2.72,0,4.93.87,6.64,2.62s2.57,3.99,2.57,6.73-.86,4.97-2.57,6.71-3.93,2.62-6.64,2.62-4.97-.87-6.68-2.62-2.57-3.98-2.57-6.71.86-5,2.57-6.74,3.94-2.61,6.68-2.61ZM36.57,22.89c1.45,0,2.63-.51,3.54-1.54s1.36-2.36,1.36-4-.45-2.97-1.36-3.98-2.09-1.52-3.54-1.52-2.69.51-3.6,1.52-1.37,2.34-1.37,3.98.46,2.97,1.37,4,2.12,1.54,3.6,1.54Z" fill="#1d2126" stroke-width="0"/> + <path d="M76.15,14.98v11.3h-4.13v-10.65c0-1.23-.32-2.19-.95-2.88s-1.49-1.04-2.58-1.04c-1.16,0-2.09.38-2.78,1.13s-1.04,1.81-1.04,3.17v10.27h-4.18v-10.65c0-1.23-.31-2.19-.92-2.88s-1.47-1.04-2.56-1.04c-1.16,0-2.09.38-2.79,1.13s-1.05,1.81-1.05,3.17v10.27h-4.25V8.53h3.96l.14,1.71c1.03-1.51,2.71-2.27,5.04-2.27,1.36,0,2.54.28,3.53.84s1.75,1.38,2.27,2.46c.43-1.03,1.15-1.84,2.15-2.43s2.19-.88,3.58-.88c2.02,0,3.62.62,4.8,1.86s1.78,2.96,1.78,5.15Z" fill="#1d2126" stroke-width="0"/> + <path d="M96.78,18.97h-13.61c.14,1.34.64,2.36,1.51,3.06s1.97,1.05,3.3,1.05c2.17,0,3.69-.9,4.55-2.71l3.55,1.41c-.67,1.56-1.72,2.78-3.16,3.66s-3.08,1.32-4.95,1.32c-2.62,0-4.75-.86-6.39-2.58s-2.45-3.97-2.45-6.76.82-5.06,2.47-6.8,3.8-2.62,6.46-2.62,4.72.86,6.31,2.58,2.39,3.99,2.39,6.8v1.58ZM83.24,15.98h9.21c-.08-1.44-.52-2.54-1.31-3.3s-1.85-1.13-3.19-1.13-2.4.38-3.23,1.15-1.32,1.86-1.48,3.28Z" fill="#1d2126" stroke-width="0"/> + <path d="M17.17,56.16H7.17l-2.16,6.12H.4l9.49-26.28h4.61l9.51,26.28h-4.71l-2.13-6.12ZM15.87,52.38l-3.67-10.51-3.71,10.51h7.38Z" fill="#1d2126" stroke-width="0"/> + <path d="M32.35,59.33c.88,0,1.57-.17,2.08-.52s.76-.86.76-1.54c0-.95-.64-1.58-1.92-1.9l-2.44-.65c-3.36-.91-5.04-2.64-5.04-5.19,0-1.63.59-2.96,1.78-3.99s2.78-1.55,4.78-1.55c1.79,0,3.3.41,4.51,1.23s1.95,1.95,2.22,3.38l-3.81.9c-.08-.64-.38-1.15-.89-1.53s-1.14-.56-1.89-.56-1.38.19-1.85.57-.7.88-.7,1.49c0,.49.18.9.53,1.23s.9.59,1.63.79l2.41.6c1.61.43,2.83,1.09,3.67,1.97s1.27,1.96,1.27,3.25c0,1.66-.63,2.99-1.88,3.97s-2.98,1.48-5.19,1.48c-2.04,0-3.67-.45-4.9-1.34s-1.96-2.11-2.18-3.63l3.88-.69c.07.7.38,1.25.94,1.64s1.3.59,2.22.59Z" fill="#1d2126" stroke-width="0"/> + <path d="M48.48,59.33c.88,0,1.57-.17,2.08-.52s.76-.86.76-1.54c0-.95-.64-1.58-1.92-1.9l-2.44-.65c-3.36-.91-5.04-2.64-5.04-5.19,0-1.63.59-2.96,1.78-3.99s2.78-1.55,4.78-1.55c1.79,0,3.3.41,4.51,1.23s1.95,1.95,2.22,3.38l-3.81.9c-.08-.64-.38-1.15-.89-1.53s-1.14-.56-1.89-.56-1.38.19-1.85.57-.7.88-.7,1.49c0,.49.18.9.53,1.23s.9.59,1.63.79l2.41.6c1.61.43,2.83,1.09,3.67,1.97s1.27,1.96,1.27,3.25c0,1.66-.63,2.99-1.88,3.97s-2.98,1.48-5.19,1.48c-2.04,0-3.67-.45-4.9-1.34s-1.96-2.11-2.18-3.63l3.88-.69c.07.7.38,1.25.94,1.64s1.3.59,2.22.59Z" fill="#1d2126" stroke-width="0"/> + <path d="M58.28,38.37c0-.76.26-1.4.78-1.92s1.16-.77,1.91-.77,1.37.26,1.89.79.78,1.16.78,1.9-.26,1.37-.78,1.91-1.15.8-1.89.8-1.37-.27-1.9-.8-.79-1.17-.79-1.91ZM63.1,44.53v17.75h-4.25v-17.75h4.25Z" fill="#1d2126" stroke-width="0"/> + <path d="M73.39,59.33c.88,0,1.57-.17,2.08-.52s.76-.86.76-1.54c0-.95-.64-1.58-1.92-1.9l-2.44-.65c-3.36-.91-5.04-2.64-5.04-5.19,0-1.63.59-2.96,1.78-3.99s2.78-1.55,4.78-1.55c1.79,0,3.3.41,4.51,1.23s1.95,1.95,2.22,3.38l-3.81.9c-.08-.64-.38-1.15-.89-1.53s-1.14-.56-1.89-.56-1.38.19-1.85.57-.7.88-.7,1.49c0,.49.18.9.53,1.23s.9.59,1.63.79l2.41.6c1.61.43,2.83,1.09,3.67,1.97s1.27,1.96,1.27,3.25c0,1.66-.63,2.99-1.88,3.97s-2.98,1.48-5.19,1.48c-2.04,0-3.67-.45-4.9-1.34s-1.96-2.11-2.18-3.63l3.88-.69c.07.7.38,1.25.94,1.64s1.3.59,2.22.59Z" fill="#1d2126" stroke-width="0"/> + <path d="M93.19,62.28c-1.22.27-2.25.4-3.09.4-1.79,0-3.19-.49-4.19-1.48s-1.5-2.45-1.5-4.39v-8.68h-2.72v-3.6h2.72v-5.54h4.22v5.54h4.1v3.6h-4.1v7.93c0,1.92.74,2.88,2.23,2.88.48,0,1.08-.12,1.79-.37l.54,3.71Z" fill="#1d2126" stroke-width="0"/> + <path d="M107.44,62.28c-.14-.57-.24-1.25-.3-2.02-.52.76-1.25,1.37-2.19,1.82s-2.04.68-3.28.68c-1.95,0-3.5-.52-4.68-1.56s-1.76-2.44-1.76-4.21.58-3.09,1.73-4.07,2.73-1.47,4.74-1.47h5.33v-.69c0-1.11-.33-1.95-.98-2.5s-1.56-.83-2.73-.83c-2.07,0-3.56.87-4.46,2.6l-3.09-1.81c1.5-2.82,4.1-4.24,7.79-4.24,2.24,0,4.07.57,5.5,1.72,1.44,1.16,2.16,3.03,2.16,5.61v7.07c0,2,.11,3.3.32,3.88h-4.1ZM107.07,54.39h-4.38c-1,0-1.77.23-2.32.69s-.83,1.08-.83,1.88.28,1.46.84,1.9,1.37.65,2.41.65c1.25,0,2.28-.4,3.08-1.19s1.2-1.97,1.2-3.52v-.4Z" fill="#1d2126" stroke-width="0"/> + <path d="M131.65,51.33v10.95h-4.24v-10.04c0-1.69-.4-2.84-1.2-3.46-.76-.62-1.65-.93-2.67-.93-1.23,0-2.26.39-3.08,1.18s-1.23,1.9-1.23,3.36v9.9h-4.25v-17.75h3.99l.14,1.92c.5-.75,1.24-1.34,2.2-1.78s2.01-.66,3.15-.66c2.3,0,4.07.64,5.32,1.91s1.87,3.08,1.87,5.42Z" fill="#1d2126" stroke-width="0"/> + <path d="M145.23,62.28c-1.22.27-2.25.4-3.09.4-1.79,0-3.19-.49-4.19-1.48s-1.5-2.45-1.5-4.39v-8.68h-2.72v-3.6h2.72v-5.54h4.22v5.54h4.1v3.6h-4.1v7.93c0,1.92.74,2.88,2.23,2.88.48,0,1.08-.12,1.79-.37l.54,3.71Z" fill="#1d2126" stroke-width="0"/> + </g> + </g> +</svg> \ No newline at end of file diff --git a/source/images/footer-skyline.svg b/source/images/footer-skyline.svg new file mode 100644 index 00000000000..30218c777d7 --- /dev/null +++ b/source/images/footer-skyline.svg @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg id="b" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 740 130"> + <g id="c" data-name="Layer 1"> + <g> + <path d="M63.14,95.19l-26.33-26.33c-1.55-1.55-4.1-1.55-5.65,0l-26.33,26.33c-1.55,1.55-2.83,4.63-2.83,6.82v23.99c0,2.2,1.8,4,4,4h24.59l-10.83-10.83c-.56.19-1.15.3-1.77.3-3.01,0-5.46-2.45-5.46-5.46s2.45-5.46,5.46-5.46,5.46,2.45,5.46,5.46c0,.62-.11,1.21-.3,1.77l8.43,8.43v-30.88c-1.81-.89-3.06-2.75-3.06-4.9,0-3.01,2.45-5.46,5.46-5.46s5.46,2.45,5.46,5.46c0,2.15-1.25,4.01-3.06,4.9v21.66l8.39-8.39c-.17-.52-.26-1.08-.26-1.65,0-3.01,2.45-5.46,5.46-5.46s5.46,2.45,5.46,5.46-2.45,5.46-5.46,5.46c-.67,0-1.3-.13-1.89-.34l-11.7,11.7v8.23h25.59c2.2,0,4-1.8,4-4v-23.99c0-2.2-1.27-5.27-2.83-6.82Z" fill="#18bcf2" stroke-width="0"/> + <path d="M641.04,85.42c-1.87-1.87-4.92-1.87-6.78,0l-9.21,9.21c-1.87,1.87-3.39,1.23-3.39-1.41v-22.39c0-2.64-2.16-4.8-4.8-4.8h-22.39c-2.64,0-4.8,2.16-4.8,4.8v59.17h63.96v-27.19c0-2.64-1.53-6.32-3.39-8.19l-9.21-9.21Z" fill="#f2f4f9" stroke-width="0"/> + <path d="M673.63,130c0-17.66,14.32-31.98,31.98-31.98s31.98,14.32,31.98,31.98h-63.96Z" fill="#f2f4f9" stroke-width="0"/> + <g> + <rect x="523.58" y="84.5" width="12.14" height="10.29" fill="#f2f4f9" stroke-width="0"/> + <path d="M535.72,97.5h-12.14v14.08h12.14v-14.08ZM528.86,110.04v-4.74h-2.35l3.93-6.32v4.74h2.39l-3.97,6.32Z" fill="#f2f4f9" stroke-width="0"/> + <path d="M564.89,66.04h-54.37c-2.64,0-4.8,2.16-4.8,4.8v59.17h21.69v-14.18h-8.08v-31.23c0-1.11.38-2.2,1.14-3.01.85-.91,1.88-1.36,3.11-1.36h12.05c1.11,0,2.21.39,3.01,1.15.91.86,1.36,1.9,1.36,3.14v14.04h3.61c.67,0,1.25.24,1.72.72.48.48.71,1.05.71,1.73v10.11c0,.57.23,1.02.7,1.37.47.35,1,.52,1.58.52.64,0,1.22-.17,1.75-.52.53-.35.79-.8.79-1.37v-17.92h-.36c-.59,0-1.08-.2-1.48-.61-.4-.41-.6-.91-.6-1.51v-4.65h.9v-2.57h2.03v2.57h1.76v-2.57h2.03v2.57h.9v4.65c0,.6-.2,1.1-.6,1.51-.4.41-.89.61-1.48.61h-.36v17.92c0,1.24-.52,2.44-1.45,3.27-1.11.98-2.4,1.47-3.87,1.47-1.37,0-2.55-.45-3.54-1.34-.99-.89-1.48-2.02-1.48-3.4v-9.8h-3.29v14.53h-8.08v14.18h37.76v-59.17c0-2.64-2.16-4.8-4.8-4.8Z" fill="#f2f4f9" stroke-width="0"/> + </g> + <g> + <path d="M287.52,95.08h-1.69v-1.99h1.69v-3.34h-1.69v-1.97h1.69v-1.46c0-.47-.16-.88-.49-1.2-.33-.33-.73-.49-1.21-.49s-.88.16-1.2.49c-.32.33-.49.73-.49,1.2v10.92h3.38v-2.16Z" fill="#f2f4f9" stroke-width="0"/> + <path d="M314.43,5.46l-57.18,57.18c-1.87,1.87-3.39,5.55-3.39,8.19v59.17h29.7v-13.64c-1.69-.39-3.19-1.22-4.49-2.51-1.85-1.85-2.77-4.1-2.77-6.77,0-1.48.32-2.9.95-4.25.63-1.35,1.6-2.38,2.9-3.09v-13.41c0-1.59.55-2.94,1.64-4.05s2.43-1.67,4.02-1.67,2.88.53,3.98,1.59c1.16,1.12,1.75,2.7,1.75,4.31v13.22c1.27.71,2.23,1.75,2.88,3.1.65,1.35.97,2.77.97,4.26,0,2.65-.93,4.9-2.8,6.75-1.31,1.3-2.81,2.13-4.51,2.51v13.64h29.75V6.87c0-2.64-1.53-3.27-3.39-1.41Z" fill="#f2f4f9" stroke-width="0"/> + </g> + <g> + <path d="M203.73,68.47l-1.9-1.86-1.74,1.69c-.28.26-.51.56-.69.92s-.27.71-.27,1.08c0,.75.27,1.39.81,1.91.54.53,1.19.79,1.95.79s1.41-.27,1.94-.8c.53-.53.8-1.17.8-1.91,0-.34-.08-.65-.25-.95s-.38-.59-.63-.87Z" fill="#f2f4f9" stroke-width="0"/> + <path d="M212.49,52.05h-21.24v28.01h21.24v-28.01ZM199.88,55.29c.34-.32.76-.49,1.25-.49s.93.17,1.28.5c.34.33.52.75.52,1.24s-.17.9-.52,1.23c-.34.33-.76.5-1.26.5s-.92-.16-1.26-.48-.52-.74-.52-1.25.17-.93.51-1.26ZM194.34,57.77c-.34-.33-.51-.75-.51-1.24s.17-.9.51-1.23c.34-.33.75-.5,1.24-.5s.91.16,1.25.48.52.74.52,1.25-.17.93-.51,1.26c-.34.32-.75.49-1.24.49s-.92-.17-1.26-.5ZM206.3,74.6c-1.22,1.16-2.69,1.73-4.42,1.73s-3.19-.58-4.43-1.74c-1.23-1.16-1.85-2.6-1.83-4.33,0-.84.17-1.65.54-2.4s.84-1.42,1.42-2l4.29-4.22,4.45,4.36c.59.59,1.04,1.26,1.35,1.99.31.73.47,1.49.47,2.28,0,1.72-.61,3.16-1.83,4.32Z" fill="#f2f4f9" stroke-width="0"/> + <path d="M230.48,30.66l-9.21-9.21c-1.87-1.87-4.92-1.87-6.78,0l-9.21,9.21c-1.87,1.87-4.92,1.87-6.78,0l-9.21-9.21c-1.87-1.87-4.92-1.87-6.78,0l-9.21,9.21c-1.87,1.87-3.39,5.55-3.39,8.19v91.15h28.99v-45.96h-7.64c-1.12,0-2.07-.38-2.83-1.15-.76-.76-1.15-1.71-1.15-2.83v-28.01c0-1.13.38-2.09,1.15-2.86.76-.77,1.71-1.16,2.83-1.16h21.24c1.13,0,2.09.39,2.86,1.16.77.77,1.16,1.73,1.16,2.86v28.01c0,1.12-.39,2.07-1.16,2.83-.77.76-1.73,1.15-2.86,1.15h-9.08v45.96h30.47V38.85c0-2.64-1.53-6.32-3.39-8.19Z" fill="#f2f4f9" stroke-width="0"/> + </g> + <g> + <polygon points="356.28 85.75 356.28 92.43 360.21 92.43 358.86 85.75 356.28 85.75" fill="#f2f4f9" stroke-width="0"/> + <path d="M375.86,106.84c-1.13-1.09-2.52-1.63-4.19-1.63h-3.47c-1.66,0-3.06.54-4.19,1.63-1.13,1.09-1.69,2.39-1.69,3.91v1.65s15.23,0,15.23,0v-1.65c0-1.52-.56-2.83-1.69-3.91ZM368.74,110.1c-.32-.32-.49-.73-.49-1.21s.16-.88.49-1.21c.32-.32.73-.49,1.21-.49s.88.16,1.21.49c.32.32.49.73.49,1.21s-.16.88-.49,1.21c-.32.32-.73.49-1.21.49s-.88-.16-1.21-.49Z" fill="#f2f4f9" stroke-width="0"/> + <polygon points="374.26 101.7 377.05 85.75 362.41 85.75 365.63 101.7 374.26 101.7" fill="#f2f4f9" stroke-width="0"/> + <path d="M389.18,21.45c-1.87-1.87-4.92-1.87-6.78,0l-9.21,9.21c-1.87,1.87-3.39,5.55-3.39,8.19v22.39c0,2.64-1.53,3.27-3.39,1.41l-9.21-9.21c-1.87-1.87-4.92-1.87-6.78,0l-9.21,9.21c-1.87,1.87-3.39,5.55-3.39,8.19v59.17s29.73,0,29.73,0v-14.09s-5.22,0-5.22,0c-.95,0-1.77-.35-2.47-1.04-.7-.7-1.04-1.52-1.04-2.47v-1.65c0-1.33.31-2.59.93-3.79.62-1.2,1.54-2.24,2.75-3.11l-1.69-7.91h-3.94c-1.04,0-2.07-.36-2.82-1.06-.85-.79-1.28-1.76-1.28-2.91v-5.67c0-1.03.36-2.05,1.07-2.8.8-.84,1.78-1.27,2.95-1.27h9.31s0-2.12,0-2.12h7.28v2.12s7.83,0,7.83,0l-3.81,21.62c1.21.87,2.13,1.91,2.75,3.12.62,1.2.93,2.46.93,3.78v1.65c0,.95-.35,1.77-1.04,2.47-.7.7-1.52,1.04-2.47,1.04h-5.5s0,14.09,0,14.09h29.73s0-59.17,0-59.17c0-2.64,0-6.96,0-9.59v-22.39c0-2.64-1.53-6.32-3.39-8.19l-9.21-9.21Z" fill="#f2f4f9" stroke-width="0"/> + </g> + <g> + <path d="M439.73,87.42v21.24s28.01,0,28.01,0v-21.24s-28.01,0-28.01,0ZM442.26,106.12v-3.47c.91.06,1.69.42,2.33,1.09s1.02,1.46,1.14,2.38h-3.47ZM447.43,106.12c0-1.43-.5-2.65-1.5-3.65-1-1.01-2.22-1.51-3.66-1.51v-2.54c2.13,0,3.95.75,5.45,2.24,1.5,1.49,2.25,3.31,2.25,5.46h-2.54ZM446.91,95.14c1.46.63,2.72,1.48,3.79,2.55,1.07,1.07,1.92,2.33,2.55,3.79.63,1.46.95,3.01.95,4.64h-2.54c0-2.62-.91-4.84-2.73-6.66-1.82-1.82-4.04-2.73-6.66-2.73v-2.54c1.64,0,3.18.32,4.64.95Z" fill="#f2f4f9" stroke-width="0"/> + <path d="M446.83,116.02v-3.38s-7.02,0-7.02,0c-1.03,0-2.05-.36-2.8-1.06-.84-.79-1.27-1.77-1.27-2.91v-21.16c0-1.04.36-2.07,1.06-2.82.79-.85,1.76-1.28,2.91-1.28h27.92c1.04,0,2.07.36,2.83,1.07.85.8,1.28,1.78,1.28,2.95v21.15c0,1.03-.36,2.05-1.07,2.8-.8.84-1.79,1.27-2.95,1.27h-7.07s0,3.38,0,3.38h-4.66s0,13.98,0,13.98h29.73s0-59.17,0-59.17c0-2.64-1.53-6.32-3.39-8.19l-25.2-25.2c-1.87-1.87-4.92-1.87-6.78,0l-25.2,25.2c-1.87,1.87-3.39,5.55-3.39,8.19v59.17s29.73,0,29.73,0v-13.98s-4.66,0-4.66,0Z" fill="#f2f4f9" stroke-width="0"/> + </g> + <g> + <path d="M112.39,100.32h11.11c1.3-.87,2.32-1.98,3.07-3.34.75-1.36,1.12-2.84,1.12-4.44,0-2.69-.96-4.98-2.88-6.88-1.92-1.9-4.22-2.86-6.9-2.86s-4.98.95-6.9,2.86c-1.92,1.9-2.88,4.2-2.88,6.88,0,1.6.38,3.08,1.14,4.43.76,1.35,1.8,2.47,3.1,3.34Z" fill="#f2f4f9" stroke-width="0"/> + <path d="M85.95,130h29.7s0-13.57,0-13.57c-.15-.12-.29-.24-.43-.38-.75-.8-1.12-1.8-1.12-2.98h7.62c0,1.18-.37,2.18-1.12,2.98-.14.15-.28.27-.43.39v13.57s29.75,0,29.75,0v-59.17c0-2.64-2.16-4.8-4.8-4.8h-6.4c-2.64,0-4.8-2.16-4.8-4.8v-22.39c0-2.64-2.16-4.8-4.8-4.8h-22.39c-2.64,0-4.8,2.16-4.8,4.8v22.39c0,2.64-2.16,4.8-4.8,4.8h-6.4c-2.64,0-4.8,2.16-4.8,4.8v59.17ZM125.07,110.18h-14.3v-3.05h14.3v3.05ZM108.23,82.88c2.71-2.73,5.94-4.09,9.67-4.09,3.73,0,6.97,1.36,9.7,4.09,2.74,2.73,4.1,5.95,4.1,9.66,0,2.51-.62,4.77-1.86,6.77-1.24,2-2.91,3.67-4.99,4.99h-13.88c-2.03-1.33-3.67-2.99-4.93-4.98-1.26-2-1.88-4.26-1.88-6.78,0-3.72,1.36-6.94,4.07-9.66Z" fill="#f2f4f9" stroke-width="0"/> + </g> + <rect width="740" height="130" fill="none" stroke-width="0"/> + </g> + </g> +</svg> \ No newline at end of file diff --git a/source/images/home-assistant-logo-white.svg b/source/images/home-assistant-logo-white.svg new file mode 100644 index 00000000000..df7045ba9f5 --- /dev/null +++ b/source/images/home-assistant-logo-white.svg @@ -0,0 +1,16 @@ +<svg width="1705" height="241" viewBox="0 0 1705 241" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M229.39 109.203L130.61 10.423C124.78 4.59304 115.23 4.59304 109.4 10.423L10.61 109.203C4.78 115.033 0 126.563 0 134.813V224.813C0 233.063 6.75 239.813 15 239.813H107.27L66.64 199.183C64.55 199.903 62.32 200.313 60 200.313C48.7 200.313 39.5 191.113 39.5 179.813C39.5 168.513 48.7 159.313 60 159.313C71.3 159.313 80.5 168.513 80.5 179.813C80.5 182.143 80.09 184.373 79.37 186.463L111 218.093V102.213C104.2 98.873 99.5 91.893 99.5 83.823C99.5 72.523 108.7 63.323 120 63.323C131.3 63.323 140.5 72.523 140.5 83.823C140.5 91.893 135.8 98.873 129 102.213V183.483L160.46 152.023C159.84 150.063 159.5 147.983 159.5 145.823C159.5 134.523 168.7 125.323 180 125.323C191.3 125.323 200.5 134.523 200.5 145.823C200.5 157.123 191.3 166.323 180 166.323C177.5 166.323 175.12 165.853 172.91 165.033L129 208.943V239.823H225C233.25 239.823 240 233.073 240 224.823V134.823C240 126.573 235.23 115.053 229.39 109.213V109.203Z" fill="#F2F4F9"/> +<path d="M320.04 46.6064H344.8V107.606L409.16 107.806V46.6064H434.16V192.606H409.16V129.826L344.8 129.626V192.626H320L320.04 46.6064Z" fill="#F2F4F9"/> +<path d="M506.8 91.2364C521.9 91.2364 534.203 96.0864 543.71 105.786C553.217 115.486 557.97 127.956 557.97 143.196C557.97 158.363 553.217 170.796 543.71 180.496C534.203 190.196 521.9 195.046 506.8 195.046C491.56 195.046 479.19 190.196 469.69 180.496C460.19 170.796 455.437 158.363 455.43 143.196C455.43 127.863 460.183 115.38 469.69 105.746C479.197 96.1131 491.567 91.2764 506.8 91.2364ZM506.8 173.756C514.873 173.756 521.433 170.91 526.48 165.216C531.527 159.523 534.047 152.116 534.04 142.996C534.04 133.89 531.52 126.516 526.48 120.876C521.44 115.236 514.88 112.423 506.8 112.436C498.533 112.436 491.867 115.25 486.8 120.876C481.733 126.503 479.193 133.876 479.18 142.996C479.18 152.116 481.72 159.523 486.8 165.216C491.88 170.91 498.547 173.756 506.8 173.756Z" fill="#F2F4F9"/> +<path d="M726.68 129.826V192.616H703.68V133.426C703.68 126.6 701.923 121.266 698.41 117.426C694.897 113.586 690.11 111.663 684.05 111.656C677.61 111.656 672.467 113.756 668.62 117.956C664.773 122.156 662.853 128.033 662.86 135.586V192.586H639.67V133.426C639.67 126.6 637.96 121.266 634.54 117.426C631.12 113.586 626.383 111.663 620.33 111.656C613.89 111.656 608.717 113.756 604.81 117.956C600.903 122.156 598.95 128.033 598.95 135.586V192.586H575.32V93.9764H597.32L598.1 103.446C603.833 95.0464 613.167 90.8464 626.1 90.8464C633.653 90.8464 640.197 92.4097 645.73 95.5364C651.257 98.6586 655.662 103.441 658.32 109.206C660.708 103.505 664.931 98.7646 670.32 95.7364C675.88 92.4764 682.503 90.8464 690.19 90.8464C701.39 90.8464 710.277 94.2964 716.85 101.196C723.423 108.096 726.7 117.64 726.68 129.826Z" fill="#F2F4F9"/> +<path d="M841.28 151.986H765.7C766.48 159.406 769.28 165.073 774.1 168.986C778.92 172.9 785.04 174.846 792.46 174.826C804.5 174.826 812.93 169.826 817.75 159.826L837.48 167.636C833.937 176.093 827.799 183.206 819.95 187.946C811.95 192.84 802.787 195.283 792.46 195.276C777.873 195.276 766.04 190.506 756.96 180.966C747.88 171.426 743.337 158.91 743.33 143.416C743.33 127.923 747.907 115.326 757.06 105.626C766.213 95.9264 778.173 91.0764 792.94 91.0764C807.46 91.0764 819.147 95.8598 828 105.426C836.853 114.993 841.28 127.593 841.28 143.226V151.986ZM766.09 135.376H817.26C816.8 127.376 814.377 121.273 809.99 117.066C805.603 112.86 799.693 110.78 792.26 110.826C784.927 110.826 778.927 112.956 774.26 117.216C769.593 121.476 766.87 127.53 766.09 135.376Z" fill="#F2F4F9"/> +<path d="M993.53 158.626H937.97L925.97 192.626H900.38L953.11 46.6264H978.7L1031.53 192.626H1005.36L993.53 158.626ZM986.31 137.626L965.9 79.2264L945.29 137.626H986.31Z" fill="#F2F4F9"/> +<path d="M1077.86 176.196C1082.74 176.196 1086.6 175.236 1089.43 173.316C1090.82 172.385 1091.94 171.108 1092.69 169.61C1093.43 168.113 1093.78 166.447 1093.68 164.776C1093.68 159.51 1090.13 155.993 1083.04 154.226L1069.46 150.616C1050.79 145.536 1041.46 135.933 1041.46 121.806C1041.46 112.76 1044.75 105.37 1051.32 99.6364C1057.89 93.9031 1066.75 91.0397 1077.88 91.0464C1087.84 91.0464 1096.17 93.3231 1102.88 97.8764C1106.12 99.9841 1108.89 102.737 1111.01 105.963C1113.14 109.19 1114.57 112.82 1115.23 116.626L1094.04 121.626C1093.86 119.944 1093.33 118.317 1092.48 116.854C1091.63 115.391 1090.48 114.124 1089.11 113.136C1086.04 110.98 1082.36 109.881 1078.61 110.006C1074.38 110.006 1070.96 111.066 1068.36 113.186C1067.11 114.159 1066.1 115.412 1065.42 116.845C1064.74 118.278 1064.41 119.851 1064.45 121.436C1064.42 122.72 1064.67 123.994 1065.17 125.173C1065.68 126.353 1066.43 127.411 1067.38 128.276C1069.34 130.096 1072.37 131.56 1076.46 132.666L1089.84 135.986C1098.76 138.4 1105.56 142.046 1110.25 146.926C1112.56 149.322 1114.36 152.152 1115.57 155.253C1116.77 158.353 1117.34 161.662 1117.25 164.986C1117.25 174.24 1113.77 181.596 1106.8 187.056C1099.83 192.516 1090.23 195.253 1077.99 195.266C1066.66 195.266 1057.57 192.776 1050.74 187.796C1047.44 185.455 1044.65 182.454 1042.57 178.982C1040.48 175.51 1039.14 171.643 1038.63 167.626L1060.21 163.816C1060.34 165.633 1060.88 167.398 1061.78 168.979C1062.69 170.559 1063.94 171.915 1065.44 172.946C1068.6 175.116 1072.72 176.196 1077.86 176.196Z" fill="#F2F4F9"/> +<path d="M1167.46 176.196C1172.35 176.196 1176.2 175.196 1179.04 173.316C1180.43 172.383 1181.55 171.105 1182.29 169.607C1183.03 168.11 1183.37 166.445 1183.28 164.776C1183.28 159.51 1179.73 155.993 1172.64 154.226L1159.07 150.616C1140.4 145.536 1131.07 135.933 1131.07 121.806C1131.07 112.76 1134.36 105.37 1140.93 99.6364C1147.5 93.9031 1156.36 91.0397 1167.49 91.0464C1177.45 91.0464 1185.78 93.3231 1192.49 97.8764C1195.73 99.9853 1198.5 102.739 1200.62 105.964C1202.75 109.19 1204.19 112.82 1204.85 116.626L1183.65 121.626C1183.47 119.944 1182.94 118.317 1182.09 116.854C1181.24 115.391 1180.09 114.124 1178.72 113.136C1175.65 110.98 1171.97 109.881 1168.22 110.006C1163.99 110.006 1160.57 111.066 1157.97 113.186C1156.72 114.16 1155.71 115.414 1155.03 116.846C1154.36 118.279 1154.02 119.851 1154.06 121.436C1154.03 122.72 1154.28 123.994 1154.79 125.173C1155.29 126.353 1156.04 127.411 1156.99 128.276C1158.99 130.096 1161.99 131.556 1166.08 132.666L1179.46 135.986C1188.37 138.4 1195.17 142.046 1199.87 146.926C1202.17 149.323 1203.98 152.154 1205.18 155.254C1206.38 158.354 1206.96 161.662 1206.87 164.986C1206.87 174.24 1203.39 181.596 1196.42 187.056C1189.45 192.516 1179.85 195.253 1167.61 195.266C1156.28 195.266 1147.19 192.776 1140.36 187.796C1137.06 185.455 1134.27 182.454 1132.19 178.982C1130.1 175.51 1128.76 171.643 1128.25 167.626L1149.84 163.816C1149.97 165.633 1150.5 167.397 1151.41 168.978C1152.31 170.558 1153.56 171.915 1155.06 172.946C1158.2 175.116 1162.32 176.196 1167.46 176.196Z" fill="#F2F4F9"/> +<path d="M1221.91 59.8264C1221.88 57.852 1222.24 55.8907 1222.97 54.0589C1223.71 52.2272 1224.81 50.5623 1226.2 49.1632C1227.6 47.764 1229.26 46.6592 1231.09 45.9142C1232.92 45.1692 1234.88 44.7993 1236.85 44.8264C1238.81 44.7963 1240.75 45.1706 1242.56 45.926C1244.36 46.6814 1246 47.8015 1247.35 49.2164C1250.14 52.0264 1251.71 55.8261 1251.71 59.7864C1251.71 63.7467 1250.14 67.5464 1247.35 70.3564C1246 71.7865 1244.38 72.9207 1242.57 73.6869C1240.76 74.453 1238.81 74.8343 1236.85 74.8064C1234.88 74.8321 1232.93 74.4501 1231.11 73.6843C1229.29 72.9184 1227.66 71.7854 1226.3 70.3564C1224.9 68.9882 1223.78 67.3499 1223.03 65.5403C1222.27 63.7306 1221.89 61.787 1221.91 59.8264ZM1248.67 94.0064V192.636H1225.03V93.9764L1248.67 94.0064Z" fill="#F2F4F9"/> +<path d="M1305.85 176.196C1310.73 176.196 1314.59 175.236 1317.42 173.316C1318.81 172.384 1319.93 171.106 1320.68 169.609C1321.42 168.112 1321.76 166.446 1321.67 164.776C1321.67 159.51 1318.12 155.993 1311.02 154.226L1297.45 150.616C1278.78 145.536 1269.45 135.933 1269.45 121.806C1269.45 112.76 1272.74 105.37 1279.31 99.6364C1285.88 93.9031 1294.74 91.0397 1305.88 91.0464C1315.84 91.0464 1324.17 93.3231 1330.88 97.8764C1334.11 99.9872 1336.88 102.741 1339.01 105.967C1341.13 109.193 1342.57 112.821 1343.23 116.626L1322.04 121.626C1321.86 119.944 1321.33 118.317 1320.48 116.854C1319.63 115.391 1318.48 114.124 1317.11 113.136C1314.04 110.982 1310.36 109.884 1306.61 110.006C1302.38 110.006 1298.96 111.066 1296.35 113.186C1295.1 114.161 1294.1 115.415 1293.42 116.848C1292.74 118.281 1292.41 119.852 1292.45 121.436C1292.42 122.72 1292.67 123.994 1293.17 125.173C1293.68 126.353 1294.43 127.411 1295.38 128.276C1297.33 130.096 1300.36 131.56 1304.46 132.666L1317.84 135.986C1326.76 138.4 1333.56 142.046 1338.25 146.926C1340.56 149.322 1342.36 152.152 1343.57 155.253C1344.77 158.353 1345.34 161.662 1345.25 164.986C1345.25 174.24 1341.77 181.596 1334.8 187.056C1327.83 192.516 1318.23 195.253 1305.99 195.266C1294.66 195.266 1285.58 192.776 1278.75 187.796C1275.44 185.459 1272.66 182.458 1270.57 178.985C1268.49 175.513 1267.15 171.645 1266.64 167.626L1288.22 163.816C1288.35 165.633 1288.88 167.397 1289.79 168.978C1290.69 170.558 1291.94 171.915 1293.44 172.946C1296.58 175.116 1300.7 176.196 1305.85 176.196Z" fill="#F2F4F9"/> +<path d="M1415.86 192.606C1410.23 193.964 1404.46 194.718 1398.67 194.856C1388.71 194.856 1380.95 192.12 1375.38 186.646C1369.81 181.173 1367.03 173.036 1367.03 162.236V113.996H1351.89V93.9964H1367.03V63.2164H1390.47V93.9764H1413.22V113.976H1390.47V157.976C1390.47 168.643 1394.6 173.976 1402.87 173.976C1406.29 173.833 1409.67 173.14 1412.87 171.926L1415.86 192.606Z" fill="#F2F4F9"/> +<path d="M1495.01 192.606C1494.16 188.914 1493.6 185.158 1493.35 181.376C1490.28 185.78 1486.08 189.273 1481.19 191.486C1475.48 194.09 1469.26 195.375 1462.98 195.246C1452.17 195.246 1443.5 192.366 1436.98 186.606C1430.46 180.846 1427.21 173.05 1427.22 163.216C1427.22 153.576 1430.43 146.04 1436.84 140.606C1443.25 135.173 1452.02 132.453 1463.15 132.446H1492.8V128.646C1492.8 122.46 1490.99 117.836 1487.38 114.776C1483.77 111.716 1478.71 110.186 1472.2 110.186C1460.68 110.186 1452.41 115.003 1447.39 124.636L1430.21 114.576C1438.54 98.8897 1452.96 91.0464 1473.47 91.0464C1485.9 91.0464 1496.08 94.2364 1504.03 100.616C1511.98 106.996 1515.98 117.38 1516.03 131.766V171.026C1516.03 182.153 1516.61 189.346 1517.78 192.606H1495.01ZM1493.01 148.756H1468.69C1463.16 148.756 1458.87 150.026 1455.8 152.566C1454.28 153.837 1453.08 155.441 1452.28 157.254C1451.48 159.067 1451.12 161.039 1451.21 163.016C1451.21 167.636 1452.77 171.153 1455.9 173.566C1459.03 175.976 1463.48 177.176 1469.28 177.176C1476.24 177.176 1481.94 174.98 1486.37 170.586C1490.8 166.193 1493.02 159.666 1493.01 151.006V148.756Z" fill="#F2F4F9"/> +<path d="M1629.53 131.766V192.606H1606V136.826C1606 127.446 1603.79 121.033 1599.36 117.586C1595.18 114.155 1589.92 112.323 1584.51 112.416C1581.37 112.323 1578.24 112.853 1575.31 113.975C1572.38 115.098 1569.69 116.791 1567.42 118.956C1562.87 123.316 1560.6 129.533 1560.59 137.606V192.606H1536.96V93.9764H1559.12L1559.9 104.616C1562.96 100.236 1567.19 96.803 1572.11 94.7064C1577.6 92.2344 1583.57 90.9856 1589.59 91.0464C1602.35 91.0464 1612.2 94.5764 1619.13 101.636C1626.06 108.696 1629.53 118.74 1629.53 131.766Z" fill="#F2F4F9"/> +<path d="M1704.98 192.606C1699.35 193.952 1693.59 194.696 1687.8 194.826C1677.84 194.826 1670.08 192.09 1664.51 186.616C1658.94 181.143 1656.16 173.006 1656.16 162.206V113.996H1641.02V93.9964H1656.16V63.2164H1679.59V93.9764H1702.35V113.976H1679.59V157.976C1679.59 168.643 1683.73 173.976 1692 173.976C1695.42 173.833 1698.8 173.14 1702 171.926L1704.98 192.606Z" fill="#F2F4F9"/> +</svg> diff --git a/source/images/home-assistant-logo.svg b/source/images/home-assistant-logo.svg index 10d3654ed4c..742b2124457 100644 --- a/source/images/home-assistant-logo.svg +++ b/source/images/home-assistant-logo.svg @@ -1,67 +1,17 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 277.55 43.62"> - <defs> - <style> - .cls-1, .cls-2, .cls-3 { - fill: none; - } - - .cls-2 { - stroke-width: 3px; - } - - .cls-2, .cls-4 { - stroke: #f2f4f9; - stroke-miterlimit: 10; - } - - .cls-5 { - fill: #1d2126; - } - - .cls-6 { - fill: #18bcf2; - } - - .cls-4 { - fill: #f2f4f9; - stroke-width: 1.5px; - } - - .cls-3 { - clip-path: url(#clippath); - } - </style> - <clipPath id="clippath"> - <polygon class="cls-1" points="40 40 0 40 0 20 20 0 40 20 40 40"/> - </clipPath> - </defs> - <g id="Layer_2-2" data-name="Layer 2"> - <g> - <path class="cls-5" d="m55.96,9.01h3.97v9.77l10.3.03v-9.8h4v23.36h-4v-10.05l-10.3-.03v10.08h-3.97V9.01Z"/> - <path class="cls-5" d="m85.84,16.15c2.42,0,4.39.78,5.91,2.33,1.52,1.55,2.28,3.55,2.28,5.98s-.76,4.42-2.28,5.97c-1.52,1.55-3.49,2.33-5.91,2.33s-4.42-.78-5.94-2.33c-1.52-1.55-2.28-3.54-2.28-5.97s.76-4.45,2.28-5.99c1.52-1.55,3.5-2.32,5.94-2.32Zm0,13.2c1.29,0,2.34-.46,3.15-1.37.81-.91,1.21-2.1,1.21-3.55s-.4-2.64-1.21-3.54c-.81-.9-1.86-1.35-3.15-1.35s-2.39.45-3.2,1.35c-.81.9-1.22,2.08-1.22,3.54s.41,2.64,1.22,3.55c.81.91,1.88,1.37,3.2,1.37Z"/> - <path class="cls-5" d="m121.02,22.32v10.05h-3.67v-9.47c0-1.09-.28-1.95-.84-2.56-.56-.61-1.33-.92-2.3-.92-1.03,0-1.85.34-2.47,1.01-.61.67-.92,1.61-.92,2.82v9.12h-3.72v-9.47c0-1.09-.27-1.95-.82-2.56-.55-.61-1.3-.92-2.27-.92-1.03,0-1.86.34-2.48,1.01s-.94,1.61-.94,2.82v9.12h-3.78v-15.78h3.52l.12,1.52c.92-1.34,2.41-2.02,4.48-2.02,1.21,0,2.25.25,3.14.75.89.5,1.56,1.23,2.02,2.19.39-.92,1.02-1.64,1.91-2.16.89-.52,1.95-.78,3.18-.78,1.79,0,3.21.55,4.27,1.66,1.05,1.1,1.58,2.63,1.58,4.58Z"/> - <path class="cls-5" d="m139.36,25.86h-12.09c.12,1.19.57,2.09,1.34,2.72.77.62,1.75.94,2.94.94,1.93,0,3.28-.8,4.05-2.41l3.16,1.25c-.59,1.39-1.53,2.47-2.8,3.25-1.28.78-2.74,1.17-4.4,1.17-2.33,0-4.23-.76-5.68-2.29-1.45-1.53-2.18-3.53-2.18-6.01s.73-4.49,2.2-6.05c1.46-1.55,3.38-2.33,5.74-2.33s4.19.77,5.61,2.3c1.42,1.53,2.12,3.55,2.12,6.05v1.41Zm-12.03-2.66h8.19c-.07-1.28-.46-2.26-1.16-2.93s-1.65-1.01-2.84-1.01-2.14.34-2.88,1.02c-.74.68-1.18,1.65-1.31,2.91Z"/> - <path class="cls-5" d="m163.72,26.93h-8.89l-1.92,5.44h-4.09l8.44-23.36h4.09l8.45,23.36h-4.19l-1.89-5.44Zm-1.16-3.36l-3.27-9.34-3.3,9.34h6.56Z"/> - <path class="cls-5" d="m177.21,29.74c.78,0,1.4-.15,1.85-.46.45-.31.68-.76.68-1.37,0-.84-.57-1.41-1.7-1.69l-2.17-.58c-2.99-.81-4.48-2.35-4.48-4.61,0-1.45.53-2.63,1.58-3.55,1.05-.92,2.47-1.38,4.25-1.38,1.59,0,2.93.36,4.01,1.09,1.08.73,1.74,1.73,1.98,3l-3.39.8c-.07-.57-.34-1.03-.79-1.36-.45-.33-1.01-.5-1.68-.5s-1.22.17-1.64.51c-.42.34-.62.78-.62,1.32,0,.44.16.8.47,1.09.31.29.8.53,1.45.7l2.14.53c1.43.39,2.52.97,3.27,1.75s1.12,1.75,1.12,2.89c0,1.48-.56,2.66-1.67,3.53-1.11.88-2.65,1.31-4.61,1.31-1.81,0-3.27-.4-4.36-1.2s-1.74-1.87-1.94-3.23l3.45-.61c.06.62.34,1.11.84,1.46.49.35,1.15.52,1.98.52Z"/> - <path class="cls-5" d="m191.55,29.74c.78,0,1.4-.15,1.85-.46.45-.31.68-.76.68-1.37,0-.84-.57-1.41-1.7-1.69l-2.17-.58c-2.99-.81-4.48-2.35-4.48-4.61,0-1.45.53-2.63,1.58-3.55,1.05-.92,2.47-1.38,4.25-1.38,1.59,0,2.93.36,4.01,1.09,1.08.73,1.74,1.73,1.98,3l-3.39.8c-.07-.57-.34-1.03-.79-1.36-.45-.33-1.01-.5-1.68-.5s-1.22.17-1.64.51c-.42.34-.62.78-.62,1.32,0,.44.16.8.47,1.09.31.29.8.53,1.45.7l2.14.53c1.43.39,2.52.97,3.27,1.75s1.12,1.75,1.12,2.89c0,1.48-.56,2.66-1.67,3.53-1.11.88-2.65,1.31-4.61,1.31-1.81,0-3.27-.4-4.36-1.2s-1.74-1.87-1.94-3.23l3.45-.61c.06.62.34,1.11.84,1.46.49.35,1.15.52,1.98.52Z"/> - <path class="cls-5" d="m200.26,11.11c0-.68.23-1.24.7-1.7.46-.46,1.03-.69,1.7-.69s1.22.23,1.68.7c.46.47.7,1.03.7,1.69s-.23,1.22-.7,1.7c-.46.47-1.02.71-1.68.71s-1.22-.24-1.69-.71c-.47-.47-.7-1.04-.7-1.7Zm4.28,5.47v15.78h-3.78v-15.78h3.78Z"/> - <path class="cls-5" d="m213.69,29.74c.78,0,1.4-.15,1.85-.46.45-.31.68-.76.68-1.37,0-.84-.57-1.41-1.7-1.69l-2.17-.58c-2.99-.81-4.48-2.35-4.48-4.61,0-1.45.53-2.63,1.58-3.55,1.05-.92,2.47-1.38,4.25-1.38,1.59,0,2.93.36,4.01,1.09,1.08.73,1.74,1.73,1.98,3l-3.39.8c-.07-.57-.34-1.03-.79-1.36-.45-.33-1.01-.5-1.68-.5s-1.22.17-1.64.51c-.42.34-.62.78-.62,1.32,0,.44.16.8.47,1.09.31.29.8.53,1.45.7l2.14.53c1.43.39,2.52.97,3.27,1.75s1.12,1.75,1.12,2.89c0,1.48-.56,2.66-1.67,3.53-1.11.88-2.65,1.31-4.61,1.31-1.81,0-3.27-.4-4.36-1.2s-1.74-1.87-1.94-3.23l3.45-.61c.06.62.34,1.11.84,1.46.49.35,1.15.52,1.98.52Z"/> - <path class="cls-5" d="m231.29,32.36c-1.08.24-2,.36-2.75.36-1.59,0-2.84-.44-3.73-1.31s-1.34-2.18-1.34-3.91v-7.72h-2.42v-3.2h2.42v-4.92h3.75v4.92h3.64v3.2h-3.64v7.05c0,1.71.66,2.56,1.98,2.56.43,0,.96-.11,1.59-.33l.48,3.3Z"/> - <path class="cls-5" d="m243.95,32.36c-.12-.51-.21-1.11-.27-1.8-.46.68-1.11,1.22-1.95,1.62-.84.4-1.81.6-2.91.6-1.73,0-3.11-.46-4.16-1.38-1.04-.92-1.56-2.17-1.56-3.74s.51-2.75,1.54-3.62c1.03-.87,2.43-1.3,4.21-1.3h4.73v-.61c0-.99-.29-1.73-.87-2.22-.58-.49-1.39-.73-2.43-.73-1.84,0-3.17.77-3.97,2.31l-2.75-1.61c1.33-2.51,3.64-3.77,6.92-3.77,1.99,0,3.62.51,4.89,1.53,1.28,1.03,1.92,2.69,1.92,4.98v6.28c0,1.78.09,2.93.28,3.45h-3.64Zm-.33-7.02h-3.89c-.89,0-1.57.2-2.06.61-.49.41-.73.96-.73,1.67s.25,1.3.75,1.69c.5.39,1.21.58,2.14.58,1.11,0,2.03-.35,2.73-1.05.71-.7,1.06-1.75,1.06-3.13v-.36Z"/> - <path class="cls-5" d="m265.48,22.63v9.73h-3.77v-8.92c0-1.5-.35-2.53-1.06-3.08-.68-.55-1.47-.83-2.38-.83-1.09,0-2.01.35-2.73,1.05-.73.7-1.09,1.69-1.09,2.98v8.8h-3.78v-15.78h3.55l.12,1.7c.45-.67,1.1-1.2,1.95-1.59.85-.39,1.79-.59,2.8-.59,2.04,0,3.62.57,4.73,1.7,1.11,1.13,1.66,2.74,1.66,4.82Z"/> - <path class="cls-5" d="m277.55,32.36c-1.08.24-2,.36-2.75.36-1.59,0-2.84-.44-3.73-1.31s-1.34-2.18-1.34-3.91v-7.72h-2.42v-3.2h2.42v-4.92h3.75v4.92h3.64v3.2h-3.64v7.05c0,1.71.66,2.56,1.98,2.56.43,0,.96-.11,1.59-.33l.48,3.3Z"/> - </g> - <g class="cls-3"> - <g> - <path class="cls-6" d="m40,37.5c0,1.37-1.12,2.5-2.5,2.5H2.5c-1.37,0-2.5-1.12-2.5-2.5v-15c0-1.37.8-3.3,1.77-4.27L18.23,1.77c.97-.97,2.56-.97,3.54,0l16.46,16.46c.97.97,1.77,2.89,1.77,4.27v15Z"/> - <path class="cls-1" d="m9.33,32.67c-1.1,0-2-.9-2-2v-5.63c0-1.1.64-2.64,1.41-3.41l9.84-9.84c.78-.78,2.05-.78,2.83,0l9.84,9.84c.78.78,1.41,2.31,1.41,3.41v5.63c0,1.1-.9,2-2,2H9.33Z"/> - <circle class="cls-4" cx="20" cy="14" r="2.67"/> - <circle class="cls-4" cx="30" cy="24.33" r="2.67"/> - <circle class="cls-4" cx="10" cy="30" r="2.67"/> - <polyline class="cls-2" points="20 13.98 20 40 10 30"/> - <line class="cls-2" x1="30" y1="24.23" x2="20.12" y2="34.11"/> - </g> - </g> - </g> -</svg> \ No newline at end of file +<svg width="1705" height="241" viewBox="0 0 1705 241" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M240 224.813C240 233.063 233.25 239.813 225 239.813H15C6.75 239.813 0 233.063 0 224.813V134.813C0 126.563 4.77 115.043 10.61 109.203L109.39 10.423C115.22 4.59304 124.77 4.59304 130.6 10.423L229.39 109.213C235.22 115.043 240 126.573 240 134.823V224.823V224.813Z" fill="#F2F4F9"/> +<path d="M229.39 109.203L130.61 10.423C124.78 4.59304 115.23 4.59304 109.4 10.423L10.61 109.203C4.78 115.033 0 126.563 0 134.813V224.813C0 233.063 6.75 239.813 15 239.813H107.27L66.64 199.183C64.55 199.903 62.32 200.313 60 200.313C48.7 200.313 39.5 191.113 39.5 179.813C39.5 168.513 48.7 159.313 60 159.313C71.3 159.313 80.5 168.513 80.5 179.813C80.5 182.143 80.09 184.373 79.37 186.463L111 218.093V102.213C104.2 98.873 99.5 91.893 99.5 83.823C99.5 72.523 108.7 63.323 120 63.323C131.3 63.323 140.5 72.523 140.5 83.823C140.5 91.893 135.8 98.873 129 102.213V183.483L160.46 152.023C159.84 150.063 159.5 147.983 159.5 145.823C159.5 134.523 168.7 125.323 180 125.323C191.3 125.323 200.5 134.523 200.5 145.823C200.5 157.123 191.3 166.323 180 166.323C177.5 166.323 175.12 165.853 172.91 165.033L129 208.943V239.823H225C233.25 239.823 240 233.073 240 224.823V134.823C240 126.573 235.23 115.053 229.39 109.213V109.203Z" fill="#18BCF2"/> +<path d="M320.04 46.6064H344.8V107.606L409.16 107.806V46.6064H434.16V192.606H409.16V129.826L344.8 129.626V192.626H320L320.04 46.6064Z" fill="#1D2126"/> +<path d="M506.8 91.2364C521.9 91.2364 534.203 96.0864 543.71 105.786C553.217 115.486 557.97 127.956 557.97 143.196C557.97 158.363 553.217 170.796 543.71 180.496C534.203 190.196 521.9 195.046 506.8 195.046C491.56 195.046 479.19 190.196 469.69 180.496C460.19 170.796 455.437 158.363 455.43 143.196C455.43 127.863 460.183 115.38 469.69 105.746C479.197 96.113 491.567 91.2764 506.8 91.2364ZM506.8 173.756C514.873 173.756 521.433 170.91 526.48 165.216C531.527 159.523 534.047 152.116 534.04 142.996C534.04 133.89 531.52 126.516 526.48 120.876C521.44 115.236 514.88 112.423 506.8 112.436C498.533 112.436 491.867 115.25 486.8 120.876C481.733 126.503 479.193 133.876 479.18 142.996C479.18 152.116 481.72 159.523 486.8 165.216C491.88 170.91 498.547 173.756 506.8 173.756Z" fill="#1D2126"/> +<path d="M726.68 129.826V192.616H703.68V133.426C703.68 126.6 701.923 121.266 698.41 117.426C694.897 113.586 690.11 111.663 684.05 111.656C677.61 111.656 672.467 113.756 668.62 117.956C664.773 122.156 662.853 128.033 662.86 135.586V192.586H639.67V133.426C639.67 126.6 637.96 121.266 634.54 117.426C631.12 113.586 626.383 111.663 620.33 111.656C613.89 111.656 608.717 113.756 604.81 117.956C600.903 122.156 598.95 128.033 598.95 135.586V192.586H575.32V93.9764H597.32L598.1 103.446C603.833 95.0464 613.167 90.8464 626.1 90.8464C633.653 90.8464 640.197 92.4097 645.73 95.5364C651.257 98.6586 655.662 103.441 658.32 109.206C660.708 103.505 664.931 98.7646 670.32 95.7364C675.88 92.4764 682.503 90.8464 690.19 90.8464C701.39 90.8464 710.277 94.2964 716.85 101.196C723.423 108.096 726.7 117.64 726.68 129.826Z" fill="#1D2126"/> +<path d="M841.28 151.986H765.7C766.48 159.406 769.28 165.073 774.1 168.986C778.92 172.9 785.04 174.846 792.46 174.826C804.5 174.826 812.93 169.826 817.75 159.826L837.48 167.636C833.937 176.093 827.799 183.206 819.95 187.946C811.95 192.84 802.787 195.283 792.46 195.276C777.873 195.276 766.04 190.506 756.96 180.966C747.88 171.426 743.337 158.91 743.33 143.416C743.33 127.923 747.907 115.326 757.06 105.626C766.213 95.9264 778.173 91.0764 792.94 91.0764C807.46 91.0764 819.147 95.8597 828 105.426C836.853 114.993 841.28 127.593 841.28 143.226V151.986ZM766.09 135.376H817.26C816.8 127.376 814.377 121.273 809.99 117.066C805.603 112.86 799.693 110.78 792.26 110.826C784.927 110.826 778.927 112.956 774.26 117.216C769.593 121.476 766.87 127.53 766.09 135.376Z" fill="#1D2126"/> +<path d="M993.53 158.626H937.97L925.97 192.626H900.38L953.11 46.6264H978.7L1031.53 192.626H1005.36L993.53 158.626ZM986.31 137.626L965.9 79.2264L945.29 137.626H986.31Z" fill="#1D2126"/> +<path d="M1077.86 176.196C1082.74 176.196 1086.6 175.236 1089.43 173.316C1090.82 172.385 1091.94 171.108 1092.69 169.61C1093.43 168.113 1093.78 166.447 1093.68 164.776C1093.68 159.51 1090.13 155.993 1083.04 154.226L1069.46 150.616C1050.79 145.536 1041.46 135.933 1041.46 121.806C1041.46 112.76 1044.75 105.37 1051.32 99.6364C1057.89 93.903 1066.75 91.0397 1077.88 91.0464C1087.84 91.0464 1096.17 93.323 1102.88 97.8764C1106.12 99.984 1108.89 102.737 1111.01 105.963C1113.14 109.19 1114.57 112.82 1115.23 116.626L1094.04 121.626C1093.86 119.944 1093.33 118.317 1092.48 116.854C1091.63 115.391 1090.48 114.124 1089.11 113.136C1086.04 110.98 1082.36 109.881 1078.61 110.006C1074.38 110.006 1070.96 111.066 1068.36 113.186C1067.11 114.159 1066.1 115.412 1065.42 116.845C1064.74 118.278 1064.41 119.851 1064.45 121.436C1064.42 122.719 1064.67 123.994 1065.17 125.173C1065.68 126.353 1066.43 127.411 1067.38 128.276C1069.34 130.096 1072.37 131.56 1076.46 132.666L1089.84 135.986C1098.76 138.4 1105.56 142.046 1110.25 146.926C1112.56 149.322 1114.36 152.152 1115.57 155.253C1116.77 158.353 1117.34 161.662 1117.25 164.986C1117.25 174.24 1113.77 181.596 1106.8 187.056C1099.83 192.516 1090.23 195.253 1077.99 195.266C1066.66 195.266 1057.57 192.776 1050.74 187.796C1047.44 185.455 1044.65 182.454 1042.57 178.982C1040.48 175.51 1039.14 171.643 1038.63 167.626L1060.21 163.816C1060.34 165.633 1060.88 167.398 1061.78 168.978C1062.69 170.559 1063.94 171.915 1065.44 172.946C1068.6 175.116 1072.72 176.196 1077.86 176.196Z" fill="#1D2126"/> +<path d="M1167.46 176.196C1172.35 176.196 1176.2 175.196 1179.04 173.316C1180.43 172.383 1181.55 171.104 1182.29 169.607C1183.03 168.11 1183.37 166.445 1183.28 164.776C1183.28 159.51 1179.73 155.993 1172.64 154.226L1159.07 150.616C1140.4 145.536 1131.07 135.933 1131.07 121.806C1131.07 112.76 1134.36 105.37 1140.93 99.6364C1147.5 93.903 1156.36 91.0397 1167.49 91.0464C1177.45 91.0464 1185.78 93.323 1192.49 97.8764C1195.73 99.9853 1198.5 102.739 1200.62 105.964C1202.75 109.19 1204.19 112.82 1204.85 116.626L1183.65 121.626C1183.47 119.944 1182.94 118.317 1182.09 116.854C1181.24 115.391 1180.09 114.124 1178.72 113.136C1175.65 110.98 1171.97 109.881 1168.22 110.006C1163.99 110.006 1160.57 111.066 1157.97 113.186C1156.72 114.16 1155.71 115.414 1155.03 116.846C1154.36 118.279 1154.02 119.851 1154.06 121.436C1154.03 122.719 1154.28 123.994 1154.79 125.173C1155.29 126.353 1156.04 127.411 1156.99 128.276C1158.99 130.096 1161.99 131.556 1166.08 132.666L1179.46 135.986C1188.37 138.4 1195.17 142.046 1199.87 146.926C1202.17 149.323 1203.98 152.154 1205.18 155.254C1206.38 158.354 1206.96 161.662 1206.87 164.986C1206.87 174.24 1203.39 181.596 1196.42 187.056C1189.45 192.516 1179.85 195.253 1167.61 195.266C1156.28 195.266 1147.19 192.776 1140.36 187.796C1137.06 185.455 1134.27 182.454 1132.19 178.982C1130.1 175.51 1128.76 171.643 1128.25 167.626L1149.84 163.816C1149.97 165.633 1150.5 167.397 1151.41 168.978C1152.31 170.558 1153.56 171.915 1155.06 172.946C1158.2 175.116 1162.32 176.196 1167.46 176.196Z" fill="#1D2126"/> +<path d="M1221.91 59.8264C1221.88 57.852 1222.24 55.8907 1222.97 54.0589C1223.71 52.2271 1224.81 50.5623 1226.2 49.1631C1227.6 47.764 1229.26 46.6592 1231.09 45.9142C1232.92 45.1692 1234.88 44.7993 1236.85 44.8264C1238.81 44.7962 1240.75 45.1706 1242.56 45.926C1244.36 46.6813 1246 47.8015 1247.35 49.2164C1250.14 52.0264 1251.71 55.826 1251.71 59.7864C1251.71 63.7467 1250.14 67.5464 1247.35 70.3564C1246 71.7865 1244.38 72.9207 1242.57 73.6868C1240.76 74.453 1238.81 74.8343 1236.85 74.8064C1234.88 74.8321 1232.93 74.45 1231.11 73.6842C1229.29 72.9184 1227.66 71.7854 1226.3 70.3564C1224.9 68.9882 1223.78 67.3499 1223.03 65.5403C1222.27 63.7306 1221.89 61.7869 1221.91 59.8264ZM1248.67 94.0064V192.636H1225.03V93.9764L1248.67 94.0064Z" fill="#1D2126"/> +<path d="M1305.85 176.196C1310.73 176.196 1314.59 175.236 1317.42 173.316C1318.81 172.384 1319.93 171.106 1320.68 169.609C1321.42 168.112 1321.76 166.446 1321.67 164.776C1321.67 159.51 1318.12 155.993 1311.02 154.226L1297.45 150.616C1278.78 145.536 1269.45 135.933 1269.45 121.806C1269.45 112.76 1272.74 105.37 1279.31 99.6364C1285.88 93.903 1294.74 91.0397 1305.88 91.0464C1315.84 91.0464 1324.17 93.323 1330.88 97.8764C1334.11 99.9872 1336.88 102.741 1339.01 105.967C1341.13 109.193 1342.57 112.821 1343.23 116.626L1322.04 121.626C1321.86 119.944 1321.33 118.317 1320.48 116.854C1319.63 115.391 1318.48 114.124 1317.11 113.136C1314.04 110.982 1310.36 109.884 1306.61 110.006C1302.38 110.006 1298.96 111.066 1296.35 113.186C1295.1 114.161 1294.1 115.415 1293.42 116.848C1292.74 118.281 1292.41 119.852 1292.45 121.436C1292.42 122.719 1292.67 123.994 1293.17 125.173C1293.68 126.353 1294.43 127.411 1295.38 128.276C1297.33 130.096 1300.36 131.56 1304.46 132.666L1317.84 135.986C1326.76 138.4 1333.56 142.046 1338.25 146.926C1340.56 149.322 1342.36 152.152 1343.57 155.253C1344.77 158.353 1345.34 161.662 1345.25 164.986C1345.25 174.24 1341.77 181.596 1334.8 187.056C1327.83 192.516 1318.23 195.253 1305.99 195.266C1294.66 195.266 1285.58 192.776 1278.75 187.796C1275.44 185.458 1272.66 182.458 1270.57 178.985C1268.49 175.513 1267.15 171.645 1266.64 167.626L1288.22 163.816C1288.35 165.633 1288.88 167.397 1289.79 168.978C1290.69 170.558 1291.94 171.915 1293.44 172.946C1296.58 175.116 1300.7 176.196 1305.85 176.196Z" fill="#1D2126"/> +<path d="M1415.86 192.606C1410.23 193.964 1404.46 194.718 1398.67 194.856C1388.71 194.856 1380.95 192.12 1375.38 186.646C1369.81 181.173 1367.03 173.036 1367.03 162.236V113.996H1351.89V93.9964H1367.03V63.2164H1390.47V93.9764H1413.22V113.976H1390.47V157.976C1390.47 168.643 1394.6 173.976 1402.87 173.976C1406.29 173.833 1409.67 173.14 1412.87 171.926L1415.86 192.606Z" fill="#1D2126"/> +<path d="M1495.01 192.606C1494.16 188.914 1493.6 185.158 1493.35 181.376C1490.28 185.78 1486.08 189.273 1481.19 191.486C1475.48 194.09 1469.26 195.375 1462.98 195.246C1452.17 195.246 1443.5 192.366 1436.98 186.606C1430.46 180.846 1427.21 173.05 1427.22 163.216C1427.22 153.576 1430.43 146.04 1436.84 140.606C1443.25 135.173 1452.02 132.453 1463.15 132.446H1492.8V128.646C1492.8 122.46 1490.99 117.836 1487.38 114.776C1483.77 111.716 1478.71 110.186 1472.2 110.186C1460.68 110.186 1452.41 115.003 1447.39 124.636L1430.21 114.576C1438.54 98.8897 1452.96 91.0464 1473.47 91.0464C1485.9 91.0464 1496.08 94.2364 1504.03 100.616C1511.98 106.996 1515.98 117.38 1516.03 131.766V171.026C1516.03 182.153 1516.61 189.346 1517.78 192.606H1495.01ZM1493.01 148.756H1468.69C1463.16 148.756 1458.87 150.026 1455.8 152.566C1454.28 153.837 1453.08 155.441 1452.28 157.254C1451.48 159.066 1451.12 161.039 1451.21 163.016C1451.21 167.636 1452.77 171.153 1455.9 173.566C1459.03 175.976 1463.48 177.176 1469.28 177.176C1476.24 177.176 1481.94 174.98 1486.37 170.586C1490.8 166.193 1493.02 159.666 1493.01 151.006V148.756Z" fill="#1D2126"/> +<path d="M1629.53 131.766V192.606H1606V136.826C1606 127.446 1603.79 121.033 1599.36 117.586C1595.18 114.155 1589.92 112.323 1584.51 112.416C1581.37 112.323 1578.24 112.853 1575.31 113.975C1572.38 115.098 1569.69 116.791 1567.42 118.956C1562.87 123.316 1560.6 129.533 1560.59 137.606V192.606H1536.96V93.9764H1559.12L1559.9 104.616C1562.96 100.236 1567.19 96.803 1572.11 94.7064C1577.6 92.2344 1583.57 90.9856 1589.59 91.0464C1602.35 91.0464 1612.2 94.5764 1619.13 101.636C1626.06 108.696 1629.53 118.74 1629.53 131.766Z" fill="#1D2126"/> +<path d="M1704.98 192.606C1699.35 193.952 1693.59 194.696 1687.8 194.826C1677.84 194.826 1670.08 192.09 1664.51 186.616C1658.94 181.143 1656.16 173.006 1656.16 162.206V113.996H1641.02V93.9964H1656.16V63.2164H1679.59V93.9764H1702.35V113.976H1679.59V157.976C1679.59 168.643 1683.73 173.976 1692 173.976C1695.42 173.833 1698.8 173.14 1702 171.926L1704.98 192.606Z" fill="#1D2126"/> +</svg> diff --git a/source/index.html b/source/index.html index 89ebda6e4e1..1d4fdebfeb0 100644 --- a/source/index.html +++ b/source/index.html @@ -12,25 +12,9 @@ feedback: false <div class="frontpage"> <div class="grid"> <div class="grid__item one-third lap-one-third palm-one-whole"> - <div class="current-version material-card text"> - <h1> - Current Version: {{ site.current_major_version }}.{{ - site.current_minor_version }}.{{ site.current_patch_version }} - </h1> - Released: - <span class="release-date" - >{{ site.date_released | date: "%B %e, %Y" }}</span - > - - <div class="links"> - <a href="{{ recent_release_post.url }}{{ site.patch_version_notes }}" - >Release notes</a - > - </div> - </div> <div class="recent-posts material-card text"> - <h1>Recent Blog Posts</h1> + <h1><iconify-icon inline icon="mdi:newspaper-variant-multiple"></iconify-icon> Recent Blog Posts</h1> {% for post in site.posts limit: 4 %} <li class="post" style="display: grid; font-size: 16px"> @@ -41,13 +25,14 @@ feedback: false </div> <div class="join-community material-card text"> - <h1>Join The Community</h1> - We love to help with & talk about home automation. + <h1><iconify-icon inline icon="mdi:people-group-outline"></iconify-icon> Join The Community</h1> + + Our vibrant community is very active and super friendly. We love to talk and share our passion for home automation. <div class="links"> - <a href="https://community.home-assistant.io">Forums</a> - <a href="/join-chat/">Chat</a> - <a href="/newsletter/">Newsletter</a> + <a href="https://community.home-assistant.io"><iconify-icon inline icon="simple-icons:discourse"></iconify-icon> Forums</a> + <a href="/join-chat/"><iconify-icon inline icon="simple-icons:discord"></iconify-icon> Chat</a> + <a href="/newsletter/"><iconify-icon inline icon="mdi:email-newsletter"></iconify-icon> Newsletter</a> </div> </div> @@ -56,11 +41,11 @@ feedback: false href="/blog/2016/01/19/perfect-home-automation/" > Read our founder's vision for the perfect home automation - <i class="icon-arrow-right"></i> + <iconify-icon icon="mdi:arrow-right-thick"></iconify-icon> </a> <div class="material-card text"> - <h1>Alexa, turn on the lights</h1> + <h1><iconify-icon inline icon="simple-icons:amazonalexa"></iconify-icon> Alexa, turn on the lights</h1> Use Alexa to control Home Assistant. <div class="links"> @@ -72,7 +57,7 @@ feedback: false </div> </div> <div class="material-card text"> - <h1>Ok Google, turn on the AC</h1> + <h1><iconify-icon inline icon="simple-icons:googleassistant"></iconify-icon> Ok Google, turn off the AC</h1> Use Google Assistant to control Home Assistant. <div class="links"> @@ -224,7 +209,7 @@ feedback: false {% include custom/features.html %} <div class="grid sponsors-and-press"> <div class="sponsored-by grid__item one-half lap-one-half palm-one-whole"> - <div class="material-card"> + <div class="material-card text"> <h1>Home Assistant is sponsored by</h1> <a href="https://www.nabucasa.com" @@ -233,7 +218,7 @@ feedback: false </div> </div> <div class="seen-press grid__item one-half lap-one-half palm-one-whole"> - <div class="material-card"> + <div class="material-card text"> <h1>Home Assistant in the press</h1> <a diff --git a/source/installation/index.html b/source/installation/index.html index ebceffe9dd6..47a40140ccf 100644 --- a/source/installation/index.html +++ b/source/installation/index.html @@ -7,7 +7,7 @@ toc: true --- <div class="intro"> - <p> + <p class="lead"> The first step to getting started with Home Assistant is to install it on a device. There are many ways to run it for all kinds of scenarios and all kinds of skill levels. diff --git a/source/installation/raspberrypi.markdown b/source/installation/raspberrypi.markdown index e469ff8d22e..5695b4107d8 100644 --- a/source/installation/raspberrypi.markdown +++ b/source/installation/raspberrypi.markdown @@ -10,11 +10,9 @@ Included section for this page is located under source/_includes/installation {% assign board = "Raspberry Pi" %} {% assign installation_media = "SD card" %} -<div class='note warning'> - -Please remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#power-supply) with your Raspberry Pi. Mobile chargers may not be suitable, since some are designed to only provide the full power with that manufacturer's handsets. USB ports on your computer also will not supply enough power and must not be used. - -</div> +{% note %} +Remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#power-supply) with your Raspberry Pi. Mobile chargers may not be suitable, since some are designed to only provide the full power with that manufacturer's handsets. USB ports on your computer also will not supply enough power and must not be used. +{% endnote %} Before installing Home Assistant, you might want to <a href="/installation#compare-installation-methods">compare installation methods</a>. Most notably, <a href="/addons">add-ons</a> are only available with the Home Assistant Operating System. @@ -69,9 +67,9 @@ Within a few minutes after connecting the Raspberry Pi, you will be able to reac - In the browser of your desktop system, enter <a href="http://homeassistant.local:8123" target="_blank">homeassistant.local:8123</a>. - <div class="note"> - If you are running an older Windows version or have a stricter network configuration, you might need to access Home Assistant at <a href="http://homeassistant:8123" target="_blank">homeassistant:8123</a> or `http://X.X.X.X:8123` (replace X.X.X.X with your Raspberry Pi’s IP address). - </div> +{% note %} +If you are running an older Windows version or have a stricter network configuration, you might need to access Home Assistant at <a href="http://homeassistant:8123" target="_blank">homeassistant:8123</a> or `http://X.X.X.X:8123` (replace X.X.X.X with your Raspberry Pi’s IP address). +{% endnote %} - The time it takes for this page to become available depends on your hardware. On a Raspberry Pi 4 or 5, this page should be available within a minute. - If it does not show up after 5 minutes on a Pi 4 or 5, maybe the image was not written properly. diff --git a/source/integrations/index.html b/source/integrations/index.html index 1adb594483d..a11ee1991d5 100644 --- a/source/integrations/index.html +++ b/source/integrations/index.html @@ -25,15 +25,21 @@ regenerate: false {%- assign categories = components | map: 'ha_category' | join: ',' | downcase | split: ',' | uniq | sort -%} <div class="grid"> - <div class="grid__item one-sixth lap-one-whole palm-one-whole"> + <div class="grid__item one-fifth lap-one-whole palm-one-whole"> <div class="filter-button-group"> - <a href='#all' class="btn">All ({{tot}})</a> + <div class="all"> + <a href='#all' class="btn">All <span class="count">{{tot}}</span></a> + </div> + <div class="featured"> <a href='#featured' class="btn">Featured</a> <a href='#works-with-home-assistant' class="btn">Partner brands</a> </div> - <div class="version_select">Added in: <select id="versions" name="versions"> + + <div class="version_select"> + <label>By release</label> + <select id="versions" name="versions"> <option value="#"></option> {%- for group in components_by_version -%} <optgroup label="{{ group.label }} ({{group.new_components_count}})"> @@ -43,36 +49,75 @@ regenerate: false {%- endfor -%} </optgroup> {%- endfor -%} - </select></div> - {%- for category in categories -%} - {%- assign category_name = "" -%} - {%- assign components_count = 0 -%} - {%- for comp in components -%} - {%- assign comp_categories = comp.ha_category | join: ',' | downcase -%} - {%- if comp_categories contains category -%} + </select> + </div> + + <div class="category_list"> + <label>By Categories</label> + {%- for category in categories -%} + {%- assign category_name = "" -%} + {%- assign components_count = 0 -%} + {%- for comp in components -%} + {%- assign comp_categories = comp.ha_category | join: ',' | downcase -%} + {%- if comp_categories contains category -%} + {%- if category_name == "" -%} + {%- for cat in comp.ha_category -%} + {%- assign lower_cat = cat | downcase -%} + {%- if lower_cat == category -%} + {%- assign category_name = cat -%} + {%- endif -%} + {%- endfor -%} + {%- endif -%} + {%- assign components_count = components_count | plus: 1 -%} + {%- endif -%} + {%- endfor -%} + {%- if category != 'other' and components_count != 0 -%} {%- if category_name == "" -%} - {%- for cat in comp.ha_category -%} - {%- assign lower_cat = cat | downcase -%} - {%- if lower_cat == category -%} - {%- assign category_name = cat -%} - {%- endif -%} - {%- endfor -%} - {%- endif -%} - {%- assign components_count = components_count | plus: 1 -%} + {%- assign category_name = category | capitalize -%} + {%- endif -%} + <a href='#{{ category_name | slugify }}' class="btn" onclick="document.querySelector('.page-content').scrollTop = 0">{{ category_name }} <span class="count">{{ components_count }}</span></a> {%- endif -%} {%- endfor -%} - {%- if category != 'other' and components_count != 0 -%} - {%- if category_name == "" -%} - {%- assign category_name = category | capitalize -%} - {%- endif -%} - <a href='#{{ category_name | slugify }}' class="btn" onclick="document.querySelector('.page-content').scrollTop = 0">{{ category_name }} ({{ components_count }})</a> - {%- endif -%} - {%- endfor -%} + <a href='#other' class="btn" onclick="document.querySelector('.page-content').scrollTop = 0">Other ({{ components | where: 'ha_category', 'Other' | size }})</a> + </div> + + <div class="category_select"> + <label>By Categories</label> + <select id="categories" name="categories"> + <option value="#"></option> + {%- for category in categories -%} + {%- assign category_name = "" -%} + {%- assign components_count = 0 -%} + {%- for comp in components -%} + {%- assign comp_categories = comp.ha_category | join: ',' | downcase -%} + {%- if comp_categories contains category -%} + {%- if category_name == "" -%} + {%- for cat in comp.ha_category -%} + {%- assign lower_cat = cat | downcase -%} + {%- if lower_cat == category -%} + {%- assign category_name = cat -%} + {%- endif -%} + {%- endfor -%} + {%- endif -%} + {%- assign components_count = components_count | plus: 1 -%} + {%- endif -%} + {%- endfor -%} + {%- if category != 'other' and components_count != 0 -%} + {%- if category_name == "" -%} + {%- assign category_name = category | capitalize -%} + {%- endif -%} + <option value="#{{ category_name | slugify }}">{{ category_name }} ({{ components_count }}) + </option> + {%- endif -%} + {%- endfor -%} + <option value="#other">Other ({{ components | where: 'ha_category', 'Other' | size }}) + </option> + </select> + </div> - <a href='#other' class="btn" onclick="document.querySelector('.page-content').scrollTop = 0">Other ({{ components | where: 'ha_category', 'Other' | size }})</a> </div> </div> - <div class="grid__item five-sixths lap-one-whole palm-one-whole"> + <div class="grid__item four-fifths lap-one-whole palm-one-whole"> <div class="component-search"> <form onsubmit="event.preventDefault(); return false"> <input type="text" name="search" id="search" class="search" placeholder="Search integrations..." autofocus /> @@ -201,7 +246,7 @@ allComponents.pop(); // remove placeholder element at the end </a> `).join('\n'); } else { - rendered = '<p class="note">Nothing found!</p>'; + rendered = '<div class="alert alert-note"><p class="alert-content">Nothing found!</p></div>'; } // set active class on active menu item @@ -224,7 +269,7 @@ allComponents.pop(); // remove placeholder element at the end 'https://brands.home-assistant.io', component.ha_brand ? 'brands' : '_', component.domain, - 'logo' + 'icon' ].join('/'); return `<img src="${urlBase}.png" srcset="${urlBase}@2x.png 2x" loading="lazy">`; @@ -246,6 +291,12 @@ allComponents.pop(); // remove placeholder element at the end applyFilter(); }); + const categoriesEl = document.getElementById('categories'); + categoriesEl.addEventListener('change', () => { + history.pushState('', '', categoriesEl.value); + applyFilter(); + }); + /** * Simple debounce implementation */ diff --git a/source/voice_control/apple.markdown b/source/voice_control/apple.markdown index cc5c2ff782b..2b1e3e97b21 100644 --- a/source/voice_control/apple.markdown +++ b/source/voice_control/apple.markdown @@ -34,9 +34,9 @@ Open the shortcuts app, and edit the Button Assist shortcut. The text in quotes - Use the arrow to expand the _"Dictate text"_ action options, and select your language - Use the arrow to expand the _"Assist with `Provided Input`"_ options, and select your language. -<p class='note'> +{% important %} You can import the button shortcut multiple times to create versions for different languages, when asked if you would like to replace your Shortcut, choose "Keep Both". -</p> +{% endimportant %} ## Multiple servers