@quickwatch/preview 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1979 @@
1
+ /* @quickwatch/preview 0.1.0. Roboto Flex: SIL Open Font License, dist/fonts/RobotoFlex-OFL.txt */
2
+ "use strict";var QuickWatch=(()=>{var xn=Object.defineProperty;var Qa=Object.getOwnPropertyDescriptor;var Ka=Object.getOwnPropertyNames;var el=Object.prototype.hasOwnProperty;var es=e=>{throw TypeError(e)};var tl=(e,t,n)=>t in e?xn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var nl=(e,t)=>{for(var n in t)xn(e,n,{get:t[n],enumerable:!0})},rl=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Ka(t))!el.call(e,o)&&o!==n&&xn(e,o,{get:()=>t[o],enumerable:!(r=Qa(t,o))||r.enumerable});return e};var ol=e=>rl(xn({},"__esModule",{value:!0}),e);var $=(e,t,n)=>tl(e,typeof t!="symbol"?t+"":t,n),_r=(e,t,n)=>t.has(e)||es("Cannot "+n);var f=(e,t,n)=>(_r(e,t,"read from private field"),n?n.call(e):t.get(e)),_=(e,t,n)=>t.has(e)?es("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),w=(e,t,n,r)=>(_r(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),O=(e,t,n)=>(_r(e,t,"access private method"),n);var ts=(e,t,n,r)=>({set _(o){w(e,t,o,n)},get _(){return f(e,t,r)}});var ou={};nl(ou,{devices:()=>Xa,render:()=>ru,themes:()=>tu,version:()=>eu});var sl=/\p{L}/u,il=/[\p{L}\p{Nd}]/u,rs=/^[\x00-\x7f]*$/;function yt(e){let t=e.charCodeAt(0);return t<128?t>=65&&t<=90||t>=97&&t<=122:sl.test(e)}function os(e){let t=e.charCodeAt(0);return t<128?t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122:il.test(e)}function Pe(e){let t=e.charCodeAt(0);return t>=48&&t<=57}function Qe(e){return e===32||e>=9&&e<=13?!0:e<133?!1:e===133||e===160||e===5760||e>=8192&&e<=8202||e===8232||e===8233||e===8239||e===8287||e===12288}function F(e){let t=0,n=e.length;for(;t<n&&Qe(e.charCodeAt(t));)t++;for(;n>t&&Qe(e.charCodeAt(n-1));)n--;return t===0&&n===e.length?e:e.slice(t,n)}function Ke(e){if(!e)return!0;for(let t=0;t<e.length;t++)if(!Qe(e.charCodeAt(t)))return!1;return!0}function al(e){return e===304||e===305?e:e>=8064&&e<=8071||e>=8080&&e<=8087||e>=8096&&e<=8103?e+8:e===8115||e===8131||e===8179?e+9:null}function ns(e){return e===411||e===42972||e===612||e===42955||e===7305||e===7306||e>=68944&&e<=68997}function ss(e,t,n){let r="";for(let o of e){let s=o.codePointAt(0),i=n(s);if(i!==null){r+=String.fromCodePoint(i);continue}let a=t(o),l=a.length===o.length||[...a].length===1;r+=l&&!ns(s)&&!ns(a.codePointAt(0))?a:o}return r}function kn(e){return rs.test(e)?e.toUpperCase():ss(e,t=>t.toUpperCase(),al)}function et(e){return rs.test(e)?e.toLowerCase():ss(e,t=>t.toLowerCase(),t=>t===304||t===305?t:null)}function Or(e,t){return e===t||kn(e)===kn(t)}function is(e){let t=0;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);if(r>=55296&&r<=56319&&n+1<e.length){let o=e.charCodeAt(n+1);o>=56320&&o<=57343&&n++}t++}return t}function as(e,t){let n=0;for(let r=0;r<t&&n<e.length;r++){let o=e.charCodeAt(n);n+=o>=55296&&o<=56319&&n+1<e.length&&(e.charCodeAt(n+1)&64512)===56320?2:1}return n>=e.length?e:e.slice(0,n)}var Er={UTC:"Etc/UTC","GMT Standard Time":"Europe/London","Greenwich Standard Time":"Atlantic/Reykjavik","W. Europe Standard Time":"Europe/Berlin","Central Europe Standard Time":"Europe/Budapest","Romance Standard Time":"Europe/Paris","Central European Standard Time":"Europe/Warsaw","E. Europe Standard Time":"Europe/Chisinau","FLE Standard Time":"Europe/Kiev","GTB Standard Time":"Europe/Bucharest","Russian Standard Time":"Europe/Moscow","Turkey Standard Time":"Europe/Istanbul","Israel Standard Time":"Asia/Jerusalem","Egypt Standard Time":"Africa/Cairo","South Africa Standard Time":"Africa/Johannesburg","W. Central Africa Standard Time":"Africa/Lagos","E. Africa Standard Time":"Africa/Nairobi","Morocco Standard Time":"Africa/Casablanca","Arabian Standard Time":"Asia/Dubai","Arab Standard Time":"Asia/Riyadh","Iran Standard Time":"Asia/Tehran","Pakistan Standard Time":"Asia/Karachi","India Standard Time":"Asia/Calcutta","Nepal Standard Time":"Asia/Katmandu","Bangladesh Standard Time":"Asia/Dhaka","SE Asia Standard Time":"Asia/Bangkok","China Standard Time":"Asia/Shanghai","Singapore Standard Time":"Asia/Singapore","Taipei Standard Time":"Asia/Taipei","Tokyo Standard Time":"Asia/Tokyo","Korea Standard Time":"Asia/Seoul","W. Australia Standard Time":"Australia/Perth","Cen. Australia Standard Time":"Australia/Adelaide","AUS Central Standard Time":"Australia/Darwin","AUS Eastern Standard Time":"Australia/Sydney","E. Australia Standard Time":"Australia/Brisbane","Tasmania Standard Time":"Australia/Hobart","New Zealand Standard Time":"Pacific/Auckland","Hawaiian Standard Time":"Pacific/Honolulu","Alaskan Standard Time":"America/Anchorage","Pacific Standard Time":"America/Los_Angeles","US Mountain Standard Time":"America/Phoenix","Mountain Standard Time":"America/Denver","Central Standard Time":"America/Chicago","Central America Standard Time":"America/Guatemala","Central Standard Time (Mexico)":"America/Mexico_City","Canada Central Standard Time":"America/Regina","Eastern Standard Time":"America/New_York","US Eastern Standard Time":"America/Indianapolis","SA Pacific Standard Time":"America/Bogota","Atlantic Standard Time":"America/Halifax","Newfoundland Standard Time":"America/St_Johns","E. South America Standard Time":"America/Sao_Paulo","Argentina Standard Time":"America/Buenos_Aires","Pacific SA Standard Time":"America/Santiago","SA Western Standard Time":"America/La_Paz","Venezuela Standard Time":"America/Caracas"},Tn=new Map;function Sn(e){if(!e||e.trim()==="")return null;let t=Tn.get(e);return t!==void 0||(t=ls(e)?e:Object.hasOwn(Er,e)&&ls(Er[e])?Er[e]:null,Tn.size>256&&Tn.clear(),Tn.set(e,t)),t}function tt(e){return Sn(e)??"UTC"}function ls(e){try{return new Intl.DateTimeFormat("en-US",{timeZone:e}),!0}catch{return!1}}var Vt=864e5;function ll(e,t,n){let r=t<=2?e-1:e,o=Math.floor(r/400),s=r-o*400,i=(t+9)%12,a=Math.floor((153*i+2)/5)+n-1,l=s*365+Math.floor(s/4)-Math.floor(s/100)+a;return o*146097+l-719468}function Bt(e,t,n,r=0,o=0,s=0,i=0){return ll(e,t,n)*Vt+r*36e5+o*6e4+s*1e3+i}function Mr(e){let t=Math.floor(e/Vt),n=Math.floor(e-t*Vt),r=t+719468,o=Math.floor(r/146097),s=r-o*146097,i=Math.floor((s-Math.floor(s/1460)+Math.floor(s/36524)-Math.floor(s/146096))/365),a=s-(365*i+Math.floor(i/4)-Math.floor(i/100)),l=Math.floor((5*a+2)/153),c=a-Math.floor((153*l+2)/5)+1,p=l<10?l+3:l-9,d=i+o*400+(p<=2?1:0),g=Math.floor(n/36e5);n-=g*36e5;let y=Math.floor(n/6e4);n-=y*6e4;let m=Math.floor(n/1e3);return{year:d,month:p,day:c,hour:g,minute:y,second:m,millisecond:n-m*1e3,dayOfWeek:(t%7+11)%7}}function cs(e,t){return t===2?e%4===0&&e%100!==0||e%400===0?29:28:t===4||t===6||t===9||t===11?30:31}var Ft=-621355968e5,Ut=0xe677d21fdbff,An=new Map,cl={formatter:null,offsets:new Map};function ps(e){let t=An.get(e);if(t)return t;let n=tt(e);return t=n==="UTC"||n==="Etc/UTC"?cl:{formatter:new Intl.DateTimeFormat("en-US",{timeZone:n,hourCycle:"h23",year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"}),offsets:new Map},An.size>256&&An.clear(),An.set(e,t),t}function Dt(e,t){let n=ps(e);if(!n.formatter)return 0;let r=Math.floor(t/6e4),o=n.offsets.get(r);if(o!==void 0)return o;let s=1970,i=1,a=1,l=0,c=0,p=0;for(let g of n.formatter.formatToParts(r*6e4))switch(g.type){case"year":s=Number(g.value);break;case"month":i=Number(g.value);break;case"day":a=Number(g.value);break;case"hour":l=Number(g.value)%24;break;case"minute":c=Number(g.value);break;case"second":p=Number(g.value);break}let d=Bt(s,i,a,l,c,p)-r*6e4;return n.offsets.size>4096&&n.offsets.clear(),n.offsets.set(r,d),d}function _n(e,t){return Mr(Math.min(Ut,Math.max(Ft,e+Dt(t,e))))}function On(e,t){if(!ps(t).formatter)return e;let n=Dt(t,e-Vt/2),r=Dt(t,e+Vt/2);if(n===r)return e-n;let o=Dt(t,e-n)===n,s=Dt(t,e-r)===r;return o!==s?e-(o?n:r):e-Math.min(n,r)}var En=String.raw`(?:[Tt ]\s*(\d{1,2}):(\d{2})(?::(\d{2})(?:[.,](\d{1,9}))?)?\s*([AaPp][Mm])?)?`,Mn=String.raw`\s*([Zz]|UTC|GMT|[+-]\d{2}(?::?\d{2})?)?`,pl=new RegExp(String.raw`^(\d{4})[-/](\d{1,2})[-/](\d{1,2})${En}${Mn}$`),ul=new RegExp(String.raw`^(?:[A-Za-z]+,?\s+)?(\d{1,2})[\s-]+([A-Za-z]{3,9})\.?[\s-]+(\d{4})${En}${Mn}$`),dl=new RegExp(String.raw`^(?:[A-Za-z]+,?\s+)?([A-Za-z]{3,9})\.?\s+(\d{1,2}),?\s+(\d{4})${En}${Mn}$`),fl=new RegExp(String.raw`^(\d{1,2})/(\d{1,2})/(\d{4})${En}${Mn}$`),hl=/^([A-Za-z]{3,9})\.?,?\s+(\d{4})$/,ml=/^(\d{4})\s+([A-Za-z]{3,9})\.?$/,gl=/(^|\s)(\d{1,2})\s*([AaPp][Mm])(?=\s|$)/,bl=/^(\d{1,2}:\d{2}(?::\d{2})?(?:\s*[AaPp][Mm])?)\s+(\d{4}-\d{1,2}-\d{1,2})$/,wl=["january","february","march","april","may","june","july","august","september","october","november","december"],us=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function Lr(e){let t=e.toLowerCase(),n=wl.findIndex(r=>r===t||t.length===3&&r.startsWith(t));return n<0?null:n+1}function fs(e,t){let n=yl(e.replace(gl,"$1$2:00 $3").replace(bl,"$2 $1"),t);return n===null||n<Ft||n>Ut?null:n}function yl(e,t){let n=pl.exec(e);if(n)return Ht(n[1],n[2],n[3],n,4,t);if(n=ul.exec(e),n){let o=Lr(n[2]);return o===null?null:Ht(n[3],String(o),n[1],n,4,t)}if(n=dl.exec(e),n){let o=Lr(n[1]);return o===null?null:Ht(n[3],String(o),n[2],n,4,t)}if(n=fl.exec(e),n)return Ht(n[3],n[1],n[2],n,4,t);n=hl.exec(e);let r=n?[n[1],n[2]]:(n=ml.exec(e))?[n[2],n[1]]:null;if(r){let o=Lr(r[0]);return o===null?null:Ht(r[1],String(o),"1",[],0,t)}return null}function Ht(e,t,n,r,o,s){let i=Number(e),a=Number(t),l=Number(n);if(i<1||a<1||a>12||l<1||l>cs(i,a))return null;let c=Number(r[o]??0),p=Number(r[o+1]??0),d=Number(r[o+2]??0),g=Number((r[o+3]??"").padEnd(3,"0").slice(0,3)),y=(r[o+4]??"").toLowerCase();if(y==="am"){if(c===12)c=0;else if(c>12)return null}if(y==="pm"){if(c<12)c+=12;else if(c>12)return null}if(c>23||p>59||d>59)return null;let m=Bt(i,a,l,c,p,d,g),S=r[o+5];if(S===void 0)return On(m,s);if(S==="Z"||S==="z"||S==="UTC"||S==="GMT")return m;let L=S.slice(1).replace(":",""),A=Number(L.slice(0,2)),B=L.length>2?Number(L.slice(2)):0;if(A>14||B>59)return null;let b=(A*60+B)*6e4;return S[0]==="-"?m+b:m-b}var vl=new Set(["yyyy","yy","MMMM","MMM","MM","M","dddd","ddd","dd","d","HH","H","hh","h","mm","m","ss","s","tt"]);function Rr(e){if(e.length===0||e.length===1&&yt(e))return!1;let t=0;for(;t<e.length;){let n=e[t];if(n==="'"||n==='"'){let o=e.indexOf(n,t+1);if(o<0)return!1;t=o+1;continue}if(n==="\\"){if(t+1>=e.length)return!1;t+=2;continue}if(n==="%")return!1;if(!yt(n)){t++;continue}let r=1;for(;t+r<e.length&&e[t+r]===n;)r++;if(!vl.has(e.slice(t,t+r)))return!1;t+=r}return!0}var nt=e=>e<10?"0"+e:String(e);function hs(e,t,n){let r=_n(e,t),o="",s=0;for(;s<n.length;){let i=n[s];if(i==="'"||i==='"'){let c=n.indexOf(i,s+1);o+=n.slice(s+1,c),s=c+1;continue}if(i==="\\"){o+=n[s+1]??"",s+=2;continue}if(!yt(i)){o+=i,s++;continue}let a=1;for(;s+a<n.length&&n[s+a]===i;)a++;let l=r.hour%12===0?12:r.hour%12;switch(n.slice(s,s+a)){case"yyyy":o+=String(r.year).padStart(4,"0");break;case"yy":o+=nt(r.year%100);break;case"MMMM":o+=ds[r.month-1];break;case"MMM":o+=ds[r.month-1].slice(0,3);break;case"MM":o+=nt(r.month);break;case"M":o+=r.month;break;case"dddd":o+=us[r.dayOfWeek];break;case"ddd":o+=us[r.dayOfWeek].slice(0,3);break;case"dd":o+=nt(r.day);break;case"d":o+=r.day;break;case"HH":o+=nt(r.hour);break;case"H":o+=r.hour;break;case"hh":o+=nt(l);break;case"h":o+=l;break;case"mm":o+=nt(r.minute);break;case"m":o+=r.minute;break;case"ss":o+=nt(r.second);break;case"s":o+=r.second;break;case"tt":o+=r.hour<12?"AM":"PM";break}s+=a}return o}var ds=["January","February","March","April","May","June","July","August","September","October","November","December"];var Je=6e4,ms=36e5,Pr=864e5,gs=365e4*Pr,xl=/^(?:now\s*)?([+-])\s*((?:\d+(?:\.\d+)?(?:ms|s|m|h|d)\s*)+)$/i,kl=/\d+(?:\.\d+)?(?:ms|s|m|h|d)/gi,Tl=/^(\d{1,2}):(\d{2})(?::(\d{2}))?$/,Sl=/^\d{4}[-/]\d{1,2}[-/]\d{1,2}|\p{L}.*\d|\d.*\p{L}/u,Al=/^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d)?$/i;function bs(e,t,n){if(Ke(e))return null;let r=F(e);if(r.length===3&&r.toLowerCase()==="now")return t;let o=xl.exec(r);if(o){let i=0;for(let l of o[2].matchAll(kl)){let c=_l(l[0]);if(c===null||c>gs-i)return null;i+=c}let a=o[1]==="-"?t-i:t+i;return a<Ft||a>Ut?null:a}let s=Tl.exec(r);if(s){let i=Number(s[1]),a=Number(s[2]),l=Number(s[3]??0);if(i>23||a>59||l>59)return null;let c=_n(t,n);return On(Bt(c.year,c.month,c.day,i,a,l),n)}return Sl.test(r)?fs(r,n):null}function _l(e){if(Ke(e))return null;let t=Al.exec(F(e));if(!t)return null;let n=Number(t[1]),r=(t[2]??"").toLowerCase(),o=n*(r==="ms"?.001:r==="m"?60:r==="h"?3600:r==="d"?86400:1);return Number.isFinite(o)&&o<=gs/1e3?o*1e3:null}var fe=(e,t)=>String(e).padStart(t,"0");function Gt(e){let t=Mr(Math.floor(e)),n=`${fe(t.year,4)}-${fe(t.month,2)}-${fe(t.day,2)}T${fe(t.hour,2)}:${fe(t.minute,2)}:${fe(t.second,2)}`;return t.millisecond!==0?`${n}.${fe(t.millisecond,3)}Z`:n+"Z"}function ws(e,t,n,r=!1){let o=e-t;if(r){let i=Math.ceil(o/Je);if(i>0)return Wt(i*Je);if(n)return"0:00";let a=-i*Je;return a<Je?"Now":`${Wt(a)} ago`}if(n){let i=Math.max(0,Math.ceil(o/1e3)),a=Math.floor(i/3600),l=Math.floor(i%3600/60),c=i%60;return a>0?`${a}:${fe(l,2)}:${fe(c,2)}`:`${l}:${fe(c,2)}`}let s=Math.floor(o/1e3);if(s<=0){let i=-s*1e3;return i<Je?"Now":`${Wt(i)} ago`}return s<180?`${Math.floor(s/60)}:${fe(s%60,2)}`:Wt(s*1e3)}function ys(e,t,n=!1){let r=e-t,o=r<0,s=o?-r:r;if(s<Je)return"now";let i=Wt(s);return n?o?"-"+i:i:o?`${i} ago`:`in ${i}`}function Wt(e){if(e<ms)return`${Math.floor(e/Je)} min`;if(e<Pr){let t=Math.floor(e/Je)%60,n=Math.floor(e/ms);return t===0?`${n} h`:`${n} h ${t} min`}return`${Math.floor(e/Pr)} d`}var Ce="--";function Ln(e,t){if(!Number.isFinite(e)||Math.abs(e)>=1e16)return e;let n=10**t,r=e*n,o=Math.floor(r),s=r-o;return(s>.5||s===.5&&o%2!==0)&&(o+=1),o===0?r<0||Object.is(r,-0)?-0:0:o/n}function Nr(e){return Object.is(e,-0)?"-0":String(e)}function W(e){return Nr(Ln(e,2))}function Ne(e){if(Number.isNaN(e))return"NaN";if(!Number.isFinite(e))return e>0?"\u221E":"-\u221E";let t=e<0||Object.is(e,-0),[n,r]=Math.abs(e).toExponential(14).split("e"),o=n.replace(".",""),s=Number(r)+1,i=s>0?o.padEnd(s+2,"0"):"0".repeat(1-s)+o,a=s>0?s:1,l=BigInt(i.slice(0,a+1)||"0");(i[a+1]??"0")>="5"&&(l+=1n);let c=l/10n,p=l%10n,d=p===0n?`${c}`:`${c}.${p}`;return t?"-"+d:d}function $r(e,t){return e==null?"":t!=null&&e.length>t?e.slice(0,Math.max(0,t-1))+"\u2026":e}function xs(e,t,n,r){return e==null?Ce:ws(e,t,n,r)}function Rn(e,t){let n=Math.floor((t-e)/6e4);return n<1?"Updated just now":`Updated ${Ol(n)} ago`}function Ol(e){return e<60?`${e} min`:e<1440?e%60===0?`${Math.trunc(e/60)} h`:`${Math.trunc(e/60)} h ${e%60} min`:`${Math.trunc(e/1440)} d`}function Pn(e,t,n){return t===0&&n===100?`${Ne(e)}%`:`${Ne(e)}/${Ne(n)}`}function Nn(e){let t=new Date(e),n=(r,o=2)=>String(r).padStart(o,"0");return`${n(t.getUTCFullYear(),4)}-${n(t.getUTCMonth()+1)}-${n(t.getUTCDate())}T${n(t.getUTCHours())}:${n(t.getUTCMinutes())}:${n(t.getUTCSeconds())}.${n(t.getUTCMilliseconds(),3)}0000+00:00`}var vs=new Map;function ks(e,t){let n=vs.get(t);n||(n=new Intl.DateTimeFormat("en-US",{timeZone:tt(t),hourCycle:"h23",hour:"numeric",minute:"2-digit",weekday:"short",day:"numeric"}),vs.set(t,n));let r={};for(let o of n.formatToParts(e))r[o.type]=o.value;return{hour:Number(r.hour)%24,minute:Number(r.minute),weekday:r.weekday??"",day:Number(r.day)}}function $n(e,t){let{hour:n,minute:r}=ks(e,t);return`${n}:${String(r).padStart(2,"0")}`}function Ts(e,t){let{weekday:n,day:r}=ks(e,t);return`${n} ${r}`.toUpperCase()}var le={version:1,insets:{safePercent:14.64,tileHorizontalPercent:7.1,screenHorizontalPercent:5.2,screenTopPercent:13,screenBottomPercent:23},spacing:{xxs:2,xs:4,s:6,m:8,l:12,xl:16},radius:{rounded:{extraSmall:4,small:8,medium:18,large:26,extraLarge:36,full:999},sharp:{extraSmall:0,small:2,medium:3,large:4,extraLarge:6,full:8},pill:{extraSmall:8,small:12,medium:999,large:999,extraLarge:999,full:999}},sizes:{chipHeight:52,compactChipHeight:32,listRowMinHeight:52,iconSmall:18,iconMedium:24,iconLarge:32,progressRingStroke:8,progressBarHeight:8,toggleWidth:32,toggleHeight:22,frameBezelPercent:7,edgeButtonHeight:46,edgeButtonWidthPercent:48,tileButtonSize:65,curvedTextInset:16,confirmButtonSize:60,progressRingSize:84,tileRingStroke:8,toggleThumb:18,statusDot:10,statusIcon:28,badgeHeight:18,toastHeight:32,skeletonLine:12,scrollIndicatorWidth:6,scrollIndicatorLength:50,scrollIndicatorGap:3,scrollIndicatorEdgePadding:2,rangedStroke:3,complicationPercent:25,longComplicationWidthPercent:64,largeScreenMinWidth:225,buttonPaddingX:14,buttonPaddingY:6,buttonIconSpacing:6,buttonIcon:26,switchPaddingY:8,toggleThumbOff:12,toggleTrackBorder:2,toggleSpacing:6,listHeaderMinHeight:48,listHeaderPaddingX:14,listHeaderPaddingTop:16,listHeaderPaddingBottom:12,progressRingStrokeSmallScreen:5,scrollIndicatorWidthSmallScreen:5,edgeButtonWidthPercentSmallScreen:52,edgeButtonBottom:3,edgeButtonTopMargin:4,edgeButtonTopRadius:17,confirmButtonWidth:63,confirmButtonHeight:54,tileHeaderIcon:24,tileTitleTop:3,tileTitleBottom:6,tileTitleBottomSmallScreen:4,tileIconTitleSpacing:4,tileIconTitleSpacingSmallScreen:2,tileTitleSidePercent:14.5,tileMarginNoEdgePercent:10,tileBottomNoEdgePercent:16.64},effects:{edgeScaleSmall:.7,edgeScaleLarge:.6,edgeAlpha:.5,edgeMinElementHeightSmall:.2,edgeMinElementHeightLarge:.15,edgeMaxElementHeightSmall:.6,edgeMaxElementHeightLarge:.45,edgeMinTransitionAreaSmall:.35,edgeMinTransitionAreaLarge:.4,edgeMaxTransitionAreaSmall:.55,edgeMaxTransitionAreaLarge:.6,edgeSpecSmallScreenWidth:192,edgeSpecLargeScreenWidth:240},font:{family:"'Roboto Flex', Roboto, 'Google Sans', 'Segoe UI', system-ui, sans-serif",numeralFamily:"'Roboto Flex', Roboto, 'Google Sans', 'Segoe UI', system-ui, sans-serif"},typeScale:{display:{size:30,lineHeight:34,weight:520,letterSpacing:.2,width:110},numeral:{size:40,lineHeight:40,weight:580,letterSpacing:0,width:100},title:{size:16,lineHeight:18,weight:550,letterSpacing:.4,width:110},label:{size:15,lineHeight:18,weight:500,letterSpacing:.4,width:110},body:{size:14,lineHeight:16,weight:450,letterSpacing:.4,width:110},labelSmall:{size:13,lineHeight:16,weight:500,letterSpacing:.4,width:110},caption:{size:12,lineHeight:14,weight:500,letterSpacing:.4,width:110},timeText:{size:15,lineHeight:18,weight:599,letterSpacing:.6,width:100},tileTitle:{size:14,lineHeight:16,weight:500,letterSpacing:.4,width:110},faceTime:{size:44,lineHeight:48,weight:400,letterSpacing:0,width:100}},colors:{ambient:{background:"#000000",surface:"#000000",onSurface:"#B0B0B0",onSurfaceVariant:"#8A8A8A",outline:"#6A6A6A",onAccent:"#B0B0B0",timeText:"#B0B0B0",scrollThumb:"#8A8A8A",scrollTrack:"#303030",warningText:"#8A8A8A"}},limits:{textMaxLines:3,screenListMaxRows:10,tileListMaxRows:3,tileCompactListMaxRows:8,tileCompactListMaxRowsSmallScreen:6,tileMaxButtons:2,tileMaxToggles:1,minPollSeconds:60,tileMinRefreshSeconds:60}};function jn(e){return{...e,widthDp:e.widthPx/e.density,heightDp:e.heightPx/e.density,isRound:e.shape==="round"}}function Es(e,t){let n=t.tileTheme;return n?{...e,shape:n.corners?e.shape:{corners:"rounded"},type:{weight:n.typeWeight?e.type.weight:0,width:n.typeWidth?e.type.width:0}}:e}var Ss=(e,t,n)=>Math.min(Math.max(e,t),n),As="SmallScreen",_s="Percent";function zr(e,t=le){return e.widthDp<(t.sizes.largeScreenMinWidth??225)}function zn(e,t=le){let n=zr(e,t),r={};for(let[o,s]of Object.entries(t.sizes)){if(o.endsWith(As))continue;let i=t.sizes[o+As];r[o]=n&&i!==void 0?i:s}return r}function vt(e,t){return Math.ceil(Ln(e.widthDp*t/100,4))}var El=(e,t)=>(Math.ceil(e*t*1900/2048)+Math.ceil(e*t*500/2048))/t,qt=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();function Ms(e,t,n,r=le){let o="",s=(y,m)=>{o+=`--wb-${y}:${W(m)}px;`},i=(y,m)=>{o+=`--wb-${y}:${m};`},a=zn(e,r);s("width",e.widthDp),s("height",e.heightDp),i("radius-screen",e.isRound?"50%":"0px"),s("inset-safe",e.isRound?vt(e,r.insets.safePercent):0),s("pad-x",vt(e,r.insets.screenHorizontalPercent)),s("tile-pad-x",vt(e,r.insets.tileHorizontalPercent)),s("pad-top",vt(e,r.insets.screenTopPercent)),s("pad-bottom",vt(e,r.insets.screenBottomPercent)),s("bezel",e.widthDp*(a.frameBezelPercent??7)/100);for(let[y,m]of Object.entries(r.spacing))s(`space-${qt(y)}`,m);let l=r.radius[t.shape.corners]??r.radius.rounded??{};for(let[y,m]of Object.entries(l))s(`radius-${qt(y)}`,m);for(let[y,m]of Object.entries(a))y.endsWith(_s)?y!=="frameBezelPercent"&&s(qt(y.slice(0,-_s.length)),vt(e,m)):s(qt(y),m);let c=Ir(e,a.listRowMinHeight??52,r);i("edge-scale",W(c.scale)),i("edge-opacity",W(c.alpha)),s("edge-zone",c.zoneDp);for(let[y,m]of Object.entries(r.typeScale)){let S=qt(y);s(`type-${S}-size`,m.size);let L=Math.max(m.lineHeight,El(m.size,e.density));s(`type-${S}-line`,L),s(`type-${S}-pitch`,m.lineHeight),s(`type-${S}-lead`,(L-m.lineHeight)/2),i(`type-${S}-weight`,String(Ss(m.weight+t.type.weight,100,1e3))),s(`type-${S}-tracking`,m.letterSpacing),i(`type-${S}-width`,`${W(Ss(m.width+t.type.width,25,151))}%`)}i("font",r.font.family),i("font-numeral",r.font.numeralFamily);let p=t.colors,d=n?{...r.colors.ambient,accent:r.colors.ambient.onSurface}:p;i("bg",d.background),i("surface",d.surface),i("on-surface",d.onSurface),i("on-surface-variant",d.onSurfaceVariant),i("outline",d.outline),i("time-text",d.timeText),i("scroll-thumb",d.scrollThumb),i("scroll-track",d.scrollTrack),i("accent",n?d.onSurface:p.accent),i("accent-fill",n?"transparent":p.accent),i("on-accent",n?d.onSurface:p.onAccent),i("accent-container",n?"transparent":`color-mix(in srgb, ${p.accent} 22%, ${p.surface})`),i("on-accent-container",n?d.onSurface:`color-mix(in srgb, ${p.accent} 35%, ${p.onSurface})`),i("track",n?d.outline:`color-mix(in srgb, ${p.accent} 22%, ${p.background})`),i("skeleton",n?d.outline:`color-mix(in srgb, ${p.onSurface} 14%, ${p.background})`);let g={ok:p.statusOk,warn:p.statusWarn,error:p.statusError,unknown:p.statusUnknown};for(let[y,m]of Object.entries(g))i(`status-${y}`,n?d.onSurfaceVariant:m);return i("warning-text",d.warningText),o}var jr=(e,t,n)=>Math.min(Math.max(e,t),n);function Ir(e,t,n=le){let r=(A,B)=>n.effects[A]??B,o=r("edgeSpecSmallScreenWidth",192),s=r("edgeSpecLargeScreenWidth",240),i=s>o?jr((e.heightDp-o)/(s-o),0,1):1,a=(A,B,b)=>r(A+"Small",B)+(r(A+"Large",b)-r(A+"Small",B))*i,l=a("edgeScale",.7,.6),c=a("edgeMinElementHeight",.2,.15),p=a("edgeMaxElementHeight",.6,.45),d=a("edgeMinTransitionArea",.35,.4),g=a("edgeMaxTransitionArea",.55,.6),y=e.heightDp,m=y>0?t/y:0,S=p>c?jr((m-c)/(p-c),0,1):0,L=Math.min(d+(g-d)*S,(1+m)/2);return{scale:l,alpha:r("edgeAlpha",.5),zoneDp:L*y}}var De=e=>Nr(Ln(e,3));function Zt(e,t,n,r){let o=r*Math.PI/180;return`${De(e+n*Math.cos(o))} ${De(t+n*Math.sin(o))}`}function In(e,t,n,r,o){if(o<=0||n<=0)return"";if(o>=359.99)return`M${Zt(e,t,n,r)} A${De(n)} ${De(n)} 0 0 1 ${Zt(e,t,n,r+180)} A${De(n)} ${De(n)} 0 0 1 ${Zt(e,t,n,r+360)}`;let s=o>180?1:0;return`M${Zt(e,t,n,r)} A${De(n)} ${De(n)} 0 ${s} 1 ${Zt(e,t,n,r+o)}`}function Os(e,t){return t<=0?0:2*Math.asin(jr(e/2/t,-1,1))*180/Math.PI}function Jn(e,t,n,r=le){let o=zn(e,r),s=o.scrollIndicatorWidth??6,i=e.widthDp/2,a=i-(o.scrollIndicatorEdgePadding??2),l=a-s/2,c=Os(s+(o.scrollIndicatorGap??3),a),p=Os(o.scrollIndicatorLength??50,a)+c,d=(y,m)=>m*p>c?In(i,i,l,-p/2+y*p+c/2,m*p-c):"";return{track:[d(0,t),d(t+n,1-t-n)].filter(Boolean).join(" "),thumb:d(t,n),width:s}}var xt=[{id:"dark",name:"Dark",description:"The Wear OS Material 3 dark palette on black: the default.",tone:"dark",colors:{background:"#000000",surface:"#252626",onSurface:"#E3E3E3",onSurfaceVariant:"#C4C7C5",outline:"#8E918F",accent:"#A8C7FA",onAccent:"#062E6F",timeText:"#C6C6C6",scrollThumb:"#C6C6C6",scrollTrack:"#303030",warningText:"#FDD663",statusOk:"#6DD58C",statusWarn:"#FDD663",statusError:"#F28B82",statusUnknown:"#9AA0A6"},shape:{corners:"rounded"},type:{weight:0,width:0}},{id:"light",name:"Light",description:"The Material 3 light palette: dark text on a near-white background with a deep blue accent.",tone:"light",colors:{background:"#F8FAFD",surface:"#E1E3E1",onSurface:"#1F1F1F",onSurfaceVariant:"#444746",outline:"#747775",accent:"#0B57D0",onAccent:"#FFFFFF",timeText:"#444746",scrollThumb:"#444746",scrollTrack:"#C4C7C5",warningText:"#7C5800",statusOk:"#6DD58C",statusWarn:"#FDD663",statusError:"#F28B82",statusUnknown:"#9AA0A6"},shape:{corners:"rounded"},type:{weight:0,width:0}},{id:"high-contrast",name:"High contrast",description:"White on black with a yellow accent and heavier type, for reading at a glance in any light.",tone:"dark",colors:{background:"#000000",surface:"#1F1F1F",onSurface:"#FFFFFF",onSurfaceVariant:"#E6E6E6",outline:"#BFBFBF",accent:"#FFE14D",onAccent:"#000000",timeText:"#FFFFFF",scrollThumb:"#FFFFFF",scrollTrack:"#4D4D4D",warningText:"#FFE14D",statusOk:"#00E676",statusWarn:"#FFE14D",statusError:"#FF6E6E",statusUnknown:"#CCCCCC"},shape:{corners:"rounded"},type:{weight:100,width:0}},{id:"ember",name:"Ember",description:"Warm browns with an amber accent and pill-shaped chips.",tone:"dark",colors:{background:"#140D08",surface:"#2D2017",onSurface:"#F6E7D9",onSurfaceVariant:"#D9C3AF",outline:"#A68B75",accent:"#FFB37A",onAccent:"#4A2300",timeText:"#E5CDB8",scrollThumb:"#E5CDB8",scrollTrack:"#3B2B20",warningText:"#FFD27A",statusOk:"#A8D67A",statusWarn:"#FFC85C",statusError:"#FF8F7A",statusUnknown:"#B3A08F"},shape:{corners:"pill"},type:{weight:0,width:0}},{id:"mono",name:"Monochrome",description:"Greys only, white for emphasis and a lighter weight: quiet and neutral.",tone:"dark",colors:{background:"#000000",surface:"#262626",onSurface:"#F2F2F2",onSurfaceVariant:"#BDBDBD",outline:"#8C8C8C",accent:"#FFFFFF",onAccent:"#000000",timeText:"#BDBDBD",scrollThumb:"#BDBDBD",scrollTrack:"#333333",warningText:"#E0E0E0",statusOk:"#E0E0E0",statusWarn:"#A6A6A6",statusError:"#FFFFFF",statusUnknown:"#6E6E6E"},shape:{corners:"rounded"},type:{weight:-50,width:0}},{id:"slate",name:"Slate",description:"Blue-grey with a teal accent, sharp corners and condensed, slightly heavier type: a technical look.",tone:"dark",colors:{background:"#0B1015",surface:"#1C252E",onSurface:"#E6EDF3",onSurfaceVariant:"#A9B6C3",outline:"#6B7A89",accent:"#5CD6CB",onAccent:"#00312D",timeText:"#A9B6C3",scrollThumb:"#A9B6C3",scrollTrack:"#2A3540",warningText:"#F2C14E",statusOk:"#5FD38D",statusWarn:"#F2C14E",statusError:"#FF7B72",statusUnknown:"#8B98A5"},shape:{corners:"sharp"},type:{weight:50,width:-10}}],Jr="dark";function $e(e){return xt.find(t=>t.id===e)}var Cr=["background","surface","onSurface","onSurfaceVariant","outline","accent","onAccent","timeText","scrollThumb","scrollTrack","warningText","statusOk","statusWarn","statusError","statusUnknown"],Dr=["sharp","rounded","pill"],Ls={min:-200,max:200},Rs={min:-30,max:30};var Ml=/^#[0-9A-Fa-f]{6}$/,Xt=e=>e!==null&&typeof e=="object"&&!Array.isArray(e),Ll=new Set(Cr);function kt(e){return{id:e.id,name:e.name,tone:e.tone,colors:{...e.colors},shape:{...e.shape},type:{...e.type}}}function Tt(){return kt($e(Jr))}function Ps(e){let t=$e(e.base);return{...Br(t?kt(t):Tt(),e.overrides,"overrides",[]),id:`saved:${e.id}`,name:e.name}}function Vr(e,t={}){let n=[],r=t.inherit!==void 0?Ns(t.inherit):Tt(),o=t.inheritLabel??(t.inherit!==void 0?"the App theme":"the default theme");if(e==null)return{theme:r,problems:n};if(!Xt(e))return n.push({path:"",rule:"theme-invalid",severity:"error",message:'A theme is an object: { "base": "<theme id>", "overrides": { \u2026 } }.'}),{theme:r,problems:n};for(let l of Object.keys(e))l!=="base"&&l!=="overrides"&&n.push({path:l,rule:"theme-invalid",severity:"error",message:`Unknown theme property '${l}': use base and overrides.`});let s=r,i=e.base;if(i!==void 0)if(typeof i!="string")n.push({path:"base",rule:"theme-invalid",severity:"error",message:'base is a theme id such as "dark" or "saved:thm_\u2026".'});else if(i.startsWith("saved:")){let l=i.slice(6),c=t.saved?.find(p=>p.id===l);c?s=Ps(c):n.push({path:"base",rule:"theme-saved-unknown",severity:"warning",message:`This account has no saved theme '${l}' (it may belong to another account): ${o} is used instead.`})}else{let l=$e(i);l?s=kt(l):n.push({path:"base",rule:"theme-unknown",severity:"error",message:`Unknown theme '${i}': ${o} is used instead.`})}let a=e.overrides;return a!==void 0&&(s=Br(s,a,"overrides",n)),{theme:s,problems:n}}function Br(e,t,n,r){let o=Ns(e),s=(i,a)=>r.push({path:i,rule:"theme-invalid",severity:"error",message:a});if(t==null)return o;if(!Xt(t))return s(n,"overrides is an object: { tone, colors, shape, type }."),o;for(let[i,a]of Object.entries(t)){let l=`${n}.${i}`;if(i==="tone")a==="dark"||a==="light"?o.tone=a:s(l,"tone is dark or light.");else if(i==="colors"){if(!Xt(a)){s(l,"colors maps colour roles to #RRGGBB.");continue}for(let[c,p]of Object.entries(a))Ll.has(c)?typeof p!="string"||!Ml.test(p)?s(`${l}.${c}`,`${c} must be a colour as #RRGGBB.`):o.colors[c]=p.toUpperCase():s(`${l}.${c}`,`Unknown colour role '${c}'. Roles: ${Cr.join(", ")}.`)}else if(i==="shape"){if(!Xt(a)){s(l,"shape is { corners }.");continue}for(let[c,p]of Object.entries(a))c!=="corners"?s(`${l}.${c}`,`Unknown shape property '${c}': use corners.`):typeof p=="string"&&Dr.includes(p)?o.shape.corners=p:s(`${l}.corners`,`corners is ${Dr.join(", ")}.`)}else if(i==="type"){if(!Xt(a)){s(l,"type is { weight, width }.");continue}for(let[c,p]of Object.entries(a)){let d=c==="weight"?Ls:c==="width"?Rs:null;d===null?s(`${l}.${c}`,`Unknown type property '${c}': use weight and width.`):typeof p!="number"||!Number.isInteger(p)||p<d.min||p>d.max?s(`${l}.${c}`,`${c} is a whole number from ${d.min} to ${d.max}.`):o.type[c]=p}}else s(l,`Unknown override '${i}': use tone, colors, shape and type.`)}return o}function Ns(e){return{id:e.id,name:e.name,tone:e.tone,colors:{...e.colors},shape:{...e.shape},type:{...e.type}}}var h=(e,t)=>{let n=e?.[t];return typeof n=="string"?n:void 0},X=(e,t)=>{let n=e?.[t];return typeof n=="number"?n:void 0},I=(e,t)=>{let n=e?.[t];return n!==null&&typeof n=="object"&&!Array.isArray(n)?n:void 0},Te=(e,t)=>{let n=e?.[t];return Array.isArray(n)?n.filter(r=>r!==null&&typeof r=="object"&&!Array.isArray(r)):[]},P=e=>e==null||e==="";function St(e){if(e===void 0)return null;let t=Date.parse(e);return Number.isNaN(t)?null:t}var Yt={phase:"ready",updatedAt:null,staleAfter:10*6e4};function Cn(e,t){return e.updatedAt!==null&&t-e.updatedAt>=e.staleAfter}function Fr(e,t){let n=h(e,"state"),r=St(h(e,"lastUpdated"));if(n==="loading"&&t)return{...Yt,phase:"loading",updatedAt:r};if(n==="error"&&t){let o=h(e,"message");return o===void 0?{...Yt,phase:"error",updatedAt:r}:{...Yt,phase:"error",updatedAt:r,errorMessage:o}}return n==="empty"?{...Yt,phase:"empty"}:n==="stale"?{phase:"ready",updatedAt:r,staleAfter:0}:Yt}function ce(e,t){return e===void 0&&t===void 0?null:{name:e,url:t}}function $s(e){let t=0;return n=>`${e}-${n}-${++t}`}var ee=e=>e.data.phase==="loading",te=e=>e.data.phase==="empty";var Ur="0 0 24 24",js={add:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z",alarm:"M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39 6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12.5 8H11v6l4.75 2.85.75-1.23-4-2.37V8zM12 4a9 9 0 1 0 0 18 9 9 0 0 0 0-18zm0 16a7 7 0 1 1 0-14 7 7 0 0 1 0 14z","arrow-down":"M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z","arrow-up":"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z",battery:"M15.67 4H14V2h-4v2H8.33C7.6 4 7 4.6 7 5.33v15.33C7 21.4 7.6 22 8.33 22h7.33c.74 0 1.34-.6 1.34-1.33V5.33C17 4.6 16.4 4 15.67 4z",bell:"M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z",bike:"M5 20.5a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-5.5a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm14 5.5a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-5.5a2 2 0 1 0 0 4 2 2 0 0 0 0-4zM15.5 5.5a2 2 0 1 0 0-4 2 2 0 0 0 0 4zM12.6 8.8 15 11h3V9h-2.2l-2.6-2.6c-.4-.4-.9-.6-1.4-.6s-1 .2-1.4.6L7.8 9c-.4.4-.6.9-.6 1.4 0 .6.2 1.1.6 1.4L11 14.5V19h2v-5.6l-2.2-2.1z",bolt:"M7 2v11h3v9l7-12h-4l4-8z",build:"M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z",bus:"M4 16c0 .88.39 1.67 1 2.22V20c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1h8v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1.78c.61-.55 1-1.34 1-2.22V6c0-3.5-3.58-4-8-4s-8 .5-8 4v10zm3.5 1a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm9 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zM18 11H6V6h12v5z",calendar:"M20 3h-1V1h-2v2H7V1H5v2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 18H4V8h16v13z",car:"M18.92 6.01C18.72 5.42 18.16 5 17.5 5h-11c-.66 0-1.21.42-1.42 1.01L3 12v8c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-8l-2.08-5.99zM6.5 16a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm11 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zM5 11l1.5-4.5h11L19 11H5z",check:"M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z","chevron-right":"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z",clock:"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20a8 8 0 1 1 0-16 8 8 0 0 1 0 16zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z",close:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z",cloud:"M19.35 10.04A7.49 7.49 0 0 0 12 4C9.11 4 6.6 5.64 5.35 8.04A5.994 5.994 0 0 0 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96z",code:"M9.4 16.6 4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0 4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z",door:"M19 19V5c0-1.1-.9-2-2-2H7c-1.1 0-2 .9-2 2v14H3v2h18v-2h-2zm-4-6h-2v-2h2v2z",error:"M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z",fan:"M12 11a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm.5-9C17 2 17.11 5.57 14.75 6.75c-.99.49-1.43 1.54-1.62 2.47.48.2.9.51 1.22.91 3.7-2 7.68-1.21 7.68 2.37C22 17 18.43 17.11 17.25 14.75c-.5-.99-1.56-1.43-2.49-1.62-.2.48-.51.89-.91 1.22 2 3.69 1.2 7.65-2.37 7.65C7 22 6.89 18.42 9.24 17.24c.98-.49 1.42-1.53 1.62-2.45-.49-.2-.92-.52-1.24-.92C5.94 15.85 2 15.07 2 11.5 2 7 5.56 6.89 6.74 9.25c.5.99 1.55 1.42 2.48 1.61.19-.48.51-.9.92-1.22C8.15 5.96 8.94 2 12.5 2z",flag:"M14.4 6 14 4H5v17h2v-7h5.6l.4 2h7V6z",git:"M5 2a3 3 0 0 1 1 5.83v8.34A3 3 0 1 1 4 16.17V7.83A3 3 0 0 1 5 2zm14 4a3 3 0 0 1-2 2.83V10a4 4 0 0 1-4 4H7v-2h6a2 2 0 0 0 2-2V8.83A3 3 0 1 1 19 6z",heart:"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z",home:"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z",info:"M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z",light:"M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9v1zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74 0-3.86-3.14-7-7-7z",lock:"M18 8h-1V6A5 5 0 0 0 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9a2 2 0 1 1 0-4 2 2 0 0 1 0 4zm3.1-9H8.9V6a3.1 3.1 0 0 1 6.2 0v2z",mail:"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4-8 5-8-5V6l8 5 8-5v2z","map-pin":"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5a2.5 2.5 0 0 1 0-5 2.5 2.5 0 0 1 0 5z",music:"M12 3v10.55A4 4 0 1 0 14 17V7h4V3h-6z",pause:"M6 19h4V5H6v14zm8-14v14h4V5h-4z",phone:"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1C10.61 21 3 13.39 3 4c0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z",play:"M8 5v14l11-7z",plug:"M16 7V3h-2v4h-4V3H8v4H7c-.55 0-1 .45-1 1v5.5L9.5 17v4h5v-4l3.5-3.5V8c0-.55-.45-1-1-1h-1z",power:"M13 3h-2v10h2V3zm4.83 2.17-1.42 1.42A6.92 6.92 0 0 1 19 12a7 7 0 0 1-14 0c0-2.08.9-3.95 2.58-5.42L6.17 5.17A8.93 8.93 0 0 0 3 12a9 9 0 0 0 18 0c0-2.74-1.23-5.18-3.17-6.83z",rain:"M18 5.5a6 6 0 0 0-11.6 1.1A4.5 4.5 0 0 0 6.5 15.5h11a5 5 0 0 0 .5-10zM8.1 17 6.6 21h1.6l1.5-4zm4 0-1.5 4h1.6l1.5-4zm4 0-1.5 4h1.6l1.5-4z",refresh:"M17.65 6.35A7.96 7.96 0 0 0 12 4a8 8 0 1 0 7.73 10h-2.08A6 6 0 1 1 12 6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z",remove:"M19 13H5v-2h14v2z",robot:"M20 9V7c0-1.1-.9-2-2-2h-3a3 3 0 0 0-6 0H6c-1.1 0-2 .9-2 2v2a3 3 0 0 0 0 6v4c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-4a3 3 0 0 0 0-6zM7.5 11.5a1.5 1.5 0 1 1 3 0 1.5 1.5 0 0 1-3 0zM16 17H8v-2h8v2zm-1.5-4a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z",rocket:"M12 2.5s4.5 2 4.5 9.5l2 2.5V19l-3-1.5h-7L5.5 19v-4.5l2-2.5C7.5 4.5 12 2.5 12 2.5zm0 7a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3zM10 19h4l-2 3z",settings:"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58a.49.49 0 0 0 .12-.61l-1.92-3.32a.49.49 0 0 0-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54a.48.48 0 0 0-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96a.49.49 0 0 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58a.49.49 0 0 0-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6a3.6 3.6 0 1 1 0-7.2 3.6 3.6 0 0 1 0 7.2z",ship:"M20 21c-1.39 0-2.78-.47-4-1.32-2.44 1.71-5.56 1.71-8 0C6.78 20.53 5.39 21 4 21H2v2h2c1.38 0 2.74-.35 4-.99a8.75 8.75 0 0 0 8 0c1.26.65 2.62.99 4 .99h2v-2h-2zM3.95 19H4c1.6 0 3.02-.88 4-2 .98 1.12 2.4 2 4 2s3.02-.88 4-2c.98 1.12 2.4 2 4 2h.05l1.89-6.68c.08-.26.06-.54-.06-.78s-.34-.42-.6-.5L20 10.62V6c0-1.1-.9-2-2-2h-3V1H9v3H6c-1.1 0-2 .9-2 2v4.62l-1.29.42a1 1 0 0 0-.66 1.28L3.95 19zM6 6h12v3.97L12 8 6 9.97V6z",snow:"M22 11h-4.17l3.24-3.24-1.41-1.42L15 11h-2V9l4.66-4.66-1.42-1.41L13 6.17V2h-2v4.17L7.76 2.93 6.34 4.34 11 9v2H9L4.34 6.34 2.93 7.76 6.17 11H2v2h4.17l-3.24 3.24 1.41 1.42L9 13h2v2l-4.66 4.66 1.42 1.41L11 17.83V22h2v-4.17l3.24 3.24 1.42-1.41L13 15v-2h2l4.66 4.66 1.41-1.42L17.83 13H22z",star:"M12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z",stop:"M6 6h12v12H6z",sun:"M12 7a5 5 0 1 0 0 10 5 5 0 0 0 0-10zM11 1h2v3h-2zm0 19h2v3h-2zM1 11h3v2H1zm19 0h3v2h-3zM4.22 5.64l1.42-1.42 2.12 2.12-1.42 1.42zm12.02 12.02 1.42-1.42 2.12 2.12-1.42 1.42zM4.22 18.36l2.12-2.12 1.42 1.42-2.12 2.12zM16.24 6.34l2.12-2.12 1.42 1.42-2.12 2.12z",temp:"M15 13V5a3 3 0 0 0-6 0v8a5 5 0 1 0 6 0zm-3-10a2 2 0 0 1 2 2v3h-4V5a2 2 0 0 1 2-2z",thermometer:"M15 13V5a3 3 0 0 0-6 0v8a5 5 0 1 0 6 0zm-4-8a1 1 0 0 1 2 0h-1v1h1v2h-1v1h1v2h-2V5z",timer:"M15 1H9v2h6V1zm-4 13h2V8h-2v6zm8.03-6.61 1.42-1.42c-.43-.51-.9-.99-1.41-1.41l-1.42 1.42A8.96 8.96 0 0 0 12 4a9 9 0 1 0 9 9c0-2.12-.74-4.07-1.97-5.61zM12 20a7 7 0 1 1 0-14 7 7 0 0 1 0 14z",train:"M12 2c-4 0-8 .5-8 4v9.5C4 17.43 5.57 19 7.5 19L6 20.5v.5h2.23l2-2H14l2 2h2v-.5L16.5 19c1.93 0 3.5-1.57 3.5-3.5V6c0-3.5-3.58-4-8-4zM7.5 17a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm3.5-7H6V6h5v4zm2 0V6h5v4h-5zm3.5 7a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z",tram:"M19 16.94V8.5c0-2.79-2.61-3.4-6.01-3.49l.76-1.51H17V2H7v1.5h4.75l-.76 1.52C7.86 5.11 5 5.73 5 8.5v8.44c0 1.45 1.19 2.66 2.59 2.97L6 21.5v.5h2.23l2-2H14l2 2h2v-.5L16.5 20h-.08c1.69 0 2.58-1.37 2.58-3.06zM12 18.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm5-4.5H7V9h10v5z",unlock:"M12 17a2 2 0 1 0 0-4 2 2 0 0 0 0 4zm6-9h-1V6A5 5 0 0 0 7 6h1.9a3.1 3.1 0 0 1 6.2 0v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm0 12H6V10h12v10z",user:"M12 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z",walk:"M13.5 5.5a2 2 0 1 0 0-4 2 2 0 0 0 0 4zM9.8 8.9 7 23h2.1l1.8-8 2.1 2v6h2v-7.5l-2.1-2 .6-3A7.3 7.3 0 0 0 19 13v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5.1-.8.1L6 8.3V13h2V9.6l1.8-.7z",warning:"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z",wifi:"M1 9l2 2c4.97-4.97 13.03-4.97 18 0l2-2C16.93 2.93 7.08 2.93 1 9zm8 8 3 3 3-3a4.24 4.24 0 0 0-6 0zm-4-4 2 2a7.07 7.07 0 0 1 10 0l2-2C15.14 9.14 8.87 9.14 5 13z",wind:"M14.5 17a3 3 0 0 1-6 0h2a1 1 0 1 0 1-1H2v-2h9.5a3 3 0 0 1 3 3zM19 6.5a3.5 3.5 0 0 0-7 0h2a1.5 1.5 0 1 1 1.5 1.5H2v2h13.5A3.5 3.5 0 0 0 19 6.5zm-.5 4.5H2v2h16.5a1.5 1.5 0 0 1 0 3v2a3.5 3.5 0 0 0 0-7z"};var E={ButtonView:"wb-scope-button-view",Buttons2TileView:"wb-scope-buttons2-tile-view",CompactListTileView:"wb-scope-compact-list-tile-view",ComplicationView:"wb-scope-complication-view",ConfirmOverlay:"wb-scope-confirm-overlay",CountdownView:"wb-scope-countdown-view",CurvedText:"wb-scope-curved-text",ErrorView:"wb-scope-error-view",FeedbackOverlay:"wb-scope-feedback-overlay",IconView:"wb-scope-icon-view",List3TileView:"wb-scope-list3-tile-view",ListRow:"wb-scope-list-row",ListView:"wb-scope-list-view",PlaceholderView:"wb-scope-placeholder-view",ProgressRing:"wb-scope-progress-ring",ProgressRingTileView:"wb-scope-progress-ring-tile-view",ProgressView:"wb-scope-progress-view",ScreenView:"wb-scope-screen-view",Skeleton:"wb-scope-skeleton",StackView:"wb-scope-stack-view",StatView:"wb-scope-stat-view",StatusTileView:"wb-scope-status-tile-view",StatusView:"wb-scope-status-view",TextTileView:"wb-scope-text-tile-view",TextView:"wb-scope-text-view",TileFrame:"wb-scope-tile-frame",ToggleView:"wb-scope-toggle-view",UnsupportedView:"wb-scope-unsupported-view",WatchIcon:"wb-scope-watch-icon",WatchOverview:"wb-scope-watch-overview",WatchPreview:"wb-scope-watch-preview"};var he=e=>"text"in e;function u(e,t,n,...r){let o=[],s=e===null;if(n)for(let[a,l]of Object.entries(n))l==null||l===!1||(a==="class"&&e?(o.push([a,`${l===!0?"":String(l)} ${e}`.trim()]),s=!0):o.push([a,l===!0?!0:String(l)]));s||o.push(["class",e]);let i=[];return Js(r,i),{tag:t,attrs:o,children:i}}function Js(e,t){for(let n of e)if(!(n==null||n===!1||n===""))if(Array.isArray(n))Js(n,t);else if(typeof n=="string"){let r=t[t.length-1];r&&he(r)?r.text+=n:t.push({text:n})}else t.push(n)}var Cs="http://www.w3.org/2000/svg";function Hr(e){if(he(e))return null;for(let t of["data-wb-key","id","data-path","data-screen","data-glance","data-wb-surface"]){let n=e.attrs.find(r=>r[0]===t);if(n)return n[1]===!0?"":n[1]}return null}function Ds(e,t,n){t==="style"&&"style"in e?e.style.cssText=n===!0?"":n:e.setAttribute(t,n===!0?"":n)}function Dn(e,t,n){if(he(t))return t.dom=e.createTextNode(t.text);let r=n||t.tag==="svg",o=r?e.createElementNS(Cs,t.tag):e.createElement(t.tag);for(let[s,i]of t.attrs)Ds(o,s,i);for(let s of t.children)o.appendChild(Dn(e,s,r));return t.dom=o,o}function Rl(e,t,n,r){if(he(t)||he(n))return he(t)&&he(n)&&t.dom?(t.text!==n.text&&(t.dom.nodeValue=n.text),n.dom=t.dom,t.dom):zs(e,t,n,r);if(t.tag!==n.tag||!t.dom)return zs(e,t,n,r);let o=t.dom,s=new Map(t.attrs);for(let[i,a]of n.attrs)s.get(i)!==a&&Ds(o,i,a),s.delete(i);for(let i of s.keys())i==="style"&&"style"in o&&(o.style.cssText=""),o.removeAttribute(i);return n.dom=o,Vs(e,o,t.children,n.children,r||n.tag==="svg"),o}function zs(e,t,n,r){let o=Dn(e,n,r);return t.dom?.parentNode?.replaceChild(o,t.dom),o}function Vs(e,t,n,r,o){let s=new Map;for(let p of n){let d=Hr(p);d!==null&&!s.has(d)&&s.set(d,p)}let i=new Set,a=0,l=()=>{for(;a<n.length&&(i.has(n[a])||Hr(n[a])!==null);)a++},c=t.firstChild;for(let p of r){let d=Hr(p),g;if(d!==null)g=s.get(d),g&&s.delete(d);else{l();let y=n[a];y&&Pl(y,p)&&(g=y,a++)}g&&g.dom?(i.add(g),g.dom!==c?t.insertBefore(g.dom,c):c=c.nextSibling,Rl(e,g,p,o)):t.insertBefore(Dn(e,p,o),c)}for(let p of n)!i.has(p)&&p.dom?.parentNode===t&&t.removeChild(p.dom)}function Pl(e,t){return he(e)||he(t)?he(e)&&he(t):e.tag===t.tag}var Is=new WeakMap;function Bs(e,t){let n=e.ownerDocument,r=Is.get(e),o=e.namespaceURI===Cs;r?Vs(n,e,r,t,o):e.replaceChildren(...t.map(s=>Dn(n,s,o))),Is.set(e,t)}var Qt=E.WatchIcon;function pe(e,t="medium",n){let r=e?.name,o=e?.url,s=n??"";if(o!==void 0&&o.trim()!=="")return u(Qt,"img",{class:`wb-icon wb-icon--${t} wb-icon--image ${s}`,src:o,alt:"",loading:"lazy"});let i=r===void 0?void 0:js[r];return i!==void 0?u(Qt,"svg",{class:`wb-icon wb-icon--${t} ${s}`,viewBox:Ur,"data-icon":r,"aria-hidden":"true"},u(Qt,"path",{d:i})):P(r)?null:u(Qt,"svg",{class:`wb-icon wb-icon--${t} wb-icon--unknown ${s}`,viewBox:Ur,"data-icon":r,"aria-hidden":"true"},u(Qt,"circle",{cx:"12",cy:"12",r:"5"}))}var ue=(e,t,n)=>pe({name:e},t,n),Fs=E.Skeleton;function D(e={}){let{shape:t="line",lines:n=1,width:r,cls:o=""}=e;if(t==="line"){let s=[];for(let i=0;i<n;i++)s.push(u(Fs,"span",{class:`wb-skeleton wb-skeleton--line ${o}`,style:`width:${i===n-1&&n>1?"60%":r??"80%"}`}));return s}return[u(Fs,"span",{class:`wb-skeleton wb-skeleton--${t} ${o}`,style:r===void 0?null:`width:${r}`})]}var Kt=E.CurvedText;function Vn(e,t,n,r=!1){let o=e.newId("arc"),s=e.device,i=e.tokens.sizes.curvedTextInset??18,a=s.widthDp/2,l=s.heightDp/2,c=r?a-i/3-(e.tokens.typeScale.caption?.size??12)*500/2048:a-i,p=`M${W(a-c)} ${W(l)} A${W(c)} ${W(c)} 0 0 ${r?0:1} ${W(a+c)} ${W(l)}`;return u(Kt,"svg",{class:`wb-curved ${n}`,viewBox:`0 0 ${W(s.widthDp)} ${W(s.heightDp)}`,"aria-label":t},u(Kt,"defs",null,u(Kt,"path",{id:o,d:p})),u(Kt,"text",null,u(Kt,"textPath",{href:`#${o}`,startOffset:"50%","text-anchor":"middle"},t)))}var Wr=E.ProgressRing;function en(e,t={}){let{stroke:n="var(--wb-progress-ring-stroke)",gapPercent:r=0,radius:o=44,cls:s=""}=t,i=100-r,a=Math.min(Math.max(e,0),1)*i*3.6,l=r>0?90+r*3.6/2:-90;return u(Wr,"svg",{class:`wb-ring ${s}`,viewBox:"0 0 100 100","aria-hidden":"true"},u(Wr,"path",{class:"wb-ring__track",d:In(50,50,o,l,i*3.6),style:`stroke-width:${n}`}),e>0&&u(Wr,"path",{class:"wb-ring__fill",d:In(50,50,o,l,a),"data-sweep":W(a),style:`stroke-width:${n}`}))}function tn(e,t,n){let r=St(h(e,"target"));return r===null?null:{"data-wb-countdown":!0,"data-target":Nn(r),"data-format":h(e,"format")==="clock"?"clock":"relative","data-ambient":t.ambient?"true":"false","data-max":n==null?null:String(n)}}function nn(e,t){return xs(St(h(e,"target")),t.now,h(e,"format")==="clock",t.ambient)}var rt=E.ListRow;function Bn(e,t,n,r=!1){let o=I(t,"action"),s=`wb-row${r?" wb-row--compact":""}${o?" wb-row--action":""}`,i=h(t,"subtitle"),a=h(t,"badge"),l=I(t,"trailing"),c=[pe(ce(h(t,"icon")),r?"small":"medium","wb-row__icon"),u(rt,"span",{class:"wb-row__text"},u(rt,"span",{class:"wb-row__title"},h(t,"title")??""),!P(i)&&u(rt,"span",{class:"wb-row__subtitle"},i)),!P(a)&&u(rt,"span",{class:"wb-row__badge"},a),Gr(e,l,rt,"wb-row__trailing")];return o?u(rt,"button",{type:"button",class:s,"data-path":n,"data-wb-tap":"action"},c):u(rt,"div",{class:s,"data-path":n},c)}function Gr(e,t,n,r){if(!t)return null;let o=h(t,"type");if(o==="countdown")return u(n,"span",{class:`${r} ${r}--countdown`,...tn(t,e)},nn(t,e));let s=h(t,"value");return o==="text"&&!P(s)?u(n,"span",{class:r},s):null}function rn(e){return u(E.UnsupportedView,"div",{class:"wb-unsupported",title:`No renderer for ${e} yet`},e)}function on(e,t,n){if(!t)return null;switch(h(t,"type")){case"text":return Nl(e,t);case"stat":return Yr(e,t);case"list":return $l(e,t,n);case"status":return jl(e,t);case"progress":return zl(e,t);case"countdown":return Il(e,t);case"button":return Jl(t,n);case"toggle":return eo(t,n);case"icon":return Cl(t);case"stack":return Dl(e,t,n);case"placeholder":return Vl(t);case"error":return Bl(t);case"unsupported":return rn(h(t,"component")??"");default:return rn(h(t,"type")??"")}}var Us=E.TextView;function Nl(e,t){let n=h(t,"style")??"body",r=X(t,"maxLines")??3;if(ee(e))return u(Us,"div",{class:`wb-text wb-text--${n} wb-text--loading`},D({lines:Math.min(r,2)}));let o=Math.max(1,r);return u(Us,"div",{class:`wb-text wb-text--${n} wb-text--clamp`,style:`-webkit-line-clamp:${o}`,"data-max-lines":String(o)},h(t,"value")??"")}var je=E.StatView,Hs={up:"Up",down:"Down",flat:"Flat"};function Yr(e,t){let n=ee(e),r=h(t,"trend")??"none",o=te(e)||P(h(t,"value"))?Ce:h(t,"value"),s=h(t,"unit"),i=h(t,"label"),a=r in Hs&&!te(e)?u(je,"svg",{class:`wb-stat__trend wb-stat__trend--${r}`,viewBox:"0 0 24 24","aria-label":Hs[r]},r==="up"?u(je,"path",{d:"M12 5l7 9H5z"}):r==="down"?u(je,"path",{d:"M12 19l-7-9h14z"}):u(je,"rect",{x:"5",y:"10.5",width:"14",height:"3",rx:"1.5"})):null;return u(je,"div",{class:`wb-stat ${n?"wb-stat--loading":""}`},pe(ce(h(t,"icon")),"small","wb-stat__icon"),n?D({cls:"wb-stat__skeleton",width:"50%"}):u(je,"div",{class:"wb-stat__value-row"},a,u(je,"span",{class:"wb-stat__value"},o),!P(s)&&u(je,"span",{class:"wb-stat__unit"},s)),!P(i)&&u(je,"div",{class:"wb-stat__label"},i))}var At=E.ListView;function $l(e,t,n){let r=h(t,"header"),o=Te(t,"items"),s=X(t,"maxRows")??0,i=X(t,"totalCount")??0,a;if(ee(e)){let l=s>0&&s<3?s:3;a=Array.from({length:l},()=>u(At,"div",{class:"wb-list__placeholder"},D({shape:"circle"}),u(At,"span",{class:"wb-list__placeholder-text"},D({width:"70%"}),D({width:"45%"}))))}else if(te(e)||o.length===0){let l=h(t,"emptyText");a=u(At,"div",{class:"wb-list__empty"},P(l)?"Nothing to show":l)}else a=[o.map((l,c)=>Bn(e,l,`${n}.items[${c}]`)),i>o.length&&u(At,"div",{class:"wb-list__more"},`+${i-o.length} more`)];return u(At,"section",{class:"wb-list"},!P(r)&&u(At,"header",{class:"wb-list__header"},r),a)}var _t=E.StatusView,Qr=e=>e==="ok"?"check":e==="warn"?"warning":e==="error"?"error":"info",Kr=e=>e==="ok"?"OK":e==="warn"?"Warning":e==="error"?"Error":"Unknown";function jl(e,t){let n=h(t,"state")??"unknown",r=h(t,"label"),o=h(t,"detail");return u(_t,"div",{class:`wb-status wb-status--${n}`,"data-state":n},ee(e)?[D({shape:"circle"}),u(_t,"span",{class:"wb-status__text"},D({width:"70%"}))]:[u(_t,"span",{class:"wb-status__badge"},ue(Qr(n),"small")),u(_t,"span",{class:"wb-status__text"},u(_t,"span",{class:"wb-status__label"},P(r)?Kr(n):r),!P(o)&&u(_t,"span",{class:"wb-status__detail"},o))])}var Se=E.ProgressView;function Un(e,t,n){return n>t?Math.min(Math.max((e-t)/(n-t),0),1):0}function zl(e,t){let n=X(t,"value")??0,r=X(t,"min")??0,o=X(t,"max")??100,s=h(t,"label"),i=ee(e),a=i||te(e)?0:Un(n,r,o),l=te(e)?Ce:Pn(n,r,o),c={role:"progressbar","aria-valuenow":Ne(n),"aria-valuemin":Ne(r),"aria-valuemax":Ne(o)};return h(t,"style")==="ring"?u(Se,"div",{class:"wb-progress wb-progress--ring",...c},u(Se,"div",{class:"wb-progress__ring"},en(a),u(Se,"span",{class:"wb-progress__value"},i?D({width:"60%"}):l)),!P(s)&&u(Se,"div",{class:"wb-progress__label"},s)):u(Se,"div",{class:"wb-progress wb-progress--bar",...c},u(Se,"div",{class:"wb-progress__caption"},u(Se,"span",{class:"wb-progress__label"},s??""),u(Se,"span",{class:"wb-progress__value"},i?"":l)),u(Se,"div",{class:`wb-progress__track ${i?"wb-progress__track--loading":""}`},u(Se,"div",{class:"wb-progress__fill",style:`width:${W(a*100)}%`})))}var qr=E.CountdownView;function Il(e,t){let n=St(h(t,"target")),r=h(t,"label");return u(qr,"div",{class:`wb-countdown wb-countdown--${h(t,"format")??"relative"}`,"data-target":n===null?null:Nn(n)},ee(e)?D({width:"45%",cls:"wb-countdown__skeleton"}):u(qr,"span",{class:"wb-countdown__value",...te(e)?null:tn(t,e)},te(e)?Ce:nn(t,e)),!P(r)&&u(qr,"span",{class:"wb-countdown__label"},r))}var Ws=E.ButtonView;function Jl(e,t){let n=I(e,"action"),r=ce(h(e,"icon"));return u(Ws,"button",{type:"button",class:`wb-button wb-button--${h(e,"style")??"primary"} ${r?"wb-button--icon":""} ${n?"":"wb-button--disabled"}`,disabled:!n,"data-action":h(n,"id"),"data-wb-tap":n?"action":null,"data-path":t},pe(r,"medium","wb-button__icon"),u(Ws,"span",{class:"wb-button__label"},h(e,"label")??""))}var ot=E.ToggleView;function eo(e,t,n=!1,r=null){let o=e.on===!0,s=ce(h(e,"icon"))??(n?r:null),i=h(e,"label")??"";return u(ot,"button",{type:"button",role:"switch","aria-checked":o?"true":"false",class:`wb-toggle ${o?"wb-toggle--on":""} ${n?"wb-toggle--tile":""}`,"data-path":t,"data-wb-tap":"toggle","data-on":o?"true":"false"},s&&pe(s,"medium","wb-toggle__icon"),n?u(ot,"span",{class:"wb-toggle__text"},u(ot,"span",{class:"wb-toggle__label"},i),u(ot,"span",{class:"wb-toggle__state"},o?"On":"Off")):[u(ot,"span",{class:"wb-toggle__label"},i),u(ot,"span",{class:"wb-toggle__switch"},u(ot,"span",{class:"wb-toggle__thumb"}))])}function Cl(e){let t=h(e,"size")??"medium";return u(E.IconView,"div",{class:`wb-icon-node wb-icon-node--${t}`},pe(ce(h(e,"icon"),h(e,"imageUrl"))??{},t))}var Zr=E.StackView;function Dl(e,t,n){let r=h(t,"header");return u(Zr,"section",{class:`wb-stack wb-stack--${h(t,"direction")??"vertical"}`},!P(r)&&u(Zr,"header",{class:"wb-stack__header"},r),u(Zr,"div",{class:"wb-stack__children"},Te(t,"children").map((o,s)=>on(e,o,`${n}.children[${s}]`))))}var Xr=E.PlaceholderView;function Vl(e){let t=h(e,"component")??"",n=Math.max(1,X(e,"rows")??1),r=(s,i)=>u(Xr,"div",{class:"wb-placeholder__chip"},D({shape:"circle"}),u(Xr,"span",{class:"wb-placeholder__lines"},D({width:s}),i!==void 0&&D({width:i}))),o;switch(t){case"list":o=Array.from({length:n},()=>r("70%","45%"));break;case"button":case"toggle":case"status":o=r("60%");break;case"stat":case"countdown":o=[D({width:"50%",cls:"wb-placeholder__big"}),D({width:"35%"})];break;case"progress":o=D({shape:"circle",cls:"wb-placeholder__ring"});break;default:o=D({lines:n})}return u(Xr,"div",{class:`wb-placeholder wb-placeholder--${t}`,"data-component":t,"aria-busy":"true"},o)}var Fn=E.ErrorView;function Bl(e){let t=h(e,"source"),n=h(e,"message")??"",r=t===void 0?"Couldn't load":`Couldn't load ${t}`;return u(Fn,"div",{class:"wb-error-node",role:"alert","data-component":h(e,"component")??"","data-source":t},ue("error","small"),u(Fn,"span",{class:"wb-error-node__text"},u(Fn,"span",{class:"wb-error-node__title"},r),!P(n)&&n!==r&&u(Fn,"span",{class:"wb-error-node__message"},n)))}var Fl={shortText:7,longText:24},to=e=>`$.glances.${e}`;function Gs(e,t){let n=to(h(t,"id")??"");switch(h(t,"template")){case"text":return Be(e,t,"text",!0,u(E.TextTileView,"div",{class:"wb-text-tile"},on(e,I(t,"text"),`${n}.text`)));case"single-stat":return Be(e,t,"single-stat",!0,Yr(e,I(t,"stat")??{}));case"list3":return Ul(e,t,n);case"compact-list":return Hl(e,t,n);case"status":return Wl(e,t);case"progress-ring":return Gl(e,t);case"buttons2":return ql(e,t,n);case"toggle":return Be(e,t,"toggle",!1,eo(I(t,"toggle")??{},`${n}.toggle`,!0,ce(h(t,"icon"))));default:return rn(`${h(t,"template")??"Unknown"}Tile`)}}var Ve=E.TileFrame;function Be(e,t,n,r,...o){let s=to(h(t,"id")??""),i=h(t,"opens"),a=r&&i!==void 0,l=n==="progress-ring"?null:ce(h(t,"icon")),c=h(t,"title"),p=h(I(t,"data"),"state"),d=p==="stale"&&e.data.updatedAt!==null?Rn(e.data.updatedAt,e.now):p==="sample"?"Sample data":null,g=e.data.phase==="error"&&u(Ve,"div",{class:"wb-tile__error",role:"alert"},ue("warning","small"),"Couldn't refresh");return u(Ve,"div",{class:`wb-tile wb-tile--${n} ${a?"wb-tile--edge":""}`,"data-glance":h(t,"id"),"data-wb-tap":i===void 0?null:"open","data-path":s,role:"button"},u(Ve,"header",{class:"wb-tile__title"},l?pe(l,"medium","wb-tile__title-icon"):u(Ve,"span",{class:"wb-tile__icon-slot","aria-hidden":"true"}),!P(c)&&u(Ve,"span",{class:"wb-tile__title-text"},c)),u(Ve,"div",{class:"wb-tile__main"},g,o),!P(d)&&u(Ve,"div",{class:"wb-tile__bottom-label"},d),a&&u(Ve,"button",{type:"button",class:"wb-edge-button","data-wb-tap":"open","data-path":s},"Open"))}function Ul(e,t,n){let r=E.List3TileView,o=e.tokens.limits.tileListMaxRows??3,s=Te(t,"items"),i=s.slice(0,o),a=Math.max(X(t,"totalCount")??0,s.length)-i.length,l=h(t,"emptyText");return Be(e,t,"list3",!0,u(r,"div",{class:"wb-list3"},ee(e)?Array.from({length:o},()=>D({width:"90%"})):te(e)||i.length===0?u(r,"div",{class:"wb-list3__empty"},P(l)?"Nothing to show":l):[i.map((c,p)=>Bn(e,c,`${n}.items[${p}]`,!0)),a>0&&u(r,"div",{class:"wb-list3__more"},`+${a} more`)]))}function Hl(e,t,n){let r=E.CompactListTileView,o=e.tokens.limits,s=zr(e.device,e.tokens)?o.tileCompactListMaxRowsSmallScreen??6:o.tileCompactListMaxRows??8;e.data.phase==="error"&&s--,Cn(e.data,e.now)&&s--,s=Math.max(1,s);let i=Te(t,"items").slice(0,s),a=h(t,"emptyText");return Be(e,t,"compact-list",!1,u(r,"div",{class:"wb-compact-list"},ee(e)?Array.from({length:s},()=>u(r,"div",{class:"wb-compact-list__row"},D({width:"90%"}))):te(e)||i.length===0?u(r,"div",{class:"wb-compact-list__empty"},P(a)?"Nothing to show":a):i.map((l,c)=>u(r,"div",{class:"wb-compact-list__row","data-path":`${n}.items[${c}]`},u(r,"span",{class:"wb-compact-list__title"},h(l,"title")??""),Gr(e,I(l,"trailing"),r,"wb-compact-list__trailing")))))}function Wl(e,t){let n=E.StatusTileView,r=I(t,"status"),o=h(r,"state")??"unknown",s=h(r,"label"),i=h(r,"detail");return Be(e,t,"status",!0,u(n,"div",{class:`wb-status-tile wb-status-tile--${o}`,"data-state":o},ee(e)?[D({shape:"circle",cls:"wb-status-tile__skeleton"}),D({width:"60%"})]:[u(n,"span",{class:"wb-status-tile__badge"},ue(Qr(o),"large")),u(n,"span",{class:"wb-status-tile__label"},P(s)?Kr(o):s),!P(i)&&u(n,"span",{class:"wb-status-tile__detail"},i)]))}function Gl(e,t){let n=E.ProgressRingTileView,r=I(t,"progress"),o=X(r,"value")??0,s=X(r,"min")??0,i=X(r,"max")??100,a=h(r,"label"),l=e.device.widthDp-2*(e.tokens.spacing.xs??4),c=zn(e.device,e.tokens).tileRingStroke??8,p=l>0?50-c/2/l*100:47,d=ee(e)||te(e)?0:Un(o,s,i);return Be(e,t,"progress-ring",!0,u(n,"div",{class:"wb-progress-tile__ring"},en(d,{radius:p,stroke:"var(--wb-tile-ring-stroke)",gapPercent:h(t,"opens")===void 0?0:22})),u(n,"div",{class:"wb-progress-tile"},ee(e)?D({width:"50%",cls:"wb-progress-tile__skeleton"}):u(n,"span",{class:"wb-progress-tile__value"},te(e)?Ce:Pn(o,s,i)),!P(a)&&u(n,"span",{class:"wb-progress-tile__label"},a)))}function ql(e,t,n){let r=E.Buttons2TileView,o=Te(t,"buttons").slice(0,e.tokens.limits.tileMaxButtons??2),s=i=>i.trim()===""?"?":i.trim().slice(0,1).toUpperCase();return Be(e,t,"buttons2",!1,u(r,"div",{class:"wb-buttons2"},o.map((i,a)=>{let l=I(i,"action"),c=ce(h(i,"icon")),p=h(i,"label")??"";return u(r,"div",{class:"wb-buttons2__item"},u(r,"button",{type:"button",class:`wb-buttons2__button wb-buttons2__button--${h(i,"style")??"primary"}`,disabled:!l,"data-action":h(l,"id"),"data-wb-tap":l?"action":null,"data-path":`${n}.buttons[${a}]`,"aria-label":p},c?pe(c,"large"):u(r,"span",{class:"wb-buttons2__initial"},s(p))),u(r,"span",{class:"wb-buttons2__label"},p))})))}var Zl={shortText:"short-text",longText:"long-text",rangedValue:"ranged-value",image:"image"};function qs(e,t){let n=E.ComplicationView,r=h(t,"kind")??"shortText",o=Zl[r]??"image",s=r==="longText",i=h(t,"opens"),a=h(t,"title"),l=ce(h(t,"icon"),h(t,"imageUrl")),c=Fl[r],p=l===null&&!P(a),d=I(t,"text"),g;if(ee(e))g="\u2026";else if(te(e))g=Ce;else{let z=h(d,"type"),k=X(t,"value");g=$r(z==="text"?h(d,"value")??"":z==="countdown"?nn(d,e):r==="rangedValue"&&k!==void 0?Ne(k):"",c)}let y=d&&h(d,"type")==="countdown"&&!ee(e)&&!te(e)?tn(d,e,c):null,m=u(n,"span",{class:"wb-comp__text",...y},g),S=u(n,"span",{class:"wb-comp__title"},$r(a,c)),L=z=>l&&pe(l,z,"wb-comp__icon"),A=0,B=X(t,"value");!ee(e)&&!te(e)&&B!==void 0&&(A=Un(B,X(t,"min")??0,X(t,"max")??100));let b;switch(r){case"shortText":b=[L("small"),m,p&&S];break;case"longText":b=[L("medium"),u(n,"span",{class:"wb-comp__lines"},!P(a)&&S,m)];break;case"rangedValue":b=[u(n,"span",{class:"wb-comp__ring"},en(A,{radius:45,gapPercent:22,stroke:"var(--wb-ranged-stroke)"})),L("small"),m,p&&S];break;default:b=l&&pe(l,P(l.url)?"large":"fill")}let j=()=>!s&&u(n,"span",{class:"wb-face__placeholder"});return u(n,"div",{class:`wb-face ${e.device.isRound?"":"wb-face--square"}`},u(n,"div",{class:"wb-face__ticks"}),u(n,"div",{class:"wb-face__time"},$n(e.now,e.timeZone)),u(n,"div",{class:"wb-face__date"},Ts(e.now,e.timeZone)),u(n,"div",{class:`wb-face__slots ${s?"wb-face__slots--long":""}`},j(),u(n,"div",{class:`wb-comp wb-comp--${o} ${i===void 0?"":"wb-comp--tappable"}`,"data-glance":h(t,"id"),"data-kind":o,"data-wb-tap":i===void 0?null:"open","data-path":to(h(t,"id")??""),role:"button"},b),j()))}function Xl(e){let t=h(e,"main"),n=Te(e,"screens"),o=[...n.filter(a=>h(a,"id")===t),...n.filter(a=>h(a,"id")!==t)].map(a=>({key:`page:${h(a,"id")}`,label:h(a,"id")??"",kind:"screen",node:a})),s=I(e,"tile"),i=I(e,"complication");return s&&o.push({key:"tile",label:"Tile",kind:"glance",node:s}),i&&o.push({key:"complication",label:"Complication",kind:"glance",node:i}),o}function Yl(e,t){let n=Te(e,"screens"),r=[I(e,"tile"),I(e,"complication")].filter(p=>p!==void 0),o=p=>n.find(d=>h(d,"id")===p),s=p=>r.find(d=>h(d,"id")===p),i=t.screen!==void 0?`screen:${t.screen}`:t.surface??`page:${h(e,"main")}`,[a,l]=i.includes(":")?[i.slice(0,i.indexOf(":")),i.slice(i.indexOf(":")+1)]:[i,void 0],c=a==="page"||a==="screen"?o(l)&&{kind:"screen",node:o(l)}:a==="glance"?s(l)&&{kind:"glance",node:s(l)}:a==="tile"||a==="complication"?I(e,a)&&{kind:"glance",node:I(e,a)}:void 0;return c||(n[0]?{kind:"screen",node:n[0]}:r[0]?{kind:"glance",node:r[0]}:null)}var no=E.WatchPreview;function oo(e,t){let n=jn(t.deviceProfile),r=t.ambient===!0,o=Yl(e,t),i=o!==null&&o.kind==="glance"&&h(o.node,"template")!==void 0?Es(t.theme??Tt(),n):t.theme??Tt(),a=o?Fr(I(o.node,"data"),o.kind==="glance"):Fr(void 0,!1),l={device:n,theme:i,tokens:le,ambient:r,data:a,now:t.now??Date.now(),timeZone:t.timeZone??h(e,"timeZone")??"UTC",newId:$s(t.idPrefix??"wbp")},c=[o===null?u(null,"div",{class:"wb-empty"},"Nothing to show"):o.kind==="screen"?Ql(l,o.node):h(o.node,"kind")!==void 0&&h(o.node,"template")===void 0?qs(l,o.node):Gs(l,o.node),t.feedback&&Kl(t.feedback),t.confirm&&ec(t.confirm)],p=u(no,"div",{class:"wb-screen"},c),d=n.isRound?n.id.includes("classic")?"wb-case--classic":"":"wb-case--square";return u(no,"div",{class:`wb-preview ${r?"wb-ambient":""} wb-tone-${i.tone} wb-shape-${n.isRound?"round":"square"} wb-platform-${n.platform}`,style:`zoom:${W(t.scale??1)};${Ms(n,i,r)}`,"data-device":n.id,"data-data-phase":a.phase},t.frame===!1?p:u(no,"div",{class:`wb-case ${d}`},p))}var Ae=E.ScreenView;function Ql(e,t){let n=h(t,"id")??"",r=e.data.phase==="error",o=W(e.device.widthDp),s=Vn(e,$n(e.now,e.timeZone),"wb-time-text"),i=e.data.errorMessage,a=u(Ae,"div",{class:"wb-scroll"},u(Ae,"div",{class:"wb-content"},r&&u(Ae,"div",{class:"wb-data-error",role:"alert"},ue("warning","small"),u(Ae,"span",{class:"wb-data-error__text"},u(Ae,"span",{class:"wb-data-error__title"},"Couldn't refresh"),!P(i)&&u(Ae,"span",{class:"wb-data-error__detail"},i))),on(e,I(t,"root"),`$.screens.${n}.root`))),l=Jn(e.device,0,.7,e.tokens),c=u(Ae,"svg",{class:"wb-position-indicator",viewBox:`0 0 ${o} ${o}`,"aria-hidden":"true",style:`stroke-width:${W(l.width)}px`},u(Ae,"path",{class:"wb-position-indicator__track",d:l.track}),u(Ae,"path",{class:"wb-position-indicator__thumb",d:l.thumb})),p=e.data.updatedAt,d=h(I(t,"data"),"state")==="sample",g=p!==null&&Cn(e.data,e.now)?Vn(e,Rn(p,e.now),"wb-stale-hint",!0):d?Vn(e,"Sample data","wb-stale-hint",!0):null;return u(Ae,"div",{class:`wb-screen-view ${e.device.isRound?"wb-screen-view--round":"wb-screen-view--square"} ${r?"wb-screen-view--error":""}`,"data-screen":n},s,a,c,g)}var ro=E.FeedbackOverlay;function Kl(e){let t=e.sequence??0,n=e.success,r=[u(ro,"div",{"data-wb-key":`haptic-${t}`,class:`wb-haptic ${n?"wb-haptic--ok":"wb-haptic--error"}`,"aria-hidden":"true"})];return e.toast!==!1&&r.push(u(ro,"div",{"data-wb-key":`toast-${t}`,class:`wb-toast ${n?"wb-toast--ok":"wb-toast--error"}`,role:"status"},ue(n?"check":"error","small"),u(ro,"span",{class:"wb-toast__text"},e.message??(n?"Done":"Failed")))),r}var sn=E.ConfirmOverlay;function ec(e){return u(sn,"div",{class:"wb-confirm",role:"alertdialog","aria-label":e.prompt},!P(e.icon)&&ue(e.icon,"medium","wb-confirm__icon"),u(sn,"div",{class:"wb-confirm__prompt"},e.prompt),u(sn,"div",{class:"wb-confirm__buttons"},u(sn,"button",{type:"button",class:"wb-confirm__cancel","aria-label":"Cancel","data-wb-tap":"cancel"},ue("close")),u(sn,"button",{type:"button",class:"wb-confirm__ok","aria-label":"Confirm","data-wb-tap":"confirm"},ue("check"))))}var Hn=E.WatchOverview;function Zs(e,t){let n=`${t.idPrefix??"wbp"}-ov`,{confirm:r,feedback:o,screen:s,...i}=t;return u(Hn,"div",{class:"wb-overview","data-wb-overview":!0},Xl(e).map((a,l)=>u(Hn,"figure",{class:"wb-overview__item","data-wb-surface":a.key,"data-wb-key":`overview-${a.key}`},u(Hn,"div",{class:"wb-overview__watch"},oo(e,{...i,surface:a.key,idPrefix:`${n}-${l}`})),u(Hn,"figcaption",{class:"wb-overview__label"},a.label))))}var tc=[":scope > .wb-stack--vertical > .wb-stack__header",":scope > .wb-stack--vertical > .wb-stack__children > :not(.wb-list)",":scope > .wb-stack--vertical > .wb-stack__children > .wb-list > *",":scope > .wb-list > *",":scope > :not(.wb-stack--vertical):not(.wb-list):not(.wb-data-error)"].join(",");function nc(e){if(e<=0)return 0;if(e>=1)return 1;let t=(o,s,i)=>3*s*o*(1-o)**2+3*i*o*o*(1-o)+o**3,n=0,r=1;for(let o=0;o<30;o++){let s=(n+r)/2;t(s,.3,.7)<e?n=s:r=s}return t((n+r)/2,0,1)}var Wn=(e,t,n)=>e+(t-e)*n,so=e=>Math.min(Math.max(e,0),1);function rc(e,t,n,r){let o=m=>le.effects[m]??0,s=so((e.widthDp-o("edgeSpecSmallScreenWidth"))/(o("edgeSpecLargeScreenWidth")-o("edgeSpecSmallScreenWidth"))),i=m=>Wn(o(`${m}Small`),o(`${m}Large`),s),a=t/r,l=n/r,c=l-a,p=i("edgeMinElementHeight"),d=i("edgeMaxElementHeight"),g=so((c-p)/(d-p)),y=Math.min(Wn(i("edgeMinTransitionArea"),i("edgeMaxTransitionArea"),g),(1+c)/2);return so(l<1-a?l/y:(1-a)/y)}function ao(e,t){for(let r of e.querySelectorAll(".wb-screen-view .wb-scroll"))Xs(r,t);let n=e.ownerDocument.fonts;n&&n.status!=="loaded"&&n.ready.then(()=>{e.isConnected&&ao(e,t)})}function Xs(e,t){let n=e.firstElementChild;if(!n)return;e.dataset.wbWear||(e.dataset.wbWear="1",e.addEventListener("scroll",()=>Xs(e,t),{passive:!0}));let r=[...n.querySelectorAll(tc)];for(let k of r)k.style.removeProperty("scale"),k.style.removeProperty("opacity"),k.style.removeProperty("margin-bottom"),k.style.removeProperty("transform-origin");let o=e.clientHeight;if(o<=0||r.length===0)return io(e,t,0,0);let s=t.density,i=e.getBoundingClientRect(),a=i.height/o||1,l=r.map(k=>(k.getBoundingClientRect().top-i.top)/a),c=r.map(k=>k.getBoundingClientRect().height/a),p=n.scrollHeight<=o+.5,d=l.map((k,v)=>v===0?0:k-(l[v-1]+c[v-1])),g=Ir(t,0).scale,y=le.effects.edgeAlpha??.5,m=r.map(()=>1),S=m,L=l;for(let k=0;k<3;k++){let v=c.map((N,K)=>N-Math.ceil(N*S[K]*s)/s),J=l[0]+(p?v.reduce((N,K)=>N+K,0)/2:0);L=c.map((N,K)=>{J+=d[K];let Sr=J;return J+=N-v[K],Sr}),m=c.map((N,K)=>nc(rc(t,L[K]-d[K],L[K]+N,o))),S=m.map(N=>Wn(g,1,N))}r.forEach((k,v)=>{let J=S[v];if(m[v]>=1)return;let N=c[v];k.style.setProperty("margin-bottom",`${-(N-Math.ceil(N*J*s)/s)}px`),!k.matches(".wb-row:not(.wb-row--action)")&&(k.style.setProperty("scale",String(J)),k.style.setProperty("transform-origin","50% 0"),k.style.setProperty("opacity",String(Wn(y,1,m[v]))))});let A=-1,B=0;L.forEach((k,v)=>{let J=c[v]*S[v],N=k+J;N<=0||k>=o||(A<0&&(A=v+(k<0?-k/J:0)),B=v+(N>o?(o-k)/J:1))});let b=r.length;if(e.scrollHeight<=o)return io(e,t,0,0);let j=A<0?0:Math.min(Math.max((B-A)/b,.3),.7),z=A+(b-B);io(e,t,A<0||z<=0?0:A/z*(1-j),j)}function io(e,t,n,r){let o=e.parentElement?.querySelector(".wb-position-indicator");if(!o)return;o.style.display=r>0?"":"none";let s=Jn(t,n,r);o.querySelector(".wb-position-indicator__track")?.setAttribute("d",s.track),o.querySelector(".wb-position-indicator__thumb")?.setAttribute("d",s.thumb)}function oc(e,t){return[t.surface==="overview"&&t.screen===void 0?Zs(e,t):oo(e,t)]}function Ys(e,t,n){Bs(e,oc(t,n)),ao(e,jn(n.deviceProfile))}var lo=new DataView(new ArrayBuffer(8)),Gn=[1n];function sc(e){for(let t=Gn.length;t<=e;t++)Gn.push(Gn[t-1]*5n);return Gn[e]}function Qs(e){lo.setFloat64(0,e);let t=lo.getUint32(0),n=lo.getUint32(4),r=t>>>20&2047,o=BigInt(t&1048575)<<32n|BigInt(n);return r===0?r++:o|=1n<<52n,r-=1075,o===0n?{digits:"",exp:0}:r>=0?an((o<<BigInt(r)).toString(),0):an((o*sc(-r)).toString(),r)}function an(e,t){let n=0;for(;n<e.length&&e.charCodeAt(n)===48;)n++;let r=e.length;for(;r>n&&e.charCodeAt(r-1)===48;)r--,t++;return{digits:e.slice(n,r),exp:n===r?0:t}}function Ks(e){let t=e.length-1;for(;t>=0&&e.charCodeAt(t)===57;)t--;return t<0?"1"+"0".repeat(e.length):e.slice(0,t)+String.fromCharCode(e.charCodeAt(t)+1)+"0".repeat(e.length-t-1)}function ei(e,t){let n=-t-e.exp;if(n<=0)return e;if(n>e.digits.length)return{digits:"",exp:0};let r=e.digits.slice(0,e.digits.length-n),o=e.digits.charCodeAt(e.digits.length-n)>=53;return an(o?Ks(r||"0"):r,-t)}function ic(e,t){let n=e.digits.length-t;if(n<=0)return e;let r=e.digits.slice(0,t),o=e.digits.charCodeAt(t),s=o>53;if(o===53){let i=!1;for(let a=t+1;a<e.digits.length&&!i;a++)i=e.digits.charCodeAt(a)!==48;s=i||(r.charCodeAt(r.length-1)&1)===1}return an(s?Ks(r):r,e.exp+n)}function ti(e,t){if(e.digits==="")return["0","0".repeat(t)];let n,r;if(e.exp>=0)n=e.digits+"0".repeat(e.exp),r="";else{let o=e.digits.length+e.exp;n=o>0?e.digits.slice(0,o):"0",r=o>=0?e.digits.slice(o):"0".repeat(-o)+e.digits}return[n,r.length<t?r+"0".repeat(t-r.length):r]}function ac(e){if(e.length<=3)return e;let t=e.length%3,n=t>0?e.slice(0,t):"";for(let r=t;r<e.length;r+=3)n+=(n.length>0?",":"")+e.slice(r,r+3);return n}function ln(e,t,n,r,o){if(!Number.isFinite(e))return"";let s=Qs(e),i=ei(s.digits===""?s:{digits:s.digits,exp:s.exp+o},t),[a,l]=ti(i,t),c=l;if(r){let d=c.length;for(;d>0&&c.charCodeAt(d-1)===48;)d--;c=c.slice(0,d)}return(e<0&&i.digits!==""?"-":"")+(n?ac(a):a)+(c.length>0?"."+c:"")}var lc=(e,t)=>ln(e,t,!0,!1,0),cc=(e,t)=>ln(e,t,!1,!1,0),pc=(e,t)=>ln(e,t,!0,!1,2)+" %",ni=e=>ln(e,2,!0,!0,0),uc=(e,t)=>ln(e,t,!1,!0,0),dc=[[1,""],[1e3,"k"],[1e6,"M"],[1e9,"B"]];function ri(e){for(let[t,n]of dc){let r=po(Math.abs(e)/t,1);if(r<1e3||n==="B")return uc(Math.sign(e)*r,1)+n}return""}var oi=/^[NFP](?:10|[0-9])$/;function si(e,t){if(!oi.test(t))return null;let n=Number(t.slice(1));return t[0]==="N"?lc(e,n):t[0]==="F"?cc(e,n):pc(e,n)}function co(e){return e===null||e==="compact"||oi.test(e)}var fc=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13,1e14,1e15];function po(e,t){if(Math.abs(e)>=1e16)return e;let n=fc[t];return hc(e*n)/n}function hc(e){let t=Math.trunc(e),n=e-t;return Math.abs(n)>=.5?t+Math.sign(n):t}var mc=9223372036854776e3;function ii(e){if(!Number.isFinite(e))return"";if(Number.isInteger(e)&&Math.abs(e)<mc)return e===0?"0":BigInt(e).toString();let t=ei(ic(gc(e),15),10),[n,r]=ti(t,0);return(e<0?"-":"")+n+(r.length>0?"."+r:"")}function gc(e){let t=String(Math.abs(e)),n=t.indexOf("e"),r=n<0?t:t.slice(0,n),o=r.indexOf("."),s=o<0?r:r.slice(0,o)+r.slice(o+1),i=(n<0?0:Number(t.slice(n+1)))-(o<0?0:r.length-o-1),a=an(s,i);return a.digits.length<=15?a:Qs(e)}var ze=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function ho(e,t){return Object.hasOwn(e,t)?e[t]:null}function li(e,t,n){t==="__proto__"?Object.defineProperty(e,t,{value:n,enumerable:!0,writable:!0,configurable:!0}):e[t]=n}var bc=/^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?$/,wc=/^[+-]?(?:\d[\d,]*\.?\d*|\.\d+)(?:[eE][+-]?\d+)?$/,yc=/^[\t\n\v\f\r ]+|[\t\n\v\f\r ]+$/g,vc=/\0+$/;function Ot(e,t=!1){let n=e.replace(vc,"").replace(yc,"");if(!(t?wc:bc).test(n))return null;let r=Number(t?n.replaceAll(",",""):n);return Number.isFinite(r)?r:null}function Z(e){return typeof e=="number"?Number.isFinite(e)?e:null:typeof e=="string"?Ot(e):null}function me(e){return Number.isFinite(e)?e===0?0:e:null}function ci(e){if(typeof e=="boolean")return e;if(typeof e=="number")return Number.isFinite(e)?e!==0:null;if(typeof e=="string")switch(F(e).toLowerCase()){case"true":case"on":case"yes":case"1":return!0;case"false":case"off":case"no":case"0":return!1}return null}function _e(e){if(e===null||e===!1)return!1;switch(typeof e){case"string":return e.length>0;case"number":return Number.isFinite(e)&&e!==0;case"boolean":return!0}if(Array.isArray(e))return e.length>0;for(let t in e)if(Object.hasOwn(e,t))return!0;return!1}function Zn(e){return e===null?!0:typeof e=="string"||Array.isArray(e)?e.length===0:ze(e)&&!_e(e)}function Xn(e,t){if(typeof e=="number"||typeof t=="number"){let n=Z(e),r=Z(t);if(n!==null&&r!==null)return n===r}return qn(e,t)}function qn(e,t){if(e===t)return!0;if(e===null||t===null||typeof e!="object"||typeof t!="object")return!1;if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(!qn(e[r],t[r]))return!1;return!0}if(Array.isArray(t))return!1;let n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(let r of n)if(!Object.hasOwn(t,r)||!qn(e[r],t[r]))return!1;return!0}function mo(e,t){let n=Z(e),r=Z(t);return n!==null&&r!==null?n<r?-1:n>r?1:0:typeof e=="string"&&typeof t=="string"?e<t?-1:e>t?1:0:null}function C(e){if(e===null)return"";switch(typeof e){case"string":return e;case"number":return ii(e);case"boolean":return e?"true":"false"}if(Array.isArray(e)){let t="";for(let n=0;n<e.length;n++)t+=(n>0?", ":"")+C(e[n]);return t}return fo(e)}var xc=/[\p{Cc}\p{Co}\p{Cn}\p{Zl}\p{Zp}\uFEFF"\\\p{Cs}]|(?! )\p{Zs}|[\u{10000}-\u{10FFFF}]/gu,kc={'"':'\\"',"\\":"\\\\","\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r"},uo=e=>"\\u"+e.toString(16).toUpperCase().padStart(4,"0");function ai(e){return'"'+e.replace(xc,t=>kc[t]??(t.length===1?uo(t.charCodeAt(0)):uo(t.charCodeAt(0))+uo(t.charCodeAt(1))))+'"'}function fo(e){if(e===null)return"null";switch(typeof e){case"string":return ai(e);case"number":return Number.isFinite(e)?JSON.stringify(e):"null";case"boolean":return e?"true":"false"}if(Array.isArray(e))return"["+e.map(fo).join(",")+"]";let t="";for(let n of Object.keys(e))t+=(t?",":"")+ai(n)+":"+fo(e[n]);return"{"+t+"}"}function st(e,t,n){if(typeof e=="string")return bs(e,t,n);if(typeof e!="number"||!Number.isFinite(e)||e<=0)return null;let r=e<253402300799?e*1e3:e;return r>=253402300799e3?null:Math.trunc(r)}var pi=["ok","warn","error","unknown"],go=new Map;for(let[e,t]of[["ok","ok okay success succeeded successful passed pass green up healthy online on true done complete completed good fine operational"],["warn","warn warning yellow amber orange degraded pending running in_progress in-progress queued waiting slow delayed partial unstable"],["error","error err fail failed failure red down unhealthy offline off false critical broken outage cancelled canceled"],["unknown","unknown"]])for(let n of t.split(" "))go.set(n,e);function Sc(e){let t=go.get(e);if(t)return t;let n=et(e),r=go.get(n);return r&&Or(e,n)?r:void 0}function Ac(e,t,n){if(e.op==="*"||e.operands.length===1&&e.operands[0]==="*")return e.op!=="!=";if(e.op==="="||e.op==="!="){let s=e.operands.some(i=>Or(i,n));return e.op==="="?s:!s}let r=Z(t),o=Ot(e.operands[0]);if(r===null||o===null)return!1;switch(e.op){case"<":return r<o;case"<=":return r<=o;case">":return r>o;case">=":return r>=o}return!1}var Yn=new Map;function ui(e){let t=Yn.get(e);if(t!==void 0)return t;let n=_c(e);return Yn.size>512&&Yn.clear(),Yn.set(e,n),n}function _c(e){let t=[];for(let n of e.split(",").map(F).filter(r=>r.length>0)){let r=n.search(/[=<>!]/),o=et(F(r<0?n:n.slice(0,r)));if(!pi.includes(o))return`"${n}" must start with a state (${pi.join(", ")}), e.g. status:ok=green,warn=yellow.`;if(r<0){t.push({state:o,op:"*",operands:[]});continue}let s=n.slice(r),i=s.startsWith("<=")||s.startsWith(">=")||s.startsWith("!=")?s.slice(0,2):s.slice(0,1);if(i==="!")return`"${n}": use != for "not equal".`;let a=F(s.slice(i.length));if((i==="<"||i==="<="||i===">"||i===">=")&&Ot(a)===null)return`"${n}": ${i} needs a number, e.g. warn<20.`;if(a.length===0)return`"${n}" needs a value after ${i}, e.g. ok=green.`;t.push({state:o,op:i,operands:a.split("/").map(F)})}return t}function Qn(e,t){let n=F(C(e));if(t!==null){let r=ui(t);if(typeof r!="string"){for(let o of r)if(Ac(o,e,n))return o.state}}return Sc(n)??"unknown"}function di(e){if(e===null)return null;let t=ui(e);return typeof t=="string"?t:null}var cn=e=>e===void 0?null:e;var bo=e=>Z(cn(e)),fi=e=>ci(cn(e)),hi=(e,t,n)=>st(cn(e),t,n),Oc=e=>C(cn(e)),mi=e=>et(F(Oc(e))),gi=e=>Qn(cn(e),null);var bi=15*6e4,Rd=15*6e4;var wo=new Map([["iso","yyyy-MM-dd"],["short","d MMM"],["long","d MMMM yyyy"],["weekday","ddd"],["day","dddd"],["datetime","d MMM HH:mm"],["clock","HH:mm"],["seconds","HH:mm:ss"]]);function yo(e){return typeof e!="string"||Z(e)!==null?e:Ot(e,!0)??e}var Ec=/^[0-9]+$/,wi=(e,t,n)=>Ec.test(e)&&Number(e)>=t&&Number(e)<=n,yi=e=>t=>t===null?`needs an argument, e.g. ${e}.`:null;function Mc(e,t){let n=Z(yo(e));return n===null||!co(t)?null:t===null||t===""?ni(n):t==="compact"?ri(n):si(n,t)}function Lc(e,t){let n=Z(yo(e));return n===null?null:me(po(n,t===null?0:Number(t)))}function vi(e,t,n,r){let o=st(e,n.relativeTo,n.zone);if(o===null)return null;let s=t===null?r:wo.get(t)??t;return Rr(s)?hs(o,n.zone,s):null}function xi(e){return e===null||wo.has(e)||Rr(e)?null:`"${e}" is not a supported date format. Use a pattern from the tokens yyyy yy MMMM MMM MM M dddd ddd dd d HH H hh h mm m ss s tt (with 'quoted' literals), such as 'HH:mm' or 'd MMM', or one of: ${[...wo.keys()].join(", ")}.`}var Kn=new Map;function ki(e){if(e===null||F(e).length===0)return null;let t=Kn.get(e);return t!==void 0||(t=Rc(e),Kn.size>512&&Kn.clear(),Kn.set(e,t)),t}function Rc(e){let t=[],n="",r="",o=!1;for(let s=0;s<=e.length;s++){if(s===e.length||e[s]===","){if(!o)return null;t.push([F(n),F(r)]),n=r="",o=!1;continue}let i=e[s],a=e[s+1];if(i==="\\"&&(a==="="||a===","||a==="\\")){o?r+=a:n+=a,s++;continue}if(i==="="&&!o){o=!0;continue}o?r+=i:n+=i}return t}function Pc(e,t){let n=ki(t);if(n===null)return null;let r=C(e),o=null;for(let[s,i]of n){if(s==="*"){o??(o=i);continue}if(e!==null&&s===r)return i}return o}function Nc(e,t){let n=Number(t);return Array.isArray(e)?e.slice(0,n):typeof e=="string"?as(e,n):e}var er=new Map([["default",{apply:(e,t)=>Zn(e)?t??"":e}],["upper",{apply:e=>e===null?null:kn(C(e))}],["lower",{apply:e=>e===null?null:et(C(e))}],["prefix",{apply:(e,t)=>Zn(e)?e:t+C(e),validate:yi("prefix:'text '")}],["suffix",{apply:(e,t)=>Zn(e)?e:C(e)+t,validate:yi("suffix:' km'")}],["number",{apply:Mc,validate:e=>co(e)?null:`"${e}" is not a supported number format. Use number (default), number:compact, number:N0\u2013N10, number:F0\u2013F10 or number:P0\u2013P10.`}],["round",{apply:Lc,validate:e=>e===null||wi(e,0,10)?null:"round takes a number of decimals from 0 to 10, e.g. round:1."}],["date",{apply:(e,t,n)=>vi(e,t,n,"yyyy-MM-dd"),validate:xi}],["time",{apply:(e,t,n)=>vi(e,t,n,"HH:mm"),validate:xi}],["relative",{apply:(e,t,n)=>{let r=st(e,n.relativeTo,n.zone);return r===null?null:ys(r,n.now,t==="compact"||t==="short")},validate:e=>e===null||e==="compact"||e==="short"?null:'relative takes no argument, or "compact" (e.g. "5 min" instead of "in 5 min").'}],["take",{apply:Nc,validate:e=>e!==null&&wi(e,0,1e3)?null:"take needs a count, e.g. take:3."}],["status",{apply:(e,t)=>Qn(yo(e),t),validate:di}],["lookup",{apply:Pc,validate:e=>(ki(e)?.length??0)>0?null:"lookup needs rules such as lookup:METRO=train,BUS=bus,*=train (write a literal = or , as \\= or \\,)."}]]);var $c=1e4;function U(e,t){switch(e.kind){case"literal":return e.value;case"path":return zc(e.segments,t);case"postfix":return Ai(U(e.target,t),e.segments,0);case"array":{let n=new Array(e.items.length);for(let r=0;r<e.items.length;r++)n[r]=U(e.items[r],t);return n}case"unary":{let n=U(e.operand,t);if(e.op==="not")return!_e(n);let r=Z(n);return r===null?null:me(-r)}case"ternary":return _e(U(e.condition,t))?U(e.then,t):U(e.otherwise,t);case"binary":return jc(e.op,e.left,e.right,t);case"pipeline":{let n=U(e.input,t);for(let r of e.filters)n=Ic(r,n,t);return n}}}function jc(e,t,n,r){switch(e){case"and":{let l=U(t,r);return _e(l)?U(n,r):l}case"or":{let l=U(t,r);return _e(l)?l:U(n,r)}case"??":return U(t,r)??U(n,r)}let o=U(t,r),s=U(n,r);switch(e){case"~":return C(o)+C(s);case"==":return Xn(o,s);case"!=":return!Xn(o,s);case"<":case"<=":case">":case">=":{let l=mo(o,s);return l===null?null:e==="<"?l<0:e==="<="?l<=0:e===">"?l>0:l>=0}case"in":return Ti(o,s);case"not in":return!Ti(o,s)}let i=Z(o),a=Z(s);if(i===null||a===null)return null;switch(e){case"+":return me(i+a);case"-":return me(i-a);case"*":return me(i*a);case"/":return a===0?null:me(i/a);case"%":return a===0?null:me(i%a)}return null}function Ti(e,t){if(Array.isArray(t)){for(let n of t)if(Xn(e,n))return!0;return!1}return ze(t)?Object.hasOwn(t,C(e)):typeof t=="string"?t.includes(C(e)):!1}function zc(e,t){let n=e[0];if(typeof n!="string")return null;let r;switch(n){case"$root":r=t.root;break;case"$item":r=t.item??null;break;case"$index":return t.index!==void 0&&e.length===1?t.index:null;case"$now":return e.length===1?Gt(t.now):null;case"$secret":{let o=e[1];return e.length!==2||typeof o!="string"||t.secrets===void 0?null:t.secrets(o)??null}default:if(n.charCodeAt(0)===36){let o=n.slice(1);r=o==="params"&&t.params!==void 0?t.params:t.vars!==void 0&&Object.hasOwn(t.vars,o)?t.vars[o]:null}else if(t.item!==void 0&&ze(t.item)&&Object.hasOwn(t.item,n))r=t.item[n];else if(ze(t.root))r=ho(t.root,n);else return null}return Ai(r,e,1)}function Ai(e,t,n){for(let r=n;r<t.length&&e!==null;r++){let o=t[r];if(typeof o=="string")e=ze(e)?ho(e,o):null;else if(Array.isArray(e)){let s=o.index<0?e.length+o.index:o.index;e=s>=0&&s<e.length?e[s]:null}else e=null}return e}function Ic(e,t,n){try{let r=er.get(e.name);if(r)return r.apply(t,e.argument,n);switch(e.name){case"where":{if(!Array.isArray(t))return null;let o=[];return tr(e,t,n,(s,i)=>{_e(i)&&o.push(s)})?o:null}case"map":{if(!Array.isArray(t))return null;let o=[];return tr(e,t,n,(s,i)=>{o.push(i)})?o:null}case"find":return Array.isArray(t)?Jc(e,t,n):null;case"sortBy":return Array.isArray(t)?Cc(e,t,n):null;case"indexBy":return Array.isArray(t)?Vc(e,t,n):null;case"count":return Bc(e,t,n);case"sum":return Fc(e,t,n);case"first":return Array.isArray(t)&&t.length>0?t[0]:null;case"last":return Array.isArray(t)&&t.length>0?t[t.length-1]:null;case"join":{if(!Array.isArray(t))return null;let o=e.args.length>0?C(U(e.args[0],n)):", ",s="";for(let i=0;i<t.length;i++)s+=(i>0?o:"")+C(t[i]);return s}case"toNumber":{let o=Z(t);return o===null?null:me(o)}case"toText":return C(t);case"toTime":{let o=st(t,n.relativeTo,n.zone);return o===null?null:Gt(o)}}return t}catch{return null}}function _i(e){return e.lambdaLimitHit?!1:++e.lambdaEvaluations<=$c?!0:(e.lambdaLimitHit=!0,!1)}function tr(e,t,n,r){let o=e.args[0],s=n.item,i=n.index;try{for(let a=0;a<t.length;a++){if(!_i(n))return!1;let l=t[a];n.item=l,n.index=a;let c=U(o,n);n.item=s,n.index=i,r(l,c)}}finally{n.item=s,n.index=i}return!n.lambdaLimitHit}function vo(e,t,n){let r=[];return tr(e,t,n,(o,s)=>{r.push(s)})?r:null}function Jc(e,t,n){let r=null,o=!1,s=e.args[0],i=n.item,a=n.index;try{for(let l=0;l<t.length&&!o;l++){if(!_i(n))return null;n.item=t[l],n.index=l,_e(U(s,n))&&(r=t[l],o=!0)}}finally{n.item=i,n.index=a}return r}function Cc(e,t,n){let r=vo(e,t,n);if(r===null)return null;let o=e.args.length>1&&C(U(e.args[1],n))==="desc",s=t.map((i,a)=>a);return s.sort((i,a)=>Dc(r[i],r[a],o)||i-a),s.map(i=>t[i])}function Dc(e,t,n){if(e===null||t===null)return e===null?t===null?0:1:-1;let r=mo(e,t);return r===null&&(r=Si(e)-Si(t),r===0&&typeof e=="boolean"&&typeof t=="boolean"?r=e===t?0:e?1:-1:r=Math.sign(r)),n?-r:r}var Si=e=>typeof e=="number"?0:typeof e=="string"?1:typeof e=="boolean"?2:3;function Vc(e,t,n){let r=vo(e,t,n);if(r===null)return null;let o={};for(let s=0;s<t.length;s++){let i=C(r[s]);Object.hasOwn(o,i)||li(o,i,t[s])}return o}function Bc(e,t,n){if(Array.isArray(t)){if(e.args.length===0)return t.length;let r=0;return tr(e,t,n,(o,s)=>{_e(s)&&r++})?r:null}return ze(t)?Object.keys(t).length:typeof t=="string"?is(t):null}function Fc(e,t,n){if(!Array.isArray(t))return null;let r=e.args.length>0?vo(e,t,n):t;if(r===null||n.lambdaLimitHit)return null;let o=0;for(let s of r){let i=Z(s);i!==null&&(o+=i)}return me(o)}var ge=e=>({kind:"text",optional:e}),Oi=e=>({kind:"expr",optional:e}),it=e=>({kind:"lambda",optional:e}),Ei={number:[ge(!0)],date:[ge(!0)],time:[ge(!0)],relative:[ge(!0)],upper:[],lower:[],default:[ge(!0)],take:[ge(!1)],status:[ge(!0)],round:[ge(!0)],prefix:[ge(!1)],suffix:[ge(!1)],lookup:[ge(!1)],where:[it(!1)],map:[it(!1)],sortBy:[it(!1),Oi(!0)],find:[it(!1)],count:[it(!0)],sum:[it(!0)],indexBy:[it(!1)],first:[],last:[],join:[Oi(!0)],toNumber:[],toText:[],toTime:[]},nr=new Map(Object.entries(Ei).map(([e,t])=>[e,{name:e,args:t,isText:t.length===0||t[0].kind==="text",requiredCount:t.filter(n=>!n.optional).length}])),Mi=Object.keys(Ei);var Li=4096,Ri=32,Pi=64;var xo=e=>e==="_"||e==="$"||e!==""&&yt(e),ko=e=>e==="_"||e==="$"||e==="-"||e!==""&&os(e);var at=(e,t,n)=>e.startsWith(n,t);function ji(e){if(e.length>Li)return{template:null,errors:[{position:0,kind:"tooLong",length:e.length,message:`The template is ${e.length} characters long; the limit is ${Li}.`}]};let t=[],n=[],r="",o=0;for(;o<e.length;){if(e[o]==="\\"&&at(e,o+1,"{{")){r+="{{",o+=3;continue}if(!at(e,o,"{{")){let c=o+1;for(;c<e.length&&e[c]!=="{"&&e[c]!=="\\";)c++;r+=e.slice(o,c),o=c;continue}r.length>0&&(t.push(r),r="");let a=new To(e,o+2,n),l=a.parseExpression();if(l&&t.push(l),a.unclosed)break;o=a.pos}if(r.length>0&&t.push(r),n.length>0)return n.sort((a,l)=>a.position-l.position),{template:null,errors:n};let s=null,i=0;for(let a of t){if(typeof a=="string"){Ke(a)||(i=2);continue}i++,s=a.expr}return{template:{source:e,parts:t,single:i===1?s:null},errors:[]}}var Ni={failed:!0},To=class{constructor(t,n,r){$(this,"text");$(this,"errors");$(this,"open");$(this,"pos");$(this,"unclosed",!1);$(this,"depth",0);$(this,"parens",0);$(this,"filterCalls",0);$(this,"hasFailed",!1);this.text=t,this.errors=r,this.open=n-2,this.pos=n}parseExpression(){this.skipSpace();let t=this.pos;if(this.atEnd())return this.unclosedAt();if(this.atClose())return this.error(this.open,"syntax","Empty expression: put a data path inside {{ }}, e.g. {{ source.field }}.",4),this.pos+=2,null;let n;try{if(n=this.parsePipeline(),this.skipSpace(),this.atEnd())return this.unclosedAt();this.atClose()||this.fail(this.pos,this.peek()==="}"?`Expected "}}" to close the expression at position ${this.pos}.`:`Unexpected "${this.peek()}" at position ${this.pos}: expected "|" followed by a filter, or "}}".`)}catch(o){if(o!==Ni)throw o;return this.recover(),null}let r=F(this.text.slice(t,this.pos));return this.pos+=2,{expr:n,text:r,position:t}}parsePipeline(){this.enter();let t=this.parseExpr(),n=[];for(;this.skipSpace(),this.peek()==="|";)this.pos++,n.push(this.parseFilter());return this.leave(),n.length===0?t:{kind:"pipeline",input:t,filters:n,position:t.position}}parseExpr(){this.enter();let t=this.parseCoalesce();if(this.skipSpace(),this.peek()==="?"&&this.peekAt(1)!=="?"){this.pos++;let n=this.parseExpr();this.skipSpace(),this.peek()!==":"&&this.fail(this.pos,`Expected ":" at position ${this.pos} to complete "condition ? a : b".`),this.pos++;let r=this.parseExpr();t={kind:"ternary",condition:t,then:n,otherwise:r,position:t.position}}return this.leave(),t}parseCoalesce(){let t=this.parseOr();for(;this.skipSpaceThen("??");)this.pos+=2,t={kind:"binary",op:"??",left:t,right:this.parseOr(),position:t.position};return t}parseOr(){let t=this.parseAnd();for(;this.skipSpaceThenKeyword("or");)this.pos+=2,t={kind:"binary",op:"or",left:t,right:this.parseAnd(),position:t.position};return t}parseAnd(){let t=this.parseNot();for(;this.skipSpaceThenKeyword("and");)this.pos+=3,t={kind:"binary",op:"and",left:t,right:this.parseNot(),position:t.position};return t}parseNot(){if(this.skipSpaceThenKeyword("not")){let t=this.pos;this.pos+=3,this.enter();let n=this.parseNot();return this.leave(),{kind:"unary",op:"not",operand:n,position:t}}return this.parseComparison()}parseComparison(){let t=this.parseConcat(),n=this.readComparisonOperator(!1);if(n===null)return t;let r=this.parseConcat(),o={kind:"binary",op:n,left:t,right:r,position:t.position},s=this.readComparisonOperator(!0);return s!==null&&this.fail(this.pos,`Comparisons cannot be chained ("a < b < c"); combine them with "and". Found "${s}" at position ${this.pos}.`),o}readComparisonOperator(t){this.skipSpace();let n=null,r=0;for(let s of["==","!=","<=",">="])at(this.text,this.pos,s)&&(n=s,r=2);let o=this.peek();if(n===null&&(o==="<"||o===">")&&(n=o,r=1),n===null&&this.isKeywordAt(this.pos,"in")&&(n="in",r=2),n===null&&this.isKeywordAt(this.pos,"not")){let s=this.pos+3;for(;s<this.text.length&&Qe(this.text.charCodeAt(s));)s++;this.isKeywordAt(s,"in")&&(n="not in",r=s+2-this.pos)}return n!==null&&!t&&(this.pos+=r),n}parseConcat(){let t=this.parseAdditive();for(;this.skipSpaceThen("~");)this.pos++,t={kind:"binary",op:"~",left:t,right:this.parseAdditive(),position:t.position};return t}parseAdditive(){let t=this.parseMultiplicative();for(;;){this.skipSpace();let n=this.peek();if(n!=="+"&&n!=="-")return t;this.pos++,t={kind:"binary",op:n,left:t,right:this.parseMultiplicative(),position:t.position}}}parseMultiplicative(){let t=this.parseUnary();for(;;){this.skipSpace();let n=this.peek();if(n!=="*"&&n!=="/"&&n!=="%")return t;this.pos++,t={kind:"binary",op:n,left:t,right:this.parseUnary(),position:t.position}}}parseUnary(){if(this.skipSpace(),this.peek()!=="-")return this.parsePostfix();let t=this.pos++;this.enter();let n=this.parseUnary();return this.leave(),n.kind==="literal"&&typeof n.value=="number"?{kind:"literal",value:-n.value,position:t}:{kind:"unary",op:"-",operand:n,position:t}}parsePostfix(){this.skipSpace();let t=this.pos,n=this.peek();if(this.atEnd())throw this.unclosedFailure();if(n==="("){this.pos++,this.parens++;let s=this.parsePipeline();if(this.skipSpace(),this.atEnd())throw this.unclosedFailure();return this.peek()!==")"&&this.fail(this.pos,`Expected ")" at position ${this.pos} to close the "(" at position ${t}.`),this.pos++,this.parens--,this.withSegments(s,t)}if(n==="["){this.pos++;let s=[];if(this.skipSpace(),this.peek()!=="]")for(;;){if(s.push(this.parseExpr()),this.skipSpace(),this.peek()===","){this.pos++;continue}if(this.peek()==="]")break;if(this.atEnd())throw this.unclosedFailure();this.fail(this.pos,`Expected "," or "]" at position ${this.pos} in the array starting at position ${t}.`)}return this.pos++,this.withSegments({kind:"array",items:s,position:t},t)}if(n==="'"||n==='"')return this.withSegments({kind:"literal",value:this.readString(),position:t},t);if(Pe(n))return this.withSegments(this.readNumber(),t);xo(n)||this.fail(this.pos,`Expected a data path or a literal at position ${this.pos}, found "${n}". Example: {{ source.field }}.`);let r=this.readName();switch(r){case"true":case"false":return this.withSegments({kind:"literal",value:r==="true",position:t},t);case"null":return this.withSegments({kind:"literal",value:null,position:t},t);case"and":case"or":case"not":case"in":this.fail(t,`"${r}" is a keyword and cannot start a path (position ${t}). Use $item.${r} or ['${r}'].`)}let o=[r];return this.readSegments(o,t),{kind:"path",segments:o,position:t}}withSegments(t,n){let r=[];return this.readSegments(r,n),r.length===0?t:{kind:"postfix",target:t,segments:r,position:n}}readSegments(t,n){for(;;){let r=this.peek();if(r==="."){this.pos++,xo(this.peek())||this.fail(this.pos,`Invalid path "${this.snippet(n)}": expected a field name after "." at position ${this.pos}.`),t.push(this.readName());continue}if(r!=="[")return;let o=this.pos++;if(this.skipSpace(),this.peek()==="'"||this.peek()==='"')t.push(this.readString());else{let s=this.pos;for(this.peek()==="-"&&this.pos++;Pe(this.peek());)this.pos++;let i=this.text.slice(s,this.pos),a=Number(i);(i===""||i==="-"||!Number.isInteger(a)||a>2147483647||a<-2147483648)&&this.fail(o,`Invalid index in "${this.snippet(n)}" at position ${o}: use a whole number such as [0] or [-1], or a quoted key such as ['name'].`),t.push({index:a===0?0:a})}this.skipSpace(),this.peek()!=="]"&&this.fail(this.pos,`Expected "]" at position ${this.pos} in "${this.snippet(n)}".`),this.pos++}}parseFilter(){this.skipSpace();let t=this.pos;xo(this.peek())||this.fail(this.pos,`Expected a filter name after "|" at position ${this.pos}. Allowed: ${$i()}.`);let n=this.readName();if(++this.filterCalls>Pi)throw this.error(t,"tooLong",`More than ${Pi} filter calls in one expression.`,n.length),this.markFailed();this.skipSpace();let r=nr.get(n);if(!r)throw this.error(t,"unknownFilter",`Unknown filter "${n}" at position ${t}. Allowed: ${$i()}.`,n.length,n),this.markFailed();if(r.isText){let i=null,a=this.pos;this.peek()===":"&&(this.pos++,this.skipSpace(),a=this.pos,i=this.peek()==="'"||this.peek()==='"'?this.readString():this.readBareArgument()),r.args.length===0&&i!==null&&this.invalidArgument(n,a,`Filter "${n}" at position ${t} takes no argument.`);let l=er.get(n)?.validate?.(i)??null;return l!==null&&this.invalidArgument(n,a,`Filter "${n}" at position ${t}: ${l}`),{name:n,argument:i,args:[],position:t}}let o=[],s=this.pos;if(this.peek()===":")for(this.pos++,s=this.pos;o.push(this.parseExpr()),this.skipSpace(),this.peek()===",";)this.pos++;return o.length<r.requiredCount&&this.invalidArgument(n,s,`Filter "${n}" at position ${t} needs an argument, e.g. ${Uc(n)}.`),o.length>r.args.length&&this.invalidArgument(n,s,`Filter "${n}" at position ${t} takes at most ${r.args.length} argument(s).`),{name:n,argument:null,args:o,position:t}}invalidArgument(t,n,r){throw this.error(n,"invalidArgument",r,Math.max(1,this.pos-n),t),this.markFailed()}readBareArgument(){let t=this.pos;for(;!this.atEnd()&&!this.atClose()&&this.peek()!=="|"&&!(this.parens>0&&this.peek()===")");)this.pos++;return F(this.text.slice(t,this.pos))}readString(){let t=this.text[this.pos],n=this.pos++,r="";for(;!this.atEnd();){let o=this.text[this.pos++];if(o===t)return r;if(o==="\\"&&!this.atEnd()){let s=this.text[this.pos++];r+=s==="n"?`
3
+ `:s==="t"?" ":s;continue}r+=o}return this.unclosed=!0,this.fail(n,`Unterminated string starting at position ${n}: add a closing ${t}.`)}readNumber(){let t=this.pos;for(;Pe(this.peek());)this.pos++;if(this.peek()==="."&&Pe(this.peekAt(1)))for(this.pos++;Pe(this.peek());)this.pos++;let n=this.peek();if((n==="e"||n==="E")&&(Pe(this.peekAt(1))||(this.peekAt(1)==="+"||this.peekAt(1)==="-")&&Pe(this.peekAt(2))))for(this.pos+=2;Pe(this.peek());)this.pos++;let r=Number(this.text.slice(t,this.pos));return Number.isFinite(r)||this.fail(t,`Invalid number "${this.text.slice(t,this.pos)}" at position ${t}.`),{kind:"literal",value:r,position:t}}readName(){let t=this.pos++;for(;ko(this.peek());)this.pos++;return this.text.slice(t,this.pos)}isKeywordAt(t,n){let r=this.text;return at(r,t,n)&&!(t+n.length<r.length&&ko(r[t+n.length]))&&!(t>0&&ko(r[t-1]))}skipSpaceThen(t){return this.skipSpace(),at(this.text,this.pos,t)}skipSpaceThenKeyword(t){return this.skipSpace(),this.isKeywordAt(this.pos,t)}enter(){if(++this.depth>Ri)throw this.error(this.pos,"tooDeep",`The expression is nested more than ${Ri} levels deep at position ${this.pos}.`),this.markFailed()}leave(){this.depth--}unclosedAt(){return this.hasFailed||this.error(this.open,"syntax",`Unclosed "{{" at position ${this.open}: add a matching "}}".`,2),this.unclosed=!0,this.pos=this.text.length,null}unclosedFailure(){return this.unclosedAt(),this.markFailed()}recover(){if(this.unclosed){this.pos=this.text.length;return}let t=this.text.indexOf("}}",Math.min(this.pos,this.text.length));if(t<0){this.unclosed=!0,this.pos=this.text.length;return}this.pos=t+2}markFailed(){return this.hasFailed=!0,Ni}error(t,n,r,o=1,s){this.errors.push(s===void 0?{position:t,kind:n,length:o,message:r}:{position:t,kind:n,length:o,message:r,filter:s})}fail(t,n){throw this.hasFailed||this.error(t,"syntax",n),this.markFailed()}snippet(t){let n=t,r=this.text;for(;n<r.length&&!at(r,n,"}}")&&r[n]!=="|"&&!Qe(r.charCodeAt(n));)n++;return r.slice(t,n)}skipSpace(){for(;this.pos<this.text.length&&Qe(this.text.charCodeAt(this.pos));)this.pos++}atEnd(){return this.pos>=this.text.length}atClose(){return at(this.text,this.pos,"}}")}peek(){return this.pos<this.text.length?this.text[this.pos]:""}peekAt(t){let n=this.pos+t;return n>=0&&n<this.text.length?this.text[n]:""}},$i=()=>[...Mi].sort().join(", ");function Uc(e){switch(e){case"where":return"where: price > 10";case"map":return"map: name";case"sortBy":return"sortBy: expected";case"find":return"find: id == 3";case"indexBy":return"indexBy: entity_id";default:return e+": x"}}var Hc=new Set(["$item","$index","$now","$params","$secret","$response"]);function Ii(e,t,n,r){let o=[];for(let s of e.parts)typeof s!="string"&&be(s.expr,t,n,r,o);return o}function be(e,t,n,r,o){switch(e.kind){case"path":{let s=Wc(e.segments,t,n,r);s&&o.push(s);break}case"postfix":be(e.target,t,n,r,o);break;case"array":for(let s of e.items)be(s,t,n,r,o);break;case"unary":be(e.operand,t,n,r,o);break;case"binary":be(e.left,t,n,r,o),be(e.right,t,n,r,o);break;case"ternary":be(e.condition,t,n,r,o),be(e.then,t,n,r,o),be(e.otherwise,t,n,r,o);break;case"pipeline":be(e.input,t,n,r,o);for(let s of e.filters){let i=nr.get(s.name);s.args.forEach((a,l)=>{let c=i!==void 0&&l<i.args.length&&i.args[l].kind==="lambda";be(a,c||t,n,c?void 0:r,o)})}break}}function Wc(e,t,n,r){let o=e[0];return typeof o!="string"?null:o==="$root"?typeof e[1]=="string"?{source:e[1],key:zi(e,2)}:null:Hc.has(o)||o.startsWith("$")||t&&!(n(o)&&!(r!==void 0&&ze(r)&&Object.hasOwn(r,o)))?null:{source:o,key:zi(e,1)}}var zi=(e,t)=>{let n=e[t];return typeof n=="string"?n:null};function Ji(e){for(let t of e.parts)if(typeof t!="string"&&we(t.expr))return!0;return!1}function we(e){switch(e.kind){case"literal":return!1;case"path":return e.segments[0]==="$now";case"postfix":return we(e.target);case"array":return e.items.some(we);case"unary":return we(e.operand);case"binary":return we(e.left)||we(e.right);case"ternary":return we(e.condition)||we(e.then)||we(e.otherwise);case"pipeline":return we(e.input)||e.filters.some(t=>t.name==="relative"||t.args.some(we))}}var or="Europe/Stockholm",Gc=4096,rr=new Map;function pn(e){let t=rr.get(e);return t===void 0&&(rr.size>=Gc&&rr.clear(),t=ji(e),rr.set(e,t)),t}function Ci(e){return pn(e).template}function Di(e){return{root:e.root??null,now:e.now,relativeTo:e.dataTime??e.now,zone:e.timeZone??or,item:e.item,index:e.index,params:e.params,vars:e.vars,secrets:e.secrets,lambdaEvaluations:0,lambdaLimitHit:!1}}function Vi(e,t){let n=e.parts;if(n.length===1&&typeof n[0]=="string")return n[0];let r="";for(let o of n)r+=typeof o=="string"?o:C(U(o.expr,t));return r}function ne(e,t){if(!e)return"";let n=pn(e).template;return n===null?"":Vi(n,Di(t))}function Fe(e,t){if(!e)return null;let n=pn(e).template;if(n===null)return null;let r=Di(t);return n.single!==null?U(n.single,r):Vi(n,r)}function So(e,t){if(Ke(e))return null;let n=F(e);return Fe(n.startsWith("{{")?n:`{{ ${n} }}`,t)}function Bi(e){let t=pn(e);return t.readsClock===void 0&&(t.readsClock=t.template!==null&&Ji(t.template)),t.readsClock}function qc(e,t,n,r){let o=pn(e).template;return o===null?[]:Ii(o,t,n,r)}function Et(e,t,n,r){return[...new Set(qc(e,t,n,r).map(o=>o.source))]}var Fi=1,Ao=1,Mt=class extends Error{},Oe=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),Y=e=>typeof e=="string"?e:void 0,sr=(e,t)=>typeof e=="number"&&Number.isInteger(e)?e:t;function ir(e,t){let n=e[t];if(typeof n!="string")throw new Mt(`Bundle does not match schema/bundle.schema.json: "${t}" is required.`);return n}function Ui(e,t){let n={};if(Oe(e))for(let[r,o]of Object.entries(e))Oe(o)&&(n[r]=t(o));return n}function un(e,t){for(let[n,r]of Object.entries(t))r!==void 0&&(e[n]=r);return e}function Hi(e){let t=sr(e.bundleVersion,Fi);if(t!==Fi)throw new Mt(`Unsupported bundleVersion ${t}.`);let n=sr(e.engine,Ao);if(n>Ao)throw new Mt(`The bundle needs engine ${n}; this build has ${Ao}.`);let r=e.entry,o=e.tile;if(!Oe(r)||!Oe(o)||!Oe(e.pages))throw new Mt("Bundle does not match schema/bundle.schema.json: entry, pages and tile are required.");let s={};for(let[a,l]of Object.entries(e.pages))Oe(l)&&(s[a]=l);let i={bundleVersion:t,schemaVersion:sr(e.schemaVersion,2),engine:n,experienceId:ir(e,"experienceId"),localId:ir(e,"localId"),version:sr(e.version,1),timeZone:Y(e.timeZone)??or,entry:un({title:ir(r,"title")},{subtitle:Y(r.subtitle),icon:Y(r.icon),iconUrl:Y(r.iconUrl),description:Y(r.description)}),main:ir(e,"main"),pages:s,tile:o,sources:Ui(e.sources,a=>un({mode:Y(a.mode)??"proxied",ref:Y(a.ref)??"",raw:a},{refresh:Oe(a.refresh)?a.refresh:void 0,push:Y(a.push)})),actions:Ui(e.actions,a=>{let l=a.toast,c=a.refresh;return un({kind:Y(a.kind)??"http"},{mode:Y(a.mode),source:Y(a.source),screen:Y(a.screen),confirm:Y(a.confirm),toast:Oe(l)?un({},{success:Y(l.success),failure:Y(l.failure)}):void 0,refresh:Array.isArray(c)?c.filter(p=>typeof p=="string"):void 0})})};return un(i,{projectId:Y(e.projectId),publishedAt:Y(e.publishedAt),complication:Oe(e.complication)?e.complication:void 0,sample:Oe(e.sample)?e.sample:void 0})}var Wi=new Set(["add","alarm","arrow-down","arrow-up","battery","bell","bike","bolt","build","bus","calendar","car","check","chevron-right","clock","close","cloud","code","door","error","fan","flag","git","heart","home","info","light","lock","mail","map-pin","music","pause","phone","play","plug","power","rain","refresh","remove","robot","rocket","settings","ship","snow","star","stop","sun","temp","thermometer","timer","train","tram","unlock","user","walk","warning","wifi","wind"]),lt={screenListMaxRows:10,textMaxLines:3,tileListMaxRows:3,tileCompactListMaxRows:8,tileMaxButtons:2};function Lt(e){if(!e)return!1;try{let t=new URL(e);return(t.protocol==="https:"||t.protocol==="http:")&&t.hostname.length>0}catch{return!1}}var fn=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function Q(e){for(let t of Object.keys(e))e[t]===void 0&&delete e[t];return e}function Zc(e){if(Number.isInteger(e)&&Math.abs(e)<1e15)return String(e);let[t="",n="0"]=e.toExponential().split("e"),r=Number(n);return r<15&&r>=-5?String(e):`${t}E${r<0?"-":"+"}${String(Math.abs(r)).padStart(2,"0")}`}function x(e){if(typeof e=="string")return e;if(typeof e=="boolean")return e?"true":"false";if(typeof e=="number")return Number.isFinite(e)?Zc(e):void 0}var _o=e=>typeof e=="number"&&Number.isInteger(e)&&Math.abs(e)<=2147483647?e:void 0,Xc=e=>typeof e=="boolean"?e:void 0;function dn(e){if(!fn(e))return;let t=e,n=x(t.id),r=typeof t.type=="string"?t.type:void 0;switch(r){case"text":return Q({type:r,id:n,value:x(t.value),style:x(t.style),maxLines:_o(t.maxLines)});case"stat":return Q({type:r,id:n,value:x(t.value),unit:x(t.unit),label:x(t.label),trend:x(t.trend),icon:x(t.icon)});case"list":return Q({type:r,id:n,items:qi(t.items),item:Zi(t.item),maxRows:_o(t.maxRows),header:x(t.header),emptyText:x(t.emptyText)});case"status":return Q({type:r,id:n,state:x(t.state),label:x(t.label),detail:x(t.detail)});case"progress":return Q({type:r,id:n,value:x(t.value),min:x(t.min),max:x(t.max),style:x(t.style),label:x(t.label)});case"countdown":return Q({type:r,id:n,target:x(t.target),format:x(t.format),label:x(t.label)});case"button":return Q({type:r,id:n,label:x(t.label),icon:x(t.icon),action:x(t.action),confirm:Xc(t.confirm),style:x(t.style)});case"toggle":return Q({type:r,id:n,label:x(t.label),state:x(t.state),onAction:x(t.onAction),offAction:x(t.offAction),icon:x(t.icon)});case"icon":return Q({type:r,id:n,icon:x(t.icon),url:x(t.url),size:x(t.size)});case"stack":{let o=t.children;return Q({type:r,id:n,direction:x(t.direction),header:x(t.header),children:Array.isArray(o)?o.map(dn):[]})}default:return Q({type:"unknown",id:n,typeName:r})}}function Gi(e){return fn(e)?Q({title:x(e.title),root:dn(e.root)}):void 0}function Oo(e,t,n){let r=e.buttons;return Q({surface:t,opens:x(e.opens)??n,template:x(e.template),kind:x(e.kind),title:x(e.title),icon:x(e.icon),url:x(e.url),text:Xi(e.text),value:x(e.value),unit:x(e.unit),label:x(e.label),detail:x(e.detail),trend:x(e.trend),state:x(e.state),min:x(e.min),max:x(e.max),items:qi(e.items),item:Zi(e.item),emptyText:x(e.emptyText),buttons:Array.isArray(r)?r.map(dn):void 0,toggle:dn(e.toggle)})}function qi(e){return typeof e=="string"?{bind:e}:fn(e)?Q({bind:x(e.bind),take:_o(e.take)}):void 0}function Zi(e){if(fn(e))return Q({title:x(e.title),subtitle:x(e.subtitle),trailing:Xi(e.trailing),badge:x(e.badge),icon:x(e.icon),action:x(e.action)})}function Xi(e){if(e!=null){if(fn(e))return Q({component:dn(e)});if(!Array.isArray(e))return Q({text:x(e)})}}function T(e){let t={};for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=r);return t}function Rt(e){let{type:t,...n}=e;return n}var ct=(e,t=2)=>String(e).padStart(t,"0");function pt(e){let t=new Date(e),n=`${ct(t.getUTCFullYear(),4)}-${ct(t.getUTCMonth()+1)}-${ct(t.getUTCDate())}T${ct(t.getUTCHours())}:${ct(t.getUTCMinutes())}:${ct(t.getUTCSeconds())}`,r=t.getUTCMilliseconds();return r===0?`${n}Z`:`${n}.${ct(r,3)}Z`}function ut(e,t,n){if(e===void 0||/^\s*[+-]?\d+\s*$/.test(e))return n;let r=e.replace(/-/g,"").trim().toLowerCase();return t.find(o=>o.replace(/-/g,"").toLowerCase()===r)??n}function Yi(e){let t=2166136261;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),16777619)>>>0;return t.toString(16).padStart(8,"0")}var Qi="No items",Yc="Are you sure?",ar=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),Eo=(e,t,n)=>Math.min(Math.max(e,t),n),ea=e=>{let t=e.trim();return t.startsWith("{{")?t:`{{ ${t} }}`},lr=class{constructor(t,n,r,o,s,i){$(this,"sources",new Map);$(this,"scope");$(this,"touched",new Set);$(this,"replaceBlocked",!1);$(this,"bundle");$(this,"now");$(this,"options");$(this,"isSource",t=>this.sources.has(t));this.bundle=t,this.now=o,this.options=i;for(let a of new Set([...Object.keys(t.sources),...Object.keys(r)])){let l=n.get(a),c=l?.state??"sample",p=l?.fetchedAt??(c==="loading"?void 0:c==="stale"||c==="error"?o-i.fallbackStaleAge:o);this.sources.set(a,T({name:a,state:c,lastUpdated:p,message:c==="error"?l?.message??`Couldn't load ${a}`:void 0}))}this.scope=T({root:this.effectiveRoot(r),now:o,timeZone:s,dataTime:i.dataTime,vars:i.vars})}effectiveRoot(t){if([...this.sources.values()].map(o=>o.state).every(o=>o==="sample"||o==="live"||o==="stale"))return t;let r={};for(let[o,s]of Object.entries(t)){let i=this.sources.get(o)?.state;i==="loading"||i==="error"||(r[o]=i==="empty"?Kc(s):s)}return r}screens(){let t=[];for(let[n,r]of Object.entries(this.bundle.pages)){let o=Gi(r);if(!o)continue;this.beginSurface(!0),this.track([[o.title,!1]]);let s=this.renderOrNull(o.title),i=o.root?this.node(o.root,`$.screens.${n}.root`):void 0;t.push(T({id:n,title:s,root:i,data:this.aggregate()}))}return t}tile(){let t=Oo(this.bundle.tile,"tile",this.bundle.main);return this.glance(`${this.bundle.localId}.tile`,t)}complication(){let t=this.bundle.complication;if(t)return this.glance(`${this.bundle.localId}.complication`,Oo(t,"complication",this.bundle.main))}node(t,n,r=!1){if(t.type==="unknown")return T({type:"unsupported",id:t.id,component:t.typeName??""});let o=t.type==="list"?this.firstItem(t.items):void 0,s=this.track(hn(t,r),o);if(this.replaceBlocked){let i=this.blocking(s);if(i)return i.state==="error"?T({type:"error",id:t.id,component:t.type,message:i.message??"",source:i.name}):T({type:"placeholder",id:t.id,component:t.type,rows:t.type==="list"?Eo(t.maxRows??t.items?.take??3,1,3):1})}switch(t.type){case"text":return T({type:"text",id:t.id,value:ne(t.value,this.scope),style:ut(t.style,Qc,"body"),maxLines:Eo(t.maxLines??lt.textMaxLines,1,lt.textMaxLines)});case"stat":return this.stat(t);case"list":return this.list(t,n);case"status":return this.status(t);case"progress":return this.progress(t);case"countdown":return T({type:"countdown",id:t.id,target:this.timestamp(t.target),format:ut(t.format,["relative","clock"],"relative"),label:this.renderOrNull(t.label)});case"button":return this.button(t);case"toggle":return this.toggle(t,n);case"icon":{let i=this.icon(t.icon,t.url);return T({type:"icon",id:t.id,icon:i?.name,imageUrl:i?.url,size:ut(t.size,["medium","small","large"],"medium")})}case"stack":return this.stack(t,n)}}stat(t){return T({type:"stat",id:t.id,value:ne(t.value,this.scope),unit:this.renderOrNull(t.unit),label:this.renderOrNull(t.label),trend:t.trend===void 0?"none":ep(Fe(t.trend,this.scope)),icon:this.icon(t.icon,void 0)?.name})}list(t,n){let r=this.items(t.items),o=lt.screenListMaxRows,s=Math.min(t.items?.take??Number.MAX_SAFE_INTEGER,t.maxRows??o,o);return T({type:"list",id:t.id,header:this.renderOrNull(t.header),items:this.rows(t.item,r,s,n),totalCount:r.length,maxRows:Math.max(s,0),emptyText:this.renderOrNull(t.emptyText)??Qi})}rows(t,n,r,o){let s=[];if(!t)return s;let i=this.scope;try{for(let a=0;a<Math.min(r,n.length);a++){this.scope={...i,item:n[a]??null,index:a};let l=`${o}.items[${a}]`,c=ne(t.title,this.scope),p=this.renderOrNull(t.subtitle),d=t.trailing?this.trailing(t.trailing,`${l}.trailing`):void 0,g=this.renderOrNull(t.badge),y=this.icon(t.icon,void 0)?.name,m=this.action(t.action);s.push(T({title:c,subtitle:p,trailing:d,badge:g,icon:y,action:m&&{...m,item:a}}))}}finally{this.scope=i}return s}trailing(t,n){if(t.component)return this.node(t.component,n,!0);let r=ne(t.text,this.scope);return r===""?void 0:{type:"text",value:r,style:"caption",maxLines:1}}firstItem(t){if(t?.bind===void 0)return;let n=So(t.bind,this.scope);if(Array.isArray(n))return n[0];if(ar(n))for(let r in n)return n[r]}items(t){if(t?.bind===void 0)return[];let n=So(t.bind,this.scope);return Array.isArray(n)?n:ar(n)?Object.values(n):[]}status(t){return T({type:"status",id:t.id,state:gi(Fe(t.state,this.scope)),label:this.renderOrNull(t.label),detail:this.renderOrNull(t.detail)})}progress(t,n){let r=this.number(t.min)??0,o=this.number(t.max)??100;return o<=r&&(o=r+100),T({type:"progress",id:t.id,value:Eo(this.number(t.value)??r,r,o),min:r,max:o,style:n??ut(t.style,["ring","bar"],"ring"),label:this.renderOrNull(t.label)})}button(t){return T({type:"button",id:t.id,label:ne(t.label,this.scope),icon:this.icon(t.icon,void 0)?.name,style:ut(t.style,["primary","secondary"],"primary"),action:this.action(t.action,t.confirm)})}toggle(t,n){let r=t.state?.includes("{{")?"state:"+t.state.replace(/\s/g,""):void 0,o=this.options.toggleStates,s=Yi(r??`path:${n}`),i=Mo(o,n)??(r!==void 0?Mo(o,r):void 0)??Mo(o,s),a=ne(t.label,this.scope),l=i??fi(Fe(t.state,this.scope))===!0,c=this.icon(t.icon,void 0)?.name,p=this.action(t.onAction),d=this.action(t.offAction);return T({type:"toggle",id:t.id,label:a,on:l,key:s,icon:c,onAction:p&&{...p,targetState:"on"},offAction:d&&{...d,targetState:"off"}})}stack(t,n){let r=[];t.children.forEach((s,i)=>{s&&r.push(this.node(s,`${n}.children[${i}]`))});let o=r[0];return r.length>=2&&o?.type==="error"&&r.every(s=>s.type==="error"&&s.source===o.source)?T({...o,id:t.id,component:t.type}):T({type:"stack",id:t.id,direction:ut(t.direction,["vertical","horizontal"],"vertical"),header:this.renderOrNull(t.header),children:r})}glance(t,n){this.beginSurface(!1),this.track(tp(n),this.firstItem(n.items));let r=`$.glances.${t}`,o=this.renderOrNull(n.title),s=this.icon(n.icon,n.kind==="image"?n.url:void 0),i=c=>T({id:t,template:c,opens:n.opens,title:o,icon:s?.name}),a;if(n.surface==="tile")switch(n.template){case"text":a={...i("text"),text:this.contentSlot(n.text,`${r}.text`)};break;case"single-stat":a={...i("single-stat"),stat:Rt(this.stat(T({value:n.value,unit:n.unit,label:n.label,trend:n.trend})))};break;case"list3":case"compact-list":{let c=this.items(n.items),p=n.template==="list3"?lt.tileListMaxRows:lt.tileCompactListMaxRows,d=Math.min(n.items?.take??p,p);a={...i(n.template),items:this.rows(n.item,c,d,r),totalCount:c.length,emptyText:this.renderOrNull(n.emptyText)??Qi};break}case"status":a={...i("status"),status:Rt(this.status({state:n.state,label:n.label,detail:n.detail}))};break;case"progress-ring":a={...i("progress-ring"),progress:Rt(this.progress(T({value:n.value,min:n.min,max:n.max,label:n.label}),"ring"))};break;case"buttons2":{let c=(n.buttons??[]).slice(0,lt.tileMaxButtons).flatMap(p=>p?.type==="button"?[Rt(this.button(p))]:[]);a={...i("buttons2"),buttons:c};break}case"toggle":{let c=n.toggle?.type==="toggle"?n.toggle:{};a={...i("toggle"),toggle:Rt(this.toggle(c,`${r}.toggle`))};break}}else if(n.kind==="shortText"||n.kind==="longText")a=T({id:t,kind:n.kind,opens:n.opens,text:this.contentSlot(n.text,`${r}.text`),title:o,icon:s?.name,imageUrl:s?.url});else if(n.kind==="rangedValue"){let c=this.progress(T({value:n.value,min:n.min,max:n.max}));a=T({id:t,kind:"rangedValue",opens:n.opens,text:n.text?this.contentSlot(n.text,`${r}.text`):void 0,title:o,icon:s?.name,imageUrl:s?.url,value:c.value,min:c.min,max:c.max})}else n.kind==="image"&&(a=T({id:t,kind:"image",opens:n.opens,icon:s?.name,imageUrl:s?.url}));if(!a)return;let l=this.aggregate();return l?{...a,data:l}:a}contentSlot(t,n){return t?.component?this.node(t.component,n):{type:"text",value:ne(t?.text,this.scope),style:"body",maxLines:3}}icon(t,n){let r=this.renderOrNull(t)?.trim();r!==void 0&&!Wi.has(r)&&(r=void 0);let o=this.renderOrNull(n)?.trim();return o!==void 0&&!Lt(o)&&(o=void 0),r===void 0&&o===void 0?void 0:T({name:r,url:o})}action(t,n){if(t===void 0||!Object.hasOwn(this.bundle.actions,t))return;let r=this.bundle.actions[t],o=r.kind==="refreshSource"||r.kind==="openScreen"||r.kind==="connector"?r.kind:"http",s=n===!1||n===void 0&&r.confirm===void 0?void 0:this.renderBlank(r.confirm)??Yc,i=r.toast?T({success:this.renderBlank(r.toast.success),failure:this.renderBlank(r.toast.failure)}):void 0,a=this.scope.item;return T({id:t,kind:o,screen:o==="openScreen"?r.screen:void 0,confirm:s,mode:o==="http"?r.mode??"proxied":void 0,context:a??void 0,toast:i&&(i.success!==void 0||i.failure!==void 0)?i:void 0})}timestamp(t){let n=hi(Fe(t,this.scope),this.scope.dataTime??this.now,this.scope.timeZone);return n===null?void 0:pt(n)}number(t){return t===void 0?null:bo(Fe(t,this.scope))}renderOrNull(t){if(t===void 0)return;let n=ne(t,this.scope);return n===""?void 0:n}renderBlank(t){if(t===void 0)return;let n=ne(t,this.scope);return n.trim()===""?void 0:n}beginSurface(t){this.touched.clear(),this.replaceBlocked=t}track(t,n){let r=[];for(let[o,s]of t)if(!(!o||!o.includes("{{")))for(let i of Et(o,s,this.isSource,n))this.sources.has(i)&&!r.includes(i)&&r.push(i);for(let o of r)this.touched.add(o);return r}blocking(t){let n=t.map(r=>this.sources.get(r)).filter(r=>r.state==="error"||r.state==="loading");return n.find(r=>r.state==="error")??n[0]}aggregate(){let t=[...this.sources.values()].filter(o=>this.touched.has(o.name));if(t.length===0)return;let n=t[0];for(let o of t)Ki[o.state]>Ki[n.state]&&(n=o);let r=t.flatMap(o=>o.lastUpdated===void 0?[]:[o.lastUpdated]);return T({state:n.state,lastUpdated:r.length?pt(Math.min(...r)):void 0,message:t.find(o=>o.state==="error")?.message,sources:t.map(o=>o.name)})}},Qc=["body","title","caption","display"],Ki={error:5,loading:4,stale:3,empty:2,live:1,sample:0},Mo=(e,t)=>Object.hasOwn(e,t)?e[t]:void 0;function Kc(e){let t=r=>Array.isArray(r)||ar(r)&&Object.values(r).some(t),n=r=>Array.isArray(r)?[]:ar(r)?Object.fromEntries(Object.entries(r).map(([o,s])=>[o,n(s)])):r;return t(e)?n(e):null}function ep(e){let t=bo(e);if(t!==null)return t>0?"up":t<0?"down":"flat";switch(mi(e)){case"up":case"rising":case"increasing":case"higher":return"up";case"down":case"falling":case"decreasing":case"lower":return"down";case"flat":case"steady":case"stable":case"same":return"flat";default:return"none"}}function hn(e,t){let n=(...r)=>r.map(o=>[o,t]);switch(e.type){case"text":return n(e.value);case"stat":return n(e.value,e.unit,e.label,e.trend,e.icon);case"list":return[...n(e.header,e.emptyText),...e.items?.bind!==void 0?n(ea(e.items.bind)):[],...ta(e.item)];case"status":return n(e.state,e.label,e.detail);case"progress":return n(e.value,e.min,e.max,e.label);case"countdown":return n(e.target,e.label);case"button":return n(e.label,e.icon);case"toggle":return n(e.label,e.state,e.icon);case"icon":return n(e.icon,e.url);case"stack":return n(e.header);case"unknown":return[]}}function ta(e){if(!e)return[];let t=[e.title,e.subtitle,e.badge,e.icon,e.trailing?.text].map(n=>[n,!0]);return e.trailing?.component&&t.push(...hn(e.trailing.component,!0)),t}function tp(e){let t=[e.title,e.icon,e.url,e.text?.text,e.value,e.unit,e.label,e.detail,e.trend,e.state,e.min,e.max,e.emptyText].map(n=>[n,!1]);e.text?.component&&t.push(...hn(e.text.component,!1)),e.items?.bind!==void 0&&t.push([ea(e.items.bind),!1]),t.push(...ta(e.item));for(let n of e.buttons??[])n?.type==="button"&&t.push(...hn(n,!1));return e.toggle&&t.push(...hn(e.toggle,!1)),t}function Ro(e){let t=e.screen,n=e.surfaces.tile.theme,r=n&&{corners:n.corners.support==="supported",typeWeight:n.typeWeight.support==="supported",typeWidth:n.typeWidth.support==="supported"};return T({id:e.id,name:e.name,platform:e.platform,shape:t.shape,widthPx:t.widthPx,heightPx:t.heightPx,density:t.density,caseMm:t.caseMm,tileTheme:r})}function mn(e,t){let n=[],r=t.surfaces.screen,o=e.screens.map(a=>a.root===void 0?a:{...a,root:Po(a.root,r.components,r.limits??{},`$.screens.${a.id}.root`,n)}),s=e.tile&&np(e.tile,t.surfaces.tile,n),i=e.complication&&rp(e.complication,t.surfaces.complication,n);return{view:T({...e,screens:o,tile:s,complication:i}),notes:n}}function Ue(e,t,n){n.support!=="supported"&&e.push(T({path:t,support:n.support,to:n.to,reason:n.reason}))}function Lo(e,t){return e!==void 0&&t!==void 0&&e.length>t?e.slice(0,Math.max(t,0)):e}function Po(e,t,n,r,o){let s=Object.hasOwn(t,e.type)?t[e.type]:void 0;if(!s)return e;if(s.support==="unsupported")return Ue(o,r,s),T({type:"unsupported",id:e.id,component:e.type});Ue(o,r,s);let i={...e};if(i.type==="list"){let a=s.limits?.maxRows??n.listMaxRows;a!==void 0&&i.maxRows>a&&(i.maxRows=a),i.items=Lo(i.items,a)}else if(i.type==="text"){let a=s.limits?.maxLines??n.textMaxLines;a!==void 0&&i.maxLines>a&&(i.maxLines=a)}else if(i.type==="stack"){let a=i;i={...a,children:a.children.map((l,c)=>Po(l,t,n,`${r}.children[${c}]`,o))}}return No(i,s.slots,r,o)}function np(e,t,n){let r=Object.hasOwn(t.templates,e.template)?t.templates[e.template]:void 0;if(!r)return e;if(Ue(n,"$.tile",r),r.support==="unsupported")return;let o=t.limits??{},s={...e};if(e.template==="list3"||e.template==="compact-list"){let a=r.limits?.maxRows??o[e.template==="list3"?"listMaxRows":"compactListMaxRows"],l=Lo(s.items,a);l&&(s.items=l)}let i=Lo(s.buttons,r.limits?.maxButtons??o.maxButtons);if(i&&(s.buttons=i),s.text){let a=Po(s.text,t.components,{},"$.tile.text",n),l=r.limits?.maxLines;s.text=a.type==="text"&&l!==void 0&&a.maxLines>l?{...a,maxLines:l}:a}return s=No(s,r.slots,"$.tile",n),s}function rp(e,t,n){let r=Object.hasOwn(t.kinds,e.kind)?t.kinds[e.kind]:void 0;if(!r)return e;if(Ue(n,"$.complication",r),r.support==="unsupported")return;let o=r.limits?.maxTextChars;return o!==void 0&&e.text?.type==="text"&&[...e.text.value].length>o&&n.push({path:"$.complication.text",support:"degraded",to:`the watch face cuts it to about ${o} characters`,reason:`${e.kind} complications fit ${o} characters.`}),No(e,r.slots,"$.complication",n)}var na=e=>e==="url"?"imageUrl":e;function No(e,t,n,r){if(!t)return e;let o={...e};for(let[s,i]of Object.entries(t)){if(i.support==="supported")continue;let a=s.indexOf(".");if(a<0){let d=na(s);if(o[d]===void 0)continue;Ue(r,`${n}.${d}`,i),i.support==="unsupported"&&delete o[d];continue}let l=s.slice(0,a)==="item"?"items":s.slice(0,a),c=na(s.slice(a+1)),p=o[l];if(Array.isArray(p)){let d=g=>g[c]!==void 0||g.action?.[c]!==void 0;if(!p.some(g=>d(g)))continue;Ue(r,`${n}.${l}[*].${c}`,i),i.support==="unsupported"&&(o[l]=p.map(g=>{let{[c]:y,...m}=g;return m}))}else if(p!==null&&typeof p=="object"){if(p.type!==c&&p[c]===void 0)continue;Ue(r,`${n}.${l}`,i)}else p===c&&Ue(r,`${n}.${l}`,i)}return o}function oa(e,t,n,r){return op(Hi(e),t,n,r)}function op(e,t,n,r={},o="all"){let s=Sn(r.timeZone)??tt(e.timeZone),i=r.fallbackStaleAge??bi,a=sp(e,t,n,i),l={};for(let[m,S]of a)S.data!==null&&S.data!==void 0&&(l[m]=S.data);let c=new lr(e,a,l,n,s,T({toggleStates:r.toggleStates??{},fallbackStaleAge:i,dataTime:r.dataTime,vars:r.vars})),p=o==="all"?c.screens():[],d=o==="all"||o==="tile"?c.tile():void 0,g=o==="all"||o==="complication"?c.complication():void 0,y=T({manifestVersion:2,experience:{id:e.experienceId,localId:e.localId,version:e.version},entry:ip(e,l,a,n,s,r.vars),main:e.main,generatedAt:pt(n),timeZone:s,sources:[...c.sources.values()].map(m=>T({name:m.name,state:m.state,lastUpdated:m.lastUpdated===void 0?void 0:pt(m.lastUpdated),message:m.message})),screens:p,tile:d,complication:g});return r.profile?mn(y,r.profile).view:y}function sp(e,t,n,r){let o=new Map;for(let s of Object.keys(e.sources)){let i=Object.hasOwn(t,s)?t[s]:void 0;if(i){o.set(s,i.state==="sample"&&i.fetchedAt!==void 0&&n-i.fetchedAt>r?{...i,state:"stale"}:i);continue}let a=e.sample&&Object.hasOwn(e.sample,s)?e.sample[s]??null:null;o.set(s,{data:a,state:"sample"})}return o}function ip(e,t,n,r,o,s){let i={};for(let[g,y]of Object.entries(t)){let m=n.get(g)?.state;m!=="loading"&&m!=="error"&&(i[g]=y)}let a=T({root:i,now:r,timeZone:o,vars:s}),l=g=>n.has(g),c=new Set;for(let g of[e.entry.title,e.entry.subtitle,e.entry.icon,e.entry.iconUrl])if(g!==void 0)for(let y of Et(g,!1,l))n.has(y)&&c.add(y);let p=$o(ne(e.entry.icon,a)),d=$o(ne(e.entry.iconUrl,a));return T({title:ne(e.entry.title,a),subtitle:$o(ne(e.entry.subtitle,a)),icon:p,imageUrl:p===void 0&&d!==void 0&&Lt(d)?d:void 0,data:c.size===0?void 0:ap([...c].sort(lp),n)})}var ra={error:0,loading:1,stale:2,empty:3,live:4,sample:5};function ap(e,t){let n=e.map(s=>t.get(s)),r=n[0];for(let s of n)ra[s.state]<ra[r.state]&&(r=s);let o=n.flatMap(s=>s.fetchedAt===void 0?[]:[s.fetchedAt]);return T({state:r.state,lastUpdated:o.length?pt(Math.min(...o)):void 0,message:r.state==="error"||r.state==="stale"?r.message:void 0,sources:e})}var lp=(e,t)=>e<t?-1:e>t?1:0,$o=e=>e.trim()===""?void 0:e;function cr(e,t,n,r){return oa(e,t,n,r??{})}var ye,Ie,Ee,He,ie,gn,Pt,pr,ur=class{constructor(t){_(this,Pt);_(this,ye);_(this,Ie);_(this,Ee);_(this,He,1);_(this,ie,!1);_(this,gn,0);w(this,ye,t),w(this,Ie,w(this,Ee,t()))}now(){return f(this,ie)?f(this,Ee):f(this,Ee)+(f(this,ye).call(this)-f(this,Ie))*f(this,He)}get paused(){return f(this,ie)}get speed(){return f(this,He)}get offset(){return this.now()-O(this,Pt,pr).call(this)}get isLive(){return!f(this,ie)&&f(this,He)===1&&Math.abs(this.offset)<1e3}goLive(){w(this,ie,!1),w(this,He,1),w(this,Ie,w(this,Ee,f(this,ye).call(this)))}pause(){f(this,ie)||(w(this,Ee,this.now()),w(this,gn,f(this,ye).call(this)),w(this,ie,!0))}resume(){f(this,ie)&&(w(this,Ie,f(this,ye).call(this)),w(this,ie,!1))}togglePause(){f(this,ie)?this.resume():this.pause()}setOffset(t){let n=Math.max(-315576e7,Math.min(315576e7,Number.isFinite(t)?t:0));w(this,Ee,O(this,Pt,pr).call(this)+n),w(this,Ie,f(this,ye).call(this))}shift(t){this.setOffset(this.offset+t)}setTime(t){this.setOffset(t-O(this,Pt,pr).call(this))}setSpeed(t){if(!Number.isFinite(t)||t<=0)throw new RangeError("The clock speed must be a positive number.");w(this,Ee,this.now()),w(this,Ie,f(this,ye).call(this)),w(this,He,Math.min(t,3600))}};ye=new WeakMap,Ie=new WeakMap,Ee=new WeakMap,He=new WeakMap,ie=new WeakMap,gn=new WeakMap,Pt=new WeakSet,pr=function(){return f(this,ie)?f(this,gn):f(this,ye).call(this)};function cp(e){if(e.startsWith("/"))return e.slice(1).split("/").map(s=>s.replace(/~1/g,"/").replace(/~0/g,"~")).map(s=>/^\d+$/.test(s)?Number(s):s);let t=e.startsWith("$.")?e.slice(2):e,n=[],r=/([^.[\]]+)|\[(\d+)\]/g,o=0;for(let s=r.exec(t);s;s=r.exec(t)){let i=t.slice(o,s.index);if(i!==""&&i!==".")return null;n.push(s[1]!==void 0?s[1]:Number(s[2])),o=r.lastIndex}return o===t.length&&n.length>0?n:null}function sa(e){return e.map((t,n)=>typeof t=="number"?`[${t}]`:n===0?t:`.${t}`).join("")}function G(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function ia(e,t){let n=cp(t);if(!n)return;let r=e,o=0;if(t.startsWith("$.")&&G(e)){let[s]=n,i=a=>{for(let l=n.length;l>1;l--){let c=n.slice(1,l).join("."),p=a.find(d=>G(d)&&d.id===c);if(p)return o=l,p}};if(s==="screens")r=i(Array.isArray(e.screens)?e.screens:[]);else if(s==="glances")r=i([e.tile??null,e.complication??null]);else return}for(;o<n.length;o++){let s=n[o];if(r===null||typeof r!="object")return;r=Array.isArray(r)?typeof s=="number"?r[s]:void 0:r[String(s)]}return r}function*Nt(e,t=[]){if(Array.isArray(e))for(let n=0;n<e.length;n++)yield*Nt(e[n],[...t,n]);else if(G(e)){yield[e,t];for(let[n,r]of Object.entries(e))r!==null&&typeof r=="object"&&(yield*Nt(r,[...t,n]))}}var jo=["sample","live","loading","error","empty","stale"];function zo(e){return"experiences"in e?e:{payloadVersion:1,experiences:[e]}}function pp(e){if(!e)return;let t=Date.parse(e);return Number.isNaN(t)?void 0:t}function aa(e,t,n){let r={};if(t==="sample")return r;let o=e.bundle.sources,s=o&&typeof o=="object"&&!Array.isArray(o)?Object.keys(o):[],i=e.bundle.sample;for(let a of s){let l=e.data?.[a],c=i&&typeof i=="object"&&!Array.isArray(i)?i[a]:void 0,p=l?l.data:c??null,d=pp(l?.receivedAt)??n;switch(t){case"live":if(!l)break;r[a]=up({data:p,state:l.state??"live"},d,l.message);break;case"empty":r[a]={data:p,state:"empty",fetchedAt:d};break;case"stale":r[a]={data:p,state:"stale"};break;default:r[a]={data:null,state:t}}}return r}function up(e,t,n){return t!==void 0&&e.state!=="loading"&&(e.fetchedAt=t),n!==void 0&&(e.message=n),e}var Ge="overview",dp=2e3,fp=20,hp=100,de=class extends Error{};function fr(e){let t=typeof e.main=="string"?e.main:void 0,r=(Array.isArray(e.screens)?e.screens.filter(G):[]).map(i=>String(i.id)),s=[...r.filter(i=>i===t),...r.filter(i=>i!==t)].map(i=>({kind:"page",label:i,target:i,key:`page:${i}`}));return G(e.tile)&&s.push({kind:"tile",label:"tile",target:String(e.tile.id??"tile"),key:"tile"}),G(e.complication)&&s.push({kind:"complication",label:"complication",target:String(e.complication.id??"complication"),key:"complication"}),s.push({kind:"home",label:"App home",target:"home",key:"home"}),s}function gr(e,t){if(e.startsWith("screen:"))return e.slice(7);let n=t.find(r=>r.key===e);return n?.kind==="page"?n.target:null}function mp(e,t){if(!t)return null;let n=ia(e,t),r=t;if(!G(n)){for(let[s,i]of Nt(e))if(s.id===t&&s.type!=="tile"&&s.type!=="complication"&&i[0]!=="experience"){n=s,r=sa(i);break}}if(!G(n))return null;if(n===e.tile||n===e.complication||r==="tile"||r==="complication")return typeof n.opens=="string"?{kind:"open",path:t,node:n,opens:n.opens}:null;let o=typeof n.icon=="string"?n.icon:void 0;return n.type==="toggle"||typeof n.key=="string"&&typeof n.on=="boolean"?{kind:"toggle",path:t,node:n,...o?{icon:o}:{}}:G(n.action)?{kind:"action",path:t,node:n,action:n.action,...o?{icon:o}:{}}:null}var dt,ft,bn,ve,xe,ht,se,We,$t,mt,mr,M,ua,da,fa,ha,Io,dr,Jo,Co,Do,Vo,ma,ga,ba,hr=class{constructor(t,n={}){_(this,M);$(this,"clock");_(this,dt);_(this,ft);_(this,bn);_(this,ve,null);_(this,xe,[]);_(this,ht,{});_(this,se,null);_(this,We,null);_(this,$t,0);_(this,mt,[]);_(this,mr,0);$(this,"settings",{theme:"auto",ambient:!1,showCase:!0});$(this,"data","sample");$(this,"mock",{outcome:"succeed",failureRate:.3});$(this,"dataTime");$(this,"version",0);w(this,dt,t),this.clock=new ur(t),this.dataTime=t(),w(this,ft,n.devices??[]),w(this,bn,n.random??Math.random)}get surfaceKey(){return f(this,ve)}get backStack(){return f(this,xe)}get canGoBack(){return f(this,xe).length>0||f(this,se)!==null}get toggles(){return f(this,ht)}get confirm(){return f(this,se)}get log(){return f(this,mt)}get overlay(){return f(this,We)&&f(this,dt).call(this)<f(this,$t)?f(this,We):null}get overlayExpiresAt(){return this.overlay?f(this,$t):null}restart(){w(this,ve,null),w(this,xe,[]),w(this,ht,{}),w(this,se,null),w(this,We,null),this.dataTime=f(this,dt).call(this),this.version++}effectiveSurface(t,n=fr(t)){return f(this,ve)!==null&&pa(f(this,ve),t,n)?f(this,ve):n[0]?.key??Ge}apply(t,n){let r=n?fr(n):[],o;switch(t.type){case"surface":o=O(this,M,ua).call(this,t.surface,n,r);break;case"back":o=O(this,M,da).call(this);break;case"tap":o=O(this,M,fa).call(this,t.path,n,r);break;case"confirm":o=O(this,M,ha).call(this,n,r);break;case"cancel":o=O(this,M,Io).call(this);break;case"settings":o=O(this,M,ma).call(this,t);break;case"clock":o=O(this,M,ga).call(this,t);break;case"data":o=O(this,M,ba).call(this,t.data);break;default:throw new de(`Unknown command type '${String(t.type)}'.`)}return o&&this.version++,o}};dt=new WeakMap,ft=new WeakMap,bn=new WeakMap,ve=new WeakMap,xe=new WeakMap,ht=new WeakMap,se=new WeakMap,We=new WeakMap,$t=new WeakMap,mt=new WeakMap,mr=new WeakMap,M=new WeakSet,ua=function(t,n,r){if(!t||!n||!pa(t,n,r))throw new de(`Unknown surface '${t}'. Use one of: ${[...r.map(s=>s.key),Ge].join(", ")}.`);let o=this.effectiveSurface(n,r);return w(this,se,null),t===o?!1:(w(this,xe,[]),w(this,ve,t),!0)},da=function(){if(f(this,se))return O(this,M,Io).call(this);let t=f(this,xe).pop();return t===void 0?!1:(w(this,ve,t),!0)},fa=function(t,n,r){let o=n?mp(n,t):null;if(!o||!n)return!1;if(o.kind==="open")return O(this,M,Do).call(this,o.opens,n,r);if(o.kind==="toggle"){let i=String(o.node.key??o.path),a=o.node.on!==!0;f(this,ht)[i]=a;let l=o.node[a?"onAction":"offAction"];if(G(l)&&l.kind==="openScreen")return O(this,M,dr).call(this,l,o.path,n,r),!0;let c=G(l)?O(this,M,Jo).call(this,l,o.path):!0;return c||(f(this,ht)[i]=!a),O(this,M,Vo).call(this,c,c?void 0:ca(l),!c),!0}let s=o.action;return typeof s.confirm=="string"&&s.confirm.trim()!==""?(w(this,se,{prompt:s.confirm,action:s,path:o.path,...o.icon?{icon:o.icon}:{}}),!0):(O(this,M,dr).call(this,s,o.path,n,r),!0)},ha=function(t,n){let r=f(this,se);return r?(w(this,se,null),O(this,M,dr).call(this,r.action,r.path,t,n),!0):!1},Io=function(){return f(this,se)?(w(this,se,null),!0):!1},dr=function(t,n,r,o){if(t.kind==="openScreen"&&typeof t.screen=="string"){O(this,M,Co).call(this,t,n,!0,`Navigated to ${t.screen}`),r&&O(this,M,Do).call(this,t.screen,r,o);return}let s=O(this,M,Jo).call(this,t,n),i=G(t.toast)?t.toast:void 0,a=s?typeof i?.success=="string"?i.success:t.kind==="refreshSource"?"Refreshed":"Sent":ca(t);O(this,M,Vo).call(this,s,a,!0)},Jo=function(t,n){let r=this.mock.outcome==="succeed"?!0:this.mock.outcome==="fail"?!1:f(this,bn).call(this)>=this.mock.failureRate,o=r?t.kind==="refreshSource"?"200 OK (mock) \xB7 source refreshed":'200 OK (mock) \xB7 {"ok":true}':"503 Service Unavailable (mock)";return O(this,M,Co).call(this,t,n,r,o),r},Co=function(t,n,r,o){f(this,mt).unshift({id:++ts(this,mr)._,at:this.clock.now(),action:String(t.id??"?"),kind:String(t.kind??"?"),path:n,...t.context!==void 0?{context:t.context}:{},status:r?"succeeded":"failed",result:o}),f(this,mt).length>hp&&f(this,mt).pop()},Do=function(t,n,r){let o=r.find(i=>i.kind==="page"&&i.target===t)?.key??`screen:${t}`,s=this.effectiveSurface(n,r);return o===s?!1:(f(this,xe).push(s),f(this,xe).length>fp&&f(this,xe).shift(),w(this,ve,o),w(this,se,null),!0)},Vo=function(t,n,r){w(this,We,{success:t,toast:r,sequence:(f(this,We)?.sequence??0)+1,...n!==void 0?{message:n}:{}}),w(this,$t,f(this,dt).call(this)+dp)},ma=function(t){let n={...this.settings};if(t.device!==void 0){if(f(this,ft).length>0&&!f(this,ft).includes(t.device))throw new de(`Unknown device '${t.device}'. Use one of: ${f(this,ft).join(", ")}.`);n.device=t.device}if(t.theme!==void 0){if(t.theme!=="auto"&&!$e(t.theme))throw new de(`Unknown theme '${t.theme}'. Use auto or one of: ${xt.map(o=>o.id).join(", ")}.`);n.theme=t.theme}t.ambient!==void 0&&(n.ambient=t.ambient),t.case!==void 0&&(n.showCase=t.case);let r=n.device!==this.settings.device||n.theme!==this.settings.theme||n.ambient!==this.settings.ambient||n.showCase!==this.settings.showCase;return this.settings=n,r},ga=function(t){let n=this.clock,r=[n.paused,Math.round(n.offset),n.speed].join();switch(t.clock){case void 0:break;case"live":n.goLive();break;case"frozen":n.pause();break;case"running":n.resume();break;default:throw new de(`Unknown clock mode '${String(t.clock)}'. Use live, frozen or running.`)}let o=s=>{if(!Number.isFinite(s))throw new de("Clock minutes must be a finite number.");return Math.max(-315576e7,Math.min(315576e7,s*6e4))};if(t.offsetMinutes!==void 0&&n.setOffset(o(t.offsetMinutes)),t.shiftMinutes!==void 0&&n.shift(o(t.shiftMinutes)),t.speed!==void 0)try{n.setSpeed(t.speed)}catch(s){throw new de(s.message)}return r!==[n.paused,Math.round(n.offset),n.speed].join()},ba=function(t){if(!jo.includes(t))throw new de(`Unknown data state '${t}'. Use ${jo.join(", ")}.`);return t===this.data?!1:(this.data=t,!0)};function ca(e){let t=G(e)?e.toast:void 0;return G(t)&&typeof t.failure=="string"?t.failure:"Failed"}function pa(e,t,n){if(e===Ge||n.some(o=>o.key===e))return!0;if(!e.startsWith("screen:"))return!1;let r=e.slice(7);return Array.isArray(t.screens)&&t.screens.some(o=>G(o)&&o.id===r)}var gp=/\$ms\b/,bp=/\$now|\$ms|\$dataTime|\b(relative|ago|countdown|time|date|since|until)\b/,wa=new WeakMap;function wp(e,t){let n=wa.get(e);if(n)return n;let r=a=>{try{return t(a)}catch{return bp.test(a)}},o={},s=(a,l)=>{o[a]=yp(l,r)},i=e.pages;if(G(i))for(let[a,l]of Object.entries(i))s(`page:${a}`,l);return s("tile",e.tile),s("complication",e.complication),s("home",e.entry),wa.set(e,o),o}function yp(e,t){let n={clock:!1,subSecond:!1},r=o=>{if(typeof o=="string"){if(!o.includes("{{"))return;gp.test(o)?n.clock=n.subSecond=!0:!n.clock&&t(o)&&(n.clock=!0)}else Array.isArray(o)?o.forEach(r):G(o)&&Object.values(o).forEach(r)};return r(e),n}function vp(e,t,n){if(t===Ge)return e;if(t==="tile"||t==="complication")return e[t];if(t==="home")return e.entry;let r=gr(t,n);return Array.isArray(e.screens)?e.screens.find(o=>G(o)&&o.id===r):void 0}function xp(e,t,n){for(let[r]of Nt(vp(e,t,n)))if(r.type==="countdown"&&typeof r.target=="string"||r.state==="stale"&&Array.isArray(r.sources))return!0;return!1}function ya(e,t,n,r,o){let s=wp(e,o),i=n===Ge?Object.keys(s):[n.startsWith("screen:")?`page:${n.slice(7)}`:n],a=!1;for(let l of i){let c=s[l];if(c?.subSecond)return"frame";c?.clock&&(a=!0)}return a||xp(t,n,r)?"second":"none"}var gt,Me,ae,oe,Le,bt,qe,Ze,jt,Re,Xe,wn,zt,wt,re,Bo,Fo,va,xa,br,wr=class{constructor(t,n,r,o={}){_(this,re);$(this,"session");_(this,gt);_(this,Me);_(this,ae);_(this,oe);_(this,Le);_(this,bt,null);_(this,qe,[]);_(this,Ze,"");_(this,jt,null);_(this,Re,null);_(this,Xe,null);_(this,wn);_(this,zt,!1);_(this,wt,{resolve:0,render:0});$(this,"stats",{frames:0,firstResolveMs:null,lastResolveMs:0,lastRenderMs:0,avgResolveMs:0,maxResolveMs:0,avgRenderMs:0,maxRenderMs:0,cadence:"none",lastDrawAt:0});w(this,gt,n),w(this,Me,r),w(this,ae,o),w(this,oe,zo(t)),w(this,Le,O(this,re,Bo).call(this,o.experience)),this.session=new hr(()=>r.now(),{...o.devices?{devices:o.devices}:{},...o.random?{random:o.random}:{}});let s=this.session;s.data=o.data??(this.experience?.data&&Object.keys(this.experience.data).length>0?"live":"sample"),s.settings={theme:o.theme??"auto",ambient:o.ambient??!1,showCase:o.showCase??!0,...o.device?{device:o.device}:{}},w(this,wn,r.onVisibility(()=>{r.hidden()?O(this,re,br).call(this):this.draw()}));try{this.draw(),o.surface&&f(this,bt)&&this.command({type:"surface",surface:o.surface})}catch(i){throw this.destroy(),i}}get payload(){return f(this,oe)}get experiences(){return f(this,oe).experiences}get experienceKey(){return f(this,Le)}get experience(){return f(this,oe).experiences.find(t=>t.key===f(this,Le))}get view(){return f(this,bt)}get surfaces(){return f(this,qe)}get surface(){return f(this,Ze)}get error(){return f(this,jt)}get destroyed(){return f(this,zt)}command(t){let n=this.session.apply(t,f(this,bt));return n&&this.draw(),n}selectExperience(t){if(t===f(this,Le))return!1;if(!f(this,oe).experiences.some(n=>n.key===t))throw new Error(`Unknown Experience '${t}'.`);if(f(this,oe).limits?.experiences&&!f(this,oe).limits.experiences.includes(t))throw new Error(`The Experience '${t}' is not part of this preview.`);return w(this,Le,t),this.session.restart(),this.draw(),!0}setPayload(t){let n=this.experience?.bundleHash;w(this,oe,zo(t)),f(this,oe).experiences.some(r=>r.key===f(this,Le))?n!==void 0&&n!==this.experience?.bundleHash&&this.session.version++:(w(this,Le,O(this,re,Bo).call(this,void 0)),this.session.restart()),this.draw()}setData(t,n,r=f(this,Me).now()){let o=this.experience;if(!o)return;let s={data:n,state:"live",receivedAt:new Date(r).toISOString()};o.data={...o.data??{},[t]:s},this.draw()}draw(){if(f(this,zt))return;O(this,re,br).call(this);let t=this.experience;if(!t)return;let n=this.session,r=f(this,Me),o=n.clock.now(),s=aa(t,n.data,n.dataTime),i={toggleStates:{...n.toggles},dataTime:n.dataTime,vars:f(this,ae).vars?f(this,ae).vars(o):{ms:o},...f(this,ae).timeZone?{timeZone:f(this,ae).timeZone}:{}},a=r.perf(),l;try{l=f(this,gt).resolve(t.bundle,s,o,i)}catch(A){O(this,re,Fo).call(this,A);return}let c=r.perf();w(this,bt,l),w(this,qe,fr(l)),w(this,Ze,n.effectiveSurface(l,f(this,qe)));let p=gr(f(this,Ze),f(this,qe)),d=n.confirm,g=n.overlay,y=n.settings.theme==="auto"?void 0:$e(n.settings.theme),m=y?kt(y):t.theme,S={surface:f(this,Ze),ambient:n.settings.ambient,now:o,frame:n.settings.showCase,...p!==null?{screen:p}:{},...n.settings.device?{device:n.settings.device}:{},...m?{theme:m}:{},...f(this,ae).timeZone?{timeZone:f(this,ae).timeZone}:{},...d?{confirm:{prompt:d.prompt,...d.icon?{icon:d.icon}:{}}}:{},...g?{feedback:g}:{}};try{f(this,gt).render(l,S)}catch(A){O(this,re,Fo).call(this,A);return}let L=r.perf();w(this,jt,null),O(this,re,va).call(this,c-a,L-c),this.stats.cadence=n.clock.paused?"none":ya(t.bundle,l,f(this,Ze),f(this,qe),A=>f(this,gt).readsClock(A)),O(this,re,xa).call(this),f(this,ae).onUpdate?.(this)}destroy(){w(this,zt,!0),O(this,re,br).call(this),f(this,wn).call(this)}};gt=new WeakMap,Me=new WeakMap,ae=new WeakMap,oe=new WeakMap,Le=new WeakMap,bt=new WeakMap,qe=new WeakMap,Ze=new WeakMap,jt=new WeakMap,Re=new WeakMap,Xe=new WeakMap,wn=new WeakMap,zt=new WeakMap,wt=new WeakMap,re=new WeakSet,Bo=function(t){let n=f(this,oe).experiences.filter(o=>!f(this,oe).limits?.experiences||f(this,oe).limits.experiences.includes(o.key));if(t!==void 0){if(!n.some(o=>o.key===t))throw new Error(`Unknown Experience '${t}'.`);return t}let r=n[0];if(!r)throw new Error("The payload has no Experience to show.");return r.key},Fo=function(t){w(this,jt,t),this.stats.cadence="none",f(this,ae).onError?.(t),f(this,ae).onUpdate?.(this)},va=function(t,n){let r=this.stats;r.frames++,r.firstResolveMs??(r.firstResolveMs=t),r.lastResolveMs=t,r.lastRenderMs=n,f(this,wt).resolve+=t,f(this,wt).render+=n,r.avgResolveMs=f(this,wt).resolve/r.frames,r.avgRenderMs=f(this,wt).render/r.frames,r.maxResolveMs=Math.max(r.maxResolveMs,t),r.maxRenderMs=Math.max(r.maxRenderMs,n),r.lastDrawAt=f(this,Me).now()},xa=function(){let t=f(this,Me),n=this.session.clock;if(t.hidden())return;let r=1/0;if(this.stats.cadence==="frame")w(this,Re,t.frame(()=>{w(this,Re,null),this.draw()}));else if(this.stats.cadence==="second"){let i=(1e3-(n.now()%1e3+1e3)%1e3)/n.speed;i<16?w(this,Re,t.frame(()=>{w(this,Re,null),this.draw()})):r=Math.ceil(i)+1}let o=this.session.overlayExpiresAt;o!==null&&(r=Math.min(r,Math.max(0,o-t.now()))),r!==1/0&&w(this,Xe,t.timeout(()=>{w(this,Xe,null),this.draw()},r))},br=function(){f(this,Re)!==null&&f(this,Me).cancelFrame(f(this,Re)),f(this,Xe)!==null&&f(this,Me).cancelTimeout(f(this,Xe)),w(this,Re,w(this,Xe,null))};function ka(){let e=typeof document>"u"?void 0:document,t=typeof performance>"u"?void 0:performance;return{now:()=>t?t.timeOrigin+t.now():Date.now(),perf:()=>t?t.now():Date.now(),frame:n=>typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>n()):setTimeout(n,16),cancelFrame:n=>typeof cancelAnimationFrame=="function"?cancelAnimationFrame(n):clearTimeout(n),timeout:(n,r)=>setTimeout(n,r),cancelTimeout:n=>clearTimeout(n),hidden:()=>e?.visibilityState==="hidden",onVisibility:n=>e?(e.addEventListener("visibilitychange",n),()=>e.removeEventListener("visibilitychange",n)):()=>{}}}function Uo(e,t,n){let r={resolve:n.engine.resolve??cr,readsClock:n.engine.readsClock??Bi,render:n.engine.render},o=null,s=a=>{if(!(!o||!(a.target instanceof Element)))try{if(o.surface===Ge){let p=a.target.closest("[data-wb-surface]");p&&e.contains(p)&&(a.preventDefault(),o.command({type:"surface",surface:p.getAttribute("data-wb-surface")??""}));return}let l=a.target.closest("[data-wb-tap]");if(!l||!e.contains(l))return;a.preventDefault();let c=l.getAttribute("data-wb-tap");c==="confirm"||c==="cancel"?o.command({type:c}):o.command({type:"tap",path:l.getAttribute("data-path")??""})}catch(l){if(!(l instanceof de))throw l}};o=new wr(t,r,n.scheduler??ka(),n),e.addEventListener("click",s);let i=o.destroy.bind(o);return o.destroy=()=>{i(),e.removeEventListener("click",s)},o}var Ho=`/* The watch renderer's stylesheet (render/). Each component's rules match its scope class (.wb-scope-*, render/scopes.ts
4
+ * puts it on the component's elements); the platform layer at the end gives the Wear OS look of the goldens.
5
+ * Fonts: fonts/ (Roboto Flex, OFL). */
6
+
7
+ .wb-confirm.wb-scope-confirm-overlay {
8
+ position: absolute;
9
+ inset: 0;
10
+ z-index: 10;
11
+ display: flex;
12
+ flex-direction: column;
13
+ align-items: center;
14
+ justify-content: center;
15
+ gap: var(--wb-space-m);
16
+ padding: var(--wb-inset-safe);
17
+ background: var(--wb-bg);
18
+ text-align: center;
19
+ animation: wb-confirm-in 160ms ease-out;
20
+ }
21
+
22
+ .wb-confirm.wb-scope-confirm-overlay .wb-confirm__icon {
23
+ color: var(--wb-accent);
24
+ }
25
+
26
+ .wb-confirm__prompt.wb-scope-confirm-overlay {
27
+ font-size: var(--wb-type-title-size);
28
+ line-height: var(--wb-type-title-line);
29
+ letter-spacing: var(--wb-type-title-tracking);
30
+ font-stretch: var(--wb-type-title-width);
31
+ font-weight: var(--wb-type-title-weight);
32
+ display: -webkit-box;
33
+ -webkit-box-orient: vertical;
34
+ -webkit-line-clamp: 3;
35
+ overflow: hidden;
36
+ }
37
+
38
+ .wb-confirm__buttons.wb-scope-confirm-overlay {
39
+ display: flex;
40
+ align-items: center;
41
+ gap: var(--wb-space-l);
42
+ margin-top: var(--wb-space-xs);
43
+ }
44
+
45
+ .wb-confirm__buttons button.wb-scope-confirm-overlay {
46
+ display: grid;
47
+ place-items: center;
48
+ border: none;
49
+ cursor: pointer;
50
+ }
51
+
52
+ /* Wear M3 AlertDialogDefaults.DismissButton: 60dp, CornerMedium (18dp). */
53
+ .wb-confirm__cancel.wb-scope-confirm-overlay {
54
+ width: var(--wb-confirm-button-size);
55
+ height: var(--wb-confirm-button-size);
56
+ border-radius: var(--wb-radius-medium);
57
+ background: var(--wb-surface);
58
+ color: var(--wb-on-surface);
59
+ }
60
+
61
+ /* Wear M3 AlertDialogDefaults.ConfirmButton: a 63 x 54dp oval turned -45 degrees (the icon stays upright). */
62
+ .wb-confirm__ok.wb-scope-confirm-overlay {
63
+ width: var(--wb-confirm-button-width);
64
+ height: var(--wb-confirm-button-height);
65
+ border-radius: 50%;
66
+ transform: rotate(-45deg);
67
+ background: var(--wb-accent-fill);
68
+ color: var(--wb-on-accent);
69
+ }
70
+
71
+ .wb-confirm__ok.wb-scope-confirm-overlay .wb-icon {
72
+ transform: rotate(45deg);
73
+ }
74
+
75
+ .wb-confirm__cancel:active.wb-scope-confirm-overlay {
76
+ transform: scale(0.94);
77
+ }
78
+
79
+ .wb-confirm__ok:active.wb-scope-confirm-overlay {
80
+ transform: rotate(-45deg) scale(0.94);
81
+ }
82
+
83
+ .wb-ambient .wb-confirm__buttons button.wb-scope-confirm-overlay {
84
+ background: transparent;
85
+ color: var(--wb-on-surface);
86
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
87
+ }
88
+
89
+ @keyframes wb-confirm-in {
90
+ from { opacity: 0; transform: scale(1.06); }
91
+ to { opacity: 1; transform: none; }
92
+ }
93
+ .wb-curved.wb-scope-curved-text {
94
+ position: absolute;
95
+ inset: 0;
96
+ width: 100%;
97
+ height: 100%;
98
+ z-index: 2;
99
+ pointer-events: none;
100
+ overflow: visible;
101
+ fill: currentColor;
102
+ font-size: var(--wb-type-time-text-size);
103
+ letter-spacing: var(--wb-type-time-text-tracking);
104
+ font-stretch: var(--wb-type-time-text-width);
105
+ font-weight: var(--wb-type-time-text-weight);
106
+ /* A halo in the background colour keeps the text readable over content scrolling underneath. */
107
+ paint-order: stroke;
108
+ stroke: var(--wb-bg);
109
+ stroke-width: 3px;
110
+ stroke-linejoin: round;
111
+ }
112
+ .wb-haptic.wb-scope-feedback-overlay {
113
+ position: absolute;
114
+ inset: 0;
115
+ z-index: 11;
116
+ border-radius: inherit;
117
+ pointer-events: none;
118
+ opacity: 0;
119
+ box-shadow: inset 0 0 0 3px var(--wb-accent);
120
+ animation: wb-haptic 320ms ease-out;
121
+ }
122
+
123
+ .wb-haptic--error.wb-scope-feedback-overlay {
124
+ box-shadow: inset 0 0 0 3px var(--wb-status-error);
125
+ animation: wb-haptic 180ms ease-out 2;
126
+ }
127
+
128
+ .wb-toast.wb-scope-feedback-overlay {
129
+ position: absolute;
130
+ left: 50%;
131
+ bottom: var(--wb-pad-bottom);
132
+ z-index: 12;
133
+ display: flex;
134
+ align-items: center;
135
+ gap: var(--wb-space-xs);
136
+ max-width: 70%;
137
+ height: var(--wb-toast-height);
138
+ padding: 0 var(--wb-space-l);
139
+ border-radius: var(--wb-radius-full);
140
+ background: var(--wb-surface);
141
+ color: var(--wb-on-surface);
142
+ font-size: var(--wb-type-label-size);
143
+ letter-spacing: var(--wb-type-label-tracking);
144
+ font-stretch: var(--wb-type-label-width);
145
+ font-weight: var(--wb-type-label-weight);
146
+ transform: translateX(-50%);
147
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.5);
148
+ pointer-events: none;
149
+ animation: wb-toast-in 180ms ease-out;
150
+ }
151
+
152
+ .wb-toast--ok.wb-scope-feedback-overlay { color: var(--wb-status-ok); }
153
+ .wb-toast--error.wb-scope-feedback-overlay { color: var(--wb-status-error); }
154
+
155
+ .wb-toast__text.wb-scope-feedback-overlay {
156
+ color: var(--wb-on-surface);
157
+ white-space: nowrap;
158
+ overflow: hidden;
159
+ text-overflow: ellipsis;
160
+ }
161
+
162
+ .wb-ambient .wb-toast.wb-scope-feedback-overlay {
163
+ background: var(--wb-bg);
164
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
165
+ }
166
+
167
+ @keyframes wb-haptic {
168
+ 0% { opacity: 0; transform: scale(1); }
169
+ 30% { opacity: 1; transform: scale(0.985); }
170
+ 100% { opacity: 0; transform: scale(1); }
171
+ }
172
+
173
+ @keyframes wb-toast-in {
174
+ from { opacity: 0; transform: translate(-50%, 8px); }
175
+ to { opacity: 1; transform: translate(-50%, 0); }
176
+ }
177
+ .wb-buttons2.wb-scope-buttons2-tile-view {
178
+ display: flex;
179
+ justify-content: center;
180
+ align-items: flex-start;
181
+ gap: var(--wb-space-l);
182
+ }
183
+
184
+ .wb-buttons2__item.wb-scope-buttons2-tile-view {
185
+ display: flex;
186
+ flex-direction: column;
187
+ align-items: center;
188
+ gap: var(--wb-space-xs);
189
+ /* Like the ProtoLayout row in the Wear app: each column is as wide as its button or label, 12dp apart. */
190
+ flex: 0 1 auto;
191
+ min-width: 0;
192
+ }
193
+
194
+ .wb-buttons2__button.wb-scope-buttons2-tile-view {
195
+ display: grid;
196
+ place-items: center;
197
+ width: var(--wb-tile-button-size);
198
+ height: var(--wb-tile-button-size);
199
+ border: none;
200
+ border-radius: var(--wb-radius-full);
201
+ font: inherit;
202
+ cursor: pointer;
203
+ }
204
+
205
+ .wb-buttons2__button--primary.wb-scope-buttons2-tile-view {
206
+ background: var(--wb-accent-fill);
207
+ color: var(--wb-on-accent);
208
+ }
209
+
210
+ .wb-buttons2__button--secondary.wb-scope-buttons2-tile-view {
211
+ background: var(--wb-surface);
212
+ color: var(--wb-accent);
213
+ }
214
+
215
+ .wb-buttons2__button:active:not(:disabled).wb-scope-buttons2-tile-view {
216
+ transform: scale(0.94);
217
+ }
218
+
219
+ .wb-buttons2__button:disabled.wb-scope-buttons2-tile-view {
220
+ opacity: 0.38;
221
+ cursor: default;
222
+ }
223
+
224
+ .wb-buttons2__initial.wb-scope-buttons2-tile-view {
225
+ font-size: var(--wb-type-display-size);
226
+ letter-spacing: var(--wb-type-display-tracking);
227
+ font-stretch: var(--wb-type-display-width);
228
+ font-weight: var(--wb-type-display-weight);
229
+ }
230
+
231
+ .wb-buttons2__label.wb-scope-buttons2-tile-view {
232
+ max-width: 100%;
233
+ font-size: var(--wb-type-caption-size);
234
+ line-height: var(--wb-type-caption-line);
235
+ font-weight: var(--wb-type-caption-weight);
236
+ letter-spacing: var(--wb-type-caption-tracking);
237
+ font-stretch: var(--wb-type-caption-width);
238
+ color: var(--wb-on-surface-variant);
239
+ white-space: nowrap;
240
+ overflow: hidden;
241
+ text-overflow: ellipsis;
242
+ }
243
+
244
+ .wb-ambient .wb-buttons2__button.wb-scope-buttons2-tile-view {
245
+ background: transparent;
246
+ color: var(--wb-on-surface);
247
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
248
+ }
249
+ /* compact-list: fixed 16dp rows of caption (bodySmall) text, title left and trailing value right, no dividers. */
250
+ .wb-compact-list.wb-scope-compact-list-tile-view {
251
+ display: flex;
252
+ flex-direction: column;
253
+ padding: 0 var(--wb-space-xs);
254
+ min-width: 0;
255
+ }
256
+
257
+ .wb-compact-list__row.wb-scope-compact-list-tile-view {
258
+ display: flex;
259
+ align-items: center;
260
+ gap: var(--wb-space-s);
261
+ height: 16px;
262
+ min-width: 0;
263
+ text-align: start;
264
+ font-size: var(--wb-type-caption-size);
265
+ line-height: var(--wb-type-caption-line);
266
+ font-weight: var(--wb-type-caption-weight);
267
+ letter-spacing: var(--wb-type-caption-tracking);
268
+ font-stretch: var(--wb-type-caption-width);
269
+ }
270
+
271
+ .wb-compact-list__title.wb-scope-compact-list-tile-view {
272
+ flex: 1 1 auto;
273
+ min-width: 0;
274
+ color: var(--wb-on-surface);
275
+ white-space: nowrap;
276
+ overflow: hidden;
277
+ text-overflow: ellipsis;
278
+ }
279
+
280
+ .wb-compact-list__trailing.wb-scope-compact-list-tile-view {
281
+ flex: none;
282
+ color: var(--wb-on-surface-variant);
283
+ white-space: nowrap;
284
+ }
285
+
286
+ .wb-compact-list__trailing--countdown.wb-scope-compact-list-tile-view {
287
+ color: var(--wb-accent);
288
+ }
289
+
290
+ .wb-compact-list__empty.wb-scope-compact-list-tile-view {
291
+ color: var(--wb-on-surface-variant);
292
+ font-size: var(--wb-type-caption-size);
293
+ line-height: var(--wb-type-caption-line);
294
+ font-weight: var(--wb-type-caption-weight);
295
+ letter-spacing: var(--wb-type-caption-tracking);
296
+ font-stretch: var(--wb-type-caption-width);
297
+ }
298
+ .wb-face.wb-scope-complication-view {
299
+ position: relative;
300
+ width: 100%;
301
+ height: 100%;
302
+ background: var(--wb-bg);
303
+ color: var(--wb-on-surface);
304
+ }
305
+
306
+ /* Minute/hour ticks along the edge. */
307
+ .wb-face__ticks.wb-scope-complication-view {
308
+ position: absolute;
309
+ inset: var(--wb-space-xs);
310
+ border-radius: 50%;
311
+ background: repeating-conic-gradient(from -1deg, var(--wb-outline) 0deg 2deg, transparent 2deg 30deg);
312
+ -webkit-mask: radial-gradient(closest-side, transparent calc(100% - var(--wb-space-m)), #000 calc(100% - var(--wb-space-m) + 1px));
313
+ mask: radial-gradient(closest-side, transparent calc(100% - var(--wb-space-m)), #000 calc(100% - var(--wb-space-m) + 1px));
314
+ opacity: 0.7;
315
+ }
316
+
317
+ .wb-face--square .wb-face__ticks.wb-scope-complication-view {
318
+ display: none;
319
+ }
320
+
321
+ .wb-face__time.wb-scope-complication-view {
322
+ position: absolute;
323
+ top: 22%;
324
+ left: 0;
325
+ right: 0;
326
+ text-align: center;
327
+ font-family: var(--wb-font-numeral);
328
+ font-size: var(--wb-type-face-time-size);
329
+ line-height: var(--wb-type-face-time-line);
330
+ font-stretch: var(--wb-type-face-time-width);
331
+ font-weight: var(--wb-type-face-time-weight);
332
+ letter-spacing: -0.02em;
333
+ }
334
+
335
+ .wb-face__date.wb-scope-complication-view {
336
+ position: absolute;
337
+ top: calc(22% + var(--wb-type-face-time-line));
338
+ left: 0;
339
+ right: 0;
340
+ text-align: center;
341
+ font-size: var(--wb-type-caption-size);
342
+ line-height: var(--wb-type-caption-line);
343
+ font-stretch: var(--wb-type-caption-width);
344
+ font-weight: var(--wb-type-label-weight);
345
+ color: var(--wb-accent);
346
+ letter-spacing: 0.06em;
347
+ }
348
+
349
+ .wb-face__slots.wb-scope-complication-view {
350
+ position: absolute;
351
+ top: 58%;
352
+ left: 0;
353
+ right: 0;
354
+ display: flex;
355
+ justify-content: center;
356
+ align-items: center;
357
+ gap: var(--wb-space-s);
358
+ }
359
+
360
+ .wb-face__placeholder.wb-scope-complication-view {
361
+ width: calc(var(--wb-complication) * 0.8);
362
+ height: calc(var(--wb-complication) * 0.8);
363
+ border-radius: var(--wb-radius-full);
364
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--wb-outline) 45%, transparent);
365
+ }
366
+
367
+ .wb-comp.wb-scope-complication-view {
368
+ position: relative;
369
+ display: flex;
370
+ flex-direction: column;
371
+ align-items: center;
372
+ justify-content: center;
373
+ gap: 0;
374
+ width: var(--wb-complication);
375
+ height: var(--wb-complication);
376
+ border-radius: var(--wb-radius-full);
377
+ background: var(--wb-surface);
378
+ color: var(--wb-on-surface);
379
+ overflow: hidden;
380
+ text-align: center;
381
+ /* The highlighted slot: a subtle accent ring so it stands out from the neutral neighbours. */
382
+ box-shadow: 0 0 0 2px var(--wb-accent-container);
383
+ }
384
+
385
+ .wb-comp--tappable.wb-scope-complication-view {
386
+ cursor: pointer;
387
+ }
388
+
389
+ .wb-comp.wb-scope-complication-view .wb-comp__icon {
390
+ color: var(--wb-accent);
391
+ }
392
+
393
+ .wb-comp__text.wb-scope-complication-view {
394
+ max-width: 100%;
395
+ font-size: var(--wb-type-label-size);
396
+ line-height: var(--wb-type-label-line);
397
+ letter-spacing: var(--wb-type-label-tracking);
398
+ font-stretch: var(--wb-type-label-width);
399
+ font-weight: var(--wb-type-title-weight);
400
+ white-space: nowrap;
401
+ overflow: hidden;
402
+ text-overflow: ellipsis;
403
+ }
404
+
405
+ .wb-comp__title.wb-scope-complication-view {
406
+ max-width: 100%;
407
+ font-size: var(--wb-type-label-small-size);
408
+ line-height: var(--wb-type-label-small-line);
409
+ font-weight: var(--wb-type-label-small-weight);
410
+ letter-spacing: var(--wb-type-label-small-tracking);
411
+ font-stretch: var(--wb-type-label-small-width);
412
+ color: var(--wb-on-surface-variant);
413
+ white-space: nowrap;
414
+ overflow: hidden;
415
+ text-overflow: ellipsis;
416
+ }
417
+
418
+ .wb-comp--short-text .wb-comp__text.wb-scope-complication-view {
419
+ padding: 0 var(--wb-space-xs);
420
+ }
421
+
422
+ .wb-comp--ranged-value.wb-scope-complication-view {
423
+ background: transparent;
424
+ box-shadow: none;
425
+ overflow: visible;
426
+ }
427
+
428
+ .wb-comp__ring.wb-scope-complication-view {
429
+ position: absolute;
430
+ inset: 0;
431
+ }
432
+
433
+ .wb-comp--ranged-value .wb-comp__text.wb-scope-complication-view {
434
+ font-size: var(--wb-type-body-size);
435
+ line-height: var(--wb-type-body-line);
436
+ font-weight: var(--wb-type-body-weight);
437
+ letter-spacing: var(--wb-type-body-tracking);
438
+ font-stretch: var(--wb-type-body-width);
439
+ }
440
+
441
+ .wb-comp--image.wb-scope-complication-view {
442
+ color: var(--wb-accent);
443
+ }
444
+
445
+ .wb-face__slots--long.wb-scope-complication-view {
446
+ top: 60%;
447
+ }
448
+
449
+ .wb-comp--long-text.wb-scope-complication-view {
450
+ flex-direction: row;
451
+ justify-content: flex-start;
452
+ gap: var(--wb-space-m);
453
+ width: var(--wb-long-complication-width);
454
+ height: calc(var(--wb-complication) * 0.72);
455
+ padding: 0 var(--wb-space-l);
456
+ text-align: start;
457
+ }
458
+
459
+ .wb-comp__lines.wb-scope-complication-view {
460
+ display: flex;
461
+ flex-direction: column;
462
+ min-width: 0;
463
+ }
464
+
465
+ .wb-ambient .wb-comp.wb-scope-complication-view {
466
+ background: transparent;
467
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
468
+ }
469
+
470
+ .wb-ambient .wb-comp--ranged-value.wb-scope-complication-view {
471
+ box-shadow: none;
472
+ }
473
+
474
+ .wb-ambient .wb-face__ticks.wb-scope-complication-view {
475
+ opacity: 0.4;
476
+ }
477
+
478
+ .wb-ambient .wb-face__time.wb-scope-complication-view {
479
+ font-weight: 300;
480
+ }
481
+ .wb-list3.wb-scope-list3-tile-view {
482
+ display: flex;
483
+ flex-direction: column;
484
+ gap: var(--wb-space-xxs);
485
+ padding: 0 var(--wb-space-xs);
486
+ min-width: 0;
487
+ }
488
+
489
+ .wb-list3.wb-scope-list3-tile-view .wb-row + .wb-row {
490
+ border-top: 1px solid color-mix(in srgb, var(--wb-outline) 40%, transparent);
491
+ border-radius: 0;
492
+ }
493
+
494
+ .wb-list3__empty.wb-scope-list3-tile-view,
495
+ .wb-list3__more.wb-scope-list3-tile-view {
496
+ color: var(--wb-on-surface-variant);
497
+ font-size: var(--wb-type-caption-size);
498
+ line-height: var(--wb-type-caption-line);
499
+ font-weight: var(--wb-type-caption-weight);
500
+ letter-spacing: var(--wb-type-caption-tracking);
501
+ font-stretch: var(--wb-type-caption-width);
502
+ }
503
+ .wb-progress-tile__ring.wb-scope-progress-ring-tile-view {
504
+ position: absolute;
505
+ inset: var(--wb-space-xs);
506
+ pointer-events: none;
507
+ }
508
+
509
+ .wb-progress-tile.wb-scope-progress-ring-tile-view {
510
+ display: flex;
511
+ flex-direction: column;
512
+ align-items: center;
513
+ }
514
+
515
+ .wb-progress-tile__value.wb-scope-progress-ring-tile-view {
516
+ font-family: var(--wb-font-numeral);
517
+ font-size: var(--wb-type-numeral-size);
518
+ line-height: var(--wb-type-numeral-line);
519
+ letter-spacing: var(--wb-type-numeral-tracking);
520
+ font-stretch: var(--wb-type-numeral-width);
521
+ font-weight: var(--wb-type-numeral-weight);
522
+ color: var(--wb-on-surface);
523
+ }
524
+
525
+ .wb-progress-tile.wb-scope-progress-ring-tile-view .wb-progress-tile__skeleton {
526
+ height: var(--wb-type-numeral-size);
527
+ }
528
+
529
+ .wb-progress-tile__label.wb-scope-progress-ring-tile-view {
530
+ font-size: var(--wb-type-caption-size);
531
+ line-height: var(--wb-type-caption-line);
532
+ font-weight: var(--wb-type-caption-weight);
533
+ letter-spacing: var(--wb-type-caption-tracking);
534
+ font-stretch: var(--wb-type-caption-width);
535
+ color: var(--wb-on-surface-variant);
536
+ }
537
+ .wb-status-tile.wb-scope-status-tile-view {
538
+ --wb-status-color: var(--wb-status-unknown);
539
+ display: flex;
540
+ flex-direction: column;
541
+ align-items: center;
542
+ gap: var(--wb-space-xs);
543
+ min-width: 0;
544
+ }
545
+
546
+ .wb-status-tile--ok.wb-scope-status-tile-view { --wb-status-color: var(--wb-status-ok); }
547
+ .wb-status-tile--warn.wb-scope-status-tile-view { --wb-status-color: var(--wb-status-warn); }
548
+ .wb-status-tile--error.wb-scope-status-tile-view { --wb-status-color: var(--wb-status-error); }
549
+
550
+ .wb-status-tile__badge.wb-scope-status-tile-view {
551
+ display: grid;
552
+ place-items: center;
553
+ width: calc(var(--wb-icon-large) + var(--wb-space-xl));
554
+ height: calc(var(--wb-icon-large) + var(--wb-space-xl));
555
+ border-radius: var(--wb-radius-full);
556
+ background: var(--wb-status-color);
557
+ color: var(--wb-bg);
558
+ }
559
+
560
+ .wb-status-tile.wb-scope-status-tile-view .wb-status-tile__skeleton {
561
+ width: calc(var(--wb-icon-large) + var(--wb-space-xl));
562
+ height: calc(var(--wb-icon-large) + var(--wb-space-xl));
563
+ }
564
+
565
+ .wb-status-tile__label.wb-scope-status-tile-view {
566
+ font-size: var(--wb-type-title-size);
567
+ line-height: var(--wb-type-title-line);
568
+ letter-spacing: var(--wb-type-title-tracking);
569
+ font-stretch: var(--wb-type-title-width);
570
+ font-weight: var(--wb-type-title-weight);
571
+ max-width: 100%;
572
+ white-space: nowrap;
573
+ overflow: hidden;
574
+ text-overflow: ellipsis;
575
+ }
576
+
577
+ .wb-status-tile__detail.wb-scope-status-tile-view {
578
+ font-size: var(--wb-type-caption-size);
579
+ line-height: var(--wb-type-caption-line);
580
+ font-weight: var(--wb-type-caption-weight);
581
+ letter-spacing: var(--wb-type-caption-tracking);
582
+ font-stretch: var(--wb-type-caption-width);
583
+ color: var(--wb-on-surface-variant);
584
+ display: -webkit-box;
585
+ -webkit-box-orient: vertical;
586
+ -webkit-line-clamp: 2;
587
+ overflow: hidden;
588
+ }
589
+
590
+ .wb-ambient .wb-status-tile__badge.wb-scope-status-tile-view {
591
+ background: transparent;
592
+ color: var(--wb-on-surface);
593
+ box-shadow: inset 0 0 0 2px var(--wb-outline);
594
+ }
595
+ .wb-text-tile.wb-scope-text-tile-view {
596
+ display: flex;
597
+ flex-direction: column;
598
+ justify-content: center;
599
+ padding: 0 var(--wb-space-xs);
600
+ }
601
+
602
+ .wb-text-tile.wb-scope-text-tile-view .wb-text {
603
+ font-size: var(--wb-type-title-size);
604
+ line-height: var(--wb-type-title-line);
605
+ font-weight: var(--wb-type-title-weight);
606
+ letter-spacing: var(--wb-type-title-tracking);
607
+ font-stretch: var(--wb-type-title-width);
608
+ }
609
+ .wb-tile.wb-scope-tile-frame {
610
+ position: relative;
611
+ display: flex;
612
+ flex-direction: column;
613
+ align-items: center;
614
+ width: 100%;
615
+ height: 100%;
616
+ /* ProtoLayout M3 PrimaryLayout: header 3dp from the top edge; main slot side margins 10% and bottom margin 16.64%
617
+ of the screen width without a bottom slot (7.1% sides with an EdgeButton, below). */
618
+ padding: var(--wb-tile-title-top) var(--wb-tile-margin-no-edge) var(--wb-tile-bottom-no-edge);
619
+ overflow: hidden;
620
+ cursor: pointer;
621
+ text-align: center;
622
+ }
623
+
624
+ /* With an EdgeButton: 7.1% side margins; the button (46dp + 3dp bottom margin) plus its 4dp top margin below the main slot. */
625
+ .wb-tile--edge.wb-scope-tile-frame {
626
+ padding-left: var(--wb-tile-pad-x);
627
+ padding-right: var(--wb-tile-pad-x);
628
+ padding-bottom: calc(var(--wb-edge-button-height) + var(--wb-edge-button-bottom) + var(--wb-edge-button-top-margin));
629
+ }
630
+
631
+ /* PrimaryLayout header: 24dp icon, 4dp spacer (2dp on small screens), one line of TITLE_SMALL, 6dp (4dp) below,
632
+ 14.5% side margins measured from the screen edge. */
633
+ .wb-tile__title.wb-scope-tile-frame {
634
+ display: flex;
635
+ flex-direction: column;
636
+ align-items: center;
637
+ justify-content: center;
638
+ gap: var(--wb-tile-icon-title-spacing);
639
+ flex: none;
640
+ width: calc(var(--wb-width) - 2 * var(--wb-tile-title-side));
641
+ margin-bottom: var(--wb-tile-title-bottom);
642
+ color: var(--wb-on-surface);
643
+ font-size: var(--wb-type-tile-title-size);
644
+ line-height: var(--wb-type-tile-title-line);
645
+ letter-spacing: var(--wb-type-tile-title-tracking);
646
+ font-stretch: var(--wb-type-tile-title-width);
647
+ font-weight: var(--wb-type-tile-title-weight);
648
+ }
649
+
650
+ .wb-tile__title.wb-scope-tile-frame .wb-tile__title-icon {
651
+ color: var(--wb-accent);
652
+ width: var(--wb-tile-header-icon);
653
+ height: var(--wb-tile-header-icon);
654
+ }
655
+
656
+ .wb-tile__icon-slot.wb-scope-tile-frame {
657
+ display: block;
658
+ flex: none;
659
+ width: var(--wb-tile-header-icon);
660
+ height: var(--wb-tile-header-icon);
661
+ }
662
+
663
+ .wb-tile__title-text.wb-scope-tile-frame {
664
+ max-width: 100%;
665
+ white-space: nowrap;
666
+ overflow: hidden;
667
+ text-overflow: ellipsis;
668
+ }
669
+
670
+ .wb-tile__error.wb-scope-tile-frame {
671
+ display: flex;
672
+ align-items: center;
673
+ gap: var(--wb-space-xxs);
674
+ color: var(--wb-status-error);
675
+ font-size: var(--wb-type-caption-size);
676
+ line-height: var(--wb-type-caption-line);
677
+ font-weight: var(--wb-type-caption-weight);
678
+ letter-spacing: var(--wb-type-caption-tracking);
679
+ font-stretch: var(--wb-type-caption-width);
680
+ }
681
+
682
+ .wb-tile__main.wb-scope-tile-frame {
683
+ flex: 1;
684
+ display: flex;
685
+ flex-direction: column;
686
+ justify-content: center;
687
+ align-items: stretch;
688
+ width: 100%;
689
+ min-height: 0;
690
+ gap: var(--wb-space-xs);
691
+ }
692
+
693
+ .wb-tile__bottom-label.wb-scope-tile-frame {
694
+ color: var(--wb-status-warn);
695
+ font-size: var(--wb-type-caption-size);
696
+ line-height: var(--wb-type-caption-line);
697
+ font-weight: var(--wb-type-caption-weight);
698
+ letter-spacing: var(--wb-type-caption-tracking);
699
+ font-stretch: var(--wb-type-caption-width);
700
+ padding-bottom: var(--wb-space-xxs);
701
+ }
702
+
703
+ /* ProtoLayout M3 EdgeButton: 46dp high, 3dp above the bottom edge, 48% of the screen wide (52% on small screens),
704
+ 17dp top corners and a bottom that follows the round screen. */
705
+ .wb-edge-button.wb-scope-tile-frame {
706
+ position: absolute;
707
+ left: 50%;
708
+ bottom: var(--wb-edge-button-bottom);
709
+ transform: translateX(-50%);
710
+ width: var(--wb-edge-button-width);
711
+ height: var(--wb-edge-button-height);
712
+ padding: 0 0 var(--wb-space-xs);
713
+ border: none;
714
+ border-radius: var(--wb-edge-button-top-radius) var(--wb-edge-button-top-radius) 50% 50% / var(--wb-edge-button-top-radius) var(--wb-edge-button-top-radius) 100% 100%;
715
+ background: var(--wb-accent-fill);
716
+ color: var(--wb-on-accent);
717
+ font: inherit;
718
+ font-size: var(--wb-type-label-size);
719
+ letter-spacing: var(--wb-type-label-tracking);
720
+ font-stretch: var(--wb-type-label-width);
721
+ font-weight: var(--wb-type-label-weight);
722
+ cursor: pointer;
723
+ }
724
+
725
+ .wb-ambient .wb-edge-button.wb-scope-tile-frame {
726
+ background: transparent;
727
+ color: var(--wb-on-surface);
728
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
729
+ }
730
+ /* Wear M3 filled tonal Button with secondary label: 52dp min height, CornerLarge (26dp), 14dp x 6dp padding, 6dp icon gap. */
731
+ .wb-row.wb-scope-list-row {
732
+ display: flex;
733
+ align-items: center;
734
+ gap: var(--wb-button-icon-spacing);
735
+ width: 100%;
736
+ min-height: var(--wb-list-row-min-height);
737
+ padding: var(--wb-button-padding-y) var(--wb-button-padding-x);
738
+ border: none;
739
+ border-radius: var(--wb-radius-large);
740
+ background: var(--wb-surface);
741
+ color: var(--wb-on-surface);
742
+ font: inherit;
743
+ text-align: start;
744
+ min-width: 0;
745
+ }
746
+
747
+ .wb-row--action.wb-scope-list-row {
748
+ cursor: pointer;
749
+ }
750
+
751
+ .wb-row--action:active.wb-scope-list-row {
752
+ filter: brightness(1.25);
753
+ transform: scale(0.97);
754
+ transition: transform 80ms ease-out;
755
+ }
756
+
757
+ .wb-row.wb-scope-list-row .wb-row__icon {
758
+ color: var(--wb-accent);
759
+ }
760
+
761
+ .wb-row:not(.wb-row--compact).wb-scope-list-row .wb-row__icon {
762
+ width: var(--wb-button-icon);
763
+ height: var(--wb-button-icon);
764
+ }
765
+
766
+ .wb-row__text.wb-scope-list-row {
767
+ display: flex;
768
+ flex-direction: column;
769
+ flex: 1 1 auto;
770
+ min-width: 0;
771
+ }
772
+
773
+ .wb-row__title.wb-scope-list-row {
774
+ font-size: var(--wb-type-label-size);
775
+ line-height: var(--wb-type-label-line);
776
+ letter-spacing: var(--wb-type-label-tracking);
777
+ font-stretch: var(--wb-type-label-width);
778
+ font-weight: var(--wb-type-label-weight);
779
+ white-space: nowrap;
780
+ overflow: hidden;
781
+ text-overflow: ellipsis;
782
+ }
783
+
784
+ .wb-row__subtitle.wb-scope-list-row {
785
+ font-size: var(--wb-type-label-small-size);
786
+ line-height: var(--wb-type-label-small-line);
787
+ font-weight: var(--wb-type-label-small-weight);
788
+ letter-spacing: var(--wb-type-label-small-tracking);
789
+ font-stretch: var(--wb-type-label-small-width);
790
+ color: var(--wb-on-surface-variant);
791
+ white-space: nowrap;
792
+ overflow: hidden;
793
+ text-overflow: ellipsis;
794
+ }
795
+
796
+ .wb-row__badge.wb-scope-list-row {
797
+ flex: none;
798
+ min-width: var(--wb-badge-height);
799
+ height: var(--wb-badge-height);
800
+ padding: 0 var(--wb-space-s);
801
+ border-radius: var(--wb-radius-full);
802
+ background: var(--wb-accent-container);
803
+ color: var(--wb-on-accent-container);
804
+ font-size: var(--wb-type-caption-size);
805
+ letter-spacing: var(--wb-type-caption-tracking);
806
+ font-stretch: var(--wb-type-caption-width);
807
+ line-height: var(--wb-badge-height);
808
+ font-weight: var(--wb-type-label-weight);
809
+ text-align: center;
810
+ white-space: nowrap;
811
+ }
812
+
813
+ .wb-row__trailing.wb-scope-list-row {
814
+ flex: none;
815
+ max-width: 40%;
816
+ font-size: var(--wb-type-label-size);
817
+ line-height: var(--wb-type-label-line);
818
+ letter-spacing: var(--wb-type-label-tracking);
819
+ font-stretch: var(--wb-type-label-width);
820
+ font-weight: var(--wb-type-label-weight);
821
+ color: var(--wb-on-surface-variant);
822
+ white-space: nowrap;
823
+ overflow: hidden;
824
+ text-overflow: ellipsis;
825
+ }
826
+
827
+ .wb-row__trailing--countdown.wb-scope-list-row {
828
+ color: var(--wb-accent);
829
+ }
830
+
831
+ /* Tile rows: plain text lines, no chip. */
832
+ .wb-row--compact.wb-scope-list-row {
833
+ min-height: 0;
834
+ padding: var(--wb-space-xxs) 0;
835
+ gap: var(--wb-space-s);
836
+ border-radius: var(--wb-radius-small);
837
+ background: transparent;
838
+ }
839
+
840
+ .wb-row--compact .wb-row__title.wb-scope-list-row,
841
+ .wb-row--compact .wb-row__trailing.wb-scope-list-row {
842
+ font-size: var(--wb-type-body-size);
843
+ line-height: var(--wb-type-body-line);
844
+ font-weight: var(--wb-type-body-weight);
845
+ letter-spacing: var(--wb-type-body-tracking);
846
+ font-stretch: var(--wb-type-body-width);
847
+ }
848
+
849
+ .wb-ambient .wb-row:not(.wb-row--compact).wb-scope-list-row {
850
+ background: transparent;
851
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
852
+ }
853
+
854
+ .wb-ambient .wb-row__badge.wb-scope-list-row {
855
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
856
+ }
857
+ /* Wear M3 Button: 52dp min height, CornerLarge (26dp) shape, 14dp x 6dp content padding, 26dp icon, 6dp icon gap. */
858
+ .wb-button.wb-scope-button-view {
859
+ display: flex;
860
+ align-items: center;
861
+ justify-content: center;
862
+ gap: var(--wb-button-icon-spacing);
863
+ width: 100%;
864
+ min-height: var(--wb-chip-height);
865
+ padding: var(--wb-button-padding-y) var(--wb-button-padding-x);
866
+ border: none;
867
+ border-radius: var(--wb-radius-large);
868
+ font: inherit;
869
+ font-size: var(--wb-type-label-size);
870
+ line-height: var(--wb-type-label-line);
871
+ letter-spacing: var(--wb-type-label-tracking);
872
+ font-stretch: var(--wb-type-label-width);
873
+ font-weight: var(--wb-type-label-weight);
874
+ cursor: pointer;
875
+ min-width: 0;
876
+ }
877
+
878
+ .wb-button--icon.wb-scope-button-view {
879
+ justify-content: flex-start;
880
+ }
881
+
882
+ .wb-button.wb-scope-button-view .wb-button__icon {
883
+ width: var(--wb-button-icon);
884
+ height: var(--wb-button-icon);
885
+ }
886
+
887
+ .wb-button--primary.wb-scope-button-view {
888
+ background: var(--wb-accent-fill);
889
+ color: var(--wb-on-accent);
890
+ }
891
+
892
+ .wb-button--secondary.wb-scope-button-view {
893
+ background: var(--wb-surface);
894
+ color: var(--wb-on-surface);
895
+ }
896
+
897
+ .wb-button--secondary.wb-scope-button-view .wb-button__icon {
898
+ color: var(--wb-accent);
899
+ }
900
+
901
+ .wb-button:active:not(:disabled).wb-scope-button-view {
902
+ transform: scale(0.96);
903
+ filter: brightness(1.15);
904
+ transition: transform 80ms ease-out;
905
+ }
906
+
907
+ .wb-button--disabled.wb-scope-button-view {
908
+ opacity: 0.38;
909
+ cursor: default;
910
+ }
911
+
912
+ .wb-button__label.wb-scope-button-view {
913
+ display: -webkit-box;
914
+ -webkit-box-orient: vertical;
915
+ -webkit-line-clamp: 2;
916
+ overflow: hidden;
917
+ text-align: start;
918
+ overflow-wrap: anywhere;
919
+ }
920
+
921
+ .wb-button:not(.wb-button--icon) .wb-button__label.wb-scope-button-view {
922
+ text-align: center;
923
+ }
924
+
925
+ .wb-ambient .wb-button.wb-scope-button-view {
926
+ background: transparent;
927
+ color: var(--wb-on-surface);
928
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
929
+ }
930
+ .wb-countdown.wb-scope-countdown-view {
931
+ display: flex;
932
+ flex-direction: column;
933
+ align-items: center;
934
+ min-width: 0;
935
+ }
936
+
937
+ .wb-countdown__value.wb-scope-countdown-view {
938
+ font-family: var(--wb-font-numeral);
939
+ font-size: var(--wb-type-display-size);
940
+ line-height: var(--wb-type-display-line);
941
+ letter-spacing: var(--wb-type-display-tracking);
942
+ font-stretch: var(--wb-type-display-width);
943
+ font-weight: var(--wb-type-display-weight);
944
+ color: var(--wb-accent);
945
+ white-space: nowrap;
946
+ }
947
+
948
+ .wb-countdown__label.wb-scope-countdown-view {
949
+ font-size: var(--wb-type-caption-size);
950
+ line-height: var(--wb-type-caption-line);
951
+ font-weight: var(--wb-type-caption-weight);
952
+ letter-spacing: var(--wb-type-caption-tracking);
953
+ font-stretch: var(--wb-type-caption-width);
954
+ color: var(--wb-on-surface-variant);
955
+ text-align: center;
956
+ }
957
+
958
+ .wb-countdown.wb-scope-countdown-view .wb-countdown__skeleton {
959
+ height: var(--wb-type-display-size);
960
+ }
961
+ .wb-error-node.wb-scope-error-view {
962
+ display: flex;
963
+ align-items: center;
964
+ gap: var(--wb-space-s);
965
+ min-height: var(--wb-compact-chip-height);
966
+ padding: var(--wb-space-xs) var(--wb-space-l);
967
+ border-radius: var(--wb-radius-large);
968
+ background: color-mix(in srgb, var(--wb-status-error) 18%, var(--wb-bg));
969
+ color: var(--wb-status-error);
970
+ min-width: 0;
971
+ }
972
+
973
+ .wb-error-node__text.wb-scope-error-view {
974
+ display: flex;
975
+ flex-direction: column;
976
+ min-width: 0;
977
+ }
978
+
979
+ .wb-error-node__title.wb-scope-error-view {
980
+ font-size: var(--wb-type-caption-size);
981
+ line-height: var(--wb-type-caption-line);
982
+ letter-spacing: var(--wb-type-caption-tracking);
983
+ font-stretch: var(--wb-type-caption-width);
984
+ font-weight: var(--wb-type-label-weight);
985
+ white-space: nowrap;
986
+ overflow: hidden;
987
+ text-overflow: ellipsis;
988
+ }
989
+
990
+ .wb-error-node__message.wb-scope-error-view {
991
+ font-size: var(--wb-type-caption-size);
992
+ line-height: var(--wb-type-caption-line);
993
+ font-weight: var(--wb-type-caption-weight);
994
+ letter-spacing: var(--wb-type-caption-tracking);
995
+ font-stretch: var(--wb-type-caption-width);
996
+ color: var(--wb-on-surface-variant);
997
+ display: -webkit-box;
998
+ -webkit-box-orient: vertical;
999
+ -webkit-line-clamp: 2;
1000
+ overflow: hidden;
1001
+ }
1002
+
1003
+ .wb-ambient .wb-error-node.wb-scope-error-view {
1004
+ background: transparent;
1005
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
1006
+ }
1007
+ .wb-icon-node.wb-scope-icon-view {
1008
+ display: flex;
1009
+ justify-content: center;
1010
+ align-items: center;
1011
+ color: var(--wb-accent);
1012
+ }
1013
+ .wb-list.wb-scope-list-view {
1014
+ display: flex;
1015
+ flex-direction: column;
1016
+ gap: var(--wb-space-xs);
1017
+ min-width: 0;
1018
+ }
1019
+
1020
+ /* Wear M3 ListHeader: centred titleMedium, 48dp min height, padding 16dp top / 14dp sides / 12dp bottom. */
1021
+ .wb-list__header.wb-scope-list-view {
1022
+ display: flex;
1023
+ align-items: center;
1024
+ justify-content: center;
1025
+ min-height: var(--wb-list-header-min-height);
1026
+ text-align: center;
1027
+ font-size: var(--wb-type-title-size);
1028
+ line-height: var(--wb-type-title-line);
1029
+ letter-spacing: var(--wb-type-title-tracking);
1030
+ font-stretch: var(--wb-type-title-width);
1031
+ font-weight: var(--wb-type-title-weight);
1032
+ color: var(--wb-on-surface);
1033
+ padding: var(--wb-list-header-padding-top) var(--wb-list-header-padding-x) var(--wb-list-header-padding-bottom);
1034
+ }
1035
+
1036
+ .wb-list__placeholder.wb-scope-list-view {
1037
+ display: flex;
1038
+ align-items: center;
1039
+ gap: var(--wb-space-m);
1040
+ min-height: var(--wb-list-row-min-height);
1041
+ padding: 0 var(--wb-space-l);
1042
+ border-radius: var(--wb-radius-large);
1043
+ background: var(--wb-surface);
1044
+ }
1045
+
1046
+ .wb-list__placeholder-text.wb-scope-list-view {
1047
+ display: flex;
1048
+ flex-direction: column;
1049
+ flex: 1;
1050
+ }
1051
+
1052
+ .wb-list__placeholder-text.wb-scope-list-view .wb-skeleton {
1053
+ margin-left: 0;
1054
+ }
1055
+
1056
+ .wb-list__empty.wb-scope-list-view {
1057
+ padding: var(--wb-space-l) var(--wb-space-m);
1058
+ text-align: center;
1059
+ color: var(--wb-on-surface-variant);
1060
+ font-size: var(--wb-type-body-size);
1061
+ line-height: var(--wb-type-body-line);
1062
+ font-weight: var(--wb-type-body-weight);
1063
+ letter-spacing: var(--wb-type-body-tracking);
1064
+ font-stretch: var(--wb-type-body-width);
1065
+ }
1066
+
1067
+ .wb-list__more.wb-scope-list-view {
1068
+ text-align: center;
1069
+ color: var(--wb-on-surface-variant);
1070
+ font-size: var(--wb-type-caption-size);
1071
+ line-height: var(--wb-type-caption-line);
1072
+ font-weight: var(--wb-type-caption-weight);
1073
+ letter-spacing: var(--wb-type-caption-tracking);
1074
+ font-stretch: var(--wb-type-caption-width);
1075
+ padding-top: var(--wb-space-xxs);
1076
+ }
1077
+
1078
+ .wb-ambient .wb-list__placeholder.wb-scope-list-view {
1079
+ background: transparent;
1080
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
1081
+ }
1082
+ .wb-placeholder.wb-scope-placeholder-view {
1083
+ display: flex;
1084
+ flex-direction: column;
1085
+ align-items: center;
1086
+ gap: var(--wb-space-xs);
1087
+ min-width: 0;
1088
+ }
1089
+
1090
+ .wb-placeholder--list.wb-scope-placeholder-view,
1091
+ .wb-placeholder--button.wb-scope-placeholder-view,
1092
+ .wb-placeholder--toggle.wb-scope-placeholder-view,
1093
+ .wb-placeholder--status.wb-scope-placeholder-view {
1094
+ align-items: stretch;
1095
+ }
1096
+
1097
+ .wb-placeholder__chip.wb-scope-placeholder-view {
1098
+ display: flex;
1099
+ align-items: center;
1100
+ gap: var(--wb-space-m);
1101
+ min-height: var(--wb-chip-height);
1102
+ padding: 0 var(--wb-space-l);
1103
+ border-radius: var(--wb-radius-full);
1104
+ background: var(--wb-surface);
1105
+ }
1106
+
1107
+ .wb-placeholder__lines.wb-scope-placeholder-view {
1108
+ display: flex;
1109
+ flex-direction: column;
1110
+ flex: 1;
1111
+ }
1112
+
1113
+ .wb-placeholder__lines.wb-scope-placeholder-view .wb-skeleton {
1114
+ margin-left: 0;
1115
+ }
1116
+
1117
+ .wb-placeholder.wb-scope-placeholder-view .wb-placeholder__big {
1118
+ height: var(--wb-type-numeral-size);
1119
+ }
1120
+
1121
+ .wb-placeholder.wb-scope-placeholder-view .wb-placeholder__ring {
1122
+ width: var(--wb-progress-ring-size);
1123
+ height: var(--wb-progress-ring-size);
1124
+ }
1125
+
1126
+ .wb-ambient .wb-placeholder__chip.wb-scope-placeholder-view {
1127
+ background: transparent;
1128
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
1129
+ }
1130
+ .wb-progress.wb-scope-progress-view {
1131
+ display: flex;
1132
+ flex-direction: column;
1133
+ align-items: center;
1134
+ gap: var(--wb-space-xs);
1135
+ min-width: 0;
1136
+ }
1137
+
1138
+ .wb-progress__ring.wb-scope-progress-view {
1139
+ position: relative;
1140
+ width: var(--wb-progress-ring-size);
1141
+ height: var(--wb-progress-ring-size);
1142
+ }
1143
+
1144
+ .wb-progress__ring .wb-progress__value.wb-scope-progress-view {
1145
+ position: absolute;
1146
+ inset: 0;
1147
+ display: grid;
1148
+ place-items: center;
1149
+ font-size: var(--wb-type-title-size);
1150
+ line-height: var(--wb-type-title-line);
1151
+ letter-spacing: var(--wb-type-title-tracking);
1152
+ font-stretch: var(--wb-type-title-width);
1153
+ font-weight: var(--wb-type-title-weight);
1154
+ }
1155
+
1156
+ .wb-progress__label.wb-scope-progress-view {
1157
+ font-size: var(--wb-type-caption-size);
1158
+ line-height: var(--wb-type-caption-line);
1159
+ font-weight: var(--wb-type-caption-weight);
1160
+ letter-spacing: var(--wb-type-caption-tracking);
1161
+ font-stretch: var(--wb-type-caption-width);
1162
+ color: var(--wb-on-surface-variant);
1163
+ text-align: center;
1164
+ min-width: 0;
1165
+ white-space: nowrap;
1166
+ overflow: hidden;
1167
+ text-overflow: ellipsis;
1168
+ }
1169
+
1170
+ .wb-progress--bar.wb-scope-progress-view {
1171
+ align-items: stretch;
1172
+ padding: 0 var(--wb-space-m);
1173
+ }
1174
+
1175
+ .wb-progress__caption.wb-scope-progress-view {
1176
+ display: flex;
1177
+ justify-content: space-between;
1178
+ align-items: baseline;
1179
+ gap: var(--wb-space-m);
1180
+ }
1181
+
1182
+ .wb-progress--bar .wb-progress__value.wb-scope-progress-view {
1183
+ font-size: var(--wb-type-label-size);
1184
+ line-height: var(--wb-type-label-line);
1185
+ letter-spacing: var(--wb-type-label-tracking);
1186
+ font-stretch: var(--wb-type-label-width);
1187
+ font-weight: var(--wb-type-label-weight);
1188
+ }
1189
+
1190
+ .wb-progress__track.wb-scope-progress-view {
1191
+ height: var(--wb-progress-bar-height);
1192
+ border-radius: var(--wb-radius-full);
1193
+ background: var(--wb-track);
1194
+ overflow: hidden;
1195
+ }
1196
+
1197
+ .wb-progress__fill.wb-scope-progress-view {
1198
+ height: 100%;
1199
+ border-radius: inherit;
1200
+ background: var(--wb-accent);
1201
+ transition: width 300ms ease-out;
1202
+ }
1203
+
1204
+ .wb-progress__track--loading.wb-scope-progress-view {
1205
+ background: var(--wb-skeleton);
1206
+ }
1207
+
1208
+ .wb-ambient .wb-progress__track.wb-scope-progress-view {
1209
+ background: transparent;
1210
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
1211
+ }
1212
+ .wb-stack.wb-scope-stack-view {
1213
+ display: flex;
1214
+ flex-direction: column;
1215
+ gap: var(--wb-space-xs);
1216
+ min-width: 0;
1217
+ }
1218
+
1219
+ .wb-stack__header.wb-scope-stack-view {
1220
+ text-align: center;
1221
+ font-size: var(--wb-type-title-size);
1222
+ line-height: var(--wb-type-title-line);
1223
+ letter-spacing: var(--wb-type-title-tracking);
1224
+ font-stretch: var(--wb-type-title-width);
1225
+ font-weight: var(--wb-type-title-weight);
1226
+ color: var(--wb-accent);
1227
+ padding-bottom: var(--wb-space-xs);
1228
+ }
1229
+
1230
+ .wb-stack__children.wb-scope-stack-view {
1231
+ display: flex;
1232
+ flex-direction: column;
1233
+ align-items: stretch;
1234
+ gap: var(--wb-space-s);
1235
+ min-width: 0;
1236
+ }
1237
+
1238
+ .wb-stack--horizontal > .wb-stack__children.wb-scope-stack-view {
1239
+ flex-direction: row;
1240
+ justify-content: center;
1241
+ align-items: center;
1242
+ gap: var(--wb-space-m);
1243
+ }
1244
+
1245
+ /* Content-sized basis, so a small icon next to a stat does not take half the row. */
1246
+ .wb-stack--horizontal > .wb-stack__children.wb-scope-stack-view > * {
1247
+ flex: 1 1 auto;
1248
+ min-width: 0;
1249
+ }
1250
+ .wb-status.wb-scope-status-view {
1251
+ --wb-status-color: var(--wb-status-unknown);
1252
+ display: flex;
1253
+ align-items: center;
1254
+ gap: var(--wb-space-m);
1255
+ min-height: var(--wb-list-row-min-height);
1256
+ padding: var(--wb-space-s) var(--wb-space-l);
1257
+ border-radius: var(--wb-radius-large);
1258
+ background: var(--wb-surface);
1259
+ min-width: 0;
1260
+ }
1261
+
1262
+ .wb-status--ok.wb-scope-status-view { --wb-status-color: var(--wb-status-ok); }
1263
+ .wb-status--warn.wb-scope-status-view { --wb-status-color: var(--wb-status-warn); }
1264
+ .wb-status--error.wb-scope-status-view { --wb-status-color: var(--wb-status-error); }
1265
+
1266
+ .wb-status__badge.wb-scope-status-view {
1267
+ display: grid;
1268
+ place-items: center;
1269
+ flex: none;
1270
+ width: var(--wb-status-icon);
1271
+ height: var(--wb-status-icon);
1272
+ border-radius: var(--wb-radius-full);
1273
+ background: var(--wb-status-color);
1274
+ color: var(--wb-bg);
1275
+ }
1276
+
1277
+ .wb-status__text.wb-scope-status-view {
1278
+ display: flex;
1279
+ flex-direction: column;
1280
+ flex: 1;
1281
+ min-width: 0;
1282
+ }
1283
+
1284
+ .wb-status__label.wb-scope-status-view {
1285
+ font-size: var(--wb-type-label-size);
1286
+ line-height: var(--wb-type-label-line);
1287
+ letter-spacing: var(--wb-type-label-tracking);
1288
+ font-stretch: var(--wb-type-label-width);
1289
+ font-weight: var(--wb-type-label-weight);
1290
+ white-space: nowrap;
1291
+ overflow: hidden;
1292
+ text-overflow: ellipsis;
1293
+ }
1294
+
1295
+ .wb-status__detail.wb-scope-status-view {
1296
+ font-size: var(--wb-type-caption-size);
1297
+ line-height: var(--wb-type-caption-line);
1298
+ font-weight: var(--wb-type-caption-weight);
1299
+ letter-spacing: var(--wb-type-caption-tracking);
1300
+ font-stretch: var(--wb-type-caption-width);
1301
+ color: var(--wb-on-surface-variant);
1302
+ display: -webkit-box;
1303
+ -webkit-box-orient: vertical;
1304
+ -webkit-line-clamp: 2;
1305
+ overflow: hidden;
1306
+ }
1307
+
1308
+ .wb-ambient .wb-status.wb-scope-status-view {
1309
+ background: transparent;
1310
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
1311
+ }
1312
+
1313
+ .wb-ambient .wb-status__badge.wb-scope-status-view {
1314
+ background: transparent;
1315
+ color: var(--wb-on-surface);
1316
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
1317
+ }
1318
+ .wb-stat.wb-scope-stat-view {
1319
+ display: flex;
1320
+ flex-direction: column;
1321
+ align-items: center;
1322
+ min-width: 0;
1323
+ }
1324
+
1325
+ .wb-stat__value-row.wb-scope-stat-view {
1326
+ display: flex;
1327
+ align-items: baseline;
1328
+ justify-content: center;
1329
+ gap: var(--wb-space-xs);
1330
+ max-width: 100%;
1331
+ }
1332
+
1333
+ .wb-stat__value.wb-scope-stat-view {
1334
+ font-family: var(--wb-font-numeral);
1335
+ font-size: var(--wb-type-numeral-size);
1336
+ line-height: var(--wb-type-numeral-line);
1337
+ letter-spacing: var(--wb-type-numeral-tracking);
1338
+ font-stretch: var(--wb-type-numeral-width);
1339
+ font-weight: var(--wb-type-numeral-weight);
1340
+ color: var(--wb-accent);
1341
+ white-space: nowrap;
1342
+ overflow: hidden;
1343
+ text-overflow: ellipsis;
1344
+ }
1345
+
1346
+ .wb-stat__unit.wb-scope-stat-view {
1347
+ font-size: var(--wb-type-title-size);
1348
+ line-height: var(--wb-type-title-line);
1349
+ font-weight: var(--wb-type-title-weight);
1350
+ letter-spacing: var(--wb-type-title-tracking);
1351
+ font-stretch: var(--wb-type-title-width);
1352
+ color: var(--wb-on-surface-variant);
1353
+ white-space: nowrap;
1354
+ }
1355
+
1356
+ .wb-stat__label.wb-scope-stat-view {
1357
+ font-size: var(--wb-type-caption-size);
1358
+ line-height: var(--wb-type-caption-line);
1359
+ font-weight: var(--wb-type-caption-weight);
1360
+ letter-spacing: var(--wb-type-caption-tracking);
1361
+ font-stretch: var(--wb-type-caption-width);
1362
+ color: var(--wb-on-surface-variant);
1363
+ text-align: center;
1364
+ }
1365
+
1366
+ .wb-stat__trend.wb-scope-stat-view {
1367
+ align-self: center;
1368
+ width: var(--wb-icon-small);
1369
+ height: var(--wb-icon-small);
1370
+ fill: currentColor;
1371
+ }
1372
+
1373
+ .wb-stat__trend--up.wb-scope-stat-view { color: var(--wb-status-ok); }
1374
+ .wb-stat__trend--down.wb-scope-stat-view { color: var(--wb-status-error); }
1375
+ .wb-stat__trend--flat.wb-scope-stat-view { color: var(--wb-on-surface-variant); }
1376
+
1377
+ .wb-stat.wb-scope-stat-view .wb-stat__icon {
1378
+ color: var(--wb-accent);
1379
+ margin-bottom: var(--wb-space-xxs);
1380
+ }
1381
+
1382
+ .wb-stat.wb-scope-stat-view .wb-stat__skeleton {
1383
+ height: var(--wb-type-numeral-size);
1384
+ margin: var(--wb-space-xxs) auto;
1385
+ }
1386
+ .wb-text.wb-scope-text-view {
1387
+ display: -webkit-box;
1388
+ -webkit-box-orient: vertical;
1389
+ overflow: hidden;
1390
+ text-align: center;
1391
+ overflow-wrap: anywhere;
1392
+ color: var(--wb-on-surface);
1393
+ font-size: var(--wb-type-body-size);
1394
+ line-height: var(--wb-type-body-line);
1395
+ letter-spacing: var(--wb-type-body-tracking);
1396
+ font-stretch: var(--wb-type-body-width);
1397
+ font-weight: var(--wb-type-body-weight);
1398
+ }
1399
+
1400
+ .wb-text--title.wb-scope-text-view {
1401
+ font-size: var(--wb-type-title-size);
1402
+ line-height: var(--wb-type-title-line);
1403
+ letter-spacing: var(--wb-type-title-tracking);
1404
+ font-stretch: var(--wb-type-title-width);
1405
+ font-weight: var(--wb-type-title-weight);
1406
+ }
1407
+
1408
+ .wb-text--display.wb-scope-text-view {
1409
+ font-size: var(--wb-type-display-size);
1410
+ line-height: var(--wb-type-display-line);
1411
+ letter-spacing: var(--wb-type-display-tracking);
1412
+ font-stretch: var(--wb-type-display-width);
1413
+ font-weight: var(--wb-type-display-weight);
1414
+ }
1415
+
1416
+ .wb-text--caption.wb-scope-text-view {
1417
+ font-size: var(--wb-type-caption-size);
1418
+ line-height: var(--wb-type-caption-line);
1419
+ letter-spacing: var(--wb-type-caption-tracking);
1420
+ font-stretch: var(--wb-type-caption-width);
1421
+ font-weight: var(--wb-type-caption-weight);
1422
+ color: var(--wb-on-surface-variant);
1423
+ }
1424
+
1425
+ .wb-text--clamp.wb-scope-text-view {
1426
+ text-overflow: ellipsis;
1427
+ }
1428
+
1429
+ .wb-text--loading.wb-scope-text-view {
1430
+ display: block;
1431
+ }
1432
+ /* Wear M3 SwitchButton: 52dp min height, CornerLarge, 14dp x 8dp padding, 6dp icon and control spacing;
1433
+ switch 32 x 22dp with a 2dp track border, thumb 12dp off / 18dp on. */
1434
+ .wb-toggle.wb-scope-toggle-view {
1435
+ display: flex;
1436
+ align-items: center;
1437
+ gap: var(--wb-toggle-spacing);
1438
+ width: 100%;
1439
+ min-height: var(--wb-chip-height);
1440
+ padding: var(--wb-switch-padding-y) var(--wb-button-padding-x);
1441
+ border: none;
1442
+ border-radius: var(--wb-radius-large);
1443
+ background: var(--wb-surface);
1444
+ color: var(--wb-on-surface);
1445
+ font: inherit;
1446
+ text-align: start;
1447
+ cursor: pointer;
1448
+ transition: background-color 150ms ease-out;
1449
+ min-width: 0;
1450
+ }
1451
+
1452
+ .wb-toggle--on.wb-scope-toggle-view {
1453
+ background: var(--wb-accent-container);
1454
+ color: var(--wb-on-accent-container);
1455
+ }
1456
+
1457
+ .wb-toggle.wb-scope-toggle-view .wb-toggle__icon {
1458
+ color: var(--wb-accent);
1459
+ width: var(--wb-button-icon);
1460
+ height: var(--wb-button-icon);
1461
+ }
1462
+
1463
+ .wb-toggle__label.wb-scope-toggle-view {
1464
+ flex: 1;
1465
+ min-width: 0;
1466
+ font-size: var(--wb-type-label-size);
1467
+ line-height: var(--wb-type-label-line);
1468
+ letter-spacing: var(--wb-type-label-tracking);
1469
+ font-stretch: var(--wb-type-label-width);
1470
+ font-weight: var(--wb-type-label-weight);
1471
+ display: -webkit-box;
1472
+ -webkit-box-orient: vertical;
1473
+ -webkit-line-clamp: 2;
1474
+ overflow: hidden;
1475
+ }
1476
+
1477
+ .wb-toggle__switch.wb-scope-toggle-view {
1478
+ position: relative;
1479
+ flex: none;
1480
+ width: var(--wb-toggle-width);
1481
+ height: var(--wb-toggle-height);
1482
+ border-radius: var(--wb-radius-full);
1483
+ box-shadow: inset 0 0 0 var(--wb-toggle-track-border) var(--wb-outline);
1484
+ transition: background-color 150ms ease-out;
1485
+ }
1486
+
1487
+ .wb-toggle__thumb.wb-scope-toggle-view {
1488
+ position: absolute;
1489
+ top: 50%;
1490
+ left: calc((var(--wb-toggle-height) - var(--wb-toggle-thumb-off)) / 2);
1491
+ width: var(--wb-toggle-thumb-off);
1492
+ height: var(--wb-toggle-thumb-off);
1493
+ border-radius: var(--wb-radius-full);
1494
+ background: var(--wb-outline);
1495
+ transform: translateY(-50%);
1496
+ transition: left 150ms ease-out, width 150ms ease-out, height 150ms ease-out, background-color 150ms ease-out;
1497
+ }
1498
+
1499
+ .wb-toggle--on .wb-toggle__switch.wb-scope-toggle-view {
1500
+ background: var(--wb-accent-fill);
1501
+ box-shadow: none;
1502
+ }
1503
+
1504
+ .wb-toggle--on .wb-toggle__thumb.wb-scope-toggle-view {
1505
+ left: calc(var(--wb-toggle-width) - var(--wb-toggle-thumb) - (var(--wb-toggle-height) - var(--wb-toggle-thumb)) / 2);
1506
+ width: var(--wb-toggle-thumb);
1507
+ height: var(--wb-toggle-thumb);
1508
+ background: var(--wb-on-accent);
1509
+ }
1510
+
1511
+ .wb-ambient .wb-toggle.wb-scope-toggle-view {
1512
+ background: transparent;
1513
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
1514
+ }
1515
+
1516
+ .wb-ambient .wb-toggle--on .wb-toggle__switch.wb-scope-toggle-view {
1517
+ box-shadow: inset 0 0 0 var(--wb-toggle-track-border) var(--wb-on-surface);
1518
+ }
1519
+
1520
+ .wb-ambient .wb-toggle--on .wb-toggle__thumb.wb-scope-toggle-view {
1521
+ background: var(--wb-on-surface);
1522
+ }
1523
+
1524
+ /* Tile variant: ProtoLayout M3 button (52dp, 14 x 6dp padding) with label and an On / Off secondary label. */
1525
+ .wb-toggle--tile.wb-scope-toggle-view {
1526
+ padding: var(--wb-button-padding-y) var(--wb-button-padding-x);
1527
+ gap: var(--wb-button-icon-spacing);
1528
+ }
1529
+
1530
+ .wb-toggle__text.wb-scope-toggle-view {
1531
+ display: flex;
1532
+ flex-direction: column;
1533
+ flex: 1;
1534
+ min-width: 0;
1535
+ }
1536
+
1537
+ .wb-toggle__state.wb-scope-toggle-view {
1538
+ font-size: var(--wb-type-label-small-size);
1539
+ line-height: var(--wb-type-label-small-line);
1540
+ letter-spacing: var(--wb-type-label-small-tracking);
1541
+ font-stretch: var(--wb-type-label-small-width);
1542
+ font-weight: var(--wb-type-label-small-weight);
1543
+ color: var(--wb-on-surface-variant);
1544
+ }
1545
+
1546
+ .wb-toggle--on .wb-toggle__state.wb-scope-toggle-view {
1547
+ color: var(--wb-on-accent-container);
1548
+ }
1549
+ .wb-ring.wb-scope-progress-ring {
1550
+ display: block;
1551
+ width: 100%;
1552
+ height: 100%;
1553
+ overflow: visible;
1554
+ }
1555
+
1556
+ .wb-ring path.wb-scope-progress-ring {
1557
+ fill: none;
1558
+ stroke-linecap: round;
1559
+ vector-effect: non-scaling-stroke;
1560
+ }
1561
+
1562
+ .wb-ring__track.wb-scope-progress-ring { stroke: var(--wb-track); }
1563
+ .wb-ring__fill.wb-scope-progress-ring { stroke: var(--wb-accent); }
1564
+ .wb-screen-view.wb-scope-screen-view {
1565
+ position: relative;
1566
+ width: 100%;
1567
+ height: 100%;
1568
+ timeline-scope: --wb-scroll;
1569
+ }
1570
+
1571
+ .wb-screen-view.wb-scope-screen-view .wb-time-text {
1572
+ color: var(--wb-time-text);
1573
+ }
1574
+
1575
+ .wb-screen-view.wb-scope-screen-view .wb-stale-hint {
1576
+ color: var(--wb-status-warn);
1577
+ font-size: var(--wb-type-caption-size);
1578
+ font-weight: var(--wb-type-caption-weight);
1579
+ letter-spacing: var(--wb-type-caption-tracking);
1580
+ font-stretch: var(--wb-type-caption-width);
1581
+ }
1582
+
1583
+ .wb-scroll.wb-scope-screen-view {
1584
+ height: 100%;
1585
+ overflow-y: auto;
1586
+ overflow-x: hidden;
1587
+ scrollbar-width: none;
1588
+ scroll-timeline: --wb-scroll y;
1589
+ }
1590
+
1591
+ .wb-scroll.wb-scope-screen-view::-webkit-scrollbar {
1592
+ display: none;
1593
+ }
1594
+
1595
+ /* Content is centred vertically when it fits, and scrolls from the top padding when it does not. */
1596
+ .wb-content.wb-scope-screen-view {
1597
+ min-height: 100%;
1598
+ display: flex;
1599
+ flex-direction: column;
1600
+ justify-content: safe center;
1601
+ gap: var(--wb-space-s);
1602
+ padding: var(--wb-pad-top) var(--wb-pad-x) var(--wb-pad-bottom);
1603
+ }
1604
+
1605
+ /* TransformingLazyColumn: items shrink and fade as they approach the top and bottom edges. Like the Wear app, a vertical
1606
+ root stack and the lists in it are flattened: the stack header, every other child, and each list header, row and
1607
+ footer transform on their own. */
1608
+ @supports (animation-timeline: view()) {
1609
+ .wb-screen-view--round .wb-content.wb-scope-screen-view > .wb-stack--vertical > .wb-stack__header,
1610
+ .wb-screen-view--round .wb-content.wb-scope-screen-view > .wb-stack--vertical > .wb-stack__children > :not(.wb-list),
1611
+ .wb-screen-view--round .wb-content.wb-scope-screen-view > .wb-stack--vertical > .wb-stack__children > .wb-list > *,
1612
+ .wb-screen-view--round .wb-content.wb-scope-screen-view > .wb-list > *,
1613
+ .wb-screen-view--round .wb-content.wb-scope-screen-view > :not(.wb-stack--vertical):not(.wb-list):not(.wb-data-error) {
1614
+ /* androidx ResponsiveTransformationSpec: within --wb-edge-zone of the bottom (measured to the item's top) or the
1615
+ top (to its bottom) the item scales and fades towards the edge values, anchored at its inner edge. */
1616
+ animation-name: wb-edge-in, wb-edge-out;
1617
+ animation-timing-function: cubic-bezier(0.3, 0, 0.7, 1);
1618
+ animation-fill-mode: both, none;
1619
+ animation-timeline: view(), view();
1620
+ animation-range: cover 0px cover var(--wb-edge-zone), cover calc(100% - var(--wb-edge-zone)) cover 100%;
1621
+ }
1622
+ }
1623
+
1624
+ @keyframes wb-edge-in {
1625
+ from { scale: var(--wb-edge-scale); opacity: var(--wb-edge-opacity); transform-origin: 50% 0; }
1626
+ to { scale: 1; opacity: 1; transform-origin: 50% 0; }
1627
+ }
1628
+
1629
+ @keyframes wb-edge-out {
1630
+ from { scale: 1; opacity: 1; transform-origin: 50% 100%; }
1631
+ to { scale: var(--wb-edge-scale); opacity: var(--wb-edge-opacity); transform-origin: 50% 100%; }
1632
+ }
1633
+
1634
+ /* The M3 ScrollIndicator on the right edge (round and square screens): its segments are set by wear.ts, which hides it
1635
+ while the column fits. */
1636
+ .wb-position-indicator.wb-scope-screen-view {
1637
+ position: absolute;
1638
+ inset: 0;
1639
+ width: 100%;
1640
+ height: 100%;
1641
+ pointer-events: none;
1642
+ fill: none;
1643
+ stroke-linecap: round;
1644
+ }
1645
+
1646
+ .wb-position-indicator__track.wb-scope-screen-view { stroke: var(--wb-scroll-track); }
1647
+ .wb-position-indicator__thumb.wb-scope-screen-view { stroke: var(--wb-scroll-thumb); }
1648
+
1649
+ /* Data error: a compact alert chip above the content; values below stay as last known. */
1650
+ .wb-data-error.wb-scope-screen-view {
1651
+ display: flex;
1652
+ align-items: center;
1653
+ gap: var(--wb-space-s);
1654
+ padding: var(--wb-space-xs) var(--wb-space-l);
1655
+ border-radius: var(--wb-radius-medium);
1656
+ background: color-mix(in srgb, var(--wb-status-error) 22%, var(--wb-bg));
1657
+ color: var(--wb-status-error);
1658
+ min-width: 0;
1659
+ }
1660
+
1661
+ .wb-data-error__text.wb-scope-screen-view {
1662
+ display: flex;
1663
+ flex-direction: column;
1664
+ min-width: 0;
1665
+ }
1666
+
1667
+ .wb-data-error__title.wb-scope-screen-view {
1668
+ font-size: var(--wb-type-caption-size);
1669
+ line-height: var(--wb-type-caption-line);
1670
+ letter-spacing: var(--wb-type-caption-tracking);
1671
+ font-stretch: var(--wb-type-caption-width);
1672
+ font-weight: var(--wb-type-label-weight);
1673
+ }
1674
+
1675
+ .wb-data-error__detail.wb-scope-screen-view {
1676
+ font-size: var(--wb-type-caption-size);
1677
+ line-height: var(--wb-type-caption-line);
1678
+ font-weight: var(--wb-type-caption-weight);
1679
+ letter-spacing: var(--wb-type-caption-tracking);
1680
+ font-stretch: var(--wb-type-caption-width);
1681
+ color: var(--wb-on-surface-variant);
1682
+ white-space: nowrap;
1683
+ overflow: hidden;
1684
+ text-overflow: ellipsis;
1685
+ }
1686
+
1687
+ .wb-ambient .wb-data-error.wb-scope-screen-view {
1688
+ background: transparent;
1689
+ box-shadow: inset 0 0 0 1px var(--wb-outline);
1690
+ }
1691
+ .wb-skeleton.wb-scope-skeleton {
1692
+ display: block;
1693
+ flex: none;
1694
+ background: linear-gradient(90deg, var(--wb-skeleton) 0%, var(--wb-surface) 50%, var(--wb-skeleton) 100%) 0 0 / 200% 100%;
1695
+ animation: wb-shimmer 1.4s linear infinite;
1696
+ border-radius: var(--wb-radius-full);
1697
+ }
1698
+
1699
+ .wb-skeleton--line.wb-scope-skeleton {
1700
+ height: var(--wb-skeleton-line);
1701
+ margin: var(--wb-space-xxs) auto;
1702
+ }
1703
+
1704
+ .wb-skeleton--block.wb-scope-skeleton {
1705
+ width: 100%;
1706
+ height: 100%;
1707
+ border-radius: inherit;
1708
+ }
1709
+
1710
+ .wb-skeleton--circle.wb-scope-skeleton {
1711
+ width: var(--wb-icon-medium);
1712
+ height: var(--wb-icon-medium);
1713
+ }
1714
+
1715
+ .wb-ambient .wb-skeleton.wb-scope-skeleton {
1716
+ background: transparent;
1717
+ border: 1px solid var(--wb-outline);
1718
+ animation: none;
1719
+ }
1720
+
1721
+ @keyframes wb-shimmer {
1722
+ from { background-position: 200% 0; }
1723
+ to { background-position: 0 0; }
1724
+ }
1725
+ .wb-unsupported.wb-scope-unsupported-view {
1726
+ margin: var(--wb-space-xs) auto;
1727
+ padding: var(--wb-space-s) var(--wb-space-l);
1728
+ border: 1px dashed var(--wb-outline);
1729
+ border-radius: var(--wb-radius-medium);
1730
+ color: var(--wb-on-surface-variant);
1731
+ font-size: var(--wb-type-caption-size);
1732
+ font-weight: var(--wb-type-caption-weight);
1733
+ letter-spacing: var(--wb-type-caption-tracking);
1734
+ font-stretch: var(--wb-type-caption-width);
1735
+ text-align: center;
1736
+ }
1737
+ .wb-icon.wb-scope-watch-icon {
1738
+ display: inline-block;
1739
+ flex: none;
1740
+ fill: currentColor;
1741
+ vertical-align: middle;
1742
+ }
1743
+
1744
+ .wb-icon--small.wb-scope-watch-icon { width: var(--wb-icon-small); height: var(--wb-icon-small); }
1745
+ .wb-icon--medium.wb-scope-watch-icon { width: var(--wb-icon-medium); height: var(--wb-icon-medium); }
1746
+ .wb-icon--large.wb-scope-watch-icon { width: var(--wb-icon-large); height: var(--wb-icon-large); }
1747
+ .wb-icon--fill.wb-scope-watch-icon { width: 100%; height: 100%; }
1748
+
1749
+ .wb-icon--image.wb-scope-watch-icon {
1750
+ object-fit: cover;
1751
+ border-radius: var(--wb-radius-full);
1752
+ }
1753
+
1754
+ .wb-icon--unknown.wb-scope-watch-icon { opacity: 0.6; }
1755
+
1756
+ .wb-ambient .wb-icon--image.wb-scope-watch-icon { filter: grayscale(1) brightness(0.7); }
1757
+ /* The overview grid. Labels take the host's text colour (the page around the watches, not the watch). */
1758
+ .wb-overview.wb-scope-watch-overview {
1759
+ display: flex;
1760
+ flex-wrap: wrap;
1761
+ justify-content: center;
1762
+ align-items: flex-start;
1763
+ gap: 28px 24px;
1764
+ }
1765
+
1766
+ .wb-overview__item.wb-scope-watch-overview {
1767
+ margin: 0;
1768
+ display: flex;
1769
+ flex-direction: column;
1770
+ align-items: center;
1771
+ gap: 10px;
1772
+ cursor: pointer;
1773
+ }
1774
+
1775
+ .wb-overview__watch.wb-scope-watch-overview {
1776
+ display: flex;
1777
+ align-items: center;
1778
+ justify-content: center;
1779
+ }
1780
+
1781
+ .wb-overview__label.wb-scope-watch-overview {
1782
+ font: 500 12px/1.3 system-ui, -apple-system, "Segoe UI", sans-serif;
1783
+ letter-spacing: 0.02em;
1784
+ color: inherit;
1785
+ opacity: 0.72;
1786
+ max-width: 220px;
1787
+ text-align: center;
1788
+ overflow: hidden;
1789
+ text-overflow: ellipsis;
1790
+ white-space: nowrap;
1791
+ }
1792
+ /* Roboto Flex (SIL OFL 1.1, see fonts/RobotoFlex-OFL.txt), self-hosted with the wght and wdth axes: the variable font
1793
+ Wear OS Material 3 uses ("roboto-flex"). URLs are relative to this file (styles/fonts/).
1794
+ Subsets from Google Fonts: latin and latin-ext. Other scripts fall back to Roboto / system fonts. */
1795
+ @font-face {
1796
+ font-family: 'Roboto Flex';
1797
+ font-style: normal;
1798
+ font-weight: 100 1000;
1799
+ font-stretch: 25% 151%;
1800
+ font-display: block;
1801
+ src: url('fonts/RobotoFlex-latin-ext.woff2') format('woff2');
1802
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
1803
+ }
1804
+
1805
+ @font-face {
1806
+ font-family: 'Roboto Flex';
1807
+ font-style: normal;
1808
+ font-weight: 100 1000;
1809
+ font-stretch: 25% 151%;
1810
+ font-display: block;
1811
+ src: url('fonts/RobotoFlex-latin.woff2') format('woff2');
1812
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
1813
+ }
1814
+
1815
+ .wb-preview.wb-scope-watch-preview {
1816
+ display: inline-block;
1817
+ font-family: var(--wb-font);
1818
+ color: var(--wb-on-surface);
1819
+ -webkit-font-smoothing: antialiased;
1820
+ line-height: normal;
1821
+ /* Like Compose for Wear OS: no faux bold/italic, proportional figures (TextStyle fontFeatureSettings "pnum"). */
1822
+ font-synthesis: none;
1823
+ font-variant-numeric: proportional-nums;
1824
+ }
1825
+
1826
+ .wb-preview.wb-scope-watch-preview *,
1827
+ .wb-preview.wb-scope-watch-preview *::before,
1828
+ .wb-preview.wb-scope-watch-preview *::after {
1829
+ box-sizing: border-box;
1830
+ }
1831
+
1832
+ /* Watch case: a dark ring around the display, sized from the display width. */
1833
+ .wb-case.wb-scope-watch-preview {
1834
+ padding: var(--wb-bezel);
1835
+ border-radius: 50%;
1836
+ background:
1837
+ radial-gradient(circle at 30% 25%, #4a4d52 0%, #24262a 45%, #101114 75%),
1838
+ #16171a;
1839
+ box-shadow:
1840
+ 0 0 0 1px #2e3035,
1841
+ 0 0 0 calc(var(--wb-bezel) * 0.18) #0b0b0d,
1842
+ 0 18px 40px rgba(0, 0, 0, 0.55),
1843
+ inset 0 1px 2px rgba(255, 255, 255, 0.15);
1844
+ }
1845
+
1846
+ .wb-case--classic.wb-scope-watch-preview {
1847
+ background:
1848
+ repeating-conic-gradient(from 0deg, #3b3e44 0deg 2deg, #1c1d21 2deg 6deg),
1849
+ #16171a;
1850
+ }
1851
+
1852
+ .wb-screen.wb-scope-watch-preview {
1853
+ position: relative;
1854
+ width: var(--wb-width);
1855
+ height: var(--wb-height);
1856
+ border-radius: var(--wb-radius-screen);
1857
+ overflow: hidden;
1858
+ background: var(--wb-bg);
1859
+ color: var(--wb-on-surface);
1860
+ font-family: var(--wb-font);
1861
+ font-size: var(--wb-type-body-size);
1862
+ line-height: var(--wb-type-body-line);
1863
+ font-weight: var(--wb-type-body-weight);
1864
+ letter-spacing: var(--wb-type-body-tracking);
1865
+ font-stretch: var(--wb-type-body-width);
1866
+ /* Inner shadow suggests the glass edge; purely cosmetic. */
1867
+ box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.04);
1868
+ }
1869
+
1870
+ .wb-empty.wb-scope-watch-preview {
1871
+ display: grid;
1872
+ place-items: center;
1873
+ height: 100%;
1874
+ color: var(--wb-on-surface-variant);
1875
+ font-size: var(--wb-type-caption-size);
1876
+ font-weight: var(--wb-type-caption-weight);
1877
+ letter-spacing: var(--wb-type-caption-tracking);
1878
+ font-stretch: var(--wb-type-caption-width);
1879
+ }
1880
+
1881
+ /* Square devices (future Apple frames): rounded-rectangle case and display. */
1882
+ .wb-case--square.wb-scope-watch-preview {
1883
+ border-radius: calc(var(--wb-radius-screen) + var(--wb-bezel));
1884
+ background: linear-gradient(160deg, #4a4d52 0%, #24262a 45%, #101114 100%), #16171a;
1885
+ }
1886
+
1887
+ /* ==== Platform layer: Wear OS ==========================================================================================
1888
+ For devices whose profile names platform "wear" (schema/devices; the root has .wb-platform-wear): the look of the Wear
1889
+ app's goldens (schema/goldens), from its Compose and ProtoLayout code (apps/wear). render/wear.ts does what needs the
1890
+ laid-out column (edge transformation, scroll indicator); css.ts the variables (square insets, line heights). */
1891
+
1892
+ /* The Wear app's text styles (WatchType) set no font features: Roboto Flex's default tabular figures. */
1893
+ .wb-preview.wb-platform-wear {
1894
+ font-variant-numeric: normal;
1895
+ }
1896
+
1897
+ /* No glass edge on a bare screen (the goldens are the screen's own pixels). */
1898
+ .wb-platform-wear > .wb-screen {
1899
+ box-shadow: none;
1900
+ }
1901
+
1902
+ /* The edge transformation is wear.ts's (it also moves the items below up, as TransformingLazyColumn does); !important
1903
+ since the scroll-driven animations above are more specific. */
1904
+ .wb-platform-wear .wb-content > .wb-stack--vertical > .wb-stack__header,
1905
+ .wb-platform-wear .wb-content > .wb-stack--vertical > .wb-stack__children > *,
1906
+ .wb-platform-wear .wb-content > .wb-stack--vertical > .wb-stack__children > .wb-list > *,
1907
+ .wb-platform-wear .wb-content > .wb-list > *,
1908
+ .wb-platform-wear .wb-content > * {
1909
+ animation: none !important;
1910
+ }
1911
+
1912
+ /* Wrapping text: lines the line height apart, the first and last line as tall as the font (css.ts, -pitch and -lead). */
1913
+ .wb-platform-wear .wb-text {
1914
+ line-height: var(--wb-type-body-pitch);
1915
+ padding-block: var(--wb-type-body-lead);
1916
+ }
1917
+
1918
+ .wb-platform-wear .wb-text--title {
1919
+ line-height: var(--wb-type-title-pitch);
1920
+ padding-block: var(--wb-type-title-lead);
1921
+ }
1922
+
1923
+ .wb-platform-wear .wb-text--display {
1924
+ line-height: var(--wb-type-display-pitch);
1925
+ padding-block: var(--wb-type-display-lead);
1926
+ }
1927
+
1928
+ .wb-platform-wear .wb-text--caption {
1929
+ line-height: var(--wb-type-caption-pitch);
1930
+ padding-block: var(--wb-type-caption-lead);
1931
+ }
1932
+
1933
+ /* The toggle tile's ProtoLayout button keeps its 52dp when the label wraps; the text runs over its edge. */
1934
+ .wb-platform-wear .wb-toggle--tile {
1935
+ height: var(--wb-chip-height);
1936
+ }
1937
+
1938
+ /* Content taller than a tile's main slot keeps its size, starts at the slot's top and is cut at its bottom (ProtoLayout). */
1939
+ .wb-platform-wear .wb-tile__main {
1940
+ justify-content: safe center;
1941
+ overflow: hidden;
1942
+ }
1943
+
1944
+ .wb-platform-wear .wb-tile__main > *,
1945
+ .wb-platform-wear .wb-status-tile > * {
1946
+ flex-shrink: 0;
1947
+ }
1948
+
1949
+ /* The "Couldn't refresh" banner is the main slot's first, centred line. */
1950
+ .wb-platform-wear .wb-tile__main > .wb-tile__error {
1951
+ justify-content: center;
1952
+ }
1953
+
1954
+ /* list3: rows and their 1dp separators back to back, across the whole main slot. */
1955
+ .wb-platform-wear .wb-list3 {
1956
+ gap: 0;
1957
+ padding: 0;
1958
+ }
1959
+
1960
+ /* The stale and "Sample data" hints in the palette's warning text colour (a dark amber in the light theme). */
1961
+ .wb-platform-wear .wb-screen-view .wb-stale-hint,
1962
+ .wb-platform-wear .wb-tile__bottom-label {
1963
+ color: var(--wb-warning-text);
1964
+ }
1965
+
1966
+ /* Curved text (TimeText, the stale hint) is drawn without a halo. */
1967
+ .wb-platform-wear .wb-curved {
1968
+ stroke: none;
1969
+ }
1970
+
1971
+ `;function Ta(e,t){return e<t?-1:e>t?1:0}function*ke(e){switch(e.kind){case"path":yield e;break;case"postfix":yield*ke(e.target);break;case"array":for(let t of e.items)yield*ke(t);break;case"unary":yield*ke(e.operand);break;case"binary":yield*ke(e.left),yield*ke(e.right);break;case"ternary":yield*ke(e.condition),yield*ke(e.then),yield*ke(e.otherwise);break;case"pipeline":yield*ke(e.input);for(let t of e.filters)for(let n of t.args)yield*ke(n);break}}function*Tp(e){for(let t of e.parts)typeof t!="string"&&(yield*ke(t.expr))}function Sa(e){let t=[];for(let n of Tp(e))n.segments[0]==="$secret"&&n.segments.length>1&&typeof n.segments[1]=="string"&&t.push(n.segments[1]);return t}function Aa(e){let t=new Set;for(let n of Sp(e)){let r=Ci(n);if(r!==null)for(let o of Sa(r))t.add(o)}return[...t].sort(Ta)}function*Sp(e){typeof e.url=="string"&&(yield e.url);for(let t of Object.values(e.headers??{}))typeof t=="string"&&(yield t);yield*Wo(e.body)}function*Wo(e){if(typeof e=="string")yield e;else if(Array.isArray(e))for(let t of e)yield*Wo(t);else if(e!==null&&typeof e=="object")for(let t of Object.values(e))yield*Wo(t)}var _a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~",Th=_a+"!$&'()*+,;=:",Sh=_a+"!$'()*,;:@/?";var Ah=new TextEncoder;function yr(e,t=!1){let n=e.length,r=0,o="",s=0,i=16,a=0,l=0,c=0,p=0,d=0;function g(b,j){let z=0,k=0;for(;z<b||!j;){let v=e.charCodeAt(r);if(v>=48&&v<=57)k=k*16+v-48;else if(v>=65&&v<=70)k=k*16+v-65+10;else if(v>=97&&v<=102)k=k*16+v-97+10;else break;r++,z++}return z<b&&(k=-1),k}function y(b){r=b,o="",s=0,i=16,d=0}function m(){let b=r;if(e.charCodeAt(r)===48)r++;else for(r++;r<e.length&&It(e.charCodeAt(r));)r++;if(r<e.length&&e.charCodeAt(r)===46)if(r++,r<e.length&&It(e.charCodeAt(r)))for(r++;r<e.length&&It(e.charCodeAt(r));)r++;else return d=3,e.substring(b,r);let j=r;if(r<e.length&&(e.charCodeAt(r)===69||e.charCodeAt(r)===101))if(r++,(r<e.length&&e.charCodeAt(r)===43||e.charCodeAt(r)===45)&&r++,r<e.length&&It(e.charCodeAt(r))){for(r++;r<e.length&&It(e.charCodeAt(r));)r++;j=r}else d=3;return e.substring(b,j)}function S(){let b="",j=r;for(;;){if(r>=n){b+=e.substring(j,r),d=2;break}let z=e.charCodeAt(r);if(z===34){b+=e.substring(j,r),r++;break}if(z===92){if(b+=e.substring(j,r),r++,r>=n){d=2;break}switch(e.charCodeAt(r++)){case 34:b+='"';break;case 92:b+="\\";break;case 47:b+="/";break;case 98:b+="\b";break;case 102:b+="\f";break;case 110:b+=`
1972
+ `;break;case 114:b+="\r";break;case 116:b+=" ";break;case 117:let v=g(4,!0);v>=0?b+=String.fromCharCode(v):d=4;break;default:d=5}j=r;continue}if(z>=0&&z<=31)if(yn(z)){b+=e.substring(j,r),d=2;break}else d=6;r++}return b}function L(){if(o="",d=0,s=r,l=a,p=c,r>=n)return s=n,i=17;let b=e.charCodeAt(r);if(Go(b)){do r++,o+=String.fromCharCode(b),b=e.charCodeAt(r);while(Go(b));return i=15}if(yn(b))return r++,o+=String.fromCharCode(b),b===13&&e.charCodeAt(r)===10&&(r++,o+=`
1973
+ `),a++,c=r,i=14;switch(b){case 123:return r++,i=1;case 125:return r++,i=2;case 91:return r++,i=3;case 93:return r++,i=4;case 58:return r++,i=6;case 44:return r++,i=5;case 34:return r++,o=S(),i=10;case 47:let j=r-1;if(e.charCodeAt(r+1)===47){for(r+=2;r<n&&!yn(e.charCodeAt(r));)r++;return o=e.substring(j,r),i=12}if(e.charCodeAt(r+1)===42){r+=2;let z=n-1,k=!1;for(;r<z;){let v=e.charCodeAt(r);if(v===42&&e.charCodeAt(r+1)===47){r+=2,k=!0;break}r++,yn(v)&&(v===13&&e.charCodeAt(r)===10&&r++,a++,c=r)}return k||(r++,d=1),o=e.substring(j,r),i=13}return o+=String.fromCharCode(b),r++,i=16;case 45:if(o+=String.fromCharCode(b),r++,r===n||!It(e.charCodeAt(r)))return i=16;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return o+=m(),i=11;default:for(;r<n&&A(b);)r++,b=e.charCodeAt(r);if(s!==r){switch(o=e.substring(s,r),o){case"true":return i=8;case"false":return i=9;case"null":return i=7}return i=16}return o+=String.fromCharCode(b),r++,i=16}}function A(b){if(Go(b)||yn(b))return!1;switch(b){case 125:case 93:case 123:case 91:case 34:case 58:case 44:case 47:return!1}return!0}function B(){let b;do b=L();while(b>=12&&b<=15);return b}return{setPosition:y,getPosition:()=>r,scan:t?B:L,getToken:()=>i,getTokenValue:()=>o,getTokenOffset:()=>s,getTokenLength:()=>r-s,getTokenStartLine:()=>l,getTokenStartCharacter:()=>s-p,getTokenError:()=>d}}function Go(e){return e===32||e===9}function yn(e){return e===10||e===13}function It(e){return e>=48&&e<=57}var Oa;(function(e){e[e.lineFeed=10]="lineFeed",e[e.carriageReturn=13]="carriageReturn",e[e.space=32]="space",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.asterisk=42]="asterisk",e[e.backslash=92]="backslash",e[e.closeBrace=125]="closeBrace",e[e.closeBracket=93]="closeBracket",e[e.colon=58]="colon",e[e.comma=44]="comma",e[e.dot=46]="dot",e[e.doubleQuote=34]="doubleQuote",e[e.minus=45]="minus",e[e.openBrace=123]="openBrace",e[e.openBracket=91]="openBracket",e[e.plus=43]="plus",e[e.slash=47]="slash",e[e.formFeed=12]="formFeed",e[e.tab=9]="tab"})(Oa||(Oa={}));var _p=new Array(20).fill(0).map((e,t)=>" ".repeat(t)),Jt=200,Op={" ":{"\n":new Array(Jt).fill(0).map((e,t)=>`
1974
+ `+" ".repeat(t)),"\r":new Array(Jt).fill(0).map((e,t)=>"\r"+" ".repeat(t)),"\r\n":new Array(Jt).fill(0).map((e,t)=>`\r
1975
+ `+" ".repeat(t))}," ":{"\n":new Array(Jt).fill(0).map((e,t)=>`
1976
+ `+" ".repeat(t)),"\r":new Array(Jt).fill(0).map((e,t)=>"\r"+" ".repeat(t)),"\r\n":new Array(Jt).fill(0).map((e,t)=>`\r
1977
+ `+" ".repeat(t))}};var vr;(function(e){e.DEFAULT={allowTrailingComma:!1}})(vr||(vr={}));function qo(e,t=[],n=vr.DEFAULT){let r={type:"array",offset:-1,length:-1,children:[],parent:void 0};function o(l){r.type==="property"&&(r.length=l-r.offset,r=r.parent)}function s(l){return r.children.push(l),l}Zo(e,{onObjectBegin:l=>{r=s({type:"object",offset:l,length:-1,parent:r,children:[]})},onObjectProperty:(l,c,p)=>{r=s({type:"property",offset:c,length:-1,parent:r,children:[]}),r.children.push({type:"string",value:l,offset:c,length:p,parent:r})},onObjectEnd:(l,c)=>{o(l+c),r.length=l+c-r.offset,r=r.parent,o(l+c)},onArrayBegin:(l,c)=>{r=s({type:"array",offset:l,length:-1,parent:r,children:[]})},onArrayEnd:(l,c)=>{r.length=l+c-r.offset,r=r.parent,o(l+c)},onLiteralValue:(l,c,p)=>{s({type:Mp(l),offset:c,length:p,parent:r,value:l}),o(c+p)},onSeparator:(l,c,p)=>{r.type==="property"&&(l===":"?r.colonOffset=c:l===","&&o(c))},onError:(l,c,p)=>{t.push({error:l,offset:c,length:p})}},n);let a=r.children[0];return a&&delete a.parent,a}function Zo(e,t,n=vr.DEFAULT){let r=yr(e,!1),o=[],s=0;function i(R){return R?()=>s===0&&R(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter()):()=>!0}function a(R){return R?q=>s===0&&R(q,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter()):()=>!0}function l(R){return R?q=>s===0&&R(q,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter(),()=>o.slice()):()=>!0}function c(R){return R?()=>{s>0?s++:R(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter(),()=>o.slice())===!1&&(s=1)}:()=>!0}function p(R){return R?()=>{s>0&&s--,s===0&&R(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter())}:()=>!0}let d=c(t.onObjectBegin),g=l(t.onObjectProperty),y=p(t.onObjectEnd),m=c(t.onArrayBegin),S=p(t.onArrayEnd),L=l(t.onLiteralValue),A=a(t.onSeparator),B=i(t.onComment),b=a(t.onError),j=n&&n.disallowComments,z=n&&n.allowTrailingComma;function k(){for(;;){let R=r.scan();switch(r.getTokenError()){case 4:v(14);break;case 5:v(15);break;case 3:v(13);break;case 1:j||v(11);break;case 2:v(12);break;case 6:v(16);break}switch(R){case 12:case 13:j?v(10):B();break;case 16:v(1);break;case 15:case 14:break;default:return R}}}function v(R,q=[],Ko=[]){if(b(R),q.length+Ko.length>0){let vn=r.getToken();for(;vn!==17;){if(q.indexOf(vn)!==-1){k();break}else if(Ko.indexOf(vn)!==-1)break;vn=k()}}}function J(R){let q=r.getTokenValue();return R?L(q):(g(q),o.push(q)),k(),!0}function N(){switch(r.getToken()){case 11:let R=r.getTokenValue(),q=Number(R);isNaN(q)&&(v(2),q=0),L(q);break;case 7:L(null);break;case 8:L(!0);break;case 9:L(!1);break;default:return!1}return k(),!0}function K(){return r.getToken()!==10?(v(3,[],[2,5]),!1):(J(!1),r.getToken()===6?(A(":"),k(),Ar()||v(4,[],[2,5])):v(5,[],[2,5]),o.pop(),!0)}function Sr(){d(),k();let R=!1;for(;r.getToken()!==2&&r.getToken()!==17;){if(r.getToken()===5){if(R||v(4,[],[]),A(","),k(),r.getToken()===2&&z)break}else R&&v(6,[],[]);K()||v(4,[],[2,5]),R=!0}return y(),r.getToken()!==2?v(7,[2],[]):k(),!0}function Ya(){m(),k();let R=!0,q=!1;for(;r.getToken()!==4&&r.getToken()!==17;){if(r.getToken()===5){if(q||v(4,[],[]),A(","),k(),r.getToken()===4&&z)break}else q&&v(6,[],[]);R?(o.push(0),R=!1):o[o.length-1]++,Ar()||v(4,[],[4,5]),q=!0}return S(),R||o.pop(),r.getToken()!==4?v(8,[4],[]):k(),!0}function Ar(){switch(r.getToken()){case 3:return Ya();case 1:return Sr();case 10:return J(!0);default:return N()}}return k(),r.getToken()===17?n.allowEmptyContent?!0:(v(4,[],[]),!1):Ar()?(r.getToken()!==17&&v(9,[],[]),!0):(v(4,[],[]),!1)}function Mp(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string";case"object":{if(e){if(Array.isArray(e))return"array"}else return"null";return"object"}default:return"null"}}var Ea;(function(e){e[e.None=0]="None",e[e.UnexpectedEndOfComment=1]="UnexpectedEndOfComment",e[e.UnexpectedEndOfString=2]="UnexpectedEndOfString",e[e.UnexpectedEndOfNumber=3]="UnexpectedEndOfNumber",e[e.InvalidUnicode=4]="InvalidUnicode",e[e.InvalidEscapeCharacter=5]="InvalidEscapeCharacter",e[e.InvalidCharacter=6]="InvalidCharacter"})(Ea||(Ea={}));var Ma;(function(e){e[e.OpenBraceToken=1]="OpenBraceToken",e[e.CloseBraceToken=2]="CloseBraceToken",e[e.OpenBracketToken=3]="OpenBracketToken",e[e.CloseBracketToken=4]="CloseBracketToken",e[e.CommaToken=5]="CommaToken",e[e.ColonToken=6]="ColonToken",e[e.NullKeyword=7]="NullKeyword",e[e.TrueKeyword=8]="TrueKeyword",e[e.FalseKeyword=9]="FalseKeyword",e[e.StringLiteral=10]="StringLiteral",e[e.NumericLiteral=11]="NumericLiteral",e[e.LineCommentTrivia=12]="LineCommentTrivia",e[e.BlockCommentTrivia=13]="BlockCommentTrivia",e[e.LineBreakTrivia=14]="LineBreakTrivia",e[e.Trivia=15]="Trivia",e[e.Unknown=16]="Unknown",e[e.EOF=17]="EOF"})(Ma||(Ma={}));var Ra=qo;var Pa=Zo;var La;(function(e){e[e.InvalidSymbol=1]="InvalidSymbol",e[e.InvalidNumberFormat=2]="InvalidNumberFormat",e[e.PropertyNameExpected=3]="PropertyNameExpected",e[e.ValueExpected=4]="ValueExpected",e[e.ColonExpected=5]="ColonExpected",e[e.CommaExpected=6]="CommaExpected",e[e.CloseBraceExpected=7]="CloseBraceExpected",e[e.CloseBracketExpected=8]="CloseBracketExpected",e[e.EndOfFileExpected=9]="EndOfFileExpected",e[e.InvalidCommentToken=10]="InvalidCommentToken",e[e.UnexpectedEndOfComment=11]="UnexpectedEndOfComment",e[e.UnexpectedEndOfString=12]="UnexpectedEndOfString",e[e.UnexpectedEndOfNumber=13]="UnexpectedEndOfNumber",e[e.InvalidUnicode=14]="InvalidUnicode",e[e.InvalidEscapeCharacter=15]="InvalidEscapeCharacter",e[e.InvalidCharacter=16]="InvalidCharacter"})(La||(La={}));function Na(e){switch(e){case 1:return"InvalidSymbol";case 2:return"InvalidNumberFormat";case 3:return"PropertyNameExpected";case 4:return"ValueExpected";case 5:return"ColonExpected";case 6:return"CommaExpected";case 7:return"CloseBraceExpected";case 8:return"CloseBracketExpected";case 9:return"EndOfFileExpected";case 10:return"InvalidCommentToken";case 11:return"UnexpectedEndOfComment";case 12:return"UnexpectedEndOfString";case 13:return"UnexpectedEndOfNumber";case 14:return"InvalidUnicode";case 15:return"InvalidEscapeCharacter";case 16:return"InvalidCharacter"}return"<unknown ParseErrorCode>"}var V=e=>typeof e=="object"&&e!==null&&!Array.isArray(e);function $a(e,t){let n=t==="data.json"?{file:t}:{};if(!e||!e.trim())return t==="data.json"?{value:{},issues:[]}:{value:null,issues:[{path:"$",rule:"json-syntax",message:"watch.json is empty.",allowed:[],severity:"error"}]};let r=[],o=Ra(e,r,{allowTrailingComma:!0,disallowComments:!1});if(r.length||!o){let i=r[0],{line:a,column:l}=jp(e,i?.offset??0),c=i?$p(Na(i.error)):"unexpected end of the text";return{value:null,issues:[{path:"$",rule:"json-syntax",message:`Invalid JSON (line ${a}, column ${l}): ${c}.`,allowed:[],severity:"error",...n,line:a,column:l}]}}let s=zp(e);return s?{value:null,issues:[{path:s.path,rule:"json-syntax",message:`Invalid JSON (line ${s.line}, column ${s.column}): '${s.name}' appears twice in the same object.`,allowed:[],severity:"error",...n,line:s.line,column:s.column}]}:o.type!=="object"?{value:null,issues:[{path:"$",rule:"json-type",message:t==="data.json"?"data.json must be an object keyed by source name.":"watch.json must be a JSON object.",allowed:[],severity:"error",...n,line:1,column:1}]}:{value:Xo(o),issues:[]}}function Xo(e){switch(e.type){case"object":{let t={};for(let n of e.children??[]){let[r,o]=n.children??[];r&&o&&(t[r.value]=Xo(o))}return t}case"array":return(e.children??[]).map(Xo);default:return e.value}}var $p=e=>e.replace(/([a-z])([A-Z])/g,"$1 $2").toLowerCase();function jp(e,t){let n=1,r=0;for(let o=0;o<t&&o<e.length;o++)e[o]===`
1978
+ `&&(n++,r=o+1);return{line:n,column:t-r+1}}function zp(e){let t=[],n=null;return Pa(e,{onObjectBegin:()=>{t.push(new Set)},onObjectEnd:()=>{t.pop()},onObjectProperty:(r,o,s,i,a,l)=>{let c=t[t.length-1];!c||n||(c.has(r)&&(n={path:Ip([...l(),r]),name:r,line:i+1,column:a+1}),c.add(r))}},{allowTrailingComma:!0,disallowComments:!1}),n}var Ip=e=>"$"+e.map(t=>typeof t=="number"?`[${t}]`:`.${t}`).join("");var Ct={maxBundleBytes:256*1024,maxSampleBytes:16*1024,maxAssets:8,maxAssetBytes:256*1024},Jp="Europe/Stockholm",Cp=10,za=e=>new TextEncoder().encode(e).length,Dp=e=>"src_local_"+e.toLowerCase().replace(/[^a-z0-9_]/g,"_"),H=e=>typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):void 0,xr=(e,t)=>e<t?-1:e>t?1:0;function Ye(e){let t={};for(let[n,r]of Object.entries(e))r!=null&&(t[n]=r);return t}var Ia=e=>Object.fromEntries(Object.keys(e).sort(xr).map(t=>[t,e[t]])),Vp=new Set(["maxLines","maxRows","take"]),Bp=new Set(["confirm"]);function kr(e,t){if(e!=null){if(t==="items"){if(typeof e=="string")return{bind:e};if(V(e))return Ye({bind:H(e.bind),take:typeof e.take=="number"?e.take:void 0})}if(Array.isArray(e))return e.map(n=>kr(n)??null);if(V(e)){let n=["type","id",...Object.keys(e).filter(o=>o!=="type"&&o!=="id")],r={};for(let o of n){let s=kr(e[o],o);s!==void 0&&(r[o]=s)}return r}return t!==void 0&&(Vp.has(t)||Bp.has(t))?e:H(e)}}var Fp=["title","icon","url","text","value","unit","label","detail","trend","state","min","max","items","item","emptyText","buttons","toggle"];function ja(e,t){let n={opens:H(e.opens)??t,template:H(e.template),kind:H(e.kind)};for(let r of Fp)n[r]=kr(e[r],r);return Ye(n)}function Ja(e,t,n,r){let s=(V(e.experiences)?e.experiences:{})[n];if(!V(s))throw new Error(`The project has no Experience '${n}'.`);let i=V(e.sources)?e.sources:{},a=V(e.actions)?e.actions:{},l=[],c=V(s.pages)?s.pages:{},p=H(s.main)??Object.keys(c)[0]??"",d={};for(let[J,N]of Object.entries(c))d[J]=kr(N)??{};let g=ja(V(s.tile)?s.tile:{template:"text"},p),y=V(s.complication)?ja(s.complication,p):void 0,m=Ye({title:H(s.title)??n,subtitle:H(s.subtitle),icon:H(s.icon),iconUrl:H(s.iconUrl),description:H(s.description)}),S=[d,g,y??null,m],L=new Set;Yo(S,L,a);let A=new Set;Tr(S,A,i);for(let J of L){let N=a[J];typeof N.source=="string"&&N.source in i&&A.add(N.source);for(let K of Array.isArray(N.refresh)?N.refresh:[])typeof K=="string"&&K in i&&A.add(K);Tr([N.confirm??null,N.toast??null],A,i)}let B={};for(let J of Object.keys(i).filter(N=>A.has(N)).sort(xr))B[J]=Up(J,i[J],e,r);let b={};for(let J of[...L].sort(xr))b[J]=Hp(a[J],e);let j=Wp(S),z=Ye({bundleVersion:1,schemaVersion:2,engine:1,experienceId:r.experienceId,localId:n,projectId:r.projectId,version:r.version,publishedAt:r.publishedAt===void 0?void 0:Gt(r.publishedAt),timeZone:H(e.timeZone)??Jp,entry:m,main:p,pages:d,tile:g,complication:y,sources:B,actions:b,assets:j.length?j:void 0,sample:Gp(t,Object.keys(B),l)}),k=JSON.stringify(z),v=za(k);return v>Ct.maxBundleBytes&&l.push({path:`$.experiences.${n}`,rule:"bundle-too-large",message:`The bundle of '${n}' is ${Math.floor(v/1024)} KiB; the limit is ${Ct.maxBundleBytes/1024} KiB.`,allowed:[],severity:"error"}),{bundle:z,json:k,bytes:v,issues:l}}function Ca(e,t){if(!(!V(e)&&!V(t)))return Ia({...V(e)?e:{},...V(t)?t:{}})}function Da(e,t){let n=V(t.headers)&&Object.keys(t.headers).length?Ia(t.headers):void 0;return Ye({method:e,url:H(t.url)??"",headers:n,body:t.body,timeoutSeconds:Cp})}var Va=e=>{let t=Aa({url:H(e.url),headers:V(e.headers)?e.headers:void 0,body:e.body});return t.length?t:void 0};function Up(e,t,n,r){let o=r.sourceRefs?.[e]??Dp(e),s=t.mode==="direct",i=H(t.push)??(s?"signal":"values"),a=V(t.refresh)?t.refresh:void 0;return Ye(s?{mode:"direct",ref:o,refresh:a,push:i,request:Da(H(t.method)??"GET",t),params:Ca(n.params,t.params),secrets:Va(t),map:t.map}:{mode:"proxied",ref:o,refresh:a,push:i})}function Hp(e,t){let n=H(e.type)??"http",r=H(e.mode)??"proxied",o=n==="http"&&r==="direct";return Ye({kind:n,mode:n==="http"?r:void 0,source:H(e.source),screen:H(e.screen),confirm:H(e.confirm),toast:V(e.toast)?e.toast:void 0,refresh:Array.isArray(e.refresh)&&e.refresh.length?e.refresh:void 0,request:o?Da(H(e.method)??"POST",e):void 0,params:o?Ca(t.params,e.params):void 0,secrets:o?Va(e):void 0})}function Yo(e,t,n){if(Array.isArray(e))e.forEach(r=>Yo(r,t,n));else if(V(e))for(let[r,o]of Object.entries(e))(r==="action"||r==="onAction"||r==="offAction")&&typeof o=="string"&&V(n[o])&&t.add(o),Yo(o,t,n)}function Tr(e,t,n){let r=o=>{for(let s of Et(o,!0,i=>i in n))s in n&&t.add(s)};if(Array.isArray(e))e.forEach(o=>Tr(o,t,n));else if(V(e))for(let[o,s]of Object.entries(e))o==="bind"&&typeof s=="string"?r(s.trimStart().startsWith("{{")?s:`{{ ${s} }}`):Tr(s,t,n);else typeof e=="string"&&e.includes("{{")&&r(e)}function Wp(e){let t=new Set,n=r=>{if(Array.isArray(r))r.forEach(n);else if(V(r))for(let[o,s]of Object.entries(r))(o==="url"||o==="iconUrl")&&typeof s=="string"&&!s.includes("{{")&&Lt(s)&&t.add(s),n(s)};return n(e),[...t].sort(xr).slice(0,Ct.maxAssets).map(r=>({url:r,maxBytes:Ct.maxAssetBytes}))}function Gp(e,t,n){if(!e)return;let r={};for(let s of t)s in e&&e[s]!==void 0&&(r[s]=structuredClone(e[s]));if(!Object.keys(r).length)return;let o=!1;for(;za(JSON.stringify(r))>Ct.maxSampleBytes;){let s=qp(r);if(s)s.splice(s.length-Math.max(1,Math.floor(s.length/8)));else{let i=Object.keys(r).sort((a,l)=>JSON.stringify(r[l]).length-JSON.stringify(r[a]).length)[0];delete r[i]}o=!0}return o&&n.push({path:"$",rule:"sample-truncated",message:`The sample data was cut to ${Ct.maxSampleBytes/1024} KiB for the bundle (it is shipped to the watch).`,allowed:[],severity:"warning",file:"data.json"}),Object.keys(r).length?r:void 0}function qp(e){let t=null,n=0,r=o=>{if(Array.isArray(o)){let s=JSON.stringify(o).length;o.length&&s>n&&([t,n]=[o,s]),o.forEach(r)}else V(o)&&Object.values(o).forEach(r)};return r(e),t}var Ba={$schema:"../device-profile.schema.json",id:"galaxy-watch",name:"Galaxy Watch 44mm",platform:"wear",measured:!1,source:"Public specs for Galaxy Watch4/5 44mm, Watch4 Classic 46mm and Watch5 Pro (450x450, about 321 ppi, assumed xhdpi = density 2.0), as docs/wear-tokens.md. Not verified: one report says a Galaxy Watch4 returns wm density 340 (2.125, 212dp, a small screen). Measure with adb shell wm size / wm density on a real watch (plan step 8) and then set measured to true. Tile slots, complication behaviour and limits are what the Wear app does today.",screen:{shape:"round",widthPx:450,heightPx:450,density:2,widthDp:225,heightDp:225,sizeClass:"large",caseMm:44},insets:{safe:33,screenHorizontal:12,screenTop:30,screenBottom:52,tileHorizontal:16},fonts:{app:{family:"Roboto Flex",typeScale:"tokens.json#/typeScale",note:"Bundled with the app as static instances (res/font), so every watch draws pages in the same font as the web preview."},tile:{family:"system (One UI Watch font, not measured)",note:"Tiles cannot use app fonts: ProtoLayout draws them with the system font and its own Material 3 typography tokens (TITLE_SMALL, NUMERAL_MEDIUM, BODY_SMALL, ...), not tokens.json typeScale."},complication:{family:"the watch face",note:"The watch face draws complications with its own font, size and colours; previews are a guide, not a pixel reference."}},surfaces:{screen:{limits:{listMaxRows:10,textMaxLines:3},components:{text:{support:"supported",limits:{maxLines:3}},stat:{support:"supported"},list:{support:"supported",limits:{maxRows:10}},status:{support:"supported"},progress:{support:"supported"},countdown:{support:"supported",reason:"Ticks every second against the watch clock while the page is open."},button:{support:"supported",reason:"A confirm asks first in a Material 3 AlertDialog."},toggle:{support:"supported",reason:"Optimistic per toggle key; rolls back when the action fails."},icon:{support:"supported",reason:"Built-in icons are vector drawables from the same path data as the web; image URLs are fetched and cached."},stack:{support:"supported",reason:"The root stack and its lists are flattened into the scrolling column so each row scales at the screen edge on its own."}}},tile:{theme:{corners:{support:"degraded",to:"rounded",reason:"ProtoLayout Material 3 draws tile buttons and the edge button in its own shapes; the theme's corner style applies to the App's pages."},typeWeight:{support:"degraded",to:"the system font's weights",reason:"Tiles use the system font with ProtoLayout's own typography (fonts.tile), so the theme's weight offset does not apply."},typeWidth:{support:"unsupported",reason:"ProtoLayout tiles have no width axis: the system font is drawn at its normal width."}},instances:10,minRefreshSeconds:60,limits:{listMaxRows:3,compactListMaxRows:8,maxButtons:2,maxToggles:1,countdownTimelineEntries:40},templates:{text:{support:"supported",limits:{maxLines:3},slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."}}},"single-stat":{support:"supported",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."}}},list3:{support:"supported",limits:{maxRows:3},reason:"Rows past the limit become a '+N more' line.",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},"item.subtitle":{support:"unsupported",reason:"list3 rows are one line: icon, title and trailing value."},"item.badge":{support:"unsupported",reason:"list3 rows are one line: icon, title and trailing value."},"item.action":{support:"degraded",to:"a tap on the tile opens the page",reason:"Tile rows are not separately clickable."}}},"compact-list":{support:"supported",limits:{maxRows:8},reason:"One-line rows in the space of the edge button (no Open button: the whole tile opens the page). An error banner and the stale hint each take the place of one row.",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},"item.icon":{support:"unsupported",reason:"compact-list rows are one line of title and trailing value."},"item.subtitle":{support:"unsupported",reason:"compact-list rows are one line of title and trailing value."},"item.badge":{support:"unsupported",reason:"compact-list rows are one line of title and trailing value."},"item.action":{support:"degraded",to:"a tap on the tile opens the page",reason:"Tile rows are not separately clickable."}}},status:{support:"supported",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},detail:{support:"supported",limits:{maxLines:2}}}},"progress-ring":{support:"supported",reason:"The ring runs along the screen edge, with a gap for the edge button.",slots:{icon:{support:"unsupported",reason:"The template wraps primaryLayout in the ring's box, so the system leaves the header icon slot empty (checked on the Wear OS 6 emulator, 2026-11-07): neither the glance icon nor the app icon is shown."}}},buttons2:{support:"supported",limits:{maxButtons:2},slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},"buttons.label":{support:"degraded",to:"a one-line caption under a round icon button (the first letter in the button when it has no icon)",reason:"Tile buttons are round icon buttons."},"buttons.confirm":{support:"degraded",to:"opens the app, which asks to confirm",reason:"Tiles cannot show dialogs."}}},toggle:{support:"supported",limits:{maxToggles:1},slots:{icon:{support:"degraded",to:"the toggle's icon (or the glance icon) inside the toggle button; the header shows the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."}}}},components:{text:{support:"supported",limits:{maxLines:3},reason:"In the text template's slot, at TITLE_MEDIUM."},stat:{support:"supported",reason:"single-stat template."},list:{support:"degraded",to:"list3 (3 rows and '+N more') or compact-list (8 one-line rows)",reason:"Tiles do not scroll.",limits:{maxRows:8}},status:{support:"supported",reason:"status template."},progress:{support:"supported",reason:"progress-ring template.",slots:{"style.bar":{support:"degraded",to:"a ring",reason:"The tile template is progress-ring only."}}},countdown:{support:"degraded",to:"timeline entries pre-rendered at the instants the text changes",reason:"Tiles cannot tick: every 10 s in the last 3 minutes, every minute before that, at most 40 entries over 30 minutes; then the tile asks again.",limits:{timelineEntries:40}},button:{support:"degraded",to:"buttons2: round icon buttons with a one-line caption",reason:"Tile buttons are round icon buttons; a confirm opens the app.",limits:{maxButtons:2}},toggle:{support:"supported",reason:"toggle template.",limits:{maxToggles:1}},icon:{support:"degraded",to:"built-in icons inside list rows, buttons and toggles only",reason:"The header icon is the app icon (system), and tile resources are the bundled icons.",slots:{url:{support:"unsupported",reason:"Tile images must be bundled resources; image URLs are not fetched."}}},stack:{support:"unsupported",reason:"A tile shows one fixed template, not a free layout."}}},complication:{instances:1,minRefreshSeconds:300,kinds:{shortText:{support:"supported",limits:{maxTextChars:7},fills:["SHORT_TEXT","LONG_TEXT"],fillsWithIcon:["SMALL_IMAGE","MONOCHROMATIC_IMAGE"],slots:{"text.countdown":{support:"degraded",to:"the platform's ticking time-difference text ('7m', '02:30')",reason:"The watch face ticks complications with TimeDifferenceComplicationText, which cannot print the app strings (SHORT_SINGLE_UNIT, STOPWATCH in the last 3 minutes and for format clock)."}}},longText:{support:"supported",limits:{maxTextChars:24},fills:["LONG_TEXT","SHORT_TEXT"],fillsWithIcon:["SMALL_IMAGE","MONOCHROMATIC_IMAGE"],slots:{"text.countdown":{support:"degraded",to:"the platform's ticking time-difference text ('7m', '02:30')",reason:"As shortText."}}},rangedValue:{support:"supported",limits:{maxTextChars:7},fills:["RANGED_VALUE","SHORT_TEXT","LONG_TEXT"],fillsWithIcon:["SMALL_IMAGE","MONOCHROMATIC_IMAGE"],reason:"In a text slot it shows its text, or else its value as a number."},image:{support:"supported",fills:["SMALL_IMAGE"],fillsWithIcon:["MONOCHROMATIC_IMAGE"],slots:{url:{support:"degraded",to:"SMALL_IMAGE of type PHOTO only",reason:"A fetched bitmap cannot be tinted, so MONOCHROMATIC_IMAGE needs a built-in icon."}}}},types:{SHORT_TEXT:{support:"supported",reason:"Offered by the data source; which types a slot takes depends on the face (Samsung's own faces mostly offer SHORT_TEXT, RANGED_VALUE and SMALL_IMAGE slots). Not measured."},LONG_TEXT:{support:"supported",reason:"Offered by the data source; which types a slot takes depends on the face (Samsung's own faces mostly offer SHORT_TEXT, RANGED_VALUE and SMALL_IMAGE slots). Not measured."},RANGED_VALUE:{support:"supported",reason:"Offered by the data source; which types a slot takes depends on the face (Samsung's own faces mostly offer SHORT_TEXT, RANGED_VALUE and SMALL_IMAGE slots). Not measured."},SMALL_IMAGE:{support:"supported",reason:"Offered by the data source; which types a slot takes depends on the face (Samsung's own faces mostly offer SHORT_TEXT, RANGED_VALUE and SMALL_IMAGE slots). Not measured."},MONOCHROMATIC_IMAGE:{support:"supported",reason:"Offered by the data source; which types a slot takes depends on the face (Samsung's own faces mostly offer SHORT_TEXT, RANGED_VALUE and SMALL_IMAGE slots). Not measured."},PHOTO_IMAGE:{support:"unsupported",reason:"The QuickWatch data source does not offer it (AndroidManifest SUPPORTED_TYPES)."},GOAL_PROGRESS:{support:"unsupported",reason:"The QuickWatch data source does not offer it; rangedValue covers progress."},WEIGHTED_ELEMENTS:{support:"unsupported",reason:"The QuickWatch data source does not offer it."}}}}};var Fa={$schema:"../device-profile.schema.json",id:"pixel-watch",name:"Pixel Watch 3 41mm",platform:"wear",measured:!1,source:"Public specs for Pixel Watch 3 41mm (408x408 px; Google lists 320 ppi, assumed xhdpi = density 2.0, 204dp, a small screen). Not verified on a watch: measure with adb shell wm size / wm density and then set measured to true. Tile and complication behaviour are what the Wear app does today.",screen:{shape:"round",widthPx:408,heightPx:408,density:2,widthDp:204,heightDp:204,sizeClass:"small",caseMm:41},insets:{safe:30,screenHorizontal:11,screenTop:27,screenBottom:47,tileHorizontal:15},fonts:{app:{family:"Roboto Flex",typeScale:"tokens.json#/typeScale",note:"Bundled with the app as static instances (res/font), so every watch draws pages in the same font as the web preview."},tile:{family:"system (Google Sans Flex on Pixel Watch, not measured)",note:"Tiles cannot use app fonts: ProtoLayout draws them with the system font and its own Material 3 typography tokens (TITLE_SMALL, NUMERAL_MEDIUM, BODY_SMALL, ...), not tokens.json typeScale."},complication:{family:"the watch face",note:"The watch face draws complications with its own font, size and colours; previews are a guide, not a pixel reference."}},surfaces:{screen:{limits:{listMaxRows:10,textMaxLines:3},components:{text:{support:"supported",limits:{maxLines:3}},stat:{support:"supported"},list:{support:"supported",limits:{maxRows:10}},status:{support:"supported"},progress:{support:"supported"},countdown:{support:"supported",reason:"Ticks every second against the watch clock while the page is open."},button:{support:"supported",reason:"A confirm asks first in a Material 3 AlertDialog."},toggle:{support:"supported",reason:"Optimistic per toggle key; rolls back when the action fails."},icon:{support:"supported",reason:"Built-in icons are vector drawables from the same path data as the web; image URLs are fetched and cached."},stack:{support:"supported",reason:"The root stack and its lists are flattened into the scrolling column so each row scales at the screen edge on its own."}}},tile:{theme:{corners:{support:"degraded",to:"rounded",reason:"ProtoLayout Material 3 draws tile buttons and the edge button in its own shapes; the theme's corner style applies to the App's pages."},typeWeight:{support:"degraded",to:"the system font's weights",reason:"Tiles use the system font with ProtoLayout's own typography (fonts.tile), so the theme's weight offset does not apply."},typeWidth:{support:"unsupported",reason:"ProtoLayout tiles have no width axis: the system font is drawn at its normal width."}},instances:10,minRefreshSeconds:60,limits:{listMaxRows:3,compactListMaxRows:6,maxButtons:2,maxToggles:1,countdownTimelineEntries:40},templates:{text:{support:"supported",limits:{maxLines:3},slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."}}},"single-stat":{support:"supported",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."}}},list3:{support:"supported",limits:{maxRows:3},reason:"Rows past the limit become a '+N more' line.",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},"item.subtitle":{support:"unsupported",reason:"list3 rows are one line: icon, title and trailing value."},"item.badge":{support:"unsupported",reason:"list3 rows are one line: icon, title and trailing value."},"item.action":{support:"degraded",to:"a tap on the tile opens the page",reason:"Tile rows are not separately clickable."}}},"compact-list":{support:"supported",limits:{maxRows:6},reason:"One-line rows in the space of the edge button (no Open button: the whole tile opens the page). An error banner and the stale hint each take the place of one row.",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},"item.icon":{support:"unsupported",reason:"compact-list rows are one line of title and trailing value."},"item.subtitle":{support:"unsupported",reason:"compact-list rows are one line of title and trailing value."},"item.badge":{support:"unsupported",reason:"compact-list rows are one line of title and trailing value."},"item.action":{support:"degraded",to:"a tap on the tile opens the page",reason:"Tile rows are not separately clickable."}}},status:{support:"supported",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},detail:{support:"supported",limits:{maxLines:2}}}},"progress-ring":{support:"supported",reason:"The ring runs along the screen edge, with a gap for the edge button.",slots:{icon:{support:"unsupported",reason:"The template wraps primaryLayout in the ring's box, so the system leaves the header icon slot empty (checked on the Wear OS 6 emulator, 2026-11-07): neither the glance icon nor the app icon is shown."}}},buttons2:{support:"supported",limits:{maxButtons:2},slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},"buttons.label":{support:"degraded",to:"a one-line caption under a round icon button (the first letter in the button when it has no icon)",reason:"Tile buttons are round icon buttons."},"buttons.confirm":{support:"degraded",to:"opens the app, which asks to confirm",reason:"Tiles cannot show dialogs."}}},toggle:{support:"supported",limits:{maxToggles:1},slots:{icon:{support:"degraded",to:"the toggle's icon (or the glance icon) inside the toggle button; the header shows the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."}}}},components:{text:{support:"supported",limits:{maxLines:3},reason:"In the text template's slot, at TITLE_MEDIUM."},stat:{support:"supported",reason:"single-stat template."},list:{support:"degraded",to:"list3 (3 rows and '+N more') or compact-list (6 one-line rows)",reason:"Tiles do not scroll.",limits:{maxRows:6}},status:{support:"supported",reason:"status template."},progress:{support:"supported",reason:"progress-ring template.",slots:{"style.bar":{support:"degraded",to:"a ring",reason:"The tile template is progress-ring only."}}},countdown:{support:"degraded",to:"timeline entries pre-rendered at the instants the text changes",reason:"Tiles cannot tick: every 10 s in the last 3 minutes, every minute before that, at most 40 entries over 30 minutes; then the tile asks again.",limits:{timelineEntries:40}},button:{support:"degraded",to:"buttons2: round icon buttons with a one-line caption",reason:"Tile buttons are round icon buttons; a confirm opens the app.",limits:{maxButtons:2}},toggle:{support:"supported",reason:"toggle template.",limits:{maxToggles:1}},icon:{support:"degraded",to:"built-in icons inside list rows, buttons and toggles only",reason:"The header icon is the app icon (system), and tile resources are the bundled icons.",slots:{url:{support:"unsupported",reason:"Tile images must be bundled resources; image URLs are not fetched."}}},stack:{support:"unsupported",reason:"A tile shows one fixed template, not a free layout."}}},complication:{instances:1,minRefreshSeconds:300,kinds:{shortText:{support:"supported",limits:{maxTextChars:7},fills:["SHORT_TEXT","LONG_TEXT"],fillsWithIcon:["SMALL_IMAGE","MONOCHROMATIC_IMAGE"],slots:{"text.countdown":{support:"degraded",to:"the platform's ticking time-difference text ('7m', '02:30')",reason:"The watch face ticks complications with TimeDifferenceComplicationText, which cannot print the app strings (SHORT_SINGLE_UNIT, STOPWATCH in the last 3 minutes and for format clock)."}}},longText:{support:"supported",limits:{maxTextChars:24},fills:["LONG_TEXT","SHORT_TEXT"],fillsWithIcon:["SMALL_IMAGE","MONOCHROMATIC_IMAGE"],slots:{"text.countdown":{support:"degraded",to:"the platform's ticking time-difference text ('7m', '02:30')",reason:"As shortText."}}},rangedValue:{support:"supported",limits:{maxTextChars:7},fills:["RANGED_VALUE","SHORT_TEXT","LONG_TEXT"],fillsWithIcon:["SMALL_IMAGE","MONOCHROMATIC_IMAGE"],reason:"In a text slot it shows its text, or else its value as a number."},image:{support:"supported",fills:["SMALL_IMAGE"],fillsWithIcon:["MONOCHROMATIC_IMAGE"],slots:{url:{support:"degraded",to:"SMALL_IMAGE of type PHOTO only",reason:"A fetched bitmap cannot be tinted, so MONOCHROMATIC_IMAGE needs a built-in icon."}}}},types:{SHORT_TEXT:{support:"supported",reason:"Offered by the data source; which types a slot takes depends on the face. Not measured."},LONG_TEXT:{support:"supported",reason:"Offered by the data source; which types a slot takes depends on the face. Not measured."},RANGED_VALUE:{support:"supported",reason:"Offered by the data source; which types a slot takes depends on the face. Not measured."},SMALL_IMAGE:{support:"supported",reason:"Offered by the data source; which types a slot takes depends on the face. Not measured."},MONOCHROMATIC_IMAGE:{support:"supported",reason:"Offered by the data source; which types a slot takes depends on the face. Not measured."},PHOTO_IMAGE:{support:"unsupported",reason:"The QuickWatch data source does not offer it (AndroidManifest SUPPORTED_TYPES)."},GOAL_PROGRESS:{support:"unsupported",reason:"The QuickWatch data source does not offer it; rangedValue covers progress."},WEIGHTED_ELEMENTS:{support:"unsupported",reason:"The QuickWatch data source does not offer it."}}}}};var Ua={$schema:"../device-profile.schema.json",id:"wear-large-round",name:"Wear OS Large Round (emulator)",platform:"wear",measured:!0,source:"Android Studio device definition 'Wear OS Large Round' (454x454 px, xhdpi; the AVD Wear_OS_Large_Round has hw.lcd 454x454 at 320 dpi, sdklib devices/wear.xml) and the Wear app rendered under Robolectric with these qualifiers.",screen:{shape:"round",widthPx:454,heightPx:454,density:2,widthDp:227,heightDp:227,sizeClass:"large"},insets:{safe:34,screenHorizontal:12,screenTop:30,screenBottom:53,tileHorizontal:17},fonts:{app:{family:"Roboto Flex",typeScale:"tokens.json#/typeScale",note:"Bundled with the app as static instances (res/font), so every watch draws pages in the same font as the web preview."},tile:{family:"system font (Roboto on the emulator image; Robolectric's system font in the JVM goldens)",note:"Tiles cannot use app fonts: ProtoLayout draws them with the system font and its own Material 3 typography tokens (TITLE_SMALL, NUMERAL_MEDIUM, BODY_SMALL, ...), not tokens.json typeScale."},complication:{family:"the watch face",note:"The watch face draws complications with its own font, size and colours; previews are a guide, not a pixel reference."}},surfaces:{screen:{limits:{listMaxRows:10,textMaxLines:3},components:{text:{support:"supported",limits:{maxLines:3}},stat:{support:"supported"},list:{support:"supported",limits:{maxRows:10}},status:{support:"supported"},progress:{support:"supported"},countdown:{support:"supported",reason:"Ticks every second against the watch clock while the page is open."},button:{support:"supported",reason:"A confirm asks first in a Material 3 AlertDialog."},toggle:{support:"supported",reason:"Optimistic per toggle key; rolls back when the action fails."},icon:{support:"supported",reason:"Built-in icons are vector drawables from the same path data as the web; image URLs are fetched and cached."},stack:{support:"supported",reason:"The root stack and its lists are flattened into the scrolling column so each row scales at the screen edge on its own."}}},tile:{theme:{corners:{support:"degraded",to:"rounded",reason:"ProtoLayout Material 3 draws tile buttons and the edge button in its own shapes; the theme's corner style applies to the App's pages."},typeWeight:{support:"degraded",to:"the system font's weights",reason:"Tiles use the system font with ProtoLayout's own typography (fonts.tile), so the theme's weight offset does not apply."},typeWidth:{support:"unsupported",reason:"ProtoLayout tiles have no width axis: the system font is drawn at its normal width."}},instances:10,minRefreshSeconds:60,limits:{listMaxRows:3,compactListMaxRows:8,maxButtons:2,maxToggles:1,countdownTimelineEntries:40},templates:{text:{support:"supported",limits:{maxLines:3},slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."}}},"single-stat":{support:"supported",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."}}},list3:{support:"supported",limits:{maxRows:3},reason:"Rows past the limit become a '+N more' line.",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},"item.subtitle":{support:"unsupported",reason:"list3 rows are one line: icon, title and trailing value."},"item.badge":{support:"unsupported",reason:"list3 rows are one line: icon, title and trailing value."},"item.action":{support:"degraded",to:"a tap on the tile opens the page",reason:"Tile rows are not separately clickable."}}},"compact-list":{support:"supported",limits:{maxRows:8},reason:"One-line rows in the space of the edge button (no Open button: the whole tile opens the page). An error banner and the stale hint each take the place of one row.",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},"item.icon":{support:"unsupported",reason:"compact-list rows are one line of title and trailing value."},"item.subtitle":{support:"unsupported",reason:"compact-list rows are one line of title and trailing value."},"item.badge":{support:"unsupported",reason:"compact-list rows are one line of title and trailing value."},"item.action":{support:"degraded",to:"a tap on the tile opens the page",reason:"Tile rows are not separately clickable."}}},status:{support:"supported",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},detail:{support:"supported",limits:{maxLines:2}}}},"progress-ring":{support:"supported",reason:"The ring runs along the screen edge, with a gap for the edge button.",slots:{icon:{support:"unsupported",reason:"The template wraps primaryLayout in the ring's box, so the system leaves the header icon slot empty (checked on the Wear OS 6 emulator, 2026-11-07): neither the glance icon nor the app icon is shown."}}},buttons2:{support:"supported",limits:{maxButtons:2},slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},"buttons.label":{support:"degraded",to:"a one-line caption under a round icon button (the first letter in the button when it has no icon)",reason:"Tile buttons are round icon buttons."},"buttons.confirm":{support:"degraded",to:"opens the app, which asks to confirm",reason:"Tiles cannot show dialogs."}}},toggle:{support:"supported",limits:{maxToggles:1},slots:{icon:{support:"degraded",to:"the toggle's icon (or the glance icon) inside the toggle button; the header shows the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."}}}},components:{text:{support:"supported",limits:{maxLines:3},reason:"In the text template's slot, at TITLE_MEDIUM."},stat:{support:"supported",reason:"single-stat template."},list:{support:"degraded",to:"list3 (3 rows and '+N more') or compact-list (8 one-line rows)",reason:"Tiles do not scroll.",limits:{maxRows:8}},status:{support:"supported",reason:"status template."},progress:{support:"supported",reason:"progress-ring template.",slots:{"style.bar":{support:"degraded",to:"a ring",reason:"The tile template is progress-ring only."}}},countdown:{support:"degraded",to:"timeline entries pre-rendered at the instants the text changes",reason:"Tiles cannot tick: every 10 s in the last 3 minutes, every minute before that, at most 40 entries over 30 minutes; then the tile asks again.",limits:{timelineEntries:40}},button:{support:"degraded",to:"buttons2: round icon buttons with a one-line caption",reason:"Tile buttons are round icon buttons; a confirm opens the app.",limits:{maxButtons:2}},toggle:{support:"supported",reason:"toggle template.",limits:{maxToggles:1}},icon:{support:"degraded",to:"built-in icons inside list rows, buttons and toggles only",reason:"The header icon is the app icon (system), and tile resources are the bundled icons.",slots:{url:{support:"unsupported",reason:"Tile images must be bundled resources; image URLs are not fetched."}}},stack:{support:"unsupported",reason:"A tile shows one fixed template, not a free layout."}}},complication:{instances:1,minRefreshSeconds:300,kinds:{shortText:{support:"supported",limits:{maxTextChars:7},fills:["SHORT_TEXT","LONG_TEXT"],fillsWithIcon:["SMALL_IMAGE","MONOCHROMATIC_IMAGE"],slots:{"text.countdown":{support:"degraded",to:"the platform's ticking time-difference text ('7m', '02:30')",reason:"The watch face ticks complications with TimeDifferenceComplicationText, which cannot print the app strings (SHORT_SINGLE_UNIT, STOPWATCH in the last 3 minutes and for format clock)."}}},longText:{support:"supported",limits:{maxTextChars:24},fills:["LONG_TEXT","SHORT_TEXT"],fillsWithIcon:["SMALL_IMAGE","MONOCHROMATIC_IMAGE"],slots:{"text.countdown":{support:"degraded",to:"the platform's ticking time-difference text ('7m', '02:30')",reason:"As shortText."}}},rangedValue:{support:"supported",limits:{maxTextChars:7},fills:["RANGED_VALUE","SHORT_TEXT","LONG_TEXT"],fillsWithIcon:["SMALL_IMAGE","MONOCHROMATIC_IMAGE"],reason:"In a text slot it shows its text, or else its value as a number."},image:{support:"supported",fills:["SMALL_IMAGE"],fillsWithIcon:["MONOCHROMATIC_IMAGE"],slots:{url:{support:"degraded",to:"SMALL_IMAGE of type PHOTO only",reason:"A fetched bitmap cannot be tinted, so MONOCHROMATIC_IMAGE needs a built-in icon."}}}},types:{SHORT_TEXT:{support:"supported"},LONG_TEXT:{support:"supported"},RANGED_VALUE:{support:"supported"},SMALL_IMAGE:{support:"supported"},MONOCHROMATIC_IMAGE:{support:"supported"},PHOTO_IMAGE:{support:"unsupported",reason:"The QuickWatch data source does not offer it (AndroidManifest SUPPORTED_TYPES)."},GOAL_PROGRESS:{support:"unsupported",reason:"The QuickWatch data source does not offer it; rangedValue covers progress."},WEIGHTED_ELEMENTS:{support:"unsupported",reason:"The QuickWatch data source does not offer it."}}}}};var Ha={$schema:"../device-profile.schema.json",id:"wear-small-round",name:"Wear OS Small Round (emulator)",platform:"wear",measured:!0,source:"Android Studio device definition 'Wear OS Small Round' (384x384 px, xhdpi, sdklib devices/wear.xml) and the Wear app rendered under Robolectric with these qualifiers.",screen:{shape:"round",widthPx:384,heightPx:384,density:2,widthDp:192,heightDp:192,sizeClass:"small",caseMm:40},insets:{safe:29,screenHorizontal:10,screenTop:25,screenBottom:45,tileHorizontal:14},fonts:{app:{family:"Roboto Flex",typeScale:"tokens.json#/typeScale",note:"Bundled with the app as static instances (res/font), so every watch draws pages in the same font as the web preview."},tile:{family:"system font (Roboto on the emulator image; Robolectric's system font in the JVM goldens)",note:"Tiles cannot use app fonts: ProtoLayout draws them with the system font and its own Material 3 typography tokens (TITLE_SMALL, NUMERAL_MEDIUM, BODY_SMALL, ...), not tokens.json typeScale."},complication:{family:"the watch face",note:"The watch face draws complications with its own font, size and colours; previews are a guide, not a pixel reference."}},surfaces:{screen:{limits:{listMaxRows:10,textMaxLines:3},components:{text:{support:"supported",limits:{maxLines:3}},stat:{support:"supported"},list:{support:"supported",limits:{maxRows:10}},status:{support:"supported"},progress:{support:"supported"},countdown:{support:"supported",reason:"Ticks every second against the watch clock while the page is open."},button:{support:"supported",reason:"A confirm asks first in a Material 3 AlertDialog."},toggle:{support:"supported",reason:"Optimistic per toggle key; rolls back when the action fails."},icon:{support:"supported",reason:"Built-in icons are vector drawables from the same path data as the web; image URLs are fetched and cached."},stack:{support:"supported",reason:"The root stack and its lists are flattened into the scrolling column so each row scales at the screen edge on its own."}}},tile:{theme:{corners:{support:"degraded",to:"rounded",reason:"ProtoLayout Material 3 draws tile buttons and the edge button in its own shapes; the theme's corner style applies to the App's pages."},typeWeight:{support:"degraded",to:"the system font's weights",reason:"Tiles use the system font with ProtoLayout's own typography (fonts.tile), so the theme's weight offset does not apply."},typeWidth:{support:"unsupported",reason:"ProtoLayout tiles have no width axis: the system font is drawn at its normal width."}},instances:10,minRefreshSeconds:60,limits:{listMaxRows:3,compactListMaxRows:6,maxButtons:2,maxToggles:1,countdownTimelineEntries:40},templates:{text:{support:"supported",limits:{maxLines:3},slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."}}},"single-stat":{support:"supported",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."}}},list3:{support:"supported",limits:{maxRows:3},reason:"Rows past the limit become a '+N more' line.",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},"item.subtitle":{support:"unsupported",reason:"list3 rows are one line: icon, title and trailing value."},"item.badge":{support:"unsupported",reason:"list3 rows are one line: icon, title and trailing value."},"item.action":{support:"degraded",to:"a tap on the tile opens the page",reason:"Tile rows are not separately clickable."}}},"compact-list":{support:"supported",limits:{maxRows:6},reason:"One-line rows in the space of the edge button (no Open button: the whole tile opens the page). An error banner and the stale hint each take the place of one row.",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},"item.icon":{support:"unsupported",reason:"compact-list rows are one line of title and trailing value."},"item.subtitle":{support:"unsupported",reason:"compact-list rows are one line of title and trailing value."},"item.badge":{support:"unsupported",reason:"compact-list rows are one line of title and trailing value."},"item.action":{support:"degraded",to:"a tap on the tile opens the page",reason:"Tile rows are not separately clickable."}}},status:{support:"supported",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},detail:{support:"supported",limits:{maxLines:2}}}},"progress-ring":{support:"supported",reason:"The ring runs along the screen edge, with a gap for the edge button.",slots:{icon:{support:"unsupported",reason:"The template wraps primaryLayout in the ring's box, so the system leaves the header icon slot empty (checked on the Wear OS 6 emulator, 2026-11-07): neither the glance icon nor the app icon is shown."}}},buttons2:{support:"supported",limits:{maxButtons:2},slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},"buttons.label":{support:"degraded",to:"a one-line caption under a round icon button (the first letter in the button when it has no icon)",reason:"Tile buttons are round icon buttons."},"buttons.confirm":{support:"degraded",to:"opens the app, which asks to confirm",reason:"Tiles cannot show dialogs."}}},toggle:{support:"supported",limits:{maxToggles:1},slots:{icon:{support:"degraded",to:"the toggle's icon (or the glance icon) inside the toggle button; the header shows the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."}}}},components:{text:{support:"supported",limits:{maxLines:3},reason:"In the text template's slot, at TITLE_MEDIUM."},stat:{support:"supported",reason:"single-stat template."},list:{support:"degraded",to:"list3 (3 rows and '+N more') or compact-list (6 one-line rows)",reason:"Tiles do not scroll.",limits:{maxRows:6}},status:{support:"supported",reason:"status template."},progress:{support:"supported",reason:"progress-ring template.",slots:{"style.bar":{support:"degraded",to:"a ring",reason:"The tile template is progress-ring only."}}},countdown:{support:"degraded",to:"timeline entries pre-rendered at the instants the text changes",reason:"Tiles cannot tick: every 10 s in the last 3 minutes, every minute before that, at most 40 entries over 30 minutes; then the tile asks again.",limits:{timelineEntries:40}},button:{support:"degraded",to:"buttons2: round icon buttons with a one-line caption",reason:"Tile buttons are round icon buttons; a confirm opens the app.",limits:{maxButtons:2}},toggle:{support:"supported",reason:"toggle template.",limits:{maxToggles:1}},icon:{support:"degraded",to:"built-in icons inside list rows, buttons and toggles only",reason:"The header icon is the app icon (system), and tile resources are the bundled icons.",slots:{url:{support:"unsupported",reason:"Tile images must be bundled resources; image URLs are not fetched."}}},stack:{support:"unsupported",reason:"A tile shows one fixed template, not a free layout."}}},complication:{instances:1,minRefreshSeconds:300,kinds:{shortText:{support:"supported",limits:{maxTextChars:7},fills:["SHORT_TEXT","LONG_TEXT"],fillsWithIcon:["SMALL_IMAGE","MONOCHROMATIC_IMAGE"],slots:{"text.countdown":{support:"degraded",to:"the platform's ticking time-difference text ('7m', '02:30')",reason:"The watch face ticks complications with TimeDifferenceComplicationText, which cannot print the app strings (SHORT_SINGLE_UNIT, STOPWATCH in the last 3 minutes and for format clock)."}}},longText:{support:"supported",limits:{maxTextChars:24},fills:["LONG_TEXT","SHORT_TEXT"],fillsWithIcon:["SMALL_IMAGE","MONOCHROMATIC_IMAGE"],slots:{"text.countdown":{support:"degraded",to:"the platform's ticking time-difference text ('7m', '02:30')",reason:"As shortText."}}},rangedValue:{support:"supported",limits:{maxTextChars:7},fills:["RANGED_VALUE","SHORT_TEXT","LONG_TEXT"],fillsWithIcon:["SMALL_IMAGE","MONOCHROMATIC_IMAGE"],reason:"In a text slot it shows its text, or else its value as a number."},image:{support:"supported",fills:["SMALL_IMAGE"],fillsWithIcon:["MONOCHROMATIC_IMAGE"],slots:{url:{support:"degraded",to:"SMALL_IMAGE of type PHOTO only",reason:"A fetched bitmap cannot be tinted, so MONOCHROMATIC_IMAGE needs a built-in icon."}}}},types:{SHORT_TEXT:{support:"supported"},LONG_TEXT:{support:"supported"},RANGED_VALUE:{support:"supported"},SMALL_IMAGE:{support:"supported"},MONOCHROMATIC_IMAGE:{support:"supported"},PHOTO_IMAGE:{support:"unsupported",reason:"The QuickWatch data source does not offer it (AndroidManifest SUPPORTED_TYPES)."},GOAL_PROGRESS:{support:"unsupported",reason:"The QuickWatch data source does not offer it; rangedValue covers progress."},WEIGHTED_ELEMENTS:{support:"unsupported",reason:"The QuickWatch data source does not offer it."}}}}};var Wa={$schema:"../device-profile.schema.json",id:"wear-square",name:"Wear OS Square (emulator)",platform:"wear",measured:!0,source:"Android Studio device definition 'Wear OS Square' (360x360 px, xhdpi, sdklib devices/wear.xml) and the Wear app rendered under Robolectric with these qualifiers.",screen:{shape:"square",widthPx:360,heightPx:360,density:2,widthDp:180,heightDp:180,sizeClass:"small"},insets:{safe:0,screenHorizontal:10,screenTop:24,screenBottom:42,tileHorizontal:13},fonts:{app:{family:"Roboto Flex",typeScale:"tokens.json#/typeScale",note:"Bundled with the app as static instances (res/font), so every watch draws pages in the same font as the web preview."},tile:{family:"system font (Roboto on the emulator image; Robolectric's system font in the JVM goldens)",note:"Tiles cannot use app fonts: ProtoLayout draws them with the system font and its own Material 3 typography tokens (TITLE_SMALL, NUMERAL_MEDIUM, BODY_SMALL, ...), not tokens.json typeScale."},complication:{family:"the watch face",note:"The watch face draws complications with its own font, size and colours; previews are a guide, not a pixel reference."}},surfaces:{screen:{limits:{listMaxRows:10,textMaxLines:3},components:{text:{support:"supported",limits:{maxLines:3}},stat:{support:"supported"},list:{support:"supported",limits:{maxRows:10}},status:{support:"supported"},progress:{support:"supported"},countdown:{support:"supported",reason:"Ticks every second against the watch clock while the page is open."},button:{support:"supported",reason:"A confirm asks first in a Material 3 AlertDialog."},toggle:{support:"supported",reason:"Optimistic per toggle key; rolls back when the action fails."},icon:{support:"supported",reason:"Built-in icons are vector drawables from the same path data as the web; image URLs are fetched and cached."},stack:{support:"supported",reason:"The root stack and its lists are flattened into the scrolling column so each row scales at the screen edge on its own."}}},tile:{theme:{corners:{support:"degraded",to:"rounded",reason:"ProtoLayout Material 3 draws tile buttons and the edge button in its own shapes; the theme's corner style applies to the App's pages."},typeWeight:{support:"degraded",to:"the system font's weights",reason:"Tiles use the system font with ProtoLayout's own typography (fonts.tile), so the theme's weight offset does not apply."},typeWidth:{support:"unsupported",reason:"ProtoLayout tiles have no width axis: the system font is drawn at its normal width."}},instances:10,minRefreshSeconds:60,limits:{listMaxRows:3,compactListMaxRows:6,maxButtons:2,maxToggles:1,countdownTimelineEntries:40},templates:{text:{support:"supported",limits:{maxLines:3},slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."}}},"single-stat":{support:"supported",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."}}},list3:{support:"supported",limits:{maxRows:3},reason:"Rows past the limit become a '+N more' line.",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},"item.subtitle":{support:"unsupported",reason:"list3 rows are one line: icon, title and trailing value."},"item.badge":{support:"unsupported",reason:"list3 rows are one line: icon, title and trailing value."},"item.action":{support:"degraded",to:"a tap on the tile opens the page",reason:"Tile rows are not separately clickable."}}},"compact-list":{support:"supported",limits:{maxRows:6},reason:"One-line rows in the space of the edge button (no Open button: the whole tile opens the page). An error banner and the stale hint each take the place of one row.",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},"item.icon":{support:"unsupported",reason:"compact-list rows are one line of title and trailing value."},"item.subtitle":{support:"unsupported",reason:"compact-list rows are one line of title and trailing value."},"item.badge":{support:"unsupported",reason:"compact-list rows are one line of title and trailing value."},"item.action":{support:"degraded",to:"a tap on the tile opens the page",reason:"Tile rows are not separately clickable."}}},status:{support:"supported",slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},detail:{support:"supported",limits:{maxLines:2}}}},"progress-ring":{support:"supported",reason:"The ring is drawn as a circle inside the square screen, with a gap for the edge button.",slots:{icon:{support:"unsupported",reason:"The template wraps primaryLayout in the ring's box, so the system leaves the header icon slot empty (checked on the Wear OS 6 emulator, 2026-11-07): neither the glance icon nor the app icon is shown."}}},buttons2:{support:"supported",limits:{maxButtons:2},slots:{icon:{support:"degraded",to:"the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."},"buttons.label":{support:"degraded",to:"a one-line caption under a round icon button (the first letter in the button when it has no icon)",reason:"Tile buttons are round icon buttons."},"buttons.confirm":{support:"degraded",to:"opens the app, which asks to confirm",reason:"Tiles cannot show dialogs."}}},toggle:{support:"supported",limits:{maxToggles:1},slots:{icon:{support:"degraded",to:"the toggle's icon (or the glance icon) inside the toggle button; the header shows the app icon",reason:"ProtoLayout's primaryLayout reserves the header icon slot and the system draws the app icon there; the glance icon is not repeated."}}}},components:{text:{support:"supported",limits:{maxLines:3},reason:"In the text template's slot, at TITLE_MEDIUM."},stat:{support:"supported",reason:"single-stat template."},list:{support:"degraded",to:"list3 (3 rows and '+N more') or compact-list (6 one-line rows)",reason:"Tiles do not scroll.",limits:{maxRows:6}},status:{support:"supported",reason:"status template."},progress:{support:"supported",reason:"progress-ring template.",slots:{"style.bar":{support:"degraded",to:"a ring",reason:"The tile template is progress-ring only."}}},countdown:{support:"degraded",to:"timeline entries pre-rendered at the instants the text changes",reason:"Tiles cannot tick: every 10 s in the last 3 minutes, every minute before that, at most 40 entries over 30 minutes; then the tile asks again.",limits:{timelineEntries:40}},button:{support:"degraded",to:"buttons2: round icon buttons with a one-line caption",reason:"Tile buttons are round icon buttons; a confirm opens the app.",limits:{maxButtons:2}},toggle:{support:"supported",reason:"toggle template.",limits:{maxToggles:1}},icon:{support:"degraded",to:"built-in icons inside list rows, buttons and toggles only",reason:"The header icon is the app icon (system), and tile resources are the bundled icons.",slots:{url:{support:"unsupported",reason:"Tile images must be bundled resources; image URLs are not fetched."}}},stack:{support:"unsupported",reason:"A tile shows one fixed template, not a free layout."}}},complication:{instances:1,minRefreshSeconds:300,kinds:{shortText:{support:"supported",limits:{maxTextChars:7},fills:["SHORT_TEXT","LONG_TEXT"],fillsWithIcon:["SMALL_IMAGE","MONOCHROMATIC_IMAGE"],slots:{"text.countdown":{support:"degraded",to:"the platform's ticking time-difference text ('7m', '02:30')",reason:"The watch face ticks complications with TimeDifferenceComplicationText, which cannot print the app strings (SHORT_SINGLE_UNIT, STOPWATCH in the last 3 minutes and for format clock)."}}},longText:{support:"supported",limits:{maxTextChars:24},fills:["LONG_TEXT","SHORT_TEXT"],fillsWithIcon:["SMALL_IMAGE","MONOCHROMATIC_IMAGE"],slots:{"text.countdown":{support:"degraded",to:"the platform's ticking time-difference text ('7m', '02:30')",reason:"As shortText."}}},rangedValue:{support:"supported",limits:{maxTextChars:7},fills:["RANGED_VALUE","SHORT_TEXT","LONG_TEXT"],fillsWithIcon:["SMALL_IMAGE","MONOCHROMATIC_IMAGE"],reason:"In a text slot it shows its text, or else its value as a number."},image:{support:"supported",fills:["SMALL_IMAGE"],fillsWithIcon:["MONOCHROMATIC_IMAGE"],slots:{url:{support:"degraded",to:"SMALL_IMAGE of type PHOTO only",reason:"A fetched bitmap cannot be tinted, so MONOCHROMATIC_IMAGE needs a built-in icon."}}}},types:{SHORT_TEXT:{support:"supported"},LONG_TEXT:{support:"supported"},RANGED_VALUE:{support:"supported"},SMALL_IMAGE:{support:"supported"},MONOCHROMATIC_IMAGE:{support:"supported"},PHOTO_IMAGE:{support:"unsupported",reason:"The QuickWatch data source does not offer it (AndroidManifest SUPPORTED_TYPES)."},GOAL_PROGRESS:{support:"unsupported",reason:"The QuickWatch data source does not offer it; rangedValue covers progress."},WEIGHTED_ELEMENTS:{support:"unsupported",reason:"The QuickWatch data source does not offer it."}}}}};var Qo=[Ba,Fa,Ua,Ha,Wa],eu="0.1.0",Xa=Qo.map(e=>e.id),tu=xt.map(e=>e.id),Ga=typeof document<"u"&&document.currentScript instanceof HTMLScriptElement?document.currentScript.src:"";function nu(e){if(e.getElementById("quickwatch-preview-css"))return;let t=e.createElement("style");t.id="quickwatch-preview-css",t.textContent=Ga?Ho.replace(/url\('fonts\//g,`url('${new URL("fonts/",Ga).href}`):Ho.replace(/@font-face\s*\{[^}]*\}/g,""),e.head.appendChild(t)}function qa(e,t,n){if(e===void 0)return{};if(typeof e!="string")return e;let r=$a(e,t);for(let o of r.issues)n.push(`${t}: ${o.message}`);return r.value&&typeof r.value=="object"&&!Array.isArray(r.value)?r.value:null}function Za(e,t){let n=[],r=qa(e,"watch.json",n),o=qa(t,"data.json",n),s=r&&typeof r.experiences=="object"&&r.experiences&&!Array.isArray(r.experiences)?r.experiences:{},i=[];if(r)for(let[a,l]of Object.entries(s))try{let c=Ja(r,o??{},a,{experienceId:`draft_${a}`,version:0}),p=l&&typeof l=="object"&&!Array.isArray(l)?l.theme:void 0;i.push({key:a,label:a,bundle:c.bundle,theme:Vr(p).theme})}catch(c){n.push(`${a}: ${c instanceof Error?c.message:String(c)}`)}return r&&!Object.keys(s).length&&n.push("watch.json: no experiences"),{list:i,errors:n}}function ru(e,t,n,r={}){nu(e.ownerDocument);let o=Qo.find(d=>d.id===r.device)??Qo[0],s=r.size?r.size/o.screen.widthDp:1,{list:i,errors:a}=Za(t,n),l=null,c={get experiences(){return i.map(d=>d.key)},get surfaces(){return(l?.surfaces??[]).map(d=>({key:d.key,label:d.label,kind:d.kind}))},get surface(){return l?.surface??""},get errors(){return a},show(d){l?.command({type:"surface",surface:d})},update(d,g){({list:i,errors:a}=Za(d,g)),l&&i.length?l.setPayload({payloadVersion:1,experiences:i}):p()},destroy(){l?.destroy(),l=null}};function p(){if(l?.destroy(),l=null,!i.length){e.textContent=a.join(`
1979
+ `)||"Nothing to show.";return}l=Uo(e,{payloadVersion:1,experiences:i},{...r.experience?{experience:r.experience}:{},...r.surface?{surface:r.surface}:{},device:o.id,theme:r.theme??"auto",data:r.data??"sample",ambient:r.ambient??!1,devices:Xa,...r.onUpdate?{onUpdate:()=>r.onUpdate(c)}:{},engine:{resolve:(d,g,y,m)=>mn(cr(d,g,y,m),o).view,render:(d,g)=>Ys(e,d,{...g,deviceProfile:Ro(o),scale:s,frame:r.frame??!0,idPrefix:"qwp"})}})}return p(),c}return ol(ou);})();