CINXE.COM

Further groundwork for the Status Page Collections UI | Sorry™ Service Status

<!doctype html> <html lang="en" > <head> <script type="text/javascript" nonce="1JXguYhv4IKv2GCpA1uAaqmUanI5m4AZU1Q4RPCOYfU=">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"92b677be6b","applicationID":"8841359","transactionName":"clcIRUBYW1xTRUsVTVNUD1IdWVhEX1QBFhdCUAlG","queueTime":2,"applicationTime":186,"agent":""}</script> <script type="text/javascript" nonce="1JXguYhv4IKv2GCpA1uAaqmUanI5m4AZU1Q4RPCOYfU=">(window.NREUM||(NREUM={})).init={privacy:{cookies_enabled:true},ajax:{deny_list:[]}};(window.NREUM||(NREUM={})).loader_config={licenseKey:"92b677be6b",applicationID:"8841359"};;/*! For license information please see nr-loader-rum-1.274.0.min.js.LICENSE.txt */ (()=>{var e,t,r={8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555:(e,t,r)=>{"use strict";r.d(t,{Vp:()=>c,fn:()=>s,x1:()=>u});var n=r(384),i=r(8122);const o={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){try{const t=c(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}function c(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function u(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.info=a[e])}},9417:(e,t,r)=>{"use strict";r.d(t,{D0:()=>g,gD:()=>h,xN:()=>p});var n=r(993);const i=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var o=r(2614),a=r(944),s=r(384),c=r(8122);const u="[data-nr-mask]",d=()=>{const e={mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,harvestTimeSeconds:10,autoStart:!0},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},feature_flags:[],generic_events:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},harvest:{tooManyRequestsDelay:60},jserrors:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},logging:{enabled:!0,harvestTimeSeconds:10,autoStart:!0,level:n.p_.INFO},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:o.wk,inactiveMs:o.BB},session_replay:{autoStart:!0,enabled:!1,harvestTimeSeconds:60,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){i(t)?e.mask_selector="".concat(t,",").concat(u):""===t||null===t?e.mask_selector=u:(0,a.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){i(t)?e.block_selector+=",".concat(t):""!==t&&(0,a.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,a.R)(7,t)}},session_trace:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},soft_navigations:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},spa:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},ssl:void 0,user_actions:{enabled:!0}}},l={},f="All configuration objects require an agent identifier!";function g(e){if(!e)throw new Error(f);if(!l[e])throw new Error("Configuration for ".concat(e," was never set"));return l[e]}function p(e,t){if(!e)throw new Error(f);l[e]=(0,c.a)(t,d());const r=(0,s.nY)(e);r&&(r.init=l[e])}function h(e,t){if(!e)throw new Error(f);var r=g(e);if(r){for(var n=t.split("."),i=0;i<n.length-1;i++)if("object"!=typeof(r=r[n[i]]))return;r=r[n[n.length-1]]}return r}},3371:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,f:()=>l});var n=r(8122),i=r(384),o=r(6154),a=r(9324);let s=0;const c={buildEnv:a.F3,distMethod:a.Xs,version:a.xv,originTime:o.WN},u={customTransaction:void 0,disabled:!1,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,onerror:void 0,ptid:void 0,releaseIds:{},appMetadata:{},session:void 0,denyList:void 0,timeKeeper:void 0,obfuscator:void 0},d={};function l(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!d[e])throw new Error("Runtime for ".concat(e," was never set"));return d[e]}function f(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");d[e]={...(0,n.a)(t,u),...c},Object.hasOwnProperty.call(d[e],"harvestCount")||Object.defineProperty(d[e],"harvestCount",{get:()=>++s});const r=(0,i.nY)(e);r&&(r.runtime=d[e])}},9324:(e,t,r)=>{"use strict";r.d(t,{F3:()=>i,Xs:()=>o,xv:()=>n});const n="1.274.0",i="PROD",o="CDN"},6154:(e,t,r)=>{"use strict";r.d(t,{OF:()=>c,RI:()=>i,WN:()=>d,bv:()=>o,gm:()=>a,mw:()=>s,sb:()=>u});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),s=Boolean("hidden"===a?.document?.visibilityState),c=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=c&&"undefined"==typeof SharedWorker,d=((()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);Array.isArray(e)&&e.length>=2&&e[1]})(),Date.now()-(0,n.t)())},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>c,Ze:()=>l,x3:()=>u});var n=r(7836),i=r(3606),o=r(860),a=r(2646);const s={};function c(e,t){const r={staged:!1,priority:o.P3[t]||0};d(e),s[e].get(t)||s[e].set(t,r)}function u(e,t){e&&s[e]&&(s[e].get(t)&&s[e].delete(t),g(e,t,!1),s[e].size&&f(e))}function d(e){if(!e)throw new Error("agentIdentifier required");s[e]||(s[e]=new Map)}function l(e="",t="feature",r=!1){if(d(e),!e||!s[e].get(t)||r)return g(e,t);s[e].get(t).staged=!0,f(e)}function f(e){const t=Array.from(s[e]);t.every((([e,t])=>t.staged))&&(t.sort(((e,t)=>e[1].priority-t[1].priority)),t.forEach((([t])=>{s[e].delete(t),g(e,t)})))}function g(e,t,r=!0){const o=e?n.ee.get(e):n.ee,s=i.i.handlers;if(!o.aborted&&o.backlog&&s){if(r){const e=o.backlog[t],r=s[t];if(r){for(let t=0;e&&t<e.length;++t)p(e[t],r);Object.entries(r).forEach((([e,t])=>{Object.values(t||{}).forEach((t=>{t[0]?.on&&t[0]?.context()instanceof a.y&&t[0].on(e,t[1])}))}))}}o.isolatedBacklog||delete s[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function p(e,t){var r=e[1];Object.values(t[r]||{}).forEach((t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],o=e[2];n.apply(i,o)}}))}},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>c,ee:()=>u});var n=r(384),i=r(8990),o=r(3371),a=r(2646),s=r(5607);const c="nr@context:".concat(s.W),u=function e(t,r){var n={},s={},d={},l=!1;try{l=16===r.length&&(0,o.f)(r).isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,o){!1!==o&&(o=!0);if(u.aborted&&!i)return;t&&o&&t.emit(e,r,n);for(var a=g(n),c=h(e),d=c.length,l=0;l<d;l++)c[l].apply(a,r);var p=m()[s[e]];p&&p.push([f,e,r,a]);return a},get:v,listeners:h,context:g,buffer:function(e,t){const r=m();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach((([e,n])=>{s[n]=t,t in r||(r[t]=[])}))},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach((e=>{delete f.backlog[e]}))},isBuffering:function(e){return!!m()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function g(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,c,(()=>new a.y(c))):new a.y(c)}function p(e,t){n[e]=h(e).concat(t)}function h(e){return n[e]||[]}function v(t){return d[t]=d[t]||e(f,t)}function m(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=u)},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var n=r(9908);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.d,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.d);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function o(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>o,jT:()=>n,sp:()=>i})},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>s,bz:()=>a});var n=r(6154);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),i.split("").map((e=>"x"===e?o(t,r++).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var s=0;s<e;s++)a.push(o(r,i++).toString(16));return a.join("")}},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>a,H3:()=>n,g:()=>u,iL:()=>c,tS:()=>s,uh:()=>i,wk:()=>o});const n="NRBA",i="SESSION",o=144e5,a=18e5,s={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},u={OFF:0,FULL:1,ERROR:2}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},944:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.debug&&console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t)}r.d(t,{R:()=>n})},5284:(e,t,r)=>{"use strict";r.d(t,{t:()=>c,B:()=>s});var n=r(7836),i=r(6154);const o="newrelic";const a=new Set,s={};function c(e,t){const r=n.ee.get(t);s[t]??={},e&&"object"==typeof e&&(a.has(t)||(r.emit("rumresp",[e]),s[t]=e,a.add(t),function(e={}){try{i.gm.dispatchEvent(new CustomEvent(o,{detail:e}))}catch(e){}}({loaded:!0})))}},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout((()=>{i=clearTimeout(i)}),t)),n||(clearTimeout(i),i=setTimeout((()=>{e.apply(this,r)}),t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,sB:()=>a});var n=r(3878);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.sp)("load",e,t)}function a(e){if(i())return e();(0,n.DD)("DOMContentLoaded",e)}},384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>o,US:()=>d,Zm:()=>a,bQ:()=>c,dV:()=>s,nY:()=>u,pV:()=>l});var n=r(6154),i=r(1863);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function s(){let e=a();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t}function u(e){let t=a();return t.initializedAgents?.[e]}function d(e,t){a()[e]=t}function l(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},2843:(e,t,r)=>{"use strict";r.d(t,{u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,i)}},3434:(e,t,r)=>{"use strict";r.d(t,{YM:()=>c});var n=r(7836),i=r(5607);const o="nr@original:".concat(i.W);var a=Object.prototype.hasOwnProperty,s=!1;function c(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");const a="-"===n.charAt(0);for(let s=0;s<t.length;s++){const c=t[s],u=e[c];d(u)||(e[c]=r(u,a?c+n:n,i,c,o))}},r.flag=o,r;function r(t,r,n,s,c){return d(t)?t:(r||(r=""),nrWrapper[o]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})})),t}catch(e){u([e],r)}for(var n in e)a.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var o,a,d,l;try{a=this,o=[...arguments],d="function"==typeof n?n(o,a):n||{}}catch(t){u([t,"",[o,a,s],d],e)}i(r+"start",[o,a,s],d,c);try{return l=t.apply(a,o)}catch(e){throw i(r+"err",[o,a,e],d,c),e}finally{i(r+"end",[o,a,l],d,c)}}}function i(r,n,i,o){if(!s||t){var a=s;s=!0;try{e.emit(r,n,i,t,o)}catch(t){u([t,r,n,i],e)}s=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function d(e){return!(e&&"function"==typeof e&&e.apply&&!e[o])}},993:(e,t,r)=>{"use strict";r.d(t,{ET:()=>o,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},o="log";n.K7.logging},3969:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,XG:()=>s,rs:()=>i,xV:()=>a,z_:()=>o});const n=r(860).K7.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},6344:(e,t,r)=>{"use strict";r.d(t,{G4:()=>i});var n=r(2614);r(860).K7.sessionReplay;const i={RECORD:"recordReplay",PAUSE:"pauseReplay",REPLAY_RUNNING:"replayRunning",ERROR_DURING_REPLAY:"errorDuringReplay"};n.g.ERROR,n.g.FULL,n.g.OFF},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(7836),i=r(1687);class o{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},7603:(e,t,r)=>{"use strict";r.d(t,{j:()=>P});var n=r(860),i=r(2555),o=r(3371),a=r(9908),s=r(7836),c=r(1687),u=r(5289),d=r(6154),l=r(944),f=r(3969),g=r(384),p=r(6344);const h=["setErrorHandler","finished","addToTrace","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start",p.G4.RECORD,p.G4.PAUSE,"log","wrapLogger"],v=["setErrorHandler","finished","addToTrace","addRelease"];var m=r(1863),b=r(2614),y=r(993);var w=r(2646),A=r(3434);function R(e,t,r,n){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const i=function(e){return(e||s.ee).get("logger")}(e),o=(0,A.YM)(i),a=new w.y(s.P);return a.level=n.level,a.customAttributes=n.customAttributes,o.inPlace(t,[r],"wrap-logger-",a),i}function E(){const e=(0,g.pV)();h.forEach((t=>{e[t]=(...r)=>function(t,...r){let n=[];return Object.values(e.initializedAgents).forEach((e=>{e&&e.api?e.exposed&&e.api[t]&&n.push(e.api[t](...r)):(0,l.R)(38,t)})),n.length>1?n:n[0]}(t,...r)}))}const x={};function _(e,t,g=!1){t||(0,c.Ak)(e,"api");const h={};var w=s.ee.get(e),A=w.get("tracer");x[e]=b.g.OFF,w.on(p.G4.REPLAY_RUNNING,(t=>{x[e]=t}));var E="api-",_=E+"ixn-";function N(t,r,n,o){const a=(0,i.Vp)(e);return null===r?delete a.jsAttributes[t]:(0,i.x1)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),j(E,n,!0,o||null===r?"session":void 0)(t,r)}function T(){}h.log=function(e,{customAttributes:t={},level:r=y.p_.INFO}={}){(0,a.p)(f.xV,["API/log/called"],void 0,n.K7.metrics,w),function(e,t,r={},i=y.p_.INFO){(0,a.p)(f.xV,["API/logging/".concat(i.toLowerCase(),"/called")],void 0,n.K7.metrics,e),(0,a.p)(y.ET,[(0,m.t)(),t,r,i],void 0,n.K7.logging,e)}(w,e,t,r)},h.wrapLogger=(e,t,{customAttributes:r={},level:i=y.p_.INFO}={})=>{(0,a.p)(f.xV,["API/wrapLogger/called"],void 0,n.K7.metrics,w),R(w,e,t,{customAttributes:r,level:i})},v.forEach((e=>{h[e]=j(E,e,!0,"api")})),h.addPageAction=j(E,"addPageAction",!0,n.K7.genericEvents),h.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,o.f)(e).customTransaction=(r||"http://custom.transaction")+t,j(E,"setPageViewName",!0)()},h.setCustomAttribute=function(e,t,r=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return N(e,t,"setCustomAttribute",r);(0,l.R)(40,typeof t)}else(0,l.R)(39,typeof e)},h.setUserId=function(e){if("string"==typeof e||null===e)return N("enduser.id",e,"setUserId",!0);(0,l.R)(41,typeof e)},h.setApplicationVersion=function(e){if("string"==typeof e||null===e)return N("application.version",e,"setApplicationVersion",!1);(0,l.R)(42,typeof e)},h.start=()=>{try{(0,a.p)(f.xV,["API/start/called"],void 0,n.K7.metrics,w),w.emit("manual-start-all")}catch(e){(0,l.R)(23,e)}},h[p.G4.RECORD]=function(){(0,a.p)(f.xV,["API/recordReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(p.G4.RECORD,[],void 0,n.K7.sessionReplay,w)},h[p.G4.PAUSE]=function(){(0,a.p)(f.xV,["API/pauseReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(p.G4.PAUSE,[],void 0,n.K7.sessionReplay,w)},h.interaction=function(e){return(new T).get("object"==typeof e?e:{})};const S=T.prototype={createTracer:function(e,t){var r={},i=this,o="function"==typeof t;return(0,a.p)(f.xV,["API/createTracer/called"],void 0,n.K7.metrics,w),g||(0,a.p)(_+"tracer",[(0,m.t)(),e,r],i,n.K7.spa,w),function(){if(A.emit((o?"":"no-")+"fn-start",[(0,m.t)(),i,o],r),o)try{return t.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw A.emit("fn-err",[arguments,this,t],r),t}finally{A.emit("fn-end",[(0,m.t)()],r)}}}};function j(e,t,r,i){return function(){return(0,a.p)(f.xV,["API/"+t+"/called"],void 0,n.K7.metrics,w),i&&(0,a.p)(e+t,[(0,m.t)(),...arguments],r?null:this,i,w),r?void 0:this}}function k(){r.e(296).then(r.bind(r,8778)).then((({setAPI:t})=>{t(e),(0,c.Ze)(e,"api")})).catch((e=>{(0,l.R)(27,e),w.abort()}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{S[e]=j(_,e,void 0,g?n.K7.softNav:n.K7.spa)})),h.setCurrentRouteName=g?j(_,"routeName",void 0,n.K7.softNav):j(E,"routeName",!0,n.K7.spa),h.noticeError=function(t,r){"string"==typeof t&&(t=new Error(t)),(0,a.p)(f.xV,["API/noticeError/called"],void 0,n.K7.metrics,w),(0,a.p)("err",[t,(0,m.t)(),!1,r,!!x[e]],void 0,n.K7.jserrors,w)},d.RI?(0,u.GG)((()=>k()),!0):k(),h}var N=r(9417),T=r(8122);const S={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},j={};var k=r(5284);const I=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};let O=!1;function P(e,t={},r,n){let{init:a,info:c,loader_config:u,runtime:l={},exposed:f=!0}=t;l.loaderType=r;const p=(0,g.pV)();c||(a=p.init,c=p.info,u=p.loader_config),(0,N.xN)(e.agentIdentifier,a||{}),function(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");j[e]=(0,T.a)(t,S);const r=(0,g.nY)(e);r&&(r.loader_config=j[e])}(e.agentIdentifier,u||{}),c.jsAttributes??={},d.bv&&(c.jsAttributes.isWorker=!0),(0,i.x1)(e.agentIdentifier,c);const h=(0,N.D0)(e.agentIdentifier),v=[c.beacon,c.errorBeacon];O||(h.proxy.assets&&(I(h.proxy.assets),v.push(h.proxy.assets)),h.proxy.beacon&&v.push(h.proxy.beacon),E(),(0,g.US)("activatedFeatures",k.B),e.runSoftNavOverSpa&&=!0===h.soft_navigations.enabled&&h.feature_flags.includes("soft_nav")),l.denyList=[...h.ajax.deny_list||[],...h.ajax.block_internal?v:[]],l.ptid=e.agentIdentifier,(0,o.V)(e.agentIdentifier,l),e.ee=s.ee.get(e.agentIdentifier),void 0===e.api&&(e.api=_(e.agentIdentifier,n,e.runSoftNavOverSpa)),void 0===e.exposed&&(e.exposed=f),O=!0}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>o,K7:()=>n,P3:()=>i});const n={ajax:"ajax",genericEvents:"generic_events",jserrors:"jserrors",logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.spa]:5,[n.ajax]:6,[n.sessionTrace]:7,[n.softNav]:8,[n.sessionReplay]:9,[n.logging]:10,[n.genericEvents]:11},o={[n.pageViewTiming]:"events",[n.ajax]:"events",[n.spa]:"events",[n.softNav]:"events",[n.metrics]:"jserrors",[n.jserrors]:"jserrors",[n.sessionTrace]:"browser/blobs",[n.sessionReplay]:"browser/blobs",[n.logging]:"browser/logs",[n.genericEvents]:"ins"}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>"nr-rum-1.274.0.min.js",i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.274.0.PROD:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var l=u[d];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+o){s=l;break}}if(!s){c=!0;var f={296:"sha512-gkYkZDAwQ9PwaDXs2YM+rNIdRej1Ac1mupWobRJ8eahQcXz6/sunGZCKklrzi5kWxhOGRZr2tn0rEKuLTXzfAA=="};(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+o),s.src=r,0!==s.src.indexOf(window.location.origin+"/")&&(s.crossOrigin="anonymous"),f[a]&&(s.integrity=f[a])}e[r]=[n];var g=(t,n)=>{s.onerror=s.onload=null,clearTimeout(p);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},p=setTimeout(g.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=g.bind(null,s.onerror),s.onload=g.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={840:0,374:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u<a.length;u++)o=a[u],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=self["webpackChunk:NRBA-1.274.0.PROD"]=self["webpackChunk:NRBA-1.274.0.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(944),t=i(6344),r=i(9566);class n{agentIdentifier;constructor(e=(0,r.LA)(16)){this.agentIdentifier=e}#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}addPageAction(e,t){return this.#e("addPageAction",e,t)}setPageViewName(e,t){return this.#e("setPageViewName",e,t)}setCustomAttribute(e,t,r){return this.#e("setCustomAttribute",e,t,r)}noticeError(e,t){return this.#e("noticeError",e,t)}setUserId(e){return this.#e("setUserId",e)}setApplicationVersion(e){return this.#e("setApplicationVersion",e)}setErrorHandler(e){return this.#e("setErrorHandler",e)}addRelease(e,t){return this.#e("addRelease",e,t)}log(e,t){return this.#e("log",e,t)}}class o extends n{#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}start(){return this.#e("start")}finished(e){return this.#e("finished",e)}recordReplay(){return this.#e(t.G4.RECORD)}pauseReplay(){return this.#e(t.G4.PAUSE)}addToTrace(e){return this.#e("addToTrace",e)}setCurrentRouteName(e){return this.#e("setCurrentRouteName",e)}interaction(){return this.#e("interaction")}wrapLogger(e,t,r){return this.#e("wrapLogger",e,t,r)}}var a=i(860),s=i(9417);const c=Object.values(a.K7);function u(e){const t={};return c.forEach((r=>{t[r]=function(e,t){return!0===(0,s.gD)(t,"".concat(e,".enabled"))}(r,e)})),t}var d=i(7603);var l=i(1687),f=i(4234),g=i(5289),p=i(6154),h=i(384);const v=e=>p.RI&&!0===(0,s.gD)(e,"privacy.cookies_enabled");function m(e){return!!(0,h.dV)().o.MO&&v(e)&&!0===(0,s.gD)(e,"session_trace.enabled")}var b=i(6389);class y extends f.W{constructor(e,t,r=!0){super(e.agentIdentifier,t),this.auto=r,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===e.init[this.featureName].autoStart&&(this.auto=!1),this.auto?(0,l.Ak)(e.agentIdentifier,t):this.ee.on("manual-start-all",(0,b.J)((()=>{(0,l.Ak)(e.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator(e)})))}importAggregator(t,r={}){if(this.featAggregate||!this.auto)return;let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let o;try{if(v(this.agentIdentifier)){const{setupAgentSession:e}=await i.e(296).then(i.bind(i,3861));o=e(t)}}catch(t){(0,e.R)(20,t),this.ee.emit("internal-error",[t]),this.featureName===a.K7.sessionReplay&&this.abortHandler?.()}try{if(t.sharedAggregator)await t.sharedAggregator;else{t.sharedAggregator=i.e(296).then(i.bind(i,9337));const{EventAggregator:e}=await t.sharedAggregator;t.sharedAggregator=new e}if(!this.#t(this.featureName,o))return(0,l.Ze)(this.agentIdentifier,this.featureName),void n(!1);const{lazyFeatureLoader:e}=await i.e(296).then(i.bind(i,6103)),{Aggregate:a}=await e(this.featureName,"aggregate");this.featAggregate=new a(t,r),n(!0)}catch(t){(0,e.R)(34,t),this.abortHandler?.(),(0,l.Ze)(this.agentIdentifier,this.featureName,!0),n(!1),this.ee&&this.ee.abort()}};p.RI?(0,g.GG)((()=>o()),!0):o()}#t(e,t){switch(e){case a.K7.sessionReplay:return m(this.agentIdentifier)&&!!t;case a.K7.sessionTrace:return!!t;default:return!0}}}var w=i(6630);class A extends y{static featureName=w.T;constructor(e,t=!0){super(e,w.T,t),this.importAggregator(e)}}var R=i(9908),E=i(2843),x=i(3878),_=i(782),N=i(1863);class T extends y{static featureName=_.T;constructor(e,t=!0){super(e,_.T,t),p.RI&&((0,E.u)((()=>(0,R.p)("docHidden",[(0,N.t)()],void 0,_.T,this.ee)),!0),(0,x.sp)("pagehide",(()=>(0,R.p)("winPagehide",[(0,N.t)()],void 0,_.T,this.ee))),this.importAggregator(e))}}var S=i(3969);class j extends y{static featureName=S.TZ;constructor(e,t=!0){super(e,S.TZ,t),this.importAggregator(e)}}new class extends o{constructor(t,r){super(r),p.gm?(this.features={},(0,h.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(A),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===a.K7.softNav)),(0,d.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}run(){try{const t=u(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>a.P3[e.featureName]-a.P3[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==a.K7.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===a.K7.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===a.K7.softNav)return;const n=function(e){switch(e){case a.K7.ajax:return[a.K7.jserrors];case a.K7.sessionTrace:return[a.K7.ajax,a.K7.pageViewEvent];case a.K7.sessionReplay:return[a.K7.sessionTrace];case a.K7.pageViewTiming:return[a.K7.pageViewEvent];default:return[]}}(r.featureName).filter((e=>!(e in this.features)));n.length>0&&(0,e.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)}))}catch(t){(0,e.R)(22,t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,h.Zm)();delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return r.ee.get(this.agentIdentifier).abort(),!1}}}({features:[A,T,j],loaderType:"lite"})})()})();</script><script async src="https://www.googletagmanager.com/gtag/js?id=G-GKHZ2SCNR5" nonce="1JXguYhv4IKv2GCpA1uAaqmUanI5m4AZU1Q4RPCOYfU="></script> <script nonce="1JXguYhv4IKv2GCpA1uAaqmUanI5m4AZU1Q4RPCOYfU="> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag( 'js', new Date() ); gtag( 'config', 'G-GKHZ2SCNR5', { 'anonymize_ip': true } ); gtag('config', 'G-GKHZ2SCNR5'); </script> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="generator" content="Sorry™ (https://www.sorryapp.com)" /> <title>Further groundwork for the Status Page Collections UI &#124; Sorry™ Service Status</title> <meta name="description" content="A bunch of small behind-the-scenes changes to the Pages UI in preparation for the new Page Collections feature. No..." /> <meta name="robots" content="index, follow" /> <meta name="color-scheme" content="light dark"> <link rel="icon" id="faviconTag" href="https://assets1.sorryapp.com/brand_icons/files/000/022/521/favicon/Color_Black_%281%29.ico?1666083929" data-light-src="https://assets1.sorryapp.com/brand_icons/files/000/022/521/favicon/Color_Black_%281%29.ico?1666083929" data-dark-src="https://assets1.sorryapp.com/brand_icons/file_darks/000/022/521/favicon/Color_White_%281%29.ico?1666083930" /> <script nonce="1JXguYhv4IKv2GCpA1uAaqmUanI5m4AZU1Q4RPCOYfU="> const icon = document.getElementById('faviconTag'); const lightSrc = icon.dataset.lightSrc; const darkSrc = icon.dataset.darkSrc; if (window.matchMedia) { const changeFavicon = () => { if (window.matchMedia('(prefers-color-scheme: dark)').matches) { icon.href = darkSrc; } else { icon.href = lightSrc; } } changeFavicon() window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { event.matches ? icon.href = darkSrc : icon.href = lightSrc; }) } </script> <link rel="stylesheet" href="https://rsms.me/inter/inter.css"> <link rel="stylesheet" href="https://assets1.sorryapp.com/theme/asset/flavours/files/001/043/909/original/main.min.css?1730896223"> <link rel="canonical" href="https://status.sorryapp.com/notices/aibw2znt6au9jcya-further-groundwork-for-the-status-page-collections-ui" /> <script nonce="1JXguYhv4IKv2GCpA1uAaqmUanI5m4AZU1Q4RPCOYfU="> const setColourScheme = (scheme) => { switch(scheme){ case 'dark': document.documentElement.classList.add('dark') break case 'light': document.documentElement.classList.remove('dark') break } } if (window.matchMedia) { if (window.matchMedia('(prefers-color-scheme: dark)').matches) { setColourScheme('dark') } window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { const newColorScheme = event.matches ? 'dark' : 'light' setColourScheme(newColorScheme) }) } </script> </head> <body v-scope="OverviewController({ allowComponentSubscriptions: true })" @vue:mounted="mounted" class="bg-white dark:bg-gray-900 min-h-screen flex flex-col"> <div class="flex flex-1 flex-col"> <nav v-cloak class="bg-brand-header-background dark:bg-brand-dm-header-background inset-x-0 sticky top-0 z-10"> <div class="mx-auto px-4 sm:px-6 lg:px-8"> <div class="flex items-center justify-between"> <div class="flex items-center"> <div v-scope="Toggle()" class="sm:hidden flex"> <div class="-ml-2 mr-2 flex items-center"> <!-- Mobile menu button --> <button type="button" class="inline-flex items-center justify-center p-2 rounded-md text-brand-header-contrast/60 hover:bg-brand-header-contrast/20 hover:text-brand-header-contrast/70 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-indigo-500 dark:text-brand-dm-header-contrast/60 dark:hover:text-brand-dm-header-contrast/70 dark:hover:bg-brand-dm-header-contrast/20" aria-controls="mobile-menu" aria-expanded="false" @click="toggle"> <span class="sr-only"> Open main menu </span> <svg class="block h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path v-if="!isOpen" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" /> <path v-if="isOpen" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" /> </svg> </button> </div> <!-- Mobile menu, show/hide based on menu state. --> <div v-if="isOpen" id="mobile-menu" class="absolute top-16 right-0 left-0 bg-white dark:bg-gray-900 z-10"> <div class="px-2 pt-2 pb-3 space-y-1 sm:px-3"> <!-- Current: "bg-gray-900 text-white", Default: "text-gray-300 hover:bg-gray-700 hover:text-white" --> <button v-if="!subscriber" href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-600 hover:bg-gray-50 hover:text-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 dark:hover:text-white" @click.prevent="open(panels.LOGIN)"> Manage Subscription </button> </div> <div class="pt-4 pb-3 border-t border-gray-200 dark:border-gray-700" v-if="subscriber"> <div class="flex items-center px-5 sm:px-6"> <div class="flex-shrink-0"> <img class="h-10 w-10 rounded-full" :src="subscriber && subscriber.avatar_url" alt=""> </div> <div class="ml-3"> <div class="text-base font-medium text-gray-800 dark:text-white">Your subscription</div> <div class="text-sm font-medium text-gray-500 dark:text-gray-400">{{ subscriber.email }}</div> </div> </div> <div class="mt-3 px-2 space-y-1 sm:px-3"> <a href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-500 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white" role="menuitem" tabindex="-1" id="user-menu-item-0" @click.prevent="open(panels.PREFERENCES)"> Preferences </a> <a href="/audience/sign_out" class="block px-3 py-2 rounded-md text-base font-medium text-gray-500 hover:bg-gray-50 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white" role="menuitem" tabindex="-1" id="user-menu-item-2"> Sign out </a> </div> </div> </div> </div> <div class="flex-shrink-0 flex items-center py-4"> <a href="/" target="_blank" class="hover:opacity-90"> <div class="block lg:hidden h-7 w-auto"> <img class="hidden dark:block mx-auto h-7 w-auto" src="https://assets1.sorryapp.com/brand_icons/file_darks/000/022/521/original/Color_White_%281%29.svg?1727079964" alt="Sorry™ Service Status"> <img class="block dark:hidden mx-auto h-7 w-auto" src="https://assets1.sorryapp.com/brand_icons/files/000/022/521/original/Color_Black_%281%29.svg?1727079964" alt="Sorry™ Service Status"> </div> <img class="hidden dark:lg:block h-logo w-auto" src="https://assets3.sorryapp.com/brand_logos/file_darks/000/003/907/original/Color_White.svg?1727079965" alt="Sorry™ Service Status"> <img class="hidden lg:block dark:lg:hidden h-logo w-auto" src="https://assets3.sorryapp.com/brand_logos/files/000/003/907/original/Color_Black.svg?1727079965" alt="Sorry™ Service Status"> <span class="sr-only"> Service Status </span> </a> </div> <div class="text-center sm:text-left ml-4 md:ml-6 flex md:space-x-8 h-16"> <!-- Current: "border-brand-primary-500 text-gray-900", Default: "border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700" --> <a href="/" class="border-transparent text-brand-header-contrast/70 dark:text-brand-dm-header-contrast/70 hover:text-brand-primary-500 dark:hover:text-brand-dm-primary-500 inline-flex items-center px-1 pt-1 text-sm font-medium"> Service Status </a> </div> </div> <div class="flex items-center h-16"> <div class="hidden sm:block flex-shrink-0 mr-8"> </div> <div class="hidden sm:block flex-shrink-0 mr-8" v-if="!subscriber"> <button href="#" class="text-brand-primary-500 hover:text-brand-primary-400 dark:text-brand-dm-primary-500 dark:hover:text-brand-dm-primary-400 font-medium text-sm" @click.prevent="open(panels.LOGIN)"> Manage Subscription </button> </div> <div class="hidden sm:block flex-shrink-0 mr-8"> <a href="https://help.sorryapp.com" target="_blank" class="text-brand-primary-500 hover:text-brand-primary-400 dark:text-brand-dm-primary-500 dark:hover:text-brand-dm-primary-400 font-medium text-sm">Support</a> </div> <div class="flex-shrink-0" v-if="!subscriber"> <button type="button" class="relative inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-brand-primary-contrast-500 bg-brand-primary-500 dark:text-brand-dm-primary-contrast-500 dark:bg-brand-dm-primary-500 shadow-sm hover:bg-brand-primary-600 dark:hover:bg-brand-dm-primary-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 dark:focus:ring-brand-dm-primary-500" v-scope="SubscribeButton({ enforceBellSelect: false, enforceBellSelectMsg: 'Select a Service to subscribe' })" @click="click()"> <template v-if="checkedComponentCount"> <!-- Heroicon name: outline/bell-alert --> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="-ml-1 mr-2 h-5 w-5"> <path stroke-linecap="round" stroke-linejoin="round" d="M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0M3.124 7.5A8.969 8.969 0 015.292 3m13.416 0a8.969 8.969 0 012.168 4.5" /> </svg> <span> Confirm Subscription </span> </template> <template v-else> <!-- Heroicon name: outline/bell --> <svg xmlns="http://www.w3.org/2000/svg" class="-ml-1 mr-2 h-5 w-5" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" d="M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0" /> </svg> <span> Subscribe </span> </template> </button> </div> <li class="ml-4 list-none" v-if="subscriber && allow_component_subscriptions && unsavedChanges()"> <button @click="saveChanges()" class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-brand-primary-contrast-500 bg-brand-primary-500 dark:text-brand-dm-primary-contrast-500 dark:bg-brand-dm-primary-500 shadow-sm hover:bg-brand-primary-600 dark:hover:bg-brand-dm-primary-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 dark:focus:ring-brand-dm-primary-500 disabled:opacity-50" :disabled="loading"> <!-- Heroicon name: outline/bell-alert --> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="-ml-1 mr-2 w-5 h-5"> <path stroke-linecap="round" stroke-linejoin="round" d="M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0M3.124 7.5A8.969 8.969 0 015.292 3m13.416 0a8.969 8.969 0 012.168 4.5" /> </svg> <span v-if="loading"> Saving... </span> <span v-else> Save Changes </span> </button> </li> <div class="hidden sm:block ml-4 flex-shrink-0 flex items-center" v-if="subscriber"> <div class="ml-3 relative" v-scope="Toggle()" v-click-outside="close()"> <div> <button type="button" class="bg-white dark:bg-gray-900 rounded-full flex items-center text-sm focus:outline-none focus:ring-2 focus:ring-offset-4 focus:ring-brand-primary-500 dark:focus:ring-brand-dm-primary-500 text-gray-500 hover:text-gray-600 focus:text-brand-primary-500 dark:focus:text-brand-dm-primary-500" id="user-menu-button" aria-expanded="false" aria-haspopup="true" @click="toggle"> <span class="sr-only"> Open user menu </span> <img class="h-8 w-8 rounded-full" :src="subscriber && subscriber.avatar_url" alt="Your avatar"> <svg class="h-5 w-5 mx-1.5 my-1.5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"> <path d="M10 6a2 2 0 110-4 2 2 0 010 4zM10 12a2 2 0 110-4 2 2 0 010 4zM10 18a2 2 0 110-4 2 2 0 010 4z" /> </svg> </button> </div> <!-- Dropdown menu, show/hide based on menu state. Entering: "transition ease-out duration-200" From: "opacity-0 scale-95" To: "opacity-100 scale-100" Leaving: "transition ease-in duration-75" From: "opacity-100 scale-100" To: "opacity-0 scale-95" --> <div class="origin-top-right absolute right-0 mt-2 w-48 rounded-md shadow-lg py-1 bg-white dark:bg-gray-900 ring-1 ring-black ring-opacity-5 focus:outline-none z-10" role="menu" aria-orientation="vertical" aria-labelledby="user-menu-button" tabindex="-1" :class="[isOpen ? 'opacity-100' : 'opacity-0']"> <a href="#" class="block px-4 py-2 text-sm text-gray-700 dark:text-gray-300" role="menuitem" tabindex="-1" id="user-menu-item-0" @click.prevent="open(panels.PREFERENCES)"> Preferences </a> <a href="/audience/sign_out" class="block px-4 py-2 text-sm text-gray-700 dark:text-gray-300" role="menuitem" tabindex="-1" id="user-menu-item-2"> Sign out </a> </div> </div> </div> </div> </div> </div> </nav> <header class="bg-brand-header-background dark:bg-brand-dm-header-background"> <section class="px-4 sm:px-6 lg:px-8 py-8 sm:py-12 lg:py-16"> <div class="max-w-3xl lg:max-w-4xl xl:max-w-5xl 2xl:max-w-7xl mx-auto"> <div class="flex"> <div class="w-full sm:mt-4 md:mt-8 lg:mt-32"> <div class="lg:flex lg:items-center lg:justify-between"> <div class="flex-1 min-w-0"> <div class="h-1 w-16 bg-gray-500 dark:bg-gray-400 mb-4 rounded-full"></div> <nav class="md:hidden" aria-label="Back"> <a href="/" class="flex items-center text-base font-medium text-brand-header-contrast/50 hover:text-brand-header-contrast/70 dark:text-brand-dm-header-contrast/50 dark:hover:text-brand-dm-header-contrast/70"> <!-- Heroicon name: solid/chevron-left --> <svg class="flex-shrink-0 -ml-1 mr-1 h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"> <path fill-rule="evenodd" d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" clip-rule="evenodd" /> </svg> Sorry™ Service Status </a> </nav> <nav class="hidden md:flex" aria-label="Breadcrumb"> <ol role="list" class="flex flex-wrap items-center gap-y-0.5 gap-x-2"> <li> <div class="flex items-center"> <a href="/" class="mr-2 text-base sm:text-lg font-medium text-brand-header-contrast/50 hover:text-brand-header-contrast/70 dark:text-brand-dm-header-contrast/50 dark:hover:text-brand-dm-header-contrast/70"> Sorry™ Service Status </a> <svg class="flex-shrink-0 h-5 w-5 text-brand-header-contrast text-brand-header-contrast/50 hover:text-brand-header-contrast/70 dark:text-brand-dm-header-contrast/50 dark:hover:text-brand-dm-header-contrast/70" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20" aria-hidden="true"> <path d="M5.555 17.776l8-16 .894.448-8 16-.894-.448z" /> </svg> </div> </li> </ol> </nav> <div class="mt-2 flex flex-col gap-8"> <div class="flex flex-col gap-4"> <h1 class="text-2xl font-bold leading-7 text-brand-header-contrast dark:text-brand-dm-header-contrast sm:text-3xl max-w-3xl break-words"> Further groundwork for the Status Page Collections UI </h1> <div class="@container"> <div class="flex flex-col @sm:flex-row @sm:items-center @sm:gap-x-2 text-brand-header-contrast/80 dark:text-brand-dm-header-contrast/80 leading-snug text-base @2xl:text-lg @4xl:text-xl"> Wednesday, 20 November <span class="hidden @lg:block h-1.5 w-1.5 rounded bg-brand-header-contrast/30 dark:bg-brand-dm-header-contrast/30"></span> 10:21 UTC </div> </div> </div> <div> <span class="inline-flex rounded-full bg-gray-200 px-3 py-1.5 font-medium text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> <span class="inline-flex rounded-full bg-gray-200 px-3 py-1.5 font-medium text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Prerelease </span> </div> </div> </div> </div> </div> </div> </div> </section> </header> <div class="bg-white dark:bg-gray-900 px-4 sm:px-6 lg:px-8 py-4 sm:py-8 md:py-16 flex-1"> <div class="max-w-3xl lg:max-w-4xl xl:max-w-5xl 2xl:max-w-7xl mx-auto"> <div class="my-8 flex flex-col lg:flex-row flex-wrap"> <div class="mb-8 w-full lg:w-3/4 flex-1"> <div class="flex flex-col gap-4 md:gap-6 lg:gap-12"> <div class="flex flex-col gap-4"> <div class="max-w-prose prose prose-code:before:content-none prose-code:after:content-none prose-a:no-underline prose-a:text-brand-primary-500 hover:prose-a:text-brand-primary-400 dark:prose-invert dark:prose-a:text-brand-dm-primary-500 dark:hover:prose-a:text-brand-dm-primary-400 break-words"> <p>A bunch of small behind-the-scenes changes to the Pages UI in preparation for the new Page Collections feature.</p> <p>No visible changes for customers.</p> </div> <div class="flex flex-row items-center"> <img class="h-6 w-6 rounded-full mr-4" src="https://www.gravatar.com/avatar/5b5a7a0c5220ece81608847f88557a64?default=identicon" alt="Avatar for Robert Rawlins"> <div class="flex flex-col items-start"> <span class="text-sm leading-5 mr-2 text-gray-600 dark:text-gray-400">Robert Rawlins</span> <span class="text-sm italic leading-5 text-gray-500"> <time datetime="2024-11-20T10:21:14+0000"> 10:21 UTC - 20 November 2024 </time> </span> </div> </div> </div> </div> </div> <div class="flex flex-col w-full lg:w-1/4 ml-0 lg:ml-16 flex-none"> </div> </div> </div> </div> <footer class="bg-white dark:bg-gray-900 px-4 sm:px-6 lg:px-8"> <div class="max-w-3xl lg:max-w-4xl xl:max-w-5xl 2xl:max-w-7xl mx-auto py-0 overflow-hidden pb-8"> <div class="mt-8 flex flex-col md:flex-row justify-between items-start md:items-end gap-4"> <div class="flex flex-col flex-1 justify-start items-start gap-2"> <p class="text-sm text-gray-400"> &copy; 2024 </p> <div class="flex justify-start items-start gap-4"> <div> <a href="/api" class="font-semibold text-sm text-gray-500 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"> Status API </a> </div> <span class="text-gray-300 dark:text-gray-700"> &#124; </span> <div> <a href="https://www.sorryapp.com/privacy-policy" target="_blank" class="text-sm text-gray-500 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"> Privacy Policy </a> </div> </div> </div> <div class="flex-1 flex flex-col gap-2"> <div class="flex justify-start md:justify-center gap-4"> <a href="https://twitter.com/sorryapp" target="_blank" class="text-gray-400 hover:text-gray-500 dark:text-gray-400 dark:hover:text-gray-300"> <i class="fa fa-twitter fa-fw"></i> <span class="sr-only">Twitter</span> <svg class="h-5 w-5" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true"> <path d="M8.29 20.251c7.547 0 11.675-6.253 11.675-11.675 0-.178 0-.355-.012-.53A8.348 8.348 0 0022 5.92a8.19 8.19 0 01-2.357.646 4.118 4.118 0 001.804-2.27 8.224 8.224 0 01-2.605.996 4.107 4.107 0 00-6.993 3.743 11.65 11.65 0 01-8.457-4.287 4.106 4.106 0 001.27 5.477A4.072 4.072 0 012.8 9.713v.052a4.105 4.105 0 003.292 4.022 4.095 4.095 0 01-1.853.07 4.108 4.108 0 003.834 2.85A8.233 8.233 0 012 18.407a11.616 11.616 0 006.29 1.84" /> </svg> </a> </div> <nav class="mx-0 md:mx-5 flex flex-wrap justify-center gap-4" aria-label="Footer" id="contact-support"> <div> <a href="mailto:help@sorryapp.com" target="_top" class="text-sm text-gray-500 hover:text-gray-900 dark:text-gray-300 dark:hover:text-gray-100"> help@sorryapp.com </a> </div> </nav> </div> <p class="flex-1 text-sm text-right powered-by"> <a target="_blank" rel="noopener noreferrer" href="https://www.sorryapp.com/powered-by/?utm_campaign=powered-by&amp;utm_medium=status-page-footer&amp;utm_source=status.sorryapp.com">Powered by Sorry&#8482;</a> </p> </div> </div> </footer> <div v-cloak :class="[is_open ? 'visible' : 'hidden']" class="fixed inset-0 overflow-hidden z-20" aria-labelledby="slide-over-title" role="dialog" aria-modal="true"> <div class="absolute inset-0 overflow-hidden"> <!-- Background overlay, show/hide based on slide-over state. Entering: "ease-in-out duration-500" From: "opacity-0" To: "opacity-100" Leaving: "ease-in-out duration-500" From: "opacity-100" To: "opacity-0" --> <div :class="[is_open ? 'opacity-100' : 'opacity-0']" class="absolute inset-0 bg-gray-500 dark:bg-black bg-opacity-75 dark:bg-opacity-50 transition-opacity" aria-hidden="true" @click="close()"></div> <div class="fixed inset-y-0 right-0 pl-10 max-w-full flex"> <!-- Slide-over panel, show/hide based on slide-over state. Entering: "transition ease-in-out duration-500 sm:duration-700" From: "translate-x-full" To: "translate-x-0" Leaving: "transition ease-in-out duration-500 sm:duration-700" From: "translate-x-0" To: "translate-x-full" --> <div :class="[is_open ? 'transition-x-0' : 'opacity-x-full']" class="relative w-screen max-w-md"> <div class="absolute top-0 left-0 -ml-8 pt-4 pr-2 flex sm:-ml-10 sm:pr-4 opacity-100"> <!-- Close button, show/hide based on slide-over state. Entering: "ease-in-out duration-500" From: "opacity-0" To: "opacity-100" Leaving: "ease-in-out duration-500" From: "opacity-100" To: "opacity-0" --> <button type="button" class="rounded-md text-gray-300 hover:text-white focus:outline-none focus:ring-2 focus:ring-white" @click="close()"> <span class="sr-only">Close panel</span> <!-- Heroicon name: outline/x --> <svg class="h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" /> </svg> </button> </div> <div class="h-full flex flex-col py-6 bg-white dark:bg-gray-900 shadow-xl overflow-y-scroll"> <div class="relative flex-1 px-4 sm:px-6"> <template v-if="current_panel == panels.LOGIN"> <div class="flex flex-col h-full"> <div class="grow flex flex-col justify-center"> <div> <img class="hidden dark:block mx-auto h-12 w-auto" src="https://assets1.sorryapp.com/brand_icons/file_darks/000/022/521/original/Color_White_%281%29.svg?1727079964" alt="Sorry™ Service Status"> <img class="block dark:hidden mx-auto h-12 w-auto" src="https://assets1.sorryapp.com/brand_icons/files/000/022/521/original/Color_Black_%281%29.svg?1727079964" alt="Sorry™ Service Status"> <h2 class="text-center mt-6 text-3xl leading-9 font-semibold text-gray-900 dark:text-gray-100"> Find Your Subscription </h2> <p class="text-center leading-6 font-normal text-gray-600 dark:text-gray-400 my-2 mx-8"> We’ll find your subscription and send you a link to login to manage your preferences. </p> </div> <div class="mt-8" v-scope="SubscriberForm({ fallbackComponentIds: [4,3,2784,34540,1353,1355,1354,5,139,54542,142,143,746,24111,25842,140,437,141,344,38220,84062] })"> <form class="space-y-6" @submit.prevent="submit()"> <div> <label for="email" class="sr-only"> Email address </label> <input type="email" name="email" id="email" class="bg-white text-gray-900 dark:bg-gray-800 dark:text-gray-200 appearance-none block w-full px-3 py-2 border rounded-md shadow-sm" :class="[errorMessages().length > 0 ? 'border-brand-red-500 text-brand-red-500 placeholder-brand-red-500 focus:ring-brand-red-500 focus:border-brand-red-500 dark:border-brand-dm-red-500 dark:text-brand-dm-red-500 dark:placeholder-brand-dm-red-500 dark:focus:ring-brand-dm-red-500 dark:focus:border-brand-dm-red-500' : 'border-gray-300 dark:border-gray-700 placeholder-gray-400 dark:placeholder-gray-600 focus:ring-brand-primary-500 focus:border-brand-primary-500 dark:focus:ring-brand-dm-primary-500 dark:focus:border-brand-dm-primary-500']" placeholder="Email address" v-model="email" required> <p class="mt-2 text-sm text-brand-red-500 dark:text-brand-dm-red-500" v-for="error in errorMessages()"> {{ error }} </p> </div> <div> <button type="submit" class="w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-brand-primary-contrast-500 bg-brand-primary-500 hover:bg-brand-primary-600 dark:text-brand-dm-primary-contrast-500 dark:bg-brand-dm-primary-500 dark:hover:bg-brand-dm-primary-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 dark:focus:ring-brand-dm-primary-500 disabled:opacity-50" :disabled="loading"> <span v-if="loading"> Loading... </span> <span v-else> Find Subscription </span> </button> </div> </form> </div> </div> <div class="mt-16 flex flex-col gap-4"> <div class="text-sm text-gray-500"> We will share your details with <a href="https://www.sorryapp.com/" target="_blank" class="text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400">Sorry&trade;</a>, who we use to send status updates. You can unsubscribe at any time. <a href="https://www.sorryapp.com/privacy-policy" class="text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400">Privacy Policy</a> apply. </div> <div class="text-sm text-gray-500"> This site is protected by reCAPTCHA and the Google <a class="text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400" href="https://policies.google.com/privacy">Privacy Policy</a> and <a class="text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400" href="https://policies.google.com/terms">Terms of Service</a> apply. </div> </div> </div> </template> <template v-if="current_panel == panels.CHECK_INBOX"> <!-- Alert / Notification Wrapper --> <div class="flex flex-wrap content-center h-full"> <div class="py-4"> <!-- Alert / Notification Content. --> <div class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-brand-green-500/10 dark:bg-brand-dm-green-500/10"> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-brand-green-500 dark:text-brand-dm-green-500" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 4H6a2 2 0 00-2 2v12a2 2 0 002 2h12a2 2 0 002-2V6a2 2 0 00-2-2h-2m-4-1v8m0 0l3-3m-3 3L9 8m-5 5h2.586a1 1 0 01.707.293l2.414 2.414a1 1 0 00.707.293h3.172a1 1 0 00.707-.293l2.414-2.414a1 1 0 01.707-.293H20" /> </svg> </div> <div class="mt-3 text-center"> <h3 class="text-lg leading-6 font-medium text-gray-900 dark:text-gray-100" id="modal-title"> Check Your Inbox </h3> <div class="mt-2 px-4 sm:px-6"> <p class="text-sm text-gray-500"> We’ve found your existing subscription and have emailed you a secure link to manage your preferences. </p> </div> </div> <div class="mt-5"> <button type="button" class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 dark:border-gray-700 shadow-sm px-4 py-2 text-base font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-900 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 dark:focus:ring-brand-dm-primary-500" @click.prevent="close()"> Close </button> </div> </div> </div> </template> <template v-if="current_panel == panels.SUBSCRIBE"> <div class="flex flex-col h-full"> <div class="grow flex flex-col justify-center"> <div> <img class="hidden dark:block mx-auto h-12 w-auto" src="https://assets1.sorryapp.com/brand_icons/file_darks/000/022/521/original/Color_White_%281%29.svg?1727079964" alt="Sorry™ Service Status"> <img class="block dark:hidden mx-auto h-12 w-auto" src="https://assets1.sorryapp.com/brand_icons/files/000/022/521/original/Color_Black_%281%29.svg?1727079964" alt="Sorry™ Service Status"> <h2 class="text-center mt-6 text-3xl leading-9 font-semibold text-gray-900 dark:text-gray-100"> Subscribe to Status Updates </h2> <p class="text-center leading-6 font-normal text-gray-600 dark:text-gray-400 my-2 mx-8"> We’ll use your email to save your preferences so you can update them later. </p> </div> <div class="mt-8" v-scope="SubscriberForm({ fallbackComponentIds: [4,3,2784,34540,1353,1355,1354,5,139,54542,142,143,746,24111,25842,140,437,141,344,38220,84062] })"> <form class="space-y-6" @submit.prevent="submit()"> <div> <label for="email" class="sr-only"> Email address </label> <div class="mt-1 relative rounded-md shadow-sm"> <input type="email" name="email" id="email" class="bg-white text-gray-900 dark:bg-gray-800 dark:text-gray-200 appearance-none block w-full px-3 py-2 border rounded-md shadow-sm" :class="[errorMessages().length > 0 ? 'border-brand-red-500 text-brand-red-500 placeholder-brand-red-500 focus:ring-brand-red-500 focus:border-brand-red-500 dark:border-brand-dm-red-500 dark:text-brand-dm-red-500 dark:placeholder-brand-dm-red-500 dark:focus:ring-brand-dm-red-500 dark:focus:border-brand-dm-red-500' : 'border-gray-300 dark:border-gray-700 placeholder-gray-400 dark:placeholder-gray-600 focus:ring-brand-primary-500 focus:border-brand-primary-500 dark:focus:ring-brand-dm-primary-500 dark:focus:border-brand-dm-primary-500']" placeholder="Email address" v-model="email" required> </div> <p class="mt-2 text-sm text-brand-red-500 dark:text-brand-dm-red-500" v-for="error in errorMessages()"> {{ error }} </p> </div> <div> <button type="submit" class="w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-brand-primary-contrast-500 bg-brand-primary-500 hover:bg-brand-primary-600 dark:text-brand-dm-primary-contrast-500 dark:bg-brand-dm-primary-500 dark:hover:bg-brand-dm-primary-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 dark:focus:ring-brand-dm-primary-500 disabled:opacity-50" :disabled="loading"> <span v-if="loading"> Loading... </span> <span v-else> Start subscription </span> </button> </div> <div class="text-center"> <button class="font-medium text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400" @click.prevent="switchPanel(panels.LOGIN)"> Already subscribed? </button> </div> </form> </div> </div> <div class="mt-16 flex flex-col gap-4"> <div class="text-sm text-gray-500"> We will share your details with <a href="https://www.sorryapp.com/" target="_blank" class="text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400">Sorry&trade;</a>, who we use to send status updates. You can unsubscribe at any time. <a href="https://www.sorryapp.com/privacy-policy" class="text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400">Privacy Policy</a> apply. </div> <div class="text-sm text-gray-500"> This site is protected by reCAPTCHA and the Google <a class="text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400" href="https://policies.google.com/privacy">Privacy Policy</a> and <a class="text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400" href="https://policies.google.com/terms">Terms of Service</a> apply. </div> </div> </div> </template> <template v-if="current_panel == panels.PREFERENCES"> <div class="h-full divide-y divide-gray-200 dark:divide-gray-800 flex flex-col"> <div class="h-full"> <div class="p-11 flex flex-col justify-center items-center my-3" v-if="pendingDoubleOptIns().length > 0"> <div class="flex justify-center items-center w-12 h-12 rounded-full bg-brand-green-500/10 dark:bg-brand-dm-green-500/10 my-3"> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-brand-green-500 dark:text-brand-dm-green-500" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 4H6a2 2 0 00-2 2v12a2 2 0 002 2h12a2 2 0 002-2V6a2 2 0 00-2-2h-2m-4-1v8m0 0l3-3m-3 3L9 8m-5 5h2.586a1 1 0 01.707.293l2.414 2.414a1 1 0 00.707.293h3.172a1 1 0 00.707-.293l2.414-2.414a1 1 0 01.707-.293H20" /> </svg> </div> <div class="text-lg leading-6 font-medium text-gray-900 dark:text-gray-100 text-center my-2"> Check Your Inbox! </div> <div class="text-sm leading-5 font-normal text-gray-500 text-center"> You’re now subscribed, but you’ll need to confirm your contact details before receiving any status updates. </div> </div> <div> <div class="my-8 text-gray-900 dark:text-gray-100 font-medium"> How would you like to be notified? </div> <ul> <li class="p-4 my-3 border rounded-md flex" v-scope="NotificationChannelForm({ active: subscriber.notify_by_email, attribute_name: 'email', value: subscriber.email })" :class="[active ? 'border-brand-primary-500 dark:border-brand-dm-primary-500' : 'border-gray-300 dark:border-gray-700']"> <div class="mr-5"> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-gray-900 dark:text-gray-100" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" /> </svg> </div> <div class="text-base flex-grow min-w-0 leading-6 font-medium text-gray-600 dark:text-gray-400"> <div> Email </div> <div> <div v-if="editable" class="text-sm leading-5 font-normal"> <form @submit.prevent="save()"> <input type="email" v-model="value" class="bg-white text-gray-900 dark:bg-gray-800 dark:text-gray-200 block w-full px-3 py-2 mt-3 mb-2 sm:text-sm rounded-md border" :class="[errors.length > 0 ? 'border-brand-red-500 text-brand-red-500 placeholder-brand-red-500 focus:ring-brand-red-500 focus:border-brand-red-500 dark:border-brand-dm-red-500 dark:text-brand-dm-red-500 dark:placeholder-brand-dm-red-500 dark:focus:ring-brand-dm-red-500 dark:focus:border-brand-dm-red-500' : 'border-gray-300 dark:border-gray-700 placeholder-gray-400 dark:placeholder-gray-600 focus:ring-brand-primary-500 focus:border-brand-primary-500 dark:focus:ring-brand-dm-primary-500 dark:focus:border-brand-dm-primary-500']" placeholder="joe@example.com" v-effect="if (editable) $el.focus()" ref="input"> <p class="mb-2 text-sm text-brand-red-500 dark:text-brand-dm-red-500" v-for="error in errors"> {{ error }} </p> <button type="submit" class="w-min inline-flex items-center px-2.5 py-1.5 border border-transparent text-xs font-medium rounded shadow-sm text-brand-primary-contrast-500 bg-brand-primary-500 hover:bg-brand-primary-600 dark:text-brand-dm-primary-contrast-500 dark:bg-brand-dm-primary-500 dark:hover:bg-brand-dm-primary-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 dark:focus:ring-brand-dm-primary-500 disabled:opacity-50" :disabled="loading"> <span v-if="loading"> Saving... </span> <span v-else> Save </span> </button> <button type="button" @click.prevent="reset()" class="text-xs font-medium ml-3 text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-300"> Cancel </button> </form> </div> <div v-else> <div v-if="value" class="flex mr-8"> <div class="truncate"> {{ value }} </div> <button class="inline-block ml-3 text-brand-primary-500 hover:text-brand-primary-400 dark:text-brand-dm-primary-500 dark:hover:text-brand-dm-primary-400" @click="edit()"> <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z" /> </svg> </button> </div> </div> </div> </div> <!-- Enabled: "bg-brand-primary-600", Not Enabled: "bg-gray-200" --> <button type="button" class="relative inline-flex flex-shrink-0 h-6 w-11 border-2 border-transparent rounded-full cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 text-brand-primary-contrast-500 dark:focus:ring-brand-dm-primary-500 dark:text-brand-dm-primary-contrast-500" role="switch" aria-checked="false" @click="toggleActive()" :class="[active ? 'bg-brand-primary-600 dark:bg-brand-dm-primary-600' : 'bg-gray-200 dark:bg-gray-800']"> <span class="sr-only"></span> <!-- Enabled: "translate-x-5", Not Enabled: "translate-x-0" --> <span class="pointer-events-none relative inline-block h-5 w-5 rounded-full bg-white dark:bg-gray-900 shadow ring-0 transition ease-in-out duration-200" :class="[active ? 'translate-x-5' : 'translate-x-0']"> <!-- Enabled: "opacity-0 ease-out duration-100", Not Enabled: "opacity-100 ease-in duration-200" --> <span class="ease-in duration-200 absolute inset-0 h-full w-full flex items-center justify-center transition-opacity" aria-hidden="true" :class="[active ? 'opacity-100' : 'opacity-0']"> <svg class="h-3 w-3 text-gray-400 dark:text-gray-600" fill="none" viewBox="0 0 12 12"> <path d="M4 8l2-2m0 0l2-2M6 6L4 4m2 2l2 2" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </svg> </span> <!-- Enabled: "opacity-100 ease-in duration-200", Not Enabled: "opacity-0 ease-out duration-100" --> <span class="ease-out duration-100 absolute inset-0 h-full w-full flex items-center justify-center transition-opacity" aria-hidden="true" :class="[active ? 'opacity-0' : 'opacity-100']"> <svg class="h-3 w-3 text-brand-primary-600 dark:text-brand-dm-primary-600" fill="currentColor" viewBox="0 0 12 12"> <path d="M3.707 5.293a1 1 0 00-1.414 1.414l1.414-1.414zM5 8l-.707.707a1 1 0 001.414 0L5 8zm4.707-3.293a1 1 0 00-1.414-1.414l1.414 1.414zm-7.414 2l2 2 1.414-1.414-2-2-1.414 1.414zm3.414 2l4-4-1.414-1.414-4 4 1.414 1.414z" /> </svg> </span> </span> </button> </li> <li class="p-4 my-3 border rounded-md flex" v-scope="NotificationChannelForm({ active: subscriber.notify_by_phone_number, attribute_name: 'phone_number', value: subscriber.phone_number })" :class="[active ? 'border-brand-primary-500 dark:border-brand-dm-primary-500' : 'border-gray-300 dark:border-gray-700']"> <div class="mr-5"> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-gray-900 dark:text-gray-100" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 18h.01M8 21h8a2 2 0 002-2V5a2 2 0 00-2-2H8a2 2 0 00-2 2v14a2 2 0 002 2z" /> </svg> </div> <div class="text-base flex-grow min-w-0 leading-6 font-medium text-gray-600 dark:text-gray-400"> <div> Text Message </div> <div> <div v-if="editable" class="text-sm leading-5 font-normal" v-effect="toggleTelPlugin()"> <form @submit.prevent="save()"> <input type="tel" v-model="value" class="bg-white text-gray-900 dark:bg-gray-800 dark:text-gray-200 block w-full px-3 py-2 mt-3 mb-2 sm:text-sm rounded-md border" :class="[errors.length > 0 ? 'border-brand-red-500 text-brand-red-500 placeholder-brand-red-500 focus:ring-brand-red-500 focus:border-brand-red-500 dark:border-brand-dm-red-500 dark:text-brand-dm-red-500 dark:placeholder-brand-dm-red-500 dark:focus:ring-brand-dm-red-500 dark:focus:border-brand-dm-red-500' : 'border-gray-300 dark:border-gray-700 placeholder-gray-400 dark:placeholder-gray-600 focus:ring-brand-primary-500 focus:border-brand-primary-500 dark:focus:ring-brand-dm-primary-500 dark:focus:border-brand-dm-primary-500']" placeholder="" v-effect="if (editable) $el.focus()" ref="input"> <p class="mb-2 text-sm text-brand-red-500 dark:text-brand-dm-red-500" v-for="error in errors"> {{ error }} </p> <button type="submit" class="w-min inline-flex items-center px-2.5 py-1.5 border border-transparent text-xs font-medium rounded shadow-sm text-brand-primary-contrast-500 bg-brand-primary-500 hover:bg-brand-primary-600 dark:text-brand-dm-primary-contrast-500 dark:bg-brand-dm-primary-500 dark:hover:bg-brand-dm-primary-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 dark:focus:ring-brand-dm-primary-500 disabled:opacity-50" :disabled="loading"> <span v-if="loading"> Saving... </span> <span v-else> Save </span> </button> <button type="button" @click.prevent="reset()" class="text-xs font-medium ml-3 text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-300"> Cancel </button> </form> </div> <div v-else> <div v-if="value" class="flex mr-8"> <div class="truncate"> {{ value }} </div> <button class="inline-block ml-3 text-brand-primary-500 hover:text-brand-primary-400 dark:text-brand-dm-primary-500 dark:hover:text-brand-dm-primary-400" @click="edit()"> <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z" /> </svg> </button> </div> </div> </div> </div> <!-- Enabled: "bg-brand-primary-600", Not Enabled: "bg-gray-200" --> <button type="button" class="relative inline-flex flex-shrink-0 h-6 w-11 border-2 border-transparent rounded-full cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 text-brand-primary-contrast-500 dark:focus:ring-brand-dm-primary-500 dark:text-brand-dm-primary-contrast-500" role="switch" aria-checked="false" @click="toggleActive()" :class="[active ? 'bg-brand-primary-600 dark:bg-brand-dm-primary-600' : 'bg-gray-200 dark:bg-gray-800']"> <span class="sr-only"></span> <!-- Enabled: "translate-x-5", Not Enabled: "translate-x-0" --> <span class="pointer-events-none relative inline-block h-5 w-5 rounded-full bg-white dark:bg-gray-900 shadow ring-0 transition ease-in-out duration-200" :class="[active ? 'translate-x-5' : 'translate-x-0']"> <!-- Enabled: "opacity-0 ease-out duration-100", Not Enabled: "opacity-100 ease-in duration-200" --> <span class="ease-in duration-200 absolute inset-0 h-full w-full flex items-center justify-center transition-opacity" aria-hidden="true" :class="[active ? 'opacity-100' : 'opacity-0']"> <svg class="h-3 w-3 text-gray-400 dark:text-gray-600" fill="none" viewBox="0 0 12 12"> <path d="M4 8l2-2m0 0l2-2M6 6L4 4m2 2l2 2" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </svg> </span> <!-- Enabled: "opacity-100 ease-in duration-200", Not Enabled: "opacity-0 ease-out duration-100" --> <span class="ease-out duration-100 absolute inset-0 h-full w-full flex items-center justify-center transition-opacity" aria-hidden="true" :class="[active ? 'opacity-0' : 'opacity-100']"> <svg class="h-3 w-3 text-brand-primary-600 dark:text-brand-dm-primary-600" fill="currentColor" viewBox="0 0 12 12"> <path d="M3.707 5.293a1 1 0 00-1.414 1.414l1.414-1.414zM5 8l-.707.707a1 1 0 001.414 0L5 8zm4.707-3.293a1 1 0 00-1.414-1.414l1.414 1.414zm-7.414 2l2 2 1.414-1.414-2-2-1.414 1.414zm3.414 2l4-4-1.414-1.414-4 4 1.414 1.414z" /> </svg> </span> </span> </button> </li> <li class="p-4 my-3 border rounded-md flex" v-scope="NotificationChannelForm({ active: subscriber.notify_by_slack_webhook_url, attribute_name: 'slack_webhook_url', value: subscriber.slack_webhook_url })" :class="[active ? 'border-brand-primary-500 dark:border-brand-dm-primary-500' : 'border-gray-300 dark:border-gray-700']"> <div class="mr-5"> <svg class="h-6 w-6 text-gray-900 dark:text-gray-100" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path d="M13.1385 3.00445C12.945 2.98944 12.7459 3.01205 12.5503 3.07747C11.768 3.33915 11.3449 4.18679 11.6065 4.96907L12.2245 6.81605L8.70221 7.99374L8.11133 6.22653C7.84965 5.44425 7.00201 5.02243 6.21973 5.28411C5.43677 5.54579 5.01563 6.39208 5.27731 7.17436L5.86819 8.94156L4.0212 9.55948C3.23893 9.82116 2.81575 10.6674 3.07743 11.4497C3.33911 12.232 4.18676 12.6552 4.96903 12.3935L6.81601 11.7756L7.9937 15.2978L6.22649 15.8887C5.44422 16.1504 5.02239 16.998 5.28407 17.7803C5.54576 18.5633 6.39205 18.9844 7.17432 18.7227L8.94153 18.1318L9.55944 19.9788C9.82113 20.7611 10.6674 21.1843 11.4497 20.9226C12.232 20.6609 12.6545 19.8133 12.3935 19.031L11.7755 17.184L15.2978 16.005L15.8887 17.7735C16.1503 18.5558 16.998 18.9776 17.7803 18.716C18.5632 18.4543 18.985 17.608 18.724 16.8257L18.1318 15.0572L19.9788 14.4392C20.7611 14.1776 21.1842 13.3313 20.9226 12.549C20.6609 11.7667 19.8132 11.3449 19.031 11.6066L17.184 12.2245L16.0063 8.70224L17.7735 8.11137C18.5558 7.84969 18.9776 7.00204 18.7159 6.21977C18.4542 5.43749 17.608 5.01567 16.8257 5.27735L15.0585 5.86822L14.4406 4.02124C14.2443 3.43453 13.7189 3.04949 13.1385 3.00445ZM13.1723 9.65007L14.35 13.1723L10.8277 14.35L9.65003 10.8278L13.1723 9.65007Z" /> </svg> </div> <div class="text-base flex-grow min-w-0 leading-6 font-medium text-gray-600 dark:text-gray-400"> <div> Slack </div> <div> <div v-if="editable" class="text-sm leading-5 font-normal"> <a href="/subscriber/auth/slack/initiate" class="inline-flex items-center mt-3 px-2.5 py-1.5 border border-transparent text-xs font-medium rounded shadow-sm text-white bg-slack-aubergine hover:bg-slack-aubergine-null focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 dark:focus:ring-brand-dm-primary-500 disabled:opacity-50"> <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 mr-2" viewBox="0 0 122.8 122.8"> <path d="M25.8 77.6c0 7.1-5.8 12.9-12.9 12.9S0 84.7 0 77.6s5.8-12.9 12.9-12.9h12.9v12.9zm6.5 0c0-7.1 5.8-12.9 12.9-12.9s12.9 5.8 12.9 12.9v32.3c0 7.1-5.8 12.9-12.9 12.9s-12.9-5.8-12.9-12.9V77.6z" fill="#e01e5a"></path> <path d="M45.2 25.8c-7.1 0-12.9-5.8-12.9-12.9S38.1 0 45.2 0s12.9 5.8 12.9 12.9v12.9H45.2zm0 6.5c7.1 0 12.9 5.8 12.9 12.9s-5.8 12.9-12.9 12.9H12.9C5.8 58.1 0 52.3 0 45.2s5.8-12.9 12.9-12.9h32.3z" fill="#36c5f0"></path> <path d="M97 45.2c0-7.1 5.8-12.9 12.9-12.9s12.9 5.8 12.9 12.9-5.8 12.9-12.9 12.9H97V45.2zm-6.5 0c0 7.1-5.8 12.9-12.9 12.9s-12.9-5.8-12.9-12.9V12.9C64.7 5.8 70.5 0 77.6 0s12.9 5.8 12.9 12.9v32.3z" fill="#2eb67d"></path> <path d="M77.6 97c7.1 0 12.9 5.8 12.9 12.9s-5.8 12.9-12.9 12.9-12.9-5.8-12.9-12.9V97h12.9zm0-6.5c-7.1 0-12.9-5.8-12.9-12.9s5.8-12.9 12.9-12.9h32.3c7.1 0 12.9 5.8 12.9 12.9s-5.8 12.9-12.9 12.9H77.6z" fill="#ecb22e"></path> </svg> Add to Slack </a> </div> </div> </div> <!-- Enabled: "bg-brand-primary-600", Not Enabled: "bg-gray-200" --> <button type="button" class="relative inline-flex flex-shrink-0 h-6 w-11 border-2 border-transparent rounded-full cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 text-brand-primary-contrast-500 dark:focus:ring-brand-dm-primary-500 dark:text-brand-dm-primary-contrast-500" role="switch" aria-checked="false" @click="toggleActive()" :class="[active ? 'bg-brand-primary-600 dark:bg-brand-dm-primary-600' : 'bg-gray-200 dark:bg-gray-800']"> <span class="sr-only"></span> <!-- Enabled: "translate-x-5", Not Enabled: "translate-x-0" --> <span class="pointer-events-none relative inline-block h-5 w-5 rounded-full bg-white dark:bg-gray-900 shadow ring-0 transition ease-in-out duration-200" :class="[active ? 'translate-x-5' : 'translate-x-0']"> <!-- Enabled: "opacity-0 ease-out duration-100", Not Enabled: "opacity-100 ease-in duration-200" --> <span class="ease-in duration-200 absolute inset-0 h-full w-full flex items-center justify-center transition-opacity" aria-hidden="true" :class="[active ? 'opacity-100' : 'opacity-0']"> <svg class="h-3 w-3 text-gray-400 dark:text-gray-600" fill="none" viewBox="0 0 12 12"> <path d="M4 8l2-2m0 0l2-2M6 6L4 4m2 2l2 2" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </svg> </span> <!-- Enabled: "opacity-100 ease-in duration-200", Not Enabled: "opacity-0 ease-out duration-100" --> <span class="ease-out duration-100 absolute inset-0 h-full w-full flex items-center justify-center transition-opacity" aria-hidden="true" :class="[active ? 'opacity-0' : 'opacity-100']"> <svg class="h-3 w-3 text-brand-primary-600 dark:text-brand-dm-primary-600" fill="currentColor" viewBox="0 0 12 12"> <path d="M3.707 5.293a1 1 0 00-1.414 1.414l1.414-1.414zM5 8l-.707.707a1 1 0 001.414 0L5 8zm4.707-3.293a1 1 0 00-1.414-1.414l1.414 1.414zm-7.414 2l2 2 1.414-1.414-2-2-1.414 1.414zm3.414 2l4-4-1.414-1.414-4 4 1.414 1.414z" /> </svg> </span> </span> </button> </li> <li class="p-4 my-3 border rounded-md flex" v-scope="NotificationChannelForm({ active: subscriber.notify_by_microsoft_teams_url, attribute_name: 'microsoft_teams_url', value: subscriber.microsoft_teams_url })" :class="[active ? 'border-brand-primary-500 dark:border-brand-dm-primary-500' : 'border-gray-300 dark:border-gray-700']"> <div class="mr-5"> <svg class="h-6 w-6 text-gray-900 dark:text-gray-100" viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"> <path d="M12.587 3.78271C11.2487 3.78271 10.1489 4.81576 10.0511 6.13054H11.2174C12.2974 6.13054 13.1739 7.00706 13.1739 8.08706V8.79936C14.297 8.53718 15.1304 7.5275 15.1304 6.32619C15.1304 4.92141 13.9917 3.78271 12.587 3.78271ZM18.4565 5.34793C17.9895 5.34793 17.5416 5.53345 17.2114 5.86368C16.8812 6.19391 16.6957 6.64179 16.6957 7.1088C16.6957 7.57581 16.8812 8.0237 17.2114 8.35392C17.5416 8.68415 17.9895 8.86967 18.4565 8.86967C18.9235 8.86967 19.3714 8.68415 19.7016 8.35392C20.0319 8.0237 20.2174 7.57581 20.2174 7.1088C20.2174 6.64179 20.0319 6.19391 19.7016 5.86368C19.3714 5.53345 18.9235 5.34793 18.4565 5.34793ZM4.17391 6.91315C3.5267 6.91315 3 7.43985 3 8.08706V15.1305C3 15.7778 3.5267 16.3045 4.17391 16.3045H11.2174C11.8646 16.3045 12.3913 15.7778 12.3913 15.1305V8.08706C12.3913 7.43985 11.8646 6.91315 11.2174 6.91315H4.17391ZM5.73913 9.26098H9.65217V10.0436H8.08696V13.9566H7.30435V10.0436H5.73913V9.26098ZM13.1739 10.0436V15.1305C13.1739 16.2105 12.2974 17.0871 11.2174 17.0871H8.94752C9.10404 17.854 9.48379 18.5389 10.016 19.0711C10.7242 19.7794 11.7026 20.2175 12.7826 20.2175C14.9426 20.2175 16.6957 18.4645 16.6957 16.3045V10.0436H13.1739ZM17.4783 10.0436V16.3045C17.4783 16.6253 17.4468 16.9386 17.3881 17.2399C17.7129 17.3925 18.073 17.4784 18.4565 17.4784C19.8613 17.4784 21 16.3397 21 14.9349V10.0436H17.4783Z" /> </svg> </div> <div class="text-base flex-grow min-w-0 leading-6 font-medium text-gray-600 dark:text-gray-400"> <div> Microsoft Teams </div> <div> <div v-if="editable" class="text-sm leading-5 font-normal"> <form @submit.prevent="save()"> <input type="url" v-model="value" class="bg-white text-gray-900 dark:bg-gray-800 dark:text-gray-200 block w-full px-3 py-2 mt-3 mb-2 sm:text-sm rounded-md border" :class="[errors.length > 0 ? 'border-brand-red-500 text-brand-red-500 placeholder-brand-red-500 focus:ring-brand-red-500 focus:border-brand-red-500 dark:border-brand-dm-red-500 dark:text-brand-dm-red-500 dark:placeholder-brand-dm-red-500 dark:focus:ring-brand-dm-red-500 dark:focus:border-brand-dm-red-500' : 'border-gray-300 dark:border-gray-700 placeholder-gray-400 dark:placeholder-gray-600 focus:ring-brand-primary-500 focus:border-brand-primary-500 dark:focus:ring-brand-dm-primary-500 dark:focus:border-brand-dm-primary-500']" placeholder="https://company.webhooks.microsoft.com/xxxx" v-effect="if (editable) $el.focus()" ref="input"> <p class="mb-2 text-sm text-brand-red-500 dark:text-brand-dm-red-500" v-for="error in errors"> {{ error }} </p> <button type="submit" class="w-min inline-flex items-center px-2.5 py-1.5 border border-transparent text-xs font-medium rounded shadow-sm text-brand-primary-contrast-500 bg-brand-primary-500 hover:bg-brand-primary-600 dark:text-brand-dm-primary-contrast-500 dark:bg-brand-dm-primary-500 dark:hover:bg-brand-dm-primary-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 dark:focus:ring-brand-dm-primary-500 disabled:opacity-50" :disabled="loading"> <span v-if="loading"> Saving... </span> <span v-else> Save </span> </button> <button type="button" @click.prevent="reset()" class="text-xs font-medium ml-3 text-gray-600 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-300"> Cancel </button> <div class="mt-3 w-full max-w-[80%]"> <p class="text-sm"> For help with webhooks, <a href="https://help.sorryapp.com/en/articles/6737239-status-updates-via-microsoft-teams" target="_blank" rel="noreferrer" class="text-brand-primary-500 hover:text-brand-primary-400 dark:text-brand-dm-primary-500 dark:hover:text-brand-dm-primary-400">visit our help centre</a>. </p> </div> </form> </div> <div v-else> <div v-if="value" class="flex mr-8"> <div class="truncate"> {{ value }} </div> <button class="inline-block ml-3 text-brand-primary-500 hover:text-brand-primary-400 dark:text-brand-dm-primary-500 dark:hover:text-brand-dm-primary-400" @click="edit()"> <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z" /> </svg> </button> </div> </div> </div> </div> <!-- Enabled: "bg-brand-primary-600", Not Enabled: "bg-gray-200" --> <button type="button" class="relative inline-flex flex-shrink-0 h-6 w-11 border-2 border-transparent rounded-full cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 text-brand-primary-contrast-500 dark:focus:ring-brand-dm-primary-500 dark:text-brand-dm-primary-contrast-500" role="switch" aria-checked="false" @click="toggleActive()" :class="[active ? 'bg-brand-primary-600 dark:bg-brand-dm-primary-600' : 'bg-gray-200 dark:bg-gray-800']"> <span class="sr-only"></span> <!-- Enabled: "translate-x-5", Not Enabled: "translate-x-0" --> <span class="pointer-events-none relative inline-block h-5 w-5 rounded-full bg-white dark:bg-gray-900 shadow ring-0 transition ease-in-out duration-200" :class="[active ? 'translate-x-5' : 'translate-x-0']"> <!-- Enabled: "opacity-0 ease-out duration-100", Not Enabled: "opacity-100 ease-in duration-200" --> <span class="ease-in duration-200 absolute inset-0 h-full w-full flex items-center justify-center transition-opacity" aria-hidden="true" :class="[active ? 'opacity-100' : 'opacity-0']"> <svg class="h-3 w-3 text-gray-400 dark:text-gray-600" fill="none" viewBox="0 0 12 12"> <path d="M4 8l2-2m0 0l2-2M6 6L4 4m2 2l2 2" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </svg> </span> <!-- Enabled: "opacity-100 ease-in duration-200", Not Enabled: "opacity-0 ease-out duration-100" --> <span class="ease-out duration-100 absolute inset-0 h-full w-full flex items-center justify-center transition-opacity" aria-hidden="true" :class="[active ? 'opacity-0' : 'opacity-100']"> <svg class="h-3 w-3 text-brand-primary-600 dark:text-brand-dm-primary-600" fill="currentColor" viewBox="0 0 12 12"> <path d="M3.707 5.293a1 1 0 00-1.414 1.414l1.414-1.414zM5 8l-.707.707a1 1 0 001.414 0L5 8zm4.707-3.293a1 1 0 00-1.414-1.414l1.414 1.414zm-7.414 2l2 2 1.414-1.414-2-2-1.414 1.414zm3.414 2l4-4-1.414-1.414-4 4 1.414 1.414z" /> </svg> </span> </span> </button> </li> <li class="p-4 my-3 border rounded-md flex" v-scope="NotificationChannelForm({ active: subscriber.notify_by_google_chat_space, attribute_name: 'google_chat_space', value: subscriber.google_chat_space })" :class="[active ? 'border-brand-primary-500 dark:border-brand-dm-primary-500' : 'border-gray-300 dark:border-gray-700']"> <div class="mr-5"> <svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-gray-900 dark:text-gray-100"> <path d="M12.1812 3C7.2094 3 3.17822 7.02975 3.17822 12C3.17822 16.9702 7.2094 21 12.1812 21C19.6887 21 21.38 14.0302 20.6758 10.5H19.6782H17.9775H12.1782V13.5H17.9819C17.3147 16.0862 14.9727 18 12.1782 18C8.86472 18 6.17822 15.3135 6.17822 12C6.17822 8.6865 8.86472 6 12.1782 6C13.685 6 15.0576 6.55931 16.1113 7.47656L18.2427 5.34668C16.6422 3.88868 14.5159 3 12.1812 3Z" /> </svg> </div> <div class="text-base flex-grow min-w-0 leading-6 font-medium text-gray-600 dark:text-gray-400"> <div> Google Chat </div> <div> <div v-if="editable" class="text-sm leading-5 font-normal"> <a href="/subscriber/auth/google/initiate" class="inline-flex items-center mt-3 px-2.5 py-1.5 border border-transparent text-xs font-medium rounded shadow-sm text-white bg-google-blue hover:bg-google-medium-blue focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 dark:focus:ring-brand-dm-primary-500 disabled:opacity-50"> <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 mr-2" viewBox="0 0 48 48"> <path fill="#FFC107" d="M43.611,20.083H42V20H24v8h11.303c-1.649,4.657-6.08,8-11.303,8c-6.627,0-12-5.373-12-12c0-6.627,5.373-12,12-12c3.059,0,5.842,1.154,7.961,3.039l5.657-5.657C34.046,6.053,29.268,4,24,4C12.955,4,4,12.955,4,24c0,11.045,8.955,20,20,20c11.045,0,20-8.955,20-20C44,22.659,43.862,21.35,43.611,20.083z"/> <path fill="#FF3D00" d="M6.306,14.691l6.571,4.819C14.655,15.108,18.961,12,24,12c3.059,0,5.842,1.154,7.961,3.039l5.657-5.657C34.046,6.053,29.268,4,24,4C16.318,4,9.656,8.337,6.306,14.691z"/> <path fill="#4CAF50" d="M24,44c5.166,0,9.86-1.977,13.409-5.192l-6.19-5.238C29.211,35.091,26.715,36,24,36c-5.202,0-9.619-3.317-11.283-7.946l-6.522,5.025C9.505,39.556,16.227,44,24,44z"/> <path fill="#1976D2" d="M43.611,20.083H42V20H24v8h11.303c-0.792,2.237-2.231,4.166-4.087,5.571c0.001-0.001,0.002-0.001,0.003-0.002l6.19,5.238C36.971,39.205,44,34,44,24C44,22.659,43.862,21.35,43.611,20.083z"/> </svg> Add to Google Chat </a> </div> </div> </div> <!-- Enabled: "bg-brand-primary-600", Not Enabled: "bg-gray-200" --> <button type="button" class="relative inline-flex flex-shrink-0 h-6 w-11 border-2 border-transparent rounded-full cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 text-brand-primary-contrast-500 dark:focus:ring-brand-dm-primary-500 dark:text-brand-dm-primary-contrast-500" role="switch" aria-checked="false" @click="toggleActive()" :class="[active ? 'bg-brand-primary-600 dark:bg-brand-dm-primary-600' : 'bg-gray-200 dark:bg-gray-800']"> <span class="sr-only"></span> <!-- Enabled: "translate-x-5", Not Enabled: "translate-x-0" --> <span class="pointer-events-none relative inline-block h-5 w-5 rounded-full bg-white dark:bg-gray-900 shadow ring-0 transition ease-in-out duration-200" :class="[active ? 'translate-x-5' : 'translate-x-0']"> <!-- Enabled: "opacity-0 ease-out duration-100", Not Enabled: "opacity-100 ease-in duration-200" --> <span class="ease-in duration-200 absolute inset-0 h-full w-full flex items-center justify-center transition-opacity" aria-hidden="true" :class="[active ? 'opacity-100' : 'opacity-0']"> <svg class="h-3 w-3 text-gray-400 dark:text-gray-600" fill="none" viewBox="0 0 12 12"> <path d="M4 8l2-2m0 0l2-2M6 6L4 4m2 2l2 2" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" /> </svg> </span> <!-- Enabled: "opacity-100 ease-in duration-200", Not Enabled: "opacity-0 ease-out duration-100" --> <span class="ease-out duration-100 absolute inset-0 h-full w-full flex items-center justify-center transition-opacity" aria-hidden="true" :class="[active ? 'opacity-0' : 'opacity-100']"> <svg class="h-3 w-3 text-brand-primary-600 dark:text-brand-dm-primary-600" fill="currentColor" viewBox="0 0 12 12"> <path d="M3.707 5.293a1 1 0 00-1.414 1.414l1.414-1.414zM5 8l-.707.707a1 1 0 001.414 0L5 8zm4.707-3.293a1 1 0 00-1.414-1.414l1.414 1.414zm-7.414 2l2 2 1.414-1.414-2-2-1.414 1.414zm3.414 2l4-4-1.414-1.414-4 4 1.414 1.414z" /> </svg> </span> </span> </button> </li> </ul> </div> <div class="flex flex-row items-center bg-gray-100 dark:bg-gray-800 rounded-lg py-2 my-8"> <p class="italic text-gray-500 px-4"> Subscribe to other services using the bell icon on the subscribe button on the status page. </p> <div class="mx-5"> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-gray-400" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" /> </svg> </div> </div> </div> <div class="flex-shrink-0 py-4 flex justify-between"> <button type="button" class="py-2 px-4 text-sm font-medium text-brand-red-500 hover:text-brand-red-400 dark:text-brand-dm-red-500 dark:hover:text-brand-dm-red-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-red-500 dark:focus:ring-brand-dm-red-500" @click="switchPanel(panels.UNSUBSCRIBE)"> Unsubscribe completely </button> <button type="button" class="ml-4 inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-brand-primary-contrast-500 bg-brand-primary-500 hover:bg-brand-primary-600 dark:text-brand-dm-primary-contrast-500 dark:bg-brand-dm-primary-500 dark:hover:bg-brand-dm-primary-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 dark:focus:ring-brand-dm-primary-500" @click="close()"> Done </button> </div> </div> </template> <template v-if="current_panel == panels.UNSUBSCRIBE"> <!-- Alert / Notification Wrapper --> <div class="flex flex-wrap content-center h-full"> <div class="py-4"> <!-- Alert / Notification Content. --> <div class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-brand-red-500/10 dark:bg-brand-dm-red-500/10"> <!-- Heroicon name: outline/exclamation --> <svg class="h-6 w-6 text-brand-red-500 dark:text-brand-dm-red-500" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /> </svg> </div> <div class="mt-3 text-center"> <h3 class="text-lg leading-6 font-medium text-gray-900 dark:text-gray-100" id="modal-title"> Unsubscribe Completely? </h3> <div class="mt-2 px-4 sm:px-6"> <p class="text-sm text-gray-500"> You’ll no long receive any status updates from Sorry™ Service Status, are you sure? </p> </div> </div> <div class="mt-5" v-scope="UnsubscribeButton()"> <button type="button" class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-brand-red-500 dark:bg-brand-dm-red-500 text-base font-medium text-brand-red-contrast-500 dark:text-brand-dm-red-contrast-500 hover:bg-brand-red-600 dark:hover:bg-brand-dm-red-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-red-500 dark:focus:ring-brand-dm-red-500 disabled:opacity-50" @click="click()" :disabled="loading"> <span v-if="loading"> Unsubscribing... </span> <span v-else> Yes, Unsubscribe Completely </span> </button> <button type="button" class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 dark:border-gray-700 shadow-sm px-4 py-2 text-base font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-900 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 dark:focus:ring-brand-dm-primary-500" @click="switchPanel(panels.PREFERENCES)"> Cancel </button> <p v-for="error in errors" class="text-center mt-4 text-brand-red-600 dark:text-brand-dm-red-600"> {{ error }} </p> </div> </div> </div> </template> <template v-if="current_panel == panels.UNSUBSCRIBED"> <!-- Alert / Notification Wrapper --> <div class="flex flex-wrap content-center h-full"> <div class="py-4"> <!-- Alert / Notification Content. --> <div class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-brand-green-500/10 dark:bg-brand-dm-green-500/10"> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-brand-green-500 dark:text-brand-dm-green-500" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" /> </svg> </div> <div class="mt-3 text-center"> <h3 class="text-lg leading-6 font-medium text-gray-900 dark:text-gray-100" id="modal-title"> You’re Unsubscribed! </h3> <div class="mt-2 px-4 sm:px-6"> <p class="text-sm text-gray-500"> We’ll no longer send you any status updates about Sorry™ Service Status. </p> </div> </div> <div class="mt-5"> <button type="button" class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 dark:border-gray-700 shadow-sm px-4 py-2 text-base font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-900 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-brand-primary-500 dark:ocus:ring-brand-dm-primary-500" @click.prevent="close()"> Close </button> </div> </div> </div> </template> </div> </div> </div> </div> </div> </div> <script src="https://www.google.com/recaptcha/api.js?render=6Lc1z5MiAAAAAArBLreBfxilmog9tuu1Eqh2cCNM" nonce="1JXguYhv4IKv2GCpA1uAaqmUanI5m4AZU1Q4RPCOYfU="></script> <script src="https://assets0.sorryapp.com/themes/000/025/382/assets/vendor.min.js?1730896198" nonce="1JXguYhv4IKv2GCpA1uAaqmUanI5m4AZU1Q4RPCOYfU="></script> <script src="https://assets2.sorryapp.com/themes/000/025/382/assets/main.min.js?1730896198" nonce="1JXguYhv4IKv2GCpA1uAaqmUanI5m4AZU1Q4RPCOYfU=" type="module"></script> <script id="initialSubscriberPayload" nonce="1JXguYhv4IKv2GCpA1uAaqmUanI5m4AZU1Q4RPCOYfU="> window.components = [ { id: 4, parent_id: null }, { id: 3, parent_id: null }, { id: 2784, parent_id: null }, { id: 34540, parent_id: null }, { id: 1353, parent_id: null }, { id: 1355, parent_id: 1353 }, { id: 1354, parent_id: 1353 }, { id: 5, parent_id: null }, { id: 139, parent_id: 5 }, { id: 54542, parent_id: 139 }, { id: 142, parent_id: 139 }, { id: 143, parent_id: 139 }, { id: 746, parent_id: 139 }, { id: 24111, parent_id: 139 }, { id: 25842, parent_id: 5 }, { id: 140, parent_id: 5 }, { id: 437, parent_id: 5 }, { id: 141, parent_id: 5 }, { id: 344, parent_id: 5 }, { id: 38220, parent_id: 5 }, { id: 84062, parent_id: null }, ] </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10