diff --git a/config/.cache/brands/integrations/backup/icon.png b/config/.cache/brands/integrations/backup/icon.png
index a60580fb..199cec42 100644
Binary files a/config/.cache/brands/integrations/backup/icon.png and b/config/.cache/brands/integrations/backup/icon.png differ
diff --git a/config/packages/vacuum.yaml b/config/packages/vacuum.yaml
index 853a0835..8ca0bc55 100755
--- a/config/packages/vacuum.yaml
+++ b/config/packages/vacuum.yaml
@@ -12,7 +12,7 @@
# - Treat 2+ minutes in a room as "being cleaned" and dequeue immediately (queue = remaining rooms).
# - Phase changes happen only after verified completion at dock (`task_status: completed`).
# - Guarded fallback: if docked with empty queue for 10 minutes but no `completed`, advance with `fallback_advance` log.
-# - Use `dreame_vacuum.vacuum_clean_segment` with the integration's segment ids.
+# - This installed Dreame build still needs native `dreame_vacuum.vacuum_clean_segment`; do not rely on HA `vacuum.clean_area`.
# - Jinja2 loop scoping: use a `namespace` when building lists (otherwise the queue can appear empty and get cleared).
# - If docked+completed still has queue entries, treat queue as stale and clear it before phase advance.
# - Mop phases use `sweeping_and_mopping` instead of mop-only.
@@ -133,8 +133,6 @@ script:
{{ bath_ids }}
{% endif %}
segments_to_clean: "{{ queue_ints if queue_ints | length > 0 else phase_segments }}"
- segment_ids: "{{ segments_to_clean | list }}"
-
# 0. Reseed the current phase when queue is empty.
- choose:
- conditions:
@@ -178,11 +176,11 @@ script:
- service: script.send_to_logbook
data:
topic: "VACUUM"
- message: "Vacuum is already cleaning; queue/phase updated but not issuing a new segment clean action."
+ message: "Vacuum is already cleaning; queue/phase updated but not issuing a new segment-clean action."
- stop: "Already cleaning."
default: []
- # 4. Start cleaning
+ # 4. Start cleaning with the native Dreame segment service.
- service: select.select_option
target:
entity_id: select.l10s_vacuum_cleaning_mode
@@ -197,8 +195,7 @@ script:
target:
entity_id: vacuum.l10s_vacuum
data:
- # Clean the queued room segments directly.
- segments: "{{ segment_ids }}"
+ segments: "{{ segments_to_clean }}"
## 3. Automations
diff --git a/config/www/onenote-launch.html b/config/www/onenote-launch.html
index b422dcc8..804e8b47 100644
--- a/config/www/onenote-launch.html
+++ b/config/www/onenote-launch.html
@@ -8,82 +8,116 @@
:root { color-scheme: light; }
body {
margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
- background: linear-gradient(180deg, #f5f7fb 0%, #e8eef8 100%);
- color: #122033;
+ font-family: "Segoe UI", -apple-system, BlinkMacSystemFont, sans-serif;
+ background:
+ radial-gradient(circle at top left, rgba(126, 34, 206, 0.16), transparent 28rem),
+ radial-gradient(circle at bottom right, rgba(22, 101, 52, 0.14), transparent 26rem),
+ linear-gradient(180deg, #eef2ff 0%, #f6f8fc 48%, #eef6f2 100%);
+ color: #18243a;
}
main {
- max-width: 32rem;
+ max-width: 36rem;
margin: 0 auto;
min-height: 100vh;
- padding: 2rem 1.25rem;
+ padding: 2rem 1.25rem 2.5rem;
display: flex;
flex-direction: column;
justify-content: center;
- gap: 1rem;
}
.card {
- background: rgba(255, 255, 255, 0.94);
- border: 1px solid rgba(18, 32, 51, 0.08);
- border-radius: 18px;
- box-shadow: 0 18px 40px rgba(18, 32, 51, 0.12);
- padding: 1.25rem;
+ background: rgba(255, 255, 255, 0.92);
+ border: 1px solid rgba(126, 34, 206, 0.14);
+ border-radius: 24px;
+ box-shadow: 0 22px 55px rgba(24, 36, 58, 0.14);
+ padding: 1.5rem;
+ backdrop-filter: blur(10px);
+ }
+ .eyebrow {
+ display: inline-flex;
+ align-items: center;
+ padding: 0.35rem 0.7rem;
+ border-radius: 999px;
+ background: rgba(126, 34, 206, 0.1);
+ color: #6b21a8;
+ font-size: 0.78rem;
+ font-weight: 700;
+ letter-spacing: 0.04em;
+ text-transform: uppercase;
+ margin-bottom: 0.9rem;
}
h1 {
margin: 0 0 0.5rem;
- font-size: 1.35rem;
- line-height: 1.2;
+ font-size: clamp(1.6rem, 5vw, 2rem);
+ line-height: 1.1;
}
p {
margin: 0;
- line-height: 1.5;
+ line-height: 1.55;
}
.title {
- margin-top: 0.75rem;
- font-size: 0.95rem;
- color: #41556f;
+ margin-top: 1rem;
+ padding: 0.95rem 1rem;
+ border-radius: 16px;
+ background: linear-gradient(180deg, rgba(126, 34, 206, 0.06), rgba(255, 255, 255, 0.92));
+ border: 1px solid rgba(126, 34, 206, 0.12);
+ font-size: 0.98rem;
+ color: #4a5670;
word-break: break-word;
}
.actions {
display: flex;
flex-direction: column;
- gap: 0.75rem;
- margin-top: 1rem;
+ gap: 0.85rem;
+ margin-top: 1.15rem;
}
.button {
display: block;
text-decoration: none;
text-align: center;
- padding: 0.9rem 1rem;
- border-radius: 12px;
- font-weight: 600;
+ padding: 1rem 1.1rem;
+ border-radius: 16px;
+ font-weight: 700;
+ letter-spacing: 0.01em;
+ transition: transform 120ms ease, box-shadow 120ms ease, opacity 120ms ease;
+ box-shadow: 0 10px 24px rgba(24, 36, 58, 0.1);
+ }
+ .button:hover {
+ transform: translateY(-1px);
}
.button.primary {
- background: #166534;
+ background: linear-gradient(135deg, #7c3aed 0%, #5b21b6 100%);
color: #fff;
}
.button.secondary {
background: #fff;
- color: #122033;
- border: 1px solid rgba(18, 32, 51, 0.14);
+ color: #18243a;
+ border: 1px solid rgba(24, 36, 58, 0.12);
+ }
+ .button.muted {
+ background: rgba(255, 255, 255, 0.7);
+ color: #52627d;
+ border: 1px dashed rgba(24, 36, 58, 0.18);
+ box-shadow: none;
}
.hint {
- font-size: 0.88rem;
- color: #5c708a;
+ margin-top: 1rem;
+ font-size: 0.9rem;
+ color: #5f6f87;
}
+ OneNote launch
Opening OneNote
- Joanna is handing this note to the OneNote app now.
+ Joanna found the note and prepared the cleanest handoff path.
- If the app does not open automatically in a second or two, tap the OneNote button.
+ If the desktop app is available, it will open automatically. Otherwise use the button above.