CINXE.COM
Sorry™ Service Status
<!doctype html> <html lang="en" > <head> <script type="text/javascript" nonce="lT5QYe1pHOraw2knKNpUDXcKglD9yktZmo+oJM89jk8=">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"92b677be6b","applicationID":"8841359","transactionName":"clcIRUBYW1xTRUsVTVNUD1IdR1ZXU0RLFlBeTw==","queueTime":2,"applicationTime":328,"agent":""}</script> <script type="text/javascript" nonce="lT5QYe1pHOraw2knKNpUDXcKglD9yktZmo+oJM89jk8=">(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="lT5QYe1pHOraw2knKNpUDXcKglD9yktZmo+oJM89jk8="></script> <script nonce="lT5QYe1pHOraw2knKNpUDXcKglD9yktZmo+oJM89jk8="> 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>Sorry™ Service Status</title> <meta name="description" content="Keep up to date with any interruptions to our service which may be affecting you." /> <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="lT5QYe1pHOraw2knKNpUDXcKglD9yktZmo+oJM89jk8="> 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/" /> <script nonce="lT5QYe1pHOraw2knKNpUDXcKglD9yktZmo+oJM89jk8="> 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" --> <a href="/history/2024/november" 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"> History </a> <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="text-brand-header-contrast dark:text-brand-dm-header-contrast 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"> <a href="/history/2024/november" 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"> History </a> </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 pb-8 sm:pb-12 lg:pb-16"> <div class="max-w-3xl lg:max-w-4xl xl:max-w-5xl 2xl:max-w-7xl mx-auto"> <div class="text-center pt-8 sm:pt-12 lg:pt-16"> <!-- Heroicon: Badge Check --> <svg xmlns="http://www.w3.org/2000/svg" class="h-20 w-20 sm:h-24 sm:w-24 mb-8 mx-auto text-state-operational dark:text-state-dm-operational" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /> </svg> <h1 class="text-3xl tracking-tight font-extrabold text-brand-header-contrast dark:text-brand-dm-header-contrast sm:text-4xl md:text-5xl"> <span class="block xl:inline"> All systems are go! </span> </h1> <p class="mt-3 max-w-md mx-auto text-base text-brand-header-contrast/60 sm:text-lg md:mt-5 md:text-lg md:max-w-3xl dark:text-brand-dm-header-contrast/60"> Having trouble? <a href="https://help.sorryapp.com" class="text-brand-header-contrast/60 hover:text-brand-header-contrast/90 dark:text-brand-dm-header-contrast/60 dark:hover:text-brand-dm-header-contrast/90 pb-px underline">Please contact support</a> </p> </div> </div> </section> </header> <div class="bg-white dark:bg-gray-900 py-8 sm:py-12 lg:py-16 px-4 sm:px-6 lg:px-8"> <div class="relative max-w-3xl lg:max-w-4xl xl:max-w-5xl 2xl:max-w-7xl mx-auto"> <div class="mb-8 lg:mb-16"> <script id="component-grid-data" type="application/json"> [ { "id": 4, "state": "operational", "name": "Status Pages", "description": "The page where your notices are displayed to your audience.", "parent_id": null, "link": null, "state_text": "Operational", "links": { "children": { "count": 0 } } , "metrics_summary": { "percentage_uptime": { "words": "100%" }, "url": "/components/status-pages/metrics" } } , { "id": 3, "state": "operational", "name": "Management UI", "description": "This is where you login and manage your status pages from (app.sorryapp.com)", "parent_id": null, "link": null, "state_text": "Operational", "links": { "children": { "count": 0 } } , "metrics_summary": { "percentage_uptime": { "words": "100%" }, "url": "/components/management-ui/metrics" } } , { "id": 2784, "state": "operational", "name": "REST API", "description": "Allows you to access data and update your status page from your own application, it also powers our website plugin (api.sorryapp.com)", "parent_id": null, "link": null, "state_text": "Operational", "links": { "children": { "count": 0 } } , "metrics_summary": { "percentage_uptime": { "words": "100%" }, "url": "/components/rest-api/metrics" } } , { "id": 34540, "state": "operational", "name": "Help Centre", "description": "Our help centre powered by the folks at Help Scout (help.sorryapp.com)", "parent_id": null, "link": null, "state_text": "Operational", "links": { "children": { "count": 0 } } , "metrics_summary": { "percentage_uptime": { "words": "100%" }, "url": "/components/help-centre/metrics" } } , { "id": 1353, "state": "operational", "name": "Monitoring Automation", "description": "Turning your monitoring alerts into friendly status page updates.", "parent_id": null, "link": null, "state_text": "Operational", "links": { "children": { "count": 2 } } , "metrics_summary": { "percentage_uptime": { "words": "100%" }, "url": null } } , { "id": 5, "state": "operational", "name": "Message Distribution", "description": "Publication of your status notices via Email, Twitter and Slack.", "parent_id": null, "link": null, "state_text": "Operational", "links": { "children": { "count": 7 } } , "metrics_summary": { "percentage_uptime": { "words": "100%" }, "url": null } } , { "id": 84062, "state": "operational", "name": "Legacy Theme (Sunsetting)", "description": null, "parent_id": null, "link": null, "state_text": "Operational", "links": { "children": { "count": 0 } } , "metrics_summary": null } ] </script> <template id="component-body-template"> <div class="flex flex-col gap-2"> <div class="flex items-baseline gap-2 md:gap-3"> <button v-if="hasChildren" @mouseover="fetchChildren()" @click="toggleChildren()" class="flex text-gray-500 hover:text-gray-600 dark:hover:text-gray-400 before:content-['\200B']"> <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"> <path v-if="childrenExpanded" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12H9m12 0a9 9 0 11-18 0 9 9 0 0118 0z" /> <path v-if="!childrenExpanded" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v3m0 0v3m0-3h3m-3 0H9m12 0a9 9 0 11-18 0 9 9 0 0118 0z" /> </svg> </button> <p class="font-medium text-black dark:text-gray-100 [word-break:break-word]"> <span class="mr-1"> {{ name }} </span> <!-- Heroicon name: solid/information-circle --> <svg v-if="description" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="inline w-4 h-4 -mt-0.5 text-gray-400 hover:text-gray-500 dark:text-gray-500 dark:hover:text-gray-400" :data-tippy-content="description"> <path fill-rule="evenodd" d="M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zm8.706-1.442c1.146-.573 2.437.463 2.126 1.706l-.709 2.836.042-.02a.75.75 0 01.67 1.34l-.04.022c-1.147.573-2.438-.463-2.127-1.706l.71-2.836-.042.02a.75.75 0 11-.671-1.34l.041-.022zM12 9a.75.75 0 100-1.5.75.75 0 000 1.5z" clip-rule="evenodd" /> </svg> </p> <div class="flex items-center gap-2 md:gap-3 ml-auto before:content-['\200B']" v-show="!childrenExpanded"> <template v-if="state === 'operational' && metrics_summary"> <div class="inline-flex gap-1 items-center rounded-full pl-2.5 bg-brand-green-500/10 dark:bg-brand-dm-green-500/20"> <template v-if="metrics_summary.url"> <a :href="metrics_summary.url" class="text-base whitespace-nowrap font-normal text-brand-green-500 dark:text-brand-dm-green-500 hover:text-brand-green-400 dark:hover:text-brand-dm-green-400"> {{ metrics_summary.percentage_uptime.words }} <span class="sr-only @sm/component:not-sr-only">Uptime</span> </a> </template> <template v-else> <button @mouseover="fetchChildren()" @click="toggleChildren()" class="text-base whitespace-nowrap font-normal text-brand-green-500 dark:text-brand-dm-green-500 hover:text-brand-green-400 dark:hover:text-brand-dm-green-400"> {{ metrics_summary.percentage_uptime.words }} <span class="sr-only @sm/component:not-sr-only">Uptime</span> </button> </template> <svg xmlns="http://www.w3.org/2000/svg" class="text-state-operational dark:text-state-dm-operational h-8 w-8" fill="currentColor" viewBox="0 0 20 20" stroke="none"> <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" /> </svg> </div> </template> <template v-else-if="state === 'operational'"> <svg xmlns="http://www.w3.org/2000/svg" class="text-state-operational dark:text-state-dm-operational h-8 w-8" fill="currentColor" viewBox="0 0 20 20" stroke="none"> <path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd" /> </svg> </template> <template v-else-if="state === 'degraded'"> <svg xmlns="http://www.w3.org/2000/svg" class="text-state-degraded dark:text-state-dm-degraded h-8 w-8" fill="currentColor" viewBox="0 0 20 20" stroke="none"> <path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7 4a1 1 0 11-2 0 1 1 0 012 0zm-1-9a1 1 0 00-1 1v4a1 1 0 102 0V6a1 1 0 00-1-1z" clip-rule="evenodd" /> </svg> </template> <template v-else-if="state === 'under-maintenance'"> <svg xmlns="http://www.w3.org/2000/svg" class="text-state-under-maintenance dark:text-state-dm-under-maintenance h-8 w-8" fill="currentColor" viewBox="0 0 20 20" stroke="none"> <path fill-rule="evenodd" d="M6.8659,13.1812a.3812.3812,0,0,0-.5275,0,.37.37,0,0,0,0,.5181.3816.3816,0,0,0,.5275,0A.37.37,0,0,0,6.8659,13.1812Zm0,0a.3812.3812,0,0,0-.5275,0,.37.37,0,0,0,0,.5181.3816.3816,0,0,0,.5275,0A.37.37,0,0,0,6.8659,13.1812Zm0,0a.3812.3812,0,0,0-.5275,0,.37.37,0,0,0,0,.5181.3816.3816,0,0,0,.5275,0A.37.37,0,0,0,6.8659,13.1812ZM9.9932,2a8,8,0,1,0,.0136,0Zm1.6956,7.7619a.6806.6806,0,0,0-.7536.226c-.9044,1.14-3.4853,4.0785-3.6643,4.2483-.537.5463-.923.5369-1.4694,0-.5369-.5369-.5369-.9232,0-1.4695.1789-.1695,3.1178-2.7506,4.2577-3.6548a.6906.6906,0,0,0,.226-.7632,2.2555,2.2555,0,0,1,.5463-2.3171,2.2286,2.2286,0,0,1,2.44-.48.1643.1643,0,0,1,.0471.2732L12.1409,7.0019a.4383.4383,0,0,0,0,.6028l.3768.3768a.4208.4208,0,0,0,.595.0079h0l.0081-.0079,1.14-1.14a.171.171,0,0,1,.2826.0659,2.2473,2.2473,0,0,1-2.8546,2.8543Z" clip-rule="evenodd" /> </svg> </template> <button class="bell-button" :class="['bell-button-' + componentCheckState(id)]" @click.prevent="toggleComponentCheck(id)"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="icon-slash w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M9.143 17.082a24.248 24.248 0 003.844.148m-3.844-.148a23.856 23.856 0 01-5.455-1.31 8.964 8.964 0 002.3-5.542m3.155 6.852a3 3 0 005.667 1.97m1.965-2.277L21 21m-4.225-4.225a23.81 23.81 0 003.536-1.003A8.967 8.967 0 0118 9.75V9A6 6 0 006.53 6.53m10.245 10.245L6.53 6.53M3 3l3.53 3.53" /> </svg> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="icon-outline w-6 h-6"> <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> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="icon-solid w-6 h-6"> <path fill-rule="evenodd" d="M5.25 9a6.75 6.75 0 0113.5 0v.75c0 2.123.8 4.057 2.118 5.52a.75.75 0 01-.297 1.206c-1.544.57-3.16.99-4.831 1.243a3.75 3.75 0 11-7.48 0 24.585 24.585 0 01-4.831-1.244.75.75 0 01-.298-1.205A8.217 8.217 0 005.25 9.75V9zm4.502 8.9a2.25 2.25 0 104.496 0 25.057 25.057 0 01-4.496 0z" clip-rule="evenodd" /> </svg> </button> </div> </div> <div v-if="childrenExpanded"> <div v-if="children.length > 0" class="pl-9 flex flex-col gap-2"> <template v-for="(child, index) in children" :key="child.id"> <div v-scope="Component(child)"> </template> </div> <div v-else class="pl-9 flex flex-col gap-2"> <template v-for="index in childCount"> <div class="flex flex-col gap-2"> <div class="flex items-baseline gap-2 md:gap-3"> <span class="placeholder-name mr-1 rounded-full font-medium text-black text-gray-200 bg-gray-200 dark:text-gray-800 dark:bg-gray-800 animate-pulse"> Loading Component... </span> <div class="flex items-center gap-2 md:gap-3 ml-auto before:content-['\200B']"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="h-8 w-8 text-gray-200 dark:text-gray-800 animate-pulse"> <path fill-rule="evenodd" d="M12 2.25c-5.385 0-9.75 4.365-9.75 9.75s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25Zm0 8.625a1.125 1.125 0 1 0 0 2.25 1.125 1.125 0 0 0 0-2.25ZM15.375 12a1.125 1.125 0 1 1 2.25 0 1.125 1.125 0 0 1-2.25 0ZM7.5 10.875a1.125 1.125 0 1 0 0 2.25 1.125 1.125 0 0 0 0-2.25Z" clip-rule="evenodd" /> </svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6 text-gray-200 dark:text-gray-800 animate-pulse"> <path fill-rule="evenodd" d="M5.25 9a6.75 6.75 0 0113.5 0v.75c0 2.123.8 4.057 2.118 5.52a.75.75 0 01-.297 1.206c-1.544.57-3.16.99-4.831 1.243a3.75 3.75 0 11-7.48 0 24.585 24.585 0 01-4.831-1.244.75.75 0 01-.298-1.205A8.217 8.217 0 005.25 9.75V9zm4.502 8.9a2.25 2.25 0 104.496 0 25.057 25.057 0 01-4.496 0z" clip-rule="evenodd" /> </svg> </div> </div> </div> </template> </div> </div> </div> </template> <template id="component-grid-template"> <div class="mb-16 flex flex-col-reverse gap-4"> <div :class="[maxColumnCount > 1 ? 'grid gap-4 xl:gap-6 lg:grid-cols-2 2xl:grid-cols-' + maxColumnCount : 'grid gap-4 xl:gap-6']"> <template v-for="(component, index) in rootComponents" :key="component.id"> <div class="py-2 px-4 sm:py-3 sm:px-5 md:py-4 md:px-6 text-gray-600 dark:text-gray-400 rounded-lg border border-gray-400 dark:border-gray-600 @container/component"> <div v-scope="Component(component)"></div> </div> </template> </div> <div v-if="anyMetrics" class="text-sm text-gray-500 text-right"> Past 30 days Uptime </div> </div> </template> <div v-scope="ComponentGrid({ targetColumnCount: 2 })" @vue:mounted="mounted"></div> </div> <div class="mb-8 lg:mb-16"> <h2 class="text-xl tracking-tight font-extrabold text-gray-900 dark:text-gray-100 sm:text-2xl mb-6 lg:mb-8"> Recent Notices... </h2> <div> <div class="grid gap-4 sd:gap-6 md:gap-8 md:grid-cols-2"> <div class="border-solid border-2 border-gray-500 dark:border-gray-400 rounded-lg p-4 sm:p-6 text-left transition ease-in-out hover:-translate-y-1 hover:shadow-md duration-300 overflow-hidden"> <div class="mb-3 flex flex-col gap-3"> <div class="h-1 w-8 bg-gray-500 dark:bg-gray-400 rounded-full"></div> <small class="block text-gray-900/60 italic dark:text-gray-100/60"> <time datetime="2024-11-20T10:21:14+0000"> 10:21 UTC - 20 November 2024 </time> </small> </div> <a href="/notices/aibw2znt6au9jcya-further-groundwork-for-the-status-page-collections-ui" class="mt-1 sm:mt-2 block text-gray-900 dark:text-gray-100"> <p class="text-lg sm:text-xl font-semibold break-words"> Further groundwork for the Status Page Collections UI </p> <div class="mt-3 flex gap-1 text-sm"> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Prerelease </span> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> </div> <p class="mt-2 sm:mt-3 text-sm sm:text-base font-normal break-words"> A bunch of small behind-the-scenes changes to the Pages UI in preparation for the new Page Collections feature. No visible changes for customers. </p> </a> <div class="mt-3"> <a href="/notices/aibw2znt6au9jcya-further-groundwork-for-the-status-page-collections-ui" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> View notice → </a> </div> </div> <div class="border-solid border-2 border-gray-500 dark:border-gray-400 rounded-lg p-4 sm:p-6 text-left transition ease-in-out hover:-translate-y-1 hover:shadow-md duration-300 overflow-hidden"> <div class="mb-3 flex flex-col gap-3"> <div class="h-1 w-8 bg-gray-500 dark:bg-gray-400 rounded-full"></div> <small class="block text-gray-900/60 italic dark:text-gray-100/60"> <time datetime="2024-11-19T16:45:53+0000"> 16:45 UTC - 19 November 2024 </time> </small> </div> <a href="/notices/cowh75yjkowjajsj-groundwork-for-status-page-collections-ui" class="mt-1 sm:mt-2 block text-gray-900 dark:text-gray-100"> <p class="text-lg sm:text-xl font-semibold break-words"> Groundwork for Status Page Collections UI </p> <div class="mt-3 flex gap-1 text-sm"> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Prerelease </span> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> </div> <p class="mt-2 sm:mt-3 text-sm sm:text-base font-normal break-words"> Hot on the heels of the recent Pages UI announcement (https://status.sorryapp.com/notices/h2asiaxcmapm5u5y-announcing-the-new-pages-ui) we are looking to add... </p> </a> <div class="mt-3"> <a href="/notices/cowh75yjkowjajsj-groundwork-for-status-page-collections-ui" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> View notice → </a> </div> </div> <div class="border-solid border-2 border-gray-500 dark:border-gray-400 rounded-lg p-4 sm:p-6 text-left transition ease-in-out hover:-translate-y-1 hover:shadow-md duration-300 overflow-hidden"> <div class="mb-3 flex flex-col gap-3"> <div class="h-1 w-8 bg-gray-500 dark:bg-gray-400 rounded-full"></div> <small class="block text-gray-900/60 italic dark:text-gray-100/60"> <time datetime="2024-11-18T12:55:10+0000"> 12:55 UTC - 18 November 2024 </time> </small> </div> <a href="/notices/uffhhpu1ptvnbnbs-cleanup-feature-checks-for-now-released-features" class="mt-1 sm:mt-2 block text-gray-900 dark:text-gray-100"> <p class="text-lg sm:text-xl font-semibold break-words"> Cleanup feature checks for now-released features </p> <div class="mt-3 flex gap-1 text-sm"> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Cleanup </span> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> </div> <p class="mt-2 sm:mt-3 text-sm sm:text-base font-normal break-words"> Following on from the new Pages UI released this morning we have tidied up a bunch of code used to check if features in development are ready for release. Th... </p> </a> <div class="mt-3"> <a href="/notices/uffhhpu1ptvnbnbs-cleanup-feature-checks-for-now-released-features" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> View notice → </a> </div> </div> <div class="border-solid border-2 border-gray-500 dark:border-gray-400 rounded-lg p-4 sm:p-6 text-left transition ease-in-out hover:-translate-y-1 hover:shadow-md duration-300 overflow-hidden"> <div class="mb-3 flex flex-col gap-3"> <div class="h-1 w-8 bg-gray-500 dark:bg-gray-400 rounded-full"></div> <small class="block text-gray-900/60 italic dark:text-gray-100/60"> <time datetime="2024-11-18T10:19:32+0000"> 10:19 UTC - 18 November 2024 </time> </small> </div> <a href="/notices/h2asiaxcmapm5u5y-announcing-the-new-pages-ui" class="mt-1 sm:mt-2 block text-gray-900 dark:text-gray-100"> <p class="text-lg sm:text-xl font-semibold break-words"> Announcing the new Pages UI </p> <div class="mt-3 flex gap-1 text-sm"> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Feature </span> </div> <p class="mt-2 sm:mt-3 text-sm sm:text-base font-normal break-words"> Today we released a new UI for managing the Status Pages in your account. In the hamburger menu, you will now find a "Manage Status Pages" option. From this ... </p> </a> <div class="mt-3"> <a href="/notices/h2asiaxcmapm5u5y-announcing-the-new-pages-ui" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> View notice → </a> </div> </div> <div class="border-solid border-2 border-gray-500 dark:border-gray-400 rounded-lg p-4 sm:p-6 text-left transition ease-in-out hover:-translate-y-1 hover:shadow-md duration-300 overflow-hidden"> <div class="mb-3 flex flex-col gap-3"> <div class="h-1 w-8 bg-gray-500 dark:bg-gray-400 rounded-full"></div> <small class="block text-gray-900/60 italic dark:text-gray-100/60"> <time datetime="2024-11-15T23:14:16+0000"> 23:14 UTC - 15 November 2024 </time> </small> </div> <a href="/notices/ra36urbq0ppjoxg7-fixed-performance-issues-when-publishing-notices" class="mt-1 sm:mt-2 block text-gray-900 dark:text-gray-100"> <p class="text-lg sm:text-xl font-semibold break-words"> Fixed performance issues when publishing notices </p> <div class="mt-3 flex gap-1 text-sm"> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Bugfix </span> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> </div> <p class="mt-2 sm:mt-3 text-sm sm:text-base font-normal break-words"> We had a report from a customer that they were seeing slow page load times when publishing notices to their status page. After some diagnosis, we tracked thi... </p> </a> <div class="mt-3"> <a href="/notices/ra36urbq0ppjoxg7-fixed-performance-issues-when-publishing-notices" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> View notice → </a> </div> </div> <div class="border-solid border-2 border-gray-500 dark:border-gray-400 rounded-lg p-4 sm:p-6 text-left transition ease-in-out hover:-translate-y-1 hover:shadow-md duration-300 overflow-hidden"> <div class="mb-3 flex flex-col gap-3"> <div class="h-1 w-8 bg-gray-500 dark:bg-gray-400 rounded-full"></div> <small class="block text-gray-900/60 italic dark:text-gray-100/60"> <time datetime="2024-11-13T13:35:09+0000"> 13:35 UTC - 13 November 2024 </time> </small> </div> <a href="/notices/xqbwfw7js9zifejw-backend-cache-server-connection-pooling" class="mt-1 sm:mt-2 block text-gray-900 dark:text-gray-100"> <p class="text-lg sm:text-xl font-semibold break-words"> Backend cache server connection pooling </p> <div class="mt-3 flex gap-1 text-sm"> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> DevOps </span> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> </div> <p class="mt-2 sm:mt-3 text-sm sm:text-base font-normal break-words"> We saw an unusual bug yesterday evening where one customer status page was not correctly flushed from our CDN cache when a notice was updated. Whilst it has ... </p> </a> <div class="mt-3"> <a href="/notices/xqbwfw7js9zifejw-backend-cache-server-connection-pooling" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> View notice → </a> </div> </div> <div class="border-solid border-2 border-gray-500 dark:border-gray-400 rounded-lg p-4 sm:p-6 text-left transition ease-in-out hover:-translate-y-1 hover:shadow-md duration-300 overflow-hidden"> <div class="mb-3 flex flex-col gap-3"> <div class="h-1 w-8 bg-gray-500 dark:bg-gray-400 rounded-full"></div> <small class="block text-gray-900/60 italic dark:text-gray-100/60"> <time datetime="2024-11-13T10:20:26+0000"> 10:20 UTC - 13 November 2024 </time> </small> </div> <a href="/notices/vedvwfoaclyp5pfk-improved-breadcrumb-navigation" class="mt-1 sm:mt-2 block text-gray-900 dark:text-gray-100"> <p class="text-lg sm:text-xl font-semibold break-words"> Improved breadcrumb navigation </p> <div class="mt-3 flex gap-1 text-sm"> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Improvement </span> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> </div> <p class="mt-2 sm:mt-3 text-sm sm:text-base font-normal break-words"> We have made several improvements to the breadcrumb navigation in the Management UI to make it easier to return to the root status page. The existing breadcr... </p> </a> <div class="mt-3"> <a href="/notices/vedvwfoaclyp5pfk-improved-breadcrumb-navigation" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> View notice → </a> </div> </div> <div class="border-solid border-2 border-gray-500 dark:border-gray-400 rounded-lg p-4 sm:p-6 text-left transition ease-in-out hover:-translate-y-1 hover:shadow-md duration-300 overflow-hidden"> <div class="mb-3 flex flex-col gap-3"> <div class="h-1 w-8 bg-gray-500 dark:bg-gray-400 rounded-full"></div> <small class="block text-gray-900/60 italic dark:text-gray-100/60"> <time datetime="2024-11-12T13:17:33+0000"> 13:17 UTC - 12 November 2024 </time> </small> </div> <a href="/notices/1hwmay5hc6yhrdiw-further-groundwork-for-the-new-pages-ui" class="mt-1 sm:mt-2 block text-gray-900 dark:text-gray-100"> <p class="text-lg sm:text-xl font-semibold break-words"> Further groundwork for the new Pages UI </p> <div class="mt-3 flex gap-1 text-sm"> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Prerelease </span> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> </div> <p class="mt-2 sm:mt-3 text-sm sm:text-base font-normal break-words"> Another round of behind-the-scenes improvements in preparation for the new Pages UI, this time focussed on how you navigate to the new UI, and switch between... </p> </a> <div class="mt-3"> <a href="/notices/1hwmay5hc6yhrdiw-further-groundwork-for-the-new-pages-ui" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> View notice → </a> </div> </div> <div class="border-solid border-2 border-gray-500 dark:border-gray-400 rounded-lg p-4 sm:p-6 text-left transition ease-in-out hover:-translate-y-1 hover:shadow-md duration-300 overflow-hidden"> <div class="mb-3 flex flex-col gap-3"> <div class="h-1 w-8 bg-gray-500 dark:bg-gray-400 rounded-full"></div> <small class="block text-gray-900/60 italic dark:text-gray-100/60"> <time datetime="2024-11-12T10:51:27+0000"> 10:51 UTC - 12 November 2024 </time> </small> </div> <a href="/notices/vhccf6pxdbcehk4g-removed-page-layout-step-from-the-new-page-wizard" class="mt-1 sm:mt-2 block text-gray-900 dark:text-gray-100"> <p class="text-lg sm:text-xl font-semibold break-words"> Removed "Page Layout" step from the new page wizard </p> <div class="mt-3 flex gap-1 text-sm"> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Cleanup </span> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> </div> <p class="mt-2 sm:mt-3 text-sm sm:text-base font-normal break-words"> As part of our plans to redesign how customers manage status pages in their accounts, we have just removed the "Page Layout" step from the wizard when buildi... </p> </a> <div class="mt-3"> <a href="/notices/vhccf6pxdbcehk4g-removed-page-layout-step-from-the-new-page-wizard" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> View notice → </a> </div> </div> <div class="border-solid border-2 border-gray-500 dark:border-gray-400 rounded-lg p-4 sm:p-6 text-left transition ease-in-out hover:-translate-y-1 hover:shadow-md duration-300 overflow-hidden"> <div class="mb-3 flex flex-col gap-3"> <div class="h-1 w-8 bg-gray-500 dark:bg-gray-400 rounded-full"></div> <small class="block text-gray-900/60 italic dark:text-gray-100/60"> <time datetime="2024-11-12T10:05:30+0000"> 10:05 UTC - 12 November 2024 </time> </small> </div> <a href="/notices/gtt1psnujynahou2-groundwork-for-a-new-pages-ui" class="mt-1 sm:mt-2 block text-gray-900 dark:text-gray-100"> <p class="text-lg sm:text-xl font-semibold break-words"> Groundwork for a new Pages UI </p> <div class="mt-3 flex gap-1 text-sm"> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Cleanup </span> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> </div> <p class="mt-2 sm:mt-3 text-sm sm:text-base font-normal break-words"> We are planning a new UI for customers to list, add, update, and delete status pages in their accounts. This will make life much easier for customers running... </p> </a> <div class="mt-3"> <a href="/notices/gtt1psnujynahou2-groundwork-for-a-new-pages-ui" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> View notice → </a> </div> </div> <div class="border-solid border-2 border-gray-500 dark:border-gray-400 rounded-lg p-4 sm:p-6 text-left transition ease-in-out hover:-translate-y-1 hover:shadow-md duration-300 overflow-hidden"> <div class="mb-3 flex flex-col gap-3"> <div class="h-1 w-8 bg-gray-500 dark:bg-gray-400 rounded-full"></div> <small class="block text-gray-900/60 italic dark:text-gray-100/60"> <time datetime="2024-11-11T09:34:03+0000"> 09:34 UTC - 11 November 2024 </time> </small> </div> <a href="/notices/oshztntz9ecddfll-improvements-to-automated-browser-testing" class="mt-1 sm:mt-2 block text-gray-900 dark:text-gray-100"> <p class="text-lg sm:text-xl font-semibold break-words"> Improvements to automated browser testing </p> <div class="mt-3 flex gap-1 text-sm"> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> DevOps </span> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> </div> <p class="mt-2 sm:mt-3 text-sm sm:text-base font-normal break-words"> We have a fairly comprehensive set of automated browser tests that run regularly during the development and deployment of the application, aimed at catching ... </p> </a> <div class="mt-3"> <a href="/notices/oshztntz9ecddfll-improvements-to-automated-browser-testing" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> View notice → </a> </div> </div> <div class="border-solid border-2 border-gray-500 dark:border-gray-400 rounded-lg p-4 sm:p-6 text-left transition ease-in-out hover:-translate-y-1 hover:shadow-md duration-300 overflow-hidden"> <div class="mb-3 flex flex-col gap-3"> <div class="h-1 w-8 bg-gray-500 dark:bg-gray-400 rounded-full"></div> <small class="block text-gray-900/60 italic dark:text-gray-100/60"> <time datetime="2024-11-06T14:16:52+0000"> 14:16 UTC - 6 November 2024 </time> </small> </div> <a href="/notices/wr4cogly9yskamca-announcing-impacted-components-in-notice-cards" class="mt-1 sm:mt-2 block text-gray-900 dark:text-gray-100"> <p class="text-lg sm:text-xl font-semibold break-words"> Announcing impacted components in notice cards </p> <div class="mt-3 flex gap-1 text-sm"> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Feature </span> </div> <p class="mt-2 sm:mt-3 text-sm sm:text-base font-normal break-words"> Today we have released an exciting little feature that improves the notice cards displayed on your status page. These cards now include the names of key comp... </p> </a> <div class="mt-3"> <a href="/notices/wr4cogly9yskamca-announcing-impacted-components-in-notice-cards" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> View notice → </a> </div> </div> <div class="border-solid border-2 border-gray-500 dark:border-gray-400 rounded-lg p-4 sm:p-6 text-left transition ease-in-out hover:-translate-y-1 hover:shadow-md duration-300 overflow-hidden"> <div class="mb-3 flex flex-col gap-3"> <div class="h-1 w-8 bg-gray-500 dark:bg-gray-400 rounded-full"></div> <small class="block text-gray-900/60 italic dark:text-gray-100/60"> <time datetime="2024-11-05T11:10:01+0000"> 11:10 UTC - 5 November 2024 </time> </small> </div> <a href="/notices/sy2338wzcwei8bga-fixed-bug-when-updating-components-on-a-notice" class="mt-1 sm:mt-2 block text-gray-900 dark:text-gray-100"> <p class="text-lg sm:text-xl font-semibold break-words"> Fixed bug when updating components on a notice </p> <div class="mt-3 flex gap-1 text-sm"> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Bugfix </span> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> </div> <p class="mt-2 sm:mt-3 text-sm sm:text-base font-normal break-words"> Over the weekend, a customer reported a bug that prevented them from updating the components assigned to an existing planned maintenance. After some testing,... </p> </a> <div class="mt-3"> <a href="/notices/sy2338wzcwei8bga-fixed-bug-when-updating-components-on-a-notice" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> View notice → </a> </div> </div> <div class="border-solid border-2 border-gray-500 dark:border-gray-400 rounded-lg p-4 sm:p-6 text-left transition ease-in-out hover:-translate-y-1 hover:shadow-md duration-300 overflow-hidden"> <div class="mb-3 flex flex-col gap-3"> <div class="h-1 w-8 bg-gray-500 dark:bg-gray-400 rounded-full"></div> <small class="block text-gray-900/60 italic dark:text-gray-100/60"> <time datetime="2024-10-30T16:53:00+0000"> 16:53 UTC - 30 October 2024 </time> </small> </div> <a href="/notices/pumfzqznsio4vqxa-background-preparation-for-platform-upgrades" class="mt-1 sm:mt-2 block text-gray-900 dark:text-gray-100"> <p class="text-lg sm:text-xl font-semibold break-words"> Background preparation for platform upgrades </p> <div class="mt-3 flex gap-1 text-sm"> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Cleanup </span> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> </div> <p class="mt-2 sm:mt-3 text-sm sm:text-base font-normal break-words"> A whole bunch of behind-the-scenes code cleanup, dependency upgrades and refactoring in preparation for some larger platform improvements coming soon. These ... </p> </a> <div class="mt-3"> <a href="/notices/pumfzqznsio4vqxa-background-preparation-for-platform-upgrades" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> View notice → </a> </div> </div> <div class="border-solid border-2 border-gray-500 dark:border-gray-400 rounded-lg p-4 sm:p-6 text-left transition ease-in-out hover:-translate-y-1 hover:shadow-md duration-300 overflow-hidden"> <div class="mb-3 flex flex-col gap-3"> <div class="h-1 w-8 bg-gray-500 dark:bg-gray-400 rounded-full"></div> <small class="block text-gray-900/60 italic dark:text-gray-100/60"> <time datetime="2024-10-28T15:08:00+0000"> 15:08 UTC - 28 October 2024 </time> </small> </div> <a href="/notices/ktwlxhsi1kp5qm0e-replaced-website-plugin-with-the-new-status-badge" class="mt-1 sm:mt-2 block text-gray-900 dark:text-gray-100"> <p class="text-lg sm:text-xl font-semibold break-words"> Replaced "Website Plugin" with the new "Status Badge" </p> <div class="mt-3 flex gap-1 text-sm"> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Changelog </span> <span class="inline-flex rounded-full bg-gray-200 px-2.5 py-1 text-gray-600 dark:bg-gray-700 dark:text-gray-400"> Feature </span> </div> <p class="mt-2 sm:mt-3 text-sm sm:text-base font-normal break-words"> We have removed the installation instructions for the "Website Plugin" from the Management UI and replaced them with instructions for our new "Status Badge" ... </p> </a> <div class="mt-3"> <a href="/notices/ktwlxhsi1kp5qm0e-replaced-website-plugin-with-the-new-status-badge" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> View notice → </a> </div> </div> </div> </div> </div> <div class="mb-8 lg:mb-16"> <h4 class="text-lg font-semibold text-gray-900 dark:text-gray-100"> Previous Notices </h4> <p class="my-3 text-base text-gray-500"> <span> Last notice at <time datetime="2024-11-20T10:21:14+0000"> 10:21 UTC - 20 November 2024 </time> </span> </p> <a href="/history/2024/november" class="text-base font-semibold text-brand-primary-600 hover:text-brand-primary-400 dark:text-brand-dm-primary-600 dark:hover:text-brand-dm-primary-400"> History for Sorry™ Service Status → </a> </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"> © 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"> | </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&utm_medium=status-page-footer&utm_source=status.sorryapp.com">Powered by Sorry™</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™</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™</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="lT5QYe1pHOraw2knKNpUDXcKglD9yktZmo+oJM89jk8="></script> <script src="https://assets0.sorryapp.com/themes/000/025/382/assets/vendor.min.js?1730896198" nonce="lT5QYe1pHOraw2knKNpUDXcKglD9yktZmo+oJM89jk8="></script> <script src="https://assets2.sorryapp.com/themes/000/025/382/assets/main.min.js?1730896198" nonce="lT5QYe1pHOraw2knKNpUDXcKglD9yktZmo+oJM89jk8=" type="module"></script> <script id="initialSubscriberPayload" nonce="lT5QYe1pHOraw2knKNpUDXcKglD9yktZmo+oJM89jk8="> 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>